hssqlppp 0.2.0 → 0.3.0
raw patch · 83 files changed
+34958/−59675 lines, 83 filesdep +transformersdep −HDBCdep −HDBC-postgresqldep −HUnitdep ~basedep ~containersdep ~mtl
Dependencies added: transformers
Dependencies removed: HDBC, HDBC-postgresql, HUnit, Pipe, cmdargs, directory, filepath, haskell-src-exts, haskell98, pretty-show, process, regex-posix, template-haskell, test-framework, test-framework-hunit
Dependency ranges changed: base, containers, mtl, parsec, pretty, syb, uniplate
Files
- Database/HsSqlPpp/Ast/Annotation.lhs +0/−20
- Database/HsSqlPpp/Ast/Ast.lhs +0/−95
- Database/HsSqlPpp/Ast/Catalog.lhs +0/−63
- Database/HsSqlPpp/Ast/SqlTypes.lhs +0/−26
- Database/HsSqlPpp/Ast/TypeChecker.lhs +0/−42
- Database/HsSqlPpp/AstInternals/AnnotationUtils.lhs +0/−27
- Database/HsSqlPpp/AstInternals/AstAnnotation.lhs +0/−218
- Database/HsSqlPpp/AstInternals/AstInternal.ag +0/−783
- Database/HsSqlPpp/AstInternals/AstInternal.hs +0/−16222
- Database/HsSqlPpp/AstInternals/Catalog/CatalogInternal.lhs +0/−492
- Database/HsSqlPpp/AstInternals/Catalog/CatalogReader.lhs +0/−258
- Database/HsSqlPpp/AstInternals/Catalog/DefaultTemplate1Catalog.lhs +0/−29023
- Database/HsSqlPpp/AstInternals/TypeChecking/CreateFunction.ag +0/−135
- Database/HsSqlPpp/AstInternals/TypeChecking/CreateTable.ag +0/−101
- Database/HsSqlPpp/AstInternals/TypeChecking/Dml.ag +0/−236
- Database/HsSqlPpp/AstInternals/TypeChecking/Drops.ag +0/−31
- Database/HsSqlPpp/AstInternals/TypeChecking/ErrorUtils.lhs +0/−57
- Database/HsSqlPpp/AstInternals/TypeChecking/Expressions.ag +0/−342
- Database/HsSqlPpp/AstInternals/TypeChecking/LocalBindings.lhs +0/−120
- Database/HsSqlPpp/AstInternals/TypeChecking/LocalIdentifierBindings.lhs +0/−238
- Database/HsSqlPpp/AstInternals/TypeChecking/Misc.ag +0/−171
- Database/HsSqlPpp/AstInternals/TypeChecking/MiscCreates.ag +0/−79
- Database/HsSqlPpp/AstInternals/TypeChecking/Plpgsql.ag +0/−87
- Database/HsSqlPpp/AstInternals/TypeChecking/SelectLists.ag +0/−184
- Database/HsSqlPpp/AstInternals/TypeChecking/SelectStatement.ag +0/−174
- Database/HsSqlPpp/AstInternals/TypeChecking/Statements.ag +0/−122
- Database/HsSqlPpp/AstInternals/TypeChecking/TableRefs.ag +0/−270
- Database/HsSqlPpp/AstInternals/TypeChecking/TypeChecking.ag +0/−235
- Database/HsSqlPpp/AstInternals/TypeChecking/TypeConversion.lhs +0/−571
- Database/HsSqlPpp/AstInternals/TypeType.lhs +0/−385
- Database/HsSqlPpp/Dbms/DBAccess.lhs +0/−59
- Database/HsSqlPpp/Dbms/DBAccess2.lhs +0/−184
- Database/HsSqlPpp/Dbms/DBAccess3.lhs +0/−284
- Database/HsSqlPpp/Dbms/DBUtils.lhs +0/−63
- Database/HsSqlPpp/Dbms/DatabaseLoader.lhs +0/−217
- Database/HsSqlPpp/Dbms/MakeLabels.hs +0/−126
- Database/HsSqlPpp/Dbms/WrapLib.lhs +0/−15
- Database/HsSqlPpp/Dbms/WrapperGen.lhs +0/−275
- Database/HsSqlPpp/Extensions/ChaosExtensions.lhs +0/−497
- Database/HsSqlPpp/Here.lhs +0/−15
- Database/HsSqlPpp/HsText/Commands.lhs +0/−46
- Database/HsSqlPpp/HsText/HsText.lhs +0/−72
- Database/HsSqlPpp/Parsing/Lexer.lhs +0/−298
- Database/HsSqlPpp/Parsing/ParseErrors.lhs +0/−76
- Database/HsSqlPpp/Parsing/Parser.lhs +0/−1510
- Database/HsSqlPpp/PrettyPrinter/AnnotateSource.lhs +0/−125
- Database/HsSqlPpp/PrettyPrinter/PrettyPrinter.lhs +0/−683
- Database/HsSqlPpp/Tests/DatabaseLoaderTests.lhs +0/−33
- Database/HsSqlPpp/Tests/ExtensionTests.lhs +0/−180
- Database/HsSqlPpp/Tests/LocalBindingsTests.lhs +0/−225
- Database/HsSqlPpp/Tests/ParameterizedStatementTests.lhs +0/−147
- Database/HsSqlPpp/Tests/ParserTests.lhs +0/−1262
- Database/HsSqlPpp/Tests/RoundtripTests.lhs +0/−249
- Database/HsSqlPpp/Tests/TypeCheckTests.lhs +0/−1119
- Database/HsSqlPpp/Utils.lhs +0/−109
- HsSqlSystem.lhs +0/−681
- LICENSE +1/−1
- README +8/−114
- THANKS +2/−0
- hssqlppp.cabal +55/−203
- src/Database/HsSqlPpp/Annotation.lhs +23/−0
- src/Database/HsSqlPpp/Ast.lhs +97/−0
- src/Database/HsSqlPpp/AstInternals/AnnotationUtils.lhs +28/−0
- src/Database/HsSqlPpp/AstInternals/AstAnnotation.lhs +194/−0
- src/Database/HsSqlPpp/AstInternals/AstAnti.hs +967/−0
- src/Database/HsSqlPpp/AstInternals/AstInternal.hs +14400/−0
- src/Database/HsSqlPpp/AstInternals/Catalog/CatalogInternal.lhs +531/−0
- src/Database/HsSqlPpp/AstInternals/Catalog/DefaultTemplate1Catalog.lhs +13044/−0
- src/Database/HsSqlPpp/AstInternals/TypeChecking/ErrorUtils.lhs +30/−0
- src/Database/HsSqlPpp/AstInternals/TypeChecking/LocalBindings.lhs +20/−0
- src/Database/HsSqlPpp/AstInternals/TypeChecking/LocalBindingsInternal.lhs +740/−0
- src/Database/HsSqlPpp/AstInternals/TypeChecking/TypeConversion.lhs +668/−0
- src/Database/HsSqlPpp/AstInternals/TypeChecking/Utils.lhs +127/−0
- src/Database/HsSqlPpp/AstInternals/TypeType.lhs +421/−0
- src/Database/HsSqlPpp/Catalog.lhs +59/−0
- src/Database/HsSqlPpp/Parser.lhs +19/−0
- src/Database/HsSqlPpp/Parsing/Lexer.lhs +347/−0
- src/Database/HsSqlPpp/Parsing/ParseErrors.lhs +76/−0
- src/Database/HsSqlPpp/Parsing/ParserInternal.lhs +1968/−0
- src/Database/HsSqlPpp/Pretty.lhs +897/−0
- src/Database/HsSqlPpp/TypeChecker.lhs +45/−0
- src/Database/HsSqlPpp/Types.lhs +25/−0
- src/Database/HsSqlPpp/Utils/Utils.lhs +166/−0
− Database/HsSqlPpp/Ast/Annotation.lhs
@@ -1,20 +0,0 @@-Copyright 2009 Jake Wheat--This is the public module to the annotation data types and support-functions (not including those that depend on the ast data types).--> {- | Contains the annotation data types and a few auxiliary functions.-> -}--> module Database.HsSqlPpp.Ast.Annotation-> (-> -- * Annotation data types-> Annotation-> ,AnnotationElement(..)-> ,StatementType(..)-> ,stripAnnotations-> ,updateAnnotation-> ,getAnnotation-> ) where--> import Database.HsSqlPpp.AstInternals.AstAnnotation
− Database/HsSqlPpp/Ast/Ast.lhs
@@ -1,95 +0,0 @@-Copyright 2009 Jake Wheat--This is the public module for the ast nodes.--> {- | This module contains the ast node data types. They are very-> permissive, in that they allow a lot of invalid SQL to be-> represented. The type checking process should catch all invalid-> trees, but doesn't quite manage at the moment. Sorry about all-> the seemingly pointless type synonyms below, they are an-> artefact of using UUAGC. You can see labels for the fields by-> looking at the ag source here:-> <http://bazaar.launchpad.net/~jakewheat/hssqlppp/trunk/annotate/head:/Database/HsSqlPpp/AstInternals/AstInternal.ag>-> -}--> module Database.HsSqlPpp.Ast.Ast-> (-> -- * Main nodes-> StatementList-> ,Statement (..)-> ,Expression (..)-> ,SelectExpression (..)-> -- * Components-> -- ** Selects-> ,SelectList (..)-> ,SelectItem (..)-> ,TableRef (..)-> ,TableAlias(..)-> ,JoinExpression (..)-> ,JoinType (..)-> ,Natural (..)-> ,CombineType (..)-> ,Direction (..)-> ,Distinct (..)-> ,InList (..)-> ,LiftFlavour (..)-> ,FrameClause(..)-> -- ** dml-> ,SetClause (..)-> ,CopySource (..)-> ,RestartIdentity (..)-> -- ** ddl-> ,AttributeDef (..)-> ,RowConstraint (..)-> ,Constraint (..)-> ,AlterTableAction(..)-> ,TypeAttributeDef (..)-> ,TypeName (..)-> ,DropType (..)-> ,IfExists (..)-> ,Cascade (..)-> ,TriggerWhen(..)-> ,TriggerEvent(..)-> ,TriggerFire(..)-> -- ** functions-> ,FnBody (..)-> ,ParamDef (..)-> ,VarDef (..)-> ,RaiseType (..)-> ,Volatility (..)-> ,Language (..)-> -- ** misc-> ,SetValue(..)-> -- ** typedefs-> ,ExpressionListStatementListPairList-> ,ExpressionListStatementListPair-> ,ExpressionList-> ,MaybeSelectList-> ,StringList-> ,ParamDefList-> ,AttributeDefList-> ,ConstraintList-> ,TypeAttributeDefList-> ,TypeNameList-> ,StringTypeNameListPair-> ,StringTypeNameListPairList-> ,ExpressionStatementListPairList-> ,SetClauseList-> ,CaseExpressionListExpressionPairList-> ,MaybeExpression-> ,MaybeBoolExpression-> ,TableRefList-> ,ExpressionListList-> ,SelectItemList-> ,OnExpr-> ,RowConstraintList-> ,VarDefList-> ,ExpressionStatementListPair-> ,CaseExpressionListExpressionPair-> ,CaseExpressionList-> ,ExpressionDirectionPair-> ,ExpressionDirectionPairList-> ) where--> import Database.HsSqlPpp.AstInternals.AstInternal-
− Database/HsSqlPpp/Ast/Catalog.lhs
@@ -1,63 +0,0 @@-Copyright 2009 Jake Wheat--This is the public api to the catalog data type, it just forwards-the public part of CatalogInternal, which is the module used by-the type checking code.--> {- | This module contains the database catalog data types and helper functions.->-> The catalog data type serves the following purposes:->-> * Contains all the catalog information needed to type check against-> an existing database.->-> * A copy of the catalog information from a default template1-> database is included - 'defaultTemplate1Catalog'.->-> * It is used internally to keep track of updates to the catalog-> whilst running an annotation process (e.g. so that a select can-> type check against a create table given in the same source). It-> is also used to track other identifier types, such as attribute-> references in select expressions, and argument and variable-> types inside create function statements.->-> You can see what kind of stuff is contained in the Catalog type-> by looking at the 'CatalogUpdate' type.->-> -}--> module Database.HsSqlPpp.Ast.Catalog-> (-> -- * Data types-> Catalog-> -- ** Updates-> ,CatalogUpdate(..)-> ,ppCatUpdate-> -- ** bits and pieces-> ,CastContext(..)-> ,CompositeFlavour(..)-> ,CompositeDef-> ,FunctionPrototype-> ,DomainDefinition-> ,FunFlav(..)-> -- * 'Catalog' values-> ,emptyCatalog-> ,defaultCatalog-> ,defaultTemplate1Catalog-> -- * 'Catalog' comparison-> ,CatalogDiff(..)-> ,compareCatalogs-> ,ppCatDiff-> -- * Functions-> ,readCatalogFromDatabase-> ,updateCatalog-> ,deconstructCatalog-> -- * operator utils-> ,OperatorType(..)-> ,getOperatorType-> ,isOperatorName-> ) where--> import Database.HsSqlPpp.AstInternals.Catalog.CatalogInternal-> import Database.HsSqlPpp.AstInternals.Catalog.CatalogReader-> import Database.HsSqlPpp.AstInternals.Catalog.DefaultTemplate1Catalog
− Database/HsSqlPpp/Ast/SqlTypes.lhs
@@ -1,26 +0,0 @@-Copyright 2009 Jake Wheat--This is the public module to the SQL data types, mainly from TypeType.---> {- | Contains the SQL data types, type errors, and a few supporting-> functions.-> -}--> module Database.HsSqlPpp.Ast.SqlTypes-> (-> -- * SQL types-> Type (..)-> ,PseudoType (..)-> -- * type aliases-> -- | aliases for all the sql types with multiple names-> -- these give you the canonical names-> ,typeSmallInt,typeBigInt,typeInt,typeNumeric,typeFloat4-> ,typeFloat8,typeVarChar,typeChar,typeBool-> ,canonicalizeTypeName-> ,canonicalizeTypes-> -- * Type errors-> ,TypeError (..)-> ) where--> import Database.HsSqlPpp.AstInternals.TypeType
− Database/HsSqlPpp/Ast/TypeChecker.lhs
@@ -1,42 +0,0 @@-Copyright 2009 Jake Wheat--This is the public module for the type checking functionality.--> {- | Contains the data types and functions for annotating-> an ast and working with annotated trees, including the-> representations of SQL data types.->-> Annotations:->-> * are attached to most of the ast node data types, but not quite all of them;->-> * types annotations are attached to most nodes during type checking;->-> * type errors are attached to the lowest down node that the type error is detected at;->-> * nodes who fail the type check or whose type depends on a node with a type error are-> given the type 'TypeCheckFailed';->-> * each statement has an additional 'StatementInfo' annotation attached to it;->-> * the parser fills in the source position annotation in every annotatable ast node.->-> -}-> module Database.HsSqlPpp.Ast.TypeChecker-> (-> -- * typechecking/ annotation functions-> typeCheck-> ,typeCheckPS-> ,typeCheckExpression-> -- * Annotated tree utils-> ,getTopLevelTypes-> ,getTopLevelInfos-> ,getTopLevelCatUpdates-> ,getTypeErrors-> ,getStatementAnnotations-> ) where--> import Database.HsSqlPpp.AstInternals.AstInternal-> import Database.HsSqlPpp.AstInternals.AstAnnotation-> import Database.HsSqlPpp.AstInternals.AnnotationUtils-
− Database/HsSqlPpp/AstInternals/AnnotationUtils.lhs
@@ -1,27 +0,0 @@-Copyright 2009 Jake Wheat--This module contains some utilities and generic code for working with-asts and annotations which depend on the ast types.--> {-# OPTIONS_HADDOCK hide #-}--> module Database.HsSqlPpp.AstInternals.AnnotationUtils-> (-> getStatementAnnotations-> ) where--> import Data.Generics--> import Database.HsSqlPpp.AstInternals.AstInternal-> import Database.HsSqlPpp.AstInternals.AstAnnotation--> -- | Run through the ast and return all the annotations attached to-> -- a Statement node.-> getStatementAnnotations :: Data a => a -> [Annotation]-> getStatementAnnotations st =-> everything (++) (mkQ [] ga) st-> where-> ga :: Statement -> [Annotation]-> ga s = [getAnnotation s]--
− Database/HsSqlPpp/AstInternals/AstAnnotation.lhs
@@ -1,218 +0,0 @@-Copyright 2009 Jake Wheat--The annotation data types and utilities for working with them.--Annotations are used to store source positions, types, errors,-warnings, catalog deltas, information, and other stuff a client might-want to use when looking at an ast. Internal annotations which are-used in the type-checking/ annotation process use the attribute-grammar code and aren't exposed.--> {-# LANGUAGE ExistentialQuantification, DeriveDataTypeable,ScopedTypeVariables,-> RankNTypes,FlexibleContexts #-}-> {-# OPTIONS_HADDOCK hide #-}--> module Database.HsSqlPpp.AstInternals.AstAnnotation-> (-> Annotation-> ,AnnotationElement(..)-> --,stripAnnotations-> ,getTopLevelTypes-> ,getTopLevelInfos-> ,getTopLevelCatUpdates-> ,getTypeAnnotation-> ,getTypeErrors-> ,stripAnnotations-> ,filterAnnotations-> ,updateAnnotation-> ,getAnnotation-> ,getAnnotations-> --,getTypeErrors-> --,pack-> ,StatementType(..)-> ,getSIAnnotation-> ) where--> import Data.Generics-> import Control.Arrow--> import Database.HsSqlPpp.AstInternals.TypeType-> import Database.HsSqlPpp.AstInternals.Catalog.CatalogInternal--> -- | Annotation type - one of these is attached to most of the-> -- data types used in the ast.-> type Annotation = [AnnotationElement]--> -- | the elements of an annotation. Source positions are generated by-> -- the parser, the rest come from the separate ast annotation process.-> data AnnotationElement = SourcePos String Int Int-> | TypeAnnotation Type-> | TypeErrorA TypeError-> | StatementTypeA StatementType-> | CatUpdates [CatalogUpdate]-> | FunctionPrototypeA FunctionPrototype-> | InferredType Type-> deriving (Eq, Show,Typeable,Data)--Use syb to pull annotation values from an ast.--I like to cut and paste code from the internet which I don't-understand, then keep changing it till it compiles and passes the tests.---> -- | run through the ast, and pull the type annotation from each-> -- of the top level items.-> getTopLevelTypes :: Data a => [a] -> [Type]-> getTopLevelTypes st =-> getTopLevelXs typeAnnot st-> where-> typeAnnot :: Annotation -> [Type]-> typeAnnot (x:xs) = case x of-> TypeAnnotation t -> [t]-> _ -> typeAnnot xs-> typeAnnot [] = [TypeCheckFailed] -- error "couldn't find type annotation"--> getTopLevelXs :: forall a b a1.-> (Data a1, Typeable b) =>-> (b -> [a]) -> a1 -> [a]-> getTopLevelXs st = everythingOne (++) $ mkQ [] st---> getTypeAnnotation :: Data a => a -> Type-> getTypeAnnotation st =-> case getTopLevelX typeAnnot st of-> x:_ -> x-> [] -> TypeCheckFailed-> where-> typeAnnot :: Annotation -> [Type]-> typeAnnot (x:xs) = case x of-> TypeAnnotation t -> [t]-> _ -> typeAnnot xs-> typeAnnot [] = [TypeCheckFailed]--> getTopLevelX :: forall a b a1.-> (Data a1, Typeable b) =>-> (b -> [a]) -> a1 -> [a]-> getTopLevelX p = everythingOne (++) (mkQ [] p)--- > everythingTwo :: (r -> r -> r) -> GenericQ r -> GenericQ r- > everythingTwo k f x- > = foldl k (f x) (gmapQ (everythingOne k f) x)--> everythingZero :: (r -> r -> r) -> GenericQ r -> GenericQ r-> everythingZero k f x-> = foldl k (f x) (gmapQ f x)--> everythingOne :: (r -> r -> r) -> GenericQ r -> GenericQ r-> everythingOne k f x-> = foldl k (f x) (gmapQ (everythingZero k f) x)--> getSIAnnotation :: Annotation -> [Maybe StatementType]-> getSIAnnotation (x:xs) = case x of-> StatementTypeA t -> [Just t]-> _ -> getSIAnnotation xs-> getSIAnnotation [] = [Nothing]--> getEuAnnotation :: Annotation -> [[CatalogUpdate]]-> getEuAnnotation (x:xs) = case x of-> CatUpdates t -> t:getEuAnnotation xs-> _ -> getEuAnnotation xs-> getEuAnnotation [] = []---> -- | Run through the ast given and return a list of statementtypes-> -- from the top level items.-> getTopLevelInfos :: Data a => [a] -> [Maybe StatementType]-> getTopLevelInfos = getTopLevelXs getSIAnnotation--> getTopLevelCatUpdates :: Data a => [a] -> [[CatalogUpdate]]-> getTopLevelCatUpdates = getTopLevelXs getEuAnnotation--> data StatementType = StatementType [Type] [(String,Type)]-> deriving (Eq,Show,Typeable,Data)---question:-if a node has no source position e.g. the all in select all or select- distinct may correspond to a token or may be synthesized as the- default if neither all or distinct is present. Should this have the- source position of where the token would have appeared, should it- inherit it from its parent, should there be a separate ctor to- represent a fake node with no source position?---hack job, often not interested in the source positions when testing-the asts produced, so this function will reset all the source-positions to empty ("", 0, 0) so we can compare them for equality, etc.-without having to get the positions correct.--> -- | strip all the annotations from a tree. E.g. can be used to compare-> -- two asts are the same, ignoring any source position annotation differences.-> stripAnnotations :: (Data a) => a -> a-> stripAnnotations = filterAnnotations (const False)-- >> everywhere (mkT stripAn)- > where- > stripAn :: [AnnotationElement] -> [AnnotationElement]- > stripAn _ = []---> filterAnnotations :: (Data a) => (AnnotationElement -> Bool) -> a -> a-> filterAnnotations f =-> everywhere (mkT filterAnn)-> where-> filterAnn :: [AnnotationElement] -> [AnnotationElement]-> filterAnn = filter f---> -- | runs through the ast given and returns a list of all the type errors-> -- in the ast. Recurses into all ast nodes to find type errors.-> -- This is the function to use to see if an ast has passed the type checking process.-> -- Returns a Maybe SourcePos and the list of type errors for each node which has one or-> -- more type errors.-> getTypeErrors :: (Data a) => a -> [(Maybe AnnotationElement,[TypeError])]-> getTypeErrors sts =-> filter (\(_,te) -> not $ null te) $ map (gtsp &&& gte) $ getAnnotations sts-> where-> gte (a:as) = case a of-> TypeErrorA e -> e:gte as-> _ -> gte as-> gte _ = []--> gtsp (a:as) = case a of-> s@(SourcePos _ _ _) -> Just s-> _ -> gtsp as-> gtsp _ = Nothing----> -- | Update all the annotations in a tree using the function supplied-> updateAnnotation :: forall a.(Data a) =>-> (Annotation -> Annotation) -> a -> a-> updateAnnotation f = oneLevel (mkT f)--> oneLevel :: (forall a.Data a => a -> a)-> -> (forall a.Data a => a -> a)-> oneLevel f = gmapT f--> -- | get the annotation for the root of the tree passed-> getAnnotation :: forall a.(Data a) => a -> Annotation-> getAnnotation a =-> case oneLevelQ (mkQ [] f) a of-> an:_ -> an-> [] -> []-> where-> f :: Annotation -> Annotation-> f = id--> oneLevelQ :: forall a.Data a => forall u. (forall d. (Data d) => d -> u) -> a -> [u]-> oneLevelQ = gmapQ---> getAnnotations :: forall a.(Data a) =>-> a -> [Annotation]-> getAnnotations = listifyWholeLists (\(_::Annotation) -> True)--> listifyWholeLists :: Typeable b => ([b] -> Bool) -> GenericQ [[b]]-> listifyWholeLists blp = flip (synthesize id (.) (mkQ id (\bl _ -> if blp bl then (bl:) else id))) []
− Database/HsSqlPpp/AstInternals/AstInternal.ag
@@ -1,783 +0,0 @@-{--Copyright 2009 Jake Wheat--This file contains the ast nodes, and the api functions to pass an ast-and get back type information.--It uses the Utrecht University Attribute Grammar system:--http://www.cs.uu.nl/wiki/bin/view/HUT/AttributeGrammarSystem-http://www.haskell.org/haskellwiki/The_Monad.Reader/Issue4/Why_Attribute_Grammars_Matter--The attr and sem definitions are in TypeChecking.ag, which is included-into this file.--These ast nodes are both used as the result of successful parsing, and-as the input to the type checker (and the output from the type-checker), and the pretty printer.--= compiling--use--uuagc -dcfwsp --cycle --genlinepragmas AstInternal.ag--to generate a new AstInternal.hs from this file (cycle will check for-cycles - it's bad if you get any of these, and genlinepragmas mean-that you'll be able to view the original source ag positions when-there are errors or warnings compiling the generated hs file, which-you want much more often than not).--(install uuagc with-cabal install uuagc-)---}-MODULE {Database.HsSqlPpp.AstInternals.AstInternal}-{- -- {-# LANGUAGE DeriveDataTypeable,RankNTypes,ScopedTypeVariables #-}- -- {-# OPTIONS_HADDOCK hide #-}- --from the ag files:- --ast nodes- Statement (..)- ,SelectExpression (..)- ,FnBody (..)- ,SetClause (..)- ,TableRef (..)- ,TableAlias(..)- ,JoinExpression (..)- ,JoinType (..)- ,SelectList (..)- ,SelectItem (..)- ,CopySource (..)- ,AttributeDef (..)- ,RowConstraint (..)- ,AlterTableAction(..)- ,Constraint (..)- ,TypeAttributeDef (..)- ,ParamDef (..)- ,VarDef (..)- ,RaiseType (..)- ,CombineType (..)- ,Volatility (..)- ,Language (..)- ,TypeName (..)- ,DropType (..)- ,Cascade (..)- ,Direction (..)- ,Distinct (..)- ,Natural (..)- ,IfExists (..)- ,RestartIdentity (..)- ,Expression (..)- ,FrameClause(..)- ,InList (..)- ,LiftFlavour(..)- ,TriggerWhen(..)- ,TriggerEvent(..)- ,TriggerFire(..)- ,StatementList- ,ExpressionListStatementListPairList- ,ExpressionListStatementListPair- ,ExpressionList- ,StringList- ,ParamDefList- ,AttributeDefList- ,ConstraintList- ,TypeAttributeDefList- ,TypeNameList- ,StringTypeNameListPair- ,StringTypeNameListPairList- ,ExpressionStatementListPairList- ,SetClauseList- ,CaseExpressionListExpressionPairList- ,MaybeExpression- ,TableRefList- ,ExpressionListList- ,SelectItemList- ,OnExpr- ,RowConstraintList- ,VarDefList- ,ExpressionStatementListPair- ,CaseExpressionListExpressionPair- ,CaseExpressionList- ,ExpressionDirectionPair- ,ExpressionDirectionPairList- ,MaybeBoolExpression- ,MaybeSelectList- ,SetValue(..)- -- typechecking- ,typeCheck- ,typeCheckPS- ,typeCheckExpression-}--{-import Data.Maybe-import Data.List-import Debug.Trace---import Control.Monad.Error-import Data.Either-import Control.Applicative-import Data.Generics-import Data.Char-import Control.Monad.State--import Database.HsSqlPpp.AstInternals.TypeType-import Database.HsSqlPpp.AstInternals.TypeChecking.TypeConversion-import Database.HsSqlPpp.AstInternals.TypeChecking.ErrorUtils-import Database.HsSqlPpp.AstInternals.AstAnnotation-import Database.HsSqlPpp.AstInternals.Catalog.CatalogInternal-import Database.HsSqlPpp.AstInternals.TypeChecking.LocalIdentifierBindings---import Database.HsSqlPpp.AstInternals.Catalog.DefaultTemplate1Catalog-import Database.HsSqlPpp.Utils-import Data.Generics.PlateData--}--{--================================================================================--SQL top level statements--everything is chucked in here: dml, ddl, plpgsql statements---}--DATA Statement----queries-- | SelectStatement ann:Annotation ex:SelectExpression---- dml-- --table targetcolumns insertdata(values or select statement) returning- | Insert ann:Annotation- table : String- targetCols : StringList- insData : SelectExpression- returning : MaybeSelectList- --tablename setitems where returning- | Update ann:Annotation- table : String- assigns : SetClauseList- whr : MaybeBoolExpression- returning : MaybeSelectList- --tablename, where, returning- | Delete ann:Annotation- table : String- whr : MaybeBoolExpression- returning : MaybeSelectList- --tablename column names, from- | Copy ann:Annotation- table : String- targetCols : StringList- source : CopySource- --represents inline data for copy statement- | CopyData ann:Annotation insData : String- | Truncate ann:Annotation- tables: StringList- restartIdentity : RestartIdentity- cascade : Cascade---- ddl-- | CreateTable ann:Annotation- name : String- atts : AttributeDefList- cons : ConstraintList- | AlterTable ann:Annotation- name : String- actions : {[AlterTableAction]}- | CreateSequence ann:Annotation- name:String- incr:Integer- min:Integer- max:Integer- start:Integer- cache:Integer- | AlterSequence ann:Annotation- name:String- ownedBy: String- | CreateTableAs ann:Annotation- name : String- expr : SelectExpression- | CreateView ann:Annotation- name : String- expr : SelectExpression- | CreateType ann:Annotation- name : String- atts : TypeAttributeDefList- -- language name args rettype bodyquoteused body vol- | CreateFunction ann:Annotation- name : String- params : ParamDefList- rettype : TypeName- lang : Language- bodyQuote : String- body : FnBody- vol : Volatility- -- name type checkexpression- | CreateDomain ann:Annotation- name : String- typ : TypeName- checkName: String- check : MaybeBoolExpression- | CreateLanguage ann:Annotation- name:String- | CreateTrigger ann:Annotation- name:String- wh : TriggerWhen- events: {[TriggerEvent]}- tbl : String- firing : TriggerFire- fnName : String- fnArgs : {[Expression]}- -- ifexists (name,argtypes)* cascadeorrestrict- | DropFunction ann:Annotation- ifE : IfExists- sigs : StringTypeNameListPairList- cascade : Cascade- -- ifexists names cascadeorrestrict- | DropSomething ann:Annotation- dropType : DropType- ifE : IfExists- names : StringList- cascade : Cascade- | Assignment ann:Annotation- target : String- value : Expression- | Return ann:Annotation- value : (MaybeExpression)- | ReturnNext ann:Annotation- expr : Expression- | ReturnQuery ann:Annotation- sel : SelectExpression- | Raise ann:Annotation- level : RaiseType- message : String- args : ExpressionList- | NullStatement ann:Annotation- | Perform ann:Annotation- expr : Expression- | Execute ann:Annotation- expr : Expression- | ExecuteInto ann:Annotation- expr : Expression- targets : StringList- | ForSelectStatement ann:Annotation- var : String- sel : SelectExpression- sts : StatementList- | ForIntegerStatement ann:Annotation- var : String- from : Expression- to : Expression- sts : StatementList- | WhileStatement ann:Annotation- expr : Expression- sts : StatementList- | ContinueStatement ann:Annotation- --variable, list of when parts, else part- | CaseStatement ann:Annotation- val : Expression- cases : ExpressionListStatementListPairList- els : StatementList- --list is- --first if (condition, statements):elseifs(condition, statements)- --last bit is else statements- | If ann:Annotation- cases : ExpressionStatementListPairList- els : StatementList----misc-- | Set ann:Annotation name:String values:{[SetValue]}- | Notify ann:Annotation name:String---- =============================================================================----Statement components---- maybe this should be called relation valued expression?-DATA SelectExpression- | Select ann:Annotation- selDistinct : Distinct- selSelectList : SelectList- selTref : TableRefList- selWhere : MaybeBoolExpression- selGroupBy : ExpressionList- selHaving : MaybeBoolExpression- selOrderBy : ExpressionDirectionPairList- selLimit : MaybeExpression- selOffset : MaybeExpression- | CombineSelect ann:Annotation- ctype : CombineType- sel1 : SelectExpression- sel2 : SelectExpression- | Values ann:Annotation- vll:ExpressionListList--TYPE TableRefList = [TableRef]-TYPE MaybeExpression = MAYBE Expression-TYPE MaybeBoolExpression = MAYBE Expression--DATA FnBody | SqlFnBody ann:Annotation sts : StatementList- | PlpgsqlFnBody ann:Annotation vars:VarDefList sts : StatementList--DATA SetClause | SetClause ann:Annotation att:String val:Expression- | RowSetClause ann:Annotation atts:StringList vals:ExpressionList--DATA TableRef | Tref ann:Annotation- tbl:String- alias : TableAlias- | JoinedTref ann:Annotation- tbl : TableRef- nat : Natural- joinType : JoinType- tbl1 : TableRef- onExpr : OnExpr- alias : TableAlias- | SubTref ann:Annotation- sel : SelectExpression- alias : TableAlias- | TrefFun ann:Annotation- fn:Expression- alias : TableAlias--DATA TableAlias | NoAlias- | TableAlias alias:String- | FullAlias alias:String cols:{[String]}--TYPE OnExpr = MAYBE JoinExpression--DATA JoinExpression | JoinOn ann:Annotation Expression- | JoinUsing ann:Annotation StringList--DATA JoinType | Inner | LeftOuter| RightOuter | FullOuter | Cross---- select columns, into columns--DATA SelectList | SelectList ann:Annotation items:SelectItemList into:StringList---TYPE MaybeSelectList = MAYBE SelectList--DATA SelectItem | SelExp ann:Annotation ex:Expression- | SelectItem ann:Annotation ex:Expression name:String--DATA CopySource | CopyFilename String- | Stdin----name type default null constraint--DATA AttributeDef | AttributeDef ann:Annotation- name : String- typ : TypeName- def: MaybeExpression- cons : RowConstraintList----Constraints which appear attached to an individual field--DATA RowConstraint | NullConstraint ann:Annotation name:String- | NotNullConstraint ann:Annotation name:String- | RowCheckConstraint ann:Annotation name:String Expression- | RowUniqueConstraint ann:Annotation name:String- | RowPrimaryKeyConstraint ann:Annotation name:String- | RowReferenceConstraint ann:Annotation name:String- table : String- att : (Maybe String)- onUpdate : Cascade- onDelete : Cascade----constraints which appear on a separate row in the create table--DATA Constraint | UniqueConstraint ann:Annotation name:String StringList- | PrimaryKeyConstraint ann:Annotation name:String StringList- | CheckConstraint ann:Annotation name:String Expression- -- sourcecols targettable targetcols ondelete onupdate- | ReferenceConstraint ann:Annotation- name:String- atts : StringList- table : String- tableAtts : StringList- onUpdate : Cascade- onDelete : Cascade--DATA TypeAttributeDef | TypeAttDef ann:Annotation- name : String- typ : TypeName--DATA AlterTableAction | AlterColumnDefault ann:Annotation- nm : String- def : Expression- | AddConstraint ann:Annotation- con: Constraint-DATA SetValue- | SetStr ann:Annotation String- | SetId ann:Annotation String- | SetNum ann:Annotation Double--DATA TriggerWhen | TriggerBefore | TriggerAfter-DATA TriggerEvent | TInsert| TUpdate | TDelete-DATA TriggerFire | EachRow | EachStatement--DATA ParamDef | ParamDef ann:Annotation name:String typ:TypeName- | ParamDefTp ann:Annotation typ:TypeName--DATA VarDef | VarDef ann:Annotation- name : String- typ : TypeName- value : (Maybe Expression)--DATA RaiseType | RNotice | RException | RError--DATA CombineType | Except | Union | Intersect | UnionAll--DATA Volatility | Volatile | Stable | Immutable--DATA Language | Sql | Plpgsql--DATA TypeName | SimpleTypeName ann:Annotation tn:String- | PrecTypeName ann:Annotation tn:String prec:Integer- | ArrayTypeName ann:Annotation typ:TypeName- | SetOfTypeName ann:Annotation typ:TypeName--DATA DropType | Table- | Domain- | View- | Type--DATA Cascade | Cascade | Restrict--DATA Direction | Asc | Desc--DATA Distinct | Distinct | Dupes--DATA Natural | Natural | Unnatural--DATA IfExists | Require | IfExists--DATA RestartIdentity | RestartIdentity | ContinueIdentity--{--================================================================================--Expressions--Similarly to the statement type, all expressions are chucked into one-even though there are many restrictions on which expressions can-appear in different places. Maybe this should be called scalar-expression?---}-DATA Expression | IntegerLit ann:Annotation i:Integer- | FloatLit ann:Annotation d:Double- | StringLit ann:Annotation- quote : String- value : String- | NullLit ann:Annotation- | BooleanLit ann:Annotation b:Bool- | PositionalArg ann:Annotation p:Integer- | Placeholder ann:Annotation -- represents a '?'- | Cast ann:Annotation- expr:Expression- tn:TypeName- | Identifier ann:Annotation- i:String- | Case ann:Annotation- cases : CaseExpressionListExpressionPairList- els : MaybeExpression- | CaseSimple ann:Annotation- value : Expression- cases : CaseExpressionListExpressionPairList- els : MaybeExpression- | Exists ann:Annotation- sel : SelectExpression- | FunCall ann:Annotation- funName:String- args:ExpressionList- | InPredicate ann:Annotation- expr:Expression- i:Bool- list:InList- | WindowFn ann:Annotation- fn : Expression- partitionBy : ExpressionList- orderBy : ExpressionList- dir : Direction- frm : FrameClause- | ScalarSubQuery ann:Annotation- sel : SelectExpression- | LiftOperator ann:Annotation- oper:String- flav:LiftFlavour- args:ExpressionList--DATA LiftFlavour | LiftAny | LiftAll----todo: use liftoperator to implement inlist?-DATA InList | InList ann:Annotation exprs : ExpressionList- | InSelect ann:Annotation sel : SelectExpression---DATA FrameClause | FrameUnboundedPreceding- | FrameUnboundedFull- | FrameRowsUnboundedPreceding-{---list of expression flavours from postgresql with the equivalents in this ast-pg here--- -----constant/literal integerlit, floatlit, unknownstringlit, nulllit, boollit-column reference identifier-positional parameter reference positionalarg-subscripted expression funcall-field selection expression identifier-operator invocation funcall-function call funcall-aggregate expression funcall-window function call windowfn-type cast cast-scalar subquery scalarsubquery-array constructor funcall-row constructor funall--Anything that is represented in the ast as some sort of name plus a-list of expressions as arguments is treated as the same type of node:-FunCall.--This includes-symbol operators-regular function calls-keyword operators e.g. and, like (ones which can be parsed as normal- syntactic operators)-unusual syntax operators, e.g. between-unusual syntax function calls e.g. substring(x from 5 for 3)-arrayctors e.g. array[3,5,6]-rowctors e.g. ROW (2,4,6)-array subscripting--list of keyword operators (regular prefix, infix and postfix):-and, or, not-is null, is not null, isnull, notnull-is distinct from, is not distinct from-is true, is not true,is false, is not false, is unknown, is not unknown-like, not like, ilike, not ilike-similar to, not similar to-in, not in (don't include these here since the argument isn't always an expr)--unusual syntax operators and fn calls-between, not between, between symmetric-overlay, substring, trim-any, some, all--Most of unusual syntax forms and keywords operators are not yet-supported, so this is mainly a todo list.--Keyword operators are encoded with the function name as a ! followed-by a string-e.g.-operator 'and' -> FunCall "!and" ...-see keywordOperatorTypes value in AstUtils.lhs for the list of-currently supported keyword operators.---}---- some list nodes, not sure if all of these are needed as separately--- named node types--TYPE ExpressionList = [Expression]-TYPE ExpressionListList = [ExpressionList]-TYPE StringList = [String]-TYPE SetClauseList = [SetClause]-TYPE AttributeDefList = [AttributeDef]-TYPE ConstraintList = [Constraint]-TYPE TypeAttributeDefList = [TypeAttributeDef]-TYPE ParamDefList = [ParamDef]-TYPE TypeNameList = [TypeName]-TYPE StringTypeNameListPair = (String, TypeNameList)-TYPE StringTypeNameListPairList = [StringTypeNameListPair]-TYPE ExpressionListStatementListPair = (ExpressionList,StatementList)-TYPE ExpressionListStatementListPairList = [ExpressionListStatementListPair]-TYPE ExpressionStatementListPair = (Expression, StatementList)-TYPE ExpressionStatementListPairList = [ExpressionStatementListPair]-TYPE VarDefList = [VarDef]-TYPE SelectItemList = [SelectItem]-TYPE RowConstraintList = [RowConstraint]-TYPE CaseExpressionListExpressionPair = (CaseExpressionList,Expression)-TYPE CaseExpressionList = [Expression]-TYPE CaseExpressionListExpressionPairList = [CaseExpressionListExpressionPair]-TYPE StatementList = [Statement]-TYPE ExpressionDirectionPair = (Expression,Direction)-TYPE ExpressionDirectionPairList = [ExpressionDirectionPair]---- Add a root data type so we can put initial values for inherited--- attributes in the section which defines and uses those attributes--- rather than in the sem_ calls--DATA Root | Root statements:StatementList-DERIVING Root: Show---- use an expression root also to support type checking,--- etc., individual expressions--DATA ExpressionRoot | ExpressionRoot expr:Expression-DERIVING ExpressionRoot: Show--{--================================================================================--=some basic bookkeeping--attributes which every node has--}--SET AllNodes = Statement SelectExpression FnBody SetClause TableRef- JoinExpression JoinType- SelectList SelectItem CopySource AttributeDef RowConstraint- Constraint TypeAttributeDef ParamDef VarDef RaiseType- CombineType Volatility Language TypeName DropType Cascade- Direction Distinct Natural IfExists RestartIdentity- Expression InList MaybeExpression MaybeBoolExpression- ExpressionList ExpressionListList StringList SetClauseList- AttributeDefList ConstraintList TypeAttributeDefList- ParamDefList TypeNameList StringTypeNameListPair- StringTypeNameListPairList- StatementList ExpressionListStatementListPair- ExpressionListStatementListPairList ExpressionStatementListPair- ExpressionStatementListPairList VarDefList SelectItemList- RowConstraintList CaseExpressionListExpressionPair- CaseExpressionListExpressionPairList CaseExpressionList- TableRefList TableRef OnExpr LiftFlavour MaybeSelectList- SetValue TableAlias FrameClause AlterTableAction- TriggerWhen TriggerEvent TriggerFire ExpressionDirectionPair- ExpressionDirectionPairList---DERIVING AllNodes: Show,Eq,Typeable,Data---INCLUDE "TypeChecking/TypeChecking.ag"--{---================================================================================--used to use record syntax to try to insulate code from field changes,-and not have to write out loads of nothings and [] for simple selects,-but don't know how to create haskell named records from uuagc DATA-things--makeSelect :: Statement-makeSelect = Select Dupes (SelectList [SelExp (Identifier "*")] [])- Nothing Nothing [] Nothing [] Asc Nothing Nothing---================================================================================--= annotation functions---}-{-{---- | Type check multiple asts, allowing type checking references in--- later files to definitions in earlier files. This is probably--- more straightforward if you parse the files then concatenate the--- statementlists together before type checking rather than using--- this function-typeCheckMany :: Catalog -> [StatementList] -> [StatementList]-typeCheckMany cat sts =- annInt cat sts []- where- annInt e (s:ss) ress =- let (e1,res) = typeCheck e s- in annInt e1 ss (res:ress)- annInt _ [] ress = reverse ress--}---- | Takes an ast, checks against catalog passed, and adds--- annotations, including types, type errors, and statement info.--- Returns the updated catalog as well as the annotated ast.-typeCheck :: Catalog -> StatementList -> (Catalog,StatementList)-typeCheck cat sts =- let t = sem_Root (Root (fixupImplicitJoins sts))- ta = wrap_Root t Inh_Root {cat_Inh_Root = cat- ,lib_Inh_Root = emptyBindings}- tl = annotatedTree_Syn_Root ta- cat1 = producedCat_Syn_Root ta- in case tl of- Root r -> (cat1,r)---- | Unfinished version of type check which can type check an--- individual statement with ? or positional arg placeholders in--- it. Will error if the statement isn't select, update, insert or--- delete. For use in type checking embedded parameterized--- statements. Does all typechecking and annotation that the regular--- typecheck does.-typeCheckPS :: Catalog -> Statement -> Either String Statement-typeCheckPS cat st =- case st of- SelectStatement _ _ -> tc- Insert _ _ _ _ _ -> tc- Update _ _ _ _ _ -> tc- Delete _ _ _ _ -> tc- _ -> Left "requires select, update, insert or delete statement"- where- tc = let t = sem_Root (Root (fixupImplicitJoins [st]))- ta = wrap_Root t Inh_Root {cat_Inh_Root = cat- ,lib_Inh_Root = emptyBindings}- tl = annotatedTree_Syn_Root ta- cat1 = producedCat_Syn_Root ta- in case tl of- Root [st1] -> Right st1- _ -> error "impossible happened in typeCheckPS!"----- | Testing utility, mainly used to check an expression for type errors--- or to get its type.-typeCheckExpression :: Catalog -> Expression -> Expression-typeCheckExpression cat ex =- let t = sem_ExpressionRoot (ExpressionRoot (fixupImplicitJoins ex))- rt = (annotatedTree_Syn_ExpressionRoot- (wrap_ExpressionRoot t Inh_ExpressionRoot {cat_Inh_ExpressionRoot = cat- ,lib_Inh_ExpressionRoot = emptyBindings}))- in case rt of- ExpressionRoot e -> e--{--bit of a hack, to avoid rewriting the tableref type checking to be-able to do implicit joins, we just convert them in to the equivalent-explicit join--}--fixupImplicitJoins :: Data a => a -> a-fixupImplicitJoins =- transformBi $ \x ->- case x of- -- alter asts to change implicit joins into explicit joins- Select an dis sl trs@(_:_:_) whr grp hav ord lim off- -> Select an dis sl [convTrefs trs] whr grp hav ord lim off- x1 -> x1- where- convTrefs (tr:tr1:trs) = JoinedTref [] tr Unnatural Cross (convTrefs (tr1:trs)) Nothing NoAlias- convTrefs (tr:[]) = tr- convTrefs _ = error "failed doing implicit join fixup hack"--}--{---Future plans:--Investigate how much mileage can get out of making these nodes the-parse tree nodes, and using a separate ast. Hinges on how much extra-value can get from making the types more restrictive for the ast nodes-compared to the parse tree. Starting to think this won't be worth it.--Would like to turn this back into regular Haskell file, maybe could-use AspectAG instead of uuagc to make this happen?----}
− Database/HsSqlPpp/AstInternals/AstInternal.hs
@@ -1,16222 +0,0 @@----- UUAGC 0.9.13 (AstInternal.ag)-module Database.HsSqlPpp.AstInternals.AstInternal(- -- {-# LANGUAGE DeriveDataTypeable,RankNTypes,ScopedTypeVariables #-}- -- {-# OPTIONS_HADDOCK hide #-}- --from the ag files:- --ast nodes- Statement (..)- ,SelectExpression (..)- ,FnBody (..)- ,SetClause (..)- ,TableRef (..)- ,TableAlias(..)- ,JoinExpression (..)- ,JoinType (..)- ,SelectList (..)- ,SelectItem (..)- ,CopySource (..)- ,AttributeDef (..)- ,RowConstraint (..)- ,AlterTableAction(..)- ,Constraint (..)- ,TypeAttributeDef (..)- ,ParamDef (..)- ,VarDef (..)- ,RaiseType (..)- ,CombineType (..)- ,Volatility (..)- ,Language (..)- ,TypeName (..)- ,DropType (..)- ,Cascade (..)- ,Direction (..)- ,Distinct (..)- ,Natural (..)- ,IfExists (..)- ,RestartIdentity (..)- ,Expression (..)- ,FrameClause(..)- ,InList (..)- ,LiftFlavour(..)- ,TriggerWhen(..)- ,TriggerEvent(..)- ,TriggerFire(..)- ,StatementList- ,ExpressionListStatementListPairList- ,ExpressionListStatementListPair- ,ExpressionList- ,StringList- ,ParamDefList- ,AttributeDefList- ,ConstraintList- ,TypeAttributeDefList- ,TypeNameList- ,StringTypeNameListPair- ,StringTypeNameListPairList- ,ExpressionStatementListPairList- ,SetClauseList- ,CaseExpressionListExpressionPairList- ,MaybeExpression- ,TableRefList- ,ExpressionListList- ,SelectItemList- ,OnExpr- ,RowConstraintList- ,VarDefList- ,ExpressionStatementListPair- ,CaseExpressionListExpressionPair- ,CaseExpressionList- ,ExpressionDirectionPair- ,ExpressionDirectionPairList- ,MaybeBoolExpression- ,MaybeSelectList- ,SetValue(..)- -- typechecking- ,typeCheck- ,typeCheckPS- ,typeCheckExpression-) where--import Data.Maybe-import Data.List-import Debug.Trace---import Control.Monad.Error-import Data.Either-import Control.Applicative-import Data.Generics-import Data.Char-import Control.Monad.State--import Database.HsSqlPpp.AstInternals.TypeType-import Database.HsSqlPpp.AstInternals.TypeChecking.TypeConversion-import Database.HsSqlPpp.AstInternals.TypeChecking.ErrorUtils-import Database.HsSqlPpp.AstInternals.AstAnnotation-import Database.HsSqlPpp.AstInternals.Catalog.CatalogInternal-import Database.HsSqlPpp.AstInternals.TypeChecking.LocalIdentifierBindings---import Database.HsSqlPpp.AstInternals.Catalog.DefaultTemplate1Catalog-import Database.HsSqlPpp.Utils-import Data.Generics.PlateData---{-# LINE 683 "AstInternal.ag" #-}--{---- | Type check multiple asts, allowing type checking references in--- later files to definitions in earlier files. This is probably--- more straightforward if you parse the files then concatenate the--- statementlists together before type checking rather than using--- this function-typeCheckMany :: Catalog -> [StatementList] -> [StatementList]-typeCheckMany cat sts =- annInt cat sts []- where- annInt e (s:ss) ress =- let (e1,res) = typeCheck e s- in annInt e1 ss (res:ress)- annInt _ [] ress = reverse ress--}---- | Takes an ast, checks against catalog passed, and adds--- annotations, including types, type errors, and statement info.--- Returns the updated catalog as well as the annotated ast.-typeCheck :: Catalog -> StatementList -> (Catalog,StatementList)-typeCheck cat sts =- let t = sem_Root (Root (fixupImplicitJoins sts))- ta = wrap_Root t Inh_Root {cat_Inh_Root = cat- ,lib_Inh_Root = emptyBindings}- tl = annotatedTree_Syn_Root ta- cat1 = producedCat_Syn_Root ta- in case tl of- Root r -> (cat1,r)---- | Unfinished version of type check which can type check an--- individual statement with ? or positional arg placeholders in--- it. Will error if the statement isn't select, update, insert or--- delete. For use in type checking embedded parameterized--- statements. Does all typechecking and annotation that the regular--- typecheck does.-typeCheckPS :: Catalog -> Statement -> Either String Statement-typeCheckPS cat st =- case st of- SelectStatement _ _ -> tc- Insert _ _ _ _ _ -> tc- Update _ _ _ _ _ -> tc- Delete _ _ _ _ -> tc- _ -> Left "requires select, update, insert or delete statement"- where- tc = let t = sem_Root (Root (fixupImplicitJoins [st]))- ta = wrap_Root t Inh_Root {cat_Inh_Root = cat- ,lib_Inh_Root = emptyBindings}- tl = annotatedTree_Syn_Root ta- cat1 = producedCat_Syn_Root ta- in case tl of- Root [st1] -> Right st1- _ -> error "impossible happened in typeCheckPS!"----- | Testing utility, mainly used to check an expression for type errors--- or to get its type.-typeCheckExpression :: Catalog -> Expression -> Expression-typeCheckExpression cat ex =- let t = sem_ExpressionRoot (ExpressionRoot (fixupImplicitJoins ex))- rt = (annotatedTree_Syn_ExpressionRoot- (wrap_ExpressionRoot t Inh_ExpressionRoot {cat_Inh_ExpressionRoot = cat- ,lib_Inh_ExpressionRoot = emptyBindings}))- in case rt of- ExpressionRoot e -> e--{--bit of a hack, to avoid rewriting the tableref type checking to be-able to do implicit joins, we just convert them in to the equivalent-explicit join--}--fixupImplicitJoins :: Data a => a -> a-fixupImplicitJoins =- transformBi $ \x ->- case x of- -- alter asts to change implicit joins into explicit joins- Select an dis sl trs@(_:_:_) whr grp hav ord lim off- -> Select an dis sl [convTrefs trs] whr grp hav ord lim off- x1 -> x1- where- convTrefs (tr:tr1:trs) = JoinedTref [] tr Unnatural Cross (convTrefs (tr1:trs)) Nothing NoAlias- convTrefs (tr:[]) = tr- convTrefs _ = error "failed doing implicit join fixup hack"--{-# LINE 190 "AstInternal.hs" #-}--{-# LINE 81 "./TypeChecking/Misc.ag" #-}--{--================================================================================--= couple of small utils--I think this should be alright, an identifier referenced in an-expression can only have zero or one dot in it.--}--splitIdentifier :: String -> (String,String)-splitIdentifier s = let (a,b) = span (/= '.') s- in if b == ""- then ("", a)- else (a,tail b)--{--helper to make adding annotations a bit easier--}--annTypesAndErrors :: Data a => a -> Type -> [TypeError]- -> Maybe [AnnotationElement] -> a-annTypesAndErrors item nt errs add =- updateAnnotation modifier item- where- modifier = (([TypeAnnotation nt] ++ fromMaybe [] add ++- map TypeErrorA errs) ++)--{--================================================================================--proper dodgy:-1st pass is to add inferred types to the tree. This is done only for-expressions in a funcall argument list atm. Then we pull out the-placeholders after they've had this information added. Only the-placeholders in funcall argument lists will have their type inferred-in this way, to be expanded. Insert also does this currently, but in Dml.ag--This should probably be done during the typechecking phase instead,-but probably needs a proper type inferencing algorithm to be used, is-done like this for development expediency.---}-getPlaceholders :: Data a => a -> [Expression]-getPlaceholders st =- filter isPlaceholder $ everything (++) (mkQ [] ga) (setInferredTypes st)- where- ga :: Expression -> [Expression]- ga s = [s]- isPlaceholder e = case e of- PositionalArg _ _ -> True- Placeholder _ -> True- _ -> False--getPlaceholderTypes :: Data a => a -> [Type]-getPlaceholderTypes ex =- map (getInferredType . getAnnotation) $ getPlaceholders ex- where- getInferredType (InferredType t:_) = t- getInferredType (_:as) = getInferredType as- getInferredType [] = TypeCheckFailed---setInferredTypes :: Data a => a -> a-setInferredTypes =- doExprs {-. doSts-}- where- doExprs =- transformBi (\x ->- case x of- FunCall an op exprs- -> FunCall an op (addInferredTypes an exprs)- x1 -> x1)- {-doSts =- transformBi (\x ->- case x of- Insert ann table targetCols insData returning- -> Insert ann table targetCols insData returning- x1 -> x1)-}- addInferredTypes an exprs =- let args1 = fmap (\(_,a,_,_) -> a) $ fp an- args = fromMaybe [] args1- fargs = args ++ repeat TypeCheckFailed- in flip map (zip exprs fargs)- (\(ex, ty) -> updateAnnotation (++ [InferredType ty]) ex)- where- fp (FunctionPrototypeA f:_) = Just f- fp (_:ls) = fp ls- fp [] = Nothing--{-# LINE 283 "AstInternal.hs" #-}--{-# LINE 94 "./TypeChecking/Expressions.ag" #-}--{---small shim in front of findCallMatch in the type conversion code, to-handle some special cases.--Some of the special cases will no longer be needed when variadic-support is added.--between, greatest and least are treated as syntactic sugar so we-delegate the function lookups to the <=/>= operators.--the row comparison should be more general than this, since it supports-any operator satisfying some properties---TODO: move all of this into find call match. Don't know why it's separate--}-typeCheckFunCall :: Catalog -> String -> [Type] -> Either [TypeError] FunctionPrototype-typeCheckFunCall cat fnName' argsType =- {-trace ("typecheckfncall " ++ fnName' ++ show argsType) $-}- --dependsOnRTpe argsType $- case fnName of- "count" -> -- not quite sure how this is suppose to work,- -- the counts in the pg catalog accept either- -- no args, or one arg of type any, but you can call- -- count with multiple arguments?- return ("count", argsType, typeBigInt, False)- "!between" -> do- f1 <- lookupReturnType ">=" [argsType !! 0, argsType !! 1]- f2 <- lookupReturnType "<=" [argsType !! 0, argsType !! 2]- lookupFn "!and" [f1,f2]- "greatest" -> do- fp@(_,_,t,_) <- lookupFn fnName argsType- lookupFn ">=" [t,t]- return fp- "least" -> do- fp@(_,_,t,_) <- lookupFn fnName argsType- lookupFn "<=" [t,t]- return fp- "!rowctor" -> return $ ("!rowCtor", argsType, AnonymousRecordType argsType, False)- -- special case the row comparison ops- -- this needs to be fixed: we want to match- -- any implicit casts to functions on composite types- -- first, then we can use the anonymous record type on- -- any composite- _ | fnName `elem` ["=", "<>", "<=", ">=", "<", ">"]- && length argsType == 2- && all isCompositeOrSetOfCompositeType argsType- && compositesCompatible cat (head argsType) (head $ tail argsType) -> return (fnName, argsType, typeBool, False)- --checked for all special cases, so run general case now- s -> lookupFn s argsType- where- lookupReturnType :: String -> [Type] -> Either [TypeError] Type- lookupReturnType s1 args = fmap (\(_,_,r,_) -> r) $ lookupFn s1 args- lookupFn :: String -> [Type] -> Either [TypeError] FunctionPrototype- lookupFn s1 args = findCallMatch cat- (if s1 == "u-" then "-" else s1) args- fnName = map toLower fnName'-{-# LINE 345 "AstInternal.hs" #-}--{-# LINE 138 "./TypeChecking/SelectStatement.ag" #-}---typeCheckValuesExpr :: Catalog -> [[Type]] -> Either [TypeError] Type-typeCheckValuesExpr cat rowsTs =- let colNames = zipWith (++)- (repeat "column")- (map show [1..length $ head rowsTs])- in unionRelTypes cat rowsTs colNames---typeCheckCombineSelect :: Catalog -> Type -> Type -> Either [TypeError] Type-typeCheckCombineSelect cat v1 v2 = do- u1 <- unwrapSetOfComposite v1- let colNames = map fst u1- u2 <- unwrapSetOfComposite v2- let colTypes1 = map snd u1- let colTypes2 = map snd u2- unionRelTypes cat [colTypes1,colTypes2] colNames--unionRelTypes :: Catalog -> [[Type]] -> [String] -> Either [TypeError] Type-unionRelTypes cat rowsTs colNames =- let lengths = map length rowsTs- in case () of- _ | null rowsTs ->- Left [NoRowsGivenForValues]- | not (all (==head lengths) lengths) ->- Left [ValuesListsMustBeSameLength]- | otherwise ->- --i don't think this propagates all the errors, just the first set- mapM (resolveResultSetType cat) (transpose rowsTs) >>=- (return . SetOfType . CompositeType . zip colNames)--{-# LINE 380 "AstInternal.hs" #-}--{-# LINE 200 "./TypeChecking/TableRefs.ag" #-}--{--convert a function call into a [String,[(string,type)]] list for use-in a tableref context-first consideration is the alias: if there is an alias in the select,-e.g. select * from generate_series(1,2) x; (alias is x)-we use that, otherwise we use the name of the function-second consideration is the attributes coming out, roughly speaking-we have to convert an arbitrary type to a relation type-if we have a relation valued function, we don't need to do anything-if we have a setof non composite, we lift the single type to an-attribute, using the function name for the attribute name-if we have a non setof, we lift the single type to an attribute and-then relation, using the function name for the attribute name-need to check to see what should happen with arrayof---}-funIdens :: Catalog -> String -> Expression -> Either [TypeError] (String,[(String,Type)])-funIdens cat alias fnVal = do- errorWhen (case fnVal of- FunCall _ _ _ -> False- _ -> True)- [ContextError "FunCall"]- let (FunCall _ fnName _) = fnVal- correlationName = if alias /= ""- then alias- else fnName- attrs <- do- case getTypeAnnotation fnVal of- SetOfType (NamedCompositeType t) -> catCompositePublicAttrs cat [] t- SetOfType x -> return [(correlationName,x)]- y -> return [(correlationName,y)]- return (correlationName, attrs)--getAlias :: String -> TableAlias -> String-getAlias def alias =- case alias of- NoAlias -> def- TableAlias t -> t- FullAlias t _ -> t--{-# LINE 424 "AstInternal.hs" #-}--{-# LINE 92 "./TypeChecking/SelectLists.ag" #-}--expandStar :: LocalIdentifierBindings- -> String- -> Type- -> [(String,Type)]- -> [(String,Type)]-expandStar cat colName colType types =- fromRight types $ do- let (correlationName,iden) = splitIdentifier colName- newCols <- if iden == "*"- then libExpandStar cat correlationName- else return [(iden, colType)]- return $ newCols ++ types--fixStar :: Expression -> Expression-fixStar =- everywhere (mkT fixStar')- where- fixStar' :: Annotation -> Annotation- fixStar' a =- if TypeAnnotation TypeCheckFailed `elem` a- && any (\an ->- case an of- TypeErrorA (UnrecognisedIdentifier x) |- let (_,iden) = splitIdentifier x- in iden == "*" -> True- _ -> False) a- then filter (\an -> case an of- TypeAnnotation TypeCheckFailed -> False- TypeErrorA (UnrecognisedIdentifier _) -> False- _ -> True) a- else a-{-# LINE 459 "AstInternal.hs" #-}--{-# LINE 96 "./TypeChecking/Dml.ag" #-}---setInferredTypesG :: Data a => [Type] -> a -> a-setInferredTypesG tys x =- evalState (transformBiM f x) tys- where- f (p@(Placeholder _)) = do- y:ys <- get- put ys- return $ updateAnnotation (++ [InferredType y]) p- f z = return z-{-# LINE 473 "AstInternal.hs" #-}--{-# LINE 163 "./TypeChecking/Dml.ag" #-}--getRowTypes :: [Type] -> [Type]-getRowTypes [AnonymousRecordType ts] = ts-getRowTypes ts = ts-{-# LINE 480 "AstInternal.hs" #-}--{-# LINE 202 "./TypeChecking/Dml.ag" #-}-----small shortcut to help produce better errors?-checkRelationExists :: Catalog -> String -> Either [TypeError] ()-checkRelationExists cat tbl =- catCompositeDef cat relationComposites tbl >>- return ()----used by both insert and update-checkColumnConsistency :: Catalog -> String -> [String] -> [(String,Type)]- -> Either [TypeError] [(String,Type)]-checkColumnConsistency cat tbl cols' insNameTypePairs = do- ttcols <- lowerize <$> catCompositePublicAttrs cat [] tbl- let cols = if null cols'- then map fst ttcols- else map (map toLower) cols'- errorWhen (length insNameTypePairs /= length cols) [WrongNumberOfColumns]- let nonMatchingColumns = cols \\ map fst ttcols- errorWhen (not $ null nonMatchingColumns) $- map UnrecognisedIdentifier nonMatchingColumns- let targetNameTypePairs = map (\l -> (l,fromJust $ lookup l ttcols)) cols- --check the types of the insdata match the column targets- --name datatype columntype- typeTriples = map (\((a,b),c) -> (a,b,c)) $- zip targetNameTypePairs $- map snd insNameTypePairs- errs :: [TypeError]- errs = concat $ lefts $- map (\(_,b,c) -> checkAssignmentValid cat c b) typeTriples- liftErrors errs- return targetNameTypePairs- where- lowerize = map (\(a,b) -> (map toLower a,b))--{-# LINE 517 "AstInternal.hs" #-}--{-# LINE 40 "./TypeChecking/CreateTable.ag" #-}--defaultSystemColumns :: [(String,Type)]-defaultSystemColumns = [("tableoid", ScalarType "oid")- ,("cmax", ScalarType "cid")- ,("xmax", ScalarType "xid")- ,("cmin", ScalarType "cid")- ,("xmin", ScalarType "xid")- ,("ctid", ScalarType "tid")]-{-# LINE 528 "AstInternal.hs" #-}--- AlterTableAction ---------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative AddConstraint:- child ann : {Annotation}- child con : Constraint - visit 0:- local annotatedTree : _- local originalTree : _- alternative AlterColumnDefault:- child ann : {Annotation}- child nm : {String}- child def : Expression - visit 0:- local annotatedTree : _- local originalTree : _--}-data AlterTableAction = AddConstraint (Annotation) (Constraint) - | AlterColumnDefault (Annotation) (String) (Expression) - deriving ( Data,Eq,Show,Typeable)--- cata-sem_AlterTableAction :: AlterTableAction ->- T_AlterTableAction -sem_AlterTableAction (AddConstraint _ann _con ) =- (sem_AlterTableAction_AddConstraint _ann (sem_Constraint _con ) )-sem_AlterTableAction (AlterColumnDefault _ann _nm _def ) =- (sem_AlterTableAction_AlterColumnDefault _ann _nm (sem_Expression _def ) )--- semantic domain-type T_AlterTableAction = Catalog ->- LocalIdentifierBindings ->- ( AlterTableAction,AlterTableAction)-data Inh_AlterTableAction = Inh_AlterTableAction {cat_Inh_AlterTableAction :: Catalog,lib_Inh_AlterTableAction :: LocalIdentifierBindings}-data Syn_AlterTableAction = Syn_AlterTableAction {annotatedTree_Syn_AlterTableAction :: AlterTableAction,originalTree_Syn_AlterTableAction :: AlterTableAction}-wrap_AlterTableAction :: T_AlterTableAction ->- Inh_AlterTableAction ->- Syn_AlterTableAction -wrap_AlterTableAction sem (Inh_AlterTableAction _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_AlterTableAction _lhsOannotatedTree _lhsOoriginalTree ))-sem_AlterTableAction_AddConstraint :: Annotation ->- T_Constraint ->- T_AlterTableAction -sem_AlterTableAction_AddConstraint ann_ con_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: AlterTableAction- _lhsOoriginalTree :: AlterTableAction- _conOcat :: Catalog- _conOlib :: LocalIdentifierBindings- _conIannotatedTree :: Constraint- _conIoriginalTree :: Constraint- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- AddConstraint ann_ _conIannotatedTree- {-# LINE 592 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- AddConstraint ann_ _conIoriginalTree- {-# LINE 597 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 602 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 607 "AstInternal.hs" #-}- -- copy rule (down)- _conOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 612 "AstInternal.hs" #-}- -- copy rule (down)- _conOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 617 "AstInternal.hs" #-}- ( _conIannotatedTree,_conIoriginalTree) =- (con_ _conOcat _conOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_AlterTableAction_AlterColumnDefault :: Annotation ->- String ->- T_Expression ->- T_AlterTableAction -sem_AlterTableAction_AlterColumnDefault ann_ nm_ def_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: AlterTableAction- _lhsOoriginalTree :: AlterTableAction- _defOcat :: Catalog- _defOlib :: LocalIdentifierBindings- _defIannotatedTree :: Expression- _defIliftedColumnName :: String- _defIoriginalTree :: Expression- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- AlterColumnDefault ann_ nm_ _defIannotatedTree- {-# LINE 639 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- AlterColumnDefault ann_ nm_ _defIoriginalTree- {-# LINE 644 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 649 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 654 "AstInternal.hs" #-}- -- copy rule (down)- _defOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 659 "AstInternal.hs" #-}- -- copy rule (down)- _defOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 664 "AstInternal.hs" #-}- ( _defIannotatedTree,_defIliftedColumnName,_defIoriginalTree) =- (def_ _defOcat _defOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- AttributeDef -------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - attrName : String- namedType : Type- originalTree : SELF - alternatives:- alternative AttributeDef:- child ann : {Annotation}- child name : {String}- child typ : TypeName - child def : MaybeExpression - child cons : RowConstraintList - visit 0:- local annotatedTree : _- local originalTree : _--}-data AttributeDef = AttributeDef (Annotation) (String) (TypeName) (MaybeExpression) (RowConstraintList) - deriving ( Data,Eq,Show,Typeable)--- cata-sem_AttributeDef :: AttributeDef ->- T_AttributeDef -sem_AttributeDef (AttributeDef _ann _name _typ _def _cons ) =- (sem_AttributeDef_AttributeDef _ann _name (sem_TypeName _typ ) (sem_MaybeExpression _def ) (sem_RowConstraintList _cons ) )--- semantic domain-type T_AttributeDef = Catalog ->- LocalIdentifierBindings ->- ( AttributeDef,String,Type,AttributeDef)-data Inh_AttributeDef = Inh_AttributeDef {cat_Inh_AttributeDef :: Catalog,lib_Inh_AttributeDef :: LocalIdentifierBindings}-data Syn_AttributeDef = Syn_AttributeDef {annotatedTree_Syn_AttributeDef :: AttributeDef,attrName_Syn_AttributeDef :: String,namedType_Syn_AttributeDef :: Type,originalTree_Syn_AttributeDef :: AttributeDef}-wrap_AttributeDef :: T_AttributeDef ->- Inh_AttributeDef ->- Syn_AttributeDef -wrap_AttributeDef sem (Inh_AttributeDef _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOattrName,_lhsOnamedType,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_AttributeDef _lhsOannotatedTree _lhsOattrName _lhsOnamedType _lhsOoriginalTree ))-sem_AttributeDef_AttributeDef :: Annotation ->- String ->- T_TypeName ->- T_MaybeExpression ->- T_RowConstraintList ->- T_AttributeDef -sem_AttributeDef_AttributeDef ann_ name_ typ_ def_ cons_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOattrName :: String- _lhsOnamedType :: Type- _consOlib :: LocalIdentifierBindings- _lhsOannotatedTree :: AttributeDef- _lhsOoriginalTree :: AttributeDef- _typOcat :: Catalog- _typOlib :: LocalIdentifierBindings- _defOcat :: Catalog- _defOlib :: LocalIdentifierBindings- _consOcat :: Catalog- _typIannotatedTree :: TypeName- _typInamedType :: Type- _typIoriginalTree :: TypeName- _defIannotatedTree :: MaybeExpression- _defIoriginalTree :: MaybeExpression- _consIannotatedTree :: RowConstraintList- _consIoriginalTree :: RowConstraintList- -- "./TypeChecking/CreateTable.ag"(line 79, column 9)- _lhsOattrName =- {-# LINE 79 "./TypeChecking/CreateTable.ag" #-}- map toLower name_- {-# LINE 740 "AstInternal.hs" #-}- -- "./TypeChecking/CreateTable.ag"(line 80, column 9)- _lhsOnamedType =- {-# LINE 80 "./TypeChecking/CreateTable.ag" #-}- _typInamedType- {-# LINE 745 "AstInternal.hs" #-}- -- "./TypeChecking/CreateTable.ag"(line 95, column 9)- _consOlib =- {-# LINE 95 "./TypeChecking/CreateTable.ag" #-}- case updateBindings _lhsIlib _lhsIcat- [LibStackIDs [("", [(name_, _typInamedType)])]] of- Left x -> error $ show x- Right e -> e- {-# LINE 753 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- AttributeDef ann_ name_ _typIannotatedTree _defIannotatedTree _consIannotatedTree- {-# LINE 758 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- AttributeDef ann_ name_ _typIoriginalTree _defIoriginalTree _consIoriginalTree- {-# LINE 763 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 768 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 773 "AstInternal.hs" #-}- -- copy rule (down)- _typOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 778 "AstInternal.hs" #-}- -- copy rule (down)- _typOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 783 "AstInternal.hs" #-}- -- copy rule (down)- _defOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 788 "AstInternal.hs" #-}- -- copy rule (down)- _defOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 793 "AstInternal.hs" #-}- -- copy rule (down)- _consOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 798 "AstInternal.hs" #-}- ( _typIannotatedTree,_typInamedType,_typIoriginalTree) =- (typ_ _typOcat _typOlib )- ( _defIannotatedTree,_defIoriginalTree) =- (def_ _defOcat _defOlib )- ( _consIannotatedTree,_consIoriginalTree) =- (cons_ _consOcat _consOlib )- in ( _lhsOannotatedTree,_lhsOattrName,_lhsOnamedType,_lhsOoriginalTree)))--- AttributeDefList ---------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - attrs : [(String, Type)]- originalTree : SELF - alternatives:- alternative Cons:- child hd : AttributeDef - child tl : AttributeDefList - visit 0:- local annotatedTree : _- local originalTree : _- alternative Nil:- visit 0:- local annotatedTree : _- local originalTree : _--}-type AttributeDefList = [(AttributeDef)]--- cata-sem_AttributeDefList :: AttributeDefList ->- T_AttributeDefList -sem_AttributeDefList list =- (Prelude.foldr sem_AttributeDefList_Cons sem_AttributeDefList_Nil (Prelude.map sem_AttributeDef list) )--- semantic domain-type T_AttributeDefList = Catalog ->- LocalIdentifierBindings ->- ( AttributeDefList,([(String, Type)]),AttributeDefList)-data Inh_AttributeDefList = Inh_AttributeDefList {cat_Inh_AttributeDefList :: Catalog,lib_Inh_AttributeDefList :: LocalIdentifierBindings}-data Syn_AttributeDefList = Syn_AttributeDefList {annotatedTree_Syn_AttributeDefList :: AttributeDefList,attrs_Syn_AttributeDefList :: [(String, Type)],originalTree_Syn_AttributeDefList :: AttributeDefList}-wrap_AttributeDefList :: T_AttributeDefList ->- Inh_AttributeDefList ->- Syn_AttributeDefList -wrap_AttributeDefList sem (Inh_AttributeDefList _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOattrs,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_AttributeDefList _lhsOannotatedTree _lhsOattrs _lhsOoriginalTree ))-sem_AttributeDefList_Cons :: T_AttributeDef ->- T_AttributeDefList ->- T_AttributeDefList -sem_AttributeDefList_Cons hd_ tl_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOattrs :: ([(String, Type)])- _lhsOannotatedTree :: AttributeDefList- _lhsOoriginalTree :: AttributeDefList- _hdOcat :: Catalog- _hdOlib :: LocalIdentifierBindings- _tlOcat :: Catalog- _tlOlib :: LocalIdentifierBindings- _hdIannotatedTree :: AttributeDef- _hdIattrName :: String- _hdInamedType :: Type- _hdIoriginalTree :: AttributeDef- _tlIannotatedTree :: AttributeDefList- _tlIattrs :: ([(String, Type)])- _tlIoriginalTree :: AttributeDefList- -- "./TypeChecking/CreateTable.ag"(line 85, column 12)- _lhsOattrs =- {-# LINE 85 "./TypeChecking/CreateTable.ag" #-}- (_hdIattrName, _hdInamedType) : _tlIattrs- {-# LINE 871 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIannotatedTree _tlIannotatedTree- {-# LINE 876 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIoriginalTree _tlIoriginalTree- {-# LINE 881 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 886 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 891 "AstInternal.hs" #-}- -- copy rule (down)- _hdOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 896 "AstInternal.hs" #-}- -- copy rule (down)- _hdOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 901 "AstInternal.hs" #-}- -- copy rule (down)- _tlOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 906 "AstInternal.hs" #-}- -- copy rule (down)- _tlOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 911 "AstInternal.hs" #-}- ( _hdIannotatedTree,_hdIattrName,_hdInamedType,_hdIoriginalTree) =- (hd_ _hdOcat _hdOlib )- ( _tlIannotatedTree,_tlIattrs,_tlIoriginalTree) =- (tl_ _tlOcat _tlOlib )- in ( _lhsOannotatedTree,_lhsOattrs,_lhsOoriginalTree)))-sem_AttributeDefList_Nil :: T_AttributeDefList -sem_AttributeDefList_Nil =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOattrs :: ([(String, Type)])- _lhsOannotatedTree :: AttributeDefList- _lhsOoriginalTree :: AttributeDefList- -- "./TypeChecking/CreateTable.ag"(line 86, column 11)- _lhsOattrs =- {-# LINE 86 "./TypeChecking/CreateTable.ag" #-}- []- {-# LINE 928 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 933 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 938 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 943 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 948 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOattrs,_lhsOoriginalTree)))--- Cascade ------------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative Cascade:- visit 0:- local annotatedTree : _- local originalTree : _- alternative Restrict:- visit 0:- local annotatedTree : _- local originalTree : _--}-data Cascade = Cascade - | Restrict - deriving ( Data,Eq,Show,Typeable)--- cata-sem_Cascade :: Cascade ->- T_Cascade -sem_Cascade (Cascade ) =- (sem_Cascade_Cascade )-sem_Cascade (Restrict ) =- (sem_Cascade_Restrict )--- semantic domain-type T_Cascade = Catalog ->- LocalIdentifierBindings ->- ( Cascade,Cascade)-data Inh_Cascade = Inh_Cascade {cat_Inh_Cascade :: Catalog,lib_Inh_Cascade :: LocalIdentifierBindings}-data Syn_Cascade = Syn_Cascade {annotatedTree_Syn_Cascade :: Cascade,originalTree_Syn_Cascade :: Cascade}-wrap_Cascade :: T_Cascade ->- Inh_Cascade ->- Syn_Cascade -wrap_Cascade sem (Inh_Cascade _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_Cascade _lhsOannotatedTree _lhsOoriginalTree ))-sem_Cascade_Cascade :: T_Cascade -sem_Cascade_Cascade =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Cascade- _lhsOoriginalTree :: Cascade- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Cascade- {-# LINE 1002 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Cascade- {-# LINE 1007 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 1012 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 1017 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_Cascade_Restrict :: T_Cascade -sem_Cascade_Restrict =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Cascade- _lhsOoriginalTree :: Cascade- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Restrict- {-# LINE 1029 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Restrict- {-# LINE 1034 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 1039 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 1044 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- CaseExpressionList -------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative Cons:- child hd : Expression - child tl : CaseExpressionList - visit 0:- local annotatedTree : _- local originalTree : _- alternative Nil:- visit 0:- local annotatedTree : _- local originalTree : _--}-type CaseExpressionList = [(Expression)]--- cata-sem_CaseExpressionList :: CaseExpressionList ->- T_CaseExpressionList -sem_CaseExpressionList list =- (Prelude.foldr sem_CaseExpressionList_Cons sem_CaseExpressionList_Nil (Prelude.map sem_Expression list) )--- semantic domain-type T_CaseExpressionList = Catalog ->- LocalIdentifierBindings ->- ( CaseExpressionList,CaseExpressionList)-data Inh_CaseExpressionList = Inh_CaseExpressionList {cat_Inh_CaseExpressionList :: Catalog,lib_Inh_CaseExpressionList :: LocalIdentifierBindings}-data Syn_CaseExpressionList = Syn_CaseExpressionList {annotatedTree_Syn_CaseExpressionList :: CaseExpressionList,originalTree_Syn_CaseExpressionList :: CaseExpressionList}-wrap_CaseExpressionList :: T_CaseExpressionList ->- Inh_CaseExpressionList ->- Syn_CaseExpressionList -wrap_CaseExpressionList sem (Inh_CaseExpressionList _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_CaseExpressionList _lhsOannotatedTree _lhsOoriginalTree ))-sem_CaseExpressionList_Cons :: T_Expression ->- T_CaseExpressionList ->- T_CaseExpressionList -sem_CaseExpressionList_Cons hd_ tl_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: CaseExpressionList- _lhsOoriginalTree :: CaseExpressionList- _hdOcat :: Catalog- _hdOlib :: LocalIdentifierBindings- _tlOcat :: Catalog- _tlOlib :: LocalIdentifierBindings- _hdIannotatedTree :: Expression- _hdIliftedColumnName :: String- _hdIoriginalTree :: Expression- _tlIannotatedTree :: CaseExpressionList- _tlIoriginalTree :: CaseExpressionList- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIannotatedTree _tlIannotatedTree- {-# LINE 1107 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIoriginalTree _tlIoriginalTree- {-# LINE 1112 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 1117 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 1122 "AstInternal.hs" #-}- -- copy rule (down)- _hdOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 1127 "AstInternal.hs" #-}- -- copy rule (down)- _hdOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 1132 "AstInternal.hs" #-}- -- copy rule (down)- _tlOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 1137 "AstInternal.hs" #-}- -- copy rule (down)- _tlOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 1142 "AstInternal.hs" #-}- ( _hdIannotatedTree,_hdIliftedColumnName,_hdIoriginalTree) =- (hd_ _hdOcat _hdOlib )- ( _tlIannotatedTree,_tlIoriginalTree) =- (tl_ _tlOcat _tlOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_CaseExpressionList_Nil :: T_CaseExpressionList -sem_CaseExpressionList_Nil =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: CaseExpressionList- _lhsOoriginalTree :: CaseExpressionList- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 1158 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 1163 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 1168 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 1173 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- CaseExpressionListExpressionPair -----------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative Tuple:- child x1 : CaseExpressionList - child x2 : Expression - visit 0:- local annotatedTree : _- local originalTree : _--}-type CaseExpressionListExpressionPair = ( (CaseExpressionList),(Expression))--- cata-sem_CaseExpressionListExpressionPair :: CaseExpressionListExpressionPair ->- T_CaseExpressionListExpressionPair -sem_CaseExpressionListExpressionPair ( x1,x2) =- (sem_CaseExpressionListExpressionPair_Tuple (sem_CaseExpressionList x1 ) (sem_Expression x2 ) )--- semantic domain-type T_CaseExpressionListExpressionPair = Catalog ->- LocalIdentifierBindings ->- ( CaseExpressionListExpressionPair,CaseExpressionListExpressionPair)-data Inh_CaseExpressionListExpressionPair = Inh_CaseExpressionListExpressionPair {cat_Inh_CaseExpressionListExpressionPair :: Catalog,lib_Inh_CaseExpressionListExpressionPair :: LocalIdentifierBindings}-data Syn_CaseExpressionListExpressionPair = Syn_CaseExpressionListExpressionPair {annotatedTree_Syn_CaseExpressionListExpressionPair :: CaseExpressionListExpressionPair,originalTree_Syn_CaseExpressionListExpressionPair :: CaseExpressionListExpressionPair}-wrap_CaseExpressionListExpressionPair :: T_CaseExpressionListExpressionPair ->- Inh_CaseExpressionListExpressionPair ->- Syn_CaseExpressionListExpressionPair -wrap_CaseExpressionListExpressionPair sem (Inh_CaseExpressionListExpressionPair _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_CaseExpressionListExpressionPair _lhsOannotatedTree _lhsOoriginalTree ))-sem_CaseExpressionListExpressionPair_Tuple :: T_CaseExpressionList ->- T_Expression ->- T_CaseExpressionListExpressionPair -sem_CaseExpressionListExpressionPair_Tuple x1_ x2_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: CaseExpressionListExpressionPair- _lhsOoriginalTree :: CaseExpressionListExpressionPair- _x1Ocat :: Catalog- _x1Olib :: LocalIdentifierBindings- _x2Ocat :: Catalog- _x2Olib :: LocalIdentifierBindings- _x1IannotatedTree :: CaseExpressionList- _x1IoriginalTree :: CaseExpressionList- _x2IannotatedTree :: Expression- _x2IliftedColumnName :: String- _x2IoriginalTree :: Expression- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (_x1IannotatedTree,_x2IannotatedTree)- {-# LINE 1232 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (_x1IoriginalTree,_x2IoriginalTree)- {-# LINE 1237 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 1242 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 1247 "AstInternal.hs" #-}- -- copy rule (down)- _x1Ocat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 1252 "AstInternal.hs" #-}- -- copy rule (down)- _x1Olib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 1257 "AstInternal.hs" #-}- -- copy rule (down)- _x2Ocat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 1262 "AstInternal.hs" #-}- -- copy rule (down)- _x2Olib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 1267 "AstInternal.hs" #-}- ( _x1IannotatedTree,_x1IoriginalTree) =- (x1_ _x1Ocat _x1Olib )- ( _x2IannotatedTree,_x2IliftedColumnName,_x2IoriginalTree) =- (x2_ _x2Ocat _x2Olib )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- CaseExpressionListExpressionPairList -------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative Cons:- child hd : CaseExpressionListExpressionPair - child tl : CaseExpressionListExpressionPairList - visit 0:- local annotatedTree : _- local originalTree : _- alternative Nil:- visit 0:- local annotatedTree : _- local originalTree : _--}-type CaseExpressionListExpressionPairList = [(CaseExpressionListExpressionPair)]--- cata-sem_CaseExpressionListExpressionPairList :: CaseExpressionListExpressionPairList ->- T_CaseExpressionListExpressionPairList -sem_CaseExpressionListExpressionPairList list =- (Prelude.foldr sem_CaseExpressionListExpressionPairList_Cons sem_CaseExpressionListExpressionPairList_Nil (Prelude.map sem_CaseExpressionListExpressionPair list) )--- semantic domain-type T_CaseExpressionListExpressionPairList = Catalog ->- LocalIdentifierBindings ->- ( CaseExpressionListExpressionPairList,CaseExpressionListExpressionPairList)-data Inh_CaseExpressionListExpressionPairList = Inh_CaseExpressionListExpressionPairList {cat_Inh_CaseExpressionListExpressionPairList :: Catalog,lib_Inh_CaseExpressionListExpressionPairList :: LocalIdentifierBindings}-data Syn_CaseExpressionListExpressionPairList = Syn_CaseExpressionListExpressionPairList {annotatedTree_Syn_CaseExpressionListExpressionPairList :: CaseExpressionListExpressionPairList,originalTree_Syn_CaseExpressionListExpressionPairList :: CaseExpressionListExpressionPairList}-wrap_CaseExpressionListExpressionPairList :: T_CaseExpressionListExpressionPairList ->- Inh_CaseExpressionListExpressionPairList ->- Syn_CaseExpressionListExpressionPairList -wrap_CaseExpressionListExpressionPairList sem (Inh_CaseExpressionListExpressionPairList _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_CaseExpressionListExpressionPairList _lhsOannotatedTree _lhsOoriginalTree ))-sem_CaseExpressionListExpressionPairList_Cons :: T_CaseExpressionListExpressionPair ->- T_CaseExpressionListExpressionPairList ->- T_CaseExpressionListExpressionPairList -sem_CaseExpressionListExpressionPairList_Cons hd_ tl_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: CaseExpressionListExpressionPairList- _lhsOoriginalTree :: CaseExpressionListExpressionPairList- _hdOcat :: Catalog- _hdOlib :: LocalIdentifierBindings- _tlOcat :: Catalog- _tlOlib :: LocalIdentifierBindings- _hdIannotatedTree :: CaseExpressionListExpressionPair- _hdIoriginalTree :: CaseExpressionListExpressionPair- _tlIannotatedTree :: CaseExpressionListExpressionPairList- _tlIoriginalTree :: CaseExpressionListExpressionPairList- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIannotatedTree _tlIannotatedTree- {-# LINE 1333 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIoriginalTree _tlIoriginalTree- {-# LINE 1338 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 1343 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 1348 "AstInternal.hs" #-}- -- copy rule (down)- _hdOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 1353 "AstInternal.hs" #-}- -- copy rule (down)- _hdOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 1358 "AstInternal.hs" #-}- -- copy rule (down)- _tlOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 1363 "AstInternal.hs" #-}- -- copy rule (down)- _tlOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 1368 "AstInternal.hs" #-}- ( _hdIannotatedTree,_hdIoriginalTree) =- (hd_ _hdOcat _hdOlib )- ( _tlIannotatedTree,_tlIoriginalTree) =- (tl_ _tlOcat _tlOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_CaseExpressionListExpressionPairList_Nil :: T_CaseExpressionListExpressionPairList -sem_CaseExpressionListExpressionPairList_Nil =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: CaseExpressionListExpressionPairList- _lhsOoriginalTree :: CaseExpressionListExpressionPairList- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 1384 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 1389 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 1394 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 1399 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- CombineType --------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative Except:- visit 0:- local annotatedTree : _- local originalTree : _- alternative Intersect:- visit 0:- local annotatedTree : _- local originalTree : _- alternative Union:- visit 0:- local annotatedTree : _- local originalTree : _- alternative UnionAll:- visit 0:- local annotatedTree : _- local originalTree : _--}-data CombineType = Except - | Intersect - | Union - | UnionAll - deriving ( Data,Eq,Show,Typeable)--- cata-sem_CombineType :: CombineType ->- T_CombineType -sem_CombineType (Except ) =- (sem_CombineType_Except )-sem_CombineType (Intersect ) =- (sem_CombineType_Intersect )-sem_CombineType (Union ) =- (sem_CombineType_Union )-sem_CombineType (UnionAll ) =- (sem_CombineType_UnionAll )--- semantic domain-type T_CombineType = Catalog ->- LocalIdentifierBindings ->- ( CombineType,CombineType)-data Inh_CombineType = Inh_CombineType {cat_Inh_CombineType :: Catalog,lib_Inh_CombineType :: LocalIdentifierBindings}-data Syn_CombineType = Syn_CombineType {annotatedTree_Syn_CombineType :: CombineType,originalTree_Syn_CombineType :: CombineType}-wrap_CombineType :: T_CombineType ->- Inh_CombineType ->- Syn_CombineType -wrap_CombineType sem (Inh_CombineType _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_CombineType _lhsOannotatedTree _lhsOoriginalTree ))-sem_CombineType_Except :: T_CombineType -sem_CombineType_Except =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: CombineType- _lhsOoriginalTree :: CombineType- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Except- {-# LINE 1467 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Except- {-# LINE 1472 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 1477 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 1482 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_CombineType_Intersect :: T_CombineType -sem_CombineType_Intersect =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: CombineType- _lhsOoriginalTree :: CombineType- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Intersect- {-# LINE 1494 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Intersect- {-# LINE 1499 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 1504 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 1509 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_CombineType_Union :: T_CombineType -sem_CombineType_Union =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: CombineType- _lhsOoriginalTree :: CombineType- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Union- {-# LINE 1521 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Union- {-# LINE 1526 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 1531 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 1536 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_CombineType_UnionAll :: T_CombineType -sem_CombineType_UnionAll =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: CombineType- _lhsOoriginalTree :: CombineType- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- UnionAll- {-# LINE 1548 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- UnionAll- {-# LINE 1553 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 1558 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 1563 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- Constraint ---------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative CheckConstraint:- child ann : {Annotation}- child name : {String}- child expression : Expression - visit 0:- local annotatedTree : _- local originalTree : _- alternative PrimaryKeyConstraint:- child ann : {Annotation}- child name : {String}- child stringList : StringList - visit 0:- local annotatedTree : _- local originalTree : _- alternative ReferenceConstraint:- child ann : {Annotation}- child name : {String}- child atts : StringList - child table : {String}- child tableAtts : StringList - child onUpdate : Cascade - child onDelete : Cascade - visit 0:- local annotatedTree : _- local originalTree : _- alternative UniqueConstraint:- child ann : {Annotation}- child name : {String}- child stringList : StringList - visit 0:- local annotatedTree : _- local originalTree : _--}-data Constraint = CheckConstraint (Annotation) (String) (Expression) - | PrimaryKeyConstraint (Annotation) (String) (StringList) - | ReferenceConstraint (Annotation) (String) (StringList) (String) (StringList) (Cascade) (Cascade) - | UniqueConstraint (Annotation) (String) (StringList) - deriving ( Data,Eq,Show,Typeable)--- cata-sem_Constraint :: Constraint ->- T_Constraint -sem_Constraint (CheckConstraint _ann _name _expression ) =- (sem_Constraint_CheckConstraint _ann _name (sem_Expression _expression ) )-sem_Constraint (PrimaryKeyConstraint _ann _name _stringList ) =- (sem_Constraint_PrimaryKeyConstraint _ann _name (sem_StringList _stringList ) )-sem_Constraint (ReferenceConstraint _ann _name _atts _table _tableAtts _onUpdate _onDelete ) =- (sem_Constraint_ReferenceConstraint _ann _name (sem_StringList _atts ) _table (sem_StringList _tableAtts ) (sem_Cascade _onUpdate ) (sem_Cascade _onDelete ) )-sem_Constraint (UniqueConstraint _ann _name _stringList ) =- (sem_Constraint_UniqueConstraint _ann _name (sem_StringList _stringList ) )--- semantic domain-type T_Constraint = Catalog ->- LocalIdentifierBindings ->- ( Constraint,Constraint)-data Inh_Constraint = Inh_Constraint {cat_Inh_Constraint :: Catalog,lib_Inh_Constraint :: LocalIdentifierBindings}-data Syn_Constraint = Syn_Constraint {annotatedTree_Syn_Constraint :: Constraint,originalTree_Syn_Constraint :: Constraint}-wrap_Constraint :: T_Constraint ->- Inh_Constraint ->- Syn_Constraint -wrap_Constraint sem (Inh_Constraint _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_Constraint _lhsOannotatedTree _lhsOoriginalTree ))-sem_Constraint_CheckConstraint :: Annotation ->- String ->- T_Expression ->- T_Constraint -sem_Constraint_CheckConstraint ann_ name_ expression_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Constraint- _lhsOoriginalTree :: Constraint- _expressionOcat :: Catalog- _expressionOlib :: LocalIdentifierBindings- _expressionIannotatedTree :: Expression- _expressionIliftedColumnName :: String- _expressionIoriginalTree :: Expression- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- CheckConstraint ann_ name_ _expressionIannotatedTree- {-# LINE 1655 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- CheckConstraint ann_ name_ _expressionIoriginalTree- {-# LINE 1660 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 1665 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 1670 "AstInternal.hs" #-}- -- copy rule (down)- _expressionOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 1675 "AstInternal.hs" #-}- -- copy rule (down)- _expressionOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 1680 "AstInternal.hs" #-}- ( _expressionIannotatedTree,_expressionIliftedColumnName,_expressionIoriginalTree) =- (expression_ _expressionOcat _expressionOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_Constraint_PrimaryKeyConstraint :: Annotation ->- String ->- T_StringList ->- T_Constraint -sem_Constraint_PrimaryKeyConstraint ann_ name_ stringList_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Constraint- _lhsOoriginalTree :: Constraint- _stringListOcat :: Catalog- _stringListOlib :: LocalIdentifierBindings- _stringListIannotatedTree :: StringList- _stringListIoriginalTree :: StringList- _stringListIstrings :: ([String])- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- PrimaryKeyConstraint ann_ name_ _stringListIannotatedTree- {-# LINE 1702 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- PrimaryKeyConstraint ann_ name_ _stringListIoriginalTree- {-# LINE 1707 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 1712 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 1717 "AstInternal.hs" #-}- -- copy rule (down)- _stringListOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 1722 "AstInternal.hs" #-}- -- copy rule (down)- _stringListOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 1727 "AstInternal.hs" #-}- ( _stringListIannotatedTree,_stringListIoriginalTree,_stringListIstrings) =- (stringList_ _stringListOcat _stringListOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_Constraint_ReferenceConstraint :: Annotation ->- String ->- T_StringList ->- String ->- T_StringList ->- T_Cascade ->- T_Cascade ->- T_Constraint -sem_Constraint_ReferenceConstraint ann_ name_ atts_ table_ tableAtts_ onUpdate_ onDelete_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Constraint- _lhsOoriginalTree :: Constraint- _attsOcat :: Catalog- _attsOlib :: LocalIdentifierBindings- _tableAttsOcat :: Catalog- _tableAttsOlib :: LocalIdentifierBindings- _onUpdateOcat :: Catalog- _onUpdateOlib :: LocalIdentifierBindings- _onDeleteOcat :: Catalog- _onDeleteOlib :: LocalIdentifierBindings- _attsIannotatedTree :: StringList- _attsIoriginalTree :: StringList- _attsIstrings :: ([String])- _tableAttsIannotatedTree :: StringList- _tableAttsIoriginalTree :: StringList- _tableAttsIstrings :: ([String])- _onUpdateIannotatedTree :: Cascade- _onUpdateIoriginalTree :: Cascade- _onDeleteIannotatedTree :: Cascade- _onDeleteIoriginalTree :: Cascade- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- ReferenceConstraint ann_ name_ _attsIannotatedTree table_ _tableAttsIannotatedTree _onUpdateIannotatedTree _onDeleteIannotatedTree- {-# LINE 1766 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- ReferenceConstraint ann_ name_ _attsIoriginalTree table_ _tableAttsIoriginalTree _onUpdateIoriginalTree _onDeleteIoriginalTree- {-# LINE 1771 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 1776 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 1781 "AstInternal.hs" #-}- -- copy rule (down)- _attsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 1786 "AstInternal.hs" #-}- -- copy rule (down)- _attsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 1791 "AstInternal.hs" #-}- -- copy rule (down)- _tableAttsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 1796 "AstInternal.hs" #-}- -- copy rule (down)- _tableAttsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 1801 "AstInternal.hs" #-}- -- copy rule (down)- _onUpdateOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 1806 "AstInternal.hs" #-}- -- copy rule (down)- _onUpdateOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 1811 "AstInternal.hs" #-}- -- copy rule (down)- _onDeleteOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 1816 "AstInternal.hs" #-}- -- copy rule (down)- _onDeleteOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 1821 "AstInternal.hs" #-}- ( _attsIannotatedTree,_attsIoriginalTree,_attsIstrings) =- (atts_ _attsOcat _attsOlib )- ( _tableAttsIannotatedTree,_tableAttsIoriginalTree,_tableAttsIstrings) =- (tableAtts_ _tableAttsOcat _tableAttsOlib )- ( _onUpdateIannotatedTree,_onUpdateIoriginalTree) =- (onUpdate_ _onUpdateOcat _onUpdateOlib )- ( _onDeleteIannotatedTree,_onDeleteIoriginalTree) =- (onDelete_ _onDeleteOcat _onDeleteOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_Constraint_UniqueConstraint :: Annotation ->- String ->- T_StringList ->- T_Constraint -sem_Constraint_UniqueConstraint ann_ name_ stringList_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Constraint- _lhsOoriginalTree :: Constraint- _stringListOcat :: Catalog- _stringListOlib :: LocalIdentifierBindings- _stringListIannotatedTree :: StringList- _stringListIoriginalTree :: StringList- _stringListIstrings :: ([String])- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- UniqueConstraint ann_ name_ _stringListIannotatedTree- {-# LINE 1849 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- UniqueConstraint ann_ name_ _stringListIoriginalTree- {-# LINE 1854 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 1859 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 1864 "AstInternal.hs" #-}- -- copy rule (down)- _stringListOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 1869 "AstInternal.hs" #-}- -- copy rule (down)- _stringListOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 1874 "AstInternal.hs" #-}- ( _stringListIannotatedTree,_stringListIoriginalTree,_stringListIstrings) =- (stringList_ _stringListOcat _stringListOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- ConstraintList -----------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative Cons:- child hd : Constraint - child tl : ConstraintList - visit 0:- local annotatedTree : _- local originalTree : _- alternative Nil:- visit 0:- local annotatedTree : _- local originalTree : _--}-type ConstraintList = [(Constraint)]--- cata-sem_ConstraintList :: ConstraintList ->- T_ConstraintList -sem_ConstraintList list =- (Prelude.foldr sem_ConstraintList_Cons sem_ConstraintList_Nil (Prelude.map sem_Constraint list) )--- semantic domain-type T_ConstraintList = Catalog ->- LocalIdentifierBindings ->- ( ConstraintList,ConstraintList)-data Inh_ConstraintList = Inh_ConstraintList {cat_Inh_ConstraintList :: Catalog,lib_Inh_ConstraintList :: LocalIdentifierBindings}-data Syn_ConstraintList = Syn_ConstraintList {annotatedTree_Syn_ConstraintList :: ConstraintList,originalTree_Syn_ConstraintList :: ConstraintList}-wrap_ConstraintList :: T_ConstraintList ->- Inh_ConstraintList ->- Syn_ConstraintList -wrap_ConstraintList sem (Inh_ConstraintList _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_ConstraintList _lhsOannotatedTree _lhsOoriginalTree ))-sem_ConstraintList_Cons :: T_Constraint ->- T_ConstraintList ->- T_ConstraintList -sem_ConstraintList_Cons hd_ tl_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: ConstraintList- _lhsOoriginalTree :: ConstraintList- _hdOcat :: Catalog- _hdOlib :: LocalIdentifierBindings- _tlOcat :: Catalog- _tlOlib :: LocalIdentifierBindings- _hdIannotatedTree :: Constraint- _hdIoriginalTree :: Constraint- _tlIannotatedTree :: ConstraintList- _tlIoriginalTree :: ConstraintList- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIannotatedTree _tlIannotatedTree- {-# LINE 1938 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIoriginalTree _tlIoriginalTree- {-# LINE 1943 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 1948 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 1953 "AstInternal.hs" #-}- -- copy rule (down)- _hdOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 1958 "AstInternal.hs" #-}- -- copy rule (down)- _hdOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 1963 "AstInternal.hs" #-}- -- copy rule (down)- _tlOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 1968 "AstInternal.hs" #-}- -- copy rule (down)- _tlOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 1973 "AstInternal.hs" #-}- ( _hdIannotatedTree,_hdIoriginalTree) =- (hd_ _hdOcat _hdOlib )- ( _tlIannotatedTree,_tlIoriginalTree) =- (tl_ _tlOcat _tlOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_ConstraintList_Nil :: T_ConstraintList -sem_ConstraintList_Nil =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: ConstraintList- _lhsOoriginalTree :: ConstraintList- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 1989 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 1994 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 1999 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 2004 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- CopySource ---------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative CopyFilename:- child string : {String}- visit 0:- local annotatedTree : _- local originalTree : _- alternative Stdin:- visit 0:- local annotatedTree : _- local originalTree : _--}-data CopySource = CopyFilename (String) - | Stdin - deriving ( Data,Eq,Show,Typeable)--- cata-sem_CopySource :: CopySource ->- T_CopySource -sem_CopySource (CopyFilename _string ) =- (sem_CopySource_CopyFilename _string )-sem_CopySource (Stdin ) =- (sem_CopySource_Stdin )--- semantic domain-type T_CopySource = Catalog ->- LocalIdentifierBindings ->- ( CopySource,CopySource)-data Inh_CopySource = Inh_CopySource {cat_Inh_CopySource :: Catalog,lib_Inh_CopySource :: LocalIdentifierBindings}-data Syn_CopySource = Syn_CopySource {annotatedTree_Syn_CopySource :: CopySource,originalTree_Syn_CopySource :: CopySource}-wrap_CopySource :: T_CopySource ->- Inh_CopySource ->- Syn_CopySource -wrap_CopySource sem (Inh_CopySource _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_CopySource _lhsOannotatedTree _lhsOoriginalTree ))-sem_CopySource_CopyFilename :: String ->- T_CopySource -sem_CopySource_CopyFilename string_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: CopySource- _lhsOoriginalTree :: CopySource- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- CopyFilename string_- {-# LINE 2060 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- CopyFilename string_- {-# LINE 2065 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 2070 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 2075 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_CopySource_Stdin :: T_CopySource -sem_CopySource_Stdin =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: CopySource- _lhsOoriginalTree :: CopySource- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Stdin- {-# LINE 2087 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Stdin- {-# LINE 2092 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 2097 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 2102 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- Direction ----------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative Asc:- visit 0:- local annotatedTree : _- local originalTree : _- alternative Desc:- visit 0:- local annotatedTree : _- local originalTree : _--}-data Direction = Asc - | Desc - deriving ( Data,Eq,Show,Typeable)--- cata-sem_Direction :: Direction ->- T_Direction -sem_Direction (Asc ) =- (sem_Direction_Asc )-sem_Direction (Desc ) =- (sem_Direction_Desc )--- semantic domain-type T_Direction = Catalog ->- LocalIdentifierBindings ->- ( Direction,Direction)-data Inh_Direction = Inh_Direction {cat_Inh_Direction :: Catalog,lib_Inh_Direction :: LocalIdentifierBindings}-data Syn_Direction = Syn_Direction {annotatedTree_Syn_Direction :: Direction,originalTree_Syn_Direction :: Direction}-wrap_Direction :: T_Direction ->- Inh_Direction ->- Syn_Direction -wrap_Direction sem (Inh_Direction _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_Direction _lhsOannotatedTree _lhsOoriginalTree ))-sem_Direction_Asc :: T_Direction -sem_Direction_Asc =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Direction- _lhsOoriginalTree :: Direction- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Asc- {-# LINE 2156 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Asc- {-# LINE 2161 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 2166 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 2171 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_Direction_Desc :: T_Direction -sem_Direction_Desc =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Direction- _lhsOoriginalTree :: Direction- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Desc- {-# LINE 2183 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Desc- {-# LINE 2188 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 2193 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 2198 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- Distinct -----------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative Distinct:- visit 0:- local annotatedTree : _- local originalTree : _- alternative Dupes:- visit 0:- local annotatedTree : _- local originalTree : _--}-data Distinct = Distinct - | Dupes - deriving ( Data,Eq,Show,Typeable)--- cata-sem_Distinct :: Distinct ->- T_Distinct -sem_Distinct (Distinct ) =- (sem_Distinct_Distinct )-sem_Distinct (Dupes ) =- (sem_Distinct_Dupes )--- semantic domain-type T_Distinct = Catalog ->- LocalIdentifierBindings ->- ( Distinct,Distinct)-data Inh_Distinct = Inh_Distinct {cat_Inh_Distinct :: Catalog,lib_Inh_Distinct :: LocalIdentifierBindings}-data Syn_Distinct = Syn_Distinct {annotatedTree_Syn_Distinct :: Distinct,originalTree_Syn_Distinct :: Distinct}-wrap_Distinct :: T_Distinct ->- Inh_Distinct ->- Syn_Distinct -wrap_Distinct sem (Inh_Distinct _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_Distinct _lhsOannotatedTree _lhsOoriginalTree ))-sem_Distinct_Distinct :: T_Distinct -sem_Distinct_Distinct =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Distinct- _lhsOoriginalTree :: Distinct- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Distinct- {-# LINE 2252 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Distinct- {-# LINE 2257 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 2262 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 2267 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_Distinct_Dupes :: T_Distinct -sem_Distinct_Dupes =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Distinct- _lhsOoriginalTree :: Distinct- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Dupes- {-# LINE 2279 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Dupes- {-# LINE 2284 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 2289 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 2294 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- DropType -----------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative Domain:- visit 0:- local annotatedTree : _- local originalTree : _- alternative Table:- visit 0:- local annotatedTree : _- local originalTree : _- alternative Type:- visit 0:- local annotatedTree : _- local originalTree : _- alternative View:- visit 0:- local annotatedTree : _- local originalTree : _--}-data DropType = Domain - | Table - | Type - | View - deriving ( Data,Eq,Show,Typeable)--- cata-sem_DropType :: DropType ->- T_DropType -sem_DropType (Domain ) =- (sem_DropType_Domain )-sem_DropType (Table ) =- (sem_DropType_Table )-sem_DropType (Type ) =- (sem_DropType_Type )-sem_DropType (View ) =- (sem_DropType_View )--- semantic domain-type T_DropType = Catalog ->- LocalIdentifierBindings ->- ( DropType,DropType)-data Inh_DropType = Inh_DropType {cat_Inh_DropType :: Catalog,lib_Inh_DropType :: LocalIdentifierBindings}-data Syn_DropType = Syn_DropType {annotatedTree_Syn_DropType :: DropType,originalTree_Syn_DropType :: DropType}-wrap_DropType :: T_DropType ->- Inh_DropType ->- Syn_DropType -wrap_DropType sem (Inh_DropType _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_DropType _lhsOannotatedTree _lhsOoriginalTree ))-sem_DropType_Domain :: T_DropType -sem_DropType_Domain =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: DropType- _lhsOoriginalTree :: DropType- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Domain- {-# LINE 2362 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Domain- {-# LINE 2367 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 2372 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 2377 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_DropType_Table :: T_DropType -sem_DropType_Table =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: DropType- _lhsOoriginalTree :: DropType- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Table- {-# LINE 2389 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Table- {-# LINE 2394 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 2399 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 2404 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_DropType_Type :: T_DropType -sem_DropType_Type =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: DropType- _lhsOoriginalTree :: DropType- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Type- {-# LINE 2416 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Type- {-# LINE 2421 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 2426 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 2431 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_DropType_View :: T_DropType -sem_DropType_View =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: DropType- _lhsOoriginalTree :: DropType- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- View- {-# LINE 2443 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- View- {-# LINE 2448 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 2453 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 2458 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- Expression ---------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - liftedColumnName : String- originalTree : SELF - alternatives:- alternative BooleanLit:- child ann : {Annotation}- child b : {Bool}- visit 0:- local prototype : {Maybe FunctionPrototype}- local tpe : _- local backTree : _- local annotatedTree : _- local originalTree : _- alternative Case:- child ann : {Annotation}- child cases : CaseExpressionListExpressionPairList - child els : MaybeExpression - visit 0:- local prototype : {Maybe FunctionPrototype}- local whenTypes : _- local thenTypes : _- local tpe : _- local backTree : _- local annotatedTree : _- local originalTree : _- alternative CaseSimple:- child ann : {Annotation}- child value : Expression - child cases : CaseExpressionListExpressionPairList - child els : MaybeExpression - visit 0:- local prototype : {Maybe FunctionPrototype}- local whenTypes : _- local thenTypes : _- local tpe : _- local backTree : _- local annotatedTree : _- local originalTree : _- alternative Cast:- child ann : {Annotation}- child expr : Expression - child tn : TypeName - visit 0:- local prototype : {Maybe FunctionPrototype}- local tpe : _- local backTree : _- local annotatedTree : _- local originalTree : _- alternative Exists:- child ann : {Annotation}- child sel : SelectExpression - visit 0:- local prototype : {Maybe FunctionPrototype}- local tpe : _- local backTree : _- local annotatedTree : _- local originalTree : _- alternative FloatLit:- child ann : {Annotation}- child d : {Double}- visit 0:- local prototype : {Maybe FunctionPrototype}- local tpe : _- local backTree : _- local annotatedTree : _- local originalTree : _- alternative FunCall:- child ann : {Annotation}- child funName : {String}- child args : ExpressionList - visit 0:- local _tup1 : _- local tpe : _- local prototype : {Maybe FunctionPrototype}- local backTree : _- local annotatedTree : _- local originalTree : _- alternative Identifier:- child ann : {Annotation}- child i : {String}- visit 0:- local prototype : {Maybe FunctionPrototype}- local tpe : _- local backTree : _- local annotatedTree : _- local originalTree : _- alternative InPredicate:- child ann : {Annotation}- child expr : Expression - child i : {Bool}- child list : InList - visit 0:- local prototype : {Maybe FunctionPrototype}- local tpe : _- local backTree : _- local annotatedTree : _- local originalTree : _- alternative IntegerLit:- child ann : {Annotation}- child i : {Integer}- visit 0:- local prototype : {Maybe FunctionPrototype}- local tpe : _- local backTree : _- local annotatedTree : _- local originalTree : _- alternative LiftOperator:- child ann : {Annotation}- child oper : {String}- child flav : LiftFlavour - child args : ExpressionList - visit 0:- local prototype : {Maybe FunctionPrototype}- local tpe : _- local backTree : _- local annotatedTree : _- local originalTree : _- alternative NullLit:- child ann : {Annotation}- visit 0:- local prototype : {Maybe FunctionPrototype}- local tpe : _- local backTree : _- local annotatedTree : _- local originalTree : _- alternative Placeholder:- child ann : {Annotation}- visit 0:- local prototype : {Maybe FunctionPrototype}- local tpe : _- local backTree : _- local annotatedTree : _- local originalTree : _- alternative PositionalArg:- child ann : {Annotation}- child p : {Integer}- visit 0:- local prototype : {Maybe FunctionPrototype}- local tpe : _- local backTree : _- local annotatedTree : _- local originalTree : _- alternative ScalarSubQuery:- child ann : {Annotation}- child sel : SelectExpression - visit 0:- local prototype : {Maybe FunctionPrototype}- local tpe : _- local backTree : _- local annotatedTree : _- local originalTree : _- alternative StringLit:- child ann : {Annotation}- child quote : {String}- child value : {String}- visit 0:- local prototype : {Maybe FunctionPrototype}- local tpe : _- local backTree : _- local annotatedTree : _- local originalTree : _- alternative WindowFn:- child ann : {Annotation}- child fn : Expression - child partitionBy : ExpressionList - child orderBy : ExpressionList - child dir : Direction - child frm : FrameClause - visit 0:- local prototype : {Maybe FunctionPrototype}- local tpe : _- local backTree : _- local annotatedTree : _- local originalTree : _--}-data Expression = BooleanLit (Annotation) (Bool) - | Case (Annotation) (CaseExpressionListExpressionPairList) (MaybeExpression) - | CaseSimple (Annotation) (Expression) (CaseExpressionListExpressionPairList) (MaybeExpression) - | Cast (Annotation) (Expression) (TypeName) - | Exists (Annotation) (SelectExpression) - | FloatLit (Annotation) (Double) - | FunCall (Annotation) (String) (ExpressionList) - | Identifier (Annotation) (String) - | InPredicate (Annotation) (Expression) (Bool) (InList) - | IntegerLit (Annotation) (Integer) - | LiftOperator (Annotation) (String) (LiftFlavour) (ExpressionList) - | NullLit (Annotation) - | Placeholder (Annotation) - | PositionalArg (Annotation) (Integer) - | ScalarSubQuery (Annotation) (SelectExpression) - | StringLit (Annotation) (String) (String) - | WindowFn (Annotation) (Expression) (ExpressionList) (ExpressionList) (Direction) (FrameClause) - deriving ( Data,Eq,Show,Typeable)--- cata-sem_Expression :: Expression ->- T_Expression -sem_Expression (BooleanLit _ann _b ) =- (sem_Expression_BooleanLit _ann _b )-sem_Expression (Case _ann _cases _els ) =- (sem_Expression_Case _ann (sem_CaseExpressionListExpressionPairList _cases ) (sem_MaybeExpression _els ) )-sem_Expression (CaseSimple _ann _value _cases _els ) =- (sem_Expression_CaseSimple _ann (sem_Expression _value ) (sem_CaseExpressionListExpressionPairList _cases ) (sem_MaybeExpression _els ) )-sem_Expression (Cast _ann _expr _tn ) =- (sem_Expression_Cast _ann (sem_Expression _expr ) (sem_TypeName _tn ) )-sem_Expression (Exists _ann _sel ) =- (sem_Expression_Exists _ann (sem_SelectExpression _sel ) )-sem_Expression (FloatLit _ann _d ) =- (sem_Expression_FloatLit _ann _d )-sem_Expression (FunCall _ann _funName _args ) =- (sem_Expression_FunCall _ann _funName (sem_ExpressionList _args ) )-sem_Expression (Identifier _ann _i ) =- (sem_Expression_Identifier _ann _i )-sem_Expression (InPredicate _ann _expr _i _list ) =- (sem_Expression_InPredicate _ann (sem_Expression _expr ) _i (sem_InList _list ) )-sem_Expression (IntegerLit _ann _i ) =- (sem_Expression_IntegerLit _ann _i )-sem_Expression (LiftOperator _ann _oper _flav _args ) =- (sem_Expression_LiftOperator _ann _oper (sem_LiftFlavour _flav ) (sem_ExpressionList _args ) )-sem_Expression (NullLit _ann ) =- (sem_Expression_NullLit _ann )-sem_Expression (Placeholder _ann ) =- (sem_Expression_Placeholder _ann )-sem_Expression (PositionalArg _ann _p ) =- (sem_Expression_PositionalArg _ann _p )-sem_Expression (ScalarSubQuery _ann _sel ) =- (sem_Expression_ScalarSubQuery _ann (sem_SelectExpression _sel ) )-sem_Expression (StringLit _ann _quote _value ) =- (sem_Expression_StringLit _ann _quote _value )-sem_Expression (WindowFn _ann _fn _partitionBy _orderBy _dir _frm ) =- (sem_Expression_WindowFn _ann (sem_Expression _fn ) (sem_ExpressionList _partitionBy ) (sem_ExpressionList _orderBy ) (sem_Direction _dir ) (sem_FrameClause _frm ) )--- semantic domain-type T_Expression = Catalog ->- LocalIdentifierBindings ->- ( Expression,String,Expression)-data Inh_Expression = Inh_Expression {cat_Inh_Expression :: Catalog,lib_Inh_Expression :: LocalIdentifierBindings}-data Syn_Expression = Syn_Expression {annotatedTree_Syn_Expression :: Expression,liftedColumnName_Syn_Expression :: String,originalTree_Syn_Expression :: Expression}-wrap_Expression :: T_Expression ->- Inh_Expression ->- Syn_Expression -wrap_Expression sem (Inh_Expression _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOliftedColumnName,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_Expression _lhsOannotatedTree _lhsOliftedColumnName _lhsOoriginalTree ))-sem_Expression_BooleanLit :: Annotation ->- Bool ->- T_Expression -sem_Expression_BooleanLit ann_ b_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Expression- _prototype :: (Maybe FunctionPrototype)- _lhsOliftedColumnName :: String- _lhsOoriginalTree :: Expression- -- "./TypeChecking/Expressions.ag"(line 14, column 9)- _lhsOannotatedTree =- {-# LINE 14 "./TypeChecking/Expressions.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ fmap ((:[]) . FunctionPrototypeA) _prototype- {-# LINE 2727 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 29, column 9)- _prototype =- {-# LINE 29 "./TypeChecking/Expressions.ag" #-}- Nothing- {-# LINE 2732 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 41, column 19)- _tpe =- {-# LINE 41 "./TypeChecking/Expressions.ag" #-}- Right typeBool- {-# LINE 2737 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 53, column 9)- _backTree =- {-# LINE 53 "./TypeChecking/Expressions.ag" #-}- BooleanLit ann_ b_- {-# LINE 2742 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 177, column 7)- _lhsOliftedColumnName =- {-# LINE 177 "./TypeChecking/SelectLists.ag" #-}- ""- {-# LINE 2747 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- BooleanLit ann_ b_- {-# LINE 2752 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- BooleanLit ann_ b_- {-# LINE 2757 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 2762 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOliftedColumnName,_lhsOoriginalTree)))-sem_Expression_Case :: Annotation ->- T_CaseExpressionListExpressionPairList ->- T_MaybeExpression ->- T_Expression -sem_Expression_Case ann_ cases_ els_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Expression- _prototype :: (Maybe FunctionPrototype)- _lhsOliftedColumnName :: String- _lhsOoriginalTree :: Expression- _casesOcat :: Catalog- _casesOlib :: LocalIdentifierBindings- _elsOcat :: Catalog- _elsOlib :: LocalIdentifierBindings- _casesIannotatedTree :: CaseExpressionListExpressionPairList- _casesIoriginalTree :: CaseExpressionListExpressionPairList- _elsIannotatedTree :: MaybeExpression- _elsIoriginalTree :: MaybeExpression- -- "./TypeChecking/Expressions.ag"(line 14, column 9)- _lhsOannotatedTree =- {-# LINE 14 "./TypeChecking/Expressions.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ fmap ((:[]) . FunctionPrototypeA) _prototype- {-# LINE 2790 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 29, column 9)- _prototype =- {-# LINE 29 "./TypeChecking/Expressions.ag" #-}- Nothing- {-# LINE 2795 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 202, column 9)- _whenTypes =- {-# LINE 202 "./TypeChecking/Expressions.ag" #-}- map getTypeAnnotation $ concatMap fst $- _casesIannotatedTree- {-# LINE 2801 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 204, column 9)- _thenTypes =- {-# LINE 204 "./TypeChecking/Expressions.ag" #-}- map getTypeAnnotation $- (map snd $ _casesIannotatedTree) ++- maybeToList _elsIannotatedTree- {-# LINE 2808 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 210, column 9)- _tpe =- {-# LINE 210 "./TypeChecking/Expressions.ag" #-}- dependsOnRTpe _whenTypes $ do- errorWhen (any (/= typeBool) _whenTypes ) $- [WrongTypes typeBool _whenTypes ]- dependsOnRTpe _thenTypes $- resolveResultSetType _lhsIcat _thenTypes- {-# LINE 2817 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 216, column 9)- _backTree =- {-# LINE 216 "./TypeChecking/Expressions.ag" #-}- Case ann_ _casesIannotatedTree _elsIannotatedTree- {-# LINE 2822 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 177, column 7)- _lhsOliftedColumnName =- {-# LINE 177 "./TypeChecking/SelectLists.ag" #-}- ""- {-# LINE 2827 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Case ann_ _casesIannotatedTree _elsIannotatedTree- {-# LINE 2832 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Case ann_ _casesIoriginalTree _elsIoriginalTree- {-# LINE 2837 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 2842 "AstInternal.hs" #-}- -- copy rule (down)- _casesOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 2847 "AstInternal.hs" #-}- -- copy rule (down)- _casesOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 2852 "AstInternal.hs" #-}- -- copy rule (down)- _elsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 2857 "AstInternal.hs" #-}- -- copy rule (down)- _elsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 2862 "AstInternal.hs" #-}- ( _casesIannotatedTree,_casesIoriginalTree) =- (cases_ _casesOcat _casesOlib )- ( _elsIannotatedTree,_elsIoriginalTree) =- (els_ _elsOcat _elsOlib )- in ( _lhsOannotatedTree,_lhsOliftedColumnName,_lhsOoriginalTree)))-sem_Expression_CaseSimple :: Annotation ->- T_Expression ->- T_CaseExpressionListExpressionPairList ->- T_MaybeExpression ->- T_Expression -sem_Expression_CaseSimple ann_ value_ cases_ els_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Expression- _prototype :: (Maybe FunctionPrototype)- _lhsOoriginalTree :: Expression- _lhsOliftedColumnName :: String- _valueOcat :: Catalog- _valueOlib :: LocalIdentifierBindings- _casesOcat :: Catalog- _casesOlib :: LocalIdentifierBindings- _elsOcat :: Catalog- _elsOlib :: LocalIdentifierBindings- _valueIannotatedTree :: Expression- _valueIliftedColumnName :: String- _valueIoriginalTree :: Expression- _casesIannotatedTree :: CaseExpressionListExpressionPairList- _casesIoriginalTree :: CaseExpressionListExpressionPairList- _elsIannotatedTree :: MaybeExpression- _elsIoriginalTree :: MaybeExpression- -- "./TypeChecking/Expressions.ag"(line 14, column 9)- _lhsOannotatedTree =- {-# LINE 14 "./TypeChecking/Expressions.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ fmap ((:[]) . FunctionPrototypeA) _prototype- {-# LINE 2900 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 29, column 9)- _prototype =- {-# LINE 29 "./TypeChecking/Expressions.ag" #-}- Nothing- {-# LINE 2905 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 202, column 9)- _whenTypes =- {-# LINE 202 "./TypeChecking/Expressions.ag" #-}- map getTypeAnnotation $ concatMap fst $- _casesIannotatedTree- {-# LINE 2911 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 204, column 9)- _thenTypes =- {-# LINE 204 "./TypeChecking/Expressions.ag" #-}- map getTypeAnnotation $- (map snd $ _casesIannotatedTree) ++- maybeToList _elsIannotatedTree- {-# LINE 2918 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 221, column 9)- _tpe =- {-# LINE 221 "./TypeChecking/Expressions.ag" #-}- dependsOnRTpe _whenTypes $ do- let valueType = getTypeAnnotation _valueIannotatedTree- checkWhenTypes <-- resolveResultSetType _lhsIcat (valueType : _whenTypes )- dependsOnRTpe _thenTypes $- resolveResultSetType _lhsIcat _thenTypes- {-# LINE 2928 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 228, column 9)- _backTree =- {-# LINE 228 "./TypeChecking/Expressions.ag" #-}- CaseSimple ann_- _valueIannotatedTree- _casesIannotatedTree- _elsIannotatedTree- {-# LINE 2936 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- CaseSimple ann_ _valueIannotatedTree _casesIannotatedTree _elsIannotatedTree- {-# LINE 2941 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- CaseSimple ann_ _valueIoriginalTree _casesIoriginalTree _elsIoriginalTree- {-# LINE 2946 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 2951 "AstInternal.hs" #-}- -- copy rule (up)- _lhsOliftedColumnName =- {-# LINE 161 "./TypeChecking/SelectLists.ag" #-}- _valueIliftedColumnName- {-# LINE 2956 "AstInternal.hs" #-}- -- copy rule (down)- _valueOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 2961 "AstInternal.hs" #-}- -- copy rule (down)- _valueOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 2966 "AstInternal.hs" #-}- -- copy rule (down)- _casesOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 2971 "AstInternal.hs" #-}- -- copy rule (down)- _casesOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 2976 "AstInternal.hs" #-}- -- copy rule (down)- _elsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 2981 "AstInternal.hs" #-}- -- copy rule (down)- _elsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 2986 "AstInternal.hs" #-}- ( _valueIannotatedTree,_valueIliftedColumnName,_valueIoriginalTree) =- (value_ _valueOcat _valueOlib )- ( _casesIannotatedTree,_casesIoriginalTree) =- (cases_ _casesOcat _casesOlib )- ( _elsIannotatedTree,_elsIoriginalTree) =- (els_ _elsOcat _elsOlib )- in ( _lhsOannotatedTree,_lhsOliftedColumnName,_lhsOoriginalTree)))-sem_Expression_Cast :: Annotation ->- T_Expression ->- T_TypeName ->- T_Expression -sem_Expression_Cast ann_ expr_ tn_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Expression- _prototype :: (Maybe FunctionPrototype)- _lhsOliftedColumnName :: String- _lhsOoriginalTree :: Expression- _exprOcat :: Catalog- _exprOlib :: LocalIdentifierBindings- _tnOcat :: Catalog- _tnOlib :: LocalIdentifierBindings- _exprIannotatedTree :: Expression- _exprIliftedColumnName :: String- _exprIoriginalTree :: Expression- _tnIannotatedTree :: TypeName- _tnInamedType :: Type- _tnIoriginalTree :: TypeName- -- "./TypeChecking/Expressions.ag"(line 14, column 9)- _lhsOannotatedTree =- {-# LINE 14 "./TypeChecking/Expressions.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ fmap ((:[]) . FunctionPrototypeA) _prototype- {-# LINE 3022 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 29, column 9)- _prototype =- {-# LINE 29 "./TypeChecking/Expressions.ag" #-}- Nothing- {-# LINE 3027 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 66, column 12)- _tpe =- {-# LINE 66 "./TypeChecking/Expressions.ag" #-}- Right $ _tnInamedType- {-# LINE 3032 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 67, column 12)- _backTree =- {-# LINE 67 "./TypeChecking/Expressions.ag" #-}- Cast ann_ _exprIannotatedTree _tnIannotatedTree- {-# LINE 3037 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 169, column 10)- _lhsOliftedColumnName =- {-# LINE 169 "./TypeChecking/SelectLists.ag" #-}- case _tnIannotatedTree of- SimpleTypeName _ tn -> tn- _ -> ""- {-# LINE 3044 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Cast ann_ _exprIannotatedTree _tnIannotatedTree- {-# LINE 3049 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Cast ann_ _exprIoriginalTree _tnIoriginalTree- {-# LINE 3054 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 3059 "AstInternal.hs" #-}- -- copy rule (down)- _exprOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 3064 "AstInternal.hs" #-}- -- copy rule (down)- _exprOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 3069 "AstInternal.hs" #-}- -- copy rule (down)- _tnOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 3074 "AstInternal.hs" #-}- -- copy rule (down)- _tnOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 3079 "AstInternal.hs" #-}- ( _exprIannotatedTree,_exprIliftedColumnName,_exprIoriginalTree) =- (expr_ _exprOcat _exprOlib )- ( _tnIannotatedTree,_tnInamedType,_tnIoriginalTree) =- (tn_ _tnOcat _tnOlib )- in ( _lhsOannotatedTree,_lhsOliftedColumnName,_lhsOoriginalTree)))-sem_Expression_Exists :: Annotation ->- T_SelectExpression ->- T_Expression -sem_Expression_Exists ann_ sel_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Expression- _prototype :: (Maybe FunctionPrototype)- _lhsOliftedColumnName :: String- _lhsOoriginalTree :: Expression- _selOcat :: Catalog- _selOlib :: LocalIdentifierBindings- _selIannotatedTree :: SelectExpression- _selIlibUpdates :: ([LocalIdentifierBindingsUpdate])- _selIoriginalTree :: SelectExpression- -- "./TypeChecking/Expressions.ag"(line 14, column 9)- _lhsOannotatedTree =- {-# LINE 14 "./TypeChecking/Expressions.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ fmap ((:[]) . FunctionPrototypeA) _prototype- {-# LINE 3107 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 29, column 9)- _prototype =- {-# LINE 29 "./TypeChecking/Expressions.ag" #-}- Nothing- {-# LINE 3112 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 259, column 9)- _tpe =- {-# LINE 259 "./TypeChecking/Expressions.ag" #-}- Right typeBool- {-# LINE 3117 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 260, column 9)- _backTree =- {-# LINE 260 "./TypeChecking/Expressions.ag" #-}- Exists ann_ _selIannotatedTree- {-# LINE 3122 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 177, column 7)- _lhsOliftedColumnName =- {-# LINE 177 "./TypeChecking/SelectLists.ag" #-}- ""- {-# LINE 3127 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Exists ann_ _selIannotatedTree- {-# LINE 3132 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Exists ann_ _selIoriginalTree- {-# LINE 3137 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 3142 "AstInternal.hs" #-}- -- copy rule (down)- _selOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 3147 "AstInternal.hs" #-}- -- copy rule (down)- _selOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 3152 "AstInternal.hs" #-}- ( _selIannotatedTree,_selIlibUpdates,_selIoriginalTree) =- (sel_ _selOcat _selOlib )- in ( _lhsOannotatedTree,_lhsOliftedColumnName,_lhsOoriginalTree)))-sem_Expression_FloatLit :: Annotation ->- Double ->- T_Expression -sem_Expression_FloatLit ann_ d_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Expression- _prototype :: (Maybe FunctionPrototype)- _lhsOliftedColumnName :: String- _lhsOoriginalTree :: Expression- -- "./TypeChecking/Expressions.ag"(line 14, column 9)- _lhsOannotatedTree =- {-# LINE 14 "./TypeChecking/Expressions.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ fmap ((:[]) . FunctionPrototypeA) _prototype- {-# LINE 3173 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 29, column 9)- _prototype =- {-# LINE 29 "./TypeChecking/Expressions.ag" #-}- Nothing- {-# LINE 3178 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 40, column 17)- _tpe =- {-# LINE 40 "./TypeChecking/Expressions.ag" #-}- Right typeNumeric- {-# LINE 3183 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 51, column 9)- _backTree =- {-# LINE 51 "./TypeChecking/Expressions.ag" #-}- FloatLit ann_ d_- {-# LINE 3188 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 177, column 7)- _lhsOliftedColumnName =- {-# LINE 177 "./TypeChecking/SelectLists.ag" #-}- ""- {-# LINE 3193 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- FloatLit ann_ d_- {-# LINE 3198 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- FloatLit ann_ d_- {-# LINE 3203 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 3208 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOliftedColumnName,_lhsOoriginalTree)))-sem_Expression_FunCall :: Annotation ->- String ->- T_ExpressionList ->- T_Expression -sem_Expression_FunCall ann_ funName_ args_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Expression- _prototype :: (Maybe FunctionPrototype)- _lhsOliftedColumnName :: String- _lhsOoriginalTree :: Expression- _argsOcat :: Catalog- _argsOlib :: LocalIdentifierBindings- _argsIannotatedTree :: ExpressionList- _argsIoriginalTree :: ExpressionList- _argsItypeList :: ([Type])- -- "./TypeChecking/Expressions.ag"(line 14, column 9)- _lhsOannotatedTree =- {-# LINE 14 "./TypeChecking/Expressions.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ fmap ((:[]) . FunctionPrototypeA) _prototype- {-# LINE 3233 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 74, column 9)- __tup1 =- {-# LINE 74 "./TypeChecking/Expressions.ag" #-}- if any (==TypeCheckFailed) _argsItypeList- then (Right TypeCheckFailed, Nothing)- else- let fe = typeCheckFunCall- _lhsIcat- funName_- _argsItypeList- in (dependsOnRTpe _argsItypeList $ fmap (\(_,_,r,_) -> r) fe- ,eitherToMaybe fe)- {-# LINE 3246 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 74, column 9)- (_tpe,_) =- {-# LINE 74 "./TypeChecking/Expressions.ag" #-}- __tup1- {-# LINE 3251 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 74, column 9)- (_,_prototype) =- {-# LINE 74 "./TypeChecking/Expressions.ag" #-}- __tup1- {-# LINE 3256 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 83, column 9)- _backTree =- {-# LINE 83 "./TypeChecking/Expressions.ag" #-}- FunCall ann_ funName_ _argsIannotatedTree- {-# LINE 3261 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 165, column 13)- _lhsOliftedColumnName =- {-# LINE 165 "./TypeChecking/SelectLists.ag" #-}- if isOperatorName funName_- then ""- else funName_- {-# LINE 3268 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- FunCall ann_ funName_ _argsIannotatedTree- {-# LINE 3273 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- FunCall ann_ funName_ _argsIoriginalTree- {-# LINE 3278 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 3283 "AstInternal.hs" #-}- -- copy rule (down)- _argsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 3288 "AstInternal.hs" #-}- -- copy rule (down)- _argsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 3293 "AstInternal.hs" #-}- ( _argsIannotatedTree,_argsIoriginalTree,_argsItypeList) =- (args_ _argsOcat _argsOlib )- in ( _lhsOannotatedTree,_lhsOliftedColumnName,_lhsOoriginalTree)))-sem_Expression_Identifier :: Annotation ->- String ->- T_Expression -sem_Expression_Identifier ann_ i_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Expression- _prototype :: (Maybe FunctionPrototype)- _lhsOliftedColumnName :: String- _lhsOoriginalTree :: Expression- -- "./TypeChecking/Expressions.ag"(line 14, column 9)- _lhsOannotatedTree =- {-# LINE 14 "./TypeChecking/Expressions.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ fmap ((:[]) . FunctionPrototypeA) _prototype- {-# LINE 3314 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 29, column 9)- _prototype =- {-# LINE 29 "./TypeChecking/Expressions.ag" #-}- Nothing- {-# LINE 3319 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 241, column 9)- _tpe =- {-# LINE 241 "./TypeChecking/Expressions.ag" #-}- libLookupID _lhsIlib i_- {-# LINE 3324 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 242, column 9)- _backTree =- {-# LINE 242 "./TypeChecking/Expressions.ag" #-}- Identifier ann_ i_- {-# LINE 3329 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 164, column 16)- _lhsOliftedColumnName =- {-# LINE 164 "./TypeChecking/SelectLists.ag" #-}- i_- {-# LINE 3334 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Identifier ann_ i_- {-# LINE 3339 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Identifier ann_ i_- {-# LINE 3344 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 3349 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOliftedColumnName,_lhsOoriginalTree)))-sem_Expression_InPredicate :: Annotation ->- T_Expression ->- Bool ->- T_InList ->- T_Expression -sem_Expression_InPredicate ann_ expr_ i_ list_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Expression- _prototype :: (Maybe FunctionPrototype)- _lhsOoriginalTree :: Expression- _lhsOliftedColumnName :: String- _exprOcat :: Catalog- _exprOlib :: LocalIdentifierBindings- _listOcat :: Catalog- _listOlib :: LocalIdentifierBindings- _exprIannotatedTree :: Expression- _exprIliftedColumnName :: String- _exprIoriginalTree :: Expression- _listIannotatedTree :: InList- _listIlistType :: (Either [TypeError] Type)- _listIoriginalTree :: InList- -- "./TypeChecking/Expressions.ag"(line 14, column 9)- _lhsOannotatedTree =- {-# LINE 14 "./TypeChecking/Expressions.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ fmap ((:[]) . FunctionPrototypeA) _prototype- {-# LINE 3380 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 29, column 9)- _prototype =- {-# LINE 29 "./TypeChecking/Expressions.ag" #-}- Nothing- {-# LINE 3385 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 289, column 9)- _tpe =- {-# LINE 289 "./TypeChecking/Expressions.ag" #-}- do- lt <- _listIlistType- ty <- resolveResultSetType- _lhsIcat- [getTypeAnnotation _exprIannotatedTree, lt]- return typeBool- {-# LINE 3395 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 295, column 9)- _backTree =- {-# LINE 295 "./TypeChecking/Expressions.ag" #-}- InPredicate ann_- _exprIannotatedTree- i_- _listIannotatedTree- {-# LINE 3403 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- InPredicate ann_ _exprIannotatedTree i_ _listIannotatedTree- {-# LINE 3408 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- InPredicate ann_ _exprIoriginalTree i_ _listIoriginalTree- {-# LINE 3413 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 3418 "AstInternal.hs" #-}- -- copy rule (up)- _lhsOliftedColumnName =- {-# LINE 161 "./TypeChecking/SelectLists.ag" #-}- _exprIliftedColumnName- {-# LINE 3423 "AstInternal.hs" #-}- -- copy rule (down)- _exprOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 3428 "AstInternal.hs" #-}- -- copy rule (down)- _exprOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 3433 "AstInternal.hs" #-}- -- copy rule (down)- _listOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 3438 "AstInternal.hs" #-}- -- copy rule (down)- _listOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 3443 "AstInternal.hs" #-}- ( _exprIannotatedTree,_exprIliftedColumnName,_exprIoriginalTree) =- (expr_ _exprOcat _exprOlib )- ( _listIannotatedTree,_listIlistType,_listIoriginalTree) =- (list_ _listOcat _listOlib )- in ( _lhsOannotatedTree,_lhsOliftedColumnName,_lhsOoriginalTree)))-sem_Expression_IntegerLit :: Annotation ->- Integer ->- T_Expression -sem_Expression_IntegerLit ann_ i_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Expression- _prototype :: (Maybe FunctionPrototype)- _lhsOliftedColumnName :: String- _lhsOoriginalTree :: Expression- -- "./TypeChecking/Expressions.ag"(line 14, column 9)- _lhsOannotatedTree =- {-# LINE 14 "./TypeChecking/Expressions.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ fmap ((:[]) . FunctionPrototypeA) _prototype- {-# LINE 3466 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 29, column 9)- _prototype =- {-# LINE 29 "./TypeChecking/Expressions.ag" #-}- Nothing- {-# LINE 3471 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 38, column 19)- _tpe =- {-# LINE 38 "./TypeChecking/Expressions.ag" #-}- Right typeInt- {-# LINE 3476 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 47, column 9)- _backTree =- {-# LINE 47 "./TypeChecking/Expressions.ag" #-}- IntegerLit ann_ i_- {-# LINE 3481 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 177, column 7)- _lhsOliftedColumnName =- {-# LINE 177 "./TypeChecking/SelectLists.ag" #-}- ""- {-# LINE 3486 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- IntegerLit ann_ i_- {-# LINE 3491 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- IntegerLit ann_ i_- {-# LINE 3496 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 3501 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOliftedColumnName,_lhsOoriginalTree)))-sem_Expression_LiftOperator :: Annotation ->- String ->- T_LiftFlavour ->- T_ExpressionList ->- T_Expression -sem_Expression_LiftOperator ann_ oper_ flav_ args_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Expression- _prototype :: (Maybe FunctionPrototype)- _lhsOliftedColumnName :: String- _lhsOoriginalTree :: Expression- _flavOcat :: Catalog- _flavOlib :: LocalIdentifierBindings- _argsOcat :: Catalog- _argsOlib :: LocalIdentifierBindings- _flavIannotatedTree :: LiftFlavour- _flavIoriginalTree :: LiftFlavour- _argsIannotatedTree :: ExpressionList- _argsIoriginalTree :: ExpressionList- _argsItypeList :: ([Type])- -- "./TypeChecking/Expressions.ag"(line 14, column 9)- _lhsOannotatedTree =- {-# LINE 14 "./TypeChecking/Expressions.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ fmap ((:[]) . FunctionPrototypeA) _prototype- {-# LINE 3531 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 29, column 9)- _prototype =- {-# LINE 29 "./TypeChecking/Expressions.ag" #-}- Nothing- {-# LINE 3536 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 167, column 9)- _tpe =- {-# LINE 167 "./TypeChecking/Expressions.ag" #-}- dependsOnRTpe _argsItypeList $ do- let args = _argsIannotatedTree- errorWhen (length args /= 2)- [AnyAllError $ "must have two args, got " ++ show args]- let [a,b] = args- aType = getTypeAnnotation a- bType = getTypeAnnotation b- dependsOnRTpe [aType,bType] $ do- errorWhen (not $ isArrayType bType)- [AnyAllError $ "second arg must be array, got " ++ show args]- elemType <- unwrapArray $ bType- resType <- fmap (\(_,_,r,_) -> r) $ typeCheckFunCall- _lhsIcat- oper_- [aType,elemType]- errorWhen (resType /= typeBool)- [AnyAllError $ "operator must have bool return, got " ++ show resType]- return resType- {-# LINE 3558 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 185, column 9)- _backTree =- {-# LINE 185 "./TypeChecking/Expressions.ag" #-}- LiftOperator ann_ oper_ _flavIannotatedTree _argsIannotatedTree- {-# LINE 3563 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 177, column 7)- _lhsOliftedColumnName =- {-# LINE 177 "./TypeChecking/SelectLists.ag" #-}- ""- {-# LINE 3568 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- LiftOperator ann_ oper_ _flavIannotatedTree _argsIannotatedTree- {-# LINE 3573 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- LiftOperator ann_ oper_ _flavIoriginalTree _argsIoriginalTree- {-# LINE 3578 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 3583 "AstInternal.hs" #-}- -- copy rule (down)- _flavOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 3588 "AstInternal.hs" #-}- -- copy rule (down)- _flavOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 3593 "AstInternal.hs" #-}- -- copy rule (down)- _argsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 3598 "AstInternal.hs" #-}- -- copy rule (down)- _argsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 3603 "AstInternal.hs" #-}- ( _flavIannotatedTree,_flavIoriginalTree) =- (flav_ _flavOcat _flavOlib )- ( _argsIannotatedTree,_argsIoriginalTree,_argsItypeList) =- (args_ _argsOcat _argsOlib )- in ( _lhsOannotatedTree,_lhsOliftedColumnName,_lhsOoriginalTree)))-sem_Expression_NullLit :: Annotation ->- T_Expression -sem_Expression_NullLit ann_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Expression- _prototype :: (Maybe FunctionPrototype)- _lhsOliftedColumnName :: String- _lhsOoriginalTree :: Expression- -- "./TypeChecking/Expressions.ag"(line 14, column 9)- _lhsOannotatedTree =- {-# LINE 14 "./TypeChecking/Expressions.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ fmap ((:[]) . FunctionPrototypeA) _prototype- {-# LINE 3625 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 29, column 9)- _prototype =- {-# LINE 29 "./TypeChecking/Expressions.ag" #-}- Nothing- {-# LINE 3630 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 43, column 16)- _tpe =- {-# LINE 43 "./TypeChecking/Expressions.ag" #-}- Right UnknownType- {-# LINE 3635 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 55, column 9)- _backTree =- {-# LINE 55 "./TypeChecking/Expressions.ag" #-}- NullLit ann_- {-# LINE 3640 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 177, column 7)- _lhsOliftedColumnName =- {-# LINE 177 "./TypeChecking/SelectLists.ag" #-}- ""- {-# LINE 3645 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- NullLit ann_- {-# LINE 3650 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- NullLit ann_- {-# LINE 3655 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 3660 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOliftedColumnName,_lhsOoriginalTree)))-sem_Expression_Placeholder :: Annotation ->- T_Expression -sem_Expression_Placeholder ann_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Expression- _prototype :: (Maybe FunctionPrototype)- _lhsOliftedColumnName :: String- _lhsOoriginalTree :: Expression- -- "./TypeChecking/Expressions.ag"(line 14, column 9)- _lhsOannotatedTree =- {-# LINE 14 "./TypeChecking/Expressions.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ fmap ((:[]) . FunctionPrototypeA) _prototype- {-# LINE 3678 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 29, column 9)- _prototype =- {-# LINE 29 "./TypeChecking/Expressions.ag" #-}- Nothing- {-# LINE 3683 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 253, column 9)- _tpe =- {-# LINE 253 "./TypeChecking/Expressions.ag" #-}- Right UnknownType- {-# LINE 3688 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 254, column 9)- _backTree =- {-# LINE 254 "./TypeChecking/Expressions.ag" #-}- Placeholder ann_- {-# LINE 3693 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 177, column 7)- _lhsOliftedColumnName =- {-# LINE 177 "./TypeChecking/SelectLists.ag" #-}- ""- {-# LINE 3698 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Placeholder ann_- {-# LINE 3703 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Placeholder ann_- {-# LINE 3708 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 3713 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOliftedColumnName,_lhsOoriginalTree)))-sem_Expression_PositionalArg :: Annotation ->- Integer ->- T_Expression -sem_Expression_PositionalArg ann_ p_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Expression- _prototype :: (Maybe FunctionPrototype)- _lhsOliftedColumnName :: String- _lhsOoriginalTree :: Expression- -- "./TypeChecking/Expressions.ag"(line 14, column 9)- _lhsOannotatedTree =- {-# LINE 14 "./TypeChecking/Expressions.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ fmap ((:[]) . FunctionPrototypeA) _prototype- {-# LINE 3732 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 29, column 9)- _prototype =- {-# LINE 29 "./TypeChecking/Expressions.ag" #-}- Nothing- {-# LINE 3737 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 247, column 9)- _tpe =- {-# LINE 247 "./TypeChecking/Expressions.ag" #-}- libLookupID _lhsIlib ('$':show p_)- {-# LINE 3742 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 248, column 9)- _backTree =- {-# LINE 248 "./TypeChecking/Expressions.ag" #-}- PositionalArg ann_ p_- {-# LINE 3747 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 177, column 7)- _lhsOliftedColumnName =- {-# LINE 177 "./TypeChecking/SelectLists.ag" #-}- ""- {-# LINE 3752 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- PositionalArg ann_ p_- {-# LINE 3757 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- PositionalArg ann_ p_- {-# LINE 3762 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 3767 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOliftedColumnName,_lhsOoriginalTree)))-sem_Expression_ScalarSubQuery :: Annotation ->- T_SelectExpression ->- T_Expression -sem_Expression_ScalarSubQuery ann_ sel_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Expression- _prototype :: (Maybe FunctionPrototype)- _lhsOliftedColumnName :: String- _lhsOoriginalTree :: Expression- _selOcat :: Catalog- _selOlib :: LocalIdentifierBindings- _selIannotatedTree :: SelectExpression- _selIlibUpdates :: ([LocalIdentifierBindingsUpdate])- _selIoriginalTree :: SelectExpression- -- "./TypeChecking/Expressions.ag"(line 14, column 9)- _lhsOannotatedTree =- {-# LINE 14 "./TypeChecking/Expressions.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ fmap ((:[]) . FunctionPrototypeA) _prototype- {-# LINE 3791 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 29, column 9)- _prototype =- {-# LINE 29 "./TypeChecking/Expressions.ag" #-}- Nothing- {-# LINE 3796 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 271, column 9)- _tpe =- {-# LINE 271 "./TypeChecking/Expressions.ag" #-}- do- let selType = getTypeAnnotation _selIannotatedTree- dependsOnRTpe [selType] $ do- f <- map snd <$> unwrapSetOfComposite selType- case length f of- 0 -> Left [InternalError "no columns in scalar subquery?"]- 1 -> Right $ head f- _ -> Right $ AnonymousRecordType f- {-# LINE 3808 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 281, column 9)- _backTree =- {-# LINE 281 "./TypeChecking/Expressions.ag" #-}- ScalarSubQuery ann_ _selIannotatedTree- {-# LINE 3813 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 177, column 7)- _lhsOliftedColumnName =- {-# LINE 177 "./TypeChecking/SelectLists.ag" #-}- ""- {-# LINE 3818 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- ScalarSubQuery ann_ _selIannotatedTree- {-# LINE 3823 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- ScalarSubQuery ann_ _selIoriginalTree- {-# LINE 3828 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 3833 "AstInternal.hs" #-}- -- copy rule (down)- _selOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 3838 "AstInternal.hs" #-}- -- copy rule (down)- _selOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 3843 "AstInternal.hs" #-}- ( _selIannotatedTree,_selIlibUpdates,_selIoriginalTree) =- (sel_ _selOcat _selOlib )- in ( _lhsOannotatedTree,_lhsOliftedColumnName,_lhsOoriginalTree)))-sem_Expression_StringLit :: Annotation ->- String ->- String ->- T_Expression -sem_Expression_StringLit ann_ quote_ value_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Expression- _prototype :: (Maybe FunctionPrototype)- _lhsOliftedColumnName :: String- _lhsOoriginalTree :: Expression- -- "./TypeChecking/Expressions.ag"(line 14, column 9)- _lhsOannotatedTree =- {-# LINE 14 "./TypeChecking/Expressions.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ fmap ((:[]) . FunctionPrototypeA) _prototype- {-# LINE 3865 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 29, column 9)- _prototype =- {-# LINE 29 "./TypeChecking/Expressions.ag" #-}- Nothing- {-# LINE 3870 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 39, column 18)- _tpe =- {-# LINE 39 "./TypeChecking/Expressions.ag" #-}- Right UnknownType- {-# LINE 3875 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 49, column 9)- _backTree =- {-# LINE 49 "./TypeChecking/Expressions.ag" #-}- StringLit ann_ quote_ value_- {-# LINE 3880 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 177, column 7)- _lhsOliftedColumnName =- {-# LINE 177 "./TypeChecking/SelectLists.ag" #-}- ""- {-# LINE 3885 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- StringLit ann_ quote_ value_- {-# LINE 3890 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- StringLit ann_ quote_ value_- {-# LINE 3895 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 3900 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOliftedColumnName,_lhsOoriginalTree)))-sem_Expression_WindowFn :: Annotation ->- T_Expression ->- T_ExpressionList ->- T_ExpressionList ->- T_Direction ->- T_FrameClause ->- T_Expression -sem_Expression_WindowFn ann_ fn_ partitionBy_ orderBy_ dir_ frm_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Expression- _prototype :: (Maybe FunctionPrototype)- _lhsOoriginalTree :: Expression- _lhsOliftedColumnName :: String- _fnOcat :: Catalog- _fnOlib :: LocalIdentifierBindings- _partitionByOcat :: Catalog- _partitionByOlib :: LocalIdentifierBindings- _orderByOcat :: Catalog- _orderByOlib :: LocalIdentifierBindings- _dirOcat :: Catalog- _dirOlib :: LocalIdentifierBindings- _frmOcat :: Catalog- _frmOlib :: LocalIdentifierBindings- _fnIannotatedTree :: Expression- _fnIliftedColumnName :: String- _fnIoriginalTree :: Expression- _partitionByIannotatedTree :: ExpressionList- _partitionByIoriginalTree :: ExpressionList- _partitionByItypeList :: ([Type])- _orderByIannotatedTree :: ExpressionList- _orderByIoriginalTree :: ExpressionList- _orderByItypeList :: ([Type])- _dirIannotatedTree :: Direction- _dirIoriginalTree :: Direction- _frmIannotatedTree :: FrameClause- _frmIoriginalTree :: FrameClause- -- "./TypeChecking/Expressions.ag"(line 14, column 9)- _lhsOannotatedTree =- {-# LINE 14 "./TypeChecking/Expressions.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ fmap ((:[]) . FunctionPrototypeA) _prototype- {-# LINE 3946 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 29, column 9)- _prototype =- {-# LINE 29 "./TypeChecking/Expressions.ag" #-}- Nothing- {-# LINE 3951 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 87, column 9)- _tpe =- {-# LINE 87 "./TypeChecking/Expressions.ag" #-}- Right (getTypeAnnotation _fnIannotatedTree)- {-# LINE 3956 "AstInternal.hs" #-}- -- "./TypeChecking/Expressions.ag"(line 88, column 9)- _backTree =- {-# LINE 88 "./TypeChecking/Expressions.ag" #-}- WindowFn ann_- _fnIannotatedTree- _partitionByIannotatedTree- _orderByIannotatedTree- _dirIannotatedTree- _frmIannotatedTree- {-# LINE 3966 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- WindowFn ann_ _fnIannotatedTree _partitionByIannotatedTree _orderByIannotatedTree _dirIannotatedTree _frmIannotatedTree- {-# LINE 3971 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- WindowFn ann_ _fnIoriginalTree _partitionByIoriginalTree _orderByIoriginalTree _dirIoriginalTree _frmIoriginalTree- {-# LINE 3976 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 3981 "AstInternal.hs" #-}- -- copy rule (up)- _lhsOliftedColumnName =- {-# LINE 161 "./TypeChecking/SelectLists.ag" #-}- _fnIliftedColumnName- {-# LINE 3986 "AstInternal.hs" #-}- -- copy rule (down)- _fnOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 3991 "AstInternal.hs" #-}- -- copy rule (down)- _fnOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 3996 "AstInternal.hs" #-}- -- copy rule (down)- _partitionByOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 4001 "AstInternal.hs" #-}- -- copy rule (down)- _partitionByOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 4006 "AstInternal.hs" #-}- -- copy rule (down)- _orderByOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 4011 "AstInternal.hs" #-}- -- copy rule (down)- _orderByOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 4016 "AstInternal.hs" #-}- -- copy rule (down)- _dirOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 4021 "AstInternal.hs" #-}- -- copy rule (down)- _dirOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 4026 "AstInternal.hs" #-}- -- copy rule (down)- _frmOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 4031 "AstInternal.hs" #-}- -- copy rule (down)- _frmOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 4036 "AstInternal.hs" #-}- ( _fnIannotatedTree,_fnIliftedColumnName,_fnIoriginalTree) =- (fn_ _fnOcat _fnOlib )- ( _partitionByIannotatedTree,_partitionByIoriginalTree,_partitionByItypeList) =- (partitionBy_ _partitionByOcat _partitionByOlib )- ( _orderByIannotatedTree,_orderByIoriginalTree,_orderByItypeList) =- (orderBy_ _orderByOcat _orderByOlib )- ( _dirIannotatedTree,_dirIoriginalTree) =- (dir_ _dirOcat _dirOlib )- ( _frmIannotatedTree,_frmIoriginalTree) =- (frm_ _frmOcat _frmOlib )- in ( _lhsOannotatedTree,_lhsOliftedColumnName,_lhsOoriginalTree)))--- ExpressionDirectionPair --------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative Tuple:- child x1 : Expression - child x2 : Direction - visit 0:- local annotatedTree : _- local originalTree : _--}-type ExpressionDirectionPair = ( (Expression),(Direction))--- cata-sem_ExpressionDirectionPair :: ExpressionDirectionPair ->- T_ExpressionDirectionPair -sem_ExpressionDirectionPair ( x1,x2) =- (sem_ExpressionDirectionPair_Tuple (sem_Expression x1 ) (sem_Direction x2 ) )--- semantic domain-type T_ExpressionDirectionPair = Catalog ->- LocalIdentifierBindings ->- ( ExpressionDirectionPair,ExpressionDirectionPair)-data Inh_ExpressionDirectionPair = Inh_ExpressionDirectionPair {cat_Inh_ExpressionDirectionPair :: Catalog,lib_Inh_ExpressionDirectionPair :: LocalIdentifierBindings}-data Syn_ExpressionDirectionPair = Syn_ExpressionDirectionPair {annotatedTree_Syn_ExpressionDirectionPair :: ExpressionDirectionPair,originalTree_Syn_ExpressionDirectionPair :: ExpressionDirectionPair}-wrap_ExpressionDirectionPair :: T_ExpressionDirectionPair ->- Inh_ExpressionDirectionPair ->- Syn_ExpressionDirectionPair -wrap_ExpressionDirectionPair sem (Inh_ExpressionDirectionPair _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_ExpressionDirectionPair _lhsOannotatedTree _lhsOoriginalTree ))-sem_ExpressionDirectionPair_Tuple :: T_Expression ->- T_Direction ->- T_ExpressionDirectionPair -sem_ExpressionDirectionPair_Tuple x1_ x2_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: ExpressionDirectionPair- _lhsOoriginalTree :: ExpressionDirectionPair- _x1Ocat :: Catalog- _x1Olib :: LocalIdentifierBindings- _x2Ocat :: Catalog- _x2Olib :: LocalIdentifierBindings- _x1IannotatedTree :: Expression- _x1IliftedColumnName :: String- _x1IoriginalTree :: Expression- _x2IannotatedTree :: Direction- _x2IoriginalTree :: Direction- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (_x1IannotatedTree,_x2IannotatedTree)- {-# LINE 4105 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (_x1IoriginalTree,_x2IoriginalTree)- {-# LINE 4110 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 4115 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 4120 "AstInternal.hs" #-}- -- copy rule (down)- _x1Ocat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 4125 "AstInternal.hs" #-}- -- copy rule (down)- _x1Olib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 4130 "AstInternal.hs" #-}- -- copy rule (down)- _x2Ocat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 4135 "AstInternal.hs" #-}- -- copy rule (down)- _x2Olib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 4140 "AstInternal.hs" #-}- ( _x1IannotatedTree,_x1IliftedColumnName,_x1IoriginalTree) =- (x1_ _x1Ocat _x1Olib )- ( _x2IannotatedTree,_x2IoriginalTree) =- (x2_ _x2Ocat _x2Olib )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- ExpressionDirectionPairList ----------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative Cons:- child hd : ExpressionDirectionPair - child tl : ExpressionDirectionPairList - visit 0:- local annotatedTree : _- local originalTree : _- alternative Nil:- visit 0:- local annotatedTree : _- local originalTree : _--}-type ExpressionDirectionPairList = [(ExpressionDirectionPair)]--- cata-sem_ExpressionDirectionPairList :: ExpressionDirectionPairList ->- T_ExpressionDirectionPairList -sem_ExpressionDirectionPairList list =- (Prelude.foldr sem_ExpressionDirectionPairList_Cons sem_ExpressionDirectionPairList_Nil (Prelude.map sem_ExpressionDirectionPair list) )--- semantic domain-type T_ExpressionDirectionPairList = Catalog ->- LocalIdentifierBindings ->- ( ExpressionDirectionPairList,ExpressionDirectionPairList)-data Inh_ExpressionDirectionPairList = Inh_ExpressionDirectionPairList {cat_Inh_ExpressionDirectionPairList :: Catalog,lib_Inh_ExpressionDirectionPairList :: LocalIdentifierBindings}-data Syn_ExpressionDirectionPairList = Syn_ExpressionDirectionPairList {annotatedTree_Syn_ExpressionDirectionPairList :: ExpressionDirectionPairList,originalTree_Syn_ExpressionDirectionPairList :: ExpressionDirectionPairList}-wrap_ExpressionDirectionPairList :: T_ExpressionDirectionPairList ->- Inh_ExpressionDirectionPairList ->- Syn_ExpressionDirectionPairList -wrap_ExpressionDirectionPairList sem (Inh_ExpressionDirectionPairList _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_ExpressionDirectionPairList _lhsOannotatedTree _lhsOoriginalTree ))-sem_ExpressionDirectionPairList_Cons :: T_ExpressionDirectionPair ->- T_ExpressionDirectionPairList ->- T_ExpressionDirectionPairList -sem_ExpressionDirectionPairList_Cons hd_ tl_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: ExpressionDirectionPairList- _lhsOoriginalTree :: ExpressionDirectionPairList- _hdOcat :: Catalog- _hdOlib :: LocalIdentifierBindings- _tlOcat :: Catalog- _tlOlib :: LocalIdentifierBindings- _hdIannotatedTree :: ExpressionDirectionPair- _hdIoriginalTree :: ExpressionDirectionPair- _tlIannotatedTree :: ExpressionDirectionPairList- _tlIoriginalTree :: ExpressionDirectionPairList- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIannotatedTree _tlIannotatedTree- {-# LINE 4206 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIoriginalTree _tlIoriginalTree- {-# LINE 4211 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 4216 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 4221 "AstInternal.hs" #-}- -- copy rule (down)- _hdOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 4226 "AstInternal.hs" #-}- -- copy rule (down)- _hdOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 4231 "AstInternal.hs" #-}- -- copy rule (down)- _tlOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 4236 "AstInternal.hs" #-}- -- copy rule (down)- _tlOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 4241 "AstInternal.hs" #-}- ( _hdIannotatedTree,_hdIoriginalTree) =- (hd_ _hdOcat _hdOlib )- ( _tlIannotatedTree,_tlIoriginalTree) =- (tl_ _tlOcat _tlOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_ExpressionDirectionPairList_Nil :: T_ExpressionDirectionPairList -sem_ExpressionDirectionPairList_Nil =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: ExpressionDirectionPairList- _lhsOoriginalTree :: ExpressionDirectionPairList- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 4257 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 4262 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 4267 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 4272 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- ExpressionList -----------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - typeList : [Type]- alternatives:- alternative Cons:- child hd : Expression - child tl : ExpressionList - visit 0:- local annotatedTree : _- local originalTree : _- alternative Nil:- visit 0:- local annotatedTree : _- local originalTree : _--}-type ExpressionList = [(Expression)]--- cata-sem_ExpressionList :: ExpressionList ->- T_ExpressionList -sem_ExpressionList list =- (Prelude.foldr sem_ExpressionList_Cons sem_ExpressionList_Nil (Prelude.map sem_Expression list) )--- semantic domain-type T_ExpressionList = Catalog ->- LocalIdentifierBindings ->- ( ExpressionList,ExpressionList,([Type]))-data Inh_ExpressionList = Inh_ExpressionList {cat_Inh_ExpressionList :: Catalog,lib_Inh_ExpressionList :: LocalIdentifierBindings}-data Syn_ExpressionList = Syn_ExpressionList {annotatedTree_Syn_ExpressionList :: ExpressionList,originalTree_Syn_ExpressionList :: ExpressionList,typeList_Syn_ExpressionList :: [Type]}-wrap_ExpressionList :: T_ExpressionList ->- Inh_ExpressionList ->- Syn_ExpressionList -wrap_ExpressionList sem (Inh_ExpressionList _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree,_lhsOtypeList) =- (sem _lhsIcat _lhsIlib )- in (Syn_ExpressionList _lhsOannotatedTree _lhsOoriginalTree _lhsOtypeList ))-sem_ExpressionList_Cons :: T_Expression ->- T_ExpressionList ->- T_ExpressionList -sem_ExpressionList_Cons hd_ tl_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOtypeList :: ([Type])- _lhsOannotatedTree :: ExpressionList- _lhsOoriginalTree :: ExpressionList- _hdOcat :: Catalog- _hdOlib :: LocalIdentifierBindings- _tlOcat :: Catalog- _tlOlib :: LocalIdentifierBindings- _hdIannotatedTree :: Expression- _hdIliftedColumnName :: String- _hdIoriginalTree :: Expression- _tlIannotatedTree :: ExpressionList- _tlIoriginalTree :: ExpressionList- _tlItypeList :: ([Type])- -- "./TypeChecking/Misc.ag"(line 52, column 12)- _lhsOtypeList =- {-# LINE 52 "./TypeChecking/Misc.ag" #-}- getTypeAnnotation _hdIannotatedTree : _tlItypeList- {-# LINE 4338 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIannotatedTree _tlIannotatedTree- {-# LINE 4343 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIoriginalTree _tlIoriginalTree- {-# LINE 4348 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 4353 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 4358 "AstInternal.hs" #-}- -- copy rule (down)- _hdOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 4363 "AstInternal.hs" #-}- -- copy rule (down)- _hdOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 4368 "AstInternal.hs" #-}- -- copy rule (down)- _tlOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 4373 "AstInternal.hs" #-}- -- copy rule (down)- _tlOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 4378 "AstInternal.hs" #-}- ( _hdIannotatedTree,_hdIliftedColumnName,_hdIoriginalTree) =- (hd_ _hdOcat _hdOlib )- ( _tlIannotatedTree,_tlIoriginalTree,_tlItypeList) =- (tl_ _tlOcat _tlOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree,_lhsOtypeList)))-sem_ExpressionList_Nil :: T_ExpressionList -sem_ExpressionList_Nil =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOtypeList :: ([Type])- _lhsOannotatedTree :: ExpressionList- _lhsOoriginalTree :: ExpressionList- -- "./TypeChecking/Misc.ag"(line 53, column 11)- _lhsOtypeList =- {-# LINE 53 "./TypeChecking/Misc.ag" #-}- []- {-# LINE 4395 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 4400 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 4405 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 4410 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 4415 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree,_lhsOtypeList)))--- ExpressionListList -------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - typeListList : [[Type]]- alternatives:- alternative Cons:- child hd : ExpressionList - child tl : ExpressionListList - visit 0:- local annotatedTree : _- local originalTree : _- alternative Nil:- visit 0:- local annotatedTree : _- local originalTree : _--}-type ExpressionListList = [(ExpressionList)]--- cata-sem_ExpressionListList :: ExpressionListList ->- T_ExpressionListList -sem_ExpressionListList list =- (Prelude.foldr sem_ExpressionListList_Cons sem_ExpressionListList_Nil (Prelude.map sem_ExpressionList list) )--- semantic domain-type T_ExpressionListList = Catalog ->- LocalIdentifierBindings ->- ( ExpressionListList,ExpressionListList,([[Type]]))-data Inh_ExpressionListList = Inh_ExpressionListList {cat_Inh_ExpressionListList :: Catalog,lib_Inh_ExpressionListList :: LocalIdentifierBindings}-data Syn_ExpressionListList = Syn_ExpressionListList {annotatedTree_Syn_ExpressionListList :: ExpressionListList,originalTree_Syn_ExpressionListList :: ExpressionListList,typeListList_Syn_ExpressionListList :: [[Type]]}-wrap_ExpressionListList :: T_ExpressionListList ->- Inh_ExpressionListList ->- Syn_ExpressionListList -wrap_ExpressionListList sem (Inh_ExpressionListList _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree,_lhsOtypeListList) =- (sem _lhsIcat _lhsIlib )- in (Syn_ExpressionListList _lhsOannotatedTree _lhsOoriginalTree _lhsOtypeListList ))-sem_ExpressionListList_Cons :: T_ExpressionList ->- T_ExpressionListList ->- T_ExpressionListList -sem_ExpressionListList_Cons hd_ tl_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOtypeListList :: ([[Type]])- _lhsOannotatedTree :: ExpressionListList- _lhsOoriginalTree :: ExpressionListList- _hdOcat :: Catalog- _hdOlib :: LocalIdentifierBindings- _tlOcat :: Catalog- _tlOlib :: LocalIdentifierBindings- _hdIannotatedTree :: ExpressionList- _hdIoriginalTree :: ExpressionList- _hdItypeList :: ([Type])- _tlIannotatedTree :: ExpressionListList- _tlIoriginalTree :: ExpressionListList- _tlItypeListList :: ([[Type]])- -- "./TypeChecking/Misc.ag"(line 59, column 12)- _lhsOtypeListList =- {-# LINE 59 "./TypeChecking/Misc.ag" #-}- _hdItypeList : _tlItypeListList- {-# LINE 4481 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIannotatedTree _tlIannotatedTree- {-# LINE 4486 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIoriginalTree _tlIoriginalTree- {-# LINE 4491 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 4496 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 4501 "AstInternal.hs" #-}- -- copy rule (down)- _hdOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 4506 "AstInternal.hs" #-}- -- copy rule (down)- _hdOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 4511 "AstInternal.hs" #-}- -- copy rule (down)- _tlOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 4516 "AstInternal.hs" #-}- -- copy rule (down)- _tlOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 4521 "AstInternal.hs" #-}- ( _hdIannotatedTree,_hdIoriginalTree,_hdItypeList) =- (hd_ _hdOcat _hdOlib )- ( _tlIannotatedTree,_tlIoriginalTree,_tlItypeListList) =- (tl_ _tlOcat _tlOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree,_lhsOtypeListList)))-sem_ExpressionListList_Nil :: T_ExpressionListList -sem_ExpressionListList_Nil =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOtypeListList :: ([[Type]])- _lhsOannotatedTree :: ExpressionListList- _lhsOoriginalTree :: ExpressionListList- -- "./TypeChecking/Misc.ag"(line 60, column 11)- _lhsOtypeListList =- {-# LINE 60 "./TypeChecking/Misc.ag" #-}- []- {-# LINE 4538 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 4543 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 4548 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 4553 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 4558 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree,_lhsOtypeListList)))--- ExpressionListStatementListPair ------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative Tuple:- child x1 : ExpressionList - child x2 : StatementList - visit 0:- local annotatedTree : _- local originalTree : _--}-type ExpressionListStatementListPair = ( (ExpressionList),(StatementList))--- cata-sem_ExpressionListStatementListPair :: ExpressionListStatementListPair ->- T_ExpressionListStatementListPair -sem_ExpressionListStatementListPair ( x1,x2) =- (sem_ExpressionListStatementListPair_Tuple (sem_ExpressionList x1 ) (sem_StatementList x2 ) )--- semantic domain-type T_ExpressionListStatementListPair = Catalog ->- LocalIdentifierBindings ->- ( ExpressionListStatementListPair,ExpressionListStatementListPair)-data Inh_ExpressionListStatementListPair = Inh_ExpressionListStatementListPair {cat_Inh_ExpressionListStatementListPair :: Catalog,lib_Inh_ExpressionListStatementListPair :: LocalIdentifierBindings}-data Syn_ExpressionListStatementListPair = Syn_ExpressionListStatementListPair {annotatedTree_Syn_ExpressionListStatementListPair :: ExpressionListStatementListPair,originalTree_Syn_ExpressionListStatementListPair :: ExpressionListStatementListPair}-wrap_ExpressionListStatementListPair :: T_ExpressionListStatementListPair ->- Inh_ExpressionListStatementListPair ->- Syn_ExpressionListStatementListPair -wrap_ExpressionListStatementListPair sem (Inh_ExpressionListStatementListPair _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_ExpressionListStatementListPair _lhsOannotatedTree _lhsOoriginalTree ))-sem_ExpressionListStatementListPair_Tuple :: T_ExpressionList ->- T_StatementList ->- T_ExpressionListStatementListPair -sem_ExpressionListStatementListPair_Tuple x1_ x2_ =- (\ _lhsIcat- _lhsIlib ->- (let _x2OcatUpdates :: ([CatalogUpdate])- _x2OlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: ExpressionListStatementListPair- _lhsOoriginalTree :: ExpressionListStatementListPair- _x1Ocat :: Catalog- _x1Olib :: LocalIdentifierBindings- _x2Ocat :: Catalog- _x2Olib :: LocalIdentifierBindings- _x1IannotatedTree :: ExpressionList- _x1IoriginalTree :: ExpressionList- _x1ItypeList :: ([Type])- _x2IannotatedTree :: StatementList- _x2IoriginalTree :: StatementList- _x2IproducedCat :: Catalog- _x2IproducedLib :: LocalIdentifierBindings- -- "./TypeChecking/Statements.ag"(line 94, column 9)- _x2OcatUpdates =- {-# LINE 94 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 4621 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 95, column 9)- _x2OlibUpdates =- {-# LINE 95 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 4626 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (_x1IannotatedTree,_x2IannotatedTree)- {-# LINE 4631 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (_x1IoriginalTree,_x2IoriginalTree)- {-# LINE 4636 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 4641 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 4646 "AstInternal.hs" #-}- -- copy rule (down)- _x1Ocat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 4651 "AstInternal.hs" #-}- -- copy rule (down)- _x1Olib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 4656 "AstInternal.hs" #-}- -- copy rule (down)- _x2Ocat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 4661 "AstInternal.hs" #-}- -- copy rule (down)- _x2Olib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 4666 "AstInternal.hs" #-}- ( _x1IannotatedTree,_x1IoriginalTree,_x1ItypeList) =- (x1_ _x1Ocat _x1Olib )- ( _x2IannotatedTree,_x2IoriginalTree,_x2IproducedCat,_x2IproducedLib) =- (x2_ _x2Ocat _x2OcatUpdates _x2Olib _x2OlibUpdates )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- ExpressionListStatementListPairList --------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative Cons:- child hd : ExpressionListStatementListPair - child tl : ExpressionListStatementListPairList - visit 0:- local annotatedTree : _- local originalTree : _- alternative Nil:- visit 0:- local annotatedTree : _- local originalTree : _--}-type ExpressionListStatementListPairList = [(ExpressionListStatementListPair)]--- cata-sem_ExpressionListStatementListPairList :: ExpressionListStatementListPairList ->- T_ExpressionListStatementListPairList -sem_ExpressionListStatementListPairList list =- (Prelude.foldr sem_ExpressionListStatementListPairList_Cons sem_ExpressionListStatementListPairList_Nil (Prelude.map sem_ExpressionListStatementListPair list) )--- semantic domain-type T_ExpressionListStatementListPairList = Catalog ->- LocalIdentifierBindings ->- ( ExpressionListStatementListPairList,ExpressionListStatementListPairList)-data Inh_ExpressionListStatementListPairList = Inh_ExpressionListStatementListPairList {cat_Inh_ExpressionListStatementListPairList :: Catalog,lib_Inh_ExpressionListStatementListPairList :: LocalIdentifierBindings}-data Syn_ExpressionListStatementListPairList = Syn_ExpressionListStatementListPairList {annotatedTree_Syn_ExpressionListStatementListPairList :: ExpressionListStatementListPairList,originalTree_Syn_ExpressionListStatementListPairList :: ExpressionListStatementListPairList}-wrap_ExpressionListStatementListPairList :: T_ExpressionListStatementListPairList ->- Inh_ExpressionListStatementListPairList ->- Syn_ExpressionListStatementListPairList -wrap_ExpressionListStatementListPairList sem (Inh_ExpressionListStatementListPairList _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_ExpressionListStatementListPairList _lhsOannotatedTree _lhsOoriginalTree ))-sem_ExpressionListStatementListPairList_Cons :: T_ExpressionListStatementListPair ->- T_ExpressionListStatementListPairList ->- T_ExpressionListStatementListPairList -sem_ExpressionListStatementListPairList_Cons hd_ tl_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: ExpressionListStatementListPairList- _lhsOoriginalTree :: ExpressionListStatementListPairList- _hdOcat :: Catalog- _hdOlib :: LocalIdentifierBindings- _tlOcat :: Catalog- _tlOlib :: LocalIdentifierBindings- _hdIannotatedTree :: ExpressionListStatementListPair- _hdIoriginalTree :: ExpressionListStatementListPair- _tlIannotatedTree :: ExpressionListStatementListPairList- _tlIoriginalTree :: ExpressionListStatementListPairList- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIannotatedTree _tlIannotatedTree- {-# LINE 4732 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIoriginalTree _tlIoriginalTree- {-# LINE 4737 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 4742 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 4747 "AstInternal.hs" #-}- -- copy rule (down)- _hdOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 4752 "AstInternal.hs" #-}- -- copy rule (down)- _hdOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 4757 "AstInternal.hs" #-}- -- copy rule (down)- _tlOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 4762 "AstInternal.hs" #-}- -- copy rule (down)- _tlOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 4767 "AstInternal.hs" #-}- ( _hdIannotatedTree,_hdIoriginalTree) =- (hd_ _hdOcat _hdOlib )- ( _tlIannotatedTree,_tlIoriginalTree) =- (tl_ _tlOcat _tlOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_ExpressionListStatementListPairList_Nil :: T_ExpressionListStatementListPairList -sem_ExpressionListStatementListPairList_Nil =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: ExpressionListStatementListPairList- _lhsOoriginalTree :: ExpressionListStatementListPairList- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 4783 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 4788 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 4793 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 4798 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- ExpressionRoot -----------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative ExpressionRoot:- child expr : Expression - visit 0:- local annotatedTree : _- local originalTree : _--}-data ExpressionRoot = ExpressionRoot (Expression) - deriving ( Show)--- cata-sem_ExpressionRoot :: ExpressionRoot ->- T_ExpressionRoot -sem_ExpressionRoot (ExpressionRoot _expr ) =- (sem_ExpressionRoot_ExpressionRoot (sem_Expression _expr ) )--- semantic domain-type T_ExpressionRoot = Catalog ->- LocalIdentifierBindings ->- ( ExpressionRoot,ExpressionRoot)-data Inh_ExpressionRoot = Inh_ExpressionRoot {cat_Inh_ExpressionRoot :: Catalog,lib_Inh_ExpressionRoot :: LocalIdentifierBindings}-data Syn_ExpressionRoot = Syn_ExpressionRoot {annotatedTree_Syn_ExpressionRoot :: ExpressionRoot,originalTree_Syn_ExpressionRoot :: ExpressionRoot}-wrap_ExpressionRoot :: T_ExpressionRoot ->- Inh_ExpressionRoot ->- Syn_ExpressionRoot -wrap_ExpressionRoot sem (Inh_ExpressionRoot _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_ExpressionRoot _lhsOannotatedTree _lhsOoriginalTree ))-sem_ExpressionRoot_ExpressionRoot :: T_Expression ->- T_ExpressionRoot -sem_ExpressionRoot_ExpressionRoot expr_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: ExpressionRoot- _lhsOoriginalTree :: ExpressionRoot- _exprOcat :: Catalog- _exprOlib :: LocalIdentifierBindings- _exprIannotatedTree :: Expression- _exprIliftedColumnName :: String- _exprIoriginalTree :: Expression- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- ExpressionRoot _exprIannotatedTree- {-# LINE 4852 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- ExpressionRoot _exprIoriginalTree- {-# LINE 4857 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 4862 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 4867 "AstInternal.hs" #-}- -- copy rule (down)- _exprOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 4872 "AstInternal.hs" #-}- -- copy rule (down)- _exprOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 4877 "AstInternal.hs" #-}- ( _exprIannotatedTree,_exprIliftedColumnName,_exprIoriginalTree) =- (expr_ _exprOcat _exprOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- ExpressionStatementListPair ----------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative Tuple:- child x1 : Expression - child x2 : StatementList - visit 0:- local annotatedTree : _- local originalTree : _--}-type ExpressionStatementListPair = ( (Expression),(StatementList))--- cata-sem_ExpressionStatementListPair :: ExpressionStatementListPair ->- T_ExpressionStatementListPair -sem_ExpressionStatementListPair ( x1,x2) =- (sem_ExpressionStatementListPair_Tuple (sem_Expression x1 ) (sem_StatementList x2 ) )--- semantic domain-type T_ExpressionStatementListPair = Catalog ->- LocalIdentifierBindings ->- ( ExpressionStatementListPair,ExpressionStatementListPair)-data Inh_ExpressionStatementListPair = Inh_ExpressionStatementListPair {cat_Inh_ExpressionStatementListPair :: Catalog,lib_Inh_ExpressionStatementListPair :: LocalIdentifierBindings}-data Syn_ExpressionStatementListPair = Syn_ExpressionStatementListPair {annotatedTree_Syn_ExpressionStatementListPair :: ExpressionStatementListPair,originalTree_Syn_ExpressionStatementListPair :: ExpressionStatementListPair}-wrap_ExpressionStatementListPair :: T_ExpressionStatementListPair ->- Inh_ExpressionStatementListPair ->- Syn_ExpressionStatementListPair -wrap_ExpressionStatementListPair sem (Inh_ExpressionStatementListPair _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_ExpressionStatementListPair _lhsOannotatedTree _lhsOoriginalTree ))-sem_ExpressionStatementListPair_Tuple :: T_Expression ->- T_StatementList ->- T_ExpressionStatementListPair -sem_ExpressionStatementListPair_Tuple x1_ x2_ =- (\ _lhsIcat- _lhsIlib ->- (let _x2OcatUpdates :: ([CatalogUpdate])- _x2OlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: ExpressionStatementListPair- _lhsOoriginalTree :: ExpressionStatementListPair- _x1Ocat :: Catalog- _x1Olib :: LocalIdentifierBindings- _x2Ocat :: Catalog- _x2Olib :: LocalIdentifierBindings- _x1IannotatedTree :: Expression- _x1IliftedColumnName :: String- _x1IoriginalTree :: Expression- _x2IannotatedTree :: StatementList- _x2IoriginalTree :: StatementList- _x2IproducedCat :: Catalog- _x2IproducedLib :: LocalIdentifierBindings- -- "./TypeChecking/Statements.ag"(line 98, column 9)- _x2OcatUpdates =- {-# LINE 98 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 4942 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 99, column 9)- _x2OlibUpdates =- {-# LINE 99 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 4947 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (_x1IannotatedTree,_x2IannotatedTree)- {-# LINE 4952 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (_x1IoriginalTree,_x2IoriginalTree)- {-# LINE 4957 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 4962 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 4967 "AstInternal.hs" #-}- -- copy rule (down)- _x1Ocat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 4972 "AstInternal.hs" #-}- -- copy rule (down)- _x1Olib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 4977 "AstInternal.hs" #-}- -- copy rule (down)- _x2Ocat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 4982 "AstInternal.hs" #-}- -- copy rule (down)- _x2Olib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 4987 "AstInternal.hs" #-}- ( _x1IannotatedTree,_x1IliftedColumnName,_x1IoriginalTree) =- (x1_ _x1Ocat _x1Olib )- ( _x2IannotatedTree,_x2IoriginalTree,_x2IproducedCat,_x2IproducedLib) =- (x2_ _x2Ocat _x2OcatUpdates _x2Olib _x2OlibUpdates )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- ExpressionStatementListPairList ------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative Cons:- child hd : ExpressionStatementListPair - child tl : ExpressionStatementListPairList - visit 0:- local annotatedTree : _- local originalTree : _- alternative Nil:- visit 0:- local annotatedTree : _- local originalTree : _--}-type ExpressionStatementListPairList = [(ExpressionStatementListPair)]--- cata-sem_ExpressionStatementListPairList :: ExpressionStatementListPairList ->- T_ExpressionStatementListPairList -sem_ExpressionStatementListPairList list =- (Prelude.foldr sem_ExpressionStatementListPairList_Cons sem_ExpressionStatementListPairList_Nil (Prelude.map sem_ExpressionStatementListPair list) )--- semantic domain-type T_ExpressionStatementListPairList = Catalog ->- LocalIdentifierBindings ->- ( ExpressionStatementListPairList,ExpressionStatementListPairList)-data Inh_ExpressionStatementListPairList = Inh_ExpressionStatementListPairList {cat_Inh_ExpressionStatementListPairList :: Catalog,lib_Inh_ExpressionStatementListPairList :: LocalIdentifierBindings}-data Syn_ExpressionStatementListPairList = Syn_ExpressionStatementListPairList {annotatedTree_Syn_ExpressionStatementListPairList :: ExpressionStatementListPairList,originalTree_Syn_ExpressionStatementListPairList :: ExpressionStatementListPairList}-wrap_ExpressionStatementListPairList :: T_ExpressionStatementListPairList ->- Inh_ExpressionStatementListPairList ->- Syn_ExpressionStatementListPairList -wrap_ExpressionStatementListPairList sem (Inh_ExpressionStatementListPairList _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_ExpressionStatementListPairList _lhsOannotatedTree _lhsOoriginalTree ))-sem_ExpressionStatementListPairList_Cons :: T_ExpressionStatementListPair ->- T_ExpressionStatementListPairList ->- T_ExpressionStatementListPairList -sem_ExpressionStatementListPairList_Cons hd_ tl_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: ExpressionStatementListPairList- _lhsOoriginalTree :: ExpressionStatementListPairList- _hdOcat :: Catalog- _hdOlib :: LocalIdentifierBindings- _tlOcat :: Catalog- _tlOlib :: LocalIdentifierBindings- _hdIannotatedTree :: ExpressionStatementListPair- _hdIoriginalTree :: ExpressionStatementListPair- _tlIannotatedTree :: ExpressionStatementListPairList- _tlIoriginalTree :: ExpressionStatementListPairList- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIannotatedTree _tlIannotatedTree- {-# LINE 5053 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIoriginalTree _tlIoriginalTree- {-# LINE 5058 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 5063 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 5068 "AstInternal.hs" #-}- -- copy rule (down)- _hdOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 5073 "AstInternal.hs" #-}- -- copy rule (down)- _hdOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 5078 "AstInternal.hs" #-}- -- copy rule (down)- _tlOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 5083 "AstInternal.hs" #-}- -- copy rule (down)- _tlOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 5088 "AstInternal.hs" #-}- ( _hdIannotatedTree,_hdIoriginalTree) =- (hd_ _hdOcat _hdOlib )- ( _tlIannotatedTree,_tlIoriginalTree) =- (tl_ _tlOcat _tlOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_ExpressionStatementListPairList_Nil :: T_ExpressionStatementListPairList -sem_ExpressionStatementListPairList_Nil =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: ExpressionStatementListPairList- _lhsOoriginalTree :: ExpressionStatementListPairList- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 5104 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 5109 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 5114 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 5119 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- FnBody -------------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative PlpgsqlFnBody:- child ann : {Annotation}- child vars : VarDefList - child sts : StatementList - visit 0:- local annotatedTree : _- local originalTree : _- alternative SqlFnBody:- child ann : {Annotation}- child sts : StatementList - visit 0:- local annotatedTree : _- local originalTree : _--}-data FnBody = PlpgsqlFnBody (Annotation) (VarDefList) (StatementList) - | SqlFnBody (Annotation) (StatementList) - deriving ( Data,Eq,Show,Typeable)--- cata-sem_FnBody :: FnBody ->- T_FnBody -sem_FnBody (PlpgsqlFnBody _ann _vars _sts ) =- (sem_FnBody_PlpgsqlFnBody _ann (sem_VarDefList _vars ) (sem_StatementList _sts ) )-sem_FnBody (SqlFnBody _ann _sts ) =- (sem_FnBody_SqlFnBody _ann (sem_StatementList _sts ) )--- semantic domain-type T_FnBody = Catalog ->- LocalIdentifierBindings ->- ( FnBody,FnBody)-data Inh_FnBody = Inh_FnBody {cat_Inh_FnBody :: Catalog,lib_Inh_FnBody :: LocalIdentifierBindings}-data Syn_FnBody = Syn_FnBody {annotatedTree_Syn_FnBody :: FnBody,originalTree_Syn_FnBody :: FnBody}-wrap_FnBody :: T_FnBody ->- Inh_FnBody ->- Syn_FnBody -wrap_FnBody sem (Inh_FnBody _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_FnBody _lhsOannotatedTree _lhsOoriginalTree ))-sem_FnBody_PlpgsqlFnBody :: Annotation ->- T_VarDefList ->- T_StatementList ->- T_FnBody -sem_FnBody_PlpgsqlFnBody ann_ vars_ sts_ =- (\ _lhsIcat- _lhsIlib ->- (let _stsOcatUpdates :: ([CatalogUpdate])- _stsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _stsOlib :: LocalIdentifierBindings- _lhsOannotatedTree :: FnBody- _lhsOoriginalTree :: FnBody- _varsOcat :: Catalog- _varsOlib :: LocalIdentifierBindings- _stsOcat :: Catalog- _varsIannotatedTree :: VarDefList- _varsIdefs :: ([(String,Type)])- _varsIoriginalTree :: VarDefList- _stsIannotatedTree :: StatementList- _stsIoriginalTree :: StatementList- _stsIproducedCat :: Catalog- _stsIproducedLib :: LocalIdentifierBindings- -- "./TypeChecking/Statements.ag"(line 102, column 9)- _stsOcatUpdates =- {-# LINE 102 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 5194 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 103, column 9)- _stsOlibUpdates =- {-# LINE 103 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 5199 "AstInternal.hs" #-}- -- "./TypeChecking/CreateFunction.ag"(line 121, column 9)- _stsOlib =- {-# LINE 121 "./TypeChecking/CreateFunction.ag" #-}- fromRight _lhsIlib $- updateBindings _lhsIlib _lhsIcat- [LibStackIDs [("", _varsIdefs)]]- {-# LINE 5206 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- PlpgsqlFnBody ann_ _varsIannotatedTree _stsIannotatedTree- {-# LINE 5211 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- PlpgsqlFnBody ann_ _varsIoriginalTree _stsIoriginalTree- {-# LINE 5216 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 5221 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 5226 "AstInternal.hs" #-}- -- copy rule (down)- _varsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 5231 "AstInternal.hs" #-}- -- copy rule (down)- _varsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 5236 "AstInternal.hs" #-}- -- copy rule (down)- _stsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 5241 "AstInternal.hs" #-}- ( _varsIannotatedTree,_varsIdefs,_varsIoriginalTree) =- (vars_ _varsOcat _varsOlib )- ( _stsIannotatedTree,_stsIoriginalTree,_stsIproducedCat,_stsIproducedLib) =- (sts_ _stsOcat _stsOcatUpdates _stsOlib _stsOlibUpdates )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_FnBody_SqlFnBody :: Annotation ->- T_StatementList ->- T_FnBody -sem_FnBody_SqlFnBody ann_ sts_ =- (\ _lhsIcat- _lhsIlib ->- (let _stsOcatUpdates :: ([CatalogUpdate])- _stsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: FnBody- _lhsOoriginalTree :: FnBody- _stsOcat :: Catalog- _stsOlib :: LocalIdentifierBindings- _stsIannotatedTree :: StatementList- _stsIoriginalTree :: StatementList- _stsIproducedCat :: Catalog- _stsIproducedLib :: LocalIdentifierBindings- -- "./TypeChecking/Statements.ag"(line 102, column 9)- _stsOcatUpdates =- {-# LINE 102 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 5267 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 103, column 9)- _stsOlibUpdates =- {-# LINE 103 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 5272 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- SqlFnBody ann_ _stsIannotatedTree- {-# LINE 5277 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- SqlFnBody ann_ _stsIoriginalTree- {-# LINE 5282 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 5287 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 5292 "AstInternal.hs" #-}- -- copy rule (down)- _stsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 5297 "AstInternal.hs" #-}- -- copy rule (down)- _stsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 5302 "AstInternal.hs" #-}- ( _stsIannotatedTree,_stsIoriginalTree,_stsIproducedCat,_stsIproducedLib) =- (sts_ _stsOcat _stsOcatUpdates _stsOlib _stsOlibUpdates )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- FrameClause --------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative FrameRowsUnboundedPreceding:- visit 0:- local annotatedTree : _- local originalTree : _- alternative FrameUnboundedFull:- visit 0:- local annotatedTree : _- local originalTree : _- alternative FrameUnboundedPreceding:- visit 0:- local annotatedTree : _- local originalTree : _--}-data FrameClause = FrameRowsUnboundedPreceding - | FrameUnboundedFull - | FrameUnboundedPreceding - deriving ( Data,Eq,Show,Typeable)--- cata-sem_FrameClause :: FrameClause ->- T_FrameClause -sem_FrameClause (FrameRowsUnboundedPreceding ) =- (sem_FrameClause_FrameRowsUnboundedPreceding )-sem_FrameClause (FrameUnboundedFull ) =- (sem_FrameClause_FrameUnboundedFull )-sem_FrameClause (FrameUnboundedPreceding ) =- (sem_FrameClause_FrameUnboundedPreceding )--- semantic domain-type T_FrameClause = Catalog ->- LocalIdentifierBindings ->- ( FrameClause,FrameClause)-data Inh_FrameClause = Inh_FrameClause {cat_Inh_FrameClause :: Catalog,lib_Inh_FrameClause :: LocalIdentifierBindings}-data Syn_FrameClause = Syn_FrameClause {annotatedTree_Syn_FrameClause :: FrameClause,originalTree_Syn_FrameClause :: FrameClause}-wrap_FrameClause :: T_FrameClause ->- Inh_FrameClause ->- Syn_FrameClause -wrap_FrameClause sem (Inh_FrameClause _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_FrameClause _lhsOannotatedTree _lhsOoriginalTree ))-sem_FrameClause_FrameRowsUnboundedPreceding :: T_FrameClause -sem_FrameClause_FrameRowsUnboundedPreceding =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: FrameClause- _lhsOoriginalTree :: FrameClause- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- FrameRowsUnboundedPreceding- {-# LINE 5365 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- FrameRowsUnboundedPreceding- {-# LINE 5370 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 5375 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 5380 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_FrameClause_FrameUnboundedFull :: T_FrameClause -sem_FrameClause_FrameUnboundedFull =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: FrameClause- _lhsOoriginalTree :: FrameClause- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- FrameUnboundedFull- {-# LINE 5392 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- FrameUnboundedFull- {-# LINE 5397 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 5402 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 5407 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_FrameClause_FrameUnboundedPreceding :: T_FrameClause -sem_FrameClause_FrameUnboundedPreceding =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: FrameClause- _lhsOoriginalTree :: FrameClause- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- FrameUnboundedPreceding- {-# LINE 5419 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- FrameUnboundedPreceding- {-# LINE 5424 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 5429 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 5434 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- IfExists -----------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative IfExists:- visit 0:- local annotatedTree : _- local originalTree : _- alternative Require:- visit 0:- local annotatedTree : _- local originalTree : _--}-data IfExists = IfExists - | Require - deriving ( Data,Eq,Show,Typeable)--- cata-sem_IfExists :: IfExists ->- T_IfExists -sem_IfExists (IfExists ) =- (sem_IfExists_IfExists )-sem_IfExists (Require ) =- (sem_IfExists_Require )--- semantic domain-type T_IfExists = Catalog ->- LocalIdentifierBindings ->- ( IfExists,IfExists)-data Inh_IfExists = Inh_IfExists {cat_Inh_IfExists :: Catalog,lib_Inh_IfExists :: LocalIdentifierBindings}-data Syn_IfExists = Syn_IfExists {annotatedTree_Syn_IfExists :: IfExists,originalTree_Syn_IfExists :: IfExists}-wrap_IfExists :: T_IfExists ->- Inh_IfExists ->- Syn_IfExists -wrap_IfExists sem (Inh_IfExists _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_IfExists _lhsOannotatedTree _lhsOoriginalTree ))-sem_IfExists_IfExists :: T_IfExists -sem_IfExists_IfExists =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: IfExists- _lhsOoriginalTree :: IfExists- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- IfExists- {-# LINE 5488 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- IfExists- {-# LINE 5493 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 5498 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 5503 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_IfExists_Require :: T_IfExists -sem_IfExists_Require =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: IfExists- _lhsOoriginalTree :: IfExists- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Require- {-# LINE 5515 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Require- {-# LINE 5520 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 5525 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 5530 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- InList -------------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - listType : Either [TypeError] Type- originalTree : SELF - alternatives:- alternative InList:- child ann : {Annotation}- child exprs : ExpressionList - visit 0:- local annotatedTree : _- local originalTree : _- alternative InSelect:- child ann : {Annotation}- child sel : SelectExpression - visit 0:- local annotatedTree : _- local originalTree : _--}-data InList = InList (Annotation) (ExpressionList) - | InSelect (Annotation) (SelectExpression) - deriving ( Data,Eq,Show,Typeable)--- cata-sem_InList :: InList ->- T_InList -sem_InList (InList _ann _exprs ) =- (sem_InList_InList _ann (sem_ExpressionList _exprs ) )-sem_InList (InSelect _ann _sel ) =- (sem_InList_InSelect _ann (sem_SelectExpression _sel ) )--- semantic domain-type T_InList = Catalog ->- LocalIdentifierBindings ->- ( InList,(Either [TypeError] Type),InList)-data Inh_InList = Inh_InList {cat_Inh_InList :: Catalog,lib_Inh_InList :: LocalIdentifierBindings}-data Syn_InList = Syn_InList {annotatedTree_Syn_InList :: InList,listType_Syn_InList :: Either [TypeError] Type,originalTree_Syn_InList :: InList}-wrap_InList :: T_InList ->- Inh_InList ->- Syn_InList -wrap_InList sem (Inh_InList _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOlistType,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_InList _lhsOannotatedTree _lhsOlistType _lhsOoriginalTree ))-sem_InList_InList :: Annotation ->- T_ExpressionList ->- T_InList -sem_InList_InList ann_ exprs_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOlistType :: (Either [TypeError] Type)- _lhsOannotatedTree :: InList- _lhsOoriginalTree :: InList- _exprsOcat :: Catalog- _exprsOlib :: LocalIdentifierBindings- _exprsIannotatedTree :: ExpressionList- _exprsIoriginalTree :: ExpressionList- _exprsItypeList :: ([Type])- -- "./TypeChecking/Expressions.ag"(line 305, column 9)- _lhsOlistType =- {-# LINE 305 "./TypeChecking/Expressions.ag" #-}- resolveResultSetType _lhsIcat _exprsItypeList- {-# LINE 5597 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- InList ann_ _exprsIannotatedTree- {-# LINE 5602 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- InList ann_ _exprsIoriginalTree- {-# LINE 5607 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 5612 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 5617 "AstInternal.hs" #-}- -- copy rule (down)- _exprsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 5622 "AstInternal.hs" #-}- -- copy rule (down)- _exprsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 5627 "AstInternal.hs" #-}- ( _exprsIannotatedTree,_exprsIoriginalTree,_exprsItypeList) =- (exprs_ _exprsOcat _exprsOlib )- in ( _lhsOannotatedTree,_lhsOlistType,_lhsOoriginalTree)))-sem_InList_InSelect :: Annotation ->- T_SelectExpression ->- T_InList -sem_InList_InSelect ann_ sel_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOlistType :: (Either [TypeError] Type)- _lhsOannotatedTree :: InList- _lhsOoriginalTree :: InList- _selOcat :: Catalog- _selOlib :: LocalIdentifierBindings- _selIannotatedTree :: SelectExpression- _selIlibUpdates :: ([LocalIdentifierBindingsUpdate])- _selIoriginalTree :: SelectExpression- -- "./TypeChecking/Expressions.ag"(line 307, column 9)- _lhsOlistType =- {-# LINE 307 "./TypeChecking/Expressions.ag" #-}- do- attrs <- map snd <$> (unwrapSetOfComposite $- getTypeAnnotation _selIannotatedTree)- typ <- case length attrs of- 0 -> Left [InternalError- "got subquery with no columns? in inselect"]- 1 -> Right $ head attrs- _ -> Right $ AnonymousRecordType attrs- dependsOnRTpe attrs $ Right typ- {-# LINE 5657 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- InSelect ann_ _selIannotatedTree- {-# LINE 5662 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- InSelect ann_ _selIoriginalTree- {-# LINE 5667 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 5672 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 5677 "AstInternal.hs" #-}- -- copy rule (down)- _selOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 5682 "AstInternal.hs" #-}- -- copy rule (down)- _selOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 5687 "AstInternal.hs" #-}- ( _selIannotatedTree,_selIlibUpdates,_selIoriginalTree) =- (sel_ _selOcat _selOlib )- in ( _lhsOannotatedTree,_lhsOlistType,_lhsOoriginalTree)))--- JoinExpression -----------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative JoinOn:- child ann : {Annotation}- child expression : Expression - visit 0:- local annotatedTree : _- local originalTree : _- alternative JoinUsing:- child ann : {Annotation}- child stringList : StringList - visit 0:- local annotatedTree : _- local originalTree : _--}-data JoinExpression = JoinOn (Annotation) (Expression) - | JoinUsing (Annotation) (StringList) - deriving ( Data,Eq,Show,Typeable)--- cata-sem_JoinExpression :: JoinExpression ->- T_JoinExpression -sem_JoinExpression (JoinOn _ann _expression ) =- (sem_JoinExpression_JoinOn _ann (sem_Expression _expression ) )-sem_JoinExpression (JoinUsing _ann _stringList ) =- (sem_JoinExpression_JoinUsing _ann (sem_StringList _stringList ) )--- semantic domain-type T_JoinExpression = Catalog ->- LocalIdentifierBindings ->- ( JoinExpression,JoinExpression)-data Inh_JoinExpression = Inh_JoinExpression {cat_Inh_JoinExpression :: Catalog,lib_Inh_JoinExpression :: LocalIdentifierBindings}-data Syn_JoinExpression = Syn_JoinExpression {annotatedTree_Syn_JoinExpression :: JoinExpression,originalTree_Syn_JoinExpression :: JoinExpression}-wrap_JoinExpression :: T_JoinExpression ->- Inh_JoinExpression ->- Syn_JoinExpression -wrap_JoinExpression sem (Inh_JoinExpression _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_JoinExpression _lhsOannotatedTree _lhsOoriginalTree ))-sem_JoinExpression_JoinOn :: Annotation ->- T_Expression ->- T_JoinExpression -sem_JoinExpression_JoinOn ann_ expression_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: JoinExpression- _lhsOoriginalTree :: JoinExpression- _expressionOcat :: Catalog- _expressionOlib :: LocalIdentifierBindings- _expressionIannotatedTree :: Expression- _expressionIliftedColumnName :: String- _expressionIoriginalTree :: Expression- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- JoinOn ann_ _expressionIannotatedTree- {-# LINE 5754 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- JoinOn ann_ _expressionIoriginalTree- {-# LINE 5759 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 5764 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 5769 "AstInternal.hs" #-}- -- copy rule (down)- _expressionOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 5774 "AstInternal.hs" #-}- -- copy rule (down)- _expressionOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 5779 "AstInternal.hs" #-}- ( _expressionIannotatedTree,_expressionIliftedColumnName,_expressionIoriginalTree) =- (expression_ _expressionOcat _expressionOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_JoinExpression_JoinUsing :: Annotation ->- T_StringList ->- T_JoinExpression -sem_JoinExpression_JoinUsing ann_ stringList_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: JoinExpression- _lhsOoriginalTree :: JoinExpression- _stringListOcat :: Catalog- _stringListOlib :: LocalIdentifierBindings- _stringListIannotatedTree :: StringList- _stringListIoriginalTree :: StringList- _stringListIstrings :: ([String])- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- JoinUsing ann_ _stringListIannotatedTree- {-# LINE 5800 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- JoinUsing ann_ _stringListIoriginalTree- {-# LINE 5805 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 5810 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 5815 "AstInternal.hs" #-}- -- copy rule (down)- _stringListOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 5820 "AstInternal.hs" #-}- -- copy rule (down)- _stringListOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 5825 "AstInternal.hs" #-}- ( _stringListIannotatedTree,_stringListIoriginalTree,_stringListIstrings) =- (stringList_ _stringListOcat _stringListOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- JoinType -----------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative Cross:- visit 0:- local annotatedTree : _- local originalTree : _- alternative FullOuter:- visit 0:- local annotatedTree : _- local originalTree : _- alternative Inner:- visit 0:- local annotatedTree : _- local originalTree : _- alternative LeftOuter:- visit 0:- local annotatedTree : _- local originalTree : _- alternative RightOuter:- visit 0:- local annotatedTree : _- local originalTree : _--}-data JoinType = Cross - | FullOuter - | Inner - | LeftOuter - | RightOuter - deriving ( Data,Eq,Show,Typeable)--- cata-sem_JoinType :: JoinType ->- T_JoinType -sem_JoinType (Cross ) =- (sem_JoinType_Cross )-sem_JoinType (FullOuter ) =- (sem_JoinType_FullOuter )-sem_JoinType (Inner ) =- (sem_JoinType_Inner )-sem_JoinType (LeftOuter ) =- (sem_JoinType_LeftOuter )-sem_JoinType (RightOuter ) =- (sem_JoinType_RightOuter )--- semantic domain-type T_JoinType = Catalog ->- LocalIdentifierBindings ->- ( JoinType,JoinType)-data Inh_JoinType = Inh_JoinType {cat_Inh_JoinType :: Catalog,lib_Inh_JoinType :: LocalIdentifierBindings}-data Syn_JoinType = Syn_JoinType {annotatedTree_Syn_JoinType :: JoinType,originalTree_Syn_JoinType :: JoinType}-wrap_JoinType :: T_JoinType ->- Inh_JoinType ->- Syn_JoinType -wrap_JoinType sem (Inh_JoinType _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_JoinType _lhsOannotatedTree _lhsOoriginalTree ))-sem_JoinType_Cross :: T_JoinType -sem_JoinType_Cross =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: JoinType- _lhsOoriginalTree :: JoinType- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Cross- {-# LINE 5902 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Cross- {-# LINE 5907 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 5912 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 5917 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_JoinType_FullOuter :: T_JoinType -sem_JoinType_FullOuter =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: JoinType- _lhsOoriginalTree :: JoinType- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- FullOuter- {-# LINE 5929 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- FullOuter- {-# LINE 5934 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 5939 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 5944 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_JoinType_Inner :: T_JoinType -sem_JoinType_Inner =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: JoinType- _lhsOoriginalTree :: JoinType- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Inner- {-# LINE 5956 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Inner- {-# LINE 5961 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 5966 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 5971 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_JoinType_LeftOuter :: T_JoinType -sem_JoinType_LeftOuter =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: JoinType- _lhsOoriginalTree :: JoinType- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- LeftOuter- {-# LINE 5983 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- LeftOuter- {-# LINE 5988 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 5993 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 5998 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_JoinType_RightOuter :: T_JoinType -sem_JoinType_RightOuter =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: JoinType- _lhsOoriginalTree :: JoinType- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- RightOuter- {-# LINE 6010 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- RightOuter- {-# LINE 6015 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 6020 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 6025 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- Language -----------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative Plpgsql:- visit 0:- local annotatedTree : _- local originalTree : _- alternative Sql:- visit 0:- local annotatedTree : _- local originalTree : _--}-data Language = Plpgsql - | Sql - deriving ( Data,Eq,Show,Typeable)--- cata-sem_Language :: Language ->- T_Language -sem_Language (Plpgsql ) =- (sem_Language_Plpgsql )-sem_Language (Sql ) =- (sem_Language_Sql )--- semantic domain-type T_Language = Catalog ->- LocalIdentifierBindings ->- ( Language,Language)-data Inh_Language = Inh_Language {cat_Inh_Language :: Catalog,lib_Inh_Language :: LocalIdentifierBindings}-data Syn_Language = Syn_Language {annotatedTree_Syn_Language :: Language,originalTree_Syn_Language :: Language}-wrap_Language :: T_Language ->- Inh_Language ->- Syn_Language -wrap_Language sem (Inh_Language _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_Language _lhsOannotatedTree _lhsOoriginalTree ))-sem_Language_Plpgsql :: T_Language -sem_Language_Plpgsql =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Language- _lhsOoriginalTree :: Language- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Plpgsql- {-# LINE 6079 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Plpgsql- {-# LINE 6084 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 6089 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 6094 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_Language_Sql :: T_Language -sem_Language_Sql =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Language- _lhsOoriginalTree :: Language- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Sql- {-# LINE 6106 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Sql- {-# LINE 6111 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 6116 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 6121 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- LiftFlavour --------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative LiftAll:- visit 0:- local annotatedTree : _- local originalTree : _- alternative LiftAny:- visit 0:- local annotatedTree : _- local originalTree : _--}-data LiftFlavour = LiftAll - | LiftAny - deriving ( Data,Eq,Show,Typeable)--- cata-sem_LiftFlavour :: LiftFlavour ->- T_LiftFlavour -sem_LiftFlavour (LiftAll ) =- (sem_LiftFlavour_LiftAll )-sem_LiftFlavour (LiftAny ) =- (sem_LiftFlavour_LiftAny )--- semantic domain-type T_LiftFlavour = Catalog ->- LocalIdentifierBindings ->- ( LiftFlavour,LiftFlavour)-data Inh_LiftFlavour = Inh_LiftFlavour {cat_Inh_LiftFlavour :: Catalog,lib_Inh_LiftFlavour :: LocalIdentifierBindings}-data Syn_LiftFlavour = Syn_LiftFlavour {annotatedTree_Syn_LiftFlavour :: LiftFlavour,originalTree_Syn_LiftFlavour :: LiftFlavour}-wrap_LiftFlavour :: T_LiftFlavour ->- Inh_LiftFlavour ->- Syn_LiftFlavour -wrap_LiftFlavour sem (Inh_LiftFlavour _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_LiftFlavour _lhsOannotatedTree _lhsOoriginalTree ))-sem_LiftFlavour_LiftAll :: T_LiftFlavour -sem_LiftFlavour_LiftAll =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: LiftFlavour- _lhsOoriginalTree :: LiftFlavour- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- LiftAll- {-# LINE 6175 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- LiftAll- {-# LINE 6180 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 6185 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 6190 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_LiftFlavour_LiftAny :: T_LiftFlavour -sem_LiftFlavour_LiftAny =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: LiftFlavour- _lhsOoriginalTree :: LiftFlavour- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- LiftAny- {-# LINE 6202 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- LiftAny- {-# LINE 6207 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 6212 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 6217 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- MaybeBoolExpression ------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative Just:- child just : Expression - visit 0:- local annotatedTree : _- local originalTree : _- alternative Nothing:- visit 0:- local annotatedTree : _- local originalTree : _--}-type MaybeBoolExpression = (Maybe (Expression))--- cata-sem_MaybeBoolExpression :: MaybeBoolExpression ->- T_MaybeBoolExpression -sem_MaybeBoolExpression (Prelude.Just x ) =- (sem_MaybeBoolExpression_Just (sem_Expression x ) )-sem_MaybeBoolExpression Prelude.Nothing =- sem_MaybeBoolExpression_Nothing--- semantic domain-type T_MaybeBoolExpression = Catalog ->- LocalIdentifierBindings ->- ( MaybeBoolExpression,MaybeBoolExpression)-data Inh_MaybeBoolExpression = Inh_MaybeBoolExpression {cat_Inh_MaybeBoolExpression :: Catalog,lib_Inh_MaybeBoolExpression :: LocalIdentifierBindings}-data Syn_MaybeBoolExpression = Syn_MaybeBoolExpression {annotatedTree_Syn_MaybeBoolExpression :: MaybeBoolExpression,originalTree_Syn_MaybeBoolExpression :: MaybeBoolExpression}-wrap_MaybeBoolExpression :: T_MaybeBoolExpression ->- Inh_MaybeBoolExpression ->- Syn_MaybeBoolExpression -wrap_MaybeBoolExpression sem (Inh_MaybeBoolExpression _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_MaybeBoolExpression _lhsOannotatedTree _lhsOoriginalTree ))-sem_MaybeBoolExpression_Just :: T_Expression ->- T_MaybeBoolExpression -sem_MaybeBoolExpression_Just just_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: MaybeBoolExpression- _lhsOoriginalTree :: MaybeBoolExpression- _justOcat :: Catalog- _justOlib :: LocalIdentifierBindings- _justIannotatedTree :: Expression- _justIliftedColumnName :: String- _justIoriginalTree :: Expression- -- "./TypeChecking/Misc.ag"(line 74, column 9)- _lhsOannotatedTree =- {-# LINE 74 "./TypeChecking/Misc.ag" #-}- if getTypeAnnotation _justIannotatedTree `notElem` [typeBool, TypeCheckFailed]- then Just $ updateAnnotation ((TypeErrorA ExpressionMustBeBool) :)- _justIannotatedTree- else Just $ _justIannotatedTree- {-# LINE 6279 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Just _justIannotatedTree- {-# LINE 6284 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Just _justIoriginalTree- {-# LINE 6289 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 6294 "AstInternal.hs" #-}- -- copy rule (down)- _justOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 6299 "AstInternal.hs" #-}- -- copy rule (down)- _justOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 6304 "AstInternal.hs" #-}- ( _justIannotatedTree,_justIliftedColumnName,_justIoriginalTree) =- (just_ _justOcat _justOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_MaybeBoolExpression_Nothing :: T_MaybeBoolExpression -sem_MaybeBoolExpression_Nothing =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: MaybeBoolExpression- _lhsOoriginalTree :: MaybeBoolExpression- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Nothing- {-# LINE 6318 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Nothing- {-# LINE 6323 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 6328 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 6333 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- MaybeExpression ----------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative Just:- child just : Expression - visit 0:- local annotatedTree : _- local originalTree : _- alternative Nothing:- visit 0:- local annotatedTree : _- local originalTree : _--}-type MaybeExpression = (Maybe (Expression))--- cata-sem_MaybeExpression :: MaybeExpression ->- T_MaybeExpression -sem_MaybeExpression (Prelude.Just x ) =- (sem_MaybeExpression_Just (sem_Expression x ) )-sem_MaybeExpression Prelude.Nothing =- sem_MaybeExpression_Nothing--- semantic domain-type T_MaybeExpression = Catalog ->- LocalIdentifierBindings ->- ( MaybeExpression,MaybeExpression)-data Inh_MaybeExpression = Inh_MaybeExpression {cat_Inh_MaybeExpression :: Catalog,lib_Inh_MaybeExpression :: LocalIdentifierBindings}-data Syn_MaybeExpression = Syn_MaybeExpression {annotatedTree_Syn_MaybeExpression :: MaybeExpression,originalTree_Syn_MaybeExpression :: MaybeExpression}-wrap_MaybeExpression :: T_MaybeExpression ->- Inh_MaybeExpression ->- Syn_MaybeExpression -wrap_MaybeExpression sem (Inh_MaybeExpression _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_MaybeExpression _lhsOannotatedTree _lhsOoriginalTree ))-sem_MaybeExpression_Just :: T_Expression ->- T_MaybeExpression -sem_MaybeExpression_Just just_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: MaybeExpression- _lhsOoriginalTree :: MaybeExpression- _justOcat :: Catalog- _justOlib :: LocalIdentifierBindings- _justIannotatedTree :: Expression- _justIliftedColumnName :: String- _justIoriginalTree :: Expression- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Just _justIannotatedTree- {-# LINE 6392 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Just _justIoriginalTree- {-# LINE 6397 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 6402 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 6407 "AstInternal.hs" #-}- -- copy rule (down)- _justOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 6412 "AstInternal.hs" #-}- -- copy rule (down)- _justOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 6417 "AstInternal.hs" #-}- ( _justIannotatedTree,_justIliftedColumnName,_justIoriginalTree) =- (just_ _justOcat _justOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_MaybeExpression_Nothing :: T_MaybeExpression -sem_MaybeExpression_Nothing =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: MaybeExpression- _lhsOoriginalTree :: MaybeExpression- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Nothing- {-# LINE 6431 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Nothing- {-# LINE 6436 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 6441 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 6446 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- MaybeSelectList ----------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - listType : Maybe [(String,Type)]- originalTree : SELF - alternatives:- alternative Just:- child just : SelectList - visit 0:- local annotatedTree : _- local originalTree : _- alternative Nothing:- visit 0:- local annotatedTree : _- local originalTree : _--}-type MaybeSelectList = (Maybe (SelectList))--- cata-sem_MaybeSelectList :: MaybeSelectList ->- T_MaybeSelectList -sem_MaybeSelectList (Prelude.Just x ) =- (sem_MaybeSelectList_Just (sem_SelectList x ) )-sem_MaybeSelectList Prelude.Nothing =- sem_MaybeSelectList_Nothing--- semantic domain-type T_MaybeSelectList = Catalog ->- LocalIdentifierBindings ->- ( MaybeSelectList,(Maybe [(String,Type)]),MaybeSelectList)-data Inh_MaybeSelectList = Inh_MaybeSelectList {cat_Inh_MaybeSelectList :: Catalog,lib_Inh_MaybeSelectList :: LocalIdentifierBindings}-data Syn_MaybeSelectList = Syn_MaybeSelectList {annotatedTree_Syn_MaybeSelectList :: MaybeSelectList,listType_Syn_MaybeSelectList :: Maybe [(String,Type)],originalTree_Syn_MaybeSelectList :: MaybeSelectList}-wrap_MaybeSelectList :: T_MaybeSelectList ->- Inh_MaybeSelectList ->- Syn_MaybeSelectList -wrap_MaybeSelectList sem (Inh_MaybeSelectList _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOlistType,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_MaybeSelectList _lhsOannotatedTree _lhsOlistType _lhsOoriginalTree ))-sem_MaybeSelectList_Just :: T_SelectList ->- T_MaybeSelectList -sem_MaybeSelectList_Just just_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOlistType :: (Maybe [(String,Type)])- _lhsOannotatedTree :: MaybeSelectList- _lhsOoriginalTree :: MaybeSelectList- _justOcat :: Catalog- _justOlib :: LocalIdentifierBindings- _justIannotatedTree :: SelectList- _justIlibUpdates :: ([LocalIdentifierBindingsUpdate])- _justIlistType :: ([(String,Type)])- _justIoriginalTree :: SelectList- -- "./TypeChecking/SelectLists.ag"(line 25, column 12)- _lhsOlistType =- {-# LINE 25 "./TypeChecking/SelectLists.ag" #-}- Just _justIlistType- {-# LINE 6508 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Just _justIannotatedTree- {-# LINE 6513 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Just _justIoriginalTree- {-# LINE 6518 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 6523 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 6528 "AstInternal.hs" #-}- -- copy rule (down)- _justOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 6533 "AstInternal.hs" #-}- -- copy rule (down)- _justOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 6538 "AstInternal.hs" #-}- ( _justIannotatedTree,_justIlibUpdates,_justIlistType,_justIoriginalTree) =- (just_ _justOcat _justOlib )- in ( _lhsOannotatedTree,_lhsOlistType,_lhsOoriginalTree)))-sem_MaybeSelectList_Nothing :: T_MaybeSelectList -sem_MaybeSelectList_Nothing =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOlistType :: (Maybe [(String,Type)])- _lhsOannotatedTree :: MaybeSelectList- _lhsOoriginalTree :: MaybeSelectList- -- "./TypeChecking/SelectLists.ag"(line 26, column 15)- _lhsOlistType =- {-# LINE 26 "./TypeChecking/SelectLists.ag" #-}- Nothing- {-# LINE 6553 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Nothing- {-# LINE 6558 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Nothing- {-# LINE 6563 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 6568 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 6573 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOlistType,_lhsOoriginalTree)))--- Natural ------------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative Natural:- visit 0:- local annotatedTree : _- local originalTree : _- alternative Unnatural:- visit 0:- local annotatedTree : _- local originalTree : _--}-data Natural = Natural - | Unnatural - deriving ( Data,Eq,Show,Typeable)--- cata-sem_Natural :: Natural ->- T_Natural -sem_Natural (Natural ) =- (sem_Natural_Natural )-sem_Natural (Unnatural ) =- (sem_Natural_Unnatural )--- semantic domain-type T_Natural = Catalog ->- LocalIdentifierBindings ->- ( Natural,Natural)-data Inh_Natural = Inh_Natural {cat_Inh_Natural :: Catalog,lib_Inh_Natural :: LocalIdentifierBindings}-data Syn_Natural = Syn_Natural {annotatedTree_Syn_Natural :: Natural,originalTree_Syn_Natural :: Natural}-wrap_Natural :: T_Natural ->- Inh_Natural ->- Syn_Natural -wrap_Natural sem (Inh_Natural _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_Natural _lhsOannotatedTree _lhsOoriginalTree ))-sem_Natural_Natural :: T_Natural -sem_Natural_Natural =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Natural- _lhsOoriginalTree :: Natural- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Natural- {-# LINE 6627 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Natural- {-# LINE 6632 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 6637 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 6642 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_Natural_Unnatural :: T_Natural -sem_Natural_Unnatural =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Natural- _lhsOoriginalTree :: Natural- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Unnatural- {-# LINE 6654 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Unnatural- {-# LINE 6659 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 6664 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 6669 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- OnExpr -------------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative Just:- child just : JoinExpression - visit 0:- local annotatedTree : _- local originalTree : _- alternative Nothing:- visit 0:- local annotatedTree : _- local originalTree : _--}-type OnExpr = (Maybe (JoinExpression))--- cata-sem_OnExpr :: OnExpr ->- T_OnExpr -sem_OnExpr (Prelude.Just x ) =- (sem_OnExpr_Just (sem_JoinExpression x ) )-sem_OnExpr Prelude.Nothing =- sem_OnExpr_Nothing--- semantic domain-type T_OnExpr = Catalog ->- LocalIdentifierBindings ->- ( OnExpr,OnExpr)-data Inh_OnExpr = Inh_OnExpr {cat_Inh_OnExpr :: Catalog,lib_Inh_OnExpr :: LocalIdentifierBindings}-data Syn_OnExpr = Syn_OnExpr {annotatedTree_Syn_OnExpr :: OnExpr,originalTree_Syn_OnExpr :: OnExpr}-wrap_OnExpr :: T_OnExpr ->- Inh_OnExpr ->- Syn_OnExpr -wrap_OnExpr sem (Inh_OnExpr _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_OnExpr _lhsOannotatedTree _lhsOoriginalTree ))-sem_OnExpr_Just :: T_JoinExpression ->- T_OnExpr -sem_OnExpr_Just just_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: OnExpr- _lhsOoriginalTree :: OnExpr- _justOcat :: Catalog- _justOlib :: LocalIdentifierBindings- _justIannotatedTree :: JoinExpression- _justIoriginalTree :: JoinExpression- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Just _justIannotatedTree- {-# LINE 6727 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Just _justIoriginalTree- {-# LINE 6732 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 6737 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 6742 "AstInternal.hs" #-}- -- copy rule (down)- _justOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 6747 "AstInternal.hs" #-}- -- copy rule (down)- _justOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 6752 "AstInternal.hs" #-}- ( _justIannotatedTree,_justIoriginalTree) =- (just_ _justOcat _justOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_OnExpr_Nothing :: T_OnExpr -sem_OnExpr_Nothing =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: OnExpr- _lhsOoriginalTree :: OnExpr- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Nothing- {-# LINE 6766 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Nothing- {-# LINE 6771 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 6776 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 6781 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- ParamDef -----------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - namedType : Type- originalTree : SELF - paramName : String- alternatives:- alternative ParamDef:- child ann : {Annotation}- child name : {String}- child typ : TypeName - visit 0:- local annotatedTree : _- local originalTree : _- alternative ParamDefTp:- child ann : {Annotation}- child typ : TypeName - visit 0:- local annotatedTree : _- local originalTree : _--}-data ParamDef = ParamDef (Annotation) (String) (TypeName) - | ParamDefTp (Annotation) (TypeName) - deriving ( Data,Eq,Show,Typeable)--- cata-sem_ParamDef :: ParamDef ->- T_ParamDef -sem_ParamDef (ParamDef _ann _name _typ ) =- (sem_ParamDef_ParamDef _ann _name (sem_TypeName _typ ) )-sem_ParamDef (ParamDefTp _ann _typ ) =- (sem_ParamDef_ParamDefTp _ann (sem_TypeName _typ ) )--- semantic domain-type T_ParamDef = Catalog ->- LocalIdentifierBindings ->- ( ParamDef,Type,ParamDef,String)-data Inh_ParamDef = Inh_ParamDef {cat_Inh_ParamDef :: Catalog,lib_Inh_ParamDef :: LocalIdentifierBindings}-data Syn_ParamDef = Syn_ParamDef {annotatedTree_Syn_ParamDef :: ParamDef,namedType_Syn_ParamDef :: Type,originalTree_Syn_ParamDef :: ParamDef,paramName_Syn_ParamDef :: String}-wrap_ParamDef :: T_ParamDef ->- Inh_ParamDef ->- Syn_ParamDef -wrap_ParamDef sem (Inh_ParamDef _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOnamedType,_lhsOoriginalTree,_lhsOparamName) =- (sem _lhsIcat _lhsIlib )- in (Syn_ParamDef _lhsOannotatedTree _lhsOnamedType _lhsOoriginalTree _lhsOparamName ))-sem_ParamDef_ParamDef :: Annotation ->- String ->- T_TypeName ->- T_ParamDef -sem_ParamDef_ParamDef ann_ name_ typ_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOnamedType :: Type- _lhsOparamName :: String- _lhsOannotatedTree :: ParamDef- _lhsOoriginalTree :: ParamDef- _typOcat :: Catalog- _typOlib :: LocalIdentifierBindings- _typIannotatedTree :: TypeName- _typInamedType :: Type- _typIoriginalTree :: TypeName- -- "./TypeChecking/CreateFunction.ag"(line 56, column 9)- _lhsOnamedType =- {-# LINE 56 "./TypeChecking/CreateFunction.ag" #-}- _typInamedType- {-# LINE 6852 "AstInternal.hs" #-}- -- "./TypeChecking/CreateFunction.ag"(line 58, column 9)- _lhsOparamName =- {-# LINE 58 "./TypeChecking/CreateFunction.ag" #-}- name_- {-# LINE 6857 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- ParamDef ann_ name_ _typIannotatedTree- {-# LINE 6862 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- ParamDef ann_ name_ _typIoriginalTree- {-# LINE 6867 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 6872 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 6877 "AstInternal.hs" #-}- -- copy rule (down)- _typOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 6882 "AstInternal.hs" #-}- -- copy rule (down)- _typOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 6887 "AstInternal.hs" #-}- ( _typIannotatedTree,_typInamedType,_typIoriginalTree) =- (typ_ _typOcat _typOlib )- in ( _lhsOannotatedTree,_lhsOnamedType,_lhsOoriginalTree,_lhsOparamName)))-sem_ParamDef_ParamDefTp :: Annotation ->- T_TypeName ->- T_ParamDef -sem_ParamDef_ParamDefTp ann_ typ_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOnamedType :: Type- _lhsOparamName :: String- _lhsOannotatedTree :: ParamDef- _lhsOoriginalTree :: ParamDef- _typOcat :: Catalog- _typOlib :: LocalIdentifierBindings- _typIannotatedTree :: TypeName- _typInamedType :: Type- _typIoriginalTree :: TypeName- -- "./TypeChecking/CreateFunction.ag"(line 56, column 9)- _lhsOnamedType =- {-# LINE 56 "./TypeChecking/CreateFunction.ag" #-}- _typInamedType- {-# LINE 6910 "AstInternal.hs" #-}- -- "./TypeChecking/CreateFunction.ag"(line 60, column 9)- _lhsOparamName =- {-# LINE 60 "./TypeChecking/CreateFunction.ag" #-}- ""- {-# LINE 6915 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- ParamDefTp ann_ _typIannotatedTree- {-# LINE 6920 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- ParamDefTp ann_ _typIoriginalTree- {-# LINE 6925 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 6930 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 6935 "AstInternal.hs" #-}- -- copy rule (down)- _typOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 6940 "AstInternal.hs" #-}- -- copy rule (down)- _typOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 6945 "AstInternal.hs" #-}- ( _typIannotatedTree,_typInamedType,_typIoriginalTree) =- (typ_ _typOcat _typOlib )- in ( _lhsOannotatedTree,_lhsOnamedType,_lhsOoriginalTree,_lhsOparamName)))--- ParamDefList -------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - params : [(String, Type)]- alternatives:- alternative Cons:- child hd : ParamDef - child tl : ParamDefList - visit 0:- local annotatedTree : _- local originalTree : _- alternative Nil:- visit 0:- local annotatedTree : _- local originalTree : _--}-type ParamDefList = [(ParamDef)]--- cata-sem_ParamDefList :: ParamDefList ->- T_ParamDefList -sem_ParamDefList list =- (Prelude.foldr sem_ParamDefList_Cons sem_ParamDefList_Nil (Prelude.map sem_ParamDef list) )--- semantic domain-type T_ParamDefList = Catalog ->- LocalIdentifierBindings ->- ( ParamDefList,ParamDefList,([(String, Type)]))-data Inh_ParamDefList = Inh_ParamDefList {cat_Inh_ParamDefList :: Catalog,lib_Inh_ParamDefList :: LocalIdentifierBindings}-data Syn_ParamDefList = Syn_ParamDefList {annotatedTree_Syn_ParamDefList :: ParamDefList,originalTree_Syn_ParamDefList :: ParamDefList,params_Syn_ParamDefList :: [(String, Type)]}-wrap_ParamDefList :: T_ParamDefList ->- Inh_ParamDefList ->- Syn_ParamDefList -wrap_ParamDefList sem (Inh_ParamDefList _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree,_lhsOparams) =- (sem _lhsIcat _lhsIlib )- in (Syn_ParamDefList _lhsOannotatedTree _lhsOoriginalTree _lhsOparams ))-sem_ParamDefList_Cons :: T_ParamDef ->- T_ParamDefList ->- T_ParamDefList -sem_ParamDefList_Cons hd_ tl_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOparams :: ([(String, Type)])- _lhsOannotatedTree :: ParamDefList- _lhsOoriginalTree :: ParamDefList- _hdOcat :: Catalog- _hdOlib :: LocalIdentifierBindings- _tlOcat :: Catalog- _tlOlib :: LocalIdentifierBindings- _hdIannotatedTree :: ParamDef- _hdInamedType :: Type- _hdIoriginalTree :: ParamDef- _hdIparamName :: String- _tlIannotatedTree :: ParamDefList- _tlIoriginalTree :: ParamDefList- _tlIparams :: ([(String, Type)])- -- "./TypeChecking/CreateFunction.ag"(line 64, column 13)- _lhsOparams =- {-# LINE 64 "./TypeChecking/CreateFunction.ag" #-}- ((_hdIparamName, _hdInamedType) : _tlIparams)- {-# LINE 7014 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIannotatedTree _tlIannotatedTree- {-# LINE 7019 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIoriginalTree _tlIoriginalTree- {-# LINE 7024 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 7029 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 7034 "AstInternal.hs" #-}- -- copy rule (down)- _hdOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 7039 "AstInternal.hs" #-}- -- copy rule (down)- _hdOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 7044 "AstInternal.hs" #-}- -- copy rule (down)- _tlOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 7049 "AstInternal.hs" #-}- -- copy rule (down)- _tlOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 7054 "AstInternal.hs" #-}- ( _hdIannotatedTree,_hdInamedType,_hdIoriginalTree,_hdIparamName) =- (hd_ _hdOcat _hdOlib )- ( _tlIannotatedTree,_tlIoriginalTree,_tlIparams) =- (tl_ _tlOcat _tlOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree,_lhsOparams)))-sem_ParamDefList_Nil :: T_ParamDefList -sem_ParamDefList_Nil =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOparams :: ([(String, Type)])- _lhsOannotatedTree :: ParamDefList- _lhsOoriginalTree :: ParamDefList- -- "./TypeChecking/CreateFunction.ag"(line 63, column 12)- _lhsOparams =- {-# LINE 63 "./TypeChecking/CreateFunction.ag" #-}- []- {-# LINE 7071 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 7076 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 7081 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 7086 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 7091 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree,_lhsOparams)))--- RaiseType ----------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative RError:- visit 0:- local annotatedTree : _- local originalTree : _- alternative RException:- visit 0:- local annotatedTree : _- local originalTree : _- alternative RNotice:- visit 0:- local annotatedTree : _- local originalTree : _--}-data RaiseType = RError - | RException - | RNotice - deriving ( Data,Eq,Show,Typeable)--- cata-sem_RaiseType :: RaiseType ->- T_RaiseType -sem_RaiseType (RError ) =- (sem_RaiseType_RError )-sem_RaiseType (RException ) =- (sem_RaiseType_RException )-sem_RaiseType (RNotice ) =- (sem_RaiseType_RNotice )--- semantic domain-type T_RaiseType = Catalog ->- LocalIdentifierBindings ->- ( RaiseType,RaiseType)-data Inh_RaiseType = Inh_RaiseType {cat_Inh_RaiseType :: Catalog,lib_Inh_RaiseType :: LocalIdentifierBindings}-data Syn_RaiseType = Syn_RaiseType {annotatedTree_Syn_RaiseType :: RaiseType,originalTree_Syn_RaiseType :: RaiseType}-wrap_RaiseType :: T_RaiseType ->- Inh_RaiseType ->- Syn_RaiseType -wrap_RaiseType sem (Inh_RaiseType _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_RaiseType _lhsOannotatedTree _lhsOoriginalTree ))-sem_RaiseType_RError :: T_RaiseType -sem_RaiseType_RError =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: RaiseType- _lhsOoriginalTree :: RaiseType- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- RError- {-# LINE 7152 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- RError- {-# LINE 7157 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 7162 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 7167 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_RaiseType_RException :: T_RaiseType -sem_RaiseType_RException =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: RaiseType- _lhsOoriginalTree :: RaiseType- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- RException- {-# LINE 7179 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- RException- {-# LINE 7184 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 7189 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 7194 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_RaiseType_RNotice :: T_RaiseType -sem_RaiseType_RNotice =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: RaiseType- _lhsOoriginalTree :: RaiseType- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- RNotice- {-# LINE 7206 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- RNotice- {-# LINE 7211 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 7216 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 7221 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- RestartIdentity ----------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative ContinueIdentity:- visit 0:- local annotatedTree : _- local originalTree : _- alternative RestartIdentity:- visit 0:- local annotatedTree : _- local originalTree : _--}-data RestartIdentity = ContinueIdentity - | RestartIdentity - deriving ( Data,Eq,Show,Typeable)--- cata-sem_RestartIdentity :: RestartIdentity ->- T_RestartIdentity -sem_RestartIdentity (ContinueIdentity ) =- (sem_RestartIdentity_ContinueIdentity )-sem_RestartIdentity (RestartIdentity ) =- (sem_RestartIdentity_RestartIdentity )--- semantic domain-type T_RestartIdentity = Catalog ->- LocalIdentifierBindings ->- ( RestartIdentity,RestartIdentity)-data Inh_RestartIdentity = Inh_RestartIdentity {cat_Inh_RestartIdentity :: Catalog,lib_Inh_RestartIdentity :: LocalIdentifierBindings}-data Syn_RestartIdentity = Syn_RestartIdentity {annotatedTree_Syn_RestartIdentity :: RestartIdentity,originalTree_Syn_RestartIdentity :: RestartIdentity}-wrap_RestartIdentity :: T_RestartIdentity ->- Inh_RestartIdentity ->- Syn_RestartIdentity -wrap_RestartIdentity sem (Inh_RestartIdentity _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_RestartIdentity _lhsOannotatedTree _lhsOoriginalTree ))-sem_RestartIdentity_ContinueIdentity :: T_RestartIdentity -sem_RestartIdentity_ContinueIdentity =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: RestartIdentity- _lhsOoriginalTree :: RestartIdentity- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- ContinueIdentity- {-# LINE 7275 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- ContinueIdentity- {-# LINE 7280 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 7285 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 7290 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_RestartIdentity_RestartIdentity :: T_RestartIdentity -sem_RestartIdentity_RestartIdentity =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: RestartIdentity- _lhsOoriginalTree :: RestartIdentity- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- RestartIdentity- {-# LINE 7302 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- RestartIdentity- {-# LINE 7307 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 7312 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 7317 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- Root ---------------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - producedCat : Catalog- producedLib : LocalIdentifierBindings- alternatives:- alternative Root:- child statements : StatementList - visit 0:- local annotatedTree : _- local originalTree : _--}-data Root = Root (StatementList) - deriving ( Show)--- cata-sem_Root :: Root ->- T_Root -sem_Root (Root _statements ) =- (sem_Root_Root (sem_StatementList _statements ) )--- semantic domain-type T_Root = Catalog ->- LocalIdentifierBindings ->- ( Root,Root,Catalog,LocalIdentifierBindings)-data Inh_Root = Inh_Root {cat_Inh_Root :: Catalog,lib_Inh_Root :: LocalIdentifierBindings}-data Syn_Root = Syn_Root {annotatedTree_Syn_Root :: Root,originalTree_Syn_Root :: Root,producedCat_Syn_Root :: Catalog,producedLib_Syn_Root :: LocalIdentifierBindings}-wrap_Root :: T_Root ->- Inh_Root ->- Syn_Root -wrap_Root sem (Inh_Root _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree,_lhsOproducedCat,_lhsOproducedLib) =- (sem _lhsIcat _lhsIlib )- in (Syn_Root _lhsOannotatedTree _lhsOoriginalTree _lhsOproducedCat _lhsOproducedLib ))-sem_Root_Root :: T_StatementList ->- T_Root -sem_Root_Root statements_ =- (\ _lhsIcat- _lhsIlib ->- (let _statementsOcatUpdates :: ([CatalogUpdate])- _statementsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: Root- _lhsOoriginalTree :: Root- _lhsOproducedCat :: Catalog- _lhsOproducedLib :: LocalIdentifierBindings- _statementsOcat :: Catalog- _statementsOlib :: LocalIdentifierBindings- _statementsIannotatedTree :: StatementList- _statementsIoriginalTree :: StatementList- _statementsIproducedCat :: Catalog- _statementsIproducedLib :: LocalIdentifierBindings- -- "./TypeChecking/Statements.ag"(line 80, column 12)- _statementsOcatUpdates =- {-# LINE 80 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 7378 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 81, column 12)- _statementsOlibUpdates =- {-# LINE 81 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 7383 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Root _statementsIannotatedTree- {-# LINE 7388 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Root _statementsIoriginalTree- {-# LINE 7393 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 7398 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 7403 "AstInternal.hs" #-}- -- copy rule (up)- _lhsOproducedCat =- {-# LINE 27 "./TypeChecking/Statements.ag" #-}- _statementsIproducedCat- {-# LINE 7408 "AstInternal.hs" #-}- -- copy rule (up)- _lhsOproducedLib =- {-# LINE 28 "./TypeChecking/Statements.ag" #-}- _statementsIproducedLib- {-# LINE 7413 "AstInternal.hs" #-}- -- copy rule (down)- _statementsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 7418 "AstInternal.hs" #-}- -- copy rule (down)- _statementsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 7423 "AstInternal.hs" #-}- ( _statementsIannotatedTree,_statementsIoriginalTree,_statementsIproducedCat,_statementsIproducedLib) =- (statements_ _statementsOcat _statementsOcatUpdates _statementsOlib _statementsOlibUpdates )- in ( _lhsOannotatedTree,_lhsOoriginalTree,_lhsOproducedCat,_lhsOproducedLib)))--- RowConstraint ------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative NotNullConstraint:- child ann : {Annotation}- child name : {String}- visit 0:- local annotatedTree : _- local originalTree : _- alternative NullConstraint:- child ann : {Annotation}- child name : {String}- visit 0:- local annotatedTree : _- local originalTree : _- alternative RowCheckConstraint:- child ann : {Annotation}- child name : {String}- child expression : Expression - visit 0:- local annotatedTree : _- local originalTree : _- alternative RowPrimaryKeyConstraint:- child ann : {Annotation}- child name : {String}- visit 0:- local annotatedTree : _- local originalTree : _- alternative RowReferenceConstraint:- child ann : {Annotation}- child name : {String}- child table : {String}- child att : {Maybe String}- child onUpdate : Cascade - child onDelete : Cascade - visit 0:- local annotatedTree : _- local originalTree : _- alternative RowUniqueConstraint:- child ann : {Annotation}- child name : {String}- visit 0:- local annotatedTree : _- local originalTree : _--}-data RowConstraint = NotNullConstraint (Annotation) (String) - | NullConstraint (Annotation) (String) - | RowCheckConstraint (Annotation) (String) (Expression) - | RowPrimaryKeyConstraint (Annotation) (String) - | RowReferenceConstraint (Annotation) (String) (String) (Maybe String) (Cascade) (Cascade) - | RowUniqueConstraint (Annotation) (String) - deriving ( Data,Eq,Show,Typeable)--- cata-sem_RowConstraint :: RowConstraint ->- T_RowConstraint -sem_RowConstraint (NotNullConstraint _ann _name ) =- (sem_RowConstraint_NotNullConstraint _ann _name )-sem_RowConstraint (NullConstraint _ann _name ) =- (sem_RowConstraint_NullConstraint _ann _name )-sem_RowConstraint (RowCheckConstraint _ann _name _expression ) =- (sem_RowConstraint_RowCheckConstraint _ann _name (sem_Expression _expression ) )-sem_RowConstraint (RowPrimaryKeyConstraint _ann _name ) =- (sem_RowConstraint_RowPrimaryKeyConstraint _ann _name )-sem_RowConstraint (RowReferenceConstraint _ann _name _table _att _onUpdate _onDelete ) =- (sem_RowConstraint_RowReferenceConstraint _ann _name _table _att (sem_Cascade _onUpdate ) (sem_Cascade _onDelete ) )-sem_RowConstraint (RowUniqueConstraint _ann _name ) =- (sem_RowConstraint_RowUniqueConstraint _ann _name )--- semantic domain-type T_RowConstraint = Catalog ->- LocalIdentifierBindings ->- ( RowConstraint,RowConstraint)-data Inh_RowConstraint = Inh_RowConstraint {cat_Inh_RowConstraint :: Catalog,lib_Inh_RowConstraint :: LocalIdentifierBindings}-data Syn_RowConstraint = Syn_RowConstraint {annotatedTree_Syn_RowConstraint :: RowConstraint,originalTree_Syn_RowConstraint :: RowConstraint}-wrap_RowConstraint :: T_RowConstraint ->- Inh_RowConstraint ->- Syn_RowConstraint -wrap_RowConstraint sem (Inh_RowConstraint _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_RowConstraint _lhsOannotatedTree _lhsOoriginalTree ))-sem_RowConstraint_NotNullConstraint :: Annotation ->- String ->- T_RowConstraint -sem_RowConstraint_NotNullConstraint ann_ name_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: RowConstraint- _lhsOoriginalTree :: RowConstraint- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- NotNullConstraint ann_ name_- {-# LINE 7526 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- NotNullConstraint ann_ name_- {-# LINE 7531 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 7536 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 7541 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_RowConstraint_NullConstraint :: Annotation ->- String ->- T_RowConstraint -sem_RowConstraint_NullConstraint ann_ name_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: RowConstraint- _lhsOoriginalTree :: RowConstraint- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- NullConstraint ann_ name_- {-# LINE 7555 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- NullConstraint ann_ name_- {-# LINE 7560 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 7565 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 7570 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_RowConstraint_RowCheckConstraint :: Annotation ->- String ->- T_Expression ->- T_RowConstraint -sem_RowConstraint_RowCheckConstraint ann_ name_ expression_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: RowConstraint- _lhsOoriginalTree :: RowConstraint- _expressionOcat :: Catalog- _expressionOlib :: LocalIdentifierBindings- _expressionIannotatedTree :: Expression- _expressionIliftedColumnName :: String- _expressionIoriginalTree :: Expression- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- RowCheckConstraint ann_ name_ _expressionIannotatedTree- {-# LINE 7590 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- RowCheckConstraint ann_ name_ _expressionIoriginalTree- {-# LINE 7595 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 7600 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 7605 "AstInternal.hs" #-}- -- copy rule (down)- _expressionOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 7610 "AstInternal.hs" #-}- -- copy rule (down)- _expressionOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 7615 "AstInternal.hs" #-}- ( _expressionIannotatedTree,_expressionIliftedColumnName,_expressionIoriginalTree) =- (expression_ _expressionOcat _expressionOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_RowConstraint_RowPrimaryKeyConstraint :: Annotation ->- String ->- T_RowConstraint -sem_RowConstraint_RowPrimaryKeyConstraint ann_ name_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: RowConstraint- _lhsOoriginalTree :: RowConstraint- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- RowPrimaryKeyConstraint ann_ name_- {-# LINE 7631 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- RowPrimaryKeyConstraint ann_ name_- {-# LINE 7636 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 7641 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 7646 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_RowConstraint_RowReferenceConstraint :: Annotation ->- String ->- String ->- (Maybe String) ->- T_Cascade ->- T_Cascade ->- T_RowConstraint -sem_RowConstraint_RowReferenceConstraint ann_ name_ table_ att_ onUpdate_ onDelete_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: RowConstraint- _lhsOoriginalTree :: RowConstraint- _onUpdateOcat :: Catalog- _onUpdateOlib :: LocalIdentifierBindings- _onDeleteOcat :: Catalog- _onDeleteOlib :: LocalIdentifierBindings- _onUpdateIannotatedTree :: Cascade- _onUpdateIoriginalTree :: Cascade- _onDeleteIannotatedTree :: Cascade- _onDeleteIoriginalTree :: Cascade- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- RowReferenceConstraint ann_ name_ table_ att_ _onUpdateIannotatedTree _onDeleteIannotatedTree- {-# LINE 7672 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- RowReferenceConstraint ann_ name_ table_ att_ _onUpdateIoriginalTree _onDeleteIoriginalTree- {-# LINE 7677 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 7682 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 7687 "AstInternal.hs" #-}- -- copy rule (down)- _onUpdateOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 7692 "AstInternal.hs" #-}- -- copy rule (down)- _onUpdateOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 7697 "AstInternal.hs" #-}- -- copy rule (down)- _onDeleteOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 7702 "AstInternal.hs" #-}- -- copy rule (down)- _onDeleteOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 7707 "AstInternal.hs" #-}- ( _onUpdateIannotatedTree,_onUpdateIoriginalTree) =- (onUpdate_ _onUpdateOcat _onUpdateOlib )- ( _onDeleteIannotatedTree,_onDeleteIoriginalTree) =- (onDelete_ _onDeleteOcat _onDeleteOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_RowConstraint_RowUniqueConstraint :: Annotation ->- String ->- T_RowConstraint -sem_RowConstraint_RowUniqueConstraint ann_ name_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: RowConstraint- _lhsOoriginalTree :: RowConstraint- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- RowUniqueConstraint ann_ name_- {-# LINE 7725 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- RowUniqueConstraint ann_ name_- {-# LINE 7730 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 7735 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 7740 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- RowConstraintList --------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative Cons:- child hd : RowConstraint - child tl : RowConstraintList - visit 0:- local annotatedTree : _- local originalTree : _- alternative Nil:- visit 0:- local annotatedTree : _- local originalTree : _--}-type RowConstraintList = [(RowConstraint)]--- cata-sem_RowConstraintList :: RowConstraintList ->- T_RowConstraintList -sem_RowConstraintList list =- (Prelude.foldr sem_RowConstraintList_Cons sem_RowConstraintList_Nil (Prelude.map sem_RowConstraint list) )--- semantic domain-type T_RowConstraintList = Catalog ->- LocalIdentifierBindings ->- ( RowConstraintList,RowConstraintList)-data Inh_RowConstraintList = Inh_RowConstraintList {cat_Inh_RowConstraintList :: Catalog,lib_Inh_RowConstraintList :: LocalIdentifierBindings}-data Syn_RowConstraintList = Syn_RowConstraintList {annotatedTree_Syn_RowConstraintList :: RowConstraintList,originalTree_Syn_RowConstraintList :: RowConstraintList}-wrap_RowConstraintList :: T_RowConstraintList ->- Inh_RowConstraintList ->- Syn_RowConstraintList -wrap_RowConstraintList sem (Inh_RowConstraintList _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_RowConstraintList _lhsOannotatedTree _lhsOoriginalTree ))-sem_RowConstraintList_Cons :: T_RowConstraint ->- T_RowConstraintList ->- T_RowConstraintList -sem_RowConstraintList_Cons hd_ tl_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: RowConstraintList- _lhsOoriginalTree :: RowConstraintList- _hdOcat :: Catalog- _hdOlib :: LocalIdentifierBindings- _tlOcat :: Catalog- _tlOlib :: LocalIdentifierBindings- _hdIannotatedTree :: RowConstraint- _hdIoriginalTree :: RowConstraint- _tlIannotatedTree :: RowConstraintList- _tlIoriginalTree :: RowConstraintList- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIannotatedTree _tlIannotatedTree- {-# LINE 7802 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIoriginalTree _tlIoriginalTree- {-# LINE 7807 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 7812 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 7817 "AstInternal.hs" #-}- -- copy rule (down)- _hdOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 7822 "AstInternal.hs" #-}- -- copy rule (down)- _hdOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 7827 "AstInternal.hs" #-}- -- copy rule (down)- _tlOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 7832 "AstInternal.hs" #-}- -- copy rule (down)- _tlOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 7837 "AstInternal.hs" #-}- ( _hdIannotatedTree,_hdIoriginalTree) =- (hd_ _hdOcat _hdOlib )- ( _tlIannotatedTree,_tlIoriginalTree) =- (tl_ _tlOcat _tlOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_RowConstraintList_Nil :: T_RowConstraintList -sem_RowConstraintList_Nil =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: RowConstraintList- _lhsOoriginalTree :: RowConstraintList- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 7853 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 7858 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 7863 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 7868 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- SelectExpression ---------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - libUpdates : [LocalIdentifierBindingsUpdate]- originalTree : SELF - alternatives:- alternative CombineSelect:- child ann : {Annotation}- child ctype : CombineType - child sel1 : SelectExpression - child sel2 : SelectExpression - visit 0:- local tpe : _- local backTree : _- local annotatedTree : _- local originalTree : _- alternative Select:- child ann : {Annotation}- child selDistinct : Distinct - child selSelectList : SelectList - child selTref : TableRefList - child selWhere : MaybeBoolExpression - child selGroupBy : ExpressionList - child selHaving : MaybeBoolExpression - child selOrderBy : ExpressionDirectionPairList - child selLimit : MaybeExpression - child selOffset : MaybeExpression - visit 0:- local newLib : _- local tpe : _- local backTree : _- local annotatedTree : _- local originalTree : _- alternative Values:- child ann : {Annotation}- child vll : ExpressionListList - visit 0:- local tpe : _- local backTree : _- local annotatedTree : _- local originalTree : _--}-data SelectExpression = CombineSelect (Annotation) (CombineType) (SelectExpression) (SelectExpression) - | Select (Annotation) (Distinct) (SelectList) (TableRefList) (MaybeBoolExpression) (ExpressionList) (MaybeBoolExpression) (ExpressionDirectionPairList) (MaybeExpression) (MaybeExpression) - | Values (Annotation) (ExpressionListList) - deriving ( Data,Eq,Show,Typeable)--- cata-sem_SelectExpression :: SelectExpression ->- T_SelectExpression -sem_SelectExpression (CombineSelect _ann _ctype _sel1 _sel2 ) =- (sem_SelectExpression_CombineSelect _ann (sem_CombineType _ctype ) (sem_SelectExpression _sel1 ) (sem_SelectExpression _sel2 ) )-sem_SelectExpression (Select _ann _selDistinct _selSelectList _selTref _selWhere _selGroupBy _selHaving _selOrderBy _selLimit _selOffset ) =- (sem_SelectExpression_Select _ann (sem_Distinct _selDistinct ) (sem_SelectList _selSelectList ) (sem_TableRefList _selTref ) (sem_MaybeBoolExpression _selWhere ) (sem_ExpressionList _selGroupBy ) (sem_MaybeBoolExpression _selHaving ) (sem_ExpressionDirectionPairList _selOrderBy ) (sem_MaybeExpression _selLimit ) (sem_MaybeExpression _selOffset ) )-sem_SelectExpression (Values _ann _vll ) =- (sem_SelectExpression_Values _ann (sem_ExpressionListList _vll ) )--- semantic domain-type T_SelectExpression = Catalog ->- LocalIdentifierBindings ->- ( SelectExpression,([LocalIdentifierBindingsUpdate]),SelectExpression)-data Inh_SelectExpression = Inh_SelectExpression {cat_Inh_SelectExpression :: Catalog,lib_Inh_SelectExpression :: LocalIdentifierBindings}-data Syn_SelectExpression = Syn_SelectExpression {annotatedTree_Syn_SelectExpression :: SelectExpression,libUpdates_Syn_SelectExpression :: [LocalIdentifierBindingsUpdate],originalTree_Syn_SelectExpression :: SelectExpression}-wrap_SelectExpression :: T_SelectExpression ->- Inh_SelectExpression ->- Syn_SelectExpression -wrap_SelectExpression sem (Inh_SelectExpression _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOlibUpdates,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_SelectExpression _lhsOannotatedTree _lhsOlibUpdates _lhsOoriginalTree ))-sem_SelectExpression_CombineSelect :: Annotation ->- T_CombineType ->- T_SelectExpression ->- T_SelectExpression ->- T_SelectExpression -sem_SelectExpression_CombineSelect ann_ ctype_ sel1_ sel2_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: SelectExpression- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOoriginalTree :: SelectExpression- _ctypeOcat :: Catalog- _ctypeOlib :: LocalIdentifierBindings- _sel1Ocat :: Catalog- _sel1Olib :: LocalIdentifierBindings- _sel2Ocat :: Catalog- _sel2Olib :: LocalIdentifierBindings- _ctypeIannotatedTree :: CombineType- _ctypeIoriginalTree :: CombineType- _sel1IannotatedTree :: SelectExpression- _sel1IlibUpdates :: ([LocalIdentifierBindingsUpdate])- _sel1IoriginalTree :: SelectExpression- _sel2IannotatedTree :: SelectExpression- _sel2IlibUpdates :: ([LocalIdentifierBindingsUpdate])- _sel2IoriginalTree :: SelectExpression- -- "./TypeChecking/SelectStatement.ag"(line 23, column 9)- _lhsOannotatedTree =- {-# LINE 23 "./TypeChecking/SelectStatement.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- Nothing- {-# LINE 7975 "AstInternal.hs" #-}- -- "./TypeChecking/SelectStatement.ag"(line 129, column 9)- _tpe =- {-# LINE 129 "./TypeChecking/SelectStatement.ag" #-}- let sel1t = getTypeAnnotation _sel1IannotatedTree- sel2t = getTypeAnnotation _sel2IannotatedTree- in dependsOnRTpe [sel1t, sel2t] $- typeCheckCombineSelect _lhsIcat sel1t sel2t- {-# LINE 7983 "AstInternal.hs" #-}- -- "./TypeChecking/SelectStatement.ag"(line 134, column 9)- _backTree =- {-# LINE 134 "./TypeChecking/SelectStatement.ag" #-}- CombineSelect ann_ _ctypeIannotatedTree- _sel1IannotatedTree- _sel2IannotatedTree- {-# LINE 7990 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 87, column 11)- _lhsOlibUpdates =- {-# LINE 87 "./TypeChecking/SelectLists.ag" #-}- []- {-# LINE 7995 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- CombineSelect ann_ _ctypeIannotatedTree _sel1IannotatedTree _sel2IannotatedTree- {-# LINE 8000 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- CombineSelect ann_ _ctypeIoriginalTree _sel1IoriginalTree _sel2IoriginalTree- {-# LINE 8005 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 8010 "AstInternal.hs" #-}- -- copy rule (down)- _ctypeOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 8015 "AstInternal.hs" #-}- -- copy rule (down)- _ctypeOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 8020 "AstInternal.hs" #-}- -- copy rule (down)- _sel1Ocat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 8025 "AstInternal.hs" #-}- -- copy rule (down)- _sel1Olib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 8030 "AstInternal.hs" #-}- -- copy rule (down)- _sel2Ocat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 8035 "AstInternal.hs" #-}- -- copy rule (down)- _sel2Olib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 8040 "AstInternal.hs" #-}- ( _ctypeIannotatedTree,_ctypeIoriginalTree) =- (ctype_ _ctypeOcat _ctypeOlib )- ( _sel1IannotatedTree,_sel1IlibUpdates,_sel1IoriginalTree) =- (sel1_ _sel1Ocat _sel1Olib )- ( _sel2IannotatedTree,_sel2IlibUpdates,_sel2IoriginalTree) =- (sel2_ _sel2Ocat _sel2Olib )- in ( _lhsOannotatedTree,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_SelectExpression_Select :: Annotation ->- T_Distinct ->- T_SelectList ->- T_TableRefList ->- T_MaybeBoolExpression ->- T_ExpressionList ->- T_MaybeBoolExpression ->- T_ExpressionDirectionPairList ->- T_MaybeExpression ->- T_MaybeExpression ->- T_SelectExpression -sem_SelectExpression_Select ann_ selDistinct_ selSelectList_ selTref_ selWhere_ selGroupBy_ selHaving_ selOrderBy_ selLimit_ selOffset_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: SelectExpression- _selSelectListOlib :: LocalIdentifierBindings- _selWhereOlib :: LocalIdentifierBindings- _selGroupByOlib :: LocalIdentifierBindings- _selOrderByOlib :: LocalIdentifierBindings- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOoriginalTree :: SelectExpression- _selDistinctOcat :: Catalog- _selDistinctOlib :: LocalIdentifierBindings- _selSelectListOcat :: Catalog- _selTrefOcat :: Catalog- _selTrefOlib :: LocalIdentifierBindings- _selWhereOcat :: Catalog- _selGroupByOcat :: Catalog- _selHavingOcat :: Catalog- _selHavingOlib :: LocalIdentifierBindings- _selOrderByOcat :: Catalog- _selLimitOcat :: Catalog- _selLimitOlib :: LocalIdentifierBindings- _selOffsetOcat :: Catalog- _selOffsetOlib :: LocalIdentifierBindings- _selDistinctIannotatedTree :: Distinct- _selDistinctIoriginalTree :: Distinct- _selSelectListIannotatedTree :: SelectList- _selSelectListIlibUpdates :: ([LocalIdentifierBindingsUpdate])- _selSelectListIlistType :: ([(String,Type)])- _selSelectListIoriginalTree :: SelectList- _selTrefIannotatedTree :: TableRefList- _selTrefIlibUpdates :: ([LocalIdentifierBindingsUpdate])- _selTrefIoriginalTree :: TableRefList- _selWhereIannotatedTree :: MaybeBoolExpression- _selWhereIoriginalTree :: MaybeBoolExpression- _selGroupByIannotatedTree :: ExpressionList- _selGroupByIoriginalTree :: ExpressionList- _selGroupByItypeList :: ([Type])- _selHavingIannotatedTree :: MaybeBoolExpression- _selHavingIoriginalTree :: MaybeBoolExpression- _selOrderByIannotatedTree :: ExpressionDirectionPairList- _selOrderByIoriginalTree :: ExpressionDirectionPairList- _selLimitIannotatedTree :: MaybeExpression- _selLimitIoriginalTree :: MaybeExpression- _selOffsetIannotatedTree :: MaybeExpression- _selOffsetIoriginalTree :: MaybeExpression- -- "./TypeChecking/SelectStatement.ag"(line 23, column 9)- _lhsOannotatedTree =- {-# LINE 23 "./TypeChecking/SelectStatement.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- Nothing- {-# LINE 8112 "AstInternal.hs" #-}- -- "./TypeChecking/SelectStatement.ag"(line 94, column 10)- _newLib =- {-# LINE 94 "./TypeChecking/SelectStatement.ag" #-}- case updateBindings _lhsIlib _lhsIcat _selTrefIlibUpdates of- Left x -> error $ show x- Right e -> e- {-# LINE 8119 "AstInternal.hs" #-}- -- "./TypeChecking/SelectStatement.ag"(line 97, column 10)- _selSelectListOlib =- {-# LINE 97 "./TypeChecking/SelectStatement.ag" #-}- _newLib- {-# LINE 8124 "AstInternal.hs" #-}- -- "./TypeChecking/SelectStatement.ag"(line 98, column 10)- _selWhereOlib =- {-# LINE 98 "./TypeChecking/SelectStatement.ag" #-}- _newLib- {-# LINE 8129 "AstInternal.hs" #-}- -- "./TypeChecking/SelectStatement.ag"(line 99, column 10)- _selGroupByOlib =- {-# LINE 99 "./TypeChecking/SelectStatement.ag" #-}- _newLib- {-# LINE 8134 "AstInternal.hs" #-}- -- "./TypeChecking/SelectStatement.ag"(line 100, column 10)- _selOrderByOlib =- {-# LINE 100 "./TypeChecking/SelectStatement.ag" #-}- _newLib- {-# LINE 8139 "AstInternal.hs" #-}- -- "./TypeChecking/SelectStatement.ag"(line 111, column 9)- _tpe =- {-# LINE 111 "./TypeChecking/SelectStatement.ag" #-}- do- Right $ case _selSelectListIlistType of- [(_,Pseudo Void)] -> Pseudo Void- _ -> SetOfType $ CompositeType _selSelectListIlistType- {-# LINE 8147 "AstInternal.hs" #-}- -- "./TypeChecking/SelectStatement.ag"(line 118, column 9)- _backTree =- {-# LINE 118 "./TypeChecking/SelectStatement.ag" #-}- Select ann_- _selDistinctIannotatedTree- _selSelectListIannotatedTree- _selTrefIannotatedTree- _selWhereIannotatedTree- _selGroupByIannotatedTree- _selHavingIannotatedTree- _selOrderByIannotatedTree- _selLimitIannotatedTree- _selOffsetIannotatedTree- {-# LINE 8161 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 85, column 9)- _lhsOlibUpdates =- {-# LINE 85 "./TypeChecking/SelectLists.ag" #-}- _selSelectListIlibUpdates- {-# LINE 8166 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Select ann_ _selDistinctIannotatedTree _selSelectListIannotatedTree _selTrefIannotatedTree _selWhereIannotatedTree _selGroupByIannotatedTree _selHavingIannotatedTree _selOrderByIannotatedTree _selLimitIannotatedTree _selOffsetIannotatedTree- {-# LINE 8171 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Select ann_ _selDistinctIoriginalTree _selSelectListIoriginalTree _selTrefIoriginalTree _selWhereIoriginalTree _selGroupByIoriginalTree _selHavingIoriginalTree _selOrderByIoriginalTree _selLimitIoriginalTree _selOffsetIoriginalTree- {-# LINE 8176 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 8181 "AstInternal.hs" #-}- -- copy rule (down)- _selDistinctOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 8186 "AstInternal.hs" #-}- -- copy rule (down)- _selDistinctOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 8191 "AstInternal.hs" #-}- -- copy rule (down)- _selSelectListOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 8196 "AstInternal.hs" #-}- -- copy rule (down)- _selTrefOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 8201 "AstInternal.hs" #-}- -- copy rule (down)- _selTrefOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 8206 "AstInternal.hs" #-}- -- copy rule (down)- _selWhereOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 8211 "AstInternal.hs" #-}- -- copy rule (down)- _selGroupByOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 8216 "AstInternal.hs" #-}- -- copy rule (down)- _selHavingOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 8221 "AstInternal.hs" #-}- -- copy rule (down)- _selHavingOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 8226 "AstInternal.hs" #-}- -- copy rule (down)- _selOrderByOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 8231 "AstInternal.hs" #-}- -- copy rule (down)- _selLimitOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 8236 "AstInternal.hs" #-}- -- copy rule (down)- _selLimitOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 8241 "AstInternal.hs" #-}- -- copy rule (down)- _selOffsetOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 8246 "AstInternal.hs" #-}- -- copy rule (down)- _selOffsetOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 8251 "AstInternal.hs" #-}- ( _selDistinctIannotatedTree,_selDistinctIoriginalTree) =- (selDistinct_ _selDistinctOcat _selDistinctOlib )- ( _selSelectListIannotatedTree,_selSelectListIlibUpdates,_selSelectListIlistType,_selSelectListIoriginalTree) =- (selSelectList_ _selSelectListOcat _selSelectListOlib )- ( _selTrefIannotatedTree,_selTrefIlibUpdates,_selTrefIoriginalTree) =- (selTref_ _selTrefOcat _selTrefOlib )- ( _selWhereIannotatedTree,_selWhereIoriginalTree) =- (selWhere_ _selWhereOcat _selWhereOlib )- ( _selGroupByIannotatedTree,_selGroupByIoriginalTree,_selGroupByItypeList) =- (selGroupBy_ _selGroupByOcat _selGroupByOlib )- ( _selHavingIannotatedTree,_selHavingIoriginalTree) =- (selHaving_ _selHavingOcat _selHavingOlib )- ( _selOrderByIannotatedTree,_selOrderByIoriginalTree) =- (selOrderBy_ _selOrderByOcat _selOrderByOlib )- ( _selLimitIannotatedTree,_selLimitIoriginalTree) =- (selLimit_ _selLimitOcat _selLimitOlib )- ( _selOffsetIannotatedTree,_selOffsetIoriginalTree) =- (selOffset_ _selOffsetOcat _selOffsetOlib )- in ( _lhsOannotatedTree,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_SelectExpression_Values :: Annotation ->- T_ExpressionListList ->- T_SelectExpression -sem_SelectExpression_Values ann_ vll_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: SelectExpression- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOoriginalTree :: SelectExpression- _vllOcat :: Catalog- _vllOlib :: LocalIdentifierBindings- _vllIannotatedTree :: ExpressionListList- _vllIoriginalTree :: ExpressionListList- _vllItypeListList :: ([[Type]])- -- "./TypeChecking/SelectStatement.ag"(line 23, column 9)- _lhsOannotatedTree =- {-# LINE 23 "./TypeChecking/SelectStatement.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- Nothing- {-# LINE 8292 "AstInternal.hs" #-}- -- "./TypeChecking/SelectStatement.ag"(line 106, column 9)- _tpe =- {-# LINE 106 "./TypeChecking/SelectStatement.ag" #-}- typeCheckValuesExpr- _lhsIcat- _vllItypeListList- {-# LINE 8299 "AstInternal.hs" #-}- -- "./TypeChecking/SelectStatement.ag"(line 109, column 9)- _backTree =- {-# LINE 109 "./TypeChecking/SelectStatement.ag" #-}- Values ann_ _vllIannotatedTree- {-# LINE 8304 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 87, column 11)- _lhsOlibUpdates =- {-# LINE 87 "./TypeChecking/SelectLists.ag" #-}- []- {-# LINE 8309 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Values ann_ _vllIannotatedTree- {-# LINE 8314 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Values ann_ _vllIoriginalTree- {-# LINE 8319 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 8324 "AstInternal.hs" #-}- -- copy rule (down)- _vllOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 8329 "AstInternal.hs" #-}- -- copy rule (down)- _vllOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 8334 "AstInternal.hs" #-}- ( _vllIannotatedTree,_vllIoriginalTree,_vllItypeListList) =- (vll_ _vllOcat _vllOlib )- in ( _lhsOannotatedTree,_lhsOlibUpdates,_lhsOoriginalTree)))--- SelectItem ---------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - columnName : String- itemType : Type- originalTree : SELF - alternatives:- alternative SelExp:- child ann : {Annotation}- child ex : Expression - visit 0:- local annotatedTree : _- local originalTree : _- alternative SelectItem:- child ann : {Annotation}- child ex : Expression - child name : {String}- visit 0:- local annotatedTree : _- local originalTree : _--}-data SelectItem = SelExp (Annotation) (Expression) - | SelectItem (Annotation) (Expression) (String) - deriving ( Data,Eq,Show,Typeable)--- cata-sem_SelectItem :: SelectItem ->- T_SelectItem -sem_SelectItem (SelExp _ann _ex ) =- (sem_SelectItem_SelExp _ann (sem_Expression _ex ) )-sem_SelectItem (SelectItem _ann _ex _name ) =- (sem_SelectItem_SelectItem _ann (sem_Expression _ex ) _name )--- semantic domain-type T_SelectItem = Catalog ->- LocalIdentifierBindings ->- ( SelectItem,String,Type,SelectItem)-data Inh_SelectItem = Inh_SelectItem {cat_Inh_SelectItem :: Catalog,lib_Inh_SelectItem :: LocalIdentifierBindings}-data Syn_SelectItem = Syn_SelectItem {annotatedTree_Syn_SelectItem :: SelectItem,columnName_Syn_SelectItem :: String,itemType_Syn_SelectItem :: Type,originalTree_Syn_SelectItem :: SelectItem}-wrap_SelectItem :: T_SelectItem ->- Inh_SelectItem ->- Syn_SelectItem -wrap_SelectItem sem (Inh_SelectItem _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOcolumnName,_lhsOitemType,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_SelectItem _lhsOannotatedTree _lhsOcolumnName _lhsOitemType _lhsOoriginalTree ))-sem_SelectItem_SelExp :: Annotation ->- T_Expression ->- T_SelectItem -sem_SelectItem_SelExp ann_ ex_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOitemType :: Type- _lhsOcolumnName :: String- _lhsOannotatedTree :: SelectItem- _lhsOoriginalTree :: SelectItem- _exOcat :: Catalog- _exOlib :: LocalIdentifierBindings- _exIannotatedTree :: Expression- _exIliftedColumnName :: String- _exIoriginalTree :: Expression- -- "./TypeChecking/SelectLists.ag"(line 13, column 9)- _annotatedTree =- {-# LINE 13 "./TypeChecking/SelectLists.ag" #-}- SelExp ann_ $ fixStar _exIannotatedTree- {-# LINE 8406 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 35, column 9)- _lhsOitemType =- {-# LINE 35 "./TypeChecking/SelectLists.ag" #-}- getTypeAnnotation _exIannotatedTree- {-# LINE 8411 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 181, column 14)- _lhsOcolumnName =- {-# LINE 181 "./TypeChecking/SelectLists.ag" #-}- case _exIliftedColumnName of- "" -> "?column?"- s -> s- {-# LINE 8418 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- SelExp ann_ _exIoriginalTree- {-# LINE 8423 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 8428 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 8433 "AstInternal.hs" #-}- -- copy rule (down)- _exOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 8438 "AstInternal.hs" #-}- -- copy rule (down)- _exOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 8443 "AstInternal.hs" #-}- ( _exIannotatedTree,_exIliftedColumnName,_exIoriginalTree) =- (ex_ _exOcat _exOlib )- in ( _lhsOannotatedTree,_lhsOcolumnName,_lhsOitemType,_lhsOoriginalTree)))-sem_SelectItem_SelectItem :: Annotation ->- T_Expression ->- String ->- T_SelectItem -sem_SelectItem_SelectItem ann_ ex_ name_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOitemType :: Type- _lhsOcolumnName :: String- _lhsOannotatedTree :: SelectItem- _lhsOoriginalTree :: SelectItem- _exOcat :: Catalog- _exOlib :: LocalIdentifierBindings- _exIannotatedTree :: Expression- _exIliftedColumnName :: String- _exIoriginalTree :: Expression- -- "./TypeChecking/SelectLists.ag"(line 15, column 9)- _annotatedTree =- {-# LINE 15 "./TypeChecking/SelectLists.ag" #-}- SelectItem ann_ (fixStar _exIannotatedTree) name_- {-# LINE 8467 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 35, column 9)- _lhsOitemType =- {-# LINE 35 "./TypeChecking/SelectLists.ag" #-}- getTypeAnnotation _exIannotatedTree- {-# LINE 8472 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 184, column 18)- _lhsOcolumnName =- {-# LINE 184 "./TypeChecking/SelectLists.ag" #-}- name_- {-# LINE 8477 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- SelectItem ann_ _exIoriginalTree name_- {-# LINE 8482 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 8487 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 8492 "AstInternal.hs" #-}- -- copy rule (down)- _exOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 8497 "AstInternal.hs" #-}- -- copy rule (down)- _exOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 8502 "AstInternal.hs" #-}- ( _exIannotatedTree,_exIliftedColumnName,_exIoriginalTree) =- (ex_ _exOcat _exOlib )- in ( _lhsOannotatedTree,_lhsOcolumnName,_lhsOitemType,_lhsOoriginalTree)))--- SelectItemList -----------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - listType : [(String,Type)]- originalTree : SELF - alternatives:- alternative Cons:- child hd : SelectItem - child tl : SelectItemList - visit 0:- local annotatedTree : _- local originalTree : _- alternative Nil:- visit 0:- local annotatedTree : _- local originalTree : _--}-type SelectItemList = [(SelectItem)]--- cata-sem_SelectItemList :: SelectItemList ->- T_SelectItemList -sem_SelectItemList list =- (Prelude.foldr sem_SelectItemList_Cons sem_SelectItemList_Nil (Prelude.map sem_SelectItem list) )--- semantic domain-type T_SelectItemList = Catalog ->- LocalIdentifierBindings ->- ( SelectItemList,([(String,Type)]),SelectItemList)-data Inh_SelectItemList = Inh_SelectItemList {cat_Inh_SelectItemList :: Catalog,lib_Inh_SelectItemList :: LocalIdentifierBindings}-data Syn_SelectItemList = Syn_SelectItemList {annotatedTree_Syn_SelectItemList :: SelectItemList,listType_Syn_SelectItemList :: [(String,Type)],originalTree_Syn_SelectItemList :: SelectItemList}-wrap_SelectItemList :: T_SelectItemList ->- Inh_SelectItemList ->- Syn_SelectItemList -wrap_SelectItemList sem (Inh_SelectItemList _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOlistType,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_SelectItemList _lhsOannotatedTree _lhsOlistType _lhsOoriginalTree ))-sem_SelectItemList_Cons :: T_SelectItem ->- T_SelectItemList ->- T_SelectItemList -sem_SelectItemList_Cons hd_ tl_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOlistType :: ([(String,Type)])- _lhsOannotatedTree :: SelectItemList- _lhsOoriginalTree :: SelectItemList- _hdOcat :: Catalog- _hdOlib :: LocalIdentifierBindings- _tlOcat :: Catalog- _tlOlib :: LocalIdentifierBindings- _hdIannotatedTree :: SelectItem- _hdIcolumnName :: String- _hdIitemType :: Type- _hdIoriginalTree :: SelectItem- _tlIannotatedTree :: SelectItemList- _tlIlistType :: ([(String,Type)])- _tlIoriginalTree :: SelectItemList- -- "./TypeChecking/SelectLists.ag"(line 29, column 12)- _lhsOlistType =- {-# LINE 29 "./TypeChecking/SelectLists.ag" #-}- expandStar _lhsIlib _hdIcolumnName _hdIitemType _tlIlistType- {-# LINE 8571 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIannotatedTree _tlIannotatedTree- {-# LINE 8576 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIoriginalTree _tlIoriginalTree- {-# LINE 8581 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 8586 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 8591 "AstInternal.hs" #-}- -- copy rule (down)- _hdOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 8596 "AstInternal.hs" #-}- -- copy rule (down)- _hdOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 8601 "AstInternal.hs" #-}- -- copy rule (down)- _tlOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 8606 "AstInternal.hs" #-}- -- copy rule (down)- _tlOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 8611 "AstInternal.hs" #-}- ( _hdIannotatedTree,_hdIcolumnName,_hdIitemType,_hdIoriginalTree) =- (hd_ _hdOcat _hdOlib )- ( _tlIannotatedTree,_tlIlistType,_tlIoriginalTree) =- (tl_ _tlOcat _tlOlib )- in ( _lhsOannotatedTree,_lhsOlistType,_lhsOoriginalTree)))-sem_SelectItemList_Nil :: T_SelectItemList -sem_SelectItemList_Nil =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOlistType :: ([(String,Type)])- _lhsOannotatedTree :: SelectItemList- _lhsOoriginalTree :: SelectItemList- -- "./TypeChecking/SelectLists.ag"(line 30, column 11)- _lhsOlistType =- {-# LINE 30 "./TypeChecking/SelectLists.ag" #-}- []- {-# LINE 8628 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 8633 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 8638 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 8643 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 8648 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOlistType,_lhsOoriginalTree)))--- SelectList ---------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - libUpdates : [LocalIdentifierBindingsUpdate]- listType : [(String,Type)]- originalTree : SELF - alternatives:- alternative SelectList:- child ann : {Annotation}- child items : SelectItemList - child into : StringList - visit 0:- local errs : _- local stuff : _- local annotatedTree : _- local originalTree : _--}-data SelectList = SelectList (Annotation) (SelectItemList) (StringList) - deriving ( Data,Eq,Show,Typeable)--- cata-sem_SelectList :: SelectList ->- T_SelectList -sem_SelectList (SelectList _ann _items _into ) =- (sem_SelectList_SelectList _ann (sem_SelectItemList _items ) (sem_StringList _into ) )--- semantic domain-type T_SelectList = Catalog ->- LocalIdentifierBindings ->- ( SelectList,([LocalIdentifierBindingsUpdate]),([(String,Type)]),SelectList)-data Inh_SelectList = Inh_SelectList {cat_Inh_SelectList :: Catalog,lib_Inh_SelectList :: LocalIdentifierBindings}-data Syn_SelectList = Syn_SelectList {annotatedTree_Syn_SelectList :: SelectList,libUpdates_Syn_SelectList :: [LocalIdentifierBindingsUpdate],listType_Syn_SelectList :: [(String,Type)],originalTree_Syn_SelectList :: SelectList}-wrap_SelectList :: T_SelectList ->- Inh_SelectList ->- Syn_SelectList -wrap_SelectList sem (Inh_SelectList _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOlibUpdates,_lhsOlistType,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_SelectList _lhsOannotatedTree _lhsOlibUpdates _lhsOlistType _lhsOoriginalTree ))-sem_SelectList_SelectList :: Annotation ->- T_SelectItemList ->- T_StringList ->- T_SelectList -sem_SelectList_SelectList ann_ items_ into_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOlistType :: ([(String,Type)])- _lhsOannotatedTree :: SelectList- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOoriginalTree :: SelectList- _itemsOcat :: Catalog- _itemsOlib :: LocalIdentifierBindings- _intoOcat :: Catalog- _intoOlib :: LocalIdentifierBindings- _itemsIannotatedTree :: SelectItemList- _itemsIlistType :: ([(String,Type)])- _itemsIoriginalTree :: SelectItemList- _intoIannotatedTree :: StringList- _intoIoriginalTree :: StringList- _intoIstrings :: ([String])- -- "./TypeChecking/SelectLists.ag"(line 41, column 9)- _lhsOlistType =- {-# LINE 41 "./TypeChecking/SelectLists.ag" #-}- _itemsIlistType- {-# LINE 8717 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 43, column 9)- _errs =- {-# LINE 43 "./TypeChecking/SelectLists.ag" #-}- case _stuff of- (er,_) -> er- {-# LINE 8723 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 45, column 9)- _stuff =- {-# LINE 45 "./TypeChecking/SelectLists.ag" #-}- case () of- _ | null sl -> ([],Nothing)- | not (null targetTypeErrs) -> (targetTypeErrs,Nothing)- | (case targetTypes of- [PgRecord _] -> True- _ -> False) -> ([],Just (head sl, CompositeType _itemsIlistType))- | matchingComposite /= Left [] -> (fromLeft [] matchingComposite,Nothing)- | length sl /= length _itemsIlistType -> ([WrongNumberOfColumns],Nothing)- | not (null assignErrs) -> (assignErrs,Nothing)- | otherwise -> ([],Nothing)- where- targetTypeEithers = map (libLookupID _lhsIlib) sl- targetTypeErrs = concat $ lefts $ targetTypeEithers- targetTypes = rights $ targetTypeEithers- typePairs = zip (map snd _itemsIlistType) targetTypes- assignErrs = concat $ lefts $ map (uncurry $ checkAssignmentValid _lhsIcat) typePairs- sl = _intoIstrings- matchingComposite =- case targetTypes of- [t] | isCompositeType t -> checkAssignmentValid _lhsIcat (AnonymousRecordType (map snd _itemsIlistType)) t- _ -> Left []- {-# LINE 8748 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 68, column 9)- _lhsOannotatedTree =- {-# LINE 68 "./TypeChecking/SelectLists.ag" #-}- SelectList (ann_ ++ map TypeErrorA _errs )- _itemsIannotatedTree- _intoIannotatedTree- {-# LINE 8755 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 71, column 9)- _lhsOlibUpdates =- {-# LINE 71 "./TypeChecking/SelectLists.ag" #-}- case _stuff of- (_,Just r) -> [LibStackIDs [("", [r])]]- _ -> []- {-# LINE 8762 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- SelectList ann_ _itemsIannotatedTree _intoIannotatedTree- {-# LINE 8767 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- SelectList ann_ _itemsIoriginalTree _intoIoriginalTree- {-# LINE 8772 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 8777 "AstInternal.hs" #-}- -- copy rule (down)- _itemsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 8782 "AstInternal.hs" #-}- -- copy rule (down)- _itemsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 8787 "AstInternal.hs" #-}- -- copy rule (down)- _intoOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 8792 "AstInternal.hs" #-}- -- copy rule (down)- _intoOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 8797 "AstInternal.hs" #-}- ( _itemsIannotatedTree,_itemsIlistType,_itemsIoriginalTree) =- (items_ _itemsOcat _itemsOlib )- ( _intoIannotatedTree,_intoIoriginalTree,_intoIstrings) =- (into_ _intoOcat _intoOlib )- in ( _lhsOannotatedTree,_lhsOlibUpdates,_lhsOlistType,_lhsOoriginalTree)))--- SetClause ----------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - pairs : [(String,Type)]- rowSetError : Maybe TypeError- alternatives:- alternative RowSetClause:- child ann : {Annotation}- child atts : StringList - child vals : ExpressionList - visit 0:- local rowSetError : _- local annotatedTree : _- local originalTree : _- alternative SetClause:- child ann : {Annotation}- child att : {String}- child val : Expression - visit 0:- local annotatedTree : _- local originalTree : _--}-data SetClause = RowSetClause (Annotation) (StringList) (ExpressionList) - | SetClause (Annotation) (String) (Expression) - deriving ( Data,Eq,Show,Typeable)--- cata-sem_SetClause :: SetClause ->- T_SetClause -sem_SetClause (RowSetClause _ann _atts _vals ) =- (sem_SetClause_RowSetClause _ann (sem_StringList _atts ) (sem_ExpressionList _vals ) )-sem_SetClause (SetClause _ann _att _val ) =- (sem_SetClause_SetClause _ann _att (sem_Expression _val ) )--- semantic domain-type T_SetClause = Catalog ->- LocalIdentifierBindings ->- ( SetClause,SetClause,([(String,Type)]),(Maybe TypeError))-data Inh_SetClause = Inh_SetClause {cat_Inh_SetClause :: Catalog,lib_Inh_SetClause :: LocalIdentifierBindings}-data Syn_SetClause = Syn_SetClause {annotatedTree_Syn_SetClause :: SetClause,originalTree_Syn_SetClause :: SetClause,pairs_Syn_SetClause :: [(String,Type)],rowSetError_Syn_SetClause :: Maybe TypeError}-wrap_SetClause :: T_SetClause ->- Inh_SetClause ->- Syn_SetClause -wrap_SetClause sem (Inh_SetClause _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree,_lhsOpairs,_lhsOrowSetError) =- (sem _lhsIcat _lhsIlib )- in (Syn_SetClause _lhsOannotatedTree _lhsOoriginalTree _lhsOpairs _lhsOrowSetError ))-sem_SetClause_RowSetClause :: Annotation ->- T_StringList ->- T_ExpressionList ->- T_SetClause -sem_SetClause_RowSetClause ann_ atts_ vals_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOpairs :: ([(String,Type)])- _lhsOannotatedTree :: SetClause- _lhsOoriginalTree :: SetClause- _lhsOrowSetError :: (Maybe TypeError)- _attsOcat :: Catalog- _attsOlib :: LocalIdentifierBindings- _valsOcat :: Catalog- _valsOlib :: LocalIdentifierBindings- _attsIannotatedTree :: StringList- _attsIoriginalTree :: StringList- _attsIstrings :: ([String])- _valsIannotatedTree :: ExpressionList- _valsIoriginalTree :: ExpressionList- _valsItypeList :: ([Type])- -- "./TypeChecking/Dml.ag"(line 155, column 9)- _rowSetError =- {-# LINE 155 "./TypeChecking/Dml.ag" #-}- let atts = _attsIstrings- types = getRowTypes _valsItypeList- in if length atts /= length types- then Just WrongNumberOfColumns- else Nothing- {-# LINE 8883 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 161, column 9)- _lhsOpairs =- {-# LINE 161 "./TypeChecking/Dml.ag" #-}- zip _attsIstrings $ getRowTypes _valsItypeList- {-# LINE 8888 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- RowSetClause ann_ _attsIannotatedTree _valsIannotatedTree- {-# LINE 8893 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- RowSetClause ann_ _attsIoriginalTree _valsIoriginalTree- {-# LINE 8898 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 8903 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 8908 "AstInternal.hs" #-}- -- copy rule (from local)- _lhsOrowSetError =- {-# LINE 148 "./TypeChecking/Dml.ag" #-}- _rowSetError- {-# LINE 8913 "AstInternal.hs" #-}- -- copy rule (down)- _attsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 8918 "AstInternal.hs" #-}- -- copy rule (down)- _attsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 8923 "AstInternal.hs" #-}- -- copy rule (down)- _valsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 8928 "AstInternal.hs" #-}- -- copy rule (down)- _valsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 8933 "AstInternal.hs" #-}- ( _attsIannotatedTree,_attsIoriginalTree,_attsIstrings) =- (atts_ _attsOcat _attsOlib )- ( _valsIannotatedTree,_valsIoriginalTree,_valsItypeList) =- (vals_ _valsOcat _valsOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree,_lhsOpairs,_lhsOrowSetError)))-sem_SetClause_SetClause :: Annotation ->- String ->- T_Expression ->- T_SetClause -sem_SetClause_SetClause ann_ att_ val_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOpairs :: ([(String,Type)])- _lhsOrowSetError :: (Maybe TypeError)- _lhsOannotatedTree :: SetClause- _lhsOoriginalTree :: SetClause- _valOcat :: Catalog- _valOlib :: LocalIdentifierBindings- _valIannotatedTree :: Expression- _valIliftedColumnName :: String- _valIoriginalTree :: Expression- -- "./TypeChecking/Dml.ag"(line 152, column 9)- _lhsOpairs =- {-# LINE 152 "./TypeChecking/Dml.ag" #-}- [(att_, getTypeAnnotation _valIannotatedTree)]- {-# LINE 8959 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 153, column 9)- _lhsOrowSetError =- {-# LINE 153 "./TypeChecking/Dml.ag" #-}- Nothing- {-# LINE 8964 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- SetClause ann_ att_ _valIannotatedTree- {-# LINE 8969 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- SetClause ann_ att_ _valIoriginalTree- {-# LINE 8974 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 8979 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 8984 "AstInternal.hs" #-}- -- copy rule (down)- _valOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 8989 "AstInternal.hs" #-}- -- copy rule (down)- _valOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 8994 "AstInternal.hs" #-}- ( _valIannotatedTree,_valIliftedColumnName,_valIoriginalTree) =- (val_ _valOcat _valOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree,_lhsOpairs,_lhsOrowSetError)))--- SetClauseList ------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - pairs : [(String,Type)]- rowSetErrors : [TypeError]- alternatives:- alternative Cons:- child hd : SetClause - child tl : SetClauseList - visit 0:- local annotatedTree : _- local originalTree : _- alternative Nil:- visit 0:- local annotatedTree : _- local originalTree : _--}-type SetClauseList = [(SetClause)]--- cata-sem_SetClauseList :: SetClauseList ->- T_SetClauseList -sem_SetClauseList list =- (Prelude.foldr sem_SetClauseList_Cons sem_SetClauseList_Nil (Prelude.map sem_SetClause list) )--- semantic domain-type T_SetClauseList = Catalog ->- LocalIdentifierBindings ->- ( SetClauseList,SetClauseList,([(String,Type)]),([TypeError]))-data Inh_SetClauseList = Inh_SetClauseList {cat_Inh_SetClauseList :: Catalog,lib_Inh_SetClauseList :: LocalIdentifierBindings}-data Syn_SetClauseList = Syn_SetClauseList {annotatedTree_Syn_SetClauseList :: SetClauseList,originalTree_Syn_SetClauseList :: SetClauseList,pairs_Syn_SetClauseList :: [(String,Type)],rowSetErrors_Syn_SetClauseList :: [TypeError]}-wrap_SetClauseList :: T_SetClauseList ->- Inh_SetClauseList ->- Syn_SetClauseList -wrap_SetClauseList sem (Inh_SetClauseList _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree,_lhsOpairs,_lhsOrowSetErrors) =- (sem _lhsIcat _lhsIlib )- in (Syn_SetClauseList _lhsOannotatedTree _lhsOoriginalTree _lhsOpairs _lhsOrowSetErrors ))-sem_SetClauseList_Cons :: T_SetClause ->- T_SetClauseList ->- T_SetClauseList -sem_SetClauseList_Cons hd_ tl_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOpairs :: ([(String,Type)])- _lhsOrowSetErrors :: ([TypeError])- _lhsOannotatedTree :: SetClauseList- _lhsOoriginalTree :: SetClauseList- _hdOcat :: Catalog- _hdOlib :: LocalIdentifierBindings- _tlOcat :: Catalog- _tlOlib :: LocalIdentifierBindings- _hdIannotatedTree :: SetClause- _hdIoriginalTree :: SetClause- _hdIpairs :: ([(String,Type)])- _hdIrowSetError :: (Maybe TypeError)- _tlIannotatedTree :: SetClauseList- _tlIoriginalTree :: SetClauseList- _tlIpairs :: ([(String,Type)])- _tlIrowSetErrors :: ([TypeError])- -- "./TypeChecking/Dml.ag"(line 142, column 10)- _lhsOpairs =- {-# LINE 142 "./TypeChecking/Dml.ag" #-}- _hdIpairs ++ _tlIpairs- {-# LINE 9066 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 143, column 10)- _lhsOrowSetErrors =- {-# LINE 143 "./TypeChecking/Dml.ag" #-}- maybeToList _hdIrowSetError ++ _tlIrowSetErrors- {-# LINE 9071 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIannotatedTree _tlIannotatedTree- {-# LINE 9076 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIoriginalTree _tlIoriginalTree- {-# LINE 9081 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 9086 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 9091 "AstInternal.hs" #-}- -- copy rule (down)- _hdOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 9096 "AstInternal.hs" #-}- -- copy rule (down)- _hdOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 9101 "AstInternal.hs" #-}- -- copy rule (down)- _tlOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 9106 "AstInternal.hs" #-}- -- copy rule (down)- _tlOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 9111 "AstInternal.hs" #-}- ( _hdIannotatedTree,_hdIoriginalTree,_hdIpairs,_hdIrowSetError) =- (hd_ _hdOcat _hdOlib )- ( _tlIannotatedTree,_tlIoriginalTree,_tlIpairs,_tlIrowSetErrors) =- (tl_ _tlOcat _tlOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree,_lhsOpairs,_lhsOrowSetErrors)))-sem_SetClauseList_Nil :: T_SetClauseList -sem_SetClauseList_Nil =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOpairs :: ([(String,Type)])- _lhsOrowSetErrors :: ([TypeError])- _lhsOannotatedTree :: SetClauseList- _lhsOoriginalTree :: SetClauseList- -- "./TypeChecking/Dml.ag"(line 144, column 9)- _lhsOpairs =- {-# LINE 144 "./TypeChecking/Dml.ag" #-}- []- {-# LINE 9129 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 145, column 9)- _lhsOrowSetErrors =- {-# LINE 145 "./TypeChecking/Dml.ag" #-}- []- {-# LINE 9134 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 9139 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 9144 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 9149 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 9154 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree,_lhsOpairs,_lhsOrowSetErrors)))--- SetValue -----------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative SetId:- child ann : {Annotation}- child string : {String}- visit 0:- local annotatedTree : _- local originalTree : _- alternative SetNum:- child ann : {Annotation}- child double : {Double}- visit 0:- local annotatedTree : _- local originalTree : _- alternative SetStr:- child ann : {Annotation}- child string : {String}- visit 0:- local annotatedTree : _- local originalTree : _--}-data SetValue = SetId (Annotation) (String) - | SetNum (Annotation) (Double) - | SetStr (Annotation) (String) - deriving ( Data,Eq,Show,Typeable)--- cata-sem_SetValue :: SetValue ->- T_SetValue -sem_SetValue (SetId _ann _string ) =- (sem_SetValue_SetId _ann _string )-sem_SetValue (SetNum _ann _double ) =- (sem_SetValue_SetNum _ann _double )-sem_SetValue (SetStr _ann _string ) =- (sem_SetValue_SetStr _ann _string )--- semantic domain-type T_SetValue = Catalog ->- LocalIdentifierBindings ->- ( SetValue,SetValue)-data Inh_SetValue = Inh_SetValue {cat_Inh_SetValue :: Catalog,lib_Inh_SetValue :: LocalIdentifierBindings}-data Syn_SetValue = Syn_SetValue {annotatedTree_Syn_SetValue :: SetValue,originalTree_Syn_SetValue :: SetValue}-wrap_SetValue :: T_SetValue ->- Inh_SetValue ->- Syn_SetValue -wrap_SetValue sem (Inh_SetValue _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_SetValue _lhsOannotatedTree _lhsOoriginalTree ))-sem_SetValue_SetId :: Annotation ->- String ->- T_SetValue -sem_SetValue_SetId ann_ string_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: SetValue- _lhsOoriginalTree :: SetValue- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- SetId ann_ string_- {-# LINE 9223 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- SetId ann_ string_- {-# LINE 9228 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 9233 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 9238 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_SetValue_SetNum :: Annotation ->- Double ->- T_SetValue -sem_SetValue_SetNum ann_ double_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: SetValue- _lhsOoriginalTree :: SetValue- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- SetNum ann_ double_- {-# LINE 9252 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- SetNum ann_ double_- {-# LINE 9257 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 9262 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 9267 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_SetValue_SetStr :: Annotation ->- String ->- T_SetValue -sem_SetValue_SetStr ann_ string_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: SetValue- _lhsOoriginalTree :: SetValue- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- SetStr ann_ string_- {-# LINE 9281 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- SetStr ann_ string_- {-# LINE 9286 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 9291 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 9296 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- Statement ----------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- inProducedCat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - catUpdates : [CatalogUpdate]- libUpdates : [LocalIdentifierBindingsUpdate]- originalTree : SELF - alternatives:- alternative AlterSequence:- child ann : {Annotation}- child name : {String}- child ownedBy : {String}- visit 0:- local libUpdates : _- local annotatedTree : _- local originalTree : _- alternative AlterTable:- child ann : {Annotation}- child name : {String}- child actions : {[AlterTableAction]}- visit 0:- local annotatedTree : _- local originalTree : _- alternative Assignment:- child ann : {Annotation}- child target : {String}- child value : Expression - visit 0:- local libUpdates : _- local tpe : {Either [TypeError] Type}- local backTree : _- local catUpdates : {[CatalogUpdate]}- local statementType : _- local annotatedTree : _- local originalTree : _- alternative CaseStatement:- child ann : {Annotation}- child val : Expression - child cases : ExpressionListStatementListPairList - child els : StatementList - visit 0:- local annotatedTree : _- local originalTree : _- alternative ContinueStatement:- child ann : {Annotation}- visit 0:- local annotatedTree : _- local originalTree : _- alternative Copy:- child ann : {Annotation}- child table : {String}- child targetCols : StringList - child source : CopySource - visit 0:- local annotatedTree : _- local originalTree : _- alternative CopyData:- child ann : {Annotation}- child insData : {String}- visit 0:- local annotatedTree : _- local originalTree : _- alternative CreateDomain:- child ann : {Annotation}- child name : {String}- child typ : TypeName - child checkName : {String}- child check : MaybeBoolExpression - visit 0:- local libUpdates : _- local tpe : {Either [TypeError] Type}- local backTree : _- local statementType : _- local catUpdates : {[CatalogUpdate]}- local annotatedTree : _- local originalTree : _- alternative CreateFunction:- child ann : {Annotation}- child name : {String}- child params : ParamDefList - child rettype : TypeName - child lang : Language - child bodyQuote : {String}- child body : FnBody - child vol : Volatility - visit 0:- local libUpdates : _- local tpe : {Either [TypeError] Type}- local catUpdates : {[CatalogUpdate]}- local parameterTypes : _- local backTree : _- local statementType : _- local annotatedTree : _- local originalTree : _- alternative CreateLanguage:- child ann : {Annotation}- child name : {String}- visit 0:- local libUpdates : _- local tpe : {Either [TypeError] Type}- local backTree : _- local statementType : _- local catUpdates : {[CatalogUpdate]}- local annotatedTree : _- local originalTree : _- alternative CreateSequence:- child ann : {Annotation}- child name : {String}- child incr : {Integer}- child min : {Integer}- child max : {Integer}- child start : {Integer}- child cache : {Integer}- visit 0:- local libUpdates : _- local annotatedTree : _- local originalTree : _- alternative CreateTable:- child ann : {Annotation}- child name : {String}- child atts : AttributeDefList - child cons : ConstraintList - visit 0:- local libUpdates : _- local tpe : {Either [TypeError] Type}- local catUpdates : {[CatalogUpdate]}- local attrTypes : {[Type]}- local statementType : _- local backTree : _- local annotatedTree : _- local originalTree : _- alternative CreateTableAs:- child ann : {Annotation}- child name : {String}- child expr : SelectExpression - visit 0:- local libUpdates : _- local tpe : {Either [TypeError] Type}- local catUpdates : {[CatalogUpdate]}- local selType : _- local attrs : _- local backTree : _- local statementType : _- local annotatedTree : _- local originalTree : _- alternative CreateTrigger:- child ann : {Annotation}- child name : {String}- child wh : TriggerWhen - child events : {[TriggerEvent]}- child tbl : {String}- child firing : TriggerFire - child fnName : {String}- child fnArgs : {[Expression]}- visit 0:- local annotatedTree : _- local originalTree : _- alternative CreateType:- child ann : {Annotation}- child name : {String}- child atts : TypeAttributeDefList - visit 0:- local libUpdates : _- local tpe : {Either [TypeError] Type}- local backTree : _- local statementType : _- local catUpdates : {[CatalogUpdate]}- local annotatedTree : _- local originalTree : _- alternative CreateView:- child ann : {Annotation}- child name : {String}- child expr : SelectExpression - visit 0:- local libUpdates : _- local tpe : {Either [TypeError] Type}- local backTree : _- local attrs : _- local catUpdates : {[CatalogUpdate]}- local statementType : _- local annotatedTree : _- local originalTree : _- alternative Delete:- child ann : {Annotation}- child table : {String}- child whr : MaybeBoolExpression - child returning : MaybeSelectList - visit 0:- local libUpdates : _- local tpe : {Either [TypeError] Type}- local statementType : _- local backTree : _- local catUpdates : {[CatalogUpdate]}- local lib : _- local annotatedTree : _- local originalTree : _- alternative DropFunction:- child ann : {Annotation}- child ifE : IfExists - child sigs : StringTypeNameListPairList - child cascade : Cascade - visit 0:- local libUpdates : _- local tpe : {Either [TypeError] Type}- local backTree : _- local catUpdates : {[CatalogUpdate]}- local statementType : _- local annotatedTree : _- local originalTree : _- alternative DropSomething:- child ann : {Annotation}- child dropType : DropType - child ifE : IfExists - child names : StringList - child cascade : Cascade - visit 0:- local annotatedTree : _- local originalTree : _- alternative Execute:- child ann : {Annotation}- child expr : Expression - visit 0:- local annotatedTree : _- local originalTree : _- alternative ExecuteInto:- child ann : {Annotation}- child expr : Expression - child targets : StringList - visit 0:- local annotatedTree : _- local originalTree : _- alternative ForIntegerStatement:- child ann : {Annotation}- child var : {String}- child from : Expression - child to : Expression - child sts : StatementList - visit 0:- local libUpdates : _- local varTypeE : _- local tpe : {Either [TypeError] Type}- local backTree : _- local catUpdates : {[CatalogUpdate]}- local statementType : _- local annotatedTree : _- local originalTree : _- alternative ForSelectStatement:- child ann : {Annotation}- child var : {String}- child sel : SelectExpression - child sts : StatementList - visit 0:- local libUpdates : _- local selType : _- local tpe : {Either [TypeError] Type}- local backTree : _- local catUpdates : {[CatalogUpdate]}- local statementType : _- local annotatedTree : _- local originalTree : _- alternative If:- child ann : {Annotation}- child cases : ExpressionStatementListPairList - child els : StatementList - visit 0:- local annotatedTree : _- local originalTree : _- alternative Insert:- child ann : {Annotation}- child table : {String}- child targetCols : StringList - child insData : SelectExpression - child returning : MaybeSelectList - visit 0:- local libUpdates : _- local tpe : {Either [TypeError] Type}- local statementType : _- local columnTypes : _- local insDataAddedInferredTypes : _- local backTree : _- local catUpdates : {[CatalogUpdate]}- local annotatedTree : _- local originalTree : _- alternative Notify:- child ann : {Annotation}- child name : {String}- visit 0:- local libUpdates : _- local annotatedTree : _- local originalTree : _- alternative NullStatement:- child ann : {Annotation}- visit 0:- local annotatedTree : _- local originalTree : _- alternative Perform:- child ann : {Annotation}- child expr : Expression - visit 0:- local annotatedTree : _- local originalTree : _- alternative Raise:- child ann : {Annotation}- child level : RaiseType - child message : {String}- child args : ExpressionList - visit 0:- local annotatedTree : _- local originalTree : _- alternative Return:- child ann : {Annotation}- child value : MaybeExpression - visit 0:- local libUpdates : _- local tpe : {Either [TypeError] Type}- local backTree : _- local catUpdates : {[CatalogUpdate]}- local statementType : _- local annotatedTree : _- local originalTree : _- alternative ReturnNext:- child ann : {Annotation}- child expr : Expression - visit 0:- local annotatedTree : _- local originalTree : _- alternative ReturnQuery:- child ann : {Annotation}- child sel : SelectExpression - visit 0:- local annotatedTree : _- local originalTree : _- alternative SelectStatement:- child ann : {Annotation}- child ex : SelectExpression - visit 0:- local tpe : {Either [TypeError] Type}- local statementType : _- local backTree : _- local catUpdates : {[CatalogUpdate]}- local libUpdates : _- local annotatedTree : _- local originalTree : _- alternative Set:- child ann : {Annotation}- child name : {String}- child values : {[SetValue]}- visit 0:- local libUpdates : _- local annotatedTree : _- local originalTree : _- alternative Truncate:- child ann : {Annotation}- child tables : StringList - child restartIdentity : RestartIdentity - child cascade : Cascade - visit 0:- local annotatedTree : _- local originalTree : _- alternative Update:- child ann : {Annotation}- child table : {String}- child assigns : SetClauseList - child whr : MaybeBoolExpression - child returning : MaybeSelectList - visit 0:- local libUpdates : _- local tpe : {Either [TypeError] Type}- local statementType : _- local columnTypes : _- local assignWInferredTypes : {SetClauseList}- local backTree : _- local catUpdates : {[CatalogUpdate]}- local lib : _- local annotatedTree : _- local originalTree : _- alternative WhileStatement:- child ann : {Annotation}- child expr : Expression - child sts : StatementList - visit 0:- local annotatedTree : _- local originalTree : _--}-data Statement = AlterSequence (Annotation) (String) (String) - | AlterTable (Annotation) (String) ([AlterTableAction]) - | Assignment (Annotation) (String) (Expression) - | CaseStatement (Annotation) (Expression) (ExpressionListStatementListPairList) (StatementList) - | ContinueStatement (Annotation) - | Copy (Annotation) (String) (StringList) (CopySource) - | CopyData (Annotation) (String) - | CreateDomain (Annotation) (String) (TypeName) (String) (MaybeBoolExpression) - | CreateFunction (Annotation) (String) (ParamDefList) (TypeName) (Language) (String) (FnBody) (Volatility) - | CreateLanguage (Annotation) (String) - | CreateSequence (Annotation) (String) (Integer) (Integer) (Integer) (Integer) (Integer) - | CreateTable (Annotation) (String) (AttributeDefList) (ConstraintList) - | CreateTableAs (Annotation) (String) (SelectExpression) - | CreateTrigger (Annotation) (String) (TriggerWhen) ([TriggerEvent]) (String) (TriggerFire) (String) ([Expression]) - | CreateType (Annotation) (String) (TypeAttributeDefList) - | CreateView (Annotation) (String) (SelectExpression) - | Delete (Annotation) (String) (MaybeBoolExpression) (MaybeSelectList) - | DropFunction (Annotation) (IfExists) (StringTypeNameListPairList) (Cascade) - | DropSomething (Annotation) (DropType) (IfExists) (StringList) (Cascade) - | Execute (Annotation) (Expression) - | ExecuteInto (Annotation) (Expression) (StringList) - | ForIntegerStatement (Annotation) (String) (Expression) (Expression) (StatementList) - | ForSelectStatement (Annotation) (String) (SelectExpression) (StatementList) - | If (Annotation) (ExpressionStatementListPairList) (StatementList) - | Insert (Annotation) (String) (StringList) (SelectExpression) (MaybeSelectList) - | Notify (Annotation) (String) - | NullStatement (Annotation) - | Perform (Annotation) (Expression) - | Raise (Annotation) (RaiseType) (String) (ExpressionList) - | Return (Annotation) (MaybeExpression) - | ReturnNext (Annotation) (Expression) - | ReturnQuery (Annotation) (SelectExpression) - | SelectStatement (Annotation) (SelectExpression) - | Set (Annotation) (String) ([SetValue]) - | Truncate (Annotation) (StringList) (RestartIdentity) (Cascade) - | Update (Annotation) (String) (SetClauseList) (MaybeBoolExpression) (MaybeSelectList) - | WhileStatement (Annotation) (Expression) (StatementList) - deriving ( Data,Eq,Show,Typeable)--- cata-sem_Statement :: Statement ->- T_Statement -sem_Statement (AlterSequence _ann _name _ownedBy ) =- (sem_Statement_AlterSequence _ann _name _ownedBy )-sem_Statement (AlterTable _ann _name _actions ) =- (sem_Statement_AlterTable _ann _name _actions )-sem_Statement (Assignment _ann _target _value ) =- (sem_Statement_Assignment _ann _target (sem_Expression _value ) )-sem_Statement (CaseStatement _ann _val _cases _els ) =- (sem_Statement_CaseStatement _ann (sem_Expression _val ) (sem_ExpressionListStatementListPairList _cases ) (sem_StatementList _els ) )-sem_Statement (ContinueStatement _ann ) =- (sem_Statement_ContinueStatement _ann )-sem_Statement (Copy _ann _table _targetCols _source ) =- (sem_Statement_Copy _ann _table (sem_StringList _targetCols ) (sem_CopySource _source ) )-sem_Statement (CopyData _ann _insData ) =- (sem_Statement_CopyData _ann _insData )-sem_Statement (CreateDomain _ann _name _typ _checkName _check ) =- (sem_Statement_CreateDomain _ann _name (sem_TypeName _typ ) _checkName (sem_MaybeBoolExpression _check ) )-sem_Statement (CreateFunction _ann _name _params _rettype _lang _bodyQuote _body _vol ) =- (sem_Statement_CreateFunction _ann _name (sem_ParamDefList _params ) (sem_TypeName _rettype ) (sem_Language _lang ) _bodyQuote (sem_FnBody _body ) (sem_Volatility _vol ) )-sem_Statement (CreateLanguage _ann _name ) =- (sem_Statement_CreateLanguage _ann _name )-sem_Statement (CreateSequence _ann _name _incr _min _max _start _cache ) =- (sem_Statement_CreateSequence _ann _name _incr _min _max _start _cache )-sem_Statement (CreateTable _ann _name _atts _cons ) =- (sem_Statement_CreateTable _ann _name (sem_AttributeDefList _atts ) (sem_ConstraintList _cons ) )-sem_Statement (CreateTableAs _ann _name _expr ) =- (sem_Statement_CreateTableAs _ann _name (sem_SelectExpression _expr ) )-sem_Statement (CreateTrigger _ann _name _wh _events _tbl _firing _fnName _fnArgs ) =- (sem_Statement_CreateTrigger _ann _name (sem_TriggerWhen _wh ) _events _tbl (sem_TriggerFire _firing ) _fnName _fnArgs )-sem_Statement (CreateType _ann _name _atts ) =- (sem_Statement_CreateType _ann _name (sem_TypeAttributeDefList _atts ) )-sem_Statement (CreateView _ann _name _expr ) =- (sem_Statement_CreateView _ann _name (sem_SelectExpression _expr ) )-sem_Statement (Delete _ann _table _whr _returning ) =- (sem_Statement_Delete _ann _table (sem_MaybeBoolExpression _whr ) (sem_MaybeSelectList _returning ) )-sem_Statement (DropFunction _ann _ifE _sigs _cascade ) =- (sem_Statement_DropFunction _ann (sem_IfExists _ifE ) (sem_StringTypeNameListPairList _sigs ) (sem_Cascade _cascade ) )-sem_Statement (DropSomething _ann _dropType _ifE _names _cascade ) =- (sem_Statement_DropSomething _ann (sem_DropType _dropType ) (sem_IfExists _ifE ) (sem_StringList _names ) (sem_Cascade _cascade ) )-sem_Statement (Execute _ann _expr ) =- (sem_Statement_Execute _ann (sem_Expression _expr ) )-sem_Statement (ExecuteInto _ann _expr _targets ) =- (sem_Statement_ExecuteInto _ann (sem_Expression _expr ) (sem_StringList _targets ) )-sem_Statement (ForIntegerStatement _ann _var _from _to _sts ) =- (sem_Statement_ForIntegerStatement _ann _var (sem_Expression _from ) (sem_Expression _to ) (sem_StatementList _sts ) )-sem_Statement (ForSelectStatement _ann _var _sel _sts ) =- (sem_Statement_ForSelectStatement _ann _var (sem_SelectExpression _sel ) (sem_StatementList _sts ) )-sem_Statement (If _ann _cases _els ) =- (sem_Statement_If _ann (sem_ExpressionStatementListPairList _cases ) (sem_StatementList _els ) )-sem_Statement (Insert _ann _table _targetCols _insData _returning ) =- (sem_Statement_Insert _ann _table (sem_StringList _targetCols ) (sem_SelectExpression _insData ) (sem_MaybeSelectList _returning ) )-sem_Statement (Notify _ann _name ) =- (sem_Statement_Notify _ann _name )-sem_Statement (NullStatement _ann ) =- (sem_Statement_NullStatement _ann )-sem_Statement (Perform _ann _expr ) =- (sem_Statement_Perform _ann (sem_Expression _expr ) )-sem_Statement (Raise _ann _level _message _args ) =- (sem_Statement_Raise _ann (sem_RaiseType _level ) _message (sem_ExpressionList _args ) )-sem_Statement (Return _ann _value ) =- (sem_Statement_Return _ann (sem_MaybeExpression _value ) )-sem_Statement (ReturnNext _ann _expr ) =- (sem_Statement_ReturnNext _ann (sem_Expression _expr ) )-sem_Statement (ReturnQuery _ann _sel ) =- (sem_Statement_ReturnQuery _ann (sem_SelectExpression _sel ) )-sem_Statement (SelectStatement _ann _ex ) =- (sem_Statement_SelectStatement _ann (sem_SelectExpression _ex ) )-sem_Statement (Set _ann _name _values ) =- (sem_Statement_Set _ann _name _values )-sem_Statement (Truncate _ann _tables _restartIdentity _cascade ) =- (sem_Statement_Truncate _ann (sem_StringList _tables ) (sem_RestartIdentity _restartIdentity ) (sem_Cascade _cascade ) )-sem_Statement (Update _ann _table _assigns _whr _returning ) =- (sem_Statement_Update _ann _table (sem_SetClauseList _assigns ) (sem_MaybeBoolExpression _whr ) (sem_MaybeSelectList _returning ) )-sem_Statement (WhileStatement _ann _expr _sts ) =- (sem_Statement_WhileStatement _ann (sem_Expression _expr ) (sem_StatementList _sts ) )--- semantic domain-type T_Statement = Catalog ->- Catalog ->- LocalIdentifierBindings ->- ( Statement,([CatalogUpdate]),([LocalIdentifierBindingsUpdate]),Statement)-data Inh_Statement = Inh_Statement {cat_Inh_Statement :: Catalog,inProducedCat_Inh_Statement :: Catalog,lib_Inh_Statement :: LocalIdentifierBindings}-data Syn_Statement = Syn_Statement {annotatedTree_Syn_Statement :: Statement,catUpdates_Syn_Statement :: [CatalogUpdate],libUpdates_Syn_Statement :: [LocalIdentifierBindingsUpdate],originalTree_Syn_Statement :: Statement}-wrap_Statement :: T_Statement ->- Inh_Statement ->- Syn_Statement -wrap_Statement sem (Inh_Statement _lhsIcat _lhsIinProducedCat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIinProducedCat _lhsIlib )- in (Syn_Statement _lhsOannotatedTree _lhsOcatUpdates _lhsOlibUpdates _lhsOoriginalTree ))-sem_Statement_AlterSequence :: Annotation ->- String ->- String ->- T_Statement -sem_Statement_AlterSequence ann_ name_ ownedBy_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: Statement- _lhsOoriginalTree :: Statement- -- "./TypeChecking/Statements.ag"(line 73, column 9)- _libUpdates =- {-# LINE 73 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 9832 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 89, column 9)- _lhsOcatUpdates =- {-# LINE 89 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 9837 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 90, column 9)- _lhsOlibUpdates =- {-# LINE 90 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 9842 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- AlterSequence ann_ name_ ownedBy_- {-# LINE 9847 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- AlterSequence ann_ name_ ownedBy_- {-# LINE 9852 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 9857 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 9862 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_AlterTable :: Annotation ->- String ->- ([AlterTableAction]) ->- T_Statement -sem_Statement_AlterTable ann_ name_ actions_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: Statement- _lhsOoriginalTree :: Statement- -- "./TypeChecking/Statements.ag"(line 89, column 9)- _lhsOcatUpdates =- {-# LINE 89 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 9880 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 90, column 9)- _lhsOlibUpdates =- {-# LINE 90 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 9885 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- AlterTable ann_ name_ actions_- {-# LINE 9890 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- AlterTable ann_ name_ actions_- {-# LINE 9895 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 9900 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 9905 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_Assignment :: Annotation ->- String ->- T_Expression ->- T_Statement -sem_Statement_Assignment ann_ target_ value_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOannotatedTree :: Statement- _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _tpe :: (Either [TypeError] Type)- _catUpdates :: ([CatalogUpdate])- _lhsOoriginalTree :: Statement- _valueOcat :: Catalog- _valueOlib :: LocalIdentifierBindings- _valueIannotatedTree :: Expression- _valueIliftedColumnName :: String- _valueIoriginalTree :: Expression- -- "./TypeChecking/Statements.ag"(line 61, column 9)- _lhsOannotatedTree =- {-# LINE 61 "./TypeChecking/Statements.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ Just (map StatementTypeA _statementType ++- [CatUpdates _catUpdates ])- {-# LINE 9934 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 67, column 9)- _lhsOcatUpdates =- {-# LINE 67 "./TypeChecking/Statements.ag" #-}- _catUpdates- {-# LINE 9939 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 68, column 9)- _lhsOlibUpdates =- {-# LINE 68 "./TypeChecking/Statements.ag" #-}- _libUpdates- {-# LINE 9944 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 73, column 9)- _libUpdates =- {-# LINE 73 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 9949 "AstInternal.hs" #-}- -- "./TypeChecking/Plpgsql.ag"(line 23, column 9)- _tpe =- {-# LINE 23 "./TypeChecking/Plpgsql.ag" #-}- do- let fromType = getTypeAnnotation _valueIannotatedTree- toType <- libLookupID _lhsIlib target_- dependsOnRTpe [getTypeAnnotation _valueIannotatedTree, toType] $ do- checkAssignmentValid _lhsIcat fromType toType- return $ Pseudo Void- {-# LINE 9959 "AstInternal.hs" #-}- -- "./TypeChecking/Plpgsql.ag"(line 30, column 9)- _backTree =- {-# LINE 30 "./TypeChecking/Plpgsql.ag" #-}- Assignment ann_ target_ _valueIannotatedTree- {-# LINE 9964 "AstInternal.hs" #-}- -- "./TypeChecking/Plpgsql.ag"(line 31, column 9)- _catUpdates =- {-# LINE 31 "./TypeChecking/Plpgsql.ag" #-}- []- {-# LINE 9969 "AstInternal.hs" #-}- -- "./TypeChecking/Plpgsql.ag"(line 32, column 9)- _statementType =- {-# LINE 32 "./TypeChecking/Plpgsql.ag" #-}- []- {-# LINE 9974 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Assignment ann_ target_ _valueIannotatedTree- {-# LINE 9979 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Assignment ann_ target_ _valueIoriginalTree- {-# LINE 9984 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 9989 "AstInternal.hs" #-}- -- copy rule (down)- _valueOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 9994 "AstInternal.hs" #-}- -- copy rule (down)- _valueOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 9999 "AstInternal.hs" #-}- ( _valueIannotatedTree,_valueIliftedColumnName,_valueIoriginalTree) =- (value_ _valueOcat _valueOlib )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_CaseStatement :: Annotation ->- T_Expression ->- T_ExpressionListStatementListPairList ->- T_StatementList ->- T_Statement -sem_Statement_CaseStatement ann_ val_ cases_ els_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _elsOcatUpdates :: ([CatalogUpdate])- _elsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: Statement- _lhsOoriginalTree :: Statement- _valOcat :: Catalog- _valOlib :: LocalIdentifierBindings- _casesOcat :: Catalog- _casesOlib :: LocalIdentifierBindings- _elsOcat :: Catalog- _elsOlib :: LocalIdentifierBindings- _valIannotatedTree :: Expression- _valIliftedColumnName :: String- _valIoriginalTree :: Expression- _casesIannotatedTree :: ExpressionListStatementListPairList- _casesIoriginalTree :: ExpressionListStatementListPairList- _elsIannotatedTree :: StatementList- _elsIoriginalTree :: StatementList- _elsIproducedCat :: Catalog- _elsIproducedLib :: LocalIdentifierBindings- -- "./TypeChecking/Statements.ag"(line 89, column 9)- _lhsOcatUpdates =- {-# LINE 89 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 10037 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 90, column 9)- _lhsOlibUpdates =- {-# LINE 90 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 10042 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 106, column 9)- _elsOcatUpdates =- {-# LINE 106 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 10047 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 107, column 9)- _elsOlibUpdates =- {-# LINE 107 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 10052 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- CaseStatement ann_ _valIannotatedTree _casesIannotatedTree _elsIannotatedTree- {-# LINE 10057 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- CaseStatement ann_ _valIoriginalTree _casesIoriginalTree _elsIoriginalTree- {-# LINE 10062 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 10067 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 10072 "AstInternal.hs" #-}- -- copy rule (down)- _valOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 10077 "AstInternal.hs" #-}- -- copy rule (down)- _valOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 10082 "AstInternal.hs" #-}- -- copy rule (down)- _casesOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 10087 "AstInternal.hs" #-}- -- copy rule (down)- _casesOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 10092 "AstInternal.hs" #-}- -- copy rule (down)- _elsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 10097 "AstInternal.hs" #-}- -- copy rule (down)- _elsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 10102 "AstInternal.hs" #-}- ( _valIannotatedTree,_valIliftedColumnName,_valIoriginalTree) =- (val_ _valOcat _valOlib )- ( _casesIannotatedTree,_casesIoriginalTree) =- (cases_ _casesOcat _casesOlib )- ( _elsIannotatedTree,_elsIoriginalTree,_elsIproducedCat,_elsIproducedLib) =- (els_ _elsOcat _elsOcatUpdates _elsOlib _elsOlibUpdates )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_ContinueStatement :: Annotation ->- T_Statement -sem_Statement_ContinueStatement ann_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: Statement- _lhsOoriginalTree :: Statement- -- "./TypeChecking/Statements.ag"(line 89, column 9)- _lhsOcatUpdates =- {-# LINE 89 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 10124 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 90, column 9)- _lhsOlibUpdates =- {-# LINE 90 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 10129 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- ContinueStatement ann_- {-# LINE 10134 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- ContinueStatement ann_- {-# LINE 10139 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 10144 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 10149 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_Copy :: Annotation ->- String ->- T_StringList ->- T_CopySource ->- T_Statement -sem_Statement_Copy ann_ table_ targetCols_ source_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: Statement- _lhsOoriginalTree :: Statement- _targetColsOcat :: Catalog- _targetColsOlib :: LocalIdentifierBindings- _sourceOcat :: Catalog- _sourceOlib :: LocalIdentifierBindings- _targetColsIannotatedTree :: StringList- _targetColsIoriginalTree :: StringList- _targetColsIstrings :: ([String])- _sourceIannotatedTree :: CopySource- _sourceIoriginalTree :: CopySource- -- "./TypeChecking/Statements.ag"(line 89, column 9)- _lhsOcatUpdates =- {-# LINE 89 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 10177 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 90, column 9)- _lhsOlibUpdates =- {-# LINE 90 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 10182 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Copy ann_ table_ _targetColsIannotatedTree _sourceIannotatedTree- {-# LINE 10187 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Copy ann_ table_ _targetColsIoriginalTree _sourceIoriginalTree- {-# LINE 10192 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 10197 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 10202 "AstInternal.hs" #-}- -- copy rule (down)- _targetColsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 10207 "AstInternal.hs" #-}- -- copy rule (down)- _targetColsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 10212 "AstInternal.hs" #-}- -- copy rule (down)- _sourceOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 10217 "AstInternal.hs" #-}- -- copy rule (down)- _sourceOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 10222 "AstInternal.hs" #-}- ( _targetColsIannotatedTree,_targetColsIoriginalTree,_targetColsIstrings) =- (targetCols_ _targetColsOcat _targetColsOlib )- ( _sourceIannotatedTree,_sourceIoriginalTree) =- (source_ _sourceOcat _sourceOlib )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_CopyData :: Annotation ->- String ->- T_Statement -sem_Statement_CopyData ann_ insData_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: Statement- _lhsOoriginalTree :: Statement- -- "./TypeChecking/Statements.ag"(line 89, column 9)- _lhsOcatUpdates =- {-# LINE 89 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 10243 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 90, column 9)- _lhsOlibUpdates =- {-# LINE 90 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 10248 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- CopyData ann_ insData_- {-# LINE 10253 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- CopyData ann_ insData_- {-# LINE 10258 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 10263 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 10268 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_CreateDomain :: Annotation ->- String ->- T_TypeName ->- String ->- T_MaybeBoolExpression ->- T_Statement -sem_Statement_CreateDomain ann_ name_ typ_ checkName_ check_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOannotatedTree :: Statement- _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _tpe :: (Either [TypeError] Type)- _catUpdates :: ([CatalogUpdate])- _checkOlib :: LocalIdentifierBindings- _lhsOoriginalTree :: Statement- _typOcat :: Catalog- _typOlib :: LocalIdentifierBindings- _checkOcat :: Catalog- _typIannotatedTree :: TypeName- _typInamedType :: Type- _typIoriginalTree :: TypeName- _checkIannotatedTree :: MaybeBoolExpression- _checkIoriginalTree :: MaybeBoolExpression- -- "./TypeChecking/Statements.ag"(line 61, column 9)- _lhsOannotatedTree =- {-# LINE 61 "./TypeChecking/Statements.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ Just (map StatementTypeA _statementType ++- [CatUpdates _catUpdates ])- {-# LINE 10303 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 67, column 9)- _lhsOcatUpdates =- {-# LINE 67 "./TypeChecking/Statements.ag" #-}- _catUpdates- {-# LINE 10308 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 68, column 9)- _lhsOlibUpdates =- {-# LINE 68 "./TypeChecking/Statements.ag" #-}- _libUpdates- {-# LINE 10313 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 73, column 9)- _libUpdates =- {-# LINE 73 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 10318 "AstInternal.hs" #-}- -- "./TypeChecking/MiscCreates.ag"(line 64, column 9)- _tpe =- {-# LINE 64 "./TypeChecking/MiscCreates.ag" #-}- Right $ Pseudo Void- {-# LINE 10323 "AstInternal.hs" #-}- -- "./TypeChecking/MiscCreates.ag"(line 65, column 9)- _backTree =- {-# LINE 65 "./TypeChecking/MiscCreates.ag" #-}- CreateDomain ann_ name_ _typIannotatedTree checkName_ _checkIannotatedTree- {-# LINE 10328 "AstInternal.hs" #-}- -- "./TypeChecking/MiscCreates.ag"(line 66, column 9)- _statementType =- {-# LINE 66 "./TypeChecking/MiscCreates.ag" #-}- []- {-# LINE 10333 "AstInternal.hs" #-}- -- "./TypeChecking/MiscCreates.ag"(line 67, column 9)- _catUpdates =- {-# LINE 67 "./TypeChecking/MiscCreates.ag" #-}- [CatCreateDomain (DomainType name_) _typInamedType]- {-# LINE 10338 "AstInternal.hs" #-}- -- "./TypeChecking/MiscCreates.ag"(line 69, column 9)- _checkOlib =- {-# LINE 69 "./TypeChecking/MiscCreates.ag" #-}- fromRight _lhsIlib $- updateBindings _lhsIlib _lhsIcat- [LibStackIDs [("", [("value", _typInamedType)])]]- {-# LINE 10345 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- CreateDomain ann_ name_ _typIannotatedTree checkName_ _checkIannotatedTree- {-# LINE 10350 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- CreateDomain ann_ name_ _typIoriginalTree checkName_ _checkIoriginalTree- {-# LINE 10355 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 10360 "AstInternal.hs" #-}- -- copy rule (down)- _typOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 10365 "AstInternal.hs" #-}- -- copy rule (down)- _typOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 10370 "AstInternal.hs" #-}- -- copy rule (down)- _checkOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 10375 "AstInternal.hs" #-}- ( _typIannotatedTree,_typInamedType,_typIoriginalTree) =- (typ_ _typOcat _typOlib )- ( _checkIannotatedTree,_checkIoriginalTree) =- (check_ _checkOcat _checkOlib )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_CreateFunction :: Annotation ->- String ->- T_ParamDefList ->- T_TypeName ->- T_Language ->- String ->- T_FnBody ->- T_Volatility ->- T_Statement -sem_Statement_CreateFunction ann_ name_ params_ rettype_ lang_ bodyQuote_ body_ vol_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOannotatedTree :: Statement- _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _tpe :: (Either [TypeError] Type)- _catUpdates :: ([CatalogUpdate])- _bodyOcat :: Catalog- _bodyOlib :: LocalIdentifierBindings- _lhsOoriginalTree :: Statement- _paramsOcat :: Catalog- _paramsOlib :: LocalIdentifierBindings- _rettypeOcat :: Catalog- _rettypeOlib :: LocalIdentifierBindings- _langOcat :: Catalog- _langOlib :: LocalIdentifierBindings- _volOcat :: Catalog- _volOlib :: LocalIdentifierBindings- _paramsIannotatedTree :: ParamDefList- _paramsIoriginalTree :: ParamDefList- _paramsIparams :: ([(String, Type)])- _rettypeIannotatedTree :: TypeName- _rettypeInamedType :: Type- _rettypeIoriginalTree :: TypeName- _langIannotatedTree :: Language- _langIoriginalTree :: Language- _bodyIannotatedTree :: FnBody- _bodyIoriginalTree :: FnBody- _volIannotatedTree :: Volatility- _volIoriginalTree :: Volatility- -- "./TypeChecking/Statements.ag"(line 61, column 9)- _lhsOannotatedTree =- {-# LINE 61 "./TypeChecking/Statements.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ Just (map StatementTypeA _statementType ++- [CatUpdates _catUpdates ])- {-# LINE 10430 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 67, column 9)- _lhsOcatUpdates =- {-# LINE 67 "./TypeChecking/Statements.ag" #-}- _catUpdates- {-# LINE 10435 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 68, column 9)- _lhsOlibUpdates =- {-# LINE 68 "./TypeChecking/Statements.ag" #-}- _libUpdates- {-# LINE 10440 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 73, column 9)- _libUpdates =- {-# LINE 73 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 10445 "AstInternal.hs" #-}- -- "./TypeChecking/CreateFunction.ag"(line 23, column 9)- _tpe =- {-# LINE 23 "./TypeChecking/CreateFunction.ag" #-}- dependsOnRTpe- (_rettypeInamedType : _parameterTypes ) $- Right $ Pseudo Void- {-# LINE 10452 "AstInternal.hs" #-}- -- "./TypeChecking/CreateFunction.ag"(line 26, column 9)- _catUpdates =- {-# LINE 26 "./TypeChecking/CreateFunction.ag" #-}- dependsOn [tpeToT _tpe ] []- [CatCreateFunction FunName- (map toLower name_)- _parameterTypes- _rettypeInamedType- False]- {-# LINE 10462 "AstInternal.hs" #-}- -- "./TypeChecking/CreateFunction.ag"(line 32, column 9)- _parameterTypes =- {-# LINE 32 "./TypeChecking/CreateFunction.ag" #-}- (map snd _paramsIparams)- {-# LINE 10467 "AstInternal.hs" #-}- -- "./TypeChecking/CreateFunction.ag"(line 34, column 9)- _backTree =- {-# LINE 34 "./TypeChecking/CreateFunction.ag" #-}- CreateFunction ann_- name_- _paramsIannotatedTree- _rettypeIannotatedTree- _langIannotatedTree- bodyQuote_- _bodyIannotatedTree- _volIannotatedTree- {-# LINE 10479 "AstInternal.hs" #-}- -- "./TypeChecking/CreateFunction.ag"(line 42, column 9)- _statementType =- {-# LINE 42 "./TypeChecking/CreateFunction.ag" #-}- []- {-# LINE 10484 "AstInternal.hs" #-}- -- "./TypeChecking/CreateFunction.ag"(line 43, column 9)- _bodyOcat =- {-# LINE 43 "./TypeChecking/CreateFunction.ag" #-}- _lhsIinProducedCat- {-# LINE 10489 "AstInternal.hs" #-}- -- "./TypeChecking/CreateFunction.ag"(line 99, column 9)- _bodyOlib =- {-# LINE 99 "./TypeChecking/CreateFunction.ag" #-}- let p = _paramsIparams- ++ (zip posNames $ map snd _paramsIparams)- in fromRight _lhsIlib $- updateBindings _lhsIlib _lhsIcat- [LibStackIDs [("", p)- ,(name_, _paramsIparams)]]- where- posNames :: [String]- posNames = map (\l -> '$':show l) [1..]- {-# LINE 10502 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- CreateFunction ann_ name_ _paramsIannotatedTree _rettypeIannotatedTree _langIannotatedTree bodyQuote_ _bodyIannotatedTree _volIannotatedTree- {-# LINE 10507 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- CreateFunction ann_ name_ _paramsIoriginalTree _rettypeIoriginalTree _langIoriginalTree bodyQuote_ _bodyIoriginalTree _volIoriginalTree- {-# LINE 10512 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 10517 "AstInternal.hs" #-}- -- copy rule (down)- _paramsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 10522 "AstInternal.hs" #-}- -- copy rule (down)- _paramsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 10527 "AstInternal.hs" #-}- -- copy rule (down)- _rettypeOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 10532 "AstInternal.hs" #-}- -- copy rule (down)- _rettypeOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 10537 "AstInternal.hs" #-}- -- copy rule (down)- _langOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 10542 "AstInternal.hs" #-}- -- copy rule (down)- _langOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 10547 "AstInternal.hs" #-}- -- copy rule (down)- _volOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 10552 "AstInternal.hs" #-}- -- copy rule (down)- _volOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 10557 "AstInternal.hs" #-}- ( _paramsIannotatedTree,_paramsIoriginalTree,_paramsIparams) =- (params_ _paramsOcat _paramsOlib )- ( _rettypeIannotatedTree,_rettypeInamedType,_rettypeIoriginalTree) =- (rettype_ _rettypeOcat _rettypeOlib )- ( _langIannotatedTree,_langIoriginalTree) =- (lang_ _langOcat _langOlib )- ( _bodyIannotatedTree,_bodyIoriginalTree) =- (body_ _bodyOcat _bodyOlib )- ( _volIannotatedTree,_volIoriginalTree) =- (vol_ _volOcat _volOlib )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_CreateLanguage :: Annotation ->- String ->- T_Statement -sem_Statement_CreateLanguage ann_ name_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOannotatedTree :: Statement- _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _tpe :: (Either [TypeError] Type)- _catUpdates :: ([CatalogUpdate])- _lhsOoriginalTree :: Statement- -- "./TypeChecking/Statements.ag"(line 61, column 9)- _lhsOannotatedTree =- {-# LINE 61 "./TypeChecking/Statements.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ Just (map StatementTypeA _statementType ++- [CatUpdates _catUpdates ])- {-# LINE 10590 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 67, column 9)- _lhsOcatUpdates =- {-# LINE 67 "./TypeChecking/Statements.ag" #-}- _catUpdates- {-# LINE 10595 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 68, column 9)- _lhsOlibUpdates =- {-# LINE 68 "./TypeChecking/Statements.ag" #-}- _libUpdates- {-# LINE 10600 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 73, column 9)- _libUpdates =- {-# LINE 73 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 10605 "AstInternal.hs" #-}- -- "./TypeChecking/MiscCreates.ag"(line 75, column 9)- _tpe =- {-# LINE 75 "./TypeChecking/MiscCreates.ag" #-}- Right $ Pseudo Void- {-# LINE 10610 "AstInternal.hs" #-}- -- "./TypeChecking/MiscCreates.ag"(line 76, column 9)- _backTree =- {-# LINE 76 "./TypeChecking/MiscCreates.ag" #-}- CreateLanguage ann_ name_- {-# LINE 10615 "AstInternal.hs" #-}- -- "./TypeChecking/MiscCreates.ag"(line 77, column 9)- _statementType =- {-# LINE 77 "./TypeChecking/MiscCreates.ag" #-}- []- {-# LINE 10620 "AstInternal.hs" #-}- -- "./TypeChecking/MiscCreates.ag"(line 78, column 9)- _catUpdates =- {-# LINE 78 "./TypeChecking/MiscCreates.ag" #-}- [CatCreateFunction FunName "plpgsql_call_handler" [] (Pseudo LanguageHandler) False- ,CatCreateFunction FunName "plpgsql_validator" [ScalarType "oid"] (Pseudo Void) False]- {-# LINE 10626 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- CreateLanguage ann_ name_- {-# LINE 10631 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- CreateLanguage ann_ name_- {-# LINE 10636 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 10641 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_CreateSequence :: Annotation ->- String ->- Integer ->- Integer ->- Integer ->- Integer ->- Integer ->- T_Statement -sem_Statement_CreateSequence ann_ name_ incr_ min_ max_ start_ cache_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: Statement- _lhsOoriginalTree :: Statement- -- "./TypeChecking/Statements.ag"(line 73, column 9)- _libUpdates =- {-# LINE 73 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 10663 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 89, column 9)- _lhsOcatUpdates =- {-# LINE 89 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 10668 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 90, column 9)- _lhsOlibUpdates =- {-# LINE 90 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 10673 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- CreateSequence ann_ name_ incr_ min_ max_ start_ cache_- {-# LINE 10678 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- CreateSequence ann_ name_ incr_ min_ max_ start_ cache_- {-# LINE 10683 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 10688 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 10693 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_CreateTable :: Annotation ->- String ->- T_AttributeDefList ->- T_ConstraintList ->- T_Statement -sem_Statement_CreateTable ann_ name_ atts_ cons_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOannotatedTree :: Statement- _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _tpe :: (Either [TypeError] Type)- _catUpdates :: ([CatalogUpdate])- _attrTypes :: ([Type])- _consOlib :: LocalIdentifierBindings- _lhsOoriginalTree :: Statement- _attsOcat :: Catalog- _attsOlib :: LocalIdentifierBindings- _consOcat :: Catalog- _attsIannotatedTree :: AttributeDefList- _attsIattrs :: ([(String, Type)])- _attsIoriginalTree :: AttributeDefList- _consIannotatedTree :: ConstraintList- _consIoriginalTree :: ConstraintList- -- "./TypeChecking/Statements.ag"(line 61, column 9)- _lhsOannotatedTree =- {-# LINE 61 "./TypeChecking/Statements.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ Just (map StatementTypeA _statementType ++- [CatUpdates _catUpdates ])- {-# LINE 10728 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 67, column 9)- _lhsOcatUpdates =- {-# LINE 67 "./TypeChecking/Statements.ag" #-}- _catUpdates- {-# LINE 10733 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 68, column 9)- _lhsOlibUpdates =- {-# LINE 68 "./TypeChecking/Statements.ag" #-}- _libUpdates- {-# LINE 10738 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 73, column 9)- _libUpdates =- {-# LINE 73 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 10743 "AstInternal.hs" #-}- -- "./TypeChecking/CreateTable.ag"(line 25, column 9)- _tpe =- {-# LINE 25 "./TypeChecking/CreateTable.ag" #-}- dependsOnRTpe _attrTypes $ Right $ Pseudo Void- {-# LINE 10748 "AstInternal.hs" #-}- -- "./TypeChecking/CreateTable.ag"(line 26, column 9)- _catUpdates =- {-# LINE 26 "./TypeChecking/CreateTable.ag" #-}- dependsOn _attrTypes []- [CatCreateTable name_ _attsIattrs defaultSystemColumns]- {-# LINE 10754 "AstInternal.hs" #-}- -- "./TypeChecking/CreateTable.ag"(line 29, column 9)- _attrTypes =- {-# LINE 29 "./TypeChecking/CreateTable.ag" #-}- map snd _attsIattrs- {-# LINE 10759 "AstInternal.hs" #-}- -- "./TypeChecking/CreateTable.ag"(line 31, column 9)- _statementType =- {-# LINE 31 "./TypeChecking/CreateTable.ag" #-}- []- {-# LINE 10764 "AstInternal.hs" #-}- -- "./TypeChecking/CreateTable.ag"(line 32, column 9)- _backTree =- {-# LINE 32 "./TypeChecking/CreateTable.ag" #-}- CreateTable ann_- name_- _attsIannotatedTree- _consIannotatedTree- {-# LINE 10772 "AstInternal.hs" #-}- -- "./TypeChecking/CreateTable.ag"(line 36, column 9)- _consOlib =- {-# LINE 36 "./TypeChecking/CreateTable.ag" #-}- case updateBindings _lhsIlib _lhsIcat- [LibStackIDs [("", _attsIattrs)]] of- Left x -> error $ show x- Right e -> e- {-# LINE 10780 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- CreateTable ann_ name_ _attsIannotatedTree _consIannotatedTree- {-# LINE 10785 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- CreateTable ann_ name_ _attsIoriginalTree _consIoriginalTree- {-# LINE 10790 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 10795 "AstInternal.hs" #-}- -- copy rule (down)- _attsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 10800 "AstInternal.hs" #-}- -- copy rule (down)- _attsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 10805 "AstInternal.hs" #-}- -- copy rule (down)- _consOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 10810 "AstInternal.hs" #-}- ( _attsIannotatedTree,_attsIattrs,_attsIoriginalTree) =- (atts_ _attsOcat _attsOlib )- ( _consIannotatedTree,_consIoriginalTree) =- (cons_ _consOcat _consOlib )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_CreateTableAs :: Annotation ->- String ->- T_SelectExpression ->- T_Statement -sem_Statement_CreateTableAs ann_ name_ expr_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOannotatedTree :: Statement- _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _tpe :: (Either [TypeError] Type)- _catUpdates :: ([CatalogUpdate])- _lhsOoriginalTree :: Statement- _exprOcat :: Catalog- _exprOlib :: LocalIdentifierBindings- _exprIannotatedTree :: SelectExpression- _exprIlibUpdates :: ([LocalIdentifierBindingsUpdate])- _exprIoriginalTree :: SelectExpression- -- "./TypeChecking/Statements.ag"(line 61, column 9)- _lhsOannotatedTree =- {-# LINE 61 "./TypeChecking/Statements.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ Just (map StatementTypeA _statementType ++- [CatUpdates _catUpdates ])- {-# LINE 10843 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 67, column 9)- _lhsOcatUpdates =- {-# LINE 67 "./TypeChecking/Statements.ag" #-}- _catUpdates- {-# LINE 10848 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 68, column 9)- _lhsOlibUpdates =- {-# LINE 68 "./TypeChecking/Statements.ag" #-}- _libUpdates- {-# LINE 10853 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 73, column 9)- _libUpdates =- {-# LINE 73 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 10858 "AstInternal.hs" #-}- -- "./TypeChecking/CreateTable.ag"(line 53, column 9)- _tpe =- {-# LINE 53 "./TypeChecking/CreateTable.ag" #-}- dependsOnRTpe [_selType ] $ do- _attrs- Right _selType- {-# LINE 10865 "AstInternal.hs" #-}- -- "./TypeChecking/CreateTable.ag"(line 57, column 9)- _catUpdates =- {-# LINE 57 "./TypeChecking/CreateTable.ag" #-}- leftToEmpty (\as -> [CatCreateTable name_ as defaultSystemColumns]) $ do- ats <- _attrs- return $ dependsOn (tpeToT _tpe :- (map snd ats)) [] ats- {-# LINE 10873 "AstInternal.hs" #-}- -- "./TypeChecking/CreateTable.ag"(line 63, column 9)- _selType =- {-# LINE 63 "./TypeChecking/CreateTable.ag" #-}- getTypeAnnotation _exprIannotatedTree- {-# LINE 10878 "AstInternal.hs" #-}- -- "./TypeChecking/CreateTable.ag"(line 65, column 9)- _attrs =- {-# LINE 65 "./TypeChecking/CreateTable.ag" #-}- unwrapSetOfComposite _selType- {-# LINE 10883 "AstInternal.hs" #-}- -- "./TypeChecking/CreateTable.ag"(line 67, column 9)- _backTree =- {-# LINE 67 "./TypeChecking/CreateTable.ag" #-}- CreateTableAs ann_ name_ _exprIannotatedTree- {-# LINE 10888 "AstInternal.hs" #-}- -- "./TypeChecking/CreateTable.ag"(line 68, column 9)- _statementType =- {-# LINE 68 "./TypeChecking/CreateTable.ag" #-}- []- {-# LINE 10893 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- CreateTableAs ann_ name_ _exprIannotatedTree- {-# LINE 10898 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- CreateTableAs ann_ name_ _exprIoriginalTree- {-# LINE 10903 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 10908 "AstInternal.hs" #-}- -- copy rule (down)- _exprOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 10913 "AstInternal.hs" #-}- -- copy rule (down)- _exprOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 10918 "AstInternal.hs" #-}- ( _exprIannotatedTree,_exprIlibUpdates,_exprIoriginalTree) =- (expr_ _exprOcat _exprOlib )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_CreateTrigger :: Annotation ->- String ->- T_TriggerWhen ->- ([TriggerEvent]) ->- String ->- T_TriggerFire ->- String ->- ([Expression]) ->- T_Statement -sem_Statement_CreateTrigger ann_ name_ wh_ events_ tbl_ firing_ fnName_ fnArgs_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: Statement- _lhsOoriginalTree :: Statement- _whOcat :: Catalog- _whOlib :: LocalIdentifierBindings- _firingOcat :: Catalog- _firingOlib :: LocalIdentifierBindings- _whIannotatedTree :: TriggerWhen- _whIoriginalTree :: TriggerWhen- _firingIannotatedTree :: TriggerFire- _firingIoriginalTree :: TriggerFire- -- "./TypeChecking/Statements.ag"(line 89, column 9)- _lhsOcatUpdates =- {-# LINE 89 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 10951 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 90, column 9)- _lhsOlibUpdates =- {-# LINE 90 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 10956 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- CreateTrigger ann_ name_ _whIannotatedTree events_ tbl_ _firingIannotatedTree fnName_ fnArgs_- {-# LINE 10961 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- CreateTrigger ann_ name_ _whIoriginalTree events_ tbl_ _firingIoriginalTree fnName_ fnArgs_- {-# LINE 10966 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 10971 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 10976 "AstInternal.hs" #-}- -- copy rule (down)- _whOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 10981 "AstInternal.hs" #-}- -- copy rule (down)- _whOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 10986 "AstInternal.hs" #-}- -- copy rule (down)- _firingOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 10991 "AstInternal.hs" #-}- -- copy rule (down)- _firingOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 10996 "AstInternal.hs" #-}- ( _whIannotatedTree,_whIoriginalTree) =- (wh_ _whOcat _whOlib )- ( _firingIannotatedTree,_firingIoriginalTree) =- (firing_ _firingOcat _firingOlib )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_CreateType :: Annotation ->- String ->- T_TypeAttributeDefList ->- T_Statement -sem_Statement_CreateType ann_ name_ atts_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOannotatedTree :: Statement- _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _tpe :: (Either [TypeError] Type)- _catUpdates :: ([CatalogUpdate])- _lhsOoriginalTree :: Statement- _attsOcat :: Catalog- _attsOlib :: LocalIdentifierBindings- _attsIannotatedTree :: TypeAttributeDefList- _attsIattrs :: ([(String, Type)])- _attsIoriginalTree :: TypeAttributeDefList- -- "./TypeChecking/Statements.ag"(line 61, column 9)- _lhsOannotatedTree =- {-# LINE 61 "./TypeChecking/Statements.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ Just (map StatementTypeA _statementType ++- [CatUpdates _catUpdates ])- {-# LINE 11029 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 67, column 9)- _lhsOcatUpdates =- {-# LINE 67 "./TypeChecking/Statements.ag" #-}- _catUpdates- {-# LINE 11034 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 68, column 9)- _lhsOlibUpdates =- {-# LINE 68 "./TypeChecking/Statements.ag" #-}- _libUpdates- {-# LINE 11039 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 73, column 9)- _libUpdates =- {-# LINE 73 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 11044 "AstInternal.hs" #-}- -- "./TypeChecking/MiscCreates.ag"(line 51, column 9)- _tpe =- {-# LINE 51 "./TypeChecking/MiscCreates.ag" #-}- Right $ Pseudo Void- {-# LINE 11049 "AstInternal.hs" #-}- -- "./TypeChecking/MiscCreates.ag"(line 52, column 9)- _backTree =- {-# LINE 52 "./TypeChecking/MiscCreates.ag" #-}- CreateType ann_ name_ _attsIannotatedTree- {-# LINE 11054 "AstInternal.hs" #-}- -- "./TypeChecking/MiscCreates.ag"(line 53, column 9)- _statementType =- {-# LINE 53 "./TypeChecking/MiscCreates.ag" #-}- []- {-# LINE 11059 "AstInternal.hs" #-}- -- "./TypeChecking/MiscCreates.ag"(line 54, column 9)- _catUpdates =- {-# LINE 54 "./TypeChecking/MiscCreates.ag" #-}- [CatCreateComposite name_ _attsIattrs]- {-# LINE 11064 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- CreateType ann_ name_ _attsIannotatedTree- {-# LINE 11069 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- CreateType ann_ name_ _attsIoriginalTree- {-# LINE 11074 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 11079 "AstInternal.hs" #-}- -- copy rule (down)- _attsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 11084 "AstInternal.hs" #-}- -- copy rule (down)- _attsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 11089 "AstInternal.hs" #-}- ( _attsIannotatedTree,_attsIattrs,_attsIoriginalTree) =- (atts_ _attsOcat _attsOlib )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_CreateView :: Annotation ->- String ->- T_SelectExpression ->- T_Statement -sem_Statement_CreateView ann_ name_ expr_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOannotatedTree :: Statement- _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _tpe :: (Either [TypeError] Type)- _catUpdates :: ([CatalogUpdate])- _lhsOoriginalTree :: Statement- _exprOcat :: Catalog- _exprOlib :: LocalIdentifierBindings- _exprIannotatedTree :: SelectExpression- _exprIlibUpdates :: ([LocalIdentifierBindingsUpdate])- _exprIoriginalTree :: SelectExpression- -- "./TypeChecking/Statements.ag"(line 61, column 9)- _lhsOannotatedTree =- {-# LINE 61 "./TypeChecking/Statements.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ Just (map StatementTypeA _statementType ++- [CatUpdates _catUpdates ])- {-# LINE 11120 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 67, column 9)- _lhsOcatUpdates =- {-# LINE 67 "./TypeChecking/Statements.ag" #-}- _catUpdates- {-# LINE 11125 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 68, column 9)- _lhsOlibUpdates =- {-# LINE 68 "./TypeChecking/Statements.ag" #-}- _libUpdates- {-# LINE 11130 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 73, column 9)- _libUpdates =- {-# LINE 73 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 11135 "AstInternal.hs" #-}- -- "./TypeChecking/MiscCreates.ag"(line 15, column 9)- _tpe =- {-# LINE 15 "./TypeChecking/MiscCreates.ag" #-}- dependsOnRTpe [getTypeAnnotation _exprIannotatedTree] $- Right $ Pseudo Void- {-# LINE 11141 "AstInternal.hs" #-}- -- "./TypeChecking/MiscCreates.ag"(line 17, column 9)- _backTree =- {-# LINE 17 "./TypeChecking/MiscCreates.ag" #-}- CreateView ann_ name_ _exprIannotatedTree- {-# LINE 11146 "AstInternal.hs" #-}- -- "./TypeChecking/MiscCreates.ag"(line 18, column 9)- _attrs =- {-# LINE 18 "./TypeChecking/MiscCreates.ag" #-}- case getTypeAnnotation _exprIannotatedTree of- SetOfType (CompositeType c) -> c- _ -> []- {-# LINE 11153 "AstInternal.hs" #-}- -- "./TypeChecking/MiscCreates.ag"(line 21, column 9)- _catUpdates =- {-# LINE 21 "./TypeChecking/MiscCreates.ag" #-}- [CatCreateView name_ _attrs ]- {-# LINE 11158 "AstInternal.hs" #-}- -- "./TypeChecking/MiscCreates.ag"(line 22, column 9)- _statementType =- {-# LINE 22 "./TypeChecking/MiscCreates.ag" #-}- []- {-# LINE 11163 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- CreateView ann_ name_ _exprIannotatedTree- {-# LINE 11168 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- CreateView ann_ name_ _exprIoriginalTree- {-# LINE 11173 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 11178 "AstInternal.hs" #-}- -- copy rule (down)- _exprOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 11183 "AstInternal.hs" #-}- -- copy rule (down)- _exprOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 11188 "AstInternal.hs" #-}- ( _exprIannotatedTree,_exprIlibUpdates,_exprIoriginalTree) =- (expr_ _exprOcat _exprOlib )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_Delete :: Annotation ->- String ->- T_MaybeBoolExpression ->- T_MaybeSelectList ->- T_Statement -sem_Statement_Delete ann_ table_ whr_ returning_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOannotatedTree :: Statement- _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _tpe :: (Either [TypeError] Type)- _catUpdates :: ([CatalogUpdate])- _whrOlib :: LocalIdentifierBindings- _returningOlib :: LocalIdentifierBindings- _lhsOoriginalTree :: Statement- _whrOcat :: Catalog- _returningOcat :: Catalog- _whrIannotatedTree :: MaybeBoolExpression- _whrIoriginalTree :: MaybeBoolExpression- _returningIannotatedTree :: MaybeSelectList- _returningIlistType :: (Maybe [(String,Type)])- _returningIoriginalTree :: MaybeSelectList- -- "./TypeChecking/Statements.ag"(line 61, column 9)- _lhsOannotatedTree =- {-# LINE 61 "./TypeChecking/Statements.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ Just (map StatementTypeA _statementType ++- [CatUpdates _catUpdates ])- {-# LINE 11224 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 67, column 9)- _lhsOcatUpdates =- {-# LINE 67 "./TypeChecking/Statements.ag" #-}- _catUpdates- {-# LINE 11229 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 68, column 9)- _lhsOlibUpdates =- {-# LINE 68 "./TypeChecking/Statements.ag" #-}- _libUpdates- {-# LINE 11234 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 73, column 9)- _libUpdates =- {-# LINE 73 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 11239 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 180, column 9)- _tpe =- {-# LINE 180 "./TypeChecking/Dml.ag" #-}- checkRelationExists _lhsIcat table_ >>- Right (Pseudo Void)- {-# LINE 11245 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 183, column 9)- _statementType =- {-# LINE 183 "./TypeChecking/Dml.ag" #-}- [StatementType (getPlaceholderTypes _whrIannotatedTree)- (fromMaybe [] _returningIlistType)]- {-# LINE 11251 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 186, column 9)- _backTree =- {-# LINE 186 "./TypeChecking/Dml.ag" #-}- Delete ann_ table_ _whrIannotatedTree _returningIannotatedTree- {-# LINE 11256 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 187, column 9)- _catUpdates =- {-# LINE 187 "./TypeChecking/Dml.ag" #-}- []- {-# LINE 11261 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 192, column 9)- _lib =- {-# LINE 192 "./TypeChecking/Dml.ag" #-}- fromRight _lhsIlib $ do- columnTypes <- catCompositeAttrs _lhsIcat relationComposites table_- updateBindings _lhsIlib _lhsIcat [LibStackIDs [("", columnTypes)]]- {-# LINE 11268 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 196, column 9)- _whrOlib =- {-# LINE 196 "./TypeChecking/Dml.ag" #-}- _lib- {-# LINE 11273 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 197, column 9)- _returningOlib =- {-# LINE 197 "./TypeChecking/Dml.ag" #-}- _lib- {-# LINE 11278 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Delete ann_ table_ _whrIannotatedTree _returningIannotatedTree- {-# LINE 11283 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Delete ann_ table_ _whrIoriginalTree _returningIoriginalTree- {-# LINE 11288 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 11293 "AstInternal.hs" #-}- -- copy rule (down)- _whrOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 11298 "AstInternal.hs" #-}- -- copy rule (down)- _returningOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 11303 "AstInternal.hs" #-}- ( _whrIannotatedTree,_whrIoriginalTree) =- (whr_ _whrOcat _whrOlib )- ( _returningIannotatedTree,_returningIlistType,_returningIoriginalTree) =- (returning_ _returningOcat _returningOlib )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_DropFunction :: Annotation ->- T_IfExists ->- T_StringTypeNameListPairList ->- T_Cascade ->- T_Statement -sem_Statement_DropFunction ann_ ifE_ sigs_ cascade_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOannotatedTree :: Statement- _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _tpe :: (Either [TypeError] Type)- _catUpdates :: ([CatalogUpdate])- _lhsOoriginalTree :: Statement- _ifEOcat :: Catalog- _ifEOlib :: LocalIdentifierBindings- _sigsOcat :: Catalog- _sigsOlib :: LocalIdentifierBindings- _cascadeOcat :: Catalog- _cascadeOlib :: LocalIdentifierBindings- _ifEIannotatedTree :: IfExists- _ifEIoriginalTree :: IfExists- _sigsIannotatedTree :: StringTypeNameListPairList- _sigsIfnSigs :: ([(String,[Type])])- _sigsIoriginalTree :: StringTypeNameListPairList- _cascadeIannotatedTree :: Cascade- _cascadeIoriginalTree :: Cascade- -- "./TypeChecking/Statements.ag"(line 61, column 9)- _lhsOannotatedTree =- {-# LINE 61 "./TypeChecking/Statements.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ Just (map StatementTypeA _statementType ++- [CatUpdates _catUpdates ])- {-# LINE 11345 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 67, column 9)- _lhsOcatUpdates =- {-# LINE 67 "./TypeChecking/Statements.ag" #-}- _catUpdates- {-# LINE 11350 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 68, column 9)- _lhsOlibUpdates =- {-# LINE 68 "./TypeChecking/Statements.ag" #-}- _libUpdates- {-# LINE 11355 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 73, column 9)- _libUpdates =- {-# LINE 73 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 11360 "AstInternal.hs" #-}- -- "./TypeChecking/Drops.ag"(line 10, column 9)- _tpe =- {-# LINE 10 "./TypeChecking/Drops.ag" #-}- Right $ Pseudo Void- {-# LINE 11365 "AstInternal.hs" #-}- -- "./TypeChecking/Drops.ag"(line 11, column 9)- _backTree =- {-# LINE 11 "./TypeChecking/Drops.ag" #-}- DropFunction ann_ _ifEIannotatedTree _sigsIannotatedTree _cascadeIannotatedTree- {-# LINE 11370 "AstInternal.hs" #-}- -- "./TypeChecking/Drops.ag"(line 12, column 9)- _catUpdates =- {-# LINE 12 "./TypeChecking/Drops.ag" #-}- flip map _sigsIfnSigs $ \(nm,args) ->- CatDropFunction ifE nm args- where- ifE = _ifEIannotatedTree == IfExists- {-# LINE 11378 "AstInternal.hs" #-}- -- "./TypeChecking/Drops.ag"(line 16, column 9)- _statementType =- {-# LINE 16 "./TypeChecking/Drops.ag" #-}- []- {-# LINE 11383 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- DropFunction ann_ _ifEIannotatedTree _sigsIannotatedTree _cascadeIannotatedTree- {-# LINE 11388 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- DropFunction ann_ _ifEIoriginalTree _sigsIoriginalTree _cascadeIoriginalTree- {-# LINE 11393 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 11398 "AstInternal.hs" #-}- -- copy rule (down)- _ifEOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 11403 "AstInternal.hs" #-}- -- copy rule (down)- _ifEOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 11408 "AstInternal.hs" #-}- -- copy rule (down)- _sigsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 11413 "AstInternal.hs" #-}- -- copy rule (down)- _sigsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 11418 "AstInternal.hs" #-}- -- copy rule (down)- _cascadeOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 11423 "AstInternal.hs" #-}- -- copy rule (down)- _cascadeOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 11428 "AstInternal.hs" #-}- ( _ifEIannotatedTree,_ifEIoriginalTree) =- (ifE_ _ifEOcat _ifEOlib )- ( _sigsIannotatedTree,_sigsIfnSigs,_sigsIoriginalTree) =- (sigs_ _sigsOcat _sigsOlib )- ( _cascadeIannotatedTree,_cascadeIoriginalTree) =- (cascade_ _cascadeOcat _cascadeOlib )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_DropSomething :: Annotation ->- T_DropType ->- T_IfExists ->- T_StringList ->- T_Cascade ->- T_Statement -sem_Statement_DropSomething ann_ dropType_ ifE_ names_ cascade_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: Statement- _lhsOoriginalTree :: Statement- _dropTypeOcat :: Catalog- _dropTypeOlib :: LocalIdentifierBindings- _ifEOcat :: Catalog- _ifEOlib :: LocalIdentifierBindings- _namesOcat :: Catalog- _namesOlib :: LocalIdentifierBindings- _cascadeOcat :: Catalog- _cascadeOlib :: LocalIdentifierBindings- _dropTypeIannotatedTree :: DropType- _dropTypeIoriginalTree :: DropType- _ifEIannotatedTree :: IfExists- _ifEIoriginalTree :: IfExists- _namesIannotatedTree :: StringList- _namesIoriginalTree :: StringList- _namesIstrings :: ([String])- _cascadeIannotatedTree :: Cascade- _cascadeIoriginalTree :: Cascade- -- "./TypeChecking/Statements.ag"(line 89, column 9)- _lhsOcatUpdates =- {-# LINE 89 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 11471 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 90, column 9)- _lhsOlibUpdates =- {-# LINE 90 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 11476 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- DropSomething ann_ _dropTypeIannotatedTree _ifEIannotatedTree _namesIannotatedTree _cascadeIannotatedTree- {-# LINE 11481 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- DropSomething ann_ _dropTypeIoriginalTree _ifEIoriginalTree _namesIoriginalTree _cascadeIoriginalTree- {-# LINE 11486 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 11491 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 11496 "AstInternal.hs" #-}- -- copy rule (down)- _dropTypeOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 11501 "AstInternal.hs" #-}- -- copy rule (down)- _dropTypeOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 11506 "AstInternal.hs" #-}- -- copy rule (down)- _ifEOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 11511 "AstInternal.hs" #-}- -- copy rule (down)- _ifEOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 11516 "AstInternal.hs" #-}- -- copy rule (down)- _namesOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 11521 "AstInternal.hs" #-}- -- copy rule (down)- _namesOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 11526 "AstInternal.hs" #-}- -- copy rule (down)- _cascadeOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 11531 "AstInternal.hs" #-}- -- copy rule (down)- _cascadeOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 11536 "AstInternal.hs" #-}- ( _dropTypeIannotatedTree,_dropTypeIoriginalTree) =- (dropType_ _dropTypeOcat _dropTypeOlib )- ( _ifEIannotatedTree,_ifEIoriginalTree) =- (ifE_ _ifEOcat _ifEOlib )- ( _namesIannotatedTree,_namesIoriginalTree,_namesIstrings) =- (names_ _namesOcat _namesOlib )- ( _cascadeIannotatedTree,_cascadeIoriginalTree) =- (cascade_ _cascadeOcat _cascadeOlib )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_Execute :: Annotation ->- T_Expression ->- T_Statement -sem_Statement_Execute ann_ expr_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: Statement- _lhsOoriginalTree :: Statement- _exprOcat :: Catalog- _exprOlib :: LocalIdentifierBindings- _exprIannotatedTree :: Expression- _exprIliftedColumnName :: String- _exprIoriginalTree :: Expression- -- "./TypeChecking/Statements.ag"(line 89, column 9)- _lhsOcatUpdates =- {-# LINE 89 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 11566 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 90, column 9)- _lhsOlibUpdates =- {-# LINE 90 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 11571 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Execute ann_ _exprIannotatedTree- {-# LINE 11576 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Execute ann_ _exprIoriginalTree- {-# LINE 11581 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 11586 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 11591 "AstInternal.hs" #-}- -- copy rule (down)- _exprOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 11596 "AstInternal.hs" #-}- -- copy rule (down)- _exprOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 11601 "AstInternal.hs" #-}- ( _exprIannotatedTree,_exprIliftedColumnName,_exprIoriginalTree) =- (expr_ _exprOcat _exprOlib )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_ExecuteInto :: Annotation ->- T_Expression ->- T_StringList ->- T_Statement -sem_Statement_ExecuteInto ann_ expr_ targets_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: Statement- _lhsOoriginalTree :: Statement- _exprOcat :: Catalog- _exprOlib :: LocalIdentifierBindings- _targetsOcat :: Catalog- _targetsOlib :: LocalIdentifierBindings- _exprIannotatedTree :: Expression- _exprIliftedColumnName :: String- _exprIoriginalTree :: Expression- _targetsIannotatedTree :: StringList- _targetsIoriginalTree :: StringList- _targetsIstrings :: ([String])- -- "./TypeChecking/Statements.ag"(line 89, column 9)- _lhsOcatUpdates =- {-# LINE 89 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 11631 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 90, column 9)- _lhsOlibUpdates =- {-# LINE 90 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 11636 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- ExecuteInto ann_ _exprIannotatedTree _targetsIannotatedTree- {-# LINE 11641 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- ExecuteInto ann_ _exprIoriginalTree _targetsIoriginalTree- {-# LINE 11646 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 11651 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 11656 "AstInternal.hs" #-}- -- copy rule (down)- _exprOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 11661 "AstInternal.hs" #-}- -- copy rule (down)- _exprOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 11666 "AstInternal.hs" #-}- -- copy rule (down)- _targetsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 11671 "AstInternal.hs" #-}- -- copy rule (down)- _targetsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 11676 "AstInternal.hs" #-}- ( _exprIannotatedTree,_exprIliftedColumnName,_exprIoriginalTree) =- (expr_ _exprOcat _exprOlib )- ( _targetsIannotatedTree,_targetsIoriginalTree,_targetsIstrings) =- (targets_ _targetsOcat _targetsOlib )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_ForIntegerStatement :: Annotation ->- String ->- T_Expression ->- T_Expression ->- T_StatementList ->- T_Statement -sem_Statement_ForIntegerStatement ann_ var_ from_ to_ sts_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOannotatedTree :: Statement- _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _stsOcatUpdates :: ([CatalogUpdate])- _stsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _tpe :: (Either [TypeError] Type)- _stsOlib :: LocalIdentifierBindings- _catUpdates :: ([CatalogUpdate])- _lhsOoriginalTree :: Statement- _fromOcat :: Catalog- _fromOlib :: LocalIdentifierBindings- _toOcat :: Catalog- _toOlib :: LocalIdentifierBindings- _stsOcat :: Catalog- _fromIannotatedTree :: Expression- _fromIliftedColumnName :: String- _fromIoriginalTree :: Expression- _toIannotatedTree :: Expression- _toIliftedColumnName :: String- _toIoriginalTree :: Expression- _stsIannotatedTree :: StatementList- _stsIoriginalTree :: StatementList- _stsIproducedCat :: Catalog- _stsIproducedLib :: LocalIdentifierBindings- -- "./TypeChecking/Statements.ag"(line 61, column 9)- _lhsOannotatedTree =- {-# LINE 61 "./TypeChecking/Statements.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ Just (map StatementTypeA _statementType ++- [CatUpdates _catUpdates ])- {-# LINE 11724 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 67, column 9)- _lhsOcatUpdates =- {-# LINE 67 "./TypeChecking/Statements.ag" #-}- _catUpdates- {-# LINE 11729 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 68, column 9)- _lhsOlibUpdates =- {-# LINE 68 "./TypeChecking/Statements.ag" #-}- _libUpdates- {-# LINE 11734 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 73, column 9)- _libUpdates =- {-# LINE 73 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 11739 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 110, column 9)- _stsOcatUpdates =- {-# LINE 110 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 11744 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 111, column 9)- _stsOlibUpdates =- {-# LINE 111 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 11749 "AstInternal.hs" #-}- -- "./TypeChecking/Plpgsql.ag"(line 36, column 9)- _varTypeE =- {-# LINE 36 "./TypeChecking/Plpgsql.ag" #-}- libLookupID _lhsIlib var_- {-# LINE 11754 "AstInternal.hs" #-}- -- "./TypeChecking/Plpgsql.ag"(line 37, column 9)- _tpe =- {-# LINE 37 "./TypeChecking/Plpgsql.ag" #-}- do- let fromType = getTypeAnnotation _fromIannotatedTree- toType = getTypeAnnotation _toIannotatedTree- dependsOnRTpe [fromType,toType] $ do- errorWhen (fromType /= toType) [FromToTypesNotSame fromType toType]- case _varTypeE of- Right t -> checkAssignmentValid _lhsIcat fromType t- Left _ -> return ()- return $ Pseudo Void- {-# LINE 11767 "AstInternal.hs" #-}- -- "./TypeChecking/Plpgsql.ag"(line 48, column 9)- _stsOlib =- {-# LINE 48 "./TypeChecking/Plpgsql.ag" #-}- case _varTypeE of- Left [UnrecognisedIdentifier var_] ->- fromRight _lhsIlib $- updateBindings _lhsIlib _lhsIcat- [LibStackIDs [("", [(var_,getTypeAnnotation _fromIannotatedTree)])]]- _ -> _lhsIlib- {-# LINE 11777 "AstInternal.hs" #-}- -- "./TypeChecking/Plpgsql.ag"(line 56, column 9)- _backTree =- {-# LINE 56 "./TypeChecking/Plpgsql.ag" #-}- ForIntegerStatement ann_ var_ _fromIannotatedTree _toIannotatedTree _stsIannotatedTree- {-# LINE 11782 "AstInternal.hs" #-}- -- "./TypeChecking/Plpgsql.ag"(line 57, column 9)- _catUpdates =- {-# LINE 57 "./TypeChecking/Plpgsql.ag" #-}- []- {-# LINE 11787 "AstInternal.hs" #-}- -- "./TypeChecking/Plpgsql.ag"(line 58, column 9)- _statementType =- {-# LINE 58 "./TypeChecking/Plpgsql.ag" #-}- []- {-# LINE 11792 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- ForIntegerStatement ann_ var_ _fromIannotatedTree _toIannotatedTree _stsIannotatedTree- {-# LINE 11797 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- ForIntegerStatement ann_ var_ _fromIoriginalTree _toIoriginalTree _stsIoriginalTree- {-# LINE 11802 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 11807 "AstInternal.hs" #-}- -- copy rule (down)- _fromOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 11812 "AstInternal.hs" #-}- -- copy rule (down)- _fromOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 11817 "AstInternal.hs" #-}- -- copy rule (down)- _toOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 11822 "AstInternal.hs" #-}- -- copy rule (down)- _toOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 11827 "AstInternal.hs" #-}- -- copy rule (down)- _stsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 11832 "AstInternal.hs" #-}- ( _fromIannotatedTree,_fromIliftedColumnName,_fromIoriginalTree) =- (from_ _fromOcat _fromOlib )- ( _toIannotatedTree,_toIliftedColumnName,_toIoriginalTree) =- (to_ _toOcat _toOlib )- ( _stsIannotatedTree,_stsIoriginalTree,_stsIproducedCat,_stsIproducedLib) =- (sts_ _stsOcat _stsOcatUpdates _stsOlib _stsOlibUpdates )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_ForSelectStatement :: Annotation ->- String ->- T_SelectExpression ->- T_StatementList ->- T_Statement -sem_Statement_ForSelectStatement ann_ var_ sel_ sts_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOannotatedTree :: Statement- _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _stsOcatUpdates :: ([CatalogUpdate])- _stsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _tpe :: (Either [TypeError] Type)- _stsOlib :: LocalIdentifierBindings- _catUpdates :: ([CatalogUpdate])- _lhsOoriginalTree :: Statement- _selOcat :: Catalog- _selOlib :: LocalIdentifierBindings- _stsOcat :: Catalog- _selIannotatedTree :: SelectExpression- _selIlibUpdates :: ([LocalIdentifierBindingsUpdate])- _selIoriginalTree :: SelectExpression- _stsIannotatedTree :: StatementList- _stsIoriginalTree :: StatementList- _stsIproducedCat :: Catalog- _stsIproducedLib :: LocalIdentifierBindings- -- "./TypeChecking/Statements.ag"(line 61, column 9)- _lhsOannotatedTree =- {-# LINE 61 "./TypeChecking/Statements.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ Just (map StatementTypeA _statementType ++- [CatUpdates _catUpdates ])- {-# LINE 11876 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 67, column 9)- _lhsOcatUpdates =- {-# LINE 67 "./TypeChecking/Statements.ag" #-}- _catUpdates- {-# LINE 11881 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 68, column 9)- _lhsOlibUpdates =- {-# LINE 68 "./TypeChecking/Statements.ag" #-}- _libUpdates- {-# LINE 11886 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 73, column 9)- _libUpdates =- {-# LINE 73 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 11891 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 110, column 9)- _stsOcatUpdates =- {-# LINE 110 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 11896 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 111, column 9)- _stsOlibUpdates =- {-# LINE 111 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 11901 "AstInternal.hs" #-}- -- "./TypeChecking/Plpgsql.ag"(line 63, column 9)- _selType =- {-# LINE 63 "./TypeChecking/Plpgsql.ag" #-}- getTypeAnnotation _selIannotatedTree- {-# LINE 11906 "AstInternal.hs" #-}- -- "./TypeChecking/Plpgsql.ag"(line 64, column 9)- _tpe =- {-# LINE 64 "./TypeChecking/Plpgsql.ag" #-}- do- dependsOnRTpe [_selType ] $ do- toType <- libLookupID _lhsIlib var_- dependsOnRTpe [toType] $ do- checkAssignmentValid _lhsIcat _selType toType- return $ Pseudo Void- {-# LINE 11916 "AstInternal.hs" #-}- -- "./TypeChecking/Plpgsql.ag"(line 75, column 9)- _stsOlib =- {-# LINE 75 "./TypeChecking/Plpgsql.ag" #-}- if okToUpdate- then fromRight _lhsIlib $- updateBindings _lhsIlib _lhsIcat [LibStackIDs [("", [(var_,_selType )])]]- else _lhsIlib- where- okToUpdate = isRight _tpe && _selType /= TypeCheckFailed- {-# LINE 11926 "AstInternal.hs" #-}- -- "./TypeChecking/Plpgsql.ag"(line 84, column 9)- _backTree =- {-# LINE 84 "./TypeChecking/Plpgsql.ag" #-}- ForSelectStatement ann_ var_ _selIannotatedTree _stsIannotatedTree- {-# LINE 11931 "AstInternal.hs" #-}- -- "./TypeChecking/Plpgsql.ag"(line 85, column 9)- _catUpdates =- {-# LINE 85 "./TypeChecking/Plpgsql.ag" #-}- []- {-# LINE 11936 "AstInternal.hs" #-}- -- "./TypeChecking/Plpgsql.ag"(line 86, column 9)- _statementType =- {-# LINE 86 "./TypeChecking/Plpgsql.ag" #-}- []- {-# LINE 11941 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- ForSelectStatement ann_ var_ _selIannotatedTree _stsIannotatedTree- {-# LINE 11946 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- ForSelectStatement ann_ var_ _selIoriginalTree _stsIoriginalTree- {-# LINE 11951 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 11956 "AstInternal.hs" #-}- -- copy rule (down)- _selOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 11961 "AstInternal.hs" #-}- -- copy rule (down)- _selOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 11966 "AstInternal.hs" #-}- -- copy rule (down)- _stsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 11971 "AstInternal.hs" #-}- ( _selIannotatedTree,_selIlibUpdates,_selIoriginalTree) =- (sel_ _selOcat _selOlib )- ( _stsIannotatedTree,_stsIoriginalTree,_stsIproducedCat,_stsIproducedLib) =- (sts_ _stsOcat _stsOcatUpdates _stsOlib _stsOlibUpdates )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_If :: Annotation ->- T_ExpressionStatementListPairList ->- T_StatementList ->- T_Statement -sem_Statement_If ann_ cases_ els_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _elsOcatUpdates :: ([CatalogUpdate])- _elsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: Statement- _lhsOoriginalTree :: Statement- _casesOcat :: Catalog- _casesOlib :: LocalIdentifierBindings- _elsOcat :: Catalog- _elsOlib :: LocalIdentifierBindings- _casesIannotatedTree :: ExpressionStatementListPairList- _casesIoriginalTree :: ExpressionStatementListPairList- _elsIannotatedTree :: StatementList- _elsIoriginalTree :: StatementList- _elsIproducedCat :: Catalog- _elsIproducedLib :: LocalIdentifierBindings- -- "./TypeChecking/Statements.ag"(line 89, column 9)- _lhsOcatUpdates =- {-# LINE 89 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12005 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 90, column 9)- _lhsOlibUpdates =- {-# LINE 90 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12010 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 106, column 9)- _elsOcatUpdates =- {-# LINE 106 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12015 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 107, column 9)- _elsOlibUpdates =- {-# LINE 107 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12020 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- If ann_ _casesIannotatedTree _elsIannotatedTree- {-# LINE 12025 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- If ann_ _casesIoriginalTree _elsIoriginalTree- {-# LINE 12030 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 12035 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 12040 "AstInternal.hs" #-}- -- copy rule (down)- _casesOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 12045 "AstInternal.hs" #-}- -- copy rule (down)- _casesOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 12050 "AstInternal.hs" #-}- -- copy rule (down)- _elsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 12055 "AstInternal.hs" #-}- -- copy rule (down)- _elsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 12060 "AstInternal.hs" #-}- ( _casesIannotatedTree,_casesIoriginalTree) =- (cases_ _casesOcat _casesOlib )- ( _elsIannotatedTree,_elsIoriginalTree,_elsIproducedCat,_elsIproducedLib) =- (els_ _elsOcat _elsOcatUpdates _elsOlib _elsOlibUpdates )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_Insert :: Annotation ->- String ->- T_StringList ->- T_SelectExpression ->- T_MaybeSelectList ->- T_Statement -sem_Statement_Insert ann_ table_ targetCols_ insData_ returning_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOannotatedTree :: Statement- _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _tpe :: (Either [TypeError] Type)- _catUpdates :: ([CatalogUpdate])- _returningOlib :: LocalIdentifierBindings- _lhsOoriginalTree :: Statement- _targetColsOcat :: Catalog- _targetColsOlib :: LocalIdentifierBindings- _insDataOcat :: Catalog- _insDataOlib :: LocalIdentifierBindings- _returningOcat :: Catalog- _targetColsIannotatedTree :: StringList- _targetColsIoriginalTree :: StringList- _targetColsIstrings :: ([String])- _insDataIannotatedTree :: SelectExpression- _insDataIlibUpdates :: ([LocalIdentifierBindingsUpdate])- _insDataIoriginalTree :: SelectExpression- _returningIannotatedTree :: MaybeSelectList- _returningIlistType :: (Maybe [(String,Type)])- _returningIoriginalTree :: MaybeSelectList- -- "./TypeChecking/Statements.ag"(line 61, column 9)- _lhsOannotatedTree =- {-# LINE 61 "./TypeChecking/Statements.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ Just (map StatementTypeA _statementType ++- [CatUpdates _catUpdates ])- {-# LINE 12105 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 67, column 9)- _lhsOcatUpdates =- {-# LINE 67 "./TypeChecking/Statements.ag" #-}- _catUpdates- {-# LINE 12110 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 68, column 9)- _lhsOlibUpdates =- {-# LINE 68 "./TypeChecking/Statements.ag" #-}- _libUpdates- {-# LINE 12115 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 73, column 9)- _libUpdates =- {-# LINE 73 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12120 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 18, column 9)- _tpe =- {-# LINE 18 "./TypeChecking/Dml.ag" #-}- dependsOnRTpe [getTypeAnnotation _insDataIannotatedTree] $ do- _columnTypes- Right $ Pseudo Void- {-# LINE 12127 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 22, column 9)- _statementType =- {-# LINE 22 "./TypeChecking/Dml.ag" #-}- leftToEmpty (\ct -> [StatementType (getPlaceholderTypes _insDataAddedInferredTypes ) (fromMaybe [] _returningIlistType)]) _columnTypes- {-# LINE 12132 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 25, column 9)- _columnTypes =- {-# LINE 25 "./TypeChecking/Dml.ag" #-}- do- tys <- unwrapSetOfComposite $- getTypeAnnotation _insDataIannotatedTree- checkColumnConsistency _lhsIcat- table_- _targetColsIstrings- tys- {-# LINE 12143 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 33, column 9)- _insDataAddedInferredTypes =- {-# LINE 33 "./TypeChecking/Dml.ag" #-}- case _insDataIannotatedTree of- Values ann [exl] ->- let fargs = map snd (fromRight [] _columnTypes ) ++ repeat TypeCheckFailed- newExl = map (\(ex,ty) -> updateAnnotation (++ [InferredType ty]) ex) $ zip exl fargs- in Values ann [newExl]- x -> x- {-# LINE 12153 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 41, column 9)- _backTree =- {-# LINE 41 "./TypeChecking/Dml.ag" #-}- Insert ann_ table_ _targetColsIannotatedTree- _insDataAddedInferredTypes _returningIannotatedTree- {-# LINE 12159 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 43, column 9)- _catUpdates =- {-# LINE 43 "./TypeChecking/Dml.ag" #-}- []- {-# LINE 12164 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 49, column 9)- _returningOlib =- {-# LINE 49 "./TypeChecking/Dml.ag" #-}- fromRight _lhsIlib $ do- atts <- catCompositeAttrs _lhsIcat relationComposites table_- updateBindings _lhsIlib _lhsIcat [LibStackIDs [("", atts)]]- {-# LINE 12171 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Insert ann_ table_ _targetColsIannotatedTree _insDataIannotatedTree _returningIannotatedTree- {-# LINE 12176 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Insert ann_ table_ _targetColsIoriginalTree _insDataIoriginalTree _returningIoriginalTree- {-# LINE 12181 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 12186 "AstInternal.hs" #-}- -- copy rule (down)- _targetColsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 12191 "AstInternal.hs" #-}- -- copy rule (down)- _targetColsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 12196 "AstInternal.hs" #-}- -- copy rule (down)- _insDataOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 12201 "AstInternal.hs" #-}- -- copy rule (down)- _insDataOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 12206 "AstInternal.hs" #-}- -- copy rule (down)- _returningOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 12211 "AstInternal.hs" #-}- ( _targetColsIannotatedTree,_targetColsIoriginalTree,_targetColsIstrings) =- (targetCols_ _targetColsOcat _targetColsOlib )- ( _insDataIannotatedTree,_insDataIlibUpdates,_insDataIoriginalTree) =- (insData_ _insDataOcat _insDataOlib )- ( _returningIannotatedTree,_returningIlistType,_returningIoriginalTree) =- (returning_ _returningOcat _returningOlib )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_Notify :: Annotation ->- String ->- T_Statement -sem_Statement_Notify ann_ name_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: Statement- _lhsOoriginalTree :: Statement- -- "./TypeChecking/Statements.ag"(line 73, column 9)- _libUpdates =- {-# LINE 73 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12234 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 89, column 9)- _lhsOcatUpdates =- {-# LINE 89 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12239 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 90, column 9)- _lhsOlibUpdates =- {-# LINE 90 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12244 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Notify ann_ name_- {-# LINE 12249 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Notify ann_ name_- {-# LINE 12254 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 12259 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 12264 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_NullStatement :: Annotation ->- T_Statement -sem_Statement_NullStatement ann_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: Statement- _lhsOoriginalTree :: Statement- -- "./TypeChecking/Statements.ag"(line 89, column 9)- _lhsOcatUpdates =- {-# LINE 89 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12280 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 90, column 9)- _lhsOlibUpdates =- {-# LINE 90 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12285 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- NullStatement ann_- {-# LINE 12290 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- NullStatement ann_- {-# LINE 12295 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 12300 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 12305 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_Perform :: Annotation ->- T_Expression ->- T_Statement -sem_Statement_Perform ann_ expr_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: Statement- _lhsOoriginalTree :: Statement- _exprOcat :: Catalog- _exprOlib :: LocalIdentifierBindings- _exprIannotatedTree :: Expression- _exprIliftedColumnName :: String- _exprIoriginalTree :: Expression- -- "./TypeChecking/Statements.ag"(line 89, column 9)- _lhsOcatUpdates =- {-# LINE 89 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12327 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 90, column 9)- _lhsOlibUpdates =- {-# LINE 90 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12332 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Perform ann_ _exprIannotatedTree- {-# LINE 12337 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Perform ann_ _exprIoriginalTree- {-# LINE 12342 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 12347 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 12352 "AstInternal.hs" #-}- -- copy rule (down)- _exprOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 12357 "AstInternal.hs" #-}- -- copy rule (down)- _exprOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 12362 "AstInternal.hs" #-}- ( _exprIannotatedTree,_exprIliftedColumnName,_exprIoriginalTree) =- (expr_ _exprOcat _exprOlib )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_Raise :: Annotation ->- T_RaiseType ->- String ->- T_ExpressionList ->- T_Statement -sem_Statement_Raise ann_ level_ message_ args_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: Statement- _lhsOoriginalTree :: Statement- _levelOcat :: Catalog- _levelOlib :: LocalIdentifierBindings- _argsOcat :: Catalog- _argsOlib :: LocalIdentifierBindings- _levelIannotatedTree :: RaiseType- _levelIoriginalTree :: RaiseType- _argsIannotatedTree :: ExpressionList- _argsIoriginalTree :: ExpressionList- _argsItypeList :: ([Type])- -- "./TypeChecking/Statements.ag"(line 89, column 9)- _lhsOcatUpdates =- {-# LINE 89 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12392 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 90, column 9)- _lhsOlibUpdates =- {-# LINE 90 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12397 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Raise ann_ _levelIannotatedTree message_ _argsIannotatedTree- {-# LINE 12402 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Raise ann_ _levelIoriginalTree message_ _argsIoriginalTree- {-# LINE 12407 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 12412 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 12417 "AstInternal.hs" #-}- -- copy rule (down)- _levelOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 12422 "AstInternal.hs" #-}- -- copy rule (down)- _levelOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 12427 "AstInternal.hs" #-}- -- copy rule (down)- _argsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 12432 "AstInternal.hs" #-}- -- copy rule (down)- _argsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 12437 "AstInternal.hs" #-}- ( _levelIannotatedTree,_levelIoriginalTree) =- (level_ _levelOcat _levelOlib )- ( _argsIannotatedTree,_argsIoriginalTree,_argsItypeList) =- (args_ _argsOcat _argsOlib )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_Return :: Annotation ->- T_MaybeExpression ->- T_Statement -sem_Statement_Return ann_ value_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOannotatedTree :: Statement- _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _tpe :: (Either [TypeError] Type)- _catUpdates :: ([CatalogUpdate])- _lhsOoriginalTree :: Statement- _valueOcat :: Catalog- _valueOlib :: LocalIdentifierBindings- _valueIannotatedTree :: MaybeExpression- _valueIoriginalTree :: MaybeExpression- -- "./TypeChecking/Statements.ag"(line 61, column 9)- _lhsOannotatedTree =- {-# LINE 61 "./TypeChecking/Statements.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ Just (map StatementTypeA _statementType ++- [CatUpdates _catUpdates ])- {-# LINE 12468 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 67, column 9)- _lhsOcatUpdates =- {-# LINE 67 "./TypeChecking/Statements.ag" #-}- _catUpdates- {-# LINE 12473 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 68, column 9)- _lhsOlibUpdates =- {-# LINE 68 "./TypeChecking/Statements.ag" #-}- _libUpdates- {-# LINE 12478 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 73, column 9)- _libUpdates =- {-# LINE 73 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12483 "AstInternal.hs" #-}- -- "./TypeChecking/Plpgsql.ag"(line 12, column 9)- _tpe =- {-# LINE 12 "./TypeChecking/Plpgsql.ag" #-}- dependsOnRTpe [maybe typeBool- getTypeAnnotation- _valueIannotatedTree] $ Right $ Pseudo Void- {-# LINE 12490 "AstInternal.hs" #-}- -- "./TypeChecking/Plpgsql.ag"(line 16, column 9)- _backTree =- {-# LINE 16 "./TypeChecking/Plpgsql.ag" #-}- Return ann_ _valueIannotatedTree- {-# LINE 12495 "AstInternal.hs" #-}- -- "./TypeChecking/Plpgsql.ag"(line 17, column 9)- _catUpdates =- {-# LINE 17 "./TypeChecking/Plpgsql.ag" #-}- []- {-# LINE 12500 "AstInternal.hs" #-}- -- "./TypeChecking/Plpgsql.ag"(line 18, column 9)- _statementType =- {-# LINE 18 "./TypeChecking/Plpgsql.ag" #-}- []- {-# LINE 12505 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Return ann_ _valueIannotatedTree- {-# LINE 12510 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Return ann_ _valueIoriginalTree- {-# LINE 12515 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 12520 "AstInternal.hs" #-}- -- copy rule (down)- _valueOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 12525 "AstInternal.hs" #-}- -- copy rule (down)- _valueOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 12530 "AstInternal.hs" #-}- ( _valueIannotatedTree,_valueIoriginalTree) =- (value_ _valueOcat _valueOlib )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_ReturnNext :: Annotation ->- T_Expression ->- T_Statement -sem_Statement_ReturnNext ann_ expr_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: Statement- _lhsOoriginalTree :: Statement- _exprOcat :: Catalog- _exprOlib :: LocalIdentifierBindings- _exprIannotatedTree :: Expression- _exprIliftedColumnName :: String- _exprIoriginalTree :: Expression- -- "./TypeChecking/Statements.ag"(line 89, column 9)- _lhsOcatUpdates =- {-# LINE 89 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12554 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 90, column 9)- _lhsOlibUpdates =- {-# LINE 90 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12559 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- ReturnNext ann_ _exprIannotatedTree- {-# LINE 12564 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- ReturnNext ann_ _exprIoriginalTree- {-# LINE 12569 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 12574 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 12579 "AstInternal.hs" #-}- -- copy rule (down)- _exprOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 12584 "AstInternal.hs" #-}- -- copy rule (down)- _exprOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 12589 "AstInternal.hs" #-}- ( _exprIannotatedTree,_exprIliftedColumnName,_exprIoriginalTree) =- (expr_ _exprOcat _exprOlib )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_ReturnQuery :: Annotation ->- T_SelectExpression ->- T_Statement -sem_Statement_ReturnQuery ann_ sel_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: Statement- _lhsOoriginalTree :: Statement- _selOcat :: Catalog- _selOlib :: LocalIdentifierBindings- _selIannotatedTree :: SelectExpression- _selIlibUpdates :: ([LocalIdentifierBindingsUpdate])- _selIoriginalTree :: SelectExpression- -- "./TypeChecking/Statements.ag"(line 89, column 9)- _lhsOcatUpdates =- {-# LINE 89 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12613 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 90, column 9)- _lhsOlibUpdates =- {-# LINE 90 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12618 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- ReturnQuery ann_ _selIannotatedTree- {-# LINE 12623 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- ReturnQuery ann_ _selIoriginalTree- {-# LINE 12628 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 12633 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 12638 "AstInternal.hs" #-}- -- copy rule (down)- _selOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 12643 "AstInternal.hs" #-}- -- copy rule (down)- _selOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 12648 "AstInternal.hs" #-}- ( _selIannotatedTree,_selIlibUpdates,_selIoriginalTree) =- (sel_ _selOcat _selOlib )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_SelectStatement :: Annotation ->- T_SelectExpression ->- T_Statement -sem_Statement_SelectStatement ann_ ex_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOannotatedTree :: Statement- _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _tpe :: (Either [TypeError] Type)- _catUpdates :: ([CatalogUpdate])- _lhsOoriginalTree :: Statement- _exOcat :: Catalog- _exOlib :: LocalIdentifierBindings- _exIannotatedTree :: SelectExpression- _exIlibUpdates :: ([LocalIdentifierBindingsUpdate])- _exIoriginalTree :: SelectExpression- -- "./TypeChecking/Statements.ag"(line 61, column 9)- _lhsOannotatedTree =- {-# LINE 61 "./TypeChecking/Statements.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ Just (map StatementTypeA _statementType ++- [CatUpdates _catUpdates ])- {-# LINE 12678 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 67, column 9)- _lhsOcatUpdates =- {-# LINE 67 "./TypeChecking/Statements.ag" #-}- _catUpdates- {-# LINE 12683 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 68, column 9)- _lhsOlibUpdates =- {-# LINE 68 "./TypeChecking/Statements.ag" #-}- _libUpdates- {-# LINE 12688 "AstInternal.hs" #-}- -- "./TypeChecking/SelectStatement.ag"(line 14, column 9)- _tpe =- {-# LINE 14 "./TypeChecking/SelectStatement.ag" #-}- dependsOnRTpe [getTypeAnnotation _exIannotatedTree] $ Right $ Pseudo Void- {-# LINE 12693 "AstInternal.hs" #-}- -- "./TypeChecking/SelectStatement.ag"(line 15, column 9)- _statementType =- {-# LINE 15 "./TypeChecking/SelectStatement.ag" #-}- [StatementType (getPlaceholderTypes _exIannotatedTree) $ leftToEmpty id $- unwrapSetOfComposite $- getTypeAnnotation _exIannotatedTree]- {-# LINE 12700 "AstInternal.hs" #-}- -- "./TypeChecking/SelectStatement.ag"(line 18, column 9)- _backTree =- {-# LINE 18 "./TypeChecking/SelectStatement.ag" #-}- SelectStatement ann_ _exIannotatedTree- {-# LINE 12705 "AstInternal.hs" #-}- -- "./TypeChecking/SelectStatement.ag"(line 19, column 9)- _catUpdates =- {-# LINE 19 "./TypeChecking/SelectStatement.ag" #-}- []- {-# LINE 12710 "AstInternal.hs" #-}- -- "./TypeChecking/SelectLists.ag"(line 79, column 9)- _libUpdates =- {-# LINE 79 "./TypeChecking/SelectLists.ag" #-}- _exIlibUpdates- {-# LINE 12715 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- SelectStatement ann_ _exIannotatedTree- {-# LINE 12720 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- SelectStatement ann_ _exIoriginalTree- {-# LINE 12725 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 12730 "AstInternal.hs" #-}- -- copy rule (down)- _exOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 12735 "AstInternal.hs" #-}- -- copy rule (down)- _exOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 12740 "AstInternal.hs" #-}- ( _exIannotatedTree,_exIlibUpdates,_exIoriginalTree) =- (ex_ _exOcat _exOlib )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_Set :: Annotation ->- String ->- ([SetValue]) ->- T_Statement -sem_Statement_Set ann_ name_ values_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: Statement- _lhsOoriginalTree :: Statement- -- "./TypeChecking/Statements.ag"(line 73, column 9)- _libUpdates =- {-# LINE 73 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12760 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 89, column 9)- _lhsOcatUpdates =- {-# LINE 89 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12765 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 90, column 9)- _lhsOlibUpdates =- {-# LINE 90 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12770 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Set ann_ name_ values_- {-# LINE 12775 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Set ann_ name_ values_- {-# LINE 12780 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 12785 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 12790 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_Truncate :: Annotation ->- T_StringList ->- T_RestartIdentity ->- T_Cascade ->- T_Statement -sem_Statement_Truncate ann_ tables_ restartIdentity_ cascade_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: Statement- _lhsOoriginalTree :: Statement- _tablesOcat :: Catalog- _tablesOlib :: LocalIdentifierBindings- _restartIdentityOcat :: Catalog- _restartIdentityOlib :: LocalIdentifierBindings- _cascadeOcat :: Catalog- _cascadeOlib :: LocalIdentifierBindings- _tablesIannotatedTree :: StringList- _tablesIoriginalTree :: StringList- _tablesIstrings :: ([String])- _restartIdentityIannotatedTree :: RestartIdentity- _restartIdentityIoriginalTree :: RestartIdentity- _cascadeIannotatedTree :: Cascade- _cascadeIoriginalTree :: Cascade- -- "./TypeChecking/Statements.ag"(line 89, column 9)- _lhsOcatUpdates =- {-# LINE 89 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12822 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 90, column 9)- _lhsOlibUpdates =- {-# LINE 90 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12827 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Truncate ann_ _tablesIannotatedTree _restartIdentityIannotatedTree _cascadeIannotatedTree- {-# LINE 12832 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Truncate ann_ _tablesIoriginalTree _restartIdentityIoriginalTree _cascadeIoriginalTree- {-# LINE 12837 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 12842 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 12847 "AstInternal.hs" #-}- -- copy rule (down)- _tablesOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 12852 "AstInternal.hs" #-}- -- copy rule (down)- _tablesOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 12857 "AstInternal.hs" #-}- -- copy rule (down)- _restartIdentityOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 12862 "AstInternal.hs" #-}- -- copy rule (down)- _restartIdentityOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 12867 "AstInternal.hs" #-}- -- copy rule (down)- _cascadeOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 12872 "AstInternal.hs" #-}- -- copy rule (down)- _cascadeOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 12877 "AstInternal.hs" #-}- ( _tablesIannotatedTree,_tablesIoriginalTree,_tablesIstrings) =- (tables_ _tablesOcat _tablesOlib )- ( _restartIdentityIannotatedTree,_restartIdentityIoriginalTree) =- (restartIdentity_ _restartIdentityOcat _restartIdentityOlib )- ( _cascadeIannotatedTree,_cascadeIoriginalTree) =- (cascade_ _cascadeOcat _cascadeOlib )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_Update :: Annotation ->- String ->- T_SetClauseList ->- T_MaybeBoolExpression ->- T_MaybeSelectList ->- T_Statement -sem_Statement_Update ann_ table_ assigns_ whr_ returning_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOannotatedTree :: Statement- _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _tpe :: (Either [TypeError] Type)- _assignWInferredTypes :: SetClauseList- _catUpdates :: ([CatalogUpdate])- _whrOlib :: LocalIdentifierBindings- _assignsOlib :: LocalIdentifierBindings- _returningOlib :: LocalIdentifierBindings- _lhsOoriginalTree :: Statement- _assignsOcat :: Catalog- _whrOcat :: Catalog- _returningOcat :: Catalog- _assignsIannotatedTree :: SetClauseList- _assignsIoriginalTree :: SetClauseList- _assignsIpairs :: ([(String,Type)])- _assignsIrowSetErrors :: ([TypeError])- _whrIannotatedTree :: MaybeBoolExpression- _whrIoriginalTree :: MaybeBoolExpression- _returningIannotatedTree :: MaybeSelectList- _returningIlistType :: (Maybe [(String,Type)])- _returningIoriginalTree :: MaybeSelectList- -- "./TypeChecking/Statements.ag"(line 61, column 9)- _lhsOannotatedTree =- {-# LINE 61 "./TypeChecking/Statements.ag" #-}- annTypesAndErrors _backTree- (tpeToT _tpe )- (getErrors _tpe )- $ Just (map StatementTypeA _statementType ++- [CatUpdates _catUpdates ])- {-# LINE 12925 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 67, column 9)- _lhsOcatUpdates =- {-# LINE 67 "./TypeChecking/Statements.ag" #-}- _catUpdates- {-# LINE 12930 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 68, column 9)- _lhsOlibUpdates =- {-# LINE 68 "./TypeChecking/Statements.ag" #-}- _libUpdates- {-# LINE 12935 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 73, column 9)- _libUpdates =- {-# LINE 73 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 12940 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 65, column 9)- _tpe =- {-# LINE 65 "./TypeChecking/Dml.ag" #-}- do- checkRelationExists _lhsIcat table_- dependsOnRTpe (map snd _assignsIpairs) $ do- _columnTypes- liftErrors _assignsIrowSetErrors- return $ Pseudo Void- {-# LINE 12950 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 72, column 9)- _statementType =- {-# LINE 72 "./TypeChecking/Dml.ag" #-}- leftToEmpty (\ct -> [StatementType (getPlaceholderTypes _assignWInferredTypes- ++ getPlaceholderTypes _whrIannotatedTree)- (fromMaybe [] _returningIlistType)])- _columnTypes- {-# LINE 12958 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 78, column 9)- _columnTypes =- {-# LINE 78 "./TypeChecking/Dml.ag" #-}- checkColumnConsistency _lhsIcat- table_- (map fst _assignsIpairs)- _assignsIpairs- {-# LINE 12966 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 84, column 9)- _assignWInferredTypes =- {-# LINE 84 "./TypeChecking/Dml.ag" #-}- let colTypes :: [Type]- colTypes = (map snd $ fromRight [] _columnTypes )- in setInferredTypesG colTypes _assignsIannotatedTree- {-# LINE 12973 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 89, column 9)- _backTree =- {-# LINE 89 "./TypeChecking/Dml.ag" #-}- Update ann_- table_- _assignWInferredTypes- _whrIannotatedTree- _returningIannotatedTree- {-# LINE 12982 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 94, column 9)- _catUpdates =- {-# LINE 94 "./TypeChecking/Dml.ag" #-}- []- {-# LINE 12987 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 114, column 9)- _lib =- {-# LINE 114 "./TypeChecking/Dml.ag" #-}- fromRight _lhsIlib $ do- ct <- catCompositeAttrs _lhsIcat- relationComposites- table_- updateBindings _lhsIlib _lhsIcat [LibStackIDs [("", ct)]]- {-# LINE 12996 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 120, column 9)- _whrOlib =- {-# LINE 120 "./TypeChecking/Dml.ag" #-}- _lib- {-# LINE 13001 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 121, column 9)- _assignsOlib =- {-# LINE 121 "./TypeChecking/Dml.ag" #-}- _lib- {-# LINE 13006 "AstInternal.hs" #-}- -- "./TypeChecking/Dml.ag"(line 122, column 9)- _returningOlib =- {-# LINE 122 "./TypeChecking/Dml.ag" #-}- _lib- {-# LINE 13011 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Update ann_ table_ _assignsIannotatedTree _whrIannotatedTree _returningIannotatedTree- {-# LINE 13016 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Update ann_ table_ _assignsIoriginalTree _whrIoriginalTree _returningIoriginalTree- {-# LINE 13021 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 13026 "AstInternal.hs" #-}- -- copy rule (down)- _assignsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 13031 "AstInternal.hs" #-}- -- copy rule (down)- _whrOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 13036 "AstInternal.hs" #-}- -- copy rule (down)- _returningOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 13041 "AstInternal.hs" #-}- ( _assignsIannotatedTree,_assignsIoriginalTree,_assignsIpairs,_assignsIrowSetErrors) =- (assigns_ _assignsOcat _assignsOlib )- ( _whrIannotatedTree,_whrIoriginalTree) =- (whr_ _whrOcat _whrOlib )- ( _returningIannotatedTree,_returningIlistType,_returningIoriginalTree) =- (returning_ _returningOcat _returningOlib )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_Statement_WhileStatement :: Annotation ->- T_Expression ->- T_StatementList ->- T_Statement -sem_Statement_WhileStatement ann_ expr_ sts_ =- (\ _lhsIcat- _lhsIinProducedCat- _lhsIlib ->- (let _lhsOcatUpdates :: ([CatalogUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _stsOcatUpdates :: ([CatalogUpdate])- _stsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: Statement- _lhsOoriginalTree :: Statement- _exprOcat :: Catalog- _exprOlib :: LocalIdentifierBindings- _stsOcat :: Catalog- _stsOlib :: LocalIdentifierBindings- _exprIannotatedTree :: Expression- _exprIliftedColumnName :: String- _exprIoriginalTree :: Expression- _stsIannotatedTree :: StatementList- _stsIoriginalTree :: StatementList- _stsIproducedCat :: Catalog- _stsIproducedLib :: LocalIdentifierBindings- -- "./TypeChecking/Statements.ag"(line 89, column 9)- _lhsOcatUpdates =- {-# LINE 89 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 13078 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 90, column 9)- _lhsOlibUpdates =- {-# LINE 90 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 13083 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 110, column 9)- _stsOcatUpdates =- {-# LINE 110 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 13088 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 111, column 9)- _stsOlibUpdates =- {-# LINE 111 "./TypeChecking/Statements.ag" #-}- []- {-# LINE 13093 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- WhileStatement ann_ _exprIannotatedTree _stsIannotatedTree- {-# LINE 13098 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- WhileStatement ann_ _exprIoriginalTree _stsIoriginalTree- {-# LINE 13103 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 13108 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 13113 "AstInternal.hs" #-}- -- copy rule (down)- _exprOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 13118 "AstInternal.hs" #-}- -- copy rule (down)- _exprOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 13123 "AstInternal.hs" #-}- -- copy rule (down)- _stsOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 13128 "AstInternal.hs" #-}- -- copy rule (down)- _stsOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 13133 "AstInternal.hs" #-}- ( _exprIannotatedTree,_exprIliftedColumnName,_exprIoriginalTree) =- (expr_ _exprOcat _exprOlib )- ( _stsIannotatedTree,_stsIoriginalTree,_stsIproducedCat,_stsIproducedLib) =- (sts_ _stsOcat _stsOcatUpdates _stsOlib _stsOlibUpdates )- in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOlibUpdates,_lhsOoriginalTree)))--- StatementList ------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- catUpdates : [CatalogUpdate]- lib : LocalIdentifierBindings- libUpdates : [LocalIdentifierBindingsUpdate]- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - producedCat : Catalog- producedLib : LocalIdentifierBindings- alternatives:- alternative Cons:- child hd : Statement - child tl : StatementList - visit 0:- local newCat : _- local newLib : _- local annotatedTree : _- local originalTree : _- alternative Nil:- visit 0:- local newCat : _- local newLib : _- local annotatedTree : _- local originalTree : _--}-type StatementList = [(Statement)]--- cata-sem_StatementList :: StatementList ->- T_StatementList -sem_StatementList list =- (Prelude.foldr sem_StatementList_Cons sem_StatementList_Nil (Prelude.map sem_Statement list) )--- semantic domain-type T_StatementList = Catalog ->- ([CatalogUpdate]) ->- LocalIdentifierBindings ->- ([LocalIdentifierBindingsUpdate]) ->- ( StatementList,StatementList,Catalog,LocalIdentifierBindings)-data Inh_StatementList = Inh_StatementList {cat_Inh_StatementList :: Catalog,catUpdates_Inh_StatementList :: [CatalogUpdate],lib_Inh_StatementList :: LocalIdentifierBindings,libUpdates_Inh_StatementList :: [LocalIdentifierBindingsUpdate]}-data Syn_StatementList = Syn_StatementList {annotatedTree_Syn_StatementList :: StatementList,originalTree_Syn_StatementList :: StatementList,producedCat_Syn_StatementList :: Catalog,producedLib_Syn_StatementList :: LocalIdentifierBindings}-wrap_StatementList :: T_StatementList ->- Inh_StatementList ->- Syn_StatementList -wrap_StatementList sem (Inh_StatementList _lhsIcat _lhsIcatUpdates _lhsIlib _lhsIlibUpdates ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree,_lhsOproducedCat,_lhsOproducedLib) =- (sem _lhsIcat _lhsIcatUpdates _lhsIlib _lhsIlibUpdates )- in (Syn_StatementList _lhsOannotatedTree _lhsOoriginalTree _lhsOproducedCat _lhsOproducedLib ))-sem_StatementList_Cons :: T_Statement ->- T_StatementList ->- T_StatementList -sem_StatementList_Cons hd_ tl_ =- (\ _lhsIcat- _lhsIcatUpdates- _lhsIlib- _lhsIlibUpdates ->- (let _hdOcat :: Catalog- _tlOcat :: Catalog- _hdOlib :: LocalIdentifierBindings- _tlOlib :: LocalIdentifierBindings- _lhsOproducedCat :: Catalog- _lhsOproducedLib :: LocalIdentifierBindings- _tlOcatUpdates :: ([CatalogUpdate])- _tlOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _hdOinProducedCat :: Catalog- _lhsOannotatedTree :: StatementList- _lhsOoriginalTree :: StatementList- _hdIannotatedTree :: Statement- _hdIcatUpdates :: ([CatalogUpdate])- _hdIlibUpdates :: ([LocalIdentifierBindingsUpdate])- _hdIoriginalTree :: Statement- _tlIannotatedTree :: StatementList- _tlIoriginalTree :: StatementList- _tlIproducedCat :: Catalog- _tlIproducedLib :: LocalIdentifierBindings- -- "./TypeChecking/Statements.ag"(line 36, column 9)- _newCat =- {-# LINE 36 "./TypeChecking/Statements.ag" #-}- fromRight _lhsIcat $ updateCatalog _lhsIcat _lhsIcatUpdates- {-# LINE 13220 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 37, column 9)- _newLib =- {-# LINE 37 "./TypeChecking/Statements.ag" #-}- fromRight _lhsIlib $ updateBindings _lhsIlib _lhsIcat _lhsIlibUpdates- {-# LINE 13225 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 39, column 9)- _hdOcat =- {-# LINE 39 "./TypeChecking/Statements.ag" #-}- _newCat- {-# LINE 13230 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 40, column 9)- _tlOcat =- {-# LINE 40 "./TypeChecking/Statements.ag" #-}- _newCat- {-# LINE 13235 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 41, column 9)- _hdOlib =- {-# LINE 41 "./TypeChecking/Statements.ag" #-}- _newLib- {-# LINE 13240 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 42, column 9)- _tlOlib =- {-# LINE 42 "./TypeChecking/Statements.ag" #-}- _newLib- {-# LINE 13245 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 46, column 9)- _lhsOproducedCat =- {-# LINE 46 "./TypeChecking/Statements.ag" #-}- _tlIproducedCat- {-# LINE 13250 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 47, column 9)- _lhsOproducedLib =- {-# LINE 47 "./TypeChecking/Statements.ag" #-}- _tlIproducedLib- {-# LINE 13255 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 50, column 9)- _tlOcatUpdates =- {-# LINE 50 "./TypeChecking/Statements.ag" #-}- _hdIcatUpdates- {-# LINE 13260 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 51, column 9)- _tlOlibUpdates =- {-# LINE 51 "./TypeChecking/Statements.ag" #-}- _hdIlibUpdates- {-# LINE 13265 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 76, column 12)- _hdOinProducedCat =- {-# LINE 76 "./TypeChecking/Statements.ag" #-}- _tlIproducedCat- {-# LINE 13270 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIannotatedTree _tlIannotatedTree- {-# LINE 13275 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIoriginalTree _tlIoriginalTree- {-# LINE 13280 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 13285 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 13290 "AstInternal.hs" #-}- ( _hdIannotatedTree,_hdIcatUpdates,_hdIlibUpdates,_hdIoriginalTree) =- (hd_ _hdOcat _hdOinProducedCat _hdOlib )- ( _tlIannotatedTree,_tlIoriginalTree,_tlIproducedCat,_tlIproducedLib) =- (tl_ _tlOcat _tlOcatUpdates _tlOlib _tlOlibUpdates )- in ( _lhsOannotatedTree,_lhsOoriginalTree,_lhsOproducedCat,_lhsOproducedLib)))-sem_StatementList_Nil :: T_StatementList -sem_StatementList_Nil =- (\ _lhsIcat- _lhsIcatUpdates- _lhsIlib- _lhsIlibUpdates ->- (let _lhsOproducedCat :: Catalog- _lhsOproducedLib :: LocalIdentifierBindings- _lhsOannotatedTree :: StatementList- _lhsOoriginalTree :: StatementList- -- "./TypeChecking/Statements.ag"(line 36, column 9)- _newCat =- {-# LINE 36 "./TypeChecking/Statements.ag" #-}- fromRight _lhsIcat $ updateCatalog _lhsIcat _lhsIcatUpdates- {-# LINE 13310 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 37, column 9)- _newLib =- {-# LINE 37 "./TypeChecking/Statements.ag" #-}- fromRight _lhsIlib $ updateBindings _lhsIlib _lhsIcat _lhsIlibUpdates- {-# LINE 13315 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 53, column 9)- _lhsOproducedCat =- {-# LINE 53 "./TypeChecking/Statements.ag" #-}- _newCat- {-# LINE 13320 "AstInternal.hs" #-}- -- "./TypeChecking/Statements.ag"(line 54, column 9)- _lhsOproducedLib =- {-# LINE 54 "./TypeChecking/Statements.ag" #-}- _newLib- {-# LINE 13325 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 13330 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 13335 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 13340 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 13345 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree,_lhsOproducedCat,_lhsOproducedLib)))--- StringList ---------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - strings : [String]- alternatives:- alternative Cons:- child hd : {String}- child tl : StringList - visit 0:- local annotatedTree : _- local originalTree : _- alternative Nil:- visit 0:- local annotatedTree : _- local originalTree : _--}-type StringList = [(String)]--- cata-sem_StringList :: StringList ->- T_StringList -sem_StringList list =- (Prelude.foldr sem_StringList_Cons sem_StringList_Nil list )--- semantic domain-type T_StringList = Catalog ->- LocalIdentifierBindings ->- ( StringList,StringList,([String]))-data Inh_StringList = Inh_StringList {cat_Inh_StringList :: Catalog,lib_Inh_StringList :: LocalIdentifierBindings}-data Syn_StringList = Syn_StringList {annotatedTree_Syn_StringList :: StringList,originalTree_Syn_StringList :: StringList,strings_Syn_StringList :: [String]}-wrap_StringList :: T_StringList ->- Inh_StringList ->- Syn_StringList -wrap_StringList sem (Inh_StringList _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree,_lhsOstrings) =- (sem _lhsIcat _lhsIlib )- in (Syn_StringList _lhsOannotatedTree _lhsOoriginalTree _lhsOstrings ))-sem_StringList_Cons :: String ->- T_StringList ->- T_StringList -sem_StringList_Cons hd_ tl_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOstrings :: ([String])- _lhsOannotatedTree :: StringList- _lhsOoriginalTree :: StringList- _tlOcat :: Catalog- _tlOlib :: LocalIdentifierBindings- _tlIannotatedTree :: StringList- _tlIoriginalTree :: StringList- _tlIstrings :: ([String])- -- "./TypeChecking/Misc.ag"(line 67, column 10)- _lhsOstrings =- {-# LINE 67 "./TypeChecking/Misc.ag" #-}- hd_ : _tlIstrings- {-# LINE 13406 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (:) hd_ _tlIannotatedTree- {-# LINE 13411 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (:) hd_ _tlIoriginalTree- {-# LINE 13416 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 13421 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 13426 "AstInternal.hs" #-}- -- copy rule (down)- _tlOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 13431 "AstInternal.hs" #-}- -- copy rule (down)- _tlOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 13436 "AstInternal.hs" #-}- ( _tlIannotatedTree,_tlIoriginalTree,_tlIstrings) =- (tl_ _tlOcat _tlOlib )- in ( _lhsOannotatedTree,_lhsOoriginalTree,_lhsOstrings)))-sem_StringList_Nil :: T_StringList -sem_StringList_Nil =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOstrings :: ([String])- _lhsOannotatedTree :: StringList- _lhsOoriginalTree :: StringList- -- "./TypeChecking/Misc.ag"(line 68, column 9)- _lhsOstrings =- {-# LINE 68 "./TypeChecking/Misc.ag" #-}- []- {-# LINE 13451 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 13456 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 13461 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 13466 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 13471 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree,_lhsOstrings)))--- StringTypeNameListPair ---------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - fnSig : (String,[Type])- originalTree : SELF - alternatives:- alternative Tuple:- child x1 : {String}- child x2 : TypeNameList - visit 0:- local annotatedTree : _- local originalTree : _--}-type StringTypeNameListPair = ( (String),(TypeNameList))--- cata-sem_StringTypeNameListPair :: StringTypeNameListPair ->- T_StringTypeNameListPair -sem_StringTypeNameListPair ( x1,x2) =- (sem_StringTypeNameListPair_Tuple x1 (sem_TypeNameList x2 ) )--- semantic domain-type T_StringTypeNameListPair = Catalog ->- LocalIdentifierBindings ->- ( StringTypeNameListPair,((String,[Type])),StringTypeNameListPair)-data Inh_StringTypeNameListPair = Inh_StringTypeNameListPair {cat_Inh_StringTypeNameListPair :: Catalog,lib_Inh_StringTypeNameListPair :: LocalIdentifierBindings}-data Syn_StringTypeNameListPair = Syn_StringTypeNameListPair {annotatedTree_Syn_StringTypeNameListPair :: StringTypeNameListPair,fnSig_Syn_StringTypeNameListPair :: (String,[Type]),originalTree_Syn_StringTypeNameListPair :: StringTypeNameListPair}-wrap_StringTypeNameListPair :: T_StringTypeNameListPair ->- Inh_StringTypeNameListPair ->- Syn_StringTypeNameListPair -wrap_StringTypeNameListPair sem (Inh_StringTypeNameListPair _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOfnSig,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_StringTypeNameListPair _lhsOannotatedTree _lhsOfnSig _lhsOoriginalTree ))-sem_StringTypeNameListPair_Tuple :: String ->- T_TypeNameList ->- T_StringTypeNameListPair -sem_StringTypeNameListPair_Tuple x1_ x2_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOfnSig :: ((String,[Type]))- _lhsOannotatedTree :: StringTypeNameListPair- _lhsOoriginalTree :: StringTypeNameListPair- _x2Ocat :: Catalog- _x2Olib :: LocalIdentifierBindings- _x2IannotatedTree :: TypeNameList- _x2InamedTypes :: ([Type])- _x2IoriginalTree :: TypeNameList- -- "./TypeChecking/Drops.ag"(line 25, column 13)- _lhsOfnSig =- {-# LINE 25 "./TypeChecking/Drops.ag" #-}- (x1_, _x2InamedTypes)- {-# LINE 13528 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (x1_,_x2IannotatedTree)- {-# LINE 13533 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (x1_,_x2IoriginalTree)- {-# LINE 13538 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 13543 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 13548 "AstInternal.hs" #-}- -- copy rule (down)- _x2Ocat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 13553 "AstInternal.hs" #-}- -- copy rule (down)- _x2Olib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 13558 "AstInternal.hs" #-}- ( _x2IannotatedTree,_x2InamedTypes,_x2IoriginalTree) =- (x2_ _x2Ocat _x2Olib )- in ( _lhsOannotatedTree,_lhsOfnSig,_lhsOoriginalTree)))--- StringTypeNameListPairList -----------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - fnSigs : [(String,[Type])]- originalTree : SELF - alternatives:- alternative Cons:- child hd : StringTypeNameListPair - child tl : StringTypeNameListPairList - visit 0:- local annotatedTree : _- local originalTree : _- alternative Nil:- visit 0:- local annotatedTree : _- local originalTree : _--}-type StringTypeNameListPairList = [(StringTypeNameListPair)]--- cata-sem_StringTypeNameListPairList :: StringTypeNameListPairList ->- T_StringTypeNameListPairList -sem_StringTypeNameListPairList list =- (Prelude.foldr sem_StringTypeNameListPairList_Cons sem_StringTypeNameListPairList_Nil (Prelude.map sem_StringTypeNameListPair list) )--- semantic domain-type T_StringTypeNameListPairList = Catalog ->- LocalIdentifierBindings ->- ( StringTypeNameListPairList,([(String,[Type])]),StringTypeNameListPairList)-data Inh_StringTypeNameListPairList = Inh_StringTypeNameListPairList {cat_Inh_StringTypeNameListPairList :: Catalog,lib_Inh_StringTypeNameListPairList :: LocalIdentifierBindings}-data Syn_StringTypeNameListPairList = Syn_StringTypeNameListPairList {annotatedTree_Syn_StringTypeNameListPairList :: StringTypeNameListPairList,fnSigs_Syn_StringTypeNameListPairList :: [(String,[Type])],originalTree_Syn_StringTypeNameListPairList :: StringTypeNameListPairList}-wrap_StringTypeNameListPairList :: T_StringTypeNameListPairList ->- Inh_StringTypeNameListPairList ->- Syn_StringTypeNameListPairList -wrap_StringTypeNameListPairList sem (Inh_StringTypeNameListPairList _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOfnSigs,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_StringTypeNameListPairList _lhsOannotatedTree _lhsOfnSigs _lhsOoriginalTree ))-sem_StringTypeNameListPairList_Cons :: T_StringTypeNameListPair ->- T_StringTypeNameListPairList ->- T_StringTypeNameListPairList -sem_StringTypeNameListPairList_Cons hd_ tl_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOfnSigs :: ([(String,[Type])])- _lhsOannotatedTree :: StringTypeNameListPairList- _lhsOoriginalTree :: StringTypeNameListPairList- _hdOcat :: Catalog- _hdOlib :: LocalIdentifierBindings- _tlOcat :: Catalog- _tlOlib :: LocalIdentifierBindings- _hdIannotatedTree :: StringTypeNameListPair- _hdIfnSig :: ((String,[Type]))- _hdIoriginalTree :: StringTypeNameListPair- _tlIannotatedTree :: StringTypeNameListPairList- _tlIfnSigs :: ([(String,[Type])])- _tlIoriginalTree :: StringTypeNameListPairList- -- "./TypeChecking/Drops.ag"(line 20, column 12)- _lhsOfnSigs =- {-# LINE 20 "./TypeChecking/Drops.ag" #-}- _hdIfnSig : _tlIfnSigs- {-# LINE 13626 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIannotatedTree _tlIannotatedTree- {-# LINE 13631 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIoriginalTree _tlIoriginalTree- {-# LINE 13636 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 13641 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 13646 "AstInternal.hs" #-}- -- copy rule (down)- _hdOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 13651 "AstInternal.hs" #-}- -- copy rule (down)- _hdOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 13656 "AstInternal.hs" #-}- -- copy rule (down)- _tlOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 13661 "AstInternal.hs" #-}- -- copy rule (down)- _tlOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 13666 "AstInternal.hs" #-}- ( _hdIannotatedTree,_hdIfnSig,_hdIoriginalTree) =- (hd_ _hdOcat _hdOlib )- ( _tlIannotatedTree,_tlIfnSigs,_tlIoriginalTree) =- (tl_ _tlOcat _tlOlib )- in ( _lhsOannotatedTree,_lhsOfnSigs,_lhsOoriginalTree)))-sem_StringTypeNameListPairList_Nil :: T_StringTypeNameListPairList -sem_StringTypeNameListPairList_Nil =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOfnSigs :: ([(String,[Type])])- _lhsOannotatedTree :: StringTypeNameListPairList- _lhsOoriginalTree :: StringTypeNameListPairList- -- "./TypeChecking/Drops.ag"(line 21, column 11)- _lhsOfnSigs =- {-# LINE 21 "./TypeChecking/Drops.ag" #-}- []- {-# LINE 13683 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 13688 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 13693 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 13698 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 13703 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOfnSigs,_lhsOoriginalTree)))--- TableAlias ---------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative FullAlias:- child alias : {String}- child cols : {[String]}- visit 0:- local annotatedTree : _- local originalTree : _- alternative NoAlias:- visit 0:- local annotatedTree : _- local originalTree : _- alternative TableAlias:- child alias : {String}- visit 0:- local annotatedTree : _- local originalTree : _--}-data TableAlias = FullAlias (String) ([String]) - | NoAlias - | TableAlias (String) - deriving ( Data,Eq,Show,Typeable)--- cata-sem_TableAlias :: TableAlias ->- T_TableAlias -sem_TableAlias (FullAlias _alias _cols ) =- (sem_TableAlias_FullAlias _alias _cols )-sem_TableAlias (NoAlias ) =- (sem_TableAlias_NoAlias )-sem_TableAlias (TableAlias _alias ) =- (sem_TableAlias_TableAlias _alias )--- semantic domain-type T_TableAlias = Catalog ->- LocalIdentifierBindings ->- ( TableAlias,TableAlias)-data Inh_TableAlias = Inh_TableAlias {cat_Inh_TableAlias :: Catalog,lib_Inh_TableAlias :: LocalIdentifierBindings}-data Syn_TableAlias = Syn_TableAlias {annotatedTree_Syn_TableAlias :: TableAlias,originalTree_Syn_TableAlias :: TableAlias}-wrap_TableAlias :: T_TableAlias ->- Inh_TableAlias ->- Syn_TableAlias -wrap_TableAlias sem (Inh_TableAlias _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_TableAlias _lhsOannotatedTree _lhsOoriginalTree ))-sem_TableAlias_FullAlias :: String ->- ([String]) ->- T_TableAlias -sem_TableAlias_FullAlias alias_ cols_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: TableAlias- _lhsOoriginalTree :: TableAlias- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- FullAlias alias_ cols_- {-# LINE 13769 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- FullAlias alias_ cols_- {-# LINE 13774 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 13779 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 13784 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_TableAlias_NoAlias :: T_TableAlias -sem_TableAlias_NoAlias =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: TableAlias- _lhsOoriginalTree :: TableAlias- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- NoAlias- {-# LINE 13796 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- NoAlias- {-# LINE 13801 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 13806 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 13811 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_TableAlias_TableAlias :: String ->- T_TableAlias -sem_TableAlias_TableAlias alias_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: TableAlias- _lhsOoriginalTree :: TableAlias- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- TableAlias alias_- {-# LINE 13824 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- TableAlias alias_- {-# LINE 13829 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 13834 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 13839 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- TableRef -----------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- jlibUpdates : [LocalIdentifierBindingsUpdate]- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - idLookups : [(String,Type)]- libUpdates : [LocalIdentifierBindingsUpdate]- originalTree : SELF - qidLookups : [(String,[(String,Type)])]- qstarExpansion : [(String,[(String,Type)])]- starExpansion : [(String,Type)]- alternatives:- alternative JoinedTref:- child ann : {Annotation}- child tbl : TableRef - child nat : Natural - child joinType : JoinType - child tbl1 : TableRef - child onExpr : OnExpr - child alias : TableAlias - visit 0:- local libUpdates : _- local errs : _- local removeJoinAttrs : _- local ejoinAttrs : {Either [TypeError] [(String,Type)]}- local joinNames : _- local joinAttrs : _- local idLookups : {[(String,Type)]}- local qidLookups : {[(String,[(String,Type)])]}- local starExpansion : {[(String,Type)]}- local qstarExpansion : {[(String,[(String,Type)])]}- local newLib : _- local backTree : _- local annotatedTree : _- local originalTree : _- alternative SubTref:- child ann : {Annotation}- child sel : SelectExpression - child alias : TableAlias - visit 0:- local libUpdates : _- local errs : _- local selectAttrs : {Either [TypeError] [(String,Type)]}- local idLookups : {[(String,Type)]}- local qidLookups : {[(String,[(String,Type)])]}- local starExpansion : {[(String,Type)]}- local qstarExpansion : {[(String,[(String,Type)])]}- local backTree : _- local annotatedTree : _- local originalTree : _- alternative Tref:- child ann : {Annotation}- child tbl : {String}- child alias : TableAlias - visit 0:- local libUpdates : _- local errs : _- local relType : {Either [TypeError] ([(String, Type)], [(String, Type)])}- local relType1 : _- local pAttrs : _- local sAttrs : _- local idLookups : {[(String,Type)]}- local alias : _- local qidLookups : {[(String,[(String,Type)])]}- local starExpansion : {[(String,Type)]}- local qstarExpansion : {[(String,[(String,Type)])]}- local backTree : _- local annotatedTree : _- local originalTree : _- alternative TrefFun:- child ann : {Annotation}- child fn : Expression - child alias : TableAlias - visit 0:- local libUpdates : _- local errs : _- local eqfunIdens : {Either [TypeError] (String,[(String,Type)])}- local qfunIdens : _- local alias2 : _- local funIdens : _- local alias : _- local idLookups : {[(String,Type)]}- local qidLookups : {[(String,[(String,Type)])]}- local starExpansion : {[(String,Type)]}- local qstarExpansion : {[(String,[(String,Type)])]}- local backTree : _- local annotatedTree : _- local originalTree : _--}-data TableRef = JoinedTref (Annotation) (TableRef) (Natural) (JoinType) (TableRef) (OnExpr) (TableAlias) - | SubTref (Annotation) (SelectExpression) (TableAlias) - | Tref (Annotation) (String) (TableAlias) - | TrefFun (Annotation) (Expression) (TableAlias) - deriving ( Data,Eq,Show,Typeable)--- cata-sem_TableRef :: TableRef ->- T_TableRef -sem_TableRef (JoinedTref _ann _tbl _nat _joinType _tbl1 _onExpr _alias ) =- (sem_TableRef_JoinedTref _ann (sem_TableRef _tbl ) (sem_Natural _nat ) (sem_JoinType _joinType ) (sem_TableRef _tbl1 ) (sem_OnExpr _onExpr ) (sem_TableAlias _alias ) )-sem_TableRef (SubTref _ann _sel _alias ) =- (sem_TableRef_SubTref _ann (sem_SelectExpression _sel ) (sem_TableAlias _alias ) )-sem_TableRef (Tref _ann _tbl _alias ) =- (sem_TableRef_Tref _ann _tbl (sem_TableAlias _alias ) )-sem_TableRef (TrefFun _ann _fn _alias ) =- (sem_TableRef_TrefFun _ann (sem_Expression _fn ) (sem_TableAlias _alias ) )--- semantic domain-type T_TableRef = Catalog ->- ([LocalIdentifierBindingsUpdate]) ->- LocalIdentifierBindings ->- ( TableRef,([(String,Type)]),([LocalIdentifierBindingsUpdate]),TableRef,([(String,[(String,Type)])]),([(String,[(String,Type)])]),([(String,Type)]))-data Inh_TableRef = Inh_TableRef {cat_Inh_TableRef :: Catalog,jlibUpdates_Inh_TableRef :: [LocalIdentifierBindingsUpdate],lib_Inh_TableRef :: LocalIdentifierBindings}-data Syn_TableRef = Syn_TableRef {annotatedTree_Syn_TableRef :: TableRef,idLookups_Syn_TableRef :: [(String,Type)],libUpdates_Syn_TableRef :: [LocalIdentifierBindingsUpdate],originalTree_Syn_TableRef :: TableRef,qidLookups_Syn_TableRef :: [(String,[(String,Type)])],qstarExpansion_Syn_TableRef :: [(String,[(String,Type)])],starExpansion_Syn_TableRef :: [(String,Type)]}-wrap_TableRef :: T_TableRef ->- Inh_TableRef ->- Syn_TableRef -wrap_TableRef sem (Inh_TableRef _lhsIcat _lhsIjlibUpdates _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOidLookups,_lhsOlibUpdates,_lhsOoriginalTree,_lhsOqidLookups,_lhsOqstarExpansion,_lhsOstarExpansion) =- (sem _lhsIcat _lhsIjlibUpdates _lhsIlib )- in (Syn_TableRef _lhsOannotatedTree _lhsOidLookups _lhsOlibUpdates _lhsOoriginalTree _lhsOqidLookups _lhsOqstarExpansion _lhsOstarExpansion ))-sem_TableRef_JoinedTref :: Annotation ->- T_TableRef ->- T_Natural ->- T_JoinType ->- T_TableRef ->- T_OnExpr ->- T_TableAlias ->- T_TableRef -sem_TableRef_JoinedTref ann_ tbl_ nat_ joinType_ tbl1_ onExpr_ alias_ =- (\ _lhsIcat- _lhsIjlibUpdates- _lhsIlib ->- (let _lhsOannotatedTree :: TableRef- _ejoinAttrs :: (Either [TypeError] [(String,Type)])- _idLookups :: ([(String,Type)])- _qidLookups :: ([(String,[(String,Type)])])- _starExpansion :: ([(String,Type)])- _qstarExpansion :: ([(String,[(String,Type)])])- _onExprOlib :: LocalIdentifierBindings- _tblOjlibUpdates :: ([LocalIdentifierBindingsUpdate])- _tbl1OjlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOidLookups :: ([(String,Type)])- _lhsOqidLookups :: ([(String,[(String,Type)])])- _lhsOstarExpansion :: ([(String,Type)])- _lhsOqstarExpansion :: ([(String,[(String,Type)])])- _lhsOoriginalTree :: TableRef- _tblOcat :: Catalog- _tblOlib :: LocalIdentifierBindings- _natOcat :: Catalog- _natOlib :: LocalIdentifierBindings- _joinTypeOcat :: Catalog- _joinTypeOlib :: LocalIdentifierBindings- _tbl1Ocat :: Catalog- _tbl1Olib :: LocalIdentifierBindings- _onExprOcat :: Catalog- _aliasOcat :: Catalog- _aliasOlib :: LocalIdentifierBindings- _tblIannotatedTree :: TableRef- _tblIidLookups :: ([(String,Type)])- _tblIlibUpdates :: ([LocalIdentifierBindingsUpdate])- _tblIoriginalTree :: TableRef- _tblIqidLookups :: ([(String,[(String,Type)])])- _tblIqstarExpansion :: ([(String,[(String,Type)])])- _tblIstarExpansion :: ([(String,Type)])- _natIannotatedTree :: Natural- _natIoriginalTree :: Natural- _joinTypeIannotatedTree :: JoinType- _joinTypeIoriginalTree :: JoinType- _tbl1IannotatedTree :: TableRef- _tbl1IidLookups :: ([(String,Type)])- _tbl1IlibUpdates :: ([LocalIdentifierBindingsUpdate])- _tbl1IoriginalTree :: TableRef- _tbl1IqidLookups :: ([(String,[(String,Type)])])- _tbl1IqstarExpansion :: ([(String,[(String,Type)])])- _tbl1IstarExpansion :: ([(String,Type)])- _onExprIannotatedTree :: OnExpr- _onExprIoriginalTree :: OnExpr- _aliasIannotatedTree :: TableAlias- _aliasIoriginalTree :: TableAlias- -- "./TypeChecking/TableRefs.ag"(line 33, column 9)- _lhsOannotatedTree =- {-# LINE 33 "./TypeChecking/TableRefs.ag" #-}- updateAnnotation (map TypeErrorA _errs ++) _backTree- {-# LINE 14028 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 75, column 9)- _libUpdates =- {-# LINE 75 "./TypeChecking/TableRefs.ag" #-}- if null _errs- then [LibStackIDs $ ("", _idLookups ): _qidLookups- ,LibSetStarExpansion $ ("", _starExpansion ): _qstarExpansion ]- else []- {-# LINE 14036 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 135, column 9)- _errs =- {-# LINE 135 "./TypeChecking/TableRefs.ag" #-}- fromLeft [] _ejoinAttrs- {-# LINE 14041 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 136, column 9)- _removeJoinAttrs =- {-# LINE 136 "./TypeChecking/TableRefs.ag" #-}- filter (\(n,_) -> n `notElem` _joinNames )- {-# LINE 14046 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 146, column 9)- _ejoinAttrs =- {-# LINE 146 "./TypeChecking/TableRefs.ag" #-}- do- let jns = case (_natIannotatedTree, _onExprIoriginalTree) of- (Natural, _) -> commonFieldNames- (_,Just (JoinUsing _ s)) -> s- _ -> []- tjtsm = map (flip lookup _tblIidLookups) jns- t1jtsm = map (flip lookup _tbl1IidLookups) jns- errorWhen (not $ null $ filter (==Nothing) $ tjtsm ++ t1jtsm)- [MissingJoinAttribute]- let tjts = catMaybes tjtsm- t1jts = catMaybes t1jtsm- resolvedTypes :: [Either [TypeError] Type]- resolvedTypes = map (\(a,b) -> resolveResultSetType _lhsIcat [a,b]) $ zip tjts t1jts- liftErrors $ concat $ lefts resolvedTypes- return $ zip jns $ rights resolvedTypes- where- commonFieldNames = intersect (f _tblIstarExpansion) (f _tbl1IstarExpansion)- where f = map fst- {-# LINE 14068 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 170, column 9)- _joinNames =- {-# LINE 170 "./TypeChecking/TableRefs.ag" #-}- map fst _joinAttrs- {-# LINE 14073 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 171, column 9)- _joinAttrs =- {-# LINE 171 "./TypeChecking/TableRefs.ag" #-}- fromRight [] _ejoinAttrs- {-# LINE 14078 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 176, column 9)- _idLookups =- {-# LINE 176 "./TypeChecking/TableRefs.ag" #-}- _joinAttrs ++- _removeJoinAttrs _tblIidLookups ++- _removeJoinAttrs _tbl1IidLookups- {-# LINE 14085 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 179, column 9)- _qidLookups =- {-# LINE 179 "./TypeChecking/TableRefs.ag" #-}- _tblIqidLookups ++ _tbl1IqidLookups- {-# LINE 14090 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 180, column 9)- _starExpansion =- {-# LINE 180 "./TypeChecking/TableRefs.ag" #-}- _joinAttrs ++- _removeJoinAttrs _tblIstarExpansion ++- _removeJoinAttrs _tbl1IstarExpansion- {-# LINE 14097 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 183, column 9)- _qstarExpansion =- {-# LINE 183 "./TypeChecking/TableRefs.ag" #-}- _tblIqstarExpansion ++ _tbl1IqstarExpansion- {-# LINE 14102 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 187, column 9)- _newLib =- {-# LINE 187 "./TypeChecking/TableRefs.ag" #-}- case updateBindings _lhsIlib _lhsIcat (_libUpdates ++ _lhsIjlibUpdates) of- Left x -> error $ show x- Right e -> e- {-# LINE 14109 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 190, column 9)- _onExprOlib =- {-# LINE 190 "./TypeChecking/TableRefs.ag" #-}- _newLib- {-# LINE 14114 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 192, column 9)- _tblOjlibUpdates =- {-# LINE 192 "./TypeChecking/TableRefs.ag" #-}- _libUpdates- {-# LINE 14119 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 193, column 9)- _tbl1OjlibUpdates =- {-# LINE 193 "./TypeChecking/TableRefs.ag" #-}- _libUpdates- {-# LINE 14124 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 248, column 9)- _lhsOlibUpdates =- {-# LINE 248 "./TypeChecking/TableRefs.ag" #-}- _libUpdates- {-# LINE 14129 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 249, column 9)- _lhsOidLookups =- {-# LINE 249 "./TypeChecking/TableRefs.ag" #-}- _idLookups- {-# LINE 14134 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 250, column 9)- _lhsOqidLookups =- {-# LINE 250 "./TypeChecking/TableRefs.ag" #-}- _qidLookups- {-# LINE 14139 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 251, column 9)- _lhsOstarExpansion =- {-# LINE 251 "./TypeChecking/TableRefs.ag" #-}- _starExpansion- {-# LINE 14144 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 252, column 9)- _lhsOqstarExpansion =- {-# LINE 252 "./TypeChecking/TableRefs.ag" #-}- _qstarExpansion- {-# LINE 14149 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 264, column 9)- _backTree =- {-# LINE 264 "./TypeChecking/TableRefs.ag" #-}- JoinedTref ann_- _tblIannotatedTree- _natIannotatedTree- _joinTypeIannotatedTree- _tbl1IannotatedTree- _onExprIannotatedTree- _aliasIannotatedTree- {-# LINE 14160 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- JoinedTref ann_ _tblIannotatedTree _natIannotatedTree _joinTypeIannotatedTree _tbl1IannotatedTree _onExprIannotatedTree _aliasIannotatedTree- {-# LINE 14165 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- JoinedTref ann_ _tblIoriginalTree _natIoriginalTree _joinTypeIoriginalTree _tbl1IoriginalTree _onExprIoriginalTree _aliasIoriginalTree- {-# LINE 14170 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 14175 "AstInternal.hs" #-}- -- copy rule (down)- _tblOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 14180 "AstInternal.hs" #-}- -- copy rule (down)- _tblOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 14185 "AstInternal.hs" #-}- -- copy rule (down)- _natOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 14190 "AstInternal.hs" #-}- -- copy rule (down)- _natOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 14195 "AstInternal.hs" #-}- -- copy rule (down)- _joinTypeOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 14200 "AstInternal.hs" #-}- -- copy rule (down)- _joinTypeOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 14205 "AstInternal.hs" #-}- -- copy rule (down)- _tbl1Ocat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 14210 "AstInternal.hs" #-}- -- copy rule (down)- _tbl1Olib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 14215 "AstInternal.hs" #-}- -- copy rule (down)- _onExprOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 14220 "AstInternal.hs" #-}- -- copy rule (down)- _aliasOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 14225 "AstInternal.hs" #-}- -- copy rule (down)- _aliasOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 14230 "AstInternal.hs" #-}- ( _tblIannotatedTree,_tblIidLookups,_tblIlibUpdates,_tblIoriginalTree,_tblIqidLookups,_tblIqstarExpansion,_tblIstarExpansion) =- (tbl_ _tblOcat _tblOjlibUpdates _tblOlib )- ( _natIannotatedTree,_natIoriginalTree) =- (nat_ _natOcat _natOlib )- ( _joinTypeIannotatedTree,_joinTypeIoriginalTree) =- (joinType_ _joinTypeOcat _joinTypeOlib )- ( _tbl1IannotatedTree,_tbl1IidLookups,_tbl1IlibUpdates,_tbl1IoriginalTree,_tbl1IqidLookups,_tbl1IqstarExpansion,_tbl1IstarExpansion) =- (tbl1_ _tbl1Ocat _tbl1OjlibUpdates _tbl1Olib )- ( _onExprIannotatedTree,_onExprIoriginalTree) =- (onExpr_ _onExprOcat _onExprOlib )- ( _aliasIannotatedTree,_aliasIoriginalTree) =- (alias_ _aliasOcat _aliasOlib )- in ( _lhsOannotatedTree,_lhsOidLookups,_lhsOlibUpdates,_lhsOoriginalTree,_lhsOqidLookups,_lhsOqstarExpansion,_lhsOstarExpansion)))-sem_TableRef_SubTref :: Annotation ->- T_SelectExpression ->- T_TableAlias ->- T_TableRef -sem_TableRef_SubTref ann_ sel_ alias_ =- (\ _lhsIcat- _lhsIjlibUpdates- _lhsIlib ->- (let _lhsOannotatedTree :: TableRef- _selectAttrs :: (Either [TypeError] [(String,Type)])- _idLookups :: ([(String,Type)])- _qidLookups :: ([(String,[(String,Type)])])- _starExpansion :: ([(String,Type)])- _qstarExpansion :: ([(String,[(String,Type)])])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOidLookups :: ([(String,Type)])- _lhsOqidLookups :: ([(String,[(String,Type)])])- _lhsOstarExpansion :: ([(String,Type)])- _lhsOqstarExpansion :: ([(String,[(String,Type)])])- _lhsOoriginalTree :: TableRef- _selOcat :: Catalog- _selOlib :: LocalIdentifierBindings- _aliasOcat :: Catalog- _aliasOlib :: LocalIdentifierBindings- _selIannotatedTree :: SelectExpression- _selIlibUpdates :: ([LocalIdentifierBindingsUpdate])- _selIoriginalTree :: SelectExpression- _aliasIannotatedTree :: TableAlias- _aliasIoriginalTree :: TableAlias- -- "./TypeChecking/TableRefs.ag"(line 33, column 9)- _lhsOannotatedTree =- {-# LINE 33 "./TypeChecking/TableRefs.ag" #-}- updateAnnotation (map TypeErrorA _errs ++) _backTree- {-# LINE 14277 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 75, column 9)- _libUpdates =- {-# LINE 75 "./TypeChecking/TableRefs.ag" #-}- if null _errs- then [LibStackIDs $ ("", _idLookups ): _qidLookups- ,LibSetStarExpansion $ ("", _starExpansion ): _qstarExpansion ]- else []- {-# LINE 14285 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 92, column 9)- _errs =- {-# LINE 92 "./TypeChecking/TableRefs.ag" #-}- case _selectAttrs of- Left e -> e- Right _ -> []- {-# LINE 14292 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 96, column 9)- _selectAttrs =- {-# LINE 96 "./TypeChecking/TableRefs.ag" #-}- unwrapSetOfComposite (getTypeAnnotation _selIannotatedTree)- {-# LINE 14297 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 98, column 9)- _idLookups =- {-# LINE 98 "./TypeChecking/TableRefs.ag" #-}- fromRight [] _selectAttrs- {-# LINE 14302 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 99, column 9)- _qidLookups =- {-# LINE 99 "./TypeChecking/TableRefs.ag" #-}- [(getAlias "" _aliasIannotatedTree, _idLookups )]- {-# LINE 14307 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 100, column 9)- _starExpansion =- {-# LINE 100 "./TypeChecking/TableRefs.ag" #-}- _idLookups- {-# LINE 14312 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 101, column 9)- _qstarExpansion =- {-# LINE 101 "./TypeChecking/TableRefs.ag" #-}- _qidLookups- {-# LINE 14317 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 248, column 9)- _lhsOlibUpdates =- {-# LINE 248 "./TypeChecking/TableRefs.ag" #-}- _libUpdates- {-# LINE 14322 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 249, column 9)- _lhsOidLookups =- {-# LINE 249 "./TypeChecking/TableRefs.ag" #-}- _idLookups- {-# LINE 14327 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 250, column 9)- _lhsOqidLookups =- {-# LINE 250 "./TypeChecking/TableRefs.ag" #-}- _qidLookups- {-# LINE 14332 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 251, column 9)- _lhsOstarExpansion =- {-# LINE 251 "./TypeChecking/TableRefs.ag" #-}- _starExpansion- {-# LINE 14337 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 252, column 9)- _lhsOqstarExpansion =- {-# LINE 252 "./TypeChecking/TableRefs.ag" #-}- _qstarExpansion- {-# LINE 14342 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 258, column 9)- _backTree =- {-# LINE 258 "./TypeChecking/TableRefs.ag" #-}- SubTref ann_ _selIannotatedTree _aliasIannotatedTree- {-# LINE 14347 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- SubTref ann_ _selIannotatedTree _aliasIannotatedTree- {-# LINE 14352 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- SubTref ann_ _selIoriginalTree _aliasIoriginalTree- {-# LINE 14357 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 14362 "AstInternal.hs" #-}- -- copy rule (down)- _selOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 14367 "AstInternal.hs" #-}- -- copy rule (down)- _selOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 14372 "AstInternal.hs" #-}- -- copy rule (down)- _aliasOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 14377 "AstInternal.hs" #-}- -- copy rule (down)- _aliasOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 14382 "AstInternal.hs" #-}- ( _selIannotatedTree,_selIlibUpdates,_selIoriginalTree) =- (sel_ _selOcat _selOlib )- ( _aliasIannotatedTree,_aliasIoriginalTree) =- (alias_ _aliasOcat _aliasOlib )- in ( _lhsOannotatedTree,_lhsOidLookups,_lhsOlibUpdates,_lhsOoriginalTree,_lhsOqidLookups,_lhsOqstarExpansion,_lhsOstarExpansion)))-sem_TableRef_Tref :: Annotation ->- String ->- T_TableAlias ->- T_TableRef -sem_TableRef_Tref ann_ tbl_ alias_ =- (\ _lhsIcat- _lhsIjlibUpdates- _lhsIlib ->- (let _lhsOannotatedTree :: TableRef- _relType :: (Either [TypeError] ([(String, Type)], [(String, Type)]))- _idLookups :: ([(String,Type)])- _qidLookups :: ([(String,[(String,Type)])])- _starExpansion :: ([(String,Type)])- _qstarExpansion :: ([(String,[(String,Type)])])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOidLookups :: ([(String,Type)])- _lhsOqidLookups :: ([(String,[(String,Type)])])- _lhsOstarExpansion :: ([(String,Type)])- _lhsOqstarExpansion :: ([(String,[(String,Type)])])- _lhsOoriginalTree :: TableRef- _aliasOcat :: Catalog- _aliasOlib :: LocalIdentifierBindings- _aliasIannotatedTree :: TableAlias- _aliasIoriginalTree :: TableAlias- -- "./TypeChecking/TableRefs.ag"(line 33, column 9)- _lhsOannotatedTree =- {-# LINE 33 "./TypeChecking/TableRefs.ag" #-}- updateAnnotation (map TypeErrorA _errs ++) _backTree- {-# LINE 14416 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 75, column 9)- _libUpdates =- {-# LINE 75 "./TypeChecking/TableRefs.ag" #-}- if null _errs- then [LibStackIDs $ ("", _idLookups ): _qidLookups- ,LibSetStarExpansion $ ("", _starExpansion ): _qstarExpansion ]- else []- {-# LINE 14424 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 104, column 9)- _errs =- {-# LINE 104 "./TypeChecking/TableRefs.ag" #-}- case _relType of- Left e -> e- Right _ -> []- {-# LINE 14431 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 108, column 9)- _relType =- {-# LINE 108 "./TypeChecking/TableRefs.ag" #-}- catCompositeAttrsPair _lhsIcat [] tbl_- {-# LINE 14436 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 109, column 9)- _relType1 =- {-# LINE 109 "./TypeChecking/TableRefs.ag" #-}- fromRight ([],[]) _relType- {-# LINE 14441 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 110, column 9)- _pAttrs =- {-# LINE 110 "./TypeChecking/TableRefs.ag" #-}- fst _relType1- {-# LINE 14446 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 111, column 9)- _sAttrs =- {-# LINE 111 "./TypeChecking/TableRefs.ag" #-}- snd _relType1- {-# LINE 14451 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 113, column 9)- _idLookups =- {-# LINE 113 "./TypeChecking/TableRefs.ag" #-}- _pAttrs ++ _sAttrs- {-# LINE 14456 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 114, column 9)- _alias =- {-# LINE 114 "./TypeChecking/TableRefs.ag" #-}- getAlias tbl_ _aliasIannotatedTree- {-# LINE 14461 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 115, column 9)- _qidLookups =- {-# LINE 115 "./TypeChecking/TableRefs.ag" #-}- [(_alias , _idLookups )]- {-# LINE 14466 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 116, column 9)- _starExpansion =- {-# LINE 116 "./TypeChecking/TableRefs.ag" #-}- _pAttrs- {-# LINE 14471 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 117, column 9)- _qstarExpansion =- {-# LINE 117 "./TypeChecking/TableRefs.ag" #-}- [(_alias , _pAttrs )]- {-# LINE 14476 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 248, column 9)- _lhsOlibUpdates =- {-# LINE 248 "./TypeChecking/TableRefs.ag" #-}- _libUpdates- {-# LINE 14481 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 249, column 9)- _lhsOidLookups =- {-# LINE 249 "./TypeChecking/TableRefs.ag" #-}- _idLookups- {-# LINE 14486 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 250, column 9)- _lhsOqidLookups =- {-# LINE 250 "./TypeChecking/TableRefs.ag" #-}- _qidLookups- {-# LINE 14491 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 251, column 9)- _lhsOstarExpansion =- {-# LINE 251 "./TypeChecking/TableRefs.ag" #-}- _starExpansion- {-# LINE 14496 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 252, column 9)- _lhsOqstarExpansion =- {-# LINE 252 "./TypeChecking/TableRefs.ag" #-}- _qstarExpansion- {-# LINE 14501 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 260, column 9)- _backTree =- {-# LINE 260 "./TypeChecking/TableRefs.ag" #-}- Tref ann_ tbl_ _aliasIannotatedTree- {-# LINE 14506 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Tref ann_ tbl_ _aliasIannotatedTree- {-# LINE 14511 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Tref ann_ tbl_ _aliasIoriginalTree- {-# LINE 14516 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 14521 "AstInternal.hs" #-}- -- copy rule (down)- _aliasOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 14526 "AstInternal.hs" #-}- -- copy rule (down)- _aliasOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 14531 "AstInternal.hs" #-}- ( _aliasIannotatedTree,_aliasIoriginalTree) =- (alias_ _aliasOcat _aliasOlib )- in ( _lhsOannotatedTree,_lhsOidLookups,_lhsOlibUpdates,_lhsOoriginalTree,_lhsOqidLookups,_lhsOqstarExpansion,_lhsOstarExpansion)))-sem_TableRef_TrefFun :: Annotation ->- T_Expression ->- T_TableAlias ->- T_TableRef -sem_TableRef_TrefFun ann_ fn_ alias_ =- (\ _lhsIcat- _lhsIjlibUpdates- _lhsIlib ->- (let _lhsOannotatedTree :: TableRef- _eqfunIdens :: (Either [TypeError] (String,[(String,Type)]))- _idLookups :: ([(String,Type)])- _qidLookups :: ([(String,[(String,Type)])])- _starExpansion :: ([(String,Type)])- _qstarExpansion :: ([(String,[(String,Type)])])- _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOidLookups :: ([(String,Type)])- _lhsOqidLookups :: ([(String,[(String,Type)])])- _lhsOstarExpansion :: ([(String,Type)])- _lhsOqstarExpansion :: ([(String,[(String,Type)])])- _lhsOoriginalTree :: TableRef- _fnOcat :: Catalog- _fnOlib :: LocalIdentifierBindings- _aliasOcat :: Catalog- _aliasOlib :: LocalIdentifierBindings- _fnIannotatedTree :: Expression- _fnIliftedColumnName :: String- _fnIoriginalTree :: Expression- _aliasIannotatedTree :: TableAlias- _aliasIoriginalTree :: TableAlias- -- "./TypeChecking/TableRefs.ag"(line 33, column 9)- _lhsOannotatedTree =- {-# LINE 33 "./TypeChecking/TableRefs.ag" #-}- updateAnnotation (map TypeErrorA _errs ++) _backTree- {-# LINE 14568 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 75, column 9)- _libUpdates =- {-# LINE 75 "./TypeChecking/TableRefs.ag" #-}- if null _errs- then [LibStackIDs $ ("", _idLookups ): _qidLookups- ,LibSetStarExpansion $ ("", _starExpansion ): _qstarExpansion ]- else []- {-# LINE 14576 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 120, column 9)- _errs =- {-# LINE 120 "./TypeChecking/TableRefs.ag" #-}- case _eqfunIdens of- Left e -> e- Right _ -> []- {-# LINE 14583 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 124, column 9)- _eqfunIdens =- {-# LINE 124 "./TypeChecking/TableRefs.ag" #-}- funIdens _lhsIcat _alias _fnIannotatedTree- {-# LINE 14588 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 125, column 9)- _qfunIdens =- {-# LINE 125 "./TypeChecking/TableRefs.ag" #-}- fromRight ("",[]) _eqfunIdens- {-# LINE 14593 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 126, column 9)- _alias2 =- {-# LINE 126 "./TypeChecking/TableRefs.ag" #-}- fst _qfunIdens- {-# LINE 14598 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 127, column 9)- _funIdens =- {-# LINE 127 "./TypeChecking/TableRefs.ag" #-}- snd _qfunIdens- {-# LINE 14603 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 128, column 9)- _alias =- {-# LINE 128 "./TypeChecking/TableRefs.ag" #-}- getAlias "" _aliasIannotatedTree- {-# LINE 14608 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 130, column 9)- _idLookups =- {-# LINE 130 "./TypeChecking/TableRefs.ag" #-}- _funIdens- {-# LINE 14613 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 131, column 9)- _qidLookups =- {-# LINE 131 "./TypeChecking/TableRefs.ag" #-}- [(_alias2, _idLookups )]- {-# LINE 14618 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 132, column 9)- _starExpansion =- {-# LINE 132 "./TypeChecking/TableRefs.ag" #-}- _idLookups- {-# LINE 14623 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 133, column 9)- _qstarExpansion =- {-# LINE 133 "./TypeChecking/TableRefs.ag" #-}- _qidLookups- {-# LINE 14628 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 248, column 9)- _lhsOlibUpdates =- {-# LINE 248 "./TypeChecking/TableRefs.ag" #-}- _libUpdates- {-# LINE 14633 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 249, column 9)- _lhsOidLookups =- {-# LINE 249 "./TypeChecking/TableRefs.ag" #-}- _idLookups- {-# LINE 14638 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 250, column 9)- _lhsOqidLookups =- {-# LINE 250 "./TypeChecking/TableRefs.ag" #-}- _qidLookups- {-# LINE 14643 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 251, column 9)- _lhsOstarExpansion =- {-# LINE 251 "./TypeChecking/TableRefs.ag" #-}- _starExpansion- {-# LINE 14648 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 252, column 9)- _lhsOqstarExpansion =- {-# LINE 252 "./TypeChecking/TableRefs.ag" #-}- _qstarExpansion- {-# LINE 14653 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 262, column 9)- _backTree =- {-# LINE 262 "./TypeChecking/TableRefs.ag" #-}- TrefFun ann_ _fnIannotatedTree _aliasIannotatedTree- {-# LINE 14658 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- TrefFun ann_ _fnIannotatedTree _aliasIannotatedTree- {-# LINE 14663 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- TrefFun ann_ _fnIoriginalTree _aliasIoriginalTree- {-# LINE 14668 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 14673 "AstInternal.hs" #-}- -- copy rule (down)- _fnOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 14678 "AstInternal.hs" #-}- -- copy rule (down)- _fnOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 14683 "AstInternal.hs" #-}- -- copy rule (down)- _aliasOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 14688 "AstInternal.hs" #-}- -- copy rule (down)- _aliasOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 14693 "AstInternal.hs" #-}- ( _fnIannotatedTree,_fnIliftedColumnName,_fnIoriginalTree) =- (fn_ _fnOcat _fnOlib )- ( _aliasIannotatedTree,_aliasIoriginalTree) =- (alias_ _aliasOcat _aliasOlib )- in ( _lhsOannotatedTree,_lhsOidLookups,_lhsOlibUpdates,_lhsOoriginalTree,_lhsOqidLookups,_lhsOqstarExpansion,_lhsOstarExpansion)))--- TableRefList -------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - libUpdates : [LocalIdentifierBindingsUpdate]- originalTree : SELF - alternatives:- alternative Cons:- child hd : TableRef - child tl : TableRefList - visit 0:- local annotatedTree : _- local originalTree : _- alternative Nil:- visit 0:- local annotatedTree : _- local originalTree : _--}-type TableRefList = [(TableRef)]--- cata-sem_TableRefList :: TableRefList ->- T_TableRefList -sem_TableRefList list =- (Prelude.foldr sem_TableRefList_Cons sem_TableRefList_Nil (Prelude.map sem_TableRef list) )--- semantic domain-type T_TableRefList = Catalog ->- LocalIdentifierBindings ->- ( TableRefList,([LocalIdentifierBindingsUpdate]),TableRefList)-data Inh_TableRefList = Inh_TableRefList {cat_Inh_TableRefList :: Catalog,lib_Inh_TableRefList :: LocalIdentifierBindings}-data Syn_TableRefList = Syn_TableRefList {annotatedTree_Syn_TableRefList :: TableRefList,libUpdates_Syn_TableRefList :: [LocalIdentifierBindingsUpdate],originalTree_Syn_TableRefList :: TableRefList}-wrap_TableRefList :: T_TableRefList ->- Inh_TableRefList ->- Syn_TableRefList -wrap_TableRefList sem (Inh_TableRefList _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOlibUpdates,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_TableRefList _lhsOannotatedTree _lhsOlibUpdates _lhsOoriginalTree ))-sem_TableRefList_Cons :: T_TableRef ->- T_TableRefList ->- T_TableRefList -sem_TableRefList_Cons hd_ tl_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _hdOjlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: TableRefList- _lhsOoriginalTree :: TableRefList- _hdOcat :: Catalog- _hdOlib :: LocalIdentifierBindings- _tlOcat :: Catalog- _tlOlib :: LocalIdentifierBindings- _hdIannotatedTree :: TableRef- _hdIidLookups :: ([(String,Type)])- _hdIlibUpdates :: ([LocalIdentifierBindingsUpdate])- _hdIoriginalTree :: TableRef- _hdIqidLookups :: ([(String,[(String,Type)])])- _hdIqstarExpansion :: ([(String,[(String,Type)])])- _hdIstarExpansion :: ([(String,Type)])- _tlIannotatedTree :: TableRefList- _tlIlibUpdates :: ([LocalIdentifierBindingsUpdate])- _tlIoriginalTree :: TableRefList- -- "./TypeChecking/TableRefs.ag"(line 40, column 9)- _lhsOlibUpdates =- {-# LINE 40 "./TypeChecking/TableRefs.ag" #-}- _hdIlibUpdates- {-# LINE 14768 "AstInternal.hs" #-}- -- "./TypeChecking/TableRefs.ag"(line 197, column 12)- _hdOjlibUpdates =- {-# LINE 197 "./TypeChecking/TableRefs.ag" #-}- []- {-# LINE 14773 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIannotatedTree _tlIannotatedTree- {-# LINE 14778 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIoriginalTree _tlIoriginalTree- {-# LINE 14783 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 14788 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 14793 "AstInternal.hs" #-}- -- copy rule (down)- _hdOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 14798 "AstInternal.hs" #-}- -- copy rule (down)- _hdOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 14803 "AstInternal.hs" #-}- -- copy rule (down)- _tlOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 14808 "AstInternal.hs" #-}- -- copy rule (down)- _tlOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 14813 "AstInternal.hs" #-}- ( _hdIannotatedTree,_hdIidLookups,_hdIlibUpdates,_hdIoriginalTree,_hdIqidLookups,_hdIqstarExpansion,_hdIstarExpansion) =- (hd_ _hdOcat _hdOjlibUpdates _hdOlib )- ( _tlIannotatedTree,_tlIlibUpdates,_tlIoriginalTree) =- (tl_ _tlOcat _tlOlib )- in ( _lhsOannotatedTree,_lhsOlibUpdates,_lhsOoriginalTree)))-sem_TableRefList_Nil :: T_TableRefList -sem_TableRefList_Nil =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOlibUpdates :: ([LocalIdentifierBindingsUpdate])- _lhsOannotatedTree :: TableRefList- _lhsOoriginalTree :: TableRefList- -- "./TypeChecking/TableRefs.ag"(line 38, column 9)- _lhsOlibUpdates =- {-# LINE 38 "./TypeChecking/TableRefs.ag" #-}- []- {-# LINE 14830 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 14835 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 14840 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 14845 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 14850 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOlibUpdates,_lhsOoriginalTree)))--- TriggerEvent -------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative TDelete:- visit 0:- local annotatedTree : _- local originalTree : _- alternative TInsert:- visit 0:- local annotatedTree : _- local originalTree : _- alternative TUpdate:- visit 0:- local annotatedTree : _- local originalTree : _--}-data TriggerEvent = TDelete - | TInsert - | TUpdate - deriving ( Data,Eq,Show,Typeable)--- cata-sem_TriggerEvent :: TriggerEvent ->- T_TriggerEvent -sem_TriggerEvent (TDelete ) =- (sem_TriggerEvent_TDelete )-sem_TriggerEvent (TInsert ) =- (sem_TriggerEvent_TInsert )-sem_TriggerEvent (TUpdate ) =- (sem_TriggerEvent_TUpdate )--- semantic domain-type T_TriggerEvent = Catalog ->- LocalIdentifierBindings ->- ( TriggerEvent,TriggerEvent)-data Inh_TriggerEvent = Inh_TriggerEvent {cat_Inh_TriggerEvent :: Catalog,lib_Inh_TriggerEvent :: LocalIdentifierBindings}-data Syn_TriggerEvent = Syn_TriggerEvent {annotatedTree_Syn_TriggerEvent :: TriggerEvent,originalTree_Syn_TriggerEvent :: TriggerEvent}-wrap_TriggerEvent :: T_TriggerEvent ->- Inh_TriggerEvent ->- Syn_TriggerEvent -wrap_TriggerEvent sem (Inh_TriggerEvent _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_TriggerEvent _lhsOannotatedTree _lhsOoriginalTree ))-sem_TriggerEvent_TDelete :: T_TriggerEvent -sem_TriggerEvent_TDelete =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: TriggerEvent- _lhsOoriginalTree :: TriggerEvent- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- TDelete- {-# LINE 14911 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- TDelete- {-# LINE 14916 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 14921 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 14926 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_TriggerEvent_TInsert :: T_TriggerEvent -sem_TriggerEvent_TInsert =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: TriggerEvent- _lhsOoriginalTree :: TriggerEvent- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- TInsert- {-# LINE 14938 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- TInsert- {-# LINE 14943 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 14948 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 14953 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_TriggerEvent_TUpdate :: T_TriggerEvent -sem_TriggerEvent_TUpdate =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: TriggerEvent- _lhsOoriginalTree :: TriggerEvent- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- TUpdate- {-# LINE 14965 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- TUpdate- {-# LINE 14970 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 14975 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 14980 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- TriggerFire --------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative EachRow:- visit 0:- local annotatedTree : _- local originalTree : _- alternative EachStatement:- visit 0:- local annotatedTree : _- local originalTree : _--}-data TriggerFire = EachRow - | EachStatement - deriving ( Data,Eq,Show,Typeable)--- cata-sem_TriggerFire :: TriggerFire ->- T_TriggerFire -sem_TriggerFire (EachRow ) =- (sem_TriggerFire_EachRow )-sem_TriggerFire (EachStatement ) =- (sem_TriggerFire_EachStatement )--- semantic domain-type T_TriggerFire = Catalog ->- LocalIdentifierBindings ->- ( TriggerFire,TriggerFire)-data Inh_TriggerFire = Inh_TriggerFire {cat_Inh_TriggerFire :: Catalog,lib_Inh_TriggerFire :: LocalIdentifierBindings}-data Syn_TriggerFire = Syn_TriggerFire {annotatedTree_Syn_TriggerFire :: TriggerFire,originalTree_Syn_TriggerFire :: TriggerFire}-wrap_TriggerFire :: T_TriggerFire ->- Inh_TriggerFire ->- Syn_TriggerFire -wrap_TriggerFire sem (Inh_TriggerFire _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_TriggerFire _lhsOannotatedTree _lhsOoriginalTree ))-sem_TriggerFire_EachRow :: T_TriggerFire -sem_TriggerFire_EachRow =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: TriggerFire- _lhsOoriginalTree :: TriggerFire- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- EachRow- {-# LINE 15034 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- EachRow- {-# LINE 15039 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 15044 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 15049 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_TriggerFire_EachStatement :: T_TriggerFire -sem_TriggerFire_EachStatement =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: TriggerFire- _lhsOoriginalTree :: TriggerFire- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- EachStatement- {-# LINE 15061 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- EachStatement- {-# LINE 15066 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 15071 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 15076 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- TriggerWhen --------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative TriggerAfter:- visit 0:- local annotatedTree : _- local originalTree : _- alternative TriggerBefore:- visit 0:- local annotatedTree : _- local originalTree : _--}-data TriggerWhen = TriggerAfter - | TriggerBefore - deriving ( Data,Eq,Show,Typeable)--- cata-sem_TriggerWhen :: TriggerWhen ->- T_TriggerWhen -sem_TriggerWhen (TriggerAfter ) =- (sem_TriggerWhen_TriggerAfter )-sem_TriggerWhen (TriggerBefore ) =- (sem_TriggerWhen_TriggerBefore )--- semantic domain-type T_TriggerWhen = Catalog ->- LocalIdentifierBindings ->- ( TriggerWhen,TriggerWhen)-data Inh_TriggerWhen = Inh_TriggerWhen {cat_Inh_TriggerWhen :: Catalog,lib_Inh_TriggerWhen :: LocalIdentifierBindings}-data Syn_TriggerWhen = Syn_TriggerWhen {annotatedTree_Syn_TriggerWhen :: TriggerWhen,originalTree_Syn_TriggerWhen :: TriggerWhen}-wrap_TriggerWhen :: T_TriggerWhen ->- Inh_TriggerWhen ->- Syn_TriggerWhen -wrap_TriggerWhen sem (Inh_TriggerWhen _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_TriggerWhen _lhsOannotatedTree _lhsOoriginalTree ))-sem_TriggerWhen_TriggerAfter :: T_TriggerWhen -sem_TriggerWhen_TriggerAfter =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: TriggerWhen- _lhsOoriginalTree :: TriggerWhen- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- TriggerAfter- {-# LINE 15130 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- TriggerAfter- {-# LINE 15135 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 15140 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 15145 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_TriggerWhen_TriggerBefore :: T_TriggerWhen -sem_TriggerWhen_TriggerBefore =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: TriggerWhen- _lhsOoriginalTree :: TriggerWhen- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- TriggerBefore- {-# LINE 15157 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- TriggerBefore- {-# LINE 15162 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 15167 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 15172 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))--- TypeAttributeDef ---------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - attrName : String- namedType : Type- originalTree : SELF - alternatives:- alternative TypeAttDef:- child ann : {Annotation}- child name : {String}- child typ : TypeName - visit 0:- local annotatedTree : _- local originalTree : _--}-data TypeAttributeDef = TypeAttDef (Annotation) (String) (TypeName) - deriving ( Data,Eq,Show,Typeable)--- cata-sem_TypeAttributeDef :: TypeAttributeDef ->- T_TypeAttributeDef -sem_TypeAttributeDef (TypeAttDef _ann _name _typ ) =- (sem_TypeAttributeDef_TypeAttDef _ann _name (sem_TypeName _typ ) )--- semantic domain-type T_TypeAttributeDef = Catalog ->- LocalIdentifierBindings ->- ( TypeAttributeDef,String,Type,TypeAttributeDef)-data Inh_TypeAttributeDef = Inh_TypeAttributeDef {cat_Inh_TypeAttributeDef :: Catalog,lib_Inh_TypeAttributeDef :: LocalIdentifierBindings}-data Syn_TypeAttributeDef = Syn_TypeAttributeDef {annotatedTree_Syn_TypeAttributeDef :: TypeAttributeDef,attrName_Syn_TypeAttributeDef :: String,namedType_Syn_TypeAttributeDef :: Type,originalTree_Syn_TypeAttributeDef :: TypeAttributeDef}-wrap_TypeAttributeDef :: T_TypeAttributeDef ->- Inh_TypeAttributeDef ->- Syn_TypeAttributeDef -wrap_TypeAttributeDef sem (Inh_TypeAttributeDef _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOattrName,_lhsOnamedType,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_TypeAttributeDef _lhsOannotatedTree _lhsOattrName _lhsOnamedType _lhsOoriginalTree ))-sem_TypeAttributeDef_TypeAttDef :: Annotation ->- String ->- T_TypeName ->- T_TypeAttributeDef -sem_TypeAttributeDef_TypeAttDef ann_ name_ typ_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOattrName :: String- _lhsOnamedType :: Type- _lhsOannotatedTree :: TypeAttributeDef- _lhsOoriginalTree :: TypeAttributeDef- _typOcat :: Catalog- _typOlib :: LocalIdentifierBindings- _typIannotatedTree :: TypeName- _typInamedType :: Type- _typIoriginalTree :: TypeName- -- "./TypeChecking/MiscCreates.ag"(line 40, column 9)- _lhsOattrName =- {-# LINE 40 "./TypeChecking/MiscCreates.ag" #-}- name_- {-# LINE 15234 "AstInternal.hs" #-}- -- "./TypeChecking/MiscCreates.ag"(line 41, column 9)- _lhsOnamedType =- {-# LINE 41 "./TypeChecking/MiscCreates.ag" #-}- _typInamedType- {-# LINE 15239 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- TypeAttDef ann_ name_ _typIannotatedTree- {-# LINE 15244 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- TypeAttDef ann_ name_ _typIoriginalTree- {-# LINE 15249 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 15254 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 15259 "AstInternal.hs" #-}- -- copy rule (down)- _typOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 15264 "AstInternal.hs" #-}- -- copy rule (down)- _typOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 15269 "AstInternal.hs" #-}- ( _typIannotatedTree,_typInamedType,_typIoriginalTree) =- (typ_ _typOcat _typOlib )- in ( _lhsOannotatedTree,_lhsOattrName,_lhsOnamedType,_lhsOoriginalTree)))--- TypeAttributeDefList -----------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - attrs : [(String, Type)]- originalTree : SELF - alternatives:- alternative Cons:- child hd : TypeAttributeDef - child tl : TypeAttributeDefList - visit 0:- local annotatedTree : _- local originalTree : _- alternative Nil:- visit 0:- local annotatedTree : _- local originalTree : _--}-type TypeAttributeDefList = [(TypeAttributeDef)]--- cata-sem_TypeAttributeDefList :: TypeAttributeDefList ->- T_TypeAttributeDefList -sem_TypeAttributeDefList list =- (Prelude.foldr sem_TypeAttributeDefList_Cons sem_TypeAttributeDefList_Nil (Prelude.map sem_TypeAttributeDef list) )--- semantic domain-type T_TypeAttributeDefList = Catalog ->- LocalIdentifierBindings ->- ( TypeAttributeDefList,([(String, Type)]),TypeAttributeDefList)-data Inh_TypeAttributeDefList = Inh_TypeAttributeDefList {cat_Inh_TypeAttributeDefList :: Catalog,lib_Inh_TypeAttributeDefList :: LocalIdentifierBindings}-data Syn_TypeAttributeDefList = Syn_TypeAttributeDefList {annotatedTree_Syn_TypeAttributeDefList :: TypeAttributeDefList,attrs_Syn_TypeAttributeDefList :: [(String, Type)],originalTree_Syn_TypeAttributeDefList :: TypeAttributeDefList}-wrap_TypeAttributeDefList :: T_TypeAttributeDefList ->- Inh_TypeAttributeDefList ->- Syn_TypeAttributeDefList -wrap_TypeAttributeDefList sem (Inh_TypeAttributeDefList _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOattrs,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_TypeAttributeDefList _lhsOannotatedTree _lhsOattrs _lhsOoriginalTree ))-sem_TypeAttributeDefList_Cons :: T_TypeAttributeDef ->- T_TypeAttributeDefList ->- T_TypeAttributeDefList -sem_TypeAttributeDefList_Cons hd_ tl_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOattrs :: ([(String, Type)])- _lhsOannotatedTree :: TypeAttributeDefList- _lhsOoriginalTree :: TypeAttributeDefList- _hdOcat :: Catalog- _hdOlib :: LocalIdentifierBindings- _tlOcat :: Catalog- _tlOlib :: LocalIdentifierBindings- _hdIannotatedTree :: TypeAttributeDef- _hdIattrName :: String- _hdInamedType :: Type- _hdIoriginalTree :: TypeAttributeDef- _tlIannotatedTree :: TypeAttributeDefList- _tlIattrs :: ([(String, Type)])- _tlIoriginalTree :: TypeAttributeDefList- -- "./TypeChecking/MiscCreates.ag"(line 46, column 12)- _lhsOattrs =- {-# LINE 46 "./TypeChecking/MiscCreates.ag" #-}- (_hdIattrName, _hdInamedType) : _tlIattrs- {-# LINE 15338 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIannotatedTree _tlIannotatedTree- {-# LINE 15343 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIoriginalTree _tlIoriginalTree- {-# LINE 15348 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 15353 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 15358 "AstInternal.hs" #-}- -- copy rule (down)- _hdOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 15363 "AstInternal.hs" #-}- -- copy rule (down)- _hdOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 15368 "AstInternal.hs" #-}- -- copy rule (down)- _tlOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 15373 "AstInternal.hs" #-}- -- copy rule (down)- _tlOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 15378 "AstInternal.hs" #-}- ( _hdIannotatedTree,_hdIattrName,_hdInamedType,_hdIoriginalTree) =- (hd_ _hdOcat _hdOlib )- ( _tlIannotatedTree,_tlIattrs,_tlIoriginalTree) =- (tl_ _tlOcat _tlOlib )- in ( _lhsOannotatedTree,_lhsOattrs,_lhsOoriginalTree)))-sem_TypeAttributeDefList_Nil :: T_TypeAttributeDefList -sem_TypeAttributeDefList_Nil =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOattrs :: ([(String, Type)])- _lhsOannotatedTree :: TypeAttributeDefList- _lhsOoriginalTree :: TypeAttributeDefList- -- "./TypeChecking/MiscCreates.ag"(line 47, column 11)- _lhsOattrs =- {-# LINE 47 "./TypeChecking/MiscCreates.ag" #-}- []- {-# LINE 15395 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 15400 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 15405 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 15410 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 15415 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOattrs,_lhsOoriginalTree)))--- TypeName -----------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - namedType : Type- originalTree : SELF - alternatives:- alternative ArrayTypeName:- child ann : {Annotation}- child typ : TypeName - visit 0:- local tpe : _- local backTree : _- local annotatedTree : _- local originalTree : _- alternative PrecTypeName:- child ann : {Annotation}- child tn : {String}- child prec : {Integer}- visit 0:- local tpe : _- local backTree : _- local annotatedTree : _- local originalTree : _- alternative SetOfTypeName:- child ann : {Annotation}- child typ : TypeName - visit 0:- local tpe : _- local backTree : _- local annotatedTree : _- local originalTree : _- alternative SimpleTypeName:- child ann : {Annotation}- child tn : {String}- visit 0:- local tpe : _- local backTree : _- local annotatedTree : _- local originalTree : _--}-data TypeName = ArrayTypeName (Annotation) (TypeName) - | PrecTypeName (Annotation) (String) (Integer) - | SetOfTypeName (Annotation) (TypeName) - | SimpleTypeName (Annotation) (String) - deriving ( Data,Eq,Show,Typeable)--- cata-sem_TypeName :: TypeName ->- T_TypeName -sem_TypeName (ArrayTypeName _ann _typ ) =- (sem_TypeName_ArrayTypeName _ann (sem_TypeName _typ ) )-sem_TypeName (PrecTypeName _ann _tn _prec ) =- (sem_TypeName_PrecTypeName _ann _tn _prec )-sem_TypeName (SetOfTypeName _ann _typ ) =- (sem_TypeName_SetOfTypeName _ann (sem_TypeName _typ ) )-sem_TypeName (SimpleTypeName _ann _tn ) =- (sem_TypeName_SimpleTypeName _ann _tn )--- semantic domain-type T_TypeName = Catalog ->- LocalIdentifierBindings ->- ( TypeName,Type,TypeName)-data Inh_TypeName = Inh_TypeName {cat_Inh_TypeName :: Catalog,lib_Inh_TypeName :: LocalIdentifierBindings}-data Syn_TypeName = Syn_TypeName {annotatedTree_Syn_TypeName :: TypeName,namedType_Syn_TypeName :: Type,originalTree_Syn_TypeName :: TypeName}-wrap_TypeName :: T_TypeName ->- Inh_TypeName ->- Syn_TypeName -wrap_TypeName sem (Inh_TypeName _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOnamedType,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_TypeName _lhsOannotatedTree _lhsOnamedType _lhsOoriginalTree ))-sem_TypeName_ArrayTypeName :: Annotation ->- T_TypeName ->- T_TypeName -sem_TypeName_ArrayTypeName ann_ typ_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOnamedType :: Type- _lhsOannotatedTree :: TypeName- _lhsOoriginalTree :: TypeName- _typOcat :: Catalog- _typOlib :: LocalIdentifierBindings- _typIannotatedTree :: TypeName- _typInamedType :: Type- _typIoriginalTree :: TypeName- -- "./TypeChecking/Misc.ag"(line 19, column 10)- _lhsOnamedType =- {-# LINE 19 "./TypeChecking/Misc.ag" #-}- tpeToT _tpe- {-# LINE 15509 "AstInternal.hs" #-}- -- "./TypeChecking/Misc.ag"(line 20, column 10)- _lhsOannotatedTree =- {-# LINE 20 "./TypeChecking/Misc.ag" #-}- updateAnnotation- ((map TypeErrorA $ getErrors _tpe ) ++)- _backTree- {-# LINE 15516 "AstInternal.hs" #-}- -- "./TypeChecking/Misc.ag"(line 30, column 9)- _tpe =- {-# LINE 30 "./TypeChecking/Misc.ag" #-}- dependsOnRTpe [_typInamedType] $ Right $ ArrayType _typInamedType- {-# LINE 15521 "AstInternal.hs" #-}- -- "./TypeChecking/Misc.ag"(line 31, column 9)- _backTree =- {-# LINE 31 "./TypeChecking/Misc.ag" #-}- ArrayTypeName ann_ _typIannotatedTree- {-# LINE 15526 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- ArrayTypeName ann_ _typIannotatedTree- {-# LINE 15531 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- ArrayTypeName ann_ _typIoriginalTree- {-# LINE 15536 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 15541 "AstInternal.hs" #-}- -- copy rule (down)- _typOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 15546 "AstInternal.hs" #-}- -- copy rule (down)- _typOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 15551 "AstInternal.hs" #-}- ( _typIannotatedTree,_typInamedType,_typIoriginalTree) =- (typ_ _typOcat _typOlib )- in ( _lhsOannotatedTree,_lhsOnamedType,_lhsOoriginalTree)))-sem_TypeName_PrecTypeName :: Annotation ->- String ->- Integer ->- T_TypeName -sem_TypeName_PrecTypeName ann_ tn_ prec_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOnamedType :: Type- _lhsOannotatedTree :: TypeName- _lhsOoriginalTree :: TypeName- -- "./TypeChecking/Misc.ag"(line 19, column 10)- _lhsOnamedType =- {-# LINE 19 "./TypeChecking/Misc.ag" #-}- tpeToT _tpe- {-# LINE 15569 "AstInternal.hs" #-}- -- "./TypeChecking/Misc.ag"(line 20, column 10)- _lhsOannotatedTree =- {-# LINE 20 "./TypeChecking/Misc.ag" #-}- updateAnnotation- ((map TypeErrorA $ getErrors _tpe ) ++)- _backTree- {-# LINE 15576 "AstInternal.hs" #-}- -- "./TypeChecking/Misc.ag"(line 36, column 9)- _tpe =- {-# LINE 36 "./TypeChecking/Misc.ag" #-}- catLookupType _lhsIcat $ canonicalizeTypeName tn_- {-# LINE 15581 "AstInternal.hs" #-}- -- "./TypeChecking/Misc.ag"(line 37, column 9)- _backTree =- {-# LINE 37 "./TypeChecking/Misc.ag" #-}- PrecTypeName ann_ tn_ prec_- {-# LINE 15586 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- PrecTypeName ann_ tn_ prec_- {-# LINE 15591 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- PrecTypeName ann_ tn_ prec_- {-# LINE 15596 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 15601 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOnamedType,_lhsOoriginalTree)))-sem_TypeName_SetOfTypeName :: Annotation ->- T_TypeName ->- T_TypeName -sem_TypeName_SetOfTypeName ann_ typ_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOnamedType :: Type- _lhsOannotatedTree :: TypeName- _lhsOoriginalTree :: TypeName- _typOcat :: Catalog- _typOlib :: LocalIdentifierBindings- _typIannotatedTree :: TypeName- _typInamedType :: Type- _typIoriginalTree :: TypeName- -- "./TypeChecking/Misc.ag"(line 19, column 10)- _lhsOnamedType =- {-# LINE 19 "./TypeChecking/Misc.ag" #-}- tpeToT _tpe- {-# LINE 15621 "AstInternal.hs" #-}- -- "./TypeChecking/Misc.ag"(line 20, column 10)- _lhsOannotatedTree =- {-# LINE 20 "./TypeChecking/Misc.ag" #-}- updateAnnotation- ((map TypeErrorA $ getErrors _tpe ) ++)- _backTree- {-# LINE 15628 "AstInternal.hs" #-}- -- "./TypeChecking/Misc.ag"(line 33, column 9)- _tpe =- {-# LINE 33 "./TypeChecking/Misc.ag" #-}- dependsOnRTpe [_typInamedType] $ Right $ SetOfType _typInamedType- {-# LINE 15633 "AstInternal.hs" #-}- -- "./TypeChecking/Misc.ag"(line 34, column 9)- _backTree =- {-# LINE 34 "./TypeChecking/Misc.ag" #-}- SetOfTypeName ann_ _typIannotatedTree- {-# LINE 15638 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- SetOfTypeName ann_ _typIannotatedTree- {-# LINE 15643 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- SetOfTypeName ann_ _typIoriginalTree- {-# LINE 15648 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 15653 "AstInternal.hs" #-}- -- copy rule (down)- _typOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 15658 "AstInternal.hs" #-}- -- copy rule (down)- _typOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 15663 "AstInternal.hs" #-}- ( _typIannotatedTree,_typInamedType,_typIoriginalTree) =- (typ_ _typOcat _typOlib )- in ( _lhsOannotatedTree,_lhsOnamedType,_lhsOoriginalTree)))-sem_TypeName_SimpleTypeName :: Annotation ->- String ->- T_TypeName -sem_TypeName_SimpleTypeName ann_ tn_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOnamedType :: Type- _lhsOannotatedTree :: TypeName- _lhsOoriginalTree :: TypeName- -- "./TypeChecking/Misc.ag"(line 19, column 10)- _lhsOnamedType =- {-# LINE 19 "./TypeChecking/Misc.ag" #-}- tpeToT _tpe- {-# LINE 15680 "AstInternal.hs" #-}- -- "./TypeChecking/Misc.ag"(line 20, column 10)- _lhsOannotatedTree =- {-# LINE 20 "./TypeChecking/Misc.ag" #-}- updateAnnotation- ((map TypeErrorA $ getErrors _tpe ) ++)- _backTree- {-# LINE 15687 "AstInternal.hs" #-}- -- "./TypeChecking/Misc.ag"(line 27, column 9)- _tpe =- {-# LINE 27 "./TypeChecking/Misc.ag" #-}- catLookupType _lhsIcat $ canonicalizeTypeName tn_- {-# LINE 15692 "AstInternal.hs" #-}- -- "./TypeChecking/Misc.ag"(line 28, column 9)- _backTree =- {-# LINE 28 "./TypeChecking/Misc.ag" #-}- SimpleTypeName ann_ tn_- {-# LINE 15697 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- SimpleTypeName ann_ tn_- {-# LINE 15702 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- SimpleTypeName ann_ tn_- {-# LINE 15707 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 15712 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOnamedType,_lhsOoriginalTree)))--- TypeNameList -------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - namedTypes : [Type]- originalTree : SELF - alternatives:- alternative Cons:- child hd : TypeName - child tl : TypeNameList - visit 0:- local annotatedTree : _- local originalTree : _- alternative Nil:- visit 0:- local annotatedTree : _- local originalTree : _--}-type TypeNameList = [(TypeName)]--- cata-sem_TypeNameList :: TypeNameList ->- T_TypeNameList -sem_TypeNameList list =- (Prelude.foldr sem_TypeNameList_Cons sem_TypeNameList_Nil (Prelude.map sem_TypeName list) )--- semantic domain-type T_TypeNameList = Catalog ->- LocalIdentifierBindings ->- ( TypeNameList,([Type]),TypeNameList)-data Inh_TypeNameList = Inh_TypeNameList {cat_Inh_TypeNameList :: Catalog,lib_Inh_TypeNameList :: LocalIdentifierBindings}-data Syn_TypeNameList = Syn_TypeNameList {annotatedTree_Syn_TypeNameList :: TypeNameList,namedTypes_Syn_TypeNameList :: [Type],originalTree_Syn_TypeNameList :: TypeNameList}-wrap_TypeNameList :: T_TypeNameList ->- Inh_TypeNameList ->- Syn_TypeNameList -wrap_TypeNameList sem (Inh_TypeNameList _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOnamedTypes,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_TypeNameList _lhsOannotatedTree _lhsOnamedTypes _lhsOoriginalTree ))-sem_TypeNameList_Cons :: T_TypeName ->- T_TypeNameList ->- T_TypeNameList -sem_TypeNameList_Cons hd_ tl_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOnamedTypes :: ([Type])- _lhsOannotatedTree :: TypeNameList- _lhsOoriginalTree :: TypeNameList- _hdOcat :: Catalog- _hdOlib :: LocalIdentifierBindings- _tlOcat :: Catalog- _tlOlib :: LocalIdentifierBindings- _hdIannotatedTree :: TypeName- _hdInamedType :: Type- _hdIoriginalTree :: TypeName- _tlIannotatedTree :: TypeNameList- _tlInamedTypes :: ([Type])- _tlIoriginalTree :: TypeNameList- -- "./TypeChecking/Drops.ag"(line 30, column 12)- _lhsOnamedTypes =- {-# LINE 30 "./TypeChecking/Drops.ag" #-}- _hdInamedType : _tlInamedTypes- {-# LINE 15778 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIannotatedTree _tlIannotatedTree- {-# LINE 15783 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIoriginalTree _tlIoriginalTree- {-# LINE 15788 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 15793 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 15798 "AstInternal.hs" #-}- -- copy rule (down)- _hdOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 15803 "AstInternal.hs" #-}- -- copy rule (down)- _hdOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 15808 "AstInternal.hs" #-}- -- copy rule (down)- _tlOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 15813 "AstInternal.hs" #-}- -- copy rule (down)- _tlOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 15818 "AstInternal.hs" #-}- ( _hdIannotatedTree,_hdInamedType,_hdIoriginalTree) =- (hd_ _hdOcat _hdOlib )- ( _tlIannotatedTree,_tlInamedTypes,_tlIoriginalTree) =- (tl_ _tlOcat _tlOlib )- in ( _lhsOannotatedTree,_lhsOnamedTypes,_lhsOoriginalTree)))-sem_TypeNameList_Nil :: T_TypeNameList -sem_TypeNameList_Nil =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOnamedTypes :: ([Type])- _lhsOannotatedTree :: TypeNameList- _lhsOoriginalTree :: TypeNameList- -- "./TypeChecking/Drops.ag"(line 31, column 11)- _lhsOnamedTypes =- {-# LINE 31 "./TypeChecking/Drops.ag" #-}- []- {-# LINE 15835 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 15840 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 15845 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 15850 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 15855 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOnamedTypes,_lhsOoriginalTree)))--- VarDef -------------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - def : (String,Type)- originalTree : SELF - alternatives:- alternative VarDef:- child ann : {Annotation}- child name : {String}- child typ : TypeName - child value : {Maybe Expression}- visit 0:- local annotatedTree : _- local originalTree : _--}-data VarDef = VarDef (Annotation) (String) (TypeName) (Maybe Expression) - deriving ( Data,Eq,Show,Typeable)--- cata-sem_VarDef :: VarDef ->- T_VarDef -sem_VarDef (VarDef _ann _name _typ _value ) =- (sem_VarDef_VarDef _ann _name (sem_TypeName _typ ) _value )--- semantic domain-type T_VarDef = Catalog ->- LocalIdentifierBindings ->- ( VarDef,((String,Type)),VarDef)-data Inh_VarDef = Inh_VarDef {cat_Inh_VarDef :: Catalog,lib_Inh_VarDef :: LocalIdentifierBindings}-data Syn_VarDef = Syn_VarDef {annotatedTree_Syn_VarDef :: VarDef,def_Syn_VarDef :: (String,Type),originalTree_Syn_VarDef :: VarDef}-wrap_VarDef :: T_VarDef ->- Inh_VarDef ->- Syn_VarDef -wrap_VarDef sem (Inh_VarDef _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOdef,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_VarDef _lhsOannotatedTree _lhsOdef _lhsOoriginalTree ))-sem_VarDef_VarDef :: Annotation ->- String ->- T_TypeName ->- (Maybe Expression) ->- T_VarDef -sem_VarDef_VarDef ann_ name_ typ_ value_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOdef :: ((String,Type))- _lhsOannotatedTree :: VarDef- _lhsOoriginalTree :: VarDef- _typOcat :: Catalog- _typOlib :: LocalIdentifierBindings- _typIannotatedTree :: TypeName- _typInamedType :: Type- _typIoriginalTree :: TypeName- -- "./TypeChecking/CreateFunction.ag"(line 131, column 14)- _lhsOdef =- {-# LINE 131 "./TypeChecking/CreateFunction.ag" #-}- (name_, if _typInamedType == Pseudo Record then PgRecord Nothing else _typInamedType)- {-# LINE 15917 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- VarDef ann_ name_ _typIannotatedTree value_- {-# LINE 15922 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- VarDef ann_ name_ _typIoriginalTree value_- {-# LINE 15927 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 15932 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 15937 "AstInternal.hs" #-}- -- copy rule (down)- _typOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 15942 "AstInternal.hs" #-}- -- copy rule (down)- _typOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 15947 "AstInternal.hs" #-}- ( _typIannotatedTree,_typInamedType,_typIoriginalTree) =- (typ_ _typOcat _typOlib )- in ( _lhsOannotatedTree,_lhsOdef,_lhsOoriginalTree)))--- VarDefList ---------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - defs : [(String,Type)]- originalTree : SELF - alternatives:- alternative Cons:- child hd : VarDef - child tl : VarDefList - visit 0:- local annotatedTree : _- local originalTree : _- alternative Nil:- visit 0:- local annotatedTree : _- local originalTree : _--}-type VarDefList = [(VarDef)]--- cata-sem_VarDefList :: VarDefList ->- T_VarDefList -sem_VarDefList list =- (Prelude.foldr sem_VarDefList_Cons sem_VarDefList_Nil (Prelude.map sem_VarDef list) )--- semantic domain-type T_VarDefList = Catalog ->- LocalIdentifierBindings ->- ( VarDefList,([(String,Type)]),VarDefList)-data Inh_VarDefList = Inh_VarDefList {cat_Inh_VarDefList :: Catalog,lib_Inh_VarDefList :: LocalIdentifierBindings}-data Syn_VarDefList = Syn_VarDefList {annotatedTree_Syn_VarDefList :: VarDefList,defs_Syn_VarDefList :: [(String,Type)],originalTree_Syn_VarDefList :: VarDefList}-wrap_VarDefList :: T_VarDefList ->- Inh_VarDefList ->- Syn_VarDefList -wrap_VarDefList sem (Inh_VarDefList _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOdefs,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_VarDefList _lhsOannotatedTree _lhsOdefs _lhsOoriginalTree ))-sem_VarDefList_Cons :: T_VarDef ->- T_VarDefList ->- T_VarDefList -sem_VarDefList_Cons hd_ tl_ =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOdefs :: ([(String,Type)])- _lhsOannotatedTree :: VarDefList- _lhsOoriginalTree :: VarDefList- _hdOcat :: Catalog- _hdOlib :: LocalIdentifierBindings- _tlOcat :: Catalog- _tlOlib :: LocalIdentifierBindings- _hdIannotatedTree :: VarDef- _hdIdef :: ((String,Type))- _hdIoriginalTree :: VarDef- _tlIannotatedTree :: VarDefList- _tlIdefs :: ([(String,Type)])- _tlIoriginalTree :: VarDefList- -- "./TypeChecking/CreateFunction.ag"(line 134, column 12)- _lhsOdefs =- {-# LINE 134 "./TypeChecking/CreateFunction.ag" #-}- _hdIdef : _tlIdefs- {-# LINE 16015 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIannotatedTree _tlIannotatedTree- {-# LINE 16020 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- (:) _hdIoriginalTree _tlIoriginalTree- {-# LINE 16025 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 16030 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 16035 "AstInternal.hs" #-}- -- copy rule (down)- _hdOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 16040 "AstInternal.hs" #-}- -- copy rule (down)- _hdOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 16045 "AstInternal.hs" #-}- -- copy rule (down)- _tlOcat =- {-# LINE 56 "./TypeChecking/TypeChecking.ag" #-}- _lhsIcat- {-# LINE 16050 "AstInternal.hs" #-}- -- copy rule (down)- _tlOlib =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _lhsIlib- {-# LINE 16055 "AstInternal.hs" #-}- ( _hdIannotatedTree,_hdIdef,_hdIoriginalTree) =- (hd_ _hdOcat _hdOlib )- ( _tlIannotatedTree,_tlIdefs,_tlIoriginalTree) =- (tl_ _tlOcat _tlOlib )- in ( _lhsOannotatedTree,_lhsOdefs,_lhsOoriginalTree)))-sem_VarDefList_Nil :: T_VarDefList -sem_VarDefList_Nil =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOdefs :: ([(String,Type)])- _lhsOannotatedTree :: VarDefList- _lhsOoriginalTree :: VarDefList- -- "./TypeChecking/CreateFunction.ag"(line 135, column 11)- _lhsOdefs =- {-# LINE 135 "./TypeChecking/CreateFunction.ag" #-}- []- {-# LINE 16072 "AstInternal.hs" #-}- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 16077 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- []- {-# LINE 16082 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 16087 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 16092 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOdefs,_lhsOoriginalTree)))--- Volatility ---------------------------------------------------{-- visit 0:- inherited attributes:- cat : Catalog- lib : LocalIdentifierBindings- synthesized attributes:- annotatedTree : SELF - originalTree : SELF - alternatives:- alternative Immutable:- visit 0:- local annotatedTree : _- local originalTree : _- alternative Stable:- visit 0:- local annotatedTree : _- local originalTree : _- alternative Volatile:- visit 0:- local annotatedTree : _- local originalTree : _--}-data Volatility = Immutable - | Stable - | Volatile - deriving ( Data,Eq,Show,Typeable)--- cata-sem_Volatility :: Volatility ->- T_Volatility -sem_Volatility (Immutable ) =- (sem_Volatility_Immutable )-sem_Volatility (Stable ) =- (sem_Volatility_Stable )-sem_Volatility (Volatile ) =- (sem_Volatility_Volatile )--- semantic domain-type T_Volatility = Catalog ->- LocalIdentifierBindings ->- ( Volatility,Volatility)-data Inh_Volatility = Inh_Volatility {cat_Inh_Volatility :: Catalog,lib_Inh_Volatility :: LocalIdentifierBindings}-data Syn_Volatility = Syn_Volatility {annotatedTree_Syn_Volatility :: Volatility,originalTree_Syn_Volatility :: Volatility}-wrap_Volatility :: T_Volatility ->- Inh_Volatility ->- Syn_Volatility -wrap_Volatility sem (Inh_Volatility _lhsIcat _lhsIlib ) =- (let ( _lhsOannotatedTree,_lhsOoriginalTree) =- (sem _lhsIcat _lhsIlib )- in (Syn_Volatility _lhsOannotatedTree _lhsOoriginalTree ))-sem_Volatility_Immutable :: T_Volatility -sem_Volatility_Immutable =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Volatility- _lhsOoriginalTree :: Volatility- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Immutable- {-# LINE 16153 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Immutable- {-# LINE 16158 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 16163 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 16168 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_Volatility_Stable :: T_Volatility -sem_Volatility_Stable =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Volatility- _lhsOoriginalTree :: Volatility- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Stable- {-# LINE 16180 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Stable- {-# LINE 16185 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 16190 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 16195 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))-sem_Volatility_Volatile :: T_Volatility -sem_Volatility_Volatile =- (\ _lhsIcat- _lhsIlib ->- (let _lhsOannotatedTree :: Volatility- _lhsOoriginalTree :: Volatility- -- self rule- _annotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- Volatile- {-# LINE 16207 "AstInternal.hs" #-}- -- self rule- _originalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- Volatile- {-# LINE 16212 "AstInternal.hs" #-}- -- self rule- _lhsOannotatedTree =- {-# LINE 57 "./TypeChecking/TypeChecking.ag" #-}- _annotatedTree- {-# LINE 16217 "AstInternal.hs" #-}- -- self rule- _lhsOoriginalTree =- {-# LINE 63 "./TypeChecking/TypeChecking.ag" #-}- _originalTree- {-# LINE 16222 "AstInternal.hs" #-}- in ( _lhsOannotatedTree,_lhsOoriginalTree)))
− Database/HsSqlPpp/AstInternals/Catalog/CatalogInternal.lhs
@@ -1,492 +0,0 @@-Copyright 2009 Jake Wheat--This module contains the implementation of the Catalog data types-and functions, and provides the api for the other type checking-modules.--> {-# LANGUAGE DeriveDataTypeable #-}-> {-# OPTIONS_HADDOCK hide #-}--> module Database.HsSqlPpp.AstInternals.Catalog.CatalogInternal-> (-> Catalog-> ,CastContext(..)-> ,CompositeFlavour(..)-> ,relationComposites-> ,CompositeDef-> ,FunctionPrototype-> ,DomainDefinition-> ,FunFlav(..)-> ,emptyCatalog-> ,defaultCatalog-> ,CatalogUpdate(..)-> ,ppCatUpdate-> ,updateCatalog-> ,deconstructCatalog-> -- type checker stuff-> ,catCompositeDef-> ,catCompositeAttrsPair-> ,catCompositeAttrs-> ,catCompositePublicAttrs-> ,catTypeCategory-> ,catPreferredType-> ,catCast-> ,catDomainBaseType-> ,catLookupFns-> ,catTypeExists-> ,catLookupType-> ,OperatorType(..)-> ,getOperatorType-> ,isOperatorName-> -- comparing catalogs-> ,CatalogDiff(..)-> ,compareCatalogs-> ,ppCatDiff-> ) where--> import Control.Monad-> import Data.List-> import Data.Generics-> -- import Debug.Trace-> import Data.Char--> import Database.HsSqlPpp.AstInternals.TypeType-> import Database.HsSqlPpp.Utils--> -- | The main datatype, this holds the catalog and context-> -- information to type check against.-> data Catalog = Catalog-> {catTypeNames :: [(String, Type)]-> ,catDomainDefs :: [DomainDefinition]-> ,catCasts :: [(Type,Type,CastContext)]-> ,catTypeCategories :: [(Type,String,Bool)]-> ,catPrefixOperators :: [FunctionPrototype]-> ,catPostfixOperators :: [FunctionPrototype]-> ,catBinaryOperators :: [FunctionPrototype]-> ,catFunctions :: [FunctionPrototype]-> ,catAggregates :: [FunctionPrototype]-> ,catWindowFunctions :: [FunctionPrototype]-> ,catAttrDefs :: [CompositeDef]-> ,catUpdates :: [CatalogUpdate]}-> deriving Show--> -- | Represents an empty catalog. This doesn't contain things-> -- like the \'and\' operator, 'defaultCatalog' contains these.-> emptyCatalog :: Catalog-> emptyCatalog = Catalog [] [] [] [] [] [] [] [] [] [] [] []--> -- | Represents what you probably want to use as a starting point if-> -- you are building an catalog from scratch. It contains-> -- information on built in function like things that aren't in the-> -- PostgreSQL catalog, such as greatest, coalesce, keyword operators-> -- like \'and\', etc..-> defaultCatalog :: Catalog-> defaultCatalog = emptyCatalog {-> catTypeNames = pseudoTypes-> ,catBinaryOperators = ("=",[Pseudo AnyElement-> ,Pseudo AnyElement],-> typeBool, False):keywordOperatorTypes-> ,catFunctions = specialFunctionTypes}---> -- | Use to note what the flavour of a cast is, i.e. if/when it can-> -- be used implicitly.-> data CastContext = ImplicitCastContext-> | AssignmentCastContext-> | ExplicitCastContext-> deriving (Eq,Show,Ord,Typeable,Data)--> -- | Used to distinguish between standalone composite types, and-> -- automatically generated ones, generated from a table or view-> -- respectively.-> data CompositeFlavour = Composite | TableComposite | ViewComposite-> deriving (Eq,Ord,Show)--> relationComposites :: [CompositeFlavour]-> relationComposites = [TableComposite,ViewComposite]---> -- | Provides the definition of a composite type. The components are-> -- composite (or table or view) name, the flavour of the composite,-> -- the types of the composite attributes, and the types of the-> -- system columns iff the composite represents a table type (the-> -- third and fourth components are always 'CompositeType's).-> type CompositeDef = (String, CompositeFlavour, Type, Type)--> -- | The components are: function (or operator) name, argument-> -- types, return type and is variadic.-> type FunctionPrototype = (String, [Type], Type, Bool)--> -- | The components are domain type, base type (todo: add check-> -- constraint).-> type DomainDefinition = (Type,Type)--> data CatalogUpdate =-> -- | add a new scalar type with the name given, also creates-> -- an array type automatically-> CatCreateScalar Type String Bool-> | CatCreateDomain Type Type-> | CatCreateComposite String [(String,Type)]-> | CatCreateCast Type Type CastContext-> | CatCreateTable String [(String,Type)] [(String,Type)]-> | CatCreateView String [(String,Type)]-> | CatCreateFunction FunFlav String [Type] Type Bool-> | CatDropFunction Bool String [Type]-> deriving (Eq,Ord,Typeable,Data,Show)--> ppCatUpdate :: CatalogUpdate -> String-> ppCatUpdate (CatCreateScalar t c p) = "CatCreateScalar " ++ show t ++ "(" ++ c ++ "," ++ show p ++ ")"-> ppCatUpdate (CatCreateDomain t b) = "CatCreateDomain " ++ show t ++ " as " ++ show b-> ppCatUpdate (CatCreateComposite nm flds) = "CatCreateComposite " ++ nm ++ showFlds flds-> ppCatUpdate (CatCreateCast s t ctx) = "CatCreateCast " ++ show s ++ "->" ++ show t ++ " " ++ show ctx-> ppCatUpdate (CatCreateTable nm flds1 flds2) = "CatCreateTable " ++ nm ++ showFlds flds1 ++ showFlds flds2-> ppCatUpdate (CatCreateView nm flds) = "CatCreateView " ++ nm ++ showFlds flds-> ppCatUpdate (CatCreateFunction flav nm args ret vdc) =-> "CatCreateFunction " ++ show flav ++ " " ++ nm ++ " returns " ++ show ret ++-> "(" ++ intercalate "," (map show args) ++ ")" ++ if vdc then " variadic" else ""-> ppCatUpdate (CatDropFunction _ nm args) = "CatDropFunction " ++ nm ++ "(" ++ show args ++ ")"--> showFlds :: [(String,Type)] -> String-> showFlds flds = "(\n" ++ sfs flds ++ ")"-> where-> sfs ((nm,t):fs) = " " ++ show nm ++ " " ++ show t ++ "\n" ++ sfs fs-> sfs [] = ""--> data FunFlav = FunPrefix | FunPostfix | FunBinary-> | FunName | FunAgg | FunWindow-> deriving (Eq,Show,Ord,Typeable,Data)--> -- | Applies a list of 'CatalogUpdate's to an 'Catalog' value-> -- to produce a new Catalog value.-> updateCatalog :: Catalog-> -> [CatalogUpdate]-> -> Either [TypeError] Catalog-> updateCatalog cat' eus =-> foldM updateCat' (cat' {catUpdates = catUpdates cat' ++ eus}) eus-> where-> updateCat' cat eu =-> case eu of-> CatCreateScalar ty catl pref -> do-> errorWhen (not allowed)-> [BadCatalogUpdate $ "can only add scalar types\-> \this way, got " ++ show ty]-> let ScalarType nm = ty-> return $ addTypeWithArray cat nm ty catl pref-> where-> allowed = case ty of-> ScalarType _ -> True-> _ -> False-> CatCreateDomain ty baseTy -> do-> errorWhen (not allowed)-> [BadCatalogUpdate $ "can only add domain types\-> \this way, got " ++ show ty]-> errorWhen (not baseAllowed)-> [BadCatalogUpdate $ "can only add domain types\-> \based on scalars, got "-> ++ show baseTy]-> let DomainType nm = ty-> catl <- catTypeCategory cat baseTy-> return (addTypeWithArray cat nm ty catl False) {-> catDomainDefs =-> (ty,baseTy):catDomainDefs cat-> ,catCasts =-> (ty,baseTy,ImplicitCastContext):catCasts cat}-> where-> allowed = case ty of-> DomainType _ -> True-> _ -> False-> baseAllowed = case baseTy of-> ScalarType _ -> True-> _ -> False--> CatCreateComposite nm flds ->-> return $ (addTypeWithArray cat nm (NamedCompositeType nm) "C" False) {-> catAttrDefs =-> (nm,Composite,CompositeType flds, CompositeType [])-> : catAttrDefs cat}-> CatCreateCast src tgt ctx -> return $ cat {catCasts = (src,tgt,ctx):catCasts cat}-> CatCreateTable nm attrs sysAttrs -> do-> checkTypeDoesntExist cat nm (NamedCompositeType nm)-> return $ (addTypeWithArray cat nm-> (NamedCompositeType nm) "C" False) {-> catAttrDefs =-> (nm,TableComposite,CompositeType attrs, CompositeType sysAttrs)-> : catAttrDefs cat}-> CatCreateView nm attrs -> {-trace ("create view:" ++ show nm) $-} do-> checkTypeDoesntExist cat nm (NamedCompositeType nm)-> return $ (addTypeWithArray cat nm-> (NamedCompositeType nm) "C" False) {-> catAttrDefs =-> (nm,ViewComposite,CompositeType attrs, CompositeType [])-> : catAttrDefs cat}-> CatCreateFunction f nm args ret vdc ->-> return $ case f of-> FunPrefix -> cat {catPrefixOperators=(nm,args,ret,vdc):catPrefixOperators cat}-> FunPostfix -> cat {catPostfixOperators=(nm,args,ret,vdc):catPostfixOperators cat}-> FunBinary -> cat {catBinaryOperators=(nm,args,ret,vdc):catBinaryOperators cat}-> FunAgg -> cat {catAggregates=(nm,args,ret,vdc):catAggregates cat}-> FunWindow -> cat {catWindowFunctions=(nm,args,ret,vdc):catWindowFunctions cat}-> FunName -> cat {catFunctions=(nm,args,ret,vdc):catFunctions cat}-> CatDropFunction ifexists nm args -> do-> let matches = filter matchingFn (catFunctions cat)-> errorWhen (null matches) [BadCatalogUpdate $-> "couldn't find function to drop " ++-> show nm ++ "(" ++ show args++")"]-> errorWhen (length matches > 1) [BadCatalogUpdate $-> "multiple matching functions to drop " ++-> show nm ++ "(" ++ show args++")"]-> return cat {catFunctions = filter (not . matchingFn) (catFunctions cat)-> ,catUpdates = filter (not.matchingUpdate) (catUpdates cat)}-> where-> matchingFn (nm1,a1,_,_) = map toLower nm == map toLower nm1 && args == a1-> matchingUpdate (CatDropFunction _ nm2 a2) | map toLower nm2 == map toLower nm-> && a2 == args = True-> matchingUpdate (CatCreateFunction _ nm2 a2 _ _) | map toLower nm2 == map toLower nm-> && a2 == args = True-> matchingUpdate _ = False--todo:-look for matching function in list, if not found then error-remove from list, and remove from update list---> addTypeWithArray cat nm ty catl pref =-> cat {catTypeNames =-> ('_':nm,ArrayType ty)-> : (nm,ty)-> : catTypeNames cat-> ,catTypeCategories =-> (ArrayType ty,"A",False)-> : (ty,catl,pref)-> : catTypeCategories cat}-> checkTypeDoesntExist cat nm ty = do-> errorWhen (any (==nm) $ map fst $ catTypeNames cat)-> [TypeAlreadyExists ty]-> errorWhen (any (==ty) $ map snd $ catTypeNames cat)-> [TypeAlreadyExists ty]-> return ()---> {--> | Takes part an 'Catalog' value to produce a list of 'CatalogUpdate's.-> You can use this to look inside the Catalog data type e.g. if you want to-> examine a catalog. It should be the case that:-> @-> updateCatalog emptyCatalog (deconstructCatalog cat) = cat-> @ -}-> deconstructCatalog :: Catalog -> [CatalogUpdate]-> deconstructCatalog = catUpdates---================================================================================--= type checking stuff--> catCompositeDef :: Catalog -> [CompositeFlavour] -> String -> Either [TypeError] (CompositeDef)-> catCompositeDef cat flvs nm = do-> let c = filter (\(n,t,_,_) -> n == nm && (null flvs || t `elem` flvs)) $ catAttrDefs cat-> errorWhen (null c)-> [UnrecognisedRelation nm]-> case c of-> (_,fl1,r,s):[] -> return (nm,fl1,r,s)-> _ -> Left [InternalError $ "problem getting attributes for: " ++ show nm ++ ", " ++ show c]--> catCompositeAttrsPair :: Catalog -> [CompositeFlavour] -> String-> -> Either [TypeError] ([(String,Type)],[(String,Type)])-> catCompositeAttrsPair cat flvs ty = do-> (_,_,CompositeType a,CompositeType b) <- catCompositeDef cat flvs ty-> return (a,b)--> catCompositeAttrs :: Catalog -> [CompositeFlavour] -> String-> -> Either [TypeError] [(String,Type)]-> catCompositeAttrs cat flvs ty = do-> (a,b) <- catCompositeAttrsPair cat flvs ty-> return $ a ++ b--> catCompositePublicAttrs :: Catalog -> [CompositeFlavour] -> String-> -> Either [TypeError] [(String,Type)]-> catCompositePublicAttrs cat flvs ty = do-> (a,_) <- catCompositeAttrsPair cat flvs ty-> return a---> catTypeCategory :: Catalog -> Type -> Either [TypeError] String-> catTypeCategory cat ty =-> fmap fst $ catGetCategoryInfo cat ty--> catPreferredType :: Catalog -> Type -> Either [TypeError] Bool-> catPreferredType cat ty =-> fmap snd $ catGetCategoryInfo cat ty--> catCast :: Catalog -> CastContext -> Type -> Type -> Either [TypeError] Bool-> catCast cat ctx from to = {-trace ("check cast " ++ show from ++ show to) $-}-> case from of-> t@(DomainType _) -> do-> baseType <- catDomainBaseType cat t-> cc <- catCast cat ctx baseType to-> return $ (baseType == to) ||-> (cc ||-> any (== (from, to, ctx)) (catCasts cat))-> _ -> Right $ any (==(from,to,ctx)) (catCasts cat)---> catDomainBaseType :: Catalog -> Type -> Either [TypeError] Type-> catDomainBaseType cat ty =-> --check type is domain, check it exists in main list-> case lookup ty (catDomainDefs cat) of-> Nothing -> Left [DomainDefNotFound ty]-> Just t -> Right t---> catLookupFns :: Catalog -> String -> [FunctionPrototype]-> catLookupFns cat name =-> filter (\(nm,_,_,_) -> map toLower nm == map toLower name) catGetAllFns-> where-> catGetAllFns =-> concat [catPrefixOperators cat-> ,catPostfixOperators cat-> ,catBinaryOperators cat-> ,catFunctions cat-> ,catAggregates cat-> ,catWindowFunctions cat]--== internal support for type checker fns above--> catGetCategoryInfo :: Catalog -> Type -> Either [TypeError] (String, Bool)-> catGetCategoryInfo cat ty =-> case ty of-> SetOfType _ -> Right ("", False)-> AnonymousRecordType _ -> Right ("", False)-> ArrayType (Pseudo _) -> Right ("A",False)-> Pseudo _ -> Right ("P",False)-> _ -> let l = filter (\(t,_,_) -> ty == t) $ catTypeCategories cat-> in if null l-> then Left [InternalError $ "no type category for " ++ show ty]-> else let (_,c,p):_ =l-> in Right (c,p)--> catTypeExists :: Catalog -> Type -> Either [TypeError] Type-> catTypeExists cat t =-> errorWhen (t `notElem` map snd (catTypeNames cat))-> [UnknownTypeError t] >>-> Right t--> catLookupType :: Catalog -> String -> Either [TypeError] Type-> catLookupType cat name =-> liftME [UnknownTypeName name] $-> lookup name (catTypeNames cat)---================================================================================--= built in stuff--keyword operators, all of these are built in and don't appear in any-postgresql catalog--This is wrong, these need to be separated into prefix, postfix, binary--> keywordOperatorTypes :: [FunctionPrototype]-> keywordOperatorTypes = [-> ("!and", [typeBool, typeBool], typeBool, False)-> ,("!or", [typeBool, typeBool], typeBool, False)-> ,("!like", [ScalarType "text", ScalarType "text"], typeBool, False)-> ,("!not", [typeBool], typeBool, False)-> ,("!isnull", [Pseudo AnyElement], typeBool, False)-> ,("!isnotnull", [Pseudo AnyElement], typeBool, False)-> ,("!arrayctor", [ArrayType $ Pseudo AnyElement], Pseudo AnyArray, True)-> ,("!between", [Pseudo AnyElement-> ,Pseudo AnyElement-> ,Pseudo AnyElement], Pseudo AnyElement, False)-> ,("!substring", [ScalarType "text",typeInt,typeInt], ScalarType "text", False)-> ,("!arraysub", [Pseudo AnyArray,typeInt], Pseudo AnyElement, False)-> ]--these look like functions, but don't appear in the postgresql catalog.--> specialFunctionTypes :: [FunctionPrototype]-> specialFunctionTypes = [-> ("coalesce", [ArrayType $ Pseudo AnyElement], Pseudo AnyElement, True)-> ,("nullif", [Pseudo AnyElement, Pseudo AnyElement], Pseudo AnyElement,False)-> ,("greatest", [ArrayType $ Pseudo AnyElement], Pseudo AnyElement,True)-> ,("least", [ArrayType $ Pseudo AnyElement], Pseudo AnyElement,True)-> ]--> pseudoTypes :: [(String, Type)]-> pseudoTypes =-> [("any",Pseudo Any)-> ,("anyarray",Pseudo AnyArray)-> ,("anyelement",Pseudo AnyElement)-> ,("anyenum",Pseudo AnyEnum)-> ,("anynonarray",Pseudo AnyNonArray)-> ,("cstring",Pseudo Cstring)-> ,("record",Pseudo Record)-> ,("trigger",Pseudo Trigger)-> ,("void",Pseudo Void)-> ,("_cstring",ArrayType $ Pseudo Cstring)-> ,("_record",ArrayType $ Pseudo Record)-> --,Pseudo Internal-> --,Pseudo LanguageHandler-> --,Pseudo Opaque-> ]--================================================================================--= getOperatorType--used by the pretty printer, not sure this is a very good design--for now, assume that all the overloaded operators that have the-same name are all either binary, prefix or postfix, otherwise the-getoperatortype would need the types of the arguments to determine-the operator type, and the parser would have to be a lot cleverer-although, parsec handles - being unary and binary without breaking-a sweat, so maybe this isn't too difficult?--this is why binary @ operator isn't currently supported--> data OperatorType = BinaryOp | PrefixOp | PostfixOp-> deriving (Eq,Show)--> getOperatorType :: Catalog -> String -> Either [TypeError] OperatorType-> getOperatorType cat s = case () of-> _ | s `elem` ["!and", "!or","!like"] -> Right BinaryOp-> | s `elem` ["!not"] -> Right PrefixOp-> | s `elem` ["!isnull", "!isnotnull"] -> Right PostfixOp-> | any (\(x,_,_,_) -> x == s) (catBinaryOperators cat) ->-> Right BinaryOp-> | any (\(x,_,_,_) -> x == s ||-> (x=="-" && s=="u-"))-> (catPrefixOperators cat) ->-> Right PrefixOp-> | any (\(x,_,_,_) -> x == s) (catPostfixOperators cat) ->-> Right PostfixOp-> | otherwise ->-> Left [InternalError $ "don't know flavour of operator " ++ s]--> isOperatorName :: String -> Bool-> isOperatorName = any (`elem` "+-*/<>=~!@#%^&|`?")--================================================================================--> -- | items in first catalog and not second, items in second and not first.-> data CatalogDiff = CatalogDiff [CatalogUpdate] [CatalogUpdate]-> deriving Show--> -- | find differences between two catalogs-> compareCatalogs :: Catalog -> Catalog -> Catalog -> CatalogDiff-> compareCatalogs base start end =-> let baseCatBits = deconstructCatalog base-> startCatBits = deconstructCatalog start \\ baseCatBits-> endCatBits = deconstructCatalog end \\ baseCatBits-> missing = sort $ endCatBits \\ startCatBits-> extras = sort $ startCatBits \\ endCatBits-> in CatalogDiff missing extras--> -- | print a catdiff in a more human readable way than show.-> ppCatDiff :: CatalogDiff -> String-> ppCatDiff (CatalogDiff missing extr) =-> "\nmissing:\n"-> ++ intercalate "\n" (map ppCatUpdate missing)-> ++ "\nextra:\n"-> ++ intercalate "\n" (map ppCatUpdate extr)
− Database/HsSqlPpp/AstInternals/Catalog/CatalogReader.lhs
@@ -1,258 +0,0 @@-Copyright 2009 Jake Wheat--This module contains the code to read a set of catalog updates-from a database.--The code here hasn't been tidied up since the Catalog data type-was heavily changed so it's a bit messy.--> {-# OPTIONS_HADDOCK hide #-}--> module Database.HsSqlPpp.AstInternals.Catalog.CatalogReader-> (readCatalogFromDatabase) where--> import qualified Data.Map as M-> import Data.Maybe-> import Control.Applicative-> --import Debug.Trace--> import Database.HsSqlPpp.Dbms.DBAccess-> import Database.HsSqlPpp.AstInternals.TypeType-> import Database.HsSqlPpp.Utils-> import Database.HsSqlPpp.AstInternals.Catalog.CatalogInternal--> -- | Creates an 'CatalogUpdate' list by reading the database given.-> -- To create an Catalog value from this, use-> ---> -- @-> -- cat <- readCatalogFromDatabase 'something'-> -- let newCat = updateCatalog defaultCatalog cat-> -- @-> readCatalogFromDatabase :: String -- ^ name of the database to read-> -> IO [CatalogUpdate]-> readCatalogFromDatabase dbName = withConn ("dbname=" ++ dbName) $ \conn -> do-> typeInfo <- selectRelation conn-> "select t.oid as oid,\n\-> \ t.typtype,\n\-> \ case nspname\n\-> \ when 'public' then t.typname\n\-> \ when 'pg_catalog' then t.typname\n\-> \ else nspname || '.' || t.typname\n\-> \ end as typname,\n\-> \ t.typarray,\n\-> \ coalesce(e.typtype,'0') as atyptype,\n\-> \ e.oid as aoid,\n\-> \ e.typname as atypname\n\-> \ from pg_catalog.pg_type t\n\-> \ left outer join pg_type e\n\-> \ on t.typarray = e.oid\n\-> \ inner join pg_namespace ns\n\-> \ on t.typnamespace = ns.oid\n\-> \ and ns.nspname in ('pg_catalog', 'public', 'information_schema')\n\-> \ where /*pg_catalog.pg_type_is_visible(t.oid)\n\-> \ and */not exists(select 1 from pg_catalog.pg_type el\n\-> \ where el.typarray = t.oid)\n\-> \ order by t.typname;" []-> let typeStuff = concatMap convTypeInfoRow typeInfo-> typeAssoc = map (\(a,b,_) -> (a,b)) typeStuff-> typeMap = M.fromList typeAssoc-> cts <- map (\(nm:cat:pref:[]) ->-> CatCreateScalar (ScalarType nm) cat ( read pref :: Bool)) <$>-> selectRelation conn-> "select t.typname,typcategory,typispreferred\n\-> \from pg_type t\n\-> \ inner join pg_namespace ns\n\-> \ on t.typnamespace = ns.oid\n\-> \ and ns.nspname in ('pg_catalog', 'public', 'information_schema')\n\-> \where t.typarray<>0 and\n\-> \ typtype='b' /*and\n\-> \ pg_catalog.pg_type_is_visible(t.oid)*/;" []-> domainDefInfo <- selectRelation conn-> "select pg_type.oid, typbasetype\n\-> \ from pg_type\n\-> \ inner join pg_namespace ns\n\-> \ on pg_type.typnamespace = ns.oid\n\-> \ and ns.nspname in ('pg_catalog', 'public', 'information_schema')\n\-> \ where typtype = 'd'\n\-> \ /*and pg_catalog.pg_type_is_visible(oid)*/;" []-> let jlt k = fromJust $ M.lookup k typeMap-> let domainDefs = map (\l -> (jlt (l!!0), jlt (l!!1))) domainDefInfo-> --let domainCasts = map (\(t,b) ->(t,b,ImplicitCastContext)) domainDefs-> castInfo <- selectRelation conn-> "select castsource,casttarget,castcontext from pg_cast;" []-> let casts = {- domainCasts ++ -} flip map castInfo-> (\l -> (jlt (l!!0), jlt (l!!1),-> case (l!!2) of-> "a" -> AssignmentCastContext-> "i" -> ImplicitCastContext-> "e" -> ExplicitCastContext-> _ -> error $ "internal error: unknown cast context " ++ (l!!2)))-> operatorInfo <- selectRelation conn-> "select oprname,\n\-> \ oprleft,\n\-> \ oprright,\n\-> \ oprresult\n\-> \from pg_operator\n\-> \ where not (oprleft <> 0 and oprright <> 0\n\-> \ and oprname = '@') --hack for now\n\-> \ order by oprname;" []-> let getOps a b c [] = (a,b,c)-> getOps pref post bin (l:ls) =-> let bit = (\a -> (l!!0, a, jlt(l!!3)))-> in case () of-> _ | l!!1 == "0" -> getOps (bit [jlt (l!!2)]:pref) post bin ls-> | l!!2 == "0" -> getOps pref (bit [jlt (l!!1)]:post) bin ls-> | otherwise -> getOps pref post (bit [jlt (l!!1), jlt (l!!2)]:bin) ls-> let (prefixOps, postfixOps, binaryOps) = getOps [] [] [] operatorInfo-> functionInfo <- selectRelation conn-> "select proname,\n\-> \ array_to_string(proargtypes,','),\n\-> \ proretset,\n\-> \ prorettype\n\-> \from pg_proc\n\-> \where pg_catalog.pg_function_is_visible(pg_proc.oid)\n\-> \ and provariadic = 0\n\-> \ and not proisagg\n\-> \ and not proiswindow\n\-> \order by proname,proargtypes;" []-> let fnProts = map (convFnRow jlt) functionInfo--> aggregateInfo <- selectRelation conn-> "select proname,\n\-> \ array_to_string(proargtypes,','),\n\-> \ proretset,\n\-> \ prorettype\n\-> \from pg_proc\n\-> \where pg_catalog.pg_function_is_visible(pg_proc.oid)\n\-> \ and provariadic = 0\n\-> \ and proisagg\n\-> \order by proname,proargtypes;" []-> let aggProts = map (convFnRow jlt) aggregateInfo--> windowInfo <- selectRelation conn-> "select proname,\n\-> \ array_to_string(proargtypes,','),\n\-> \ proretset,\n\-> \ prorettype\n\-> \from pg_proc\n\-> \where pg_catalog.pg_function_is_visible(pg_proc.oid)\n\-> \ and provariadic = 0\n\-> \ and proiswindow\n\-> \order by proname,proargtypes;" []-> let winProts = map (convFnRow jlt) windowInfo---> comps <- map (\(kind:nm:atts:sysatts:nsp:[]) ->-> let nm1 = case nsp of-> "pg_catalog" -> nm-> "public" -> nm-> n -> n ++ "." ++ nm-> in case kind of-> "c" -> CatCreateComposite nm1 (convertAttString jlt atts)-> "r" -> CatCreateTable nm1 (convertAttString jlt atts) (convertAttString jlt sysatts)-> "v" -> CatCreateView nm1 (convertAttString jlt atts)-> _ -> error $ "unrecognised relkind: " ++ kind) <$>-> selectRelation conn-> "with att1 as (\n\-> \ select\n\-> \ attrelid,\n\-> \ attname,\n\-> \ attnum,\n\-> \ atttypid\n\-> \ from pg_attribute\n\-> \ inner join pg_class cls\n\-> \ on cls.oid = attrelid\n\-> \ inner join pg_namespace ns\n\-> \ on cls.relnamespace = ns.oid\n\-> \ and ns.nspname in ('pg_catalog', 'public', 'information_schema')\n\-> \ where /*pg_catalog.pg_table_is_visible(cls.oid)\n\-> \ and*/ cls.relkind in ('r','v','c')\n\-> \ and not attisdropped),\n\-> \ sysAtt as (\n\-> \ select attrelid,\n\-> \ array_to_string(\n\-> \ array_agg(attname || ';' || atttypid)\n\-> \ over (partition by attrelid order by attnum\n\-> \ range between unbounded preceding\n\-> \ and unbounded following)\n\-> \ ,',') as sysAtts\n\-> \ from att1\n\-> \ where attnum < 0),\n\-> \ att as (\n\-> \ select attrelid,\n\-> \ array_to_string(\n\-> \ array_agg(attname || ';' || atttypid)\n\-> \ over (partition by attrelid order by attnum\n\-> \ range between unbounded preceding\n\-> \ and unbounded following)\n\-> \ ,',') as atts\n\-> \ from att1\n\-> \ where attnum > 0)\n\-> \ select distinct\n\-> \ cls.relkind,\n\-> \ cls.relname,\n\-> \ atts,\n\-> \ coalesce(sysAtts,''),\n\-> \ nspname\n\-> \ from att left outer join sysAtt using (attrelid)\n\-> \ inner join pg_class cls\n\-> \ on cls.oid = attrelid\n\-> \ inner join pg_namespace ns\n\-> \ on cls.relnamespace = ns.oid\n\-> \ order by relkind,relname;" []---> return $ concat [-> cts-> ,map (uncurry CatCreateDomain) domainDefs-> ,map (\(a,b,c) -> CatCreateCast a b c) casts-> ,map (\(a,b,c) -> CatCreateFunction FunPrefix a b c False) prefixOps-> ,map (\(a,b,c) -> CatCreateFunction FunPostfix a b c False) postfixOps-> ,map (\(a,b,c) -> CatCreateFunction FunBinary a b c False) binaryOps-> ,map (\(a,b,c) -> CatCreateFunction FunName a b c False) fnProts-> ,map (\(a,b,c) -> CatCreateFunction FunAgg a b c False) aggProts-> ,map (\(a,b,c) -> CatCreateFunction FunWindow a b c False) winProts-> ,comps]-> where-> convertAttString jlt s =-> let ps = split ',' s-> ps1 = map (split ';') ps-> in map (\pl -> (head pl, jlt (pl!!1))) ps1-> convFnRow jlt l =-> (head l,fnArgs,fnRet)-> where-> fnRet = let rt1 = jlt (l!!3)-> in if read (l!!2)::Bool-> then SetOfType rt1-> else rt1-> fnArgs = if (l!!1) == ""-> then []-> else let a = split ',' (l!!1)-> in map jlt a-> convTypeInfoRow l =-> let name = canonicalizeTypeName (l!!2)-> ctor = case (l!!1) of-> "b" -> ScalarType-> "c" -> NamedCompositeType-> "d" -> DomainType-> "e" -> EnumType-> "p" -> (\t -> Pseudo (case t of-> "any" -> Any-> "anyarray" -> AnyArray-> "anyelement" -> AnyElement-> "anyenum" -> AnyEnum-> "anynonarray" -> AnyNonArray-> "cstring" -> Cstring-> "internal" -> Internal-> "language_handler" -> LanguageHandler-> "opaque" -> Opaque-> "record" -> Record-> "trigger" -> Trigger-> "void" -> Void-> _ -> error $ "internal error: unknown pseudo " ++ t))-> _ -> error $ "internal error: unknown type type: " ++ (l !! 1)-> scType = (head l, ctor name, name)-> in if (l!!4) /= "0"-> then [(l!!5,ArrayType $ ctor name, '_':name), scType]-> else [scType]-
− Database/HsSqlPpp/AstInternals/Catalog/DefaultTemplate1Catalog.lhs
@@ -1,29023 +0,0 @@-> {-# OPTIONS_HADDOCK hide #-}--> module Database.HsSqlPpp.AstInternals.Catalog.DefaultTemplate1Catalog-> (defaultTemplate1Catalog-> ) where--> import Database.HsSqlPpp.AstInternals.Catalog.CatalogInternal-> import Database.HsSqlPpp.AstInternals.TypeType--> defaultTemplate1Catalog :: Catalog-> defaultTemplate1Catalog =-> (\l -> case l of-> Left x -> error $ show x-> Right e -> e) $-> updateCatalog defaultCatalog--> [ CatCreateScalar (-> ScalarType "bool" )-> "B"-> True-> , CatCreateScalar (-> ScalarType "bytea" )-> "U"-> False-> , CatCreateScalar (-> ScalarType "char" )-> "S"-> False-> , CatCreateScalar (-> ScalarType "name" )-> "S"-> False-> , CatCreateScalar (-> ScalarType "int8" )-> "N"-> False-> , CatCreateScalar (-> ScalarType "int2" )-> "N"-> False-> , CatCreateScalar (-> ScalarType "int2vector" )-> "A"-> False-> , CatCreateScalar (-> ScalarType "int4" )-> "N"-> False-> , CatCreateScalar (-> ScalarType "regproc" )-> "N"-> False-> , CatCreateScalar (-> ScalarType "text" )-> "S"-> True-> , CatCreateScalar (-> ScalarType "oid" )-> "N"-> True-> , CatCreateScalar (-> ScalarType "tid" )-> "U"-> False-> , CatCreateScalar (-> ScalarType "xid" )-> "U"-> False-> , CatCreateScalar (-> ScalarType "cid" )-> "U"-> False-> , CatCreateScalar (-> ScalarType "oidvector" )-> "A"-> False-> , CatCreateScalar (-> ScalarType "xml" )-> "U"-> False-> , CatCreateScalar (-> ScalarType "point" )-> "G"-> False-> , CatCreateScalar (-> ScalarType "lseg" )-> "G"-> False-> , CatCreateScalar (-> ScalarType "path" )-> "G"-> False-> , CatCreateScalar (-> ScalarType "box" )-> "G"-> False-> , CatCreateScalar (-> ScalarType "polygon" )-> "G"-> False-> , CatCreateScalar (-> ScalarType "line" )-> "G"-> False-> , CatCreateScalar (-> ScalarType "float4" )-> "N"-> False-> , CatCreateScalar (-> ScalarType "float8" )-> "N"-> True-> , CatCreateScalar (-> ScalarType "abstime" )-> "D"-> False-> , CatCreateScalar (-> ScalarType "reltime" )-> "T"-> False-> , CatCreateScalar (-> ScalarType "tinterval" )-> "T"-> False-> , CatCreateScalar (-> ScalarType "circle" )-> "G"-> False-> , CatCreateScalar (-> ScalarType "money" )-> "N"-> False-> , CatCreateScalar (-> ScalarType "macaddr" )-> "U"-> False-> , CatCreateScalar (-> ScalarType "inet" )-> "I"-> True-> , CatCreateScalar (-> ScalarType "cidr" )-> "I"-> False-> , CatCreateScalar (-> ScalarType "aclitem" )-> "U"-> False-> , CatCreateScalar (-> ScalarType "bpchar" )-> "S"-> False-> , CatCreateScalar (-> ScalarType "varchar" )-> "S"-> False-> , CatCreateScalar (-> ScalarType "date" )-> "D"-> False-> , CatCreateScalar (-> ScalarType "time" )-> "D"-> False-> , CatCreateScalar (-> ScalarType "timestamp" )-> "D"-> False-> , CatCreateScalar (-> ScalarType "timestamptz" )-> "D"-> True-> , CatCreateScalar (-> ScalarType "interval" )-> "T"-> True-> , CatCreateScalar (-> ScalarType "timetz" )-> "D"-> False-> , CatCreateScalar (-> ScalarType "bit" )-> "V"-> False-> , CatCreateScalar (-> ScalarType "varbit" )-> "V"-> True-> , CatCreateScalar (-> ScalarType "numeric" )-> "N"-> False-> , CatCreateScalar (-> ScalarType "refcursor" )-> "U"-> False-> , CatCreateScalar (-> ScalarType "regprocedure" )-> "N"-> False-> , CatCreateScalar (-> ScalarType "regoper" )-> "N"-> False-> , CatCreateScalar (-> ScalarType "regoperator" )-> "N"-> False-> , CatCreateScalar (-> ScalarType "regclass" )-> "N"-> False-> , CatCreateScalar (-> ScalarType "regtype" )-> "N"-> False-> , CatCreateScalar (-> ScalarType "uuid" )-> "U"-> False-> , CatCreateScalar (-> ScalarType "tsvector" )-> "U"-> False-> , CatCreateScalar (-> ScalarType "gtsvector" )-> "U"-> False-> , CatCreateScalar (-> ScalarType "tsquery" )-> "U"-> False-> , CatCreateScalar (-> ScalarType "regconfig" )-> "N"-> False-> , CatCreateScalar (-> ScalarType "regdictionary" )-> "N"-> False-> , CatCreateScalar (-> ScalarType "txid_snapshot" )-> "U"-> False-> , CatCreateDomain (-> DomainType "information_schema.cardinal_number" ) (-> ScalarType "int4" )-> , CatCreateDomain (-> DomainType "information_schema.character_data" ) (-> ScalarType "varchar" )-> , CatCreateDomain (-> DomainType "information_schema.sql_identifier" ) (-> ScalarType "varchar" )-> , CatCreateDomain (-> DomainType "information_schema.time_stamp" ) (-> ScalarType "timestamptz" )-> , CatCreateCast (-> ScalarType "int8" ) (-> ScalarType "int2" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "int8" ) (-> ScalarType "int4" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "int8" ) (-> ScalarType "float4" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int8" ) (-> ScalarType "float8" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int8" ) (-> ScalarType "numeric" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int2" ) (-> ScalarType "int8" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int2" ) (-> ScalarType "int4" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int2" ) (-> ScalarType "float4" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int2" ) (-> ScalarType "float8" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int2" ) (-> ScalarType "numeric" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int4" ) (-> ScalarType "int8" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int4" ) (-> ScalarType "int2" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "int4" ) (-> ScalarType "float4" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int4" ) (-> ScalarType "float8" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int4" ) (-> ScalarType "numeric" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "float4" ) (-> ScalarType "int8" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "float4" ) (-> ScalarType "int2" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "float4" ) (-> ScalarType "int4" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "float4" ) (-> ScalarType "float8" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "float4" ) (-> ScalarType "numeric" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "float8" ) (-> ScalarType "int8" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "float8" ) (-> ScalarType "int2" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "float8" ) (-> ScalarType "int4" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "float8" ) (-> ScalarType "float4" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "float8" ) (-> ScalarType "numeric" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "numeric" ) (-> ScalarType "int8" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "numeric" ) (-> ScalarType "int2" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "numeric" ) (-> ScalarType "int4" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "numeric" ) (-> ScalarType "float4" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "numeric" ) (-> ScalarType "float8" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int4" ) (-> ScalarType "bool" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "bool" ) (-> ScalarType "int4" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "int8" ) (-> ScalarType "oid" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int2" ) (-> ScalarType "oid" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int4" ) (-> ScalarType "oid" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "oid" ) (-> ScalarType "int8" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "oid" ) (-> ScalarType "int4" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "oid" ) (-> ScalarType "regproc" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "regproc" ) (-> ScalarType "oid" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int8" ) (-> ScalarType "regproc" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int2" ) (-> ScalarType "regproc" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int4" ) (-> ScalarType "regproc" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "regproc" ) (-> ScalarType "int8" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "regproc" ) (-> ScalarType "int4" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "regproc" ) (-> ScalarType "regprocedure" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "regprocedure" ) (-> ScalarType "regproc" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "oid" ) (-> ScalarType "regprocedure" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "regprocedure" ) (-> ScalarType "oid" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int8" ) (-> ScalarType "regprocedure" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int2" ) (-> ScalarType "regprocedure" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int4" ) (-> ScalarType "regprocedure" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "regprocedure" ) (-> ScalarType "int8" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "regprocedure" ) (-> ScalarType "int4" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "oid" ) (-> ScalarType "regoper" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "regoper" ) (-> ScalarType "oid" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int8" ) (-> ScalarType "regoper" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int2" ) (-> ScalarType "regoper" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int4" ) (-> ScalarType "regoper" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "regoper" ) (-> ScalarType "int8" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "regoper" ) (-> ScalarType "int4" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "regoper" ) (-> ScalarType "regoperator" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "regoperator" ) (-> ScalarType "regoper" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "oid" ) (-> ScalarType "regoperator" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "regoperator" ) (-> ScalarType "oid" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int8" ) (-> ScalarType "regoperator" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int2" ) (-> ScalarType "regoperator" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int4" ) (-> ScalarType "regoperator" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "regoperator" ) (-> ScalarType "int8" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "regoperator" ) (-> ScalarType "int4" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "oid" ) (-> ScalarType "regclass" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "regclass" ) (-> ScalarType "oid" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int8" ) (-> ScalarType "regclass" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int2" ) (-> ScalarType "regclass" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int4" ) (-> ScalarType "regclass" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "regclass" ) (-> ScalarType "int8" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "regclass" ) (-> ScalarType "int4" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "oid" ) (-> ScalarType "regtype" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "regtype" ) (-> ScalarType "oid" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int8" ) (-> ScalarType "regtype" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int2" ) (-> ScalarType "regtype" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int4" ) (-> ScalarType "regtype" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "regtype" ) (-> ScalarType "int8" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "regtype" ) (-> ScalarType "int4" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "oid" ) (-> ScalarType "regconfig" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "regconfig" ) (-> ScalarType "oid" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int8" ) (-> ScalarType "regconfig" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int2" ) (-> ScalarType "regconfig" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int4" ) (-> ScalarType "regconfig" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "regconfig" ) (-> ScalarType "int8" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "regconfig" ) (-> ScalarType "int4" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "oid" ) (-> ScalarType "regdictionary" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "regdictionary" ) (-> ScalarType "oid" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int8" ) (-> ScalarType "regdictionary" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int2" ) (-> ScalarType "regdictionary" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int4" ) (-> ScalarType "regdictionary" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "regdictionary" ) (-> ScalarType "int8" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "regdictionary" ) (-> ScalarType "int4" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "text" ) (-> ScalarType "regclass" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "varchar" ) (-> ScalarType "regclass" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "text" ) (-> ScalarType "bpchar" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "text" ) (-> ScalarType "varchar" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "bpchar" ) (-> ScalarType "text" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "bpchar" ) (-> ScalarType "varchar" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "varchar" ) (-> ScalarType "text" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "varchar" ) (-> ScalarType "bpchar" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "char" ) (-> ScalarType "text" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "char" ) (-> ScalarType "bpchar" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "char" ) (-> ScalarType "varchar" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "name" ) (-> ScalarType "text" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "name" ) (-> ScalarType "bpchar" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "name" ) (-> ScalarType "varchar" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "text" ) (-> ScalarType "char" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "bpchar" ) (-> ScalarType "char" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "varchar" ) (-> ScalarType "char" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "text" ) (-> ScalarType "name" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "bpchar" ) (-> ScalarType "name" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "varchar" ) (-> ScalarType "name" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "char" ) (-> ScalarType "int4" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "int4" ) (-> ScalarType "char" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "abstime" ) (-> ScalarType "date" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "abstime" ) (-> ScalarType "time" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "abstime" ) (-> ScalarType "timestamp" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "abstime" ) (-> ScalarType "timestamptz" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "reltime" ) (-> ScalarType "interval" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "date" ) (-> ScalarType "timestamp" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "date" ) (-> ScalarType "timestamptz" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "time" ) (-> ScalarType "interval" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "time" ) (-> ScalarType "timetz" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "timestamp" ) (-> ScalarType "abstime" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "timestamp" ) (-> ScalarType "date" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "timestamp" ) (-> ScalarType "time" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "timestamp" ) (-> ScalarType "timestamptz" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "timestamptz" ) (-> ScalarType "abstime" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "timestamptz" ) (-> ScalarType "date" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "timestamptz" ) (-> ScalarType "time" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "timestamptz" ) (-> ScalarType "timestamp" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "timestamptz" ) (-> ScalarType "timetz" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "interval" ) (-> ScalarType "reltime" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "interval" ) (-> ScalarType "time" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "timetz" ) (-> ScalarType "time" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "int4" ) (-> ScalarType "abstime" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "abstime" ) (-> ScalarType "int4" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "int4" ) (-> ScalarType "reltime" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "reltime" ) (-> ScalarType "int4" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "lseg" ) (-> ScalarType "point" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "path" ) (-> ScalarType "point" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "path" ) (-> ScalarType "polygon" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "box" ) (-> ScalarType "point" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "box" ) (-> ScalarType "lseg" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "box" ) (-> ScalarType "polygon" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "box" ) (-> ScalarType "circle" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "polygon" ) (-> ScalarType "point" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "polygon" ) (-> ScalarType "path" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "polygon" ) (-> ScalarType "box" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "polygon" ) (-> ScalarType "circle" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "circle" ) (-> ScalarType "point" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "circle" ) (-> ScalarType "box" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "circle" ) (-> ScalarType "polygon" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "cidr" ) (-> ScalarType "inet" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "inet" ) (-> ScalarType "cidr" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "bit" ) (-> ScalarType "varbit" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "varbit" ) (-> ScalarType "bit" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "int8" ) (-> ScalarType "bit" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "int4" ) (-> ScalarType "bit" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "bit" ) (-> ScalarType "int8" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "bit" ) (-> ScalarType "int4" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "cidr" ) (-> ScalarType "text" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "inet" ) (-> ScalarType "text" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "bool" ) (-> ScalarType "text" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "xml" ) (-> ScalarType "text" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "text" ) (-> ScalarType "xml" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "cidr" ) (-> ScalarType "varchar" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "inet" ) (-> ScalarType "varchar" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "bool" ) (-> ScalarType "varchar" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "xml" ) (-> ScalarType "varchar" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "varchar" ) (-> ScalarType "xml" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "cidr" ) (-> ScalarType "bpchar" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "inet" ) (-> ScalarType "bpchar" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "bool" ) (-> ScalarType "bpchar" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "xml" ) (-> ScalarType "bpchar" )-> AssignmentCastContext-> , CatCreateCast (-> ScalarType "bpchar" ) (-> ScalarType "xml" )-> ExplicitCastContext-> , CatCreateCast (-> ScalarType "bpchar" ) (-> ScalarType "bpchar" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "varchar" ) (-> ScalarType "varchar" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "time" ) (-> ScalarType "time" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "timestamp" ) (-> ScalarType "timestamp" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "timestamptz" ) (-> ScalarType "timestamptz" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "interval" ) (-> ScalarType "interval" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "timetz" ) (-> ScalarType "timetz" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "bit" ) (-> ScalarType "bit" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "varbit" ) (-> ScalarType "varbit" )-> ImplicitCastContext-> , CatCreateCast (-> ScalarType "numeric" ) (-> ScalarType "numeric" )-> ImplicitCastContext-> , CatCreateFunction-> FunPrefix-> "~"-> [ ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunPrefix-> "~"-> [ ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunPrefix-> "~"-> [ ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunPrefix-> "~"-> [ ScalarType "bit"-> ] (-> ScalarType "bit" )-> False-> , CatCreateFunction-> FunPrefix-> "~"-> [ ScalarType "inet"-> ] (-> ScalarType "inet" )-> False-> , CatCreateFunction-> FunPrefix-> "||/"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunPrefix-> "|/"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunPrefix-> "|"-> [ ScalarType "tinterval"-> ] (-> ScalarType "abstime" )-> False-> , CatCreateFunction-> FunPrefix-> "@@"-> [ ScalarType "circle"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunPrefix-> "@@"-> [ ScalarType "lseg"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunPrefix-> "@@"-> [ ScalarType "path"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunPrefix-> "@@"-> [ ScalarType "polygon"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunPrefix-> "@@"-> [ ScalarType "box"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunPrefix-> "@-@"-> [ ScalarType "path"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunPrefix-> "@-@"-> [ ScalarType "lseg"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunPrefix-> "@"-> [ ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunPrefix-> "@"-> [ ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunPrefix-> "@"-> [ ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunPrefix-> "@"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunPrefix-> "@"-> [ ScalarType "float4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunPrefix-> "@"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunPrefix-> "?|"-> [ ScalarType "line"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunPrefix-> "?|"-> [ ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunPrefix-> "?-"-> [ ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunPrefix-> "?-"-> [ ScalarType "line"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunPrefix-> "-"-> [ ScalarType "interval"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunPrefix-> "-"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunPrefix-> "-"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunPrefix-> "-"-> [ ScalarType "float4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunPrefix-> "-"-> [ ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunPrefix-> "-"-> [ ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunPrefix-> "-"-> [ ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunPrefix-> "+"-> [ ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunPrefix-> "+"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunPrefix-> "+"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunPrefix-> "+"-> [ ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunPrefix-> "+"-> [ ScalarType "float4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunPrefix-> "+"-> [ ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunPrefix-> "#"-> [ ScalarType "path"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunPrefix-> "#"-> [ ScalarType "polygon"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunPrefix-> "!!"-> [ ScalarType "int8"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunPrefix-> "!!"-> [ ScalarType "tsquery"-> ] (-> ScalarType "tsquery" )-> False-> , CatCreateFunction-> FunPostfix-> "!"-> [ ScalarType "int8"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunBinary-> "~~*"-> [ ScalarType "name"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~~*"-> [ ScalarType "bpchar"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~~*"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~~"-> [ ScalarType "bpchar"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~~"-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~~"-> [ ScalarType "name"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~~"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~>~"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~>~"-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~>=~"-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~>=~"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~="-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~="-> [ ScalarType "tinterval"-> , ScalarType "tinterval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~="-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~="-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~="-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~<~"-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~<~"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~<=~"-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~<=~"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~*"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~*"-> [ ScalarType "bpchar"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~*"-> [ ScalarType "name"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~"-> [ ScalarType "bpchar"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~"-> [ ArrayType ( ScalarType "aclitem" )-> , ScalarType "aclitem"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~"-> [ ScalarType "circle"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~"-> [ ScalarType "polygon"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~"-> [ ScalarType "path"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "~"-> [ ScalarType "name"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "||"-> [ Pseudo AnyArray-> , Pseudo AnyArray-> ] (-> Pseudo AnyArray )-> False-> , CatCreateFunction-> FunBinary-> "||"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunBinary-> "||"-> [ ScalarType "varbit"-> , ScalarType "varbit"-> ] (-> ScalarType "varbit" )-> False-> , CatCreateFunction-> FunBinary-> "||"-> [ Pseudo AnyElement-> , Pseudo AnyArray-> ] (-> Pseudo AnyArray )-> False-> , CatCreateFunction-> FunBinary-> "||"-> [ ScalarType "tsquery"-> , ScalarType "tsquery"-> ] (-> ScalarType "tsquery" )-> False-> , CatCreateFunction-> FunBinary-> "||"-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunBinary-> "||"-> [ Pseudo AnyNonArray-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunBinary-> "||"-> [ ScalarType "tsvector"-> , ScalarType "tsvector"-> ] (-> ScalarType "tsvector" )-> False-> , CatCreateFunction-> FunBinary-> "||"-> [ Pseudo AnyArray-> , Pseudo AnyElement-> ] (-> Pseudo AnyArray )-> False-> , CatCreateFunction-> FunBinary-> "||"-> [ ScalarType "text"-> , Pseudo AnyNonArray-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunBinary-> "|>>"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "|>>"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "|>>"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "|&>"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "|&>"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "|&>"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "|"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "|"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunBinary-> "|"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunBinary-> "|"-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "inet" )-> False-> , CatCreateFunction-> FunBinary-> "|"-> [ ScalarType "bit"-> , ScalarType "bit"-> ] (-> ScalarType "bit" )-> False-> , CatCreateFunction-> FunBinary-> "^"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunBinary-> "^"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "@@@"-> [ ScalarType "tsquery"-> , ScalarType "tsvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "@@@"-> [ ScalarType "tsvector"-> , ScalarType "tsquery"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "@@"-> [ ScalarType "text"-> , ScalarType "tsquery"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "@@"-> [ ScalarType "tsquery"-> , ScalarType "tsvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "@@"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "@@"-> [ ScalarType "tsvector"-> , ScalarType "tsquery"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "@>"-> [ Pseudo AnyArray-> , Pseudo AnyArray-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "@>"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "@>"-> [ ScalarType "tsquery"-> , ScalarType "tsquery"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "@>"-> [ ScalarType "polygon"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "@>"-> [ ScalarType "path"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "@>"-> [ ArrayType ( ScalarType "aclitem" )-> , ScalarType "aclitem"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "@>"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "@>"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "@>"-> [ ScalarType "circle"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "?||"-> [ ScalarType "line"-> , ScalarType "line"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "?||"-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "?|"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "?-|"-> [ ScalarType "line"-> , ScalarType "line"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "?-|"-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "?-"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "?#"-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "?#"-> [ ScalarType "path"-> , ScalarType "path"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "?#"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "?#"-> [ ScalarType "lseg"-> , ScalarType "line"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "?#"-> [ ScalarType "line"-> , ScalarType "line"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "?#"-> [ ScalarType "lseg"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "?#"-> [ ScalarType "line"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">^"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">^"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">>="-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">>"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">>"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">>"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">>"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> ">>"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunBinary-> ">>"-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunBinary-> ">>"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">>"-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">>"-> [ ScalarType "bit"-> , ScalarType "int4"-> ] (-> ScalarType "bit" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "uuid"-> , ScalarType "uuid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "macaddr"-> , ScalarType "macaddr"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "char"-> , ScalarType "char"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "int2"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ Pseudo AnyEnum-> , Pseudo AnyEnum-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ Pseudo AnyArray-> , Pseudo AnyArray-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "timestamp"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "date"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "time"-> , ScalarType "time"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "timetz"-> , ScalarType "timetz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "float4"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "varbit"-> , ScalarType "varbit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "int4"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "name"-> , ScalarType "name"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "tsvector"-> , ScalarType "tsvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "date"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "tsquery"-> , ScalarType "tsquery"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "float8"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "bool"-> , ScalarType "bool"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ Pseudo Record-> , Pseudo Record-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "timestamptz"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "timestamp"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "timestamptz"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "bit"-> , ScalarType "bit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "timestamp"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "abstime"-> , ScalarType "abstime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "path"-> , ScalarType "path"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "timestamptz"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "oid"-> , ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "tinterval"-> , ScalarType "tinterval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "date"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "tid"-> , ScalarType "tid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "money"-> , ScalarType "money"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "oidvector"-> , ScalarType "oidvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "interval"-> , ScalarType "interval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "reltime"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "int4"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "int8"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">="-> [ ScalarType "float4"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "timestamptz"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "macaddr"-> , ScalarType "macaddr"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "int4"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "int8"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "char"-> , ScalarType "char"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ Pseudo AnyArray-> , Pseudo AnyArray-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "int4"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "timestamp"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "interval"-> , ScalarType "interval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ Pseudo AnyEnum-> , Pseudo AnyEnum-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "reltime"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "timestamptz"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "int2"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "tinterval"-> , ScalarType "tinterval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "date"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "timestamp"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "time"-> , ScalarType "time"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "uuid"-> , ScalarType "uuid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "timetz"-> , ScalarType "timetz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "bit"-> , ScalarType "bit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "name"-> , ScalarType "name"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "float4"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "oidvector"-> , ScalarType "oidvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "path"-> , ScalarType "path"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ Pseudo Record-> , Pseudo Record-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "timestamp"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "bool"-> , ScalarType "bool"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "varbit"-> , ScalarType "varbit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "oid"-> , ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "tsvector"-> , ScalarType "tsvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "float8"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "date"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "date"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "timestamptz"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "money"-> , ScalarType "money"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "tsquery"-> , ScalarType "tsquery"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "float4"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "tid"-> , ScalarType "tid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> ">"-> [ ScalarType "abstime"-> , ScalarType "abstime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "timestamp"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "int4"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "reltime"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "date"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "oid"-> , ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "interval"-> , ScalarType "interval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "date"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "oidvector"-> , ScalarType "oidvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "float4"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "int8"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "timestamp"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "int2"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "varbit"-> , ScalarType "varbit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "timestamptz"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "timestamp"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "path"-> , ScalarType "path"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "bit"-> , ScalarType "bit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "timestamptz"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "tinterval"-> , ScalarType "tinterval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "money"-> , ScalarType "money"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "tid"-> , ScalarType "tid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "aclitem"-> , ScalarType "aclitem"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "uuid"-> , ScalarType "uuid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "int2vector"-> , ScalarType "int2vector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ Pseudo Record-> , Pseudo Record-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "cid"-> , ScalarType "cid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "xid"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ Pseudo AnyArray-> , Pseudo AnyArray-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "macaddr"-> , ScalarType "macaddr"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "line"-> , ScalarType "line"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ Pseudo AnyEnum-> , Pseudo AnyEnum-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "xid"-> , ScalarType "xid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "tsvector"-> , ScalarType "tsvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "date"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "time"-> , ScalarType "time"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "timetz"-> , ScalarType "timetz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "float4"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "float8"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "int4"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "name"-> , ScalarType "name"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "tsquery"-> , ScalarType "tsquery"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "char"-> , ScalarType "char"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "bool"-> , ScalarType "bool"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "timestamptz"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "="-> [ ScalarType "abstime"-> , ScalarType "abstime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<^"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<^"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<@"-> [ ScalarType "tsquery"-> , ScalarType "tsquery"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<@"-> [ Pseudo AnyArray-> , Pseudo AnyArray-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<@"-> [ ScalarType "lseg"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<@"-> [ ScalarType "lseg"-> , ScalarType "line"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<@"-> [ ScalarType "point"-> , ScalarType "line"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<@"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<@"-> [ ScalarType "point"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<@"-> [ ScalarType "point"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<@"-> [ ScalarType "point"-> , ScalarType "path"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<@"-> [ ScalarType "point"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<@"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<@"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<@"-> [ ScalarType "point"-> , ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<?>"-> [ ScalarType "abstime"-> , ScalarType "tinterval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "float4"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ Pseudo AnyArray-> , Pseudo AnyArray-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "timetz"-> , ScalarType "timetz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "reltime"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "int4"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "tsvector"-> , ScalarType "tsvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "interval"-> , ScalarType "interval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "time"-> , ScalarType "time"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "date"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "oidvector"-> , ScalarType "oidvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "int4"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "char"-> , ScalarType "char"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "oid"-> , ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "timestamptz"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "int8"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "date"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "bit"-> , ScalarType "bit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "abstime"-> , ScalarType "abstime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "date"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "tsquery"-> , ScalarType "tsquery"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "name"-> , ScalarType "name"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "tinterval"-> , ScalarType "tinterval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "int2"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "timestamp"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "money"-> , ScalarType "money"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "float8"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ Pseudo AnyEnum-> , Pseudo AnyEnum-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "timestamp"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "timestamptz"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "timestamp"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "uuid"-> , ScalarType "uuid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "varbit"-> , ScalarType "varbit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "tid"-> , ScalarType "tid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "bool"-> , ScalarType "bool"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "float4"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "timestamptz"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ Pseudo Record-> , Pseudo Record-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<>"-> [ ScalarType "macaddr"-> , ScalarType "macaddr"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "oidvector"-> , ScalarType "oidvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "oid"-> , ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "reltime"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "tsvector"-> , ScalarType "tsvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ Pseudo AnyEnum-> , Pseudo AnyEnum-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "float8"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "uuid"-> , ScalarType "uuid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "float4"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "tid"-> , ScalarType "tid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "timetz"-> , ScalarType "timetz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "time"-> , ScalarType "time"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "interval"-> , ScalarType "interval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "date"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ Pseudo AnyArray-> , Pseudo AnyArray-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "macaddr"-> , ScalarType "macaddr"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "timestamptz"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "timestamp"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "timestamptz"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "money"-> , ScalarType "money"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "bool"-> , ScalarType "bool"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "timestamp"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "tinterval"-> , ScalarType "tinterval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ Pseudo Record-> , Pseudo Record-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "int4"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "timestamptz"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "date"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "path"-> , ScalarType "path"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "bit"-> , ScalarType "bit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "date"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "tsquery"-> , ScalarType "tsquery"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "int4"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "timestamp"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "varbit"-> , ScalarType "varbit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "name"-> , ScalarType "name"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "int2"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "char"-> , ScalarType "char"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "int8"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "float4"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "abstime"-> , ScalarType "abstime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<="-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<<|"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<<|"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<<|"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<<="-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<<"-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunBinary-> "<<"-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<<"-> [ ScalarType "tinterval"-> , ScalarType "tinterval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<<"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<<"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<<"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<<"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "<<"-> [ ScalarType "bit"-> , ScalarType "int4"-> ] (-> ScalarType "bit" )-> False-> , CatCreateFunction-> FunBinary-> "<<"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunBinary-> "<<"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<->"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "<->"-> [ ScalarType "circle"-> , ScalarType "polygon"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "<->"-> [ ScalarType "point"-> , ScalarType "line"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "<->"-> [ ScalarType "point"-> , ScalarType "path"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "<->"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "<->"-> [ ScalarType "point"-> , ScalarType "circle"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "<->"-> [ ScalarType "lseg"-> , ScalarType "box"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "<->"-> [ ScalarType "point"-> , ScalarType "lseg"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "<->"-> [ ScalarType "lseg"-> , ScalarType "line"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "<->"-> [ ScalarType "point"-> , ScalarType "box"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "<->"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "<->"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "<->"-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "<->"-> [ ScalarType "line"-> , ScalarType "line"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "<->"-> [ ScalarType "path"-> , ScalarType "path"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "<->"-> [ ScalarType "line"-> , ScalarType "box"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "<#>"-> [ ScalarType "abstime"-> , ScalarType "abstime"-> ] (-> ScalarType "tinterval" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "oidvector"-> , ScalarType "oidvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "money"-> , ScalarType "money"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "float8"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "timestamptz"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ Pseudo AnyEnum-> , Pseudo AnyEnum-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "timestamp"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "tinterval"-> , ScalarType "tinterval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "tsvector"-> , ScalarType "tsvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "varbit"-> , ScalarType "varbit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "int8"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "float4"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "path"-> , ScalarType "path"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "bit"-> , ScalarType "bit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "date"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "bool"-> , ScalarType "bool"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "char"-> , ScalarType "char"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ Pseudo Record-> , Pseudo Record-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "name"-> , ScalarType "name"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "timestamptz"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "interval"-> , ScalarType "interval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "date"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "time"-> , ScalarType "time"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "int2"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ Pseudo AnyArray-> , Pseudo AnyArray-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "macaddr"-> , ScalarType "macaddr"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "abstime"-> , ScalarType "abstime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "tid"-> , ScalarType "tid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "float4"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "timestamptz"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "int4"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "uuid"-> , ScalarType "uuid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "timestamp"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "timestamp"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "timetz"-> , ScalarType "timetz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "oid"-> , ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "date"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "int4"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "reltime"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "<"-> [ ScalarType "tsquery"-> , ScalarType "tsquery"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "/"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunBinary-> "/"-> [ ScalarType "int2"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "/"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "/"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunBinary-> "/"-> [ ScalarType "money"-> , ScalarType "float4"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunBinary-> "/"-> [ ScalarType "int8"-> , ScalarType "int2"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "/"-> [ ScalarType "int4"-> , ScalarType "int2"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunBinary-> "/"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunBinary-> "/"-> [ ScalarType "circle"-> , ScalarType "point"-> ] (-> ScalarType "circle" )-> False-> , CatCreateFunction-> FunBinary-> "/"-> [ ScalarType "int4"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "/"-> [ ScalarType "float8"-> , ScalarType "float4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "/"-> [ ScalarType "money"-> , ScalarType "int4"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunBinary-> "/"-> [ ScalarType "path"-> , ScalarType "point"-> ] (-> ScalarType "path" )-> False-> , CatCreateFunction-> FunBinary-> "/"-> [ ScalarType "interval"-> , ScalarType "float8"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunBinary-> "/"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "/"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "/"-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunBinary-> "/"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunBinary-> "/"-> [ ScalarType "float4"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "/"-> [ ScalarType "money"-> , ScalarType "int2"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunBinary-> "/"-> [ ScalarType "float4"-> , ScalarType "float4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunBinary-> "/"-> [ ScalarType "money"-> , ScalarType "float8"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunBinary-> "/"-> [ ScalarType "box"-> , ScalarType "point"-> ] (-> ScalarType "box" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "interval"-> , ScalarType "interval"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "timestamptz"-> , ScalarType "interval"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "timestamptz"-> , ScalarType "timestamptz"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "circle"-> , ScalarType "point"-> ] (-> ScalarType "circle" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "float8"-> , ScalarType "float4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "float4"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "date"-> , ScalarType "int4"-> ] (-> ScalarType "date" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "date"-> , ScalarType "date"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "date"-> , ScalarType "interval"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ArrayType ( ScalarType "aclitem" )-> , ScalarType "aclitem"-> ] (-> ArrayType ( ScalarType "aclitem" ) )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "money"-> , ScalarType "money"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "inet"-> , ScalarType "int8"-> ] (-> ScalarType "inet" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "box"-> , ScalarType "point"-> ] (-> ScalarType "box" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "path"-> , ScalarType "point"-> ] (-> ScalarType "path" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "int2"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "int8"-> , ScalarType "int2"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "int4"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "time"-> , ScalarType "interval"-> ] (-> ScalarType "time" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "timetz"-> , ScalarType "interval"-> ] (-> ScalarType "timetz" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "float4"-> , ScalarType "float4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "abstime"-> , ScalarType "reltime"-> ] (-> ScalarType "abstime" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "int4"-> , ScalarType "int2"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "timestamp"-> , ScalarType "interval"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "time"-> , ScalarType "time"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunBinary-> "-"-> [ ScalarType "timestamp"-> , ScalarType "timestamp"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "interval"-> , ScalarType "interval"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "date"-> , ScalarType "time"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "int4"-> , ScalarType "int2"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "timetz"-> , ScalarType "interval"-> ] (-> ScalarType "timetz" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "time"-> , ScalarType "interval"-> ] (-> ScalarType "time" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "int4"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "timestamp"-> , ScalarType "interval"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "time"-> , ScalarType "date"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "int8"-> , ScalarType "int2"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "date"-> , ScalarType "timetz"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "int2"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "path"-> , ScalarType "path"-> ] (-> ScalarType "path" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "path"-> , ScalarType "point"-> ] (-> ScalarType "path" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "box"-> , ScalarType "point"-> ] (-> ScalarType "box" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "money"-> , ScalarType "money"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "int8"-> , ScalarType "inet"-> ] (-> ScalarType "inet" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ArrayType ( ScalarType "aclitem" )-> , ScalarType "aclitem"-> ] (-> ArrayType ( ScalarType "aclitem" ) )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "inet"-> , ScalarType "int8"-> ] (-> ScalarType "inet" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "interval"-> , ScalarType "date"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "date"-> , ScalarType "interval"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "timetz"-> , ScalarType "date"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "interval"-> , ScalarType "timetz"-> ] (-> ScalarType "timetz" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "interval"-> , ScalarType "timestamp"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "date"-> , ScalarType "int4"-> ] (-> ScalarType "date" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "interval"-> , ScalarType "timestamptz"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "int4"-> , ScalarType "date"-> ] (-> ScalarType "date" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "float4"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "float8"-> , ScalarType "float4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "float4"-> , ScalarType "float4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "circle"-> , ScalarType "point"-> ] (-> ScalarType "circle" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "timestamptz"-> , ScalarType "interval"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "abstime"-> , ScalarType "reltime"-> ] (-> ScalarType "abstime" )-> False-> , CatCreateFunction-> FunBinary-> "+"-> [ ScalarType "interval"-> , ScalarType "time"-> ] (-> ScalarType "time" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "path"-> , ScalarType "point"-> ] (-> ScalarType "path" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "box"-> , ScalarType "point"-> ] (-> ScalarType "box" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "money"-> , ScalarType "float4"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "float4"-> , ScalarType "money"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "money"-> , ScalarType "float8"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "money"-> , ScalarType "int4"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "money"-> , ScalarType "int2"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "float8"-> , ScalarType "money"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "int4"-> , ScalarType "money"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "int2"-> , ScalarType "money"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "circle"-> , ScalarType "point"-> ] (-> ScalarType "circle" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "float4"-> , ScalarType "float4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "float8"-> , ScalarType "interval"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "interval"-> , ScalarType "float8"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "int4"-> , ScalarType "int2"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "float4"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "int4"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "int8"-> , ScalarType "int2"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "int2"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "*"-> [ ScalarType "float8"-> , ScalarType "float4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunBinary-> "&>"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "&>"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "&>"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "&<|"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "&<|"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "&<|"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "&<"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "&<"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "&<"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "&&"-> [ Pseudo AnyArray-> , Pseudo AnyArray-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "&&"-> [ ScalarType "tinterval"-> , ScalarType "tinterval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "&&"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "&&"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "&&"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "&&"-> [ ScalarType "tsquery"-> , ScalarType "tsquery"-> ] (-> ScalarType "tsquery" )-> False-> , CatCreateFunction-> FunBinary-> "&"-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "inet" )-> False-> , CatCreateFunction-> FunBinary-> "&"-> [ ScalarType "bit"-> , ScalarType "bit"-> ] (-> ScalarType "bit" )-> False-> , CatCreateFunction-> FunBinary-> "&"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "&"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunBinary-> "&"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunBinary-> "%"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunBinary-> "%"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunBinary-> "%"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunBinary-> "%"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "#>="-> [ ScalarType "tinterval"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "#>"-> [ ScalarType "tinterval"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "#="-> [ ScalarType "tinterval"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "#<>"-> [ ScalarType "tinterval"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "#<="-> [ ScalarType "tinterval"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "#<"-> [ ScalarType "tinterval"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "##"-> [ ScalarType "line"-> , ScalarType "lseg"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunBinary-> "##"-> [ ScalarType "lseg"-> , ScalarType "line"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunBinary-> "##"-> [ ScalarType "point"-> , ScalarType "box"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunBinary-> "##"-> [ ScalarType "lseg"-> , ScalarType "box"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunBinary-> "##"-> [ ScalarType "line"-> , ScalarType "box"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunBinary-> "##"-> [ ScalarType "point"-> , ScalarType "line"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunBinary-> "##"-> [ ScalarType "point"-> , ScalarType "lseg"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunBinary-> "##"-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunBinary-> "#"-> [ ScalarType "bit"-> , ScalarType "bit"-> ] (-> ScalarType "bit" )-> False-> , CatCreateFunction-> FunBinary-> "#"-> [ ScalarType "line"-> , ScalarType "line"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunBinary-> "#"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "box" )-> False-> , CatCreateFunction-> FunBinary-> "#"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunBinary-> "#"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunBinary-> "#"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunBinary-> "#"-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunBinary-> "!~~*"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "!~~*"-> [ ScalarType "bpchar"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "!~~*"-> [ ScalarType "name"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "!~~"-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "!~~"-> [ ScalarType "bpchar"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "!~~"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "!~~"-> [ ScalarType "name"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "!~*"-> [ ScalarType "bpchar"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "!~*"-> [ ScalarType "name"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "!~*"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "!~"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "!~"-> [ ScalarType "name"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunBinary-> "!~"-> [ ScalarType "bpchar"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "RI_FKey_cascade_del"-> [] (-> Pseudo Trigger )-> False-> , CatCreateFunction-> FunName-> "RI_FKey_cascade_upd"-> [] (-> Pseudo Trigger )-> False-> , CatCreateFunction-> FunName-> "RI_FKey_check_ins"-> [] (-> Pseudo Trigger )-> False-> , CatCreateFunction-> FunName-> "RI_FKey_check_upd"-> [] (-> Pseudo Trigger )-> False-> , CatCreateFunction-> FunName-> "RI_FKey_noaction_del"-> [] (-> Pseudo Trigger )-> False-> , CatCreateFunction-> FunName-> "RI_FKey_noaction_upd"-> [] (-> Pseudo Trigger )-> False-> , CatCreateFunction-> FunName-> "RI_FKey_restrict_del"-> [] (-> Pseudo Trigger )-> False-> , CatCreateFunction-> FunName-> "RI_FKey_restrict_upd"-> [] (-> Pseudo Trigger )-> False-> , CatCreateFunction-> FunName-> "RI_FKey_setdefault_del"-> [] (-> Pseudo Trigger )-> False-> , CatCreateFunction-> FunName-> "RI_FKey_setdefault_upd"-> [] (-> Pseudo Trigger )-> False-> , CatCreateFunction-> FunName-> "RI_FKey_setnull_del"-> [] (-> Pseudo Trigger )-> False-> , CatCreateFunction-> FunName-> "RI_FKey_setnull_upd"-> [] (-> Pseudo Trigger )-> False-> , CatCreateFunction-> FunName-> "abbrev"-> [ ScalarType "cidr"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "abbrev"-> [ ScalarType "inet"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "abs"-> [ ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "abs"-> [ ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "abs"-> [ ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "abs"-> [ ScalarType "float4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "abs"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "abs"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "abstime"-> [ ScalarType "timestamp"-> ] (-> ScalarType "abstime" )-> False-> , CatCreateFunction-> FunName-> "abstime"-> [ ScalarType "timestamptz"-> ] (-> ScalarType "abstime" )-> False-> , CatCreateFunction-> FunName-> "abstimeeq"-> [ ScalarType "abstime"-> , ScalarType "abstime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "abstimege"-> [ ScalarType "abstime"-> , ScalarType "abstime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "abstimegt"-> [ ScalarType "abstime"-> , ScalarType "abstime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "abstimein"-> [ Pseudo Cstring-> ] (-> ScalarType "abstime" )-> False-> , CatCreateFunction-> FunName-> "abstimele"-> [ ScalarType "abstime"-> , ScalarType "abstime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "abstimelt"-> [ ScalarType "abstime"-> , ScalarType "abstime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "abstimene"-> [ ScalarType "abstime"-> , ScalarType "abstime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "abstimeout"-> [ ScalarType "abstime"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "abstimerecv"-> [ Pseudo Internal-> ] (-> ScalarType "abstime" )-> False-> , CatCreateFunction-> FunName-> "abstimesend"-> [ ScalarType "abstime"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "aclcontains"-> [ ArrayType ( ScalarType "aclitem" )-> , ScalarType "aclitem"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "aclinsert"-> [ ArrayType ( ScalarType "aclitem" )-> , ScalarType "aclitem"-> ] (-> ArrayType ( ScalarType "aclitem" ) )-> False-> , CatCreateFunction-> FunName-> "aclitemeq"-> [ ScalarType "aclitem"-> , ScalarType "aclitem"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "aclitemin"-> [ Pseudo Cstring-> ] (-> ScalarType "aclitem" )-> False-> , CatCreateFunction-> FunName-> "aclitemout"-> [ ScalarType "aclitem"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "aclremove"-> [ ArrayType ( ScalarType "aclitem" )-> , ScalarType "aclitem"-> ] (-> ArrayType ( ScalarType "aclitem" ) )-> False-> , CatCreateFunction-> FunName-> "acos"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "age"-> [ ScalarType "xid"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "age"-> [ ScalarType "timestamp"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "age"-> [ ScalarType "timestamptz"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "age"-> [ ScalarType "timestamp"-> , ScalarType "timestamp"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "age"-> [ ScalarType "timestamptz"-> , ScalarType "timestamptz"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "any_in"-> [ Pseudo Cstring-> ] (-> Pseudo Any )-> False-> , CatCreateFunction-> FunName-> "any_out"-> [ Pseudo Any-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "anyarray_in"-> [ Pseudo Cstring-> ] (-> Pseudo AnyArray )-> False-> , CatCreateFunction-> FunName-> "anyarray_out"-> [ Pseudo AnyArray-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "anyarray_recv"-> [ Pseudo Internal-> ] (-> Pseudo AnyArray )-> False-> , CatCreateFunction-> FunName-> "anyarray_send"-> [ Pseudo AnyArray-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "anyelement_in"-> [ Pseudo Cstring-> ] (-> Pseudo AnyElement )-> False-> , CatCreateFunction-> FunName-> "anyelement_out"-> [ Pseudo AnyElement-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "anyenum_in"-> [ Pseudo Cstring-> ] (-> Pseudo AnyEnum )-> False-> , CatCreateFunction-> FunName-> "anyenum_out"-> [ Pseudo AnyEnum-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "anynonarray_in"-> [ Pseudo Cstring-> ] (-> Pseudo AnyNonArray )-> False-> , CatCreateFunction-> FunName-> "anynonarray_out"-> [ Pseudo AnyNonArray-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "anytextcat"-> [ Pseudo AnyNonArray-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "area"-> [ ScalarType "path"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "area"-> [ ScalarType "box"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "area"-> [ ScalarType "circle"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "areajoinsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int2"-> , Pseudo Internal-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "areasel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "array_agg_finalfn"-> [ Pseudo Internal-> ] (-> Pseudo AnyArray )-> False-> , CatCreateFunction-> FunName-> "array_agg_transfn"-> [ Pseudo Internal-> , Pseudo AnyElement-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "array_append"-> [ Pseudo AnyArray-> , Pseudo AnyElement-> ] (-> Pseudo AnyArray )-> False-> , CatCreateFunction-> FunName-> "array_cat"-> [ Pseudo AnyArray-> , Pseudo AnyArray-> ] (-> Pseudo AnyArray )-> False-> , CatCreateFunction-> FunName-> "array_dims"-> [ Pseudo AnyArray-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "array_eq"-> [ Pseudo AnyArray-> , Pseudo AnyArray-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "array_fill"-> [ Pseudo AnyElement-> , ArrayType ( ScalarType "int4" )-> ] (-> Pseudo AnyArray )-> False-> , CatCreateFunction-> FunName-> "array_fill"-> [ Pseudo AnyElement-> , ArrayType ( ScalarType "int4" )-> , ArrayType ( ScalarType "int4" )-> ] (-> Pseudo AnyArray )-> False-> , CatCreateFunction-> FunName-> "array_ge"-> [ Pseudo AnyArray-> , Pseudo AnyArray-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "array_gt"-> [ Pseudo AnyArray-> , Pseudo AnyArray-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "array_in"-> [ Pseudo Cstring-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> Pseudo AnyArray )-> False-> , CatCreateFunction-> FunName-> "array_larger"-> [ Pseudo AnyArray-> , Pseudo AnyArray-> ] (-> Pseudo AnyArray )-> False-> , CatCreateFunction-> FunName-> "array_le"-> [ Pseudo AnyArray-> , Pseudo AnyArray-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "array_length"-> [ Pseudo AnyArray-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "array_lower"-> [ Pseudo AnyArray-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "array_lt"-> [ Pseudo AnyArray-> , Pseudo AnyArray-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "array_ndims"-> [ Pseudo AnyArray-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "array_ne"-> [ Pseudo AnyArray-> , Pseudo AnyArray-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "array_out"-> [ Pseudo AnyArray-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "array_prepend"-> [ Pseudo AnyElement-> , Pseudo AnyArray-> ] (-> Pseudo AnyArray )-> False-> , CatCreateFunction-> FunName-> "array_recv"-> [ Pseudo Internal-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> Pseudo AnyArray )-> False-> , CatCreateFunction-> FunName-> "array_send"-> [ Pseudo AnyArray-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "array_smaller"-> [ Pseudo AnyArray-> , Pseudo AnyArray-> ] (-> Pseudo AnyArray )-> False-> , CatCreateFunction-> FunName-> "array_to_string"-> [ Pseudo AnyArray-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "array_upper"-> [ Pseudo AnyArray-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "arraycontained"-> [ Pseudo AnyArray-> , Pseudo AnyArray-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "arraycontains"-> [ Pseudo AnyArray-> , Pseudo AnyArray-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "arrayoverlap"-> [ Pseudo AnyArray-> , Pseudo AnyArray-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "ascii"-> [ ScalarType "text"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "ascii_to_mic"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "ascii_to_utf8"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "asin"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "atan"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "atan2"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "big5_to_euc_tw"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "big5_to_mic"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "big5_to_utf8"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "bit"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "bit" )-> False-> , CatCreateFunction-> FunName-> "bit"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "bit" )-> False-> , CatCreateFunction-> FunName-> "bit"-> [ ScalarType "bit"-> , ScalarType "int4"-> , ScalarType "bool"-> ] (-> ScalarType "bit" )-> False-> , CatCreateFunction-> FunName-> "bit_in"-> [ Pseudo Cstring-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> ScalarType "bit" )-> False-> , CatCreateFunction-> FunName-> "bit_length"-> [ ScalarType "bytea"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "bit_length"-> [ ScalarType "text"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "bit_length"-> [ ScalarType "bit"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "bit_out"-> [ ScalarType "bit"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "bit_recv"-> [ Pseudo Internal-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> ScalarType "bit" )-> False-> , CatCreateFunction-> FunName-> "bit_send"-> [ ScalarType "bit"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "bitand"-> [ ScalarType "bit"-> , ScalarType "bit"-> ] (-> ScalarType "bit" )-> False-> , CatCreateFunction-> FunName-> "bitcat"-> [ ScalarType "varbit"-> , ScalarType "varbit"-> ] (-> ScalarType "varbit" )-> False-> , CatCreateFunction-> FunName-> "bitcmp"-> [ ScalarType "bit"-> , ScalarType "bit"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "biteq"-> [ ScalarType "bit"-> , ScalarType "bit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bitge"-> [ ScalarType "bit"-> , ScalarType "bit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bitgt"-> [ ScalarType "bit"-> , ScalarType "bit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bitle"-> [ ScalarType "bit"-> , ScalarType "bit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bitlt"-> [ ScalarType "bit"-> , ScalarType "bit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bitne"-> [ ScalarType "bit"-> , ScalarType "bit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bitnot"-> [ ScalarType "bit"-> ] (-> ScalarType "bit" )-> False-> , CatCreateFunction-> FunName-> "bitor"-> [ ScalarType "bit"-> , ScalarType "bit"-> ] (-> ScalarType "bit" )-> False-> , CatCreateFunction-> FunName-> "bitshiftleft"-> [ ScalarType "bit"-> , ScalarType "int4"-> ] (-> ScalarType "bit" )-> False-> , CatCreateFunction-> FunName-> "bitshiftright"-> [ ScalarType "bit"-> , ScalarType "int4"-> ] (-> ScalarType "bit" )-> False-> , CatCreateFunction-> FunName-> "bittypmodin"-> [ ArrayType ( Pseudo Cstring )-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "bittypmodout"-> [ ScalarType "int4"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "bitxor"-> [ ScalarType "bit"-> , ScalarType "bit"-> ] (-> ScalarType "bit" )-> False-> , CatCreateFunction-> FunName-> "bool"-> [ ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "booland_statefunc"-> [ ScalarType "bool"-> , ScalarType "bool"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "booleq"-> [ ScalarType "bool"-> , ScalarType "bool"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "boolge"-> [ ScalarType "bool"-> , ScalarType "bool"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "boolgt"-> [ ScalarType "bool"-> , ScalarType "bool"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "boolin"-> [ Pseudo Cstring-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "boolle"-> [ ScalarType "bool"-> , ScalarType "bool"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "boollt"-> [ ScalarType "bool"-> , ScalarType "bool"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "boolne"-> [ ScalarType "bool"-> , ScalarType "bool"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "boolor_statefunc"-> [ ScalarType "bool"-> , ScalarType "bool"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "boolout"-> [ ScalarType "bool"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "boolrecv"-> [ Pseudo Internal-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "boolsend"-> [ ScalarType "bool"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "box"-> [ ScalarType "polygon"-> ] (-> ScalarType "box" )-> False-> , CatCreateFunction-> FunName-> "box"-> [ ScalarType "circle"-> ] (-> ScalarType "box" )-> False-> , CatCreateFunction-> FunName-> "box"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "box" )-> False-> , CatCreateFunction-> FunName-> "box_above"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "box_above_eq"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "box_add"-> [ ScalarType "box"-> , ScalarType "point"-> ] (-> ScalarType "box" )-> False-> , CatCreateFunction-> FunName-> "box_below"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "box_below_eq"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "box_center"-> [ ScalarType "box"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "box_contain"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "box_contained"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "box_distance"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "box_div"-> [ ScalarType "box"-> , ScalarType "point"-> ] (-> ScalarType "box" )-> False-> , CatCreateFunction-> FunName-> "box_eq"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "box_ge"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "box_gt"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "box_in"-> [ Pseudo Cstring-> ] (-> ScalarType "box" )-> False-> , CatCreateFunction-> FunName-> "box_intersect"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "box" )-> False-> , CatCreateFunction-> FunName-> "box_le"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "box_left"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "box_lt"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "box_mul"-> [ ScalarType "box"-> , ScalarType "point"-> ] (-> ScalarType "box" )-> False-> , CatCreateFunction-> FunName-> "box_out"-> [ ScalarType "box"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "box_overabove"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "box_overbelow"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "box_overlap"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "box_overleft"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "box_overright"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "box_recv"-> [ Pseudo Internal-> ] (-> ScalarType "box" )-> False-> , CatCreateFunction-> FunName-> "box_right"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "box_same"-> [ ScalarType "box"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "box_send"-> [ ScalarType "box"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "box_sub"-> [ ScalarType "box"-> , ScalarType "point"-> ] (-> ScalarType "box" )-> False-> , CatCreateFunction-> FunName-> "bpchar"-> [ ScalarType "char"-> ] (-> ScalarType "bpchar" )-> False-> , CatCreateFunction-> FunName-> "bpchar"-> [ ScalarType "name"-> ] (-> ScalarType "bpchar" )-> False-> , CatCreateFunction-> FunName-> "bpchar"-> [ ScalarType "bpchar"-> , ScalarType "int4"-> , ScalarType "bool"-> ] (-> ScalarType "bpchar" )-> False-> , CatCreateFunction-> FunName-> "bpchar_larger"-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "bpchar" )-> False-> , CatCreateFunction-> FunName-> "bpchar_pattern_ge"-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bpchar_pattern_gt"-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bpchar_pattern_le"-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bpchar_pattern_lt"-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bpchar_smaller"-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "bpchar" )-> False-> , CatCreateFunction-> FunName-> "bpcharcmp"-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "bpchareq"-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bpcharge"-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bpchargt"-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bpchariclike"-> [ ScalarType "bpchar"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bpcharicnlike"-> [ ScalarType "bpchar"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bpcharicregexeq"-> [ ScalarType "bpchar"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bpcharicregexne"-> [ ScalarType "bpchar"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bpcharin"-> [ Pseudo Cstring-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> ScalarType "bpchar" )-> False-> , CatCreateFunction-> FunName-> "bpcharle"-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bpcharlike"-> [ ScalarType "bpchar"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bpcharlt"-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bpcharne"-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bpcharnlike"-> [ ScalarType "bpchar"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bpcharout"-> [ ScalarType "bpchar"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "bpcharrecv"-> [ Pseudo Internal-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> ScalarType "bpchar" )-> False-> , CatCreateFunction-> FunName-> "bpcharregexeq"-> [ ScalarType "bpchar"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bpcharregexne"-> [ ScalarType "bpchar"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bpcharsend"-> [ ScalarType "bpchar"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "bpchartypmodin"-> [ ArrayType ( Pseudo Cstring )-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "bpchartypmodout"-> [ ScalarType "int4"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "broadcast"-> [ ScalarType "inet"-> ] (-> ScalarType "inet" )-> False-> , CatCreateFunction-> FunName-> "btabstimecmp"-> [ ScalarType "abstime"-> , ScalarType "abstime"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btarraycmp"-> [ Pseudo AnyArray-> , Pseudo AnyArray-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btbeginscan"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "btboolcmp"-> [ ScalarType "bool"-> , ScalarType "bool"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btbpchar_pattern_cmp"-> [ ScalarType "bpchar"-> , ScalarType "bpchar"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btbuild"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "btbulkdelete"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "btcharcmp"-> [ ScalarType "char"-> , ScalarType "char"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btcostestimate"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "btendscan"-> [ Pseudo Internal-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "btfloat48cmp"-> [ ScalarType "float4"-> , ScalarType "float8"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btfloat4cmp"-> [ ScalarType "float4"-> , ScalarType "float4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btfloat84cmp"-> [ ScalarType "float8"-> , ScalarType "float4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btfloat8cmp"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btgetbitmap"-> [ Pseudo Internal-> , Pseudo Internal-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "btgettuple"-> [ Pseudo Internal-> , Pseudo Internal-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "btinsert"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "btint24cmp"-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btint28cmp"-> [ ScalarType "int2"-> , ScalarType "int8"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btint2cmp"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btint42cmp"-> [ ScalarType "int4"-> , ScalarType "int2"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btint48cmp"-> [ ScalarType "int4"-> , ScalarType "int8"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btint4cmp"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btint82cmp"-> [ ScalarType "int8"-> , ScalarType "int2"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btint84cmp"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btint8cmp"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btmarkpos"-> [ Pseudo Internal-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "btnamecmp"-> [ ScalarType "name"-> , ScalarType "name"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btoidcmp"-> [ ScalarType "oid"-> , ScalarType "oid"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btoidvectorcmp"-> [ ScalarType "oidvector"-> , ScalarType "oidvector"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btoptions"-> [ ArrayType ( ScalarType "text" )-> , ScalarType "bool"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "btrecordcmp"-> [ Pseudo Record-> , Pseudo Record-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btreltimecmp"-> [ ScalarType "reltime"-> , ScalarType "reltime"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btrescan"-> [ Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "btrestrpos"-> [ Pseudo Internal-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "btrim"-> [ ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "btrim"-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "btrim"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "bttext_pattern_cmp"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "bttextcmp"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "bttidcmp"-> [ ScalarType "tid"-> , ScalarType "tid"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "bttintervalcmp"-> [ ScalarType "tinterval"-> , ScalarType "tinterval"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "btvacuumcleanup"-> [ Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "byteacat"-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "byteacmp"-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "byteaeq"-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "byteage"-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "byteagt"-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "byteain"-> [ Pseudo Cstring-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "byteale"-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bytealike"-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "bytealt"-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "byteane"-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "byteanlike"-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "byteaout"-> [ ScalarType "bytea"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "bytearecv"-> [ Pseudo Internal-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "byteasend"-> [ ScalarType "bytea"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "cash_cmp"-> [ ScalarType "money"-> , ScalarType "money"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "cash_div_flt4"-> [ ScalarType "money"-> , ScalarType "float4"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunName-> "cash_div_flt8"-> [ ScalarType "money"-> , ScalarType "float8"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunName-> "cash_div_int2"-> [ ScalarType "money"-> , ScalarType "int2"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunName-> "cash_div_int4"-> [ ScalarType "money"-> , ScalarType "int4"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunName-> "cash_eq"-> [ ScalarType "money"-> , ScalarType "money"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "cash_ge"-> [ ScalarType "money"-> , ScalarType "money"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "cash_gt"-> [ ScalarType "money"-> , ScalarType "money"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "cash_in"-> [ Pseudo Cstring-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunName-> "cash_le"-> [ ScalarType "money"-> , ScalarType "money"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "cash_lt"-> [ ScalarType "money"-> , ScalarType "money"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "cash_mi"-> [ ScalarType "money"-> , ScalarType "money"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunName-> "cash_mul_flt4"-> [ ScalarType "money"-> , ScalarType "float4"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunName-> "cash_mul_flt8"-> [ ScalarType "money"-> , ScalarType "float8"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunName-> "cash_mul_int2"-> [ ScalarType "money"-> , ScalarType "int2"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunName-> "cash_mul_int4"-> [ ScalarType "money"-> , ScalarType "int4"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunName-> "cash_ne"-> [ ScalarType "money"-> , ScalarType "money"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "cash_out"-> [ ScalarType "money"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "cash_pl"-> [ ScalarType "money"-> , ScalarType "money"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunName-> "cash_recv"-> [ Pseudo Internal-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunName-> "cash_send"-> [ ScalarType "money"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "cash_words"-> [ ScalarType "money"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "cashlarger"-> [ ScalarType "money"-> , ScalarType "money"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunName-> "cashsmaller"-> [ ScalarType "money"-> , ScalarType "money"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunName-> "cbrt"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "ceil"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "ceil"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "ceiling"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "ceiling"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "center"-> [ ScalarType "box"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "center"-> [ ScalarType "circle"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "char"-> [ ScalarType "int4"-> ] (-> ScalarType "char" )-> False-> , CatCreateFunction-> FunName-> "char"-> [ ScalarType "text"-> ] (-> ScalarType "char" )-> False-> , CatCreateFunction-> FunName-> "char_length"-> [ ScalarType "text"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "char_length"-> [ ScalarType "bpchar"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "character_length"-> [ ScalarType "text"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "character_length"-> [ ScalarType "bpchar"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "chareq"-> [ ScalarType "char"-> , ScalarType "char"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "charge"-> [ ScalarType "char"-> , ScalarType "char"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "chargt"-> [ ScalarType "char"-> , ScalarType "char"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "charin"-> [ Pseudo Cstring-> ] (-> ScalarType "char" )-> False-> , CatCreateFunction-> FunName-> "charle"-> [ ScalarType "char"-> , ScalarType "char"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "charlt"-> [ ScalarType "char"-> , ScalarType "char"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "charne"-> [ ScalarType "char"-> , ScalarType "char"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "charout"-> [ ScalarType "char"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "charrecv"-> [ Pseudo Internal-> ] (-> ScalarType "char" )-> False-> , CatCreateFunction-> FunName-> "charsend"-> [ ScalarType "char"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "chr"-> [ ScalarType "int4"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "cideq"-> [ ScalarType "cid"-> , ScalarType "cid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "cidin"-> [ Pseudo Cstring-> ] (-> ScalarType "cid" )-> False-> , CatCreateFunction-> FunName-> "cidout"-> [ ScalarType "cid"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "cidr"-> [ ScalarType "inet"-> ] (-> ScalarType "cidr" )-> False-> , CatCreateFunction-> FunName-> "cidr_in"-> [ Pseudo Cstring-> ] (-> ScalarType "cidr" )-> False-> , CatCreateFunction-> FunName-> "cidr_out"-> [ ScalarType "cidr"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "cidr_recv"-> [ Pseudo Internal-> ] (-> ScalarType "cidr" )-> False-> , CatCreateFunction-> FunName-> "cidr_send"-> [ ScalarType "cidr"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "cidrecv"-> [ Pseudo Internal-> ] (-> ScalarType "cid" )-> False-> , CatCreateFunction-> FunName-> "cidsend"-> [ ScalarType "cid"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "circle"-> [ ScalarType "box"-> ] (-> ScalarType "circle" )-> False-> , CatCreateFunction-> FunName-> "circle"-> [ ScalarType "polygon"-> ] (-> ScalarType "circle" )-> False-> , CatCreateFunction-> FunName-> "circle"-> [ ScalarType "point"-> , ScalarType "float8"-> ] (-> ScalarType "circle" )-> False-> , CatCreateFunction-> FunName-> "circle_above"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "circle_add_pt"-> [ ScalarType "circle"-> , ScalarType "point"-> ] (-> ScalarType "circle" )-> False-> , CatCreateFunction-> FunName-> "circle_below"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "circle_center"-> [ ScalarType "circle"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "circle_contain"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "circle_contain_pt"-> [ ScalarType "circle"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "circle_contained"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "circle_distance"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "circle_div_pt"-> [ ScalarType "circle"-> , ScalarType "point"-> ] (-> ScalarType "circle" )-> False-> , CatCreateFunction-> FunName-> "circle_eq"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "circle_ge"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "circle_gt"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "circle_in"-> [ Pseudo Cstring-> ] (-> ScalarType "circle" )-> False-> , CatCreateFunction-> FunName-> "circle_le"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "circle_left"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "circle_lt"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "circle_mul_pt"-> [ ScalarType "circle"-> , ScalarType "point"-> ] (-> ScalarType "circle" )-> False-> , CatCreateFunction-> FunName-> "circle_ne"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "circle_out"-> [ ScalarType "circle"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "circle_overabove"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "circle_overbelow"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "circle_overlap"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "circle_overleft"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "circle_overright"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "circle_recv"-> [ Pseudo Internal-> ] (-> ScalarType "circle" )-> False-> , CatCreateFunction-> FunName-> "circle_right"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "circle_same"-> [ ScalarType "circle"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "circle_send"-> [ ScalarType "circle"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "circle_sub_pt"-> [ ScalarType "circle"-> , ScalarType "point"-> ] (-> ScalarType "circle" )-> False-> , CatCreateFunction-> FunName-> "clock_timestamp"-> [] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "close_lb"-> [ ScalarType "line"-> , ScalarType "box"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "close_ls"-> [ ScalarType "line"-> , ScalarType "lseg"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "close_lseg"-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "close_pb"-> [ ScalarType "point"-> , ScalarType "box"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "close_pl"-> [ ScalarType "point"-> , ScalarType "line"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "close_ps"-> [ ScalarType "point"-> , ScalarType "lseg"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "close_sb"-> [ ScalarType "lseg"-> , ScalarType "box"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "close_sl"-> [ ScalarType "lseg"-> , ScalarType "line"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "col_description"-> [ ScalarType "oid"-> , ScalarType "int4"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "contjoinsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int2"-> , Pseudo Internal-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "contsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "convert"-> [ ScalarType "bytea"-> , ScalarType "name"-> , ScalarType "name"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "convert_from"-> [ ScalarType "bytea"-> , ScalarType "name"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "convert_to"-> [ ScalarType "text"-> , ScalarType "name"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "cos"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "cot"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "cstring_in"-> [ Pseudo Cstring-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "cstring_out"-> [ Pseudo Cstring-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "cstring_recv"-> [ Pseudo Internal-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "cstring_send"-> [ Pseudo Cstring-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "current_database"-> [] (-> ScalarType "name" )-> False-> , CatCreateFunction-> FunName-> "current_query"-> [] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "current_schema"-> [] (-> ScalarType "name" )-> False-> , CatCreateFunction-> FunName-> "current_schemas"-> [ ScalarType "bool"-> ] (-> ArrayType ( ScalarType "name" ) )-> False-> , CatCreateFunction-> FunName-> "current_setting"-> [ ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "current_user"-> [] (-> ScalarType "name" )-> False-> , CatCreateFunction-> FunName-> "currtid"-> [ ScalarType "oid"-> , ScalarType "tid"-> ] (-> ScalarType "tid" )-> False-> , CatCreateFunction-> FunName-> "currtid2"-> [ ScalarType "text"-> , ScalarType "tid"-> ] (-> ScalarType "tid" )-> False-> , CatCreateFunction-> FunName-> "currval"-> [ ScalarType "regclass"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "cursor_to_xml"-> [ ScalarType "refcursor"-> , ScalarType "int4"-> , ScalarType "bool"-> , ScalarType "bool"-> , ScalarType "text"-> ] (-> ScalarType "xml" )-> False-> , CatCreateFunction-> FunName-> "cursor_to_xmlschema"-> [ ScalarType "refcursor"-> , ScalarType "bool"-> , ScalarType "bool"-> , ScalarType "text"-> ] (-> ScalarType "xml" )-> False-> , CatCreateFunction-> FunName-> "database_to_xml"-> [ ScalarType "bool"-> , ScalarType "bool"-> , ScalarType "text"-> ] (-> ScalarType "xml" )-> False-> , CatCreateFunction-> FunName-> "database_to_xml_and_xmlschema"-> [ ScalarType "bool"-> , ScalarType "bool"-> , ScalarType "text"-> ] (-> ScalarType "xml" )-> False-> , CatCreateFunction-> FunName-> "database_to_xmlschema"-> [ ScalarType "bool"-> , ScalarType "bool"-> , ScalarType "text"-> ] (-> ScalarType "xml" )-> False-> , CatCreateFunction-> FunName-> "date"-> [ ScalarType "abstime"-> ] (-> ScalarType "date" )-> False-> , CatCreateFunction-> FunName-> "date"-> [ ScalarType "timestamp"-> ] (-> ScalarType "date" )-> False-> , CatCreateFunction-> FunName-> "date"-> [ ScalarType "timestamptz"-> ] (-> ScalarType "date" )-> False-> , CatCreateFunction-> FunName-> "date_cmp"-> [ ScalarType "date"-> , ScalarType "date"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "date_cmp_timestamp"-> [ ScalarType "date"-> , ScalarType "timestamp"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "date_cmp_timestamptz"-> [ ScalarType "date"-> , ScalarType "timestamptz"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "date_eq"-> [ ScalarType "date"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "date_eq_timestamp"-> [ ScalarType "date"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "date_eq_timestamptz"-> [ ScalarType "date"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "date_ge"-> [ ScalarType "date"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "date_ge_timestamp"-> [ ScalarType "date"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "date_ge_timestamptz"-> [ ScalarType "date"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "date_gt"-> [ ScalarType "date"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "date_gt_timestamp"-> [ ScalarType "date"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "date_gt_timestamptz"-> [ ScalarType "date"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "date_in"-> [ Pseudo Cstring-> ] (-> ScalarType "date" )-> False-> , CatCreateFunction-> FunName-> "date_larger"-> [ ScalarType "date"-> , ScalarType "date"-> ] (-> ScalarType "date" )-> False-> , CatCreateFunction-> FunName-> "date_le"-> [ ScalarType "date"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "date_le_timestamp"-> [ ScalarType "date"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "date_le_timestamptz"-> [ ScalarType "date"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "date_lt"-> [ ScalarType "date"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "date_lt_timestamp"-> [ ScalarType "date"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "date_lt_timestamptz"-> [ ScalarType "date"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "date_mi"-> [ ScalarType "date"-> , ScalarType "date"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "date_mi_interval"-> [ ScalarType "date"-> , ScalarType "interval"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunName-> "date_mii"-> [ ScalarType "date"-> , ScalarType "int4"-> ] (-> ScalarType "date" )-> False-> , CatCreateFunction-> FunName-> "date_ne"-> [ ScalarType "date"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "date_ne_timestamp"-> [ ScalarType "date"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "date_ne_timestamptz"-> [ ScalarType "date"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "date_out"-> [ ScalarType "date"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "date_part"-> [ ScalarType "text"-> , ScalarType "abstime"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "date_part"-> [ ScalarType "text"-> , ScalarType "reltime"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "date_part"-> [ ScalarType "text"-> , ScalarType "date"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "date_part"-> [ ScalarType "text"-> , ScalarType "time"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "date_part"-> [ ScalarType "text"-> , ScalarType "timestamp"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "date_part"-> [ ScalarType "text"-> , ScalarType "timestamptz"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "date_part"-> [ ScalarType "text"-> , ScalarType "interval"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "date_part"-> [ ScalarType "text"-> , ScalarType "timetz"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "date_pl_interval"-> [ ScalarType "date"-> , ScalarType "interval"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunName-> "date_pli"-> [ ScalarType "date"-> , ScalarType "int4"-> ] (-> ScalarType "date" )-> False-> , CatCreateFunction-> FunName-> "date_recv"-> [ Pseudo Internal-> ] (-> ScalarType "date" )-> False-> , CatCreateFunction-> FunName-> "date_send"-> [ ScalarType "date"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "date_smaller"-> [ ScalarType "date"-> , ScalarType "date"-> ] (-> ScalarType "date" )-> False-> , CatCreateFunction-> FunName-> "date_trunc"-> [ ScalarType "text"-> , ScalarType "timestamp"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunName-> "date_trunc"-> [ ScalarType "text"-> , ScalarType "timestamptz"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "date_trunc"-> [ ScalarType "text"-> , ScalarType "interval"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "datetime_pl"-> [ ScalarType "date"-> , ScalarType "time"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunName-> "datetimetz_pl"-> [ ScalarType "date"-> , ScalarType "timetz"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "dcbrt"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "decode"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "degrees"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "dexp"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "diagonal"-> [ ScalarType "box"-> ] (-> ScalarType "lseg" )-> False-> , CatCreateFunction-> FunName-> "diameter"-> [ ScalarType "circle"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "dispell_init"-> [ Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "dispell_lexize"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "dist_cpoly"-> [ ScalarType "circle"-> , ScalarType "polygon"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "dist_lb"-> [ ScalarType "line"-> , ScalarType "box"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "dist_pb"-> [ ScalarType "point"-> , ScalarType "box"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "dist_pc"-> [ ScalarType "point"-> , ScalarType "circle"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "dist_pl"-> [ ScalarType "point"-> , ScalarType "line"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "dist_ppath"-> [ ScalarType "point"-> , ScalarType "path"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "dist_ps"-> [ ScalarType "point"-> , ScalarType "lseg"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "dist_sb"-> [ ScalarType "lseg"-> , ScalarType "box"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "dist_sl"-> [ ScalarType "lseg"-> , ScalarType "line"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "div"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "dlog1"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "dlog10"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "domain_in"-> [ Pseudo Cstring-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> Pseudo Any )-> False-> , CatCreateFunction-> FunName-> "domain_recv"-> [ Pseudo Internal-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> Pseudo Any )-> False-> , CatCreateFunction-> FunName-> "dpow"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "dround"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "dsimple_init"-> [ Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "dsimple_lexize"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "dsnowball_init"-> [ Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "dsnowball_lexize"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "dsqrt"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "dsynonym_init"-> [ Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "dsynonym_lexize"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "dtrunc"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "encode"-> [ ScalarType "bytea"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "enum_cmp"-> [ Pseudo AnyEnum-> , Pseudo AnyEnum-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "enum_eq"-> [ Pseudo AnyEnum-> , Pseudo AnyEnum-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "enum_first"-> [ Pseudo AnyEnum-> ] (-> Pseudo AnyEnum )-> False-> , CatCreateFunction-> FunName-> "enum_ge"-> [ Pseudo AnyEnum-> , Pseudo AnyEnum-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "enum_gt"-> [ Pseudo AnyEnum-> , Pseudo AnyEnum-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "enum_in"-> [ Pseudo Cstring-> , ScalarType "oid"-> ] (-> Pseudo AnyEnum )-> False-> , CatCreateFunction-> FunName-> "enum_larger"-> [ Pseudo AnyEnum-> , Pseudo AnyEnum-> ] (-> Pseudo AnyEnum )-> False-> , CatCreateFunction-> FunName-> "enum_last"-> [ Pseudo AnyEnum-> ] (-> Pseudo AnyEnum )-> False-> , CatCreateFunction-> FunName-> "enum_le"-> [ Pseudo AnyEnum-> , Pseudo AnyEnum-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "enum_lt"-> [ Pseudo AnyEnum-> , Pseudo AnyEnum-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "enum_ne"-> [ Pseudo AnyEnum-> , Pseudo AnyEnum-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "enum_out"-> [ Pseudo AnyEnum-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "enum_range"-> [ Pseudo AnyEnum-> ] (-> Pseudo AnyArray )-> False-> , CatCreateFunction-> FunName-> "enum_range"-> [ Pseudo AnyEnum-> , Pseudo AnyEnum-> ] (-> Pseudo AnyArray )-> False-> , CatCreateFunction-> FunName-> "enum_recv"-> [ Pseudo Cstring-> , ScalarType "oid"-> ] (-> Pseudo AnyEnum )-> False-> , CatCreateFunction-> FunName-> "enum_send"-> [ Pseudo AnyEnum-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "enum_smaller"-> [ Pseudo AnyEnum-> , Pseudo AnyEnum-> ] (-> Pseudo AnyEnum )-> False-> , CatCreateFunction-> FunName-> "eqjoinsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int2"-> , Pseudo Internal-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "eqsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "euc_cn_to_mic"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "euc_cn_to_utf8"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "euc_jis_2004_to_shift_jis_2004"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "euc_jis_2004_to_utf8"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "euc_jp_to_mic"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "euc_jp_to_sjis"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "euc_jp_to_utf8"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "euc_kr_to_mic"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "euc_kr_to_utf8"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "euc_tw_to_big5"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "euc_tw_to_mic"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "euc_tw_to_utf8"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "exp"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "exp"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "factorial"-> [ ScalarType "int8"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "family"-> [ ScalarType "inet"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "flatfile_update_trigger"-> [] (-> Pseudo Trigger )-> False-> , CatCreateFunction-> FunName-> "float4"-> [ ScalarType "int8"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "float4"-> [ ScalarType "int2"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "float4"-> [ ScalarType "int4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "float4"-> [ ScalarType "float8"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "float4"-> [ ScalarType "numeric"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "float48div"-> [ ScalarType "float4"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float48eq"-> [ ScalarType "float4"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float48ge"-> [ ScalarType "float4"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float48gt"-> [ ScalarType "float4"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float48le"-> [ ScalarType "float4"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float48lt"-> [ ScalarType "float4"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float48mi"-> [ ScalarType "float4"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float48mul"-> [ ScalarType "float4"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float48ne"-> [ ScalarType "float4"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float48pl"-> [ ScalarType "float4"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float4_accum"-> [ ArrayType ( ScalarType "float8" )-> , ScalarType "float4"-> ] (-> ArrayType ( ScalarType "float8" ) )-> False-> , CatCreateFunction-> FunName-> "float4abs"-> [ ScalarType "float4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "float4div"-> [ ScalarType "float4"-> , ScalarType "float4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "float4eq"-> [ ScalarType "float4"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float4ge"-> [ ScalarType "float4"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float4gt"-> [ ScalarType "float4"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float4in"-> [ Pseudo Cstring-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "float4larger"-> [ ScalarType "float4"-> , ScalarType "float4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "float4le"-> [ ScalarType "float4"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float4lt"-> [ ScalarType "float4"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float4mi"-> [ ScalarType "float4"-> , ScalarType "float4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "float4mul"-> [ ScalarType "float4"-> , ScalarType "float4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "float4ne"-> [ ScalarType "float4"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float4out"-> [ ScalarType "float4"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "float4pl"-> [ ScalarType "float4"-> , ScalarType "float4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "float4recv"-> [ Pseudo Internal-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "float4send"-> [ ScalarType "float4"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "float4smaller"-> [ ScalarType "float4"-> , ScalarType "float4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "float4um"-> [ ScalarType "float4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "float4up"-> [ ScalarType "float4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "float8"-> [ ScalarType "int8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8"-> [ ScalarType "int2"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8"-> [ ScalarType "int4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8"-> [ ScalarType "float4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8"-> [ ScalarType "numeric"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float84div"-> [ ScalarType "float8"-> , ScalarType "float4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float84eq"-> [ ScalarType "float8"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float84ge"-> [ ScalarType "float8"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float84gt"-> [ ScalarType "float8"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float84le"-> [ ScalarType "float8"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float84lt"-> [ ScalarType "float8"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float84mi"-> [ ScalarType "float8"-> , ScalarType "float4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float84mul"-> [ ScalarType "float8"-> , ScalarType "float4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float84ne"-> [ ScalarType "float8"-> , ScalarType "float4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float84pl"-> [ ScalarType "float8"-> , ScalarType "float4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8_accum"-> [ ArrayType ( ScalarType "float8" )-> , ScalarType "float8"-> ] (-> ArrayType ( ScalarType "float8" ) )-> False-> , CatCreateFunction-> FunName-> "float8_avg"-> [ ArrayType ( ScalarType "float8" )-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8_corr"-> [ ArrayType ( ScalarType "float8" )-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8_covar_pop"-> [ ArrayType ( ScalarType "float8" )-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8_covar_samp"-> [ ArrayType ( ScalarType "float8" )-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8_regr_accum"-> [ ArrayType ( ScalarType "float8" )-> , ScalarType "float8"-> , ScalarType "float8"-> ] (-> ArrayType ( ScalarType "float8" ) )-> False-> , CatCreateFunction-> FunName-> "float8_regr_avgx"-> [ ArrayType ( ScalarType "float8" )-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8_regr_avgy"-> [ ArrayType ( ScalarType "float8" )-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8_regr_intercept"-> [ ArrayType ( ScalarType "float8" )-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8_regr_r2"-> [ ArrayType ( ScalarType "float8" )-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8_regr_slope"-> [ ArrayType ( ScalarType "float8" )-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8_regr_sxx"-> [ ArrayType ( ScalarType "float8" )-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8_regr_sxy"-> [ ArrayType ( ScalarType "float8" )-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8_regr_syy"-> [ ArrayType ( ScalarType "float8" )-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8_stddev_pop"-> [ ArrayType ( ScalarType "float8" )-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8_stddev_samp"-> [ ArrayType ( ScalarType "float8" )-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8_var_pop"-> [ ArrayType ( ScalarType "float8" )-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8_var_samp"-> [ ArrayType ( ScalarType "float8" )-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8abs"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8div"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8eq"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float8ge"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float8gt"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float8in"-> [ Pseudo Cstring-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8larger"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8le"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float8lt"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float8mi"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8mul"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8ne"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "float8out"-> [ ScalarType "float8"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "float8pl"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8recv"-> [ Pseudo Internal-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8send"-> [ ScalarType "float8"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "float8smaller"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8um"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "float8up"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "floor"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "floor"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "flt4_mul_cash"-> [ ScalarType "float4"-> , ScalarType "money"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunName-> "flt8_mul_cash"-> [ ScalarType "float8"-> , ScalarType "money"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunName-> "fmgr_c_validator"-> [ ScalarType "oid"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "fmgr_internal_validator"-> [ ScalarType "oid"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "fmgr_sql_validator"-> [ ScalarType "oid"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "format_type"-> [ ScalarType "oid"-> , ScalarType "int4"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "gb18030_to_utf8"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "gbk_to_utf8"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "generate_series"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> SetOfType ( ScalarType "int8" ) )-> False-> , CatCreateFunction-> FunName-> "generate_series"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> SetOfType ( ScalarType "int4" ) )-> False-> , CatCreateFunction-> FunName-> "generate_series"-> [ ScalarType "int8"-> , ScalarType "int8"-> , ScalarType "int8"-> ] (-> SetOfType ( ScalarType "int8" ) )-> False-> , CatCreateFunction-> FunName-> "generate_series"-> [ ScalarType "int4"-> , ScalarType "int4"-> , ScalarType "int4"-> ] (-> SetOfType ( ScalarType "int4" ) )-> False-> , CatCreateFunction-> FunName-> "generate_series"-> [ ScalarType "timestamp"-> , ScalarType "timestamp"-> , ScalarType "interval"-> ] (-> SetOfType ( ScalarType "timestamp" ) )-> False-> , CatCreateFunction-> FunName-> "generate_series"-> [ ScalarType "timestamptz"-> , ScalarType "timestamptz"-> , ScalarType "interval"-> ] (-> SetOfType ( ScalarType "timestamptz" ) )-> False-> , CatCreateFunction-> FunName-> "generate_subscripts"-> [ Pseudo AnyArray-> , ScalarType "int4"-> ] (-> SetOfType ( ScalarType "int4" ) )-> False-> , CatCreateFunction-> FunName-> "generate_subscripts"-> [ Pseudo AnyArray-> , ScalarType "int4"-> , ScalarType "bool"-> ] (-> SetOfType ( ScalarType "int4" ) )-> False-> , CatCreateFunction-> FunName-> "get_bit"-> [ ScalarType "bytea"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "get_byte"-> [ ScalarType "bytea"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "get_current_ts_config"-> [] (-> ScalarType "regconfig" )-> False-> , CatCreateFunction-> FunName-> "getdatabaseencoding"-> [] (-> ScalarType "name" )-> False-> , CatCreateFunction-> FunName-> "getpgusername"-> [] (-> ScalarType "name" )-> False-> , CatCreateFunction-> FunName-> "gin_cmp_prefix"-> [ ScalarType "text"-> , ScalarType "text"-> , ScalarType "int2"-> , Pseudo Internal-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "gin_cmp_tslexeme"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "gin_extract_tsquery"-> [ ScalarType "tsquery"-> , Pseudo Internal-> , ScalarType "int2"-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gin_extract_tsvector"-> [ ScalarType "tsvector"-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gin_tsquery_consistent"-> [ Pseudo Internal-> , ScalarType "int2"-> , ScalarType "tsquery"-> , ScalarType "int4"-> , Pseudo Internal-> , Pseudo Internal-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "ginarrayconsistent"-> [ Pseudo Internal-> , ScalarType "int2"-> , Pseudo AnyArray-> , ScalarType "int4"-> , Pseudo Internal-> , Pseudo Internal-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "ginarrayextract"-> [ Pseudo AnyArray-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "ginbeginscan"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "ginbuild"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "ginbulkdelete"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gincostestimate"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "ginendscan"-> [ Pseudo Internal-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "gingetbitmap"-> [ Pseudo Internal-> , Pseudo Internal-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "gininsert"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "ginmarkpos"-> [ Pseudo Internal-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "ginoptions"-> [ ArrayType ( ScalarType "text" )-> , ScalarType "bool"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "ginqueryarrayextract"-> [ Pseudo AnyArray-> , Pseudo Internal-> , ScalarType "int2"-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "ginrescan"-> [ Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "ginrestrpos"-> [ Pseudo Internal-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "ginvacuumcleanup"-> [ Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gist_box_compress"-> [ Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gist_box_consistent"-> [ Pseudo Internal-> , ScalarType "box"-> , ScalarType "int4"-> , ScalarType "oid"-> , Pseudo Internal-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "gist_box_decompress"-> [ Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gist_box_penalty"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gist_box_picksplit"-> [ Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gist_box_same"-> [ ScalarType "box"-> , ScalarType "box"-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gist_box_union"-> [ Pseudo Internal-> , Pseudo Internal-> ] (-> ScalarType "box" )-> False-> , CatCreateFunction-> FunName-> "gist_circle_compress"-> [ Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gist_circle_consistent"-> [ Pseudo Internal-> , ScalarType "circle"-> , ScalarType "int4"-> , ScalarType "oid"-> , Pseudo Internal-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "gist_poly_compress"-> [ Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gist_poly_consistent"-> [ Pseudo Internal-> , ScalarType "polygon"-> , ScalarType "int4"-> , ScalarType "oid"-> , Pseudo Internal-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "gistbeginscan"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gistbuild"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gistbulkdelete"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gistcostestimate"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "gistendscan"-> [ Pseudo Internal-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "gistgetbitmap"-> [ Pseudo Internal-> , Pseudo Internal-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "gistgettuple"-> [ Pseudo Internal-> , Pseudo Internal-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "gistinsert"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "gistmarkpos"-> [ Pseudo Internal-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "gistoptions"-> [ ArrayType ( ScalarType "text" )-> , ScalarType "bool"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "gistrescan"-> [ Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "gistrestrpos"-> [ Pseudo Internal-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "gistvacuumcleanup"-> [ Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gtsquery_compress"-> [ Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gtsquery_consistent"-> [ Pseudo Internal-> , Pseudo Internal-> , ScalarType "int4"-> , ScalarType "oid"-> , Pseudo Internal-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "gtsquery_decompress"-> [ Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gtsquery_penalty"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gtsquery_picksplit"-> [ Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gtsquery_same"-> [ ScalarType "int8"-> , ScalarType "int8"-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gtsquery_union"-> [ Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gtsvector_compress"-> [ Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gtsvector_consistent"-> [ Pseudo Internal-> , ScalarType "gtsvector"-> , ScalarType "int4"-> , ScalarType "oid"-> , Pseudo Internal-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "gtsvector_decompress"-> [ Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gtsvector_penalty"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gtsvector_picksplit"-> [ Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gtsvector_same"-> [ ScalarType "gtsvector"-> , ScalarType "gtsvector"-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gtsvector_union"-> [ Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "gtsvectorin"-> [ Pseudo Cstring-> ] (-> ScalarType "gtsvector" )-> False-> , CatCreateFunction-> FunName-> "gtsvectorout"-> [ ScalarType "gtsvector"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "has_any_column_privilege"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_any_column_privilege"-> [ ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_any_column_privilege"-> [ ScalarType "name"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_any_column_privilege"-> [ ScalarType "name"-> , ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_any_column_privilege"-> [ ScalarType "oid"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_any_column_privilege"-> [ ScalarType "oid"-> , ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_column_privilege"-> [ ScalarType "text"-> , ScalarType "int2"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_column_privilege"-> [ ScalarType "text"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_column_privilege"-> [ ScalarType "oid"-> , ScalarType "int2"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_column_privilege"-> [ ScalarType "oid"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_column_privilege"-> [ ScalarType "name"-> , ScalarType "text"-> , ScalarType "int2"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_column_privilege"-> [ ScalarType "name"-> , ScalarType "text"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_column_privilege"-> [ ScalarType "name"-> , ScalarType "oid"-> , ScalarType "int2"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_column_privilege"-> [ ScalarType "name"-> , ScalarType "oid"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_column_privilege"-> [ ScalarType "oid"-> , ScalarType "text"-> , ScalarType "int2"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_column_privilege"-> [ ScalarType "oid"-> , ScalarType "text"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_column_privilege"-> [ ScalarType "oid"-> , ScalarType "oid"-> , ScalarType "int2"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_column_privilege"-> [ ScalarType "oid"-> , ScalarType "oid"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_database_privilege"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_database_privilege"-> [ ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_database_privilege"-> [ ScalarType "name"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_database_privilege"-> [ ScalarType "name"-> , ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_database_privilege"-> [ ScalarType "oid"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_database_privilege"-> [ ScalarType "oid"-> , ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_foreign_data_wrapper_privilege"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_foreign_data_wrapper_privilege"-> [ ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_foreign_data_wrapper_privilege"-> [ ScalarType "name"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_foreign_data_wrapper_privilege"-> [ ScalarType "name"-> , ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_foreign_data_wrapper_privilege"-> [ ScalarType "oid"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_foreign_data_wrapper_privilege"-> [ ScalarType "oid"-> , ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_function_privilege"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_function_privilege"-> [ ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_function_privilege"-> [ ScalarType "name"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_function_privilege"-> [ ScalarType "name"-> , ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_function_privilege"-> [ ScalarType "oid"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_function_privilege"-> [ ScalarType "oid"-> , ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_language_privilege"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_language_privilege"-> [ ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_language_privilege"-> [ ScalarType "name"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_language_privilege"-> [ ScalarType "name"-> , ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_language_privilege"-> [ ScalarType "oid"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_language_privilege"-> [ ScalarType "oid"-> , ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_schema_privilege"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_schema_privilege"-> [ ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_schema_privilege"-> [ ScalarType "name"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_schema_privilege"-> [ ScalarType "name"-> , ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_schema_privilege"-> [ ScalarType "oid"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_schema_privilege"-> [ ScalarType "oid"-> , ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_server_privilege"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_server_privilege"-> [ ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_server_privilege"-> [ ScalarType "name"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_server_privilege"-> [ ScalarType "name"-> , ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_server_privilege"-> [ ScalarType "oid"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_server_privilege"-> [ ScalarType "oid"-> , ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_table_privilege"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_table_privilege"-> [ ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_table_privilege"-> [ ScalarType "name"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_table_privilege"-> [ ScalarType "name"-> , ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_table_privilege"-> [ ScalarType "oid"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_table_privilege"-> [ ScalarType "oid"-> , ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_tablespace_privilege"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_tablespace_privilege"-> [ ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_tablespace_privilege"-> [ ScalarType "name"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_tablespace_privilege"-> [ ScalarType "name"-> , ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_tablespace_privilege"-> [ ScalarType "oid"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "has_tablespace_privilege"-> [ ScalarType "oid"-> , ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "hash_aclitem"-> [ ScalarType "aclitem"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "hash_numeric"-> [ ScalarType "numeric"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "hashbeginscan"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "hashbpchar"-> [ ScalarType "bpchar"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "hashbuild"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "hashbulkdelete"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "hashchar"-> [ ScalarType "char"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "hashcostestimate"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "hashendscan"-> [ Pseudo Internal-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "hashenum"-> [ Pseudo AnyEnum-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "hashfloat4"-> [ ScalarType "float4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "hashfloat8"-> [ ScalarType "float8"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "hashgetbitmap"-> [ Pseudo Internal-> , Pseudo Internal-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "hashgettuple"-> [ Pseudo Internal-> , Pseudo Internal-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "hashinet"-> [ ScalarType "inet"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "hashinsert"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "hashint2"-> [ ScalarType "int2"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "hashint2vector"-> [ ScalarType "int2vector"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "hashint4"-> [ ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "hashint8"-> [ ScalarType "int8"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "hashmacaddr"-> [ ScalarType "macaddr"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "hashmarkpos"-> [ Pseudo Internal-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "hashname"-> [ ScalarType "name"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "hashoid"-> [ ScalarType "oid"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "hashoidvector"-> [ ScalarType "oidvector"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "hashoptions"-> [ ArrayType ( ScalarType "text" )-> , ScalarType "bool"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "hashrescan"-> [ Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "hashrestrpos"-> [ Pseudo Internal-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "hashtext"-> [ ScalarType "text"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "hashvacuumcleanup"-> [ Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "hashvarlena"-> [ Pseudo Internal-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "height"-> [ ScalarType "box"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "host"-> [ ScalarType "inet"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "hostmask"-> [ ScalarType "inet"-> ] (-> ScalarType "inet" )-> False-> , CatCreateFunction-> FunName-> "iclikejoinsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int2"-> , Pseudo Internal-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "iclikesel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "icnlikejoinsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int2"-> , Pseudo Internal-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "icnlikesel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "icregexeqjoinsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int2"-> , Pseudo Internal-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "icregexeqsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "icregexnejoinsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int2"-> , Pseudo Internal-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "icregexnesel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "inet_client_addr"-> [] (-> ScalarType "inet" )-> False-> , CatCreateFunction-> FunName-> "inet_client_port"-> [] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "inet_in"-> [ Pseudo Cstring-> ] (-> ScalarType "inet" )-> False-> , CatCreateFunction-> FunName-> "inet_out"-> [ ScalarType "inet"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "inet_recv"-> [ Pseudo Internal-> ] (-> ScalarType "inet" )-> False-> , CatCreateFunction-> FunName-> "inet_send"-> [ ScalarType "inet"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "inet_server_addr"-> [] (-> ScalarType "inet" )-> False-> , CatCreateFunction-> FunName-> "inet_server_port"-> [] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "inetand"-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "inet" )-> False-> , CatCreateFunction-> FunName-> "inetmi"-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "inetmi_int8"-> [ ScalarType "inet"-> , ScalarType "int8"-> ] (-> ScalarType "inet" )-> False-> , CatCreateFunction-> FunName-> "inetnot"-> [ ScalarType "inet"-> ] (-> ScalarType "inet" )-> False-> , CatCreateFunction-> FunName-> "inetor"-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "inet" )-> False-> , CatCreateFunction-> FunName-> "inetpl"-> [ ScalarType "inet"-> , ScalarType "int8"-> ] (-> ScalarType "inet" )-> False-> , CatCreateFunction-> FunName-> "initcap"-> [ ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "int2"-> [ ScalarType "int8"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "int2"-> [ ScalarType "int4"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "int2"-> [ ScalarType "float4"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "int2"-> [ ScalarType "float8"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "int2"-> [ ScalarType "numeric"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "int24div"-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int24eq"-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int24ge"-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int24gt"-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int24le"-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int24lt"-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int24mi"-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int24mul"-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int24ne"-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int24pl"-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int28div"-> [ ScalarType "int2"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int28eq"-> [ ScalarType "int2"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int28ge"-> [ ScalarType "int2"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int28gt"-> [ ScalarType "int2"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int28le"-> [ ScalarType "int2"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int28lt"-> [ ScalarType "int2"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int28mi"-> [ ScalarType "int2"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int28mul"-> [ ScalarType "int2"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int28ne"-> [ ScalarType "int2"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int28pl"-> [ ScalarType "int2"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int2_accum"-> [ ArrayType ( ScalarType "numeric" )-> , ScalarType "int2"-> ] (-> ArrayType ( ScalarType "numeric" ) )-> False-> , CatCreateFunction-> FunName-> "int2_avg_accum"-> [ ArrayType ( ScalarType "int8" )-> , ScalarType "int2"-> ] (-> ArrayType ( ScalarType "int8" ) )-> False-> , CatCreateFunction-> FunName-> "int2_mul_cash"-> [ ScalarType "int2"-> , ScalarType "money"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunName-> "int2_sum"-> [ ScalarType "int8"-> , ScalarType "int2"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int2abs"-> [ ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "int2and"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "int2div"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "int2eq"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int2ge"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int2gt"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int2in"-> [ Pseudo Cstring-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "int2larger"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "int2le"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int2lt"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int2mi"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "int2mod"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "int2mul"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "int2ne"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int2not"-> [ ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "int2or"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "int2out"-> [ ScalarType "int2"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "int2pl"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "int2recv"-> [ Pseudo Internal-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "int2send"-> [ ScalarType "int2"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "int2shl"-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "int2shr"-> [ ScalarType "int2"-> , ScalarType "int4"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "int2smaller"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "int2um"-> [ ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "int2up"-> [ ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "int2vectoreq"-> [ ScalarType "int2vector"-> , ScalarType "int2vector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int2vectorin"-> [ Pseudo Cstring-> ] (-> ScalarType "int2vector" )-> False-> , CatCreateFunction-> FunName-> "int2vectorout"-> [ ScalarType "int2vector"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "int2vectorrecv"-> [ Pseudo Internal-> ] (-> ScalarType "int2vector" )-> False-> , CatCreateFunction-> FunName-> "int2vectorsend"-> [ ScalarType "int2vector"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "int2xor"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "int4"-> [ ScalarType "bool"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4"-> [ ScalarType "char"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4"-> [ ScalarType "int8"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4"-> [ ScalarType "int2"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4"-> [ ScalarType "float4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4"-> [ ScalarType "float8"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4"-> [ ScalarType "bit"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4"-> [ ScalarType "numeric"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int42div"-> [ ScalarType "int4"-> , ScalarType "int2"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int42eq"-> [ ScalarType "int4"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int42ge"-> [ ScalarType "int4"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int42gt"-> [ ScalarType "int4"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int42le"-> [ ScalarType "int4"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int42lt"-> [ ScalarType "int4"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int42mi"-> [ ScalarType "int4"-> , ScalarType "int2"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int42mul"-> [ ScalarType "int4"-> , ScalarType "int2"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int42ne"-> [ ScalarType "int4"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int42pl"-> [ ScalarType "int4"-> , ScalarType "int2"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int48div"-> [ ScalarType "int4"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int48eq"-> [ ScalarType "int4"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int48ge"-> [ ScalarType "int4"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int48gt"-> [ ScalarType "int4"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int48le"-> [ ScalarType "int4"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int48lt"-> [ ScalarType "int4"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int48mi"-> [ ScalarType "int4"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int48mul"-> [ ScalarType "int4"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int48ne"-> [ ScalarType "int4"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int48pl"-> [ ScalarType "int4"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int4_accum"-> [ ArrayType ( ScalarType "numeric" )-> , ScalarType "int4"-> ] (-> ArrayType ( ScalarType "numeric" ) )-> False-> , CatCreateFunction-> FunName-> "int4_avg_accum"-> [ ArrayType ( ScalarType "int8" )-> , ScalarType "int4"-> ] (-> ArrayType ( ScalarType "int8" ) )-> False-> , CatCreateFunction-> FunName-> "int4_mul_cash"-> [ ScalarType "int4"-> , ScalarType "money"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunName-> "int4_sum"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int4abs"-> [ ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4and"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4div"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4eq"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int4ge"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int4gt"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int4in"-> [ Pseudo Cstring-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4inc"-> [ ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4larger"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4le"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int4lt"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int4mi"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4mod"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4mul"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4ne"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int4not"-> [ ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4or"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4out"-> [ ScalarType "int4"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "int4pl"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4recv"-> [ Pseudo Internal-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4send"-> [ ScalarType "int4"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "int4shl"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4shr"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4smaller"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4um"-> [ ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4up"-> [ ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int4xor"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "int8"-> [ ScalarType "int2"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8"-> [ ScalarType "int4"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8"-> [ ScalarType "float4"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8"-> [ ScalarType "float8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8"-> [ ScalarType "bit"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8"-> [ ScalarType "numeric"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int82div"-> [ ScalarType "int8"-> , ScalarType "int2"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int82eq"-> [ ScalarType "int8"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int82ge"-> [ ScalarType "int8"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int82gt"-> [ ScalarType "int8"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int82le"-> [ ScalarType "int8"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int82lt"-> [ ScalarType "int8"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int82mi"-> [ ScalarType "int8"-> , ScalarType "int2"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int82mul"-> [ ScalarType "int8"-> , ScalarType "int2"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int82ne"-> [ ScalarType "int8"-> , ScalarType "int2"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int82pl"-> [ ScalarType "int8"-> , ScalarType "int2"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int84div"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int84eq"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int84ge"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int84gt"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int84le"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int84lt"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int84mi"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int84mul"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int84ne"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int84pl"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8_accum"-> [ ArrayType ( ScalarType "numeric" )-> , ScalarType "int8"-> ] (-> ArrayType ( ScalarType "numeric" ) )-> False-> , CatCreateFunction-> FunName-> "int8_avg"-> [ ArrayType ( ScalarType "int8" )-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "int8_avg_accum"-> [ ArrayType ( ScalarType "numeric" )-> , ScalarType "int8"-> ] (-> ArrayType ( ScalarType "numeric" ) )-> False-> , CatCreateFunction-> FunName-> "int8_sum"-> [ ScalarType "numeric"-> , ScalarType "int8"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "int8abs"-> [ ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8and"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8div"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8eq"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int8ge"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int8gt"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int8in"-> [ Pseudo Cstring-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8inc"-> [ ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8inc_any"-> [ ScalarType "int8"-> , Pseudo Any-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8inc_float8_float8"-> [ ScalarType "int8"-> , ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8larger"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8le"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int8lt"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int8mi"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8mod"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8mul"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8ne"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "int8not"-> [ ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8or"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8out"-> [ ScalarType "int8"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "int8pl"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8pl_inet"-> [ ScalarType "int8"-> , ScalarType "inet"-> ] (-> ScalarType "inet" )-> False-> , CatCreateFunction-> FunName-> "int8recv"-> [ Pseudo Internal-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8send"-> [ ScalarType "int8"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "int8shl"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8shr"-> [ ScalarType "int8"-> , ScalarType "int4"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8smaller"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8um"-> [ ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8up"-> [ ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "int8xor"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "integer_pl_date"-> [ ScalarType "int4"-> , ScalarType "date"-> ] (-> ScalarType "date" )-> False-> , CatCreateFunction-> FunName-> "inter_lb"-> [ ScalarType "line"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "inter_sb"-> [ ScalarType "lseg"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "inter_sl"-> [ ScalarType "lseg"-> , ScalarType "line"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "internal_in"-> [ Pseudo Cstring-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "internal_out"-> [ Pseudo Internal-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "interval"-> [ ScalarType "reltime"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "interval"-> [ ScalarType "time"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "interval"-> [ ScalarType "interval"-> , ScalarType "int4"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "interval_accum"-> [ ArrayType ( ScalarType "interval" )-> , ScalarType "interval"-> ] (-> ArrayType ( ScalarType "interval" ) )-> False-> , CatCreateFunction-> FunName-> "interval_avg"-> [ ArrayType ( ScalarType "interval" )-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "interval_cmp"-> [ ScalarType "interval"-> , ScalarType "interval"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "interval_div"-> [ ScalarType "interval"-> , ScalarType "float8"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "interval_eq"-> [ ScalarType "interval"-> , ScalarType "interval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "interval_ge"-> [ ScalarType "interval"-> , ScalarType "interval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "interval_gt"-> [ ScalarType "interval"-> , ScalarType "interval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "interval_hash"-> [ ScalarType "interval"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "interval_in"-> [ Pseudo Cstring-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "interval_larger"-> [ ScalarType "interval"-> , ScalarType "interval"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "interval_le"-> [ ScalarType "interval"-> , ScalarType "interval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "interval_lt"-> [ ScalarType "interval"-> , ScalarType "interval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "interval_mi"-> [ ScalarType "interval"-> , ScalarType "interval"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "interval_mul"-> [ ScalarType "interval"-> , ScalarType "float8"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "interval_ne"-> [ ScalarType "interval"-> , ScalarType "interval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "interval_out"-> [ ScalarType "interval"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "interval_pl"-> [ ScalarType "interval"-> , ScalarType "interval"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "interval_pl_date"-> [ ScalarType "interval"-> , ScalarType "date"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunName-> "interval_pl_time"-> [ ScalarType "interval"-> , ScalarType "time"-> ] (-> ScalarType "time" )-> False-> , CatCreateFunction-> FunName-> "interval_pl_timestamp"-> [ ScalarType "interval"-> , ScalarType "timestamp"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunName-> "interval_pl_timestamptz"-> [ ScalarType "interval"-> , ScalarType "timestamptz"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "interval_pl_timetz"-> [ ScalarType "interval"-> , ScalarType "timetz"-> ] (-> ScalarType "timetz" )-> False-> , CatCreateFunction-> FunName-> "interval_recv"-> [ Pseudo Internal-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "interval_send"-> [ ScalarType "interval"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "interval_smaller"-> [ ScalarType "interval"-> , ScalarType "interval"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "interval_um"-> [ ScalarType "interval"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "intervaltypmodin"-> [ ArrayType ( Pseudo Cstring )-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "intervaltypmodout"-> [ ScalarType "int4"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "intinterval"-> [ ScalarType "abstime"-> , ScalarType "tinterval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "isclosed"-> [ ScalarType "path"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "isfinite"-> [ ScalarType "abstime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "isfinite"-> [ ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "isfinite"-> [ ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "isfinite"-> [ ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "isfinite"-> [ ScalarType "interval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "ishorizontal"-> [ ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "ishorizontal"-> [ ScalarType "line"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "ishorizontal"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "iso8859_1_to_utf8"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "iso8859_to_utf8"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "iso_to_koi8r"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "iso_to_mic"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "iso_to_win1251"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "iso_to_win866"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "isopen"-> [ ScalarType "path"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "isparallel"-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "isparallel"-> [ ScalarType "line"-> , ScalarType "line"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "isperp"-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "isperp"-> [ ScalarType "line"-> , ScalarType "line"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "isvertical"-> [ ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "isvertical"-> [ ScalarType "line"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "isvertical"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "johab_to_utf8"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "justify_days"-> [ ScalarType "interval"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "justify_hours"-> [ ScalarType "interval"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "justify_interval"-> [ ScalarType "interval"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "koi8r_to_iso"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "koi8r_to_mic"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "koi8r_to_utf8"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "koi8r_to_win1251"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "koi8r_to_win866"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "koi8u_to_utf8"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "language_handler_in"-> [ Pseudo Cstring-> ] (-> Pseudo LanguageHandler )-> False-> , CatCreateFunction-> FunName-> "language_handler_out"-> [ Pseudo LanguageHandler-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "lastval"-> [] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "latin1_to_mic"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "latin2_to_mic"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "latin2_to_win1250"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "latin3_to_mic"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "latin4_to_mic"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "length"-> [ ScalarType "bytea"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "length"-> [ ScalarType "text"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "length"-> [ ScalarType "lseg"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "length"-> [ ScalarType "path"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "length"-> [ ScalarType "bpchar"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "length"-> [ ScalarType "bit"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "length"-> [ ScalarType "tsvector"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "length"-> [ ScalarType "bytea"-> , ScalarType "name"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "like"-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "like"-> [ ScalarType "name"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "like"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "like_escape"-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "like_escape"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "likejoinsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int2"-> , Pseudo Internal-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "likesel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "line"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "line" )-> False-> , CatCreateFunction-> FunName-> "line_distance"-> [ ScalarType "line"-> , ScalarType "line"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "line_eq"-> [ ScalarType "line"-> , ScalarType "line"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "line_horizontal"-> [ ScalarType "line"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "line_in"-> [ Pseudo Cstring-> ] (-> ScalarType "line" )-> False-> , CatCreateFunction-> FunName-> "line_interpt"-> [ ScalarType "line"-> , ScalarType "line"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "line_intersect"-> [ ScalarType "line"-> , ScalarType "line"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "line_out"-> [ ScalarType "line"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "line_parallel"-> [ ScalarType "line"-> , ScalarType "line"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "line_perp"-> [ ScalarType "line"-> , ScalarType "line"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "line_recv"-> [ Pseudo Internal-> ] (-> ScalarType "line" )-> False-> , CatCreateFunction-> FunName-> "line_send"-> [ ScalarType "line"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "line_vertical"-> [ ScalarType "line"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "ln"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "ln"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "lo_close"-> [ ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "lo_creat"-> [ ScalarType "int4"-> ] (-> ScalarType "oid" )-> False-> , CatCreateFunction-> FunName-> "lo_create"-> [ ScalarType "oid"-> ] (-> ScalarType "oid" )-> False-> , CatCreateFunction-> FunName-> "lo_export"-> [ ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "lo_import"-> [ ScalarType "text"-> ] (-> ScalarType "oid" )-> False-> , CatCreateFunction-> FunName-> "lo_import"-> [ ScalarType "text"-> , ScalarType "oid"-> ] (-> ScalarType "oid" )-> False-> , CatCreateFunction-> FunName-> "lo_lseek"-> [ ScalarType "int4"-> , ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "lo_open"-> [ ScalarType "oid"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "lo_tell"-> [ ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "lo_truncate"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "lo_unlink"-> [ ScalarType "oid"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "log"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "log"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "log"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "loread"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "lower"-> [ ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "lowrite"-> [ ScalarType "int4"-> , ScalarType "bytea"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "lpad"-> [ ScalarType "text"-> , ScalarType "int4"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "lpad"-> [ ScalarType "text"-> , ScalarType "int4"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "lseg"-> [ ScalarType "box"-> ] (-> ScalarType "lseg" )-> False-> , CatCreateFunction-> FunName-> "lseg"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "lseg" )-> False-> , CatCreateFunction-> FunName-> "lseg_center"-> [ ScalarType "lseg"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "lseg_distance"-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "lseg_eq"-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "lseg_ge"-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "lseg_gt"-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "lseg_horizontal"-> [ ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "lseg_in"-> [ Pseudo Cstring-> ] (-> ScalarType "lseg" )-> False-> , CatCreateFunction-> FunName-> "lseg_interpt"-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "lseg_intersect"-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "lseg_le"-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "lseg_length"-> [ ScalarType "lseg"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "lseg_lt"-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "lseg_ne"-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "lseg_out"-> [ ScalarType "lseg"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "lseg_parallel"-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "lseg_perp"-> [ ScalarType "lseg"-> , ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "lseg_recv"-> [ Pseudo Internal-> ] (-> ScalarType "lseg" )-> False-> , CatCreateFunction-> FunName-> "lseg_send"-> [ ScalarType "lseg"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "lseg_vertical"-> [ ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "ltrim"-> [ ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "ltrim"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "macaddr_cmp"-> [ ScalarType "macaddr"-> , ScalarType "macaddr"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "macaddr_eq"-> [ ScalarType "macaddr"-> , ScalarType "macaddr"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "macaddr_ge"-> [ ScalarType "macaddr"-> , ScalarType "macaddr"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "macaddr_gt"-> [ ScalarType "macaddr"-> , ScalarType "macaddr"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "macaddr_in"-> [ Pseudo Cstring-> ] (-> ScalarType "macaddr" )-> False-> , CatCreateFunction-> FunName-> "macaddr_le"-> [ ScalarType "macaddr"-> , ScalarType "macaddr"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "macaddr_lt"-> [ ScalarType "macaddr"-> , ScalarType "macaddr"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "macaddr_ne"-> [ ScalarType "macaddr"-> , ScalarType "macaddr"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "macaddr_out"-> [ ScalarType "macaddr"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "macaddr_recv"-> [ Pseudo Internal-> ] (-> ScalarType "macaddr" )-> False-> , CatCreateFunction-> FunName-> "macaddr_send"-> [ ScalarType "macaddr"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "makeaclitem"-> [ ScalarType "oid"-> , ScalarType "oid"-> , ScalarType "text"-> , ScalarType "bool"-> ] (-> ScalarType "aclitem" )-> False-> , CatCreateFunction-> FunName-> "masklen"-> [ ScalarType "inet"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "md5"-> [ ScalarType "bytea"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "md5"-> [ ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "mic_to_ascii"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "mic_to_big5"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "mic_to_euc_cn"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "mic_to_euc_jp"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "mic_to_euc_kr"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "mic_to_euc_tw"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "mic_to_iso"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "mic_to_koi8r"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "mic_to_latin1"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "mic_to_latin2"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "mic_to_latin3"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "mic_to_latin4"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "mic_to_sjis"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "mic_to_win1250"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "mic_to_win1251"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "mic_to_win866"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "mktinterval"-> [ ScalarType "abstime"-> , ScalarType "abstime"-> ] (-> ScalarType "tinterval" )-> False-> , CatCreateFunction-> FunName-> "mod"-> [ ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "mod"-> [ ScalarType "int2"-> , ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunName-> "mod"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "mod"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "mul_d_interval"-> [ ScalarType "float8"-> , ScalarType "interval"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "name"-> [ ScalarType "text"-> ] (-> ScalarType "name" )-> False-> , CatCreateFunction-> FunName-> "name"-> [ ScalarType "bpchar"-> ] (-> ScalarType "name" )-> False-> , CatCreateFunction-> FunName-> "name"-> [ ScalarType "varchar"-> ] (-> ScalarType "name" )-> False-> , CatCreateFunction-> FunName-> "nameeq"-> [ ScalarType "name"-> , ScalarType "name"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "namege"-> [ ScalarType "name"-> , ScalarType "name"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "namegt"-> [ ScalarType "name"-> , ScalarType "name"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "nameiclike"-> [ ScalarType "name"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "nameicnlike"-> [ ScalarType "name"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "nameicregexeq"-> [ ScalarType "name"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "nameicregexne"-> [ ScalarType "name"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "namein"-> [ Pseudo Cstring-> ] (-> ScalarType "name" )-> False-> , CatCreateFunction-> FunName-> "namele"-> [ ScalarType "name"-> , ScalarType "name"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "namelike"-> [ ScalarType "name"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "namelt"-> [ ScalarType "name"-> , ScalarType "name"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "namene"-> [ ScalarType "name"-> , ScalarType "name"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "namenlike"-> [ ScalarType "name"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "nameout"-> [ ScalarType "name"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "namerecv"-> [ Pseudo Internal-> ] (-> ScalarType "name" )-> False-> , CatCreateFunction-> FunName-> "nameregexeq"-> [ ScalarType "name"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "nameregexne"-> [ ScalarType "name"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "namesend"-> [ ScalarType "name"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "neqjoinsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int2"-> , Pseudo Internal-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "neqsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "netmask"-> [ ScalarType "inet"-> ] (-> ScalarType "inet" )-> False-> , CatCreateFunction-> FunName-> "network"-> [ ScalarType "inet"-> ] (-> ScalarType "cidr" )-> False-> , CatCreateFunction-> FunName-> "network_cmp"-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "network_eq"-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "network_ge"-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "network_gt"-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "network_le"-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "network_lt"-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "network_ne"-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "network_sub"-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "network_subeq"-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "network_sup"-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "network_supeq"-> [ ScalarType "inet"-> , ScalarType "inet"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "nextval"-> [ ScalarType "regclass"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "nlikejoinsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int2"-> , Pseudo Internal-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "nlikesel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "notlike"-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "notlike"-> [ ScalarType "name"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "notlike"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "now"-> [] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "npoints"-> [ ScalarType "path"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "npoints"-> [ ScalarType "polygon"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "numeric"-> [ ScalarType "int8"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric"-> [ ScalarType "int2"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric"-> [ ScalarType "int4"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric"-> [ ScalarType "float4"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric"-> [ ScalarType "float8"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric"-> [ ScalarType "numeric"-> , ScalarType "int4"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_abs"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_accum"-> [ ArrayType ( ScalarType "numeric" )-> , ScalarType "numeric"-> ] (-> ArrayType ( ScalarType "numeric" ) )-> False-> , CatCreateFunction-> FunName-> "numeric_add"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_avg"-> [ ArrayType ( ScalarType "numeric" )-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_avg_accum"-> [ ArrayType ( ScalarType "numeric" )-> , ScalarType "numeric"-> ] (-> ArrayType ( ScalarType "numeric" ) )-> False-> , CatCreateFunction-> FunName-> "numeric_cmp"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "numeric_div"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_div_trunc"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_eq"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "numeric_exp"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_fac"-> [ ScalarType "int8"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_ge"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "numeric_gt"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "numeric_in"-> [ Pseudo Cstring-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_inc"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_larger"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_le"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "numeric_ln"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_log"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_lt"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "numeric_mod"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_mul"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_ne"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "numeric_out"-> [ ScalarType "numeric"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "numeric_power"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_recv"-> [ Pseudo Internal-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_send"-> [ ScalarType "numeric"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "numeric_smaller"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_sqrt"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_stddev_pop"-> [ ArrayType ( ScalarType "numeric" )-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_stddev_samp"-> [ ArrayType ( ScalarType "numeric" )-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_sub"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_uminus"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_uplus"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_var_pop"-> [ ArrayType ( ScalarType "numeric" )-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numeric_var_samp"-> [ ArrayType ( ScalarType "numeric" )-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "numerictypmodin"-> [ ArrayType ( Pseudo Cstring )-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "numerictypmodout"-> [ ScalarType "int4"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "numnode"-> [ ScalarType "tsquery"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "obj_description"-> [ ScalarType "oid"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "obj_description"-> [ ScalarType "oid"-> , ScalarType "name"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "octet_length"-> [ ScalarType "bytea"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "octet_length"-> [ ScalarType "text"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "octet_length"-> [ ScalarType "bpchar"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "octet_length"-> [ ScalarType "bit"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "oid"-> [ ScalarType "int8"-> ] (-> ScalarType "oid" )-> False-> , CatCreateFunction-> FunName-> "oideq"-> [ ScalarType "oid"-> , ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "oidge"-> [ ScalarType "oid"-> , ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "oidgt"-> [ ScalarType "oid"-> , ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "oidin"-> [ Pseudo Cstring-> ] (-> ScalarType "oid" )-> False-> , CatCreateFunction-> FunName-> "oidlarger"-> [ ScalarType "oid"-> , ScalarType "oid"-> ] (-> ScalarType "oid" )-> False-> , CatCreateFunction-> FunName-> "oidle"-> [ ScalarType "oid"-> , ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "oidlt"-> [ ScalarType "oid"-> , ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "oidne"-> [ ScalarType "oid"-> , ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "oidout"-> [ ScalarType "oid"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "oidrecv"-> [ Pseudo Internal-> ] (-> ScalarType "oid" )-> False-> , CatCreateFunction-> FunName-> "oidsend"-> [ ScalarType "oid"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "oidsmaller"-> [ ScalarType "oid"-> , ScalarType "oid"-> ] (-> ScalarType "oid" )-> False-> , CatCreateFunction-> FunName-> "oidvectoreq"-> [ ScalarType "oidvector"-> , ScalarType "oidvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "oidvectorge"-> [ ScalarType "oidvector"-> , ScalarType "oidvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "oidvectorgt"-> [ ScalarType "oidvector"-> , ScalarType "oidvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "oidvectorin"-> [ Pseudo Cstring-> ] (-> ScalarType "oidvector" )-> False-> , CatCreateFunction-> FunName-> "oidvectorle"-> [ ScalarType "oidvector"-> , ScalarType "oidvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "oidvectorlt"-> [ ScalarType "oidvector"-> , ScalarType "oidvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "oidvectorne"-> [ ScalarType "oidvector"-> , ScalarType "oidvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "oidvectorout"-> [ ScalarType "oidvector"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "oidvectorrecv"-> [ Pseudo Internal-> ] (-> ScalarType "oidvector" )-> False-> , CatCreateFunction-> FunName-> "oidvectorsend"-> [ ScalarType "oidvector"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "oidvectortypes"-> [ ScalarType "oidvector"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "on_pb"-> [ ScalarType "point"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "on_pl"-> [ ScalarType "point"-> , ScalarType "line"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "on_ppath"-> [ ScalarType "point"-> , ScalarType "path"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "on_ps"-> [ ScalarType "point"-> , ScalarType "lseg"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "on_sb"-> [ ScalarType "lseg"-> , ScalarType "box"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "on_sl"-> [ ScalarType "lseg"-> , ScalarType "line"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "opaque_in"-> [ Pseudo Cstring-> ] (-> Pseudo Opaque )-> False-> , CatCreateFunction-> FunName-> "opaque_out"-> [ Pseudo Opaque-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "overlaps"-> [ ScalarType "time"-> , ScalarType "time"-> , ScalarType "time"-> , ScalarType "time"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "overlaps"-> [ ScalarType "time"-> , ScalarType "time"-> , ScalarType "time"-> , ScalarType "interval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "overlaps"-> [ ScalarType "time"-> , ScalarType "interval"-> , ScalarType "time"-> , ScalarType "time"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "overlaps"-> [ ScalarType "time"-> , ScalarType "interval"-> , ScalarType "time"-> , ScalarType "interval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "overlaps"-> [ ScalarType "timestamp"-> , ScalarType "timestamp"-> , ScalarType "timestamp"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "overlaps"-> [ ScalarType "timestamp"-> , ScalarType "timestamp"-> , ScalarType "timestamp"-> , ScalarType "interval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "overlaps"-> [ ScalarType "timestamp"-> , ScalarType "interval"-> , ScalarType "timestamp"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "overlaps"-> [ ScalarType "timestamp"-> , ScalarType "interval"-> , ScalarType "timestamp"-> , ScalarType "interval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "overlaps"-> [ ScalarType "timestamptz"-> , ScalarType "timestamptz"-> , ScalarType "timestamptz"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "overlaps"-> [ ScalarType "timestamptz"-> , ScalarType "timestamptz"-> , ScalarType "timestamptz"-> , ScalarType "interval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "overlaps"-> [ ScalarType "timestamptz"-> , ScalarType "interval"-> , ScalarType "timestamptz"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "overlaps"-> [ ScalarType "timestamptz"-> , ScalarType "interval"-> , ScalarType "timestamptz"-> , ScalarType "interval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "overlaps"-> [ ScalarType "timetz"-> , ScalarType "timetz"-> , ScalarType "timetz"-> , ScalarType "timetz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "overlay"-> [ ScalarType "text"-> , ScalarType "text"-> , ScalarType "int4"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "overlay"-> [ ScalarType "text"-> , ScalarType "text"-> , ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "path"-> [ ScalarType "polygon"-> ] (-> ScalarType "path" )-> False-> , CatCreateFunction-> FunName-> "path_add"-> [ ScalarType "path"-> , ScalarType "path"-> ] (-> ScalarType "path" )-> False-> , CatCreateFunction-> FunName-> "path_add_pt"-> [ ScalarType "path"-> , ScalarType "point"-> ] (-> ScalarType "path" )-> False-> , CatCreateFunction-> FunName-> "path_center"-> [ ScalarType "path"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "path_contain_pt"-> [ ScalarType "path"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "path_distance"-> [ ScalarType "path"-> , ScalarType "path"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "path_div_pt"-> [ ScalarType "path"-> , ScalarType "point"-> ] (-> ScalarType "path" )-> False-> , CatCreateFunction-> FunName-> "path_in"-> [ Pseudo Cstring-> ] (-> ScalarType "path" )-> False-> , CatCreateFunction-> FunName-> "path_inter"-> [ ScalarType "path"-> , ScalarType "path"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "path_length"-> [ ScalarType "path"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "path_mul_pt"-> [ ScalarType "path"-> , ScalarType "point"-> ] (-> ScalarType "path" )-> False-> , CatCreateFunction-> FunName-> "path_n_eq"-> [ ScalarType "path"-> , ScalarType "path"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "path_n_ge"-> [ ScalarType "path"-> , ScalarType "path"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "path_n_gt"-> [ ScalarType "path"-> , ScalarType "path"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "path_n_le"-> [ ScalarType "path"-> , ScalarType "path"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "path_n_lt"-> [ ScalarType "path"-> , ScalarType "path"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "path_npoints"-> [ ScalarType "path"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "path_out"-> [ ScalarType "path"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "path_recv"-> [ Pseudo Internal-> ] (-> ScalarType "path" )-> False-> , CatCreateFunction-> FunName-> "path_send"-> [ ScalarType "path"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "path_sub_pt"-> [ ScalarType "path"-> , ScalarType "point"-> ] (-> ScalarType "path" )-> False-> , CatCreateFunction-> FunName-> "pclose"-> [ ScalarType "path"-> ] (-> ScalarType "path" )-> False-> , CatCreateFunction-> FunName-> "pg_advisory_lock"-> [ ScalarType "int8"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "pg_advisory_lock"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "pg_advisory_lock_shared"-> [ ScalarType "int8"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "pg_advisory_lock_shared"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "pg_advisory_unlock"-> [ ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_advisory_unlock"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_advisory_unlock_all"-> [] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "pg_advisory_unlock_shared"-> [ ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_advisory_unlock_shared"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_backend_pid"-> [] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "pg_cancel_backend"-> [ ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_char_to_encoding"-> [ ScalarType "name"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "pg_client_encoding"-> [] (-> ScalarType "name" )-> False-> , CatCreateFunction-> FunName-> "pg_column_size"-> [ Pseudo Any-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "pg_conf_load_time"-> [] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "pg_conversion_is_visible"-> [ ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_current_xlog_insert_location"-> [] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_current_xlog_location"-> [] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_cursor"-> [] (-> SetOfType ( Pseudo Record ) )-> False-> , CatCreateFunction-> FunName-> "pg_database_size"-> [ ScalarType "name"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_database_size"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_encoding_to_char"-> [ ScalarType "int4"-> ] (-> ScalarType "name" )-> False-> , CatCreateFunction-> FunName-> "pg_function_is_visible"-> [ ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_get_constraintdef"-> [ ScalarType "oid"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_get_constraintdef"-> [ ScalarType "oid"-> , ScalarType "bool"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_get_expr"-> [ ScalarType "text"-> , ScalarType "oid"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_get_expr"-> [ ScalarType "text"-> , ScalarType "oid"-> , ScalarType "bool"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_get_function_arguments"-> [ ScalarType "oid"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_get_function_identity_arguments"-> [ ScalarType "oid"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_get_function_result"-> [ ScalarType "oid"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_get_functiondef"-> [ ScalarType "oid"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_get_indexdef"-> [ ScalarType "oid"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_get_indexdef"-> [ ScalarType "oid"-> , ScalarType "int4"-> , ScalarType "bool"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_get_keywords"-> [] (-> SetOfType ( Pseudo Record ) )-> False-> , CatCreateFunction-> FunName-> "pg_get_ruledef"-> [ ScalarType "oid"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_get_ruledef"-> [ ScalarType "oid"-> , ScalarType "bool"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_get_serial_sequence"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_get_triggerdef"-> [ ScalarType "oid"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_get_userbyid"-> [ ScalarType "oid"-> ] (-> ScalarType "name" )-> False-> , CatCreateFunction-> FunName-> "pg_get_viewdef"-> [ ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_get_viewdef"-> [ ScalarType "oid"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_get_viewdef"-> [ ScalarType "text"-> , ScalarType "bool"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_get_viewdef"-> [ ScalarType "oid"-> , ScalarType "bool"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_has_role"-> [ ScalarType "name"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_has_role"-> [ ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_has_role"-> [ ScalarType "name"-> , ScalarType "name"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_has_role"-> [ ScalarType "name"-> , ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_has_role"-> [ ScalarType "oid"-> , ScalarType "name"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_has_role"-> [ ScalarType "oid"-> , ScalarType "oid"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_is_other_temp_schema"-> [ ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_lock_status"-> [] (-> SetOfType ( Pseudo Record ) )-> False-> , CatCreateFunction-> FunName-> "pg_ls_dir"-> [ ScalarType "text"-> ] (-> SetOfType ( ScalarType "text" ) )-> False-> , CatCreateFunction-> FunName-> "pg_my_temp_schema"-> [] (-> ScalarType "oid" )-> False-> , CatCreateFunction-> FunName-> "pg_opclass_is_visible"-> [ ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_operator_is_visible"-> [ ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_options_to_table"-> [ ArrayType ( ScalarType "text" )-> ] (-> SetOfType ( Pseudo Record ) )-> False-> , CatCreateFunction-> FunName-> "pg_postmaster_start_time"-> [] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "pg_prepared_statement"-> [] (-> SetOfType ( Pseudo Record ) )-> False-> , CatCreateFunction-> FunName-> "pg_prepared_xact"-> [] (-> SetOfType ( Pseudo Record ) )-> False-> , CatCreateFunction-> FunName-> "pg_read_file"-> [ ScalarType "text"-> , ScalarType "int8"-> , ScalarType "int8"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_relation_size"-> [ ScalarType "regclass"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_relation_size"-> [ ScalarType "regclass"-> , ScalarType "text"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_reload_conf"-> [] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_rotate_logfile"-> [] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_show_all_settings"-> [] (-> SetOfType ( Pseudo Record ) )-> False-> , CatCreateFunction-> FunName-> "pg_size_pretty"-> [ ScalarType "int8"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_sleep"-> [ ScalarType "float8"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "pg_start_backup"-> [ ScalarType "text"-> , ScalarType "bool"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_clear_snapshot"-> [] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "pg_stat_file"-> [ ScalarType "text"-> ] (-> Pseudo Record )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_activity"-> [ ScalarType "int4"-> ] (-> SetOfType ( Pseudo Record ) )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_backend_activity"-> [ ScalarType "int4"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_backend_activity_start"-> [ ScalarType "int4"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_backend_client_addr"-> [ ScalarType "int4"-> ] (-> ScalarType "inet" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_backend_client_port"-> [ ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_backend_dbid"-> [ ScalarType "int4"-> ] (-> ScalarType "oid" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_backend_idset"-> [] (-> SetOfType ( ScalarType "int4" ) )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_backend_pid"-> [ ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_backend_start"-> [ ScalarType "int4"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_backend_userid"-> [ ScalarType "int4"-> ] (-> ScalarType "oid" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_backend_waiting"-> [ ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_backend_xact_start"-> [ ScalarType "int4"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_bgwriter_buf_written_checkpoints"-> [] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_bgwriter_buf_written_clean"-> [] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_bgwriter_maxwritten_clean"-> [] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_bgwriter_requested_checkpoints"-> [] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_bgwriter_timed_checkpoints"-> [] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_blocks_fetched"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_blocks_hit"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_buf_alloc"-> [] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_buf_written_backend"-> [] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_db_blocks_fetched"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_db_blocks_hit"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_db_numbackends"-> [ ScalarType "oid"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_db_tuples_deleted"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_db_tuples_fetched"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_db_tuples_inserted"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_db_tuples_returned"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_db_tuples_updated"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_db_xact_commit"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_db_xact_rollback"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_dead_tuples"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_function_calls"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_function_self_time"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_function_time"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_last_analyze_time"-> [ ScalarType "oid"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_last_autoanalyze_time"-> [ ScalarType "oid"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_last_autovacuum_time"-> [ ScalarType "oid"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_last_vacuum_time"-> [ ScalarType "oid"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_live_tuples"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_numscans"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_tuples_deleted"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_tuples_fetched"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_tuples_hot_updated"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_tuples_inserted"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_tuples_returned"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_get_tuples_updated"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_stat_reset"-> [] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "pg_stop_backup"-> [] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_switch_xlog"-> [] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_table_is_visible"-> [ ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_tablespace_databases"-> [ ScalarType "oid"-> ] (-> SetOfType ( ScalarType "oid" ) )-> False-> , CatCreateFunction-> FunName-> "pg_tablespace_size"-> [ ScalarType "name"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_tablespace_size"-> [ ScalarType "oid"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_terminate_backend"-> [ ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_timezone_abbrevs"-> [] (-> SetOfType ( Pseudo Record ) )-> False-> , CatCreateFunction-> FunName-> "pg_timezone_names"-> [] (-> SetOfType ( Pseudo Record ) )-> False-> , CatCreateFunction-> FunName-> "pg_total_relation_size"-> [ ScalarType "regclass"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "pg_try_advisory_lock"-> [ ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_try_advisory_lock"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_try_advisory_lock_shared"-> [ ScalarType "int8"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_try_advisory_lock_shared"-> [ ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_ts_config_is_visible"-> [ ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_ts_dict_is_visible"-> [ ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_ts_parser_is_visible"-> [ ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_ts_template_is_visible"-> [ ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_type_is_visible"-> [ ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pg_typeof"-> [ Pseudo Any-> ] (-> ScalarType "regtype" )-> False-> , CatCreateFunction-> FunName-> "pg_xlogfile_name"-> [ ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "pg_xlogfile_name_offset"-> [ ScalarType "text"-> ] (-> Pseudo Record )-> False-> , CatCreateFunction-> FunName-> "pi"-> [] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "plainto_tsquery"-> [ ScalarType "text"-> ] (-> ScalarType "tsquery" )-> False-> , CatCreateFunction-> FunName-> "plainto_tsquery"-> [ ScalarType "regconfig"-> , ScalarType "text"-> ] (-> ScalarType "tsquery" )-> False-> , CatCreateFunction-> FunName-> "point"-> [ ScalarType "lseg"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "point"-> [ ScalarType "path"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "point"-> [ ScalarType "box"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "point"-> [ ScalarType "polygon"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "point"-> [ ScalarType "circle"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "point"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "point_above"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "point_add"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "point_below"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "point_distance"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "point_div"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "point_eq"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "point_horiz"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "point_in"-> [ Pseudo Cstring-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "point_left"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "point_mul"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "point_ne"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "point_out"-> [ ScalarType "point"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "point_recv"-> [ Pseudo Internal-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "point_right"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "point_send"-> [ ScalarType "point"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "point_sub"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "point_vert"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "poly_above"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "poly_below"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "poly_center"-> [ ScalarType "polygon"-> ] (-> ScalarType "point" )-> False-> , CatCreateFunction-> FunName-> "poly_contain"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "poly_contain_pt"-> [ ScalarType "polygon"-> , ScalarType "point"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "poly_contained"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "poly_distance"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "poly_in"-> [ Pseudo Cstring-> ] (-> ScalarType "polygon" )-> False-> , CatCreateFunction-> FunName-> "poly_left"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "poly_npoints"-> [ ScalarType "polygon"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "poly_out"-> [ ScalarType "polygon"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "poly_overabove"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "poly_overbelow"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "poly_overlap"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "poly_overleft"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "poly_overright"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "poly_recv"-> [ Pseudo Internal-> ] (-> ScalarType "polygon" )-> False-> , CatCreateFunction-> FunName-> "poly_right"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "poly_same"-> [ ScalarType "polygon"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "poly_send"-> [ ScalarType "polygon"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "polygon"-> [ ScalarType "path"-> ] (-> ScalarType "polygon" )-> False-> , CatCreateFunction-> FunName-> "polygon"-> [ ScalarType "box"-> ] (-> ScalarType "polygon" )-> False-> , CatCreateFunction-> FunName-> "polygon"-> [ ScalarType "circle"-> ] (-> ScalarType "polygon" )-> False-> , CatCreateFunction-> FunName-> "polygon"-> [ ScalarType "int4"-> , ScalarType "circle"-> ] (-> ScalarType "polygon" )-> False-> , CatCreateFunction-> FunName-> "popen"-> [ ScalarType "path"-> ] (-> ScalarType "path" )-> False-> , CatCreateFunction-> FunName-> "position"-> [ ScalarType "bytea"-> , ScalarType "bytea"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "position"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "position"-> [ ScalarType "bit"-> , ScalarType "bit"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "positionjoinsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int2"-> , Pseudo Internal-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "positionsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "postgresql_fdw_validator"-> [ ArrayType ( ScalarType "text" )-> , ScalarType "oid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pow"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "pow"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "power"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "power"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "prsd_end"-> [ Pseudo Internal-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "prsd_headline"-> [ Pseudo Internal-> , Pseudo Internal-> , ScalarType "tsquery"-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "prsd_lextype"-> [ Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "prsd_nexttoken"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "prsd_start"-> [ Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "pt_contained_circle"-> [ ScalarType "point"-> , ScalarType "circle"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "pt_contained_poly"-> [ ScalarType "point"-> , ScalarType "polygon"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "query_to_xml"-> [ ScalarType "text"-> , ScalarType "bool"-> , ScalarType "bool"-> , ScalarType "text"-> ] (-> ScalarType "xml" )-> False-> , CatCreateFunction-> FunName-> "query_to_xml_and_xmlschema"-> [ ScalarType "text"-> , ScalarType "bool"-> , ScalarType "bool"-> , ScalarType "text"-> ] (-> ScalarType "xml" )-> False-> , CatCreateFunction-> FunName-> "query_to_xmlschema"-> [ ScalarType "text"-> , ScalarType "bool"-> , ScalarType "bool"-> , ScalarType "text"-> ] (-> ScalarType "xml" )-> False-> , CatCreateFunction-> FunName-> "querytree"-> [ ScalarType "tsquery"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "quote_ident"-> [ ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "quote_literal"-> [ ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "quote_literal"-> [ Pseudo AnyElement-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "quote_nullable"-> [ ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "quote_nullable"-> [ Pseudo AnyElement-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "radians"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "radius"-> [ ScalarType "circle"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "random"-> [] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "record_eq"-> [ Pseudo Record-> , Pseudo Record-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "record_ge"-> [ Pseudo Record-> , Pseudo Record-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "record_gt"-> [ Pseudo Record-> , Pseudo Record-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "record_in"-> [ Pseudo Cstring-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> Pseudo Record )-> False-> , CatCreateFunction-> FunName-> "record_le"-> [ Pseudo Record-> , Pseudo Record-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "record_lt"-> [ Pseudo Record-> , Pseudo Record-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "record_ne"-> [ Pseudo Record-> , Pseudo Record-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "record_out"-> [ Pseudo Record-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "record_recv"-> [ Pseudo Internal-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> Pseudo Record )-> False-> , CatCreateFunction-> FunName-> "record_send"-> [ Pseudo Record-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "regclass"-> [ ScalarType "text"-> ] (-> ScalarType "regclass" )-> False-> , CatCreateFunction-> FunName-> "regclassin"-> [ Pseudo Cstring-> ] (-> ScalarType "regclass" )-> False-> , CatCreateFunction-> FunName-> "regclassout"-> [ ScalarType "regclass"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "regclassrecv"-> [ Pseudo Internal-> ] (-> ScalarType "regclass" )-> False-> , CatCreateFunction-> FunName-> "regclasssend"-> [ ScalarType "regclass"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "regconfigin"-> [ Pseudo Cstring-> ] (-> ScalarType "regconfig" )-> False-> , CatCreateFunction-> FunName-> "regconfigout"-> [ ScalarType "regconfig"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "regconfigrecv"-> [ Pseudo Internal-> ] (-> ScalarType "regconfig" )-> False-> , CatCreateFunction-> FunName-> "regconfigsend"-> [ ScalarType "regconfig"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "regdictionaryin"-> [ Pseudo Cstring-> ] (-> ScalarType "regdictionary" )-> False-> , CatCreateFunction-> FunName-> "regdictionaryout"-> [ ScalarType "regdictionary"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "regdictionaryrecv"-> [ Pseudo Internal-> ] (-> ScalarType "regdictionary" )-> False-> , CatCreateFunction-> FunName-> "regdictionarysend"-> [ ScalarType "regdictionary"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "regexeqjoinsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int2"-> , Pseudo Internal-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "regexeqsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "regexnejoinsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int2"-> , Pseudo Internal-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "regexnesel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "regexp_matches"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> SetOfType ( ArrayType ( ScalarType "text" ) ) )-> False-> , CatCreateFunction-> FunName-> "regexp_matches"-> [ ScalarType "text"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> SetOfType ( ArrayType ( ScalarType "text" ) ) )-> False-> , CatCreateFunction-> FunName-> "regexp_replace"-> [ ScalarType "text"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "regexp_replace"-> [ ScalarType "text"-> , ScalarType "text"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "regexp_split_to_array"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ArrayType ( ScalarType "text" ) )-> False-> , CatCreateFunction-> FunName-> "regexp_split_to_array"-> [ ScalarType "text"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ArrayType ( ScalarType "text" ) )-> False-> , CatCreateFunction-> FunName-> "regexp_split_to_table"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> SetOfType ( ScalarType "text" ) )-> False-> , CatCreateFunction-> FunName-> "regexp_split_to_table"-> [ ScalarType "text"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> SetOfType ( ScalarType "text" ) )-> False-> , CatCreateFunction-> FunName-> "regoperatorin"-> [ Pseudo Cstring-> ] (-> ScalarType "regoperator" )-> False-> , CatCreateFunction-> FunName-> "regoperatorout"-> [ ScalarType "regoperator"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "regoperatorrecv"-> [ Pseudo Internal-> ] (-> ScalarType "regoperator" )-> False-> , CatCreateFunction-> FunName-> "regoperatorsend"-> [ ScalarType "regoperator"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "regoperin"-> [ Pseudo Cstring-> ] (-> ScalarType "regoper" )-> False-> , CatCreateFunction-> FunName-> "regoperout"-> [ ScalarType "regoper"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "regoperrecv"-> [ Pseudo Internal-> ] (-> ScalarType "regoper" )-> False-> , CatCreateFunction-> FunName-> "regopersend"-> [ ScalarType "regoper"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "regprocedurein"-> [ Pseudo Cstring-> ] (-> ScalarType "regprocedure" )-> False-> , CatCreateFunction-> FunName-> "regprocedureout"-> [ ScalarType "regprocedure"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "regprocedurerecv"-> [ Pseudo Internal-> ] (-> ScalarType "regprocedure" )-> False-> , CatCreateFunction-> FunName-> "regproceduresend"-> [ ScalarType "regprocedure"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "regprocin"-> [ Pseudo Cstring-> ] (-> ScalarType "regproc" )-> False-> , CatCreateFunction-> FunName-> "regprocout"-> [ ScalarType "regproc"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "regprocrecv"-> [ Pseudo Internal-> ] (-> ScalarType "regproc" )-> False-> , CatCreateFunction-> FunName-> "regprocsend"-> [ ScalarType "regproc"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "regtypein"-> [ Pseudo Cstring-> ] (-> ScalarType "regtype" )-> False-> , CatCreateFunction-> FunName-> "regtypeout"-> [ ScalarType "regtype"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "regtyperecv"-> [ Pseudo Internal-> ] (-> ScalarType "regtype" )-> False-> , CatCreateFunction-> FunName-> "regtypesend"-> [ ScalarType "regtype"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "reltime"-> [ ScalarType "interval"-> ] (-> ScalarType "reltime" )-> False-> , CatCreateFunction-> FunName-> "reltimeeq"-> [ ScalarType "reltime"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "reltimege"-> [ ScalarType "reltime"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "reltimegt"-> [ ScalarType "reltime"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "reltimein"-> [ Pseudo Cstring-> ] (-> ScalarType "reltime" )-> False-> , CatCreateFunction-> FunName-> "reltimele"-> [ ScalarType "reltime"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "reltimelt"-> [ ScalarType "reltime"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "reltimene"-> [ ScalarType "reltime"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "reltimeout"-> [ ScalarType "reltime"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "reltimerecv"-> [ Pseudo Internal-> ] (-> ScalarType "reltime" )-> False-> , CatCreateFunction-> FunName-> "reltimesend"-> [ ScalarType "reltime"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "repeat"-> [ ScalarType "text"-> , ScalarType "int4"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "replace"-> [ ScalarType "text"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "round"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "round"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "round"-> [ ScalarType "numeric"-> , ScalarType "int4"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "rpad"-> [ ScalarType "text"-> , ScalarType "int4"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "rpad"-> [ ScalarType "text"-> , ScalarType "int4"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "rtrim"-> [ ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "rtrim"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "scalargtjoinsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int2"-> , Pseudo Internal-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "scalargtsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "scalarltjoinsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int2"-> , Pseudo Internal-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "scalarltsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "schema_to_xml"-> [ ScalarType "name"-> , ScalarType "bool"-> , ScalarType "bool"-> , ScalarType "text"-> ] (-> ScalarType "xml" )-> False-> , CatCreateFunction-> FunName-> "schema_to_xml_and_xmlschema"-> [ ScalarType "name"-> , ScalarType "bool"-> , ScalarType "bool"-> , ScalarType "text"-> ] (-> ScalarType "xml" )-> False-> , CatCreateFunction-> FunName-> "schema_to_xmlschema"-> [ ScalarType "name"-> , ScalarType "bool"-> , ScalarType "bool"-> , ScalarType "text"-> ] (-> ScalarType "xml" )-> False-> , CatCreateFunction-> FunName-> "session_user"-> [] (-> ScalarType "name" )-> False-> , CatCreateFunction-> FunName-> "set_bit"-> [ ScalarType "bytea"-> , ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "set_byte"-> [ ScalarType "bytea"-> , ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "set_config"-> [ ScalarType "text"-> , ScalarType "text"-> , ScalarType "bool"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "set_masklen"-> [ ScalarType "cidr"-> , ScalarType "int4"-> ] (-> ScalarType "cidr" )-> False-> , CatCreateFunction-> FunName-> "set_masklen"-> [ ScalarType "inet"-> , ScalarType "int4"-> ] (-> ScalarType "inet" )-> False-> , CatCreateFunction-> FunName-> "setseed"-> [ ScalarType "float8"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "setval"-> [ ScalarType "regclass"-> , ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "setval"-> [ ScalarType "regclass"-> , ScalarType "int8"-> , ScalarType "bool"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "setweight"-> [ ScalarType "tsvector"-> , ScalarType "char"-> ] (-> ScalarType "tsvector" )-> False-> , CatCreateFunction-> FunName-> "shell_in"-> [ Pseudo Cstring-> ] (-> Pseudo Opaque )-> False-> , CatCreateFunction-> FunName-> "shell_out"-> [ Pseudo Opaque-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "shift_jis_2004_to_euc_jis_2004"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "shift_jis_2004_to_utf8"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "shobj_description"-> [ ScalarType "oid"-> , ScalarType "name"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "sign"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "sign"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "similar_escape"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "sin"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "sjis_to_euc_jp"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "sjis_to_mic"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "sjis_to_utf8"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "slope"-> [ ScalarType "point"-> , ScalarType "point"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "smgreq"-> [ ScalarType "smgr"-> , ScalarType "smgr"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "smgrin"-> [ Pseudo Cstring-> ] (-> ScalarType "smgr" )-> False-> , CatCreateFunction-> FunName-> "smgrne"-> [ ScalarType "smgr"-> , ScalarType "smgr"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "smgrout"-> [ ScalarType "smgr"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "split_part"-> [ ScalarType "text"-> , ScalarType "text"-> , ScalarType "int4"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "sqrt"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "sqrt"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "statement_timestamp"-> [] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "string_to_array"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ArrayType ( ScalarType "text" ) )-> False-> , CatCreateFunction-> FunName-> "strip"-> [ ScalarType "tsvector"-> ] (-> ScalarType "tsvector" )-> False-> , CatCreateFunction-> FunName-> "strpos"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "substr"-> [ ScalarType "bytea"-> , ScalarType "int4"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "substr"-> [ ScalarType "text"-> , ScalarType "int4"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "substr"-> [ ScalarType "bytea"-> , ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "substr"-> [ ScalarType "text"-> , ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "substring"-> [ ScalarType "bytea"-> , ScalarType "int4"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "substring"-> [ ScalarType "text"-> , ScalarType "int4"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "substring"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "substring"-> [ ScalarType "bit"-> , ScalarType "int4"-> ] (-> ScalarType "bit" )-> False-> , CatCreateFunction-> FunName-> "substring"-> [ ScalarType "bytea"-> , ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "substring"-> [ ScalarType "text"-> , ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "substring"-> [ ScalarType "text"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "substring"-> [ ScalarType "bit"-> , ScalarType "int4"-> , ScalarType "int4"-> ] (-> ScalarType "bit" )-> False-> , CatCreateFunction-> FunName-> "suppress_redundant_updates_trigger"-> [] (-> Pseudo Trigger )-> False-> , CatCreateFunction-> FunName-> "table_to_xml"-> [ ScalarType "regclass"-> , ScalarType "bool"-> , ScalarType "bool"-> , ScalarType "text"-> ] (-> ScalarType "xml" )-> False-> , CatCreateFunction-> FunName-> "table_to_xml_and_xmlschema"-> [ ScalarType "regclass"-> , ScalarType "bool"-> , ScalarType "bool"-> , ScalarType "text"-> ] (-> ScalarType "xml" )-> False-> , CatCreateFunction-> FunName-> "table_to_xmlschema"-> [ ScalarType "regclass"-> , ScalarType "bool"-> , ScalarType "bool"-> , ScalarType "text"-> ] (-> ScalarType "xml" )-> False-> , CatCreateFunction-> FunName-> "tan"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "text"-> [ ScalarType "bool"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "text"-> [ ScalarType "char"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "text"-> [ ScalarType "name"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "text"-> [ ScalarType "xml"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "text"-> [ ScalarType "inet"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "text"-> [ ScalarType "bpchar"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "text_ge"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "text_gt"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "text_larger"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "text_le"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "text_lt"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "text_pattern_ge"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "text_pattern_gt"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "text_pattern_le"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "text_pattern_lt"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "text_smaller"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "textanycat"-> [ ScalarType "text"-> , Pseudo AnyNonArray-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "textcat"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "texteq"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "texticlike"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "texticnlike"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "texticregexeq"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "texticregexne"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "textin"-> [ Pseudo Cstring-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "textlen"-> [ ScalarType "text"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "textlike"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "textne"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "textnlike"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "textout"-> [ ScalarType "text"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "textrecv"-> [ Pseudo Internal-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "textregexeq"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "textregexne"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "textsend"-> [ ScalarType "text"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "thesaurus_init"-> [ Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "thesaurus_lexize"-> [ Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> , Pseudo Internal-> ] (-> Pseudo Internal )-> False-> , CatCreateFunction-> FunName-> "tideq"-> [ ScalarType "tid"-> , ScalarType "tid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tidge"-> [ ScalarType "tid"-> , ScalarType "tid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tidgt"-> [ ScalarType "tid"-> , ScalarType "tid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tidin"-> [ Pseudo Cstring-> ] (-> ScalarType "tid" )-> False-> , CatCreateFunction-> FunName-> "tidlarger"-> [ ScalarType "tid"-> , ScalarType "tid"-> ] (-> ScalarType "tid" )-> False-> , CatCreateFunction-> FunName-> "tidle"-> [ ScalarType "tid"-> , ScalarType "tid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tidlt"-> [ ScalarType "tid"-> , ScalarType "tid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tidne"-> [ ScalarType "tid"-> , ScalarType "tid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tidout"-> [ ScalarType "tid"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "tidrecv"-> [ Pseudo Internal-> ] (-> ScalarType "tid" )-> False-> , CatCreateFunction-> FunName-> "tidsend"-> [ ScalarType "tid"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "tidsmaller"-> [ ScalarType "tid"-> , ScalarType "tid"-> ] (-> ScalarType "tid" )-> False-> , CatCreateFunction-> FunName-> "time"-> [ ScalarType "abstime"-> ] (-> ScalarType "time" )-> False-> , CatCreateFunction-> FunName-> "time"-> [ ScalarType "timestamp"-> ] (-> ScalarType "time" )-> False-> , CatCreateFunction-> FunName-> "time"-> [ ScalarType "timestamptz"-> ] (-> ScalarType "time" )-> False-> , CatCreateFunction-> FunName-> "time"-> [ ScalarType "interval"-> ] (-> ScalarType "time" )-> False-> , CatCreateFunction-> FunName-> "time"-> [ ScalarType "timetz"-> ] (-> ScalarType "time" )-> False-> , CatCreateFunction-> FunName-> "time"-> [ ScalarType "time"-> , ScalarType "int4"-> ] (-> ScalarType "time" )-> False-> , CatCreateFunction-> FunName-> "time_cmp"-> [ ScalarType "time"-> , ScalarType "time"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "time_eq"-> [ ScalarType "time"-> , ScalarType "time"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "time_ge"-> [ ScalarType "time"-> , ScalarType "time"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "time_gt"-> [ ScalarType "time"-> , ScalarType "time"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "time_hash"-> [ ScalarType "time"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "time_in"-> [ Pseudo Cstring-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> ScalarType "time" )-> False-> , CatCreateFunction-> FunName-> "time_larger"-> [ ScalarType "time"-> , ScalarType "time"-> ] (-> ScalarType "time" )-> False-> , CatCreateFunction-> FunName-> "time_le"-> [ ScalarType "time"-> , ScalarType "time"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "time_lt"-> [ ScalarType "time"-> , ScalarType "time"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "time_mi_interval"-> [ ScalarType "time"-> , ScalarType "interval"-> ] (-> ScalarType "time" )-> False-> , CatCreateFunction-> FunName-> "time_mi_time"-> [ ScalarType "time"-> , ScalarType "time"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "time_ne"-> [ ScalarType "time"-> , ScalarType "time"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "time_out"-> [ ScalarType "time"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "time_pl_interval"-> [ ScalarType "time"-> , ScalarType "interval"-> ] (-> ScalarType "time" )-> False-> , CatCreateFunction-> FunName-> "time_recv"-> [ Pseudo Internal-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> ScalarType "time" )-> False-> , CatCreateFunction-> FunName-> "time_send"-> [ ScalarType "time"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "time_smaller"-> [ ScalarType "time"-> , ScalarType "time"-> ] (-> ScalarType "time" )-> False-> , CatCreateFunction-> FunName-> "timedate_pl"-> [ ScalarType "time"-> , ScalarType "date"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunName-> "timemi"-> [ ScalarType "abstime"-> , ScalarType "reltime"-> ] (-> ScalarType "abstime" )-> False-> , CatCreateFunction-> FunName-> "timenow"-> [] (-> ScalarType "abstime" )-> False-> , CatCreateFunction-> FunName-> "timeofday"-> [] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "timepl"-> [ ScalarType "abstime"-> , ScalarType "reltime"-> ] (-> ScalarType "abstime" )-> False-> , CatCreateFunction-> FunName-> "timestamp"-> [ ScalarType "abstime"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunName-> "timestamp"-> [ ScalarType "date"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunName-> "timestamp"-> [ ScalarType "timestamptz"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunName-> "timestamp"-> [ ScalarType "date"-> , ScalarType "time"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunName-> "timestamp"-> [ ScalarType "timestamp"-> , ScalarType "int4"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunName-> "timestamp_cmp"-> [ ScalarType "timestamp"-> , ScalarType "timestamp"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "timestamp_cmp_date"-> [ ScalarType "timestamp"-> , ScalarType "date"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "timestamp_cmp_timestamptz"-> [ ScalarType "timestamp"-> , ScalarType "timestamptz"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "timestamp_eq"-> [ ScalarType "timestamp"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamp_eq_date"-> [ ScalarType "timestamp"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamp_eq_timestamptz"-> [ ScalarType "timestamp"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamp_ge"-> [ ScalarType "timestamp"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamp_ge_date"-> [ ScalarType "timestamp"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamp_ge_timestamptz"-> [ ScalarType "timestamp"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamp_gt"-> [ ScalarType "timestamp"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamp_gt_date"-> [ ScalarType "timestamp"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamp_gt_timestamptz"-> [ ScalarType "timestamp"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamp_hash"-> [ ScalarType "timestamp"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "timestamp_in"-> [ Pseudo Cstring-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunName-> "timestamp_larger"-> [ ScalarType "timestamp"-> , ScalarType "timestamp"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunName-> "timestamp_le"-> [ ScalarType "timestamp"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamp_le_date"-> [ ScalarType "timestamp"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamp_le_timestamptz"-> [ ScalarType "timestamp"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamp_lt"-> [ ScalarType "timestamp"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamp_lt_date"-> [ ScalarType "timestamp"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamp_lt_timestamptz"-> [ ScalarType "timestamp"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamp_mi"-> [ ScalarType "timestamp"-> , ScalarType "timestamp"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "timestamp_mi_interval"-> [ ScalarType "timestamp"-> , ScalarType "interval"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunName-> "timestamp_ne"-> [ ScalarType "timestamp"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamp_ne_date"-> [ ScalarType "timestamp"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamp_ne_timestamptz"-> [ ScalarType "timestamp"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamp_out"-> [ ScalarType "timestamp"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "timestamp_pl_interval"-> [ ScalarType "timestamp"-> , ScalarType "interval"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunName-> "timestamp_recv"-> [ Pseudo Internal-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunName-> "timestamp_send"-> [ ScalarType "timestamp"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "timestamp_smaller"-> [ ScalarType "timestamp"-> , ScalarType "timestamp"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunName-> "timestamptypmodin"-> [ ArrayType ( Pseudo Cstring )-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "timestamptypmodout"-> [ ScalarType "int4"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "timestamptz"-> [ ScalarType "abstime"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "timestamptz"-> [ ScalarType "date"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "timestamptz"-> [ ScalarType "timestamp"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "timestamptz"-> [ ScalarType "date"-> , ScalarType "time"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "timestamptz"-> [ ScalarType "date"-> , ScalarType "timetz"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "timestamptz"-> [ ScalarType "timestamptz"-> , ScalarType "int4"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_cmp"-> [ ScalarType "timestamptz"-> , ScalarType "timestamptz"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_cmp_date"-> [ ScalarType "timestamptz"-> , ScalarType "date"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_cmp_timestamp"-> [ ScalarType "timestamptz"-> , ScalarType "timestamp"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_eq"-> [ ScalarType "timestamptz"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_eq_date"-> [ ScalarType "timestamptz"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_eq_timestamp"-> [ ScalarType "timestamptz"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_ge"-> [ ScalarType "timestamptz"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_ge_date"-> [ ScalarType "timestamptz"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_ge_timestamp"-> [ ScalarType "timestamptz"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_gt"-> [ ScalarType "timestamptz"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_gt_date"-> [ ScalarType "timestamptz"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_gt_timestamp"-> [ ScalarType "timestamptz"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_in"-> [ Pseudo Cstring-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_larger"-> [ ScalarType "timestamptz"-> , ScalarType "timestamptz"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_le"-> [ ScalarType "timestamptz"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_le_date"-> [ ScalarType "timestamptz"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_le_timestamp"-> [ ScalarType "timestamptz"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_lt"-> [ ScalarType "timestamptz"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_lt_date"-> [ ScalarType "timestamptz"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_lt_timestamp"-> [ ScalarType "timestamptz"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_mi"-> [ ScalarType "timestamptz"-> , ScalarType "timestamptz"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_mi_interval"-> [ ScalarType "timestamptz"-> , ScalarType "interval"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_ne"-> [ ScalarType "timestamptz"-> , ScalarType "timestamptz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_ne_date"-> [ ScalarType "timestamptz"-> , ScalarType "date"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_ne_timestamp"-> [ ScalarType "timestamptz"-> , ScalarType "timestamp"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_out"-> [ ScalarType "timestamptz"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "timestamptz_pl_interval"-> [ ScalarType "timestamptz"-> , ScalarType "interval"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_recv"-> [ Pseudo Internal-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_send"-> [ ScalarType "timestamptz"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "timestamptz_smaller"-> [ ScalarType "timestamptz"-> , ScalarType "timestamptz"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "timestamptztypmodin"-> [ ArrayType ( Pseudo Cstring )-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "timestamptztypmodout"-> [ ScalarType "int4"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "timetypmodin"-> [ ArrayType ( Pseudo Cstring )-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "timetypmodout"-> [ ScalarType "int4"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "timetz"-> [ ScalarType "time"-> ] (-> ScalarType "timetz" )-> False-> , CatCreateFunction-> FunName-> "timetz"-> [ ScalarType "timestamptz"-> ] (-> ScalarType "timetz" )-> False-> , CatCreateFunction-> FunName-> "timetz"-> [ ScalarType "timetz"-> , ScalarType "int4"-> ] (-> ScalarType "timetz" )-> False-> , CatCreateFunction-> FunName-> "timetz_cmp"-> [ ScalarType "timetz"-> , ScalarType "timetz"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "timetz_eq"-> [ ScalarType "timetz"-> , ScalarType "timetz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timetz_ge"-> [ ScalarType "timetz"-> , ScalarType "timetz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timetz_gt"-> [ ScalarType "timetz"-> , ScalarType "timetz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timetz_hash"-> [ ScalarType "timetz"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "timetz_in"-> [ Pseudo Cstring-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> ScalarType "timetz" )-> False-> , CatCreateFunction-> FunName-> "timetz_larger"-> [ ScalarType "timetz"-> , ScalarType "timetz"-> ] (-> ScalarType "timetz" )-> False-> , CatCreateFunction-> FunName-> "timetz_le"-> [ ScalarType "timetz"-> , ScalarType "timetz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timetz_lt"-> [ ScalarType "timetz"-> , ScalarType "timetz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timetz_mi_interval"-> [ ScalarType "timetz"-> , ScalarType "interval"-> ] (-> ScalarType "timetz" )-> False-> , CatCreateFunction-> FunName-> "timetz_ne"-> [ ScalarType "timetz"-> , ScalarType "timetz"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "timetz_out"-> [ ScalarType "timetz"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "timetz_pl_interval"-> [ ScalarType "timetz"-> , ScalarType "interval"-> ] (-> ScalarType "timetz" )-> False-> , CatCreateFunction-> FunName-> "timetz_recv"-> [ Pseudo Internal-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> ScalarType "timetz" )-> False-> , CatCreateFunction-> FunName-> "timetz_send"-> [ ScalarType "timetz"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "timetz_smaller"-> [ ScalarType "timetz"-> , ScalarType "timetz"-> ] (-> ScalarType "timetz" )-> False-> , CatCreateFunction-> FunName-> "timetzdate_pl"-> [ ScalarType "timetz"-> , ScalarType "date"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "timetztypmodin"-> [ ArrayType ( Pseudo Cstring )-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "timetztypmodout"-> [ ScalarType "int4"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "timezone"-> [ ScalarType "text"-> , ScalarType "timestamp"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "timezone"-> [ ScalarType "text"-> , ScalarType "timestamptz"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunName-> "timezone"-> [ ScalarType "text"-> , ScalarType "timetz"-> ] (-> ScalarType "timetz" )-> False-> , CatCreateFunction-> FunName-> "timezone"-> [ ScalarType "interval"-> , ScalarType "timestamp"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "timezone"-> [ ScalarType "interval"-> , ScalarType "timestamptz"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunName-> "timezone"-> [ ScalarType "interval"-> , ScalarType "timetz"-> ] (-> ScalarType "timetz" )-> False-> , CatCreateFunction-> FunName-> "tinterval"-> [ ScalarType "abstime"-> , ScalarType "abstime"-> ] (-> ScalarType "tinterval" )-> False-> , CatCreateFunction-> FunName-> "tintervalct"-> [ ScalarType "tinterval"-> , ScalarType "tinterval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tintervalend"-> [ ScalarType "tinterval"-> ] (-> ScalarType "abstime" )-> False-> , CatCreateFunction-> FunName-> "tintervaleq"-> [ ScalarType "tinterval"-> , ScalarType "tinterval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tintervalge"-> [ ScalarType "tinterval"-> , ScalarType "tinterval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tintervalgt"-> [ ScalarType "tinterval"-> , ScalarType "tinterval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tintervalin"-> [ Pseudo Cstring-> ] (-> ScalarType "tinterval" )-> False-> , CatCreateFunction-> FunName-> "tintervalle"-> [ ScalarType "tinterval"-> , ScalarType "tinterval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tintervalleneq"-> [ ScalarType "tinterval"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tintervallenge"-> [ ScalarType "tinterval"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tintervallengt"-> [ ScalarType "tinterval"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tintervallenle"-> [ ScalarType "tinterval"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tintervallenlt"-> [ ScalarType "tinterval"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tintervallenne"-> [ ScalarType "tinterval"-> , ScalarType "reltime"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tintervallt"-> [ ScalarType "tinterval"-> , ScalarType "tinterval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tintervalne"-> [ ScalarType "tinterval"-> , ScalarType "tinterval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tintervalout"-> [ ScalarType "tinterval"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "tintervalov"-> [ ScalarType "tinterval"-> , ScalarType "tinterval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tintervalrecv"-> [ Pseudo Internal-> ] (-> ScalarType "tinterval" )-> False-> , CatCreateFunction-> FunName-> "tintervalrel"-> [ ScalarType "tinterval"-> ] (-> ScalarType "reltime" )-> False-> , CatCreateFunction-> FunName-> "tintervalsame"-> [ ScalarType "tinterval"-> , ScalarType "tinterval"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tintervalsend"-> [ ScalarType "tinterval"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "tintervalstart"-> [ ScalarType "tinterval"-> ] (-> ScalarType "abstime" )-> False-> , CatCreateFunction-> FunName-> "to_ascii"-> [ ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "to_ascii"-> [ ScalarType "text"-> , ScalarType "name"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "to_ascii"-> [ ScalarType "text"-> , ScalarType "int4"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "to_char"-> [ ScalarType "int8"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "to_char"-> [ ScalarType "int4"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "to_char"-> [ ScalarType "float4"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "to_char"-> [ ScalarType "float8"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "to_char"-> [ ScalarType "timestamp"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "to_char"-> [ ScalarType "timestamptz"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "to_char"-> [ ScalarType "interval"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "to_char"-> [ ScalarType "numeric"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "to_date"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "date" )-> False-> , CatCreateFunction-> FunName-> "to_hex"-> [ ScalarType "int8"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "to_hex"-> [ ScalarType "int4"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "to_number"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "to_timestamp"-> [ ScalarType "float8"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "to_timestamp"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "to_tsquery"-> [ ScalarType "text"-> ] (-> ScalarType "tsquery" )-> False-> , CatCreateFunction-> FunName-> "to_tsquery"-> [ ScalarType "regconfig"-> , ScalarType "text"-> ] (-> ScalarType "tsquery" )-> False-> , CatCreateFunction-> FunName-> "to_tsvector"-> [ ScalarType "text"-> ] (-> ScalarType "tsvector" )-> False-> , CatCreateFunction-> FunName-> "to_tsvector"-> [ ScalarType "regconfig"-> , ScalarType "text"-> ] (-> ScalarType "tsvector" )-> False-> , CatCreateFunction-> FunName-> "transaction_timestamp"-> [] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunName-> "translate"-> [ ScalarType "text"-> , ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "trigger_in"-> [ Pseudo Cstring-> ] (-> Pseudo Trigger )-> False-> , CatCreateFunction-> FunName-> "trigger_out"-> [ Pseudo Trigger-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "trunc"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "trunc"-> [ ScalarType "macaddr"-> ] (-> ScalarType "macaddr" )-> False-> , CatCreateFunction-> FunName-> "trunc"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "trunc"-> [ ScalarType "numeric"-> , ScalarType "int4"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunName-> "ts_debug"-> [ ScalarType "text"-> ] (-> SetOfType ( Pseudo Record ) )-> False-> , CatCreateFunction-> FunName-> "ts_debug"-> [ ScalarType "regconfig"-> , ScalarType "text"-> ] (-> SetOfType ( Pseudo Record ) )-> False-> , CatCreateFunction-> FunName-> "ts_headline"-> [ ScalarType "text"-> , ScalarType "tsquery"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "ts_headline"-> [ ScalarType "text"-> , ScalarType "tsquery"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "ts_headline"-> [ ScalarType "regconfig"-> , ScalarType "text"-> , ScalarType "tsquery"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "ts_headline"-> [ ScalarType "regconfig"-> , ScalarType "text"-> , ScalarType "tsquery"-> , ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "ts_lexize"-> [ ScalarType "regdictionary"-> , ScalarType "text"-> ] (-> ArrayType ( ScalarType "text" ) )-> False-> , CatCreateFunction-> FunName-> "ts_match_qv"-> [ ScalarType "tsquery"-> , ScalarType "tsvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "ts_match_tq"-> [ ScalarType "text"-> , ScalarType "tsquery"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "ts_match_tt"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "ts_match_vq"-> [ ScalarType "tsvector"-> , ScalarType "tsquery"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "ts_parse"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> SetOfType ( Pseudo Record ) )-> False-> , CatCreateFunction-> FunName-> "ts_parse"-> [ ScalarType "oid"-> , ScalarType "text"-> ] (-> SetOfType ( Pseudo Record ) )-> False-> , CatCreateFunction-> FunName-> "ts_rank"-> [ ScalarType "tsvector"-> , ScalarType "tsquery"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "ts_rank"-> [ ArrayType ( ScalarType "float4" )-> , ScalarType "tsvector"-> , ScalarType "tsquery"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "ts_rank"-> [ ScalarType "tsvector"-> , ScalarType "tsquery"-> , ScalarType "int4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "ts_rank"-> [ ArrayType ( ScalarType "float4" )-> , ScalarType "tsvector"-> , ScalarType "tsquery"-> , ScalarType "int4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "ts_rank_cd"-> [ ScalarType "tsvector"-> , ScalarType "tsquery"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "ts_rank_cd"-> [ ArrayType ( ScalarType "float4" )-> , ScalarType "tsvector"-> , ScalarType "tsquery"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "ts_rank_cd"-> [ ScalarType "tsvector"-> , ScalarType "tsquery"-> , ScalarType "int4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "ts_rank_cd"-> [ ArrayType ( ScalarType "float4" )-> , ScalarType "tsvector"-> , ScalarType "tsquery"-> , ScalarType "int4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunName-> "ts_rewrite"-> [ ScalarType "tsquery"-> , ScalarType "text"-> ] (-> ScalarType "tsquery" )-> False-> , CatCreateFunction-> FunName-> "ts_rewrite"-> [ ScalarType "tsquery"-> , ScalarType "tsquery"-> , ScalarType "tsquery"-> ] (-> ScalarType "tsquery" )-> False-> , CatCreateFunction-> FunName-> "ts_stat"-> [ ScalarType "text"-> ] (-> SetOfType ( Pseudo Record ) )-> False-> , CatCreateFunction-> FunName-> "ts_stat"-> [ ScalarType "text"-> , ScalarType "text"-> ] (-> SetOfType ( Pseudo Record ) )-> False-> , CatCreateFunction-> FunName-> "ts_token_type"-> [ ScalarType "text"-> ] (-> SetOfType ( Pseudo Record ) )-> False-> , CatCreateFunction-> FunName-> "ts_token_type"-> [ ScalarType "oid"-> ] (-> SetOfType ( Pseudo Record ) )-> False-> , CatCreateFunction-> FunName-> "ts_typanalyze"-> [ Pseudo Internal-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tsmatchjoinsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int2"-> , Pseudo Internal-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "tsmatchsel"-> [ Pseudo Internal-> , ScalarType "oid"-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "tsq_mcontained"-> [ ScalarType "tsquery"-> , ScalarType "tsquery"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tsq_mcontains"-> [ ScalarType "tsquery"-> , ScalarType "tsquery"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tsquery_and"-> [ ScalarType "tsquery"-> , ScalarType "tsquery"-> ] (-> ScalarType "tsquery" )-> False-> , CatCreateFunction-> FunName-> "tsquery_cmp"-> [ ScalarType "tsquery"-> , ScalarType "tsquery"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "tsquery_eq"-> [ ScalarType "tsquery"-> , ScalarType "tsquery"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tsquery_ge"-> [ ScalarType "tsquery"-> , ScalarType "tsquery"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tsquery_gt"-> [ ScalarType "tsquery"-> , ScalarType "tsquery"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tsquery_le"-> [ ScalarType "tsquery"-> , ScalarType "tsquery"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tsquery_lt"-> [ ScalarType "tsquery"-> , ScalarType "tsquery"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tsquery_ne"-> [ ScalarType "tsquery"-> , ScalarType "tsquery"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tsquery_not"-> [ ScalarType "tsquery"-> ] (-> ScalarType "tsquery" )-> False-> , CatCreateFunction-> FunName-> "tsquery_or"-> [ ScalarType "tsquery"-> , ScalarType "tsquery"-> ] (-> ScalarType "tsquery" )-> False-> , CatCreateFunction-> FunName-> "tsqueryin"-> [ Pseudo Cstring-> ] (-> ScalarType "tsquery" )-> False-> , CatCreateFunction-> FunName-> "tsqueryout"-> [ ScalarType "tsquery"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "tsqueryrecv"-> [ Pseudo Internal-> ] (-> ScalarType "tsquery" )-> False-> , CatCreateFunction-> FunName-> "tsquerysend"-> [ ScalarType "tsquery"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "tsvector_cmp"-> [ ScalarType "tsvector"-> , ScalarType "tsvector"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "tsvector_concat"-> [ ScalarType "tsvector"-> , ScalarType "tsvector"-> ] (-> ScalarType "tsvector" )-> False-> , CatCreateFunction-> FunName-> "tsvector_eq"-> [ ScalarType "tsvector"-> , ScalarType "tsvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tsvector_ge"-> [ ScalarType "tsvector"-> , ScalarType "tsvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tsvector_gt"-> [ ScalarType "tsvector"-> , ScalarType "tsvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tsvector_le"-> [ ScalarType "tsvector"-> , ScalarType "tsvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tsvector_lt"-> [ ScalarType "tsvector"-> , ScalarType "tsvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tsvector_ne"-> [ ScalarType "tsvector"-> , ScalarType "tsvector"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "tsvector_update_trigger"-> [] (-> Pseudo Trigger )-> False-> , CatCreateFunction-> FunName-> "tsvector_update_trigger_column"-> [] (-> Pseudo Trigger )-> False-> , CatCreateFunction-> FunName-> "tsvectorin"-> [ Pseudo Cstring-> ] (-> ScalarType "tsvector" )-> False-> , CatCreateFunction-> FunName-> "tsvectorout"-> [ ScalarType "tsvector"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "tsvectorrecv"-> [ Pseudo Internal-> ] (-> ScalarType "tsvector" )-> False-> , CatCreateFunction-> FunName-> "tsvectorsend"-> [ ScalarType "tsvector"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "txid_current"-> [] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "txid_current_snapshot"-> [] (-> ScalarType "txid_snapshot" )-> False-> , CatCreateFunction-> FunName-> "txid_snapshot_in"-> [ Pseudo Cstring-> ] (-> ScalarType "txid_snapshot" )-> False-> , CatCreateFunction-> FunName-> "txid_snapshot_out"-> [ ScalarType "txid_snapshot"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "txid_snapshot_recv"-> [ Pseudo Internal-> ] (-> ScalarType "txid_snapshot" )-> False-> , CatCreateFunction-> FunName-> "txid_snapshot_send"-> [ ScalarType "txid_snapshot"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "txid_snapshot_xip"-> [ ScalarType "txid_snapshot"-> ] (-> SetOfType ( ScalarType "int8" ) )-> False-> , CatCreateFunction-> FunName-> "txid_snapshot_xmax"-> [ ScalarType "txid_snapshot"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "txid_snapshot_xmin"-> [ ScalarType "txid_snapshot"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunName-> "txid_visible_in_snapshot"-> [ ScalarType "int8"-> , ScalarType "txid_snapshot"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "uhc_to_utf8"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "unknownin"-> [ Pseudo Cstring-> ] (-> ScalarType "unknown" )-> False-> , CatCreateFunction-> FunName-> "unknownout"-> [ ScalarType "unknown"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "unknownrecv"-> [ Pseudo Internal-> ] (-> ScalarType "unknown" )-> False-> , CatCreateFunction-> FunName-> "unknownsend"-> [ ScalarType "unknown"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "unnest"-> [ Pseudo AnyArray-> ] (-> SetOfType ( Pseudo AnyElement ) )-> False-> , CatCreateFunction-> FunName-> "upper"-> [ ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "utf8_to_ascii"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "utf8_to_big5"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "utf8_to_euc_cn"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "utf8_to_euc_jis_2004"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "utf8_to_euc_jp"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "utf8_to_euc_kr"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "utf8_to_euc_tw"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "utf8_to_gb18030"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "utf8_to_gbk"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "utf8_to_iso8859"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "utf8_to_iso8859_1"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "utf8_to_johab"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "utf8_to_koi8r"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "utf8_to_koi8u"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "utf8_to_shift_jis_2004"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "utf8_to_sjis"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "utf8_to_uhc"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "utf8_to_win"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "uuid_cmp"-> [ ScalarType "uuid"-> , ScalarType "uuid"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "uuid_eq"-> [ ScalarType "uuid"-> , ScalarType "uuid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "uuid_ge"-> [ ScalarType "uuid"-> , ScalarType "uuid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "uuid_gt"-> [ ScalarType "uuid"-> , ScalarType "uuid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "uuid_hash"-> [ ScalarType "uuid"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "uuid_in"-> [ Pseudo Cstring-> ] (-> ScalarType "uuid" )-> False-> , CatCreateFunction-> FunName-> "uuid_le"-> [ ScalarType "uuid"-> , ScalarType "uuid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "uuid_lt"-> [ ScalarType "uuid"-> , ScalarType "uuid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "uuid_ne"-> [ ScalarType "uuid"-> , ScalarType "uuid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "uuid_out"-> [ ScalarType "uuid"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "uuid_recv"-> [ Pseudo Internal-> ] (-> ScalarType "uuid" )-> False-> , CatCreateFunction-> FunName-> "uuid_send"-> [ ScalarType "uuid"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "varbit"-> [ ScalarType "varbit"-> , ScalarType "int4"-> , ScalarType "bool"-> ] (-> ScalarType "varbit" )-> False-> , CatCreateFunction-> FunName-> "varbit_in"-> [ Pseudo Cstring-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> ScalarType "varbit" )-> False-> , CatCreateFunction-> FunName-> "varbit_out"-> [ ScalarType "varbit"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "varbit_recv"-> [ Pseudo Internal-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> ScalarType "varbit" )-> False-> , CatCreateFunction-> FunName-> "varbit_send"-> [ ScalarType "varbit"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "varbitcmp"-> [ ScalarType "varbit"-> , ScalarType "varbit"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "varbiteq"-> [ ScalarType "varbit"-> , ScalarType "varbit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "varbitge"-> [ ScalarType "varbit"-> , ScalarType "varbit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "varbitgt"-> [ ScalarType "varbit"-> , ScalarType "varbit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "varbitle"-> [ ScalarType "varbit"-> , ScalarType "varbit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "varbitlt"-> [ ScalarType "varbit"-> , ScalarType "varbit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "varbitne"-> [ ScalarType "varbit"-> , ScalarType "varbit"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "varbittypmodin"-> [ ArrayType ( Pseudo Cstring )-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "varbittypmodout"-> [ ScalarType "int4"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "varchar"-> [ ScalarType "name"-> ] (-> ScalarType "varchar" )-> False-> , CatCreateFunction-> FunName-> "varchar"-> [ ScalarType "varchar"-> , ScalarType "int4"-> , ScalarType "bool"-> ] (-> ScalarType "varchar" )-> False-> , CatCreateFunction-> FunName-> "varcharin"-> [ Pseudo Cstring-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> ScalarType "varchar" )-> False-> , CatCreateFunction-> FunName-> "varcharout"-> [ ScalarType "varchar"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "varcharrecv"-> [ Pseudo Internal-> , ScalarType "oid"-> , ScalarType "int4"-> ] (-> ScalarType "varchar" )-> False-> , CatCreateFunction-> FunName-> "varcharsend"-> [ ScalarType "varchar"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "varchartypmodin"-> [ ArrayType ( Pseudo Cstring )-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "varchartypmodout"-> [ ScalarType "int4"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "version"-> [] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunName-> "void_in"-> [ Pseudo Cstring-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "void_out"-> [ Pseudo Void-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "width"-> [ ScalarType "box"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunName-> "width_bucket"-> [ ScalarType "float8"-> , ScalarType "float8"-> , ScalarType "float8"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "width_bucket"-> [ ScalarType "numeric"-> , ScalarType "numeric"-> , ScalarType "numeric"-> , ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunName-> "win1250_to_latin2"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "win1250_to_mic"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "win1251_to_iso"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "win1251_to_koi8r"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "win1251_to_mic"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "win1251_to_win866"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "win866_to_iso"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "win866_to_koi8r"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "win866_to_mic"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "win866_to_win1251"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "win_to_utf8"-> [ ScalarType "int4"-> , ScalarType "int4"-> , Pseudo Cstring-> , Pseudo Internal-> , ScalarType "int4"-> ] (-> Pseudo Void )-> False-> , CatCreateFunction-> FunName-> "xideq"-> [ ScalarType "xid"-> , ScalarType "xid"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "xideqint4"-> [ ScalarType "xid"-> , ScalarType "int4"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "xidin"-> [ Pseudo Cstring-> ] (-> ScalarType "xid" )-> False-> , CatCreateFunction-> FunName-> "xidout"-> [ ScalarType "xid"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "xidrecv"-> [ Pseudo Internal-> ] (-> ScalarType "xid" )-> False-> , CatCreateFunction-> FunName-> "xidsend"-> [ ScalarType "xid"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "xml"-> [ ScalarType "text"-> ] (-> ScalarType "xml" )-> False-> , CatCreateFunction-> FunName-> "xml_in"-> [ Pseudo Cstring-> ] (-> ScalarType "xml" )-> False-> , CatCreateFunction-> FunName-> "xml_out"-> [ ScalarType "xml"-> ] (-> Pseudo Cstring )-> False-> , CatCreateFunction-> FunName-> "xml_recv"-> [ Pseudo Internal-> ] (-> ScalarType "xml" )-> False-> , CatCreateFunction-> FunName-> "xml_send"-> [ ScalarType "xml"-> ] (-> ScalarType "bytea" )-> False-> , CatCreateFunction-> FunName-> "xmlcomment"-> [ ScalarType "text"-> ] (-> ScalarType "xml" )-> False-> , CatCreateFunction-> FunName-> "xmlconcat2"-> [ ScalarType "xml"-> , ScalarType "xml"-> ] (-> ScalarType "xml" )-> False-> , CatCreateFunction-> FunName-> "xmlvalidate"-> [ ScalarType "xml"-> , ScalarType "text"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunName-> "xpath"-> [ ScalarType "text"-> , ScalarType "xml"-> ] (-> ArrayType ( ScalarType "xml" ) )-> False-> , CatCreateFunction-> FunName-> "xpath"-> [ ScalarType "text"-> , ScalarType "xml"-> , ArrayType ( ScalarType "text" )-> ] (-> ArrayType ( ScalarType "xml" ) )-> False-> , CatCreateFunction-> FunAgg-> "array_agg"-> [ Pseudo AnyElement-> ] (-> Pseudo AnyArray )-> False-> , CatCreateFunction-> FunAgg-> "avg"-> [ ScalarType "int8"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "avg"-> [ ScalarType "int2"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "avg"-> [ ScalarType "int4"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "avg"-> [ ScalarType "float4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "avg"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "avg"-> [ ScalarType "interval"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunAgg-> "avg"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "bit_and"-> [ ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunAgg-> "bit_and"-> [ ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunAgg-> "bit_and"-> [ ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunAgg-> "bit_and"-> [ ScalarType "bit"-> ] (-> ScalarType "bit" )-> False-> , CatCreateFunction-> FunAgg-> "bit_or"-> [ ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunAgg-> "bit_or"-> [ ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunAgg-> "bit_or"-> [ ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunAgg-> "bit_or"-> [ ScalarType "bit"-> ] (-> ScalarType "bit" )-> False-> , CatCreateFunction-> FunAgg-> "bool_and"-> [ ScalarType "bool"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunAgg-> "bool_or"-> [ ScalarType "bool"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunAgg-> "corr"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "count"-> [] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunAgg-> "count"-> [ Pseudo Any-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunAgg-> "covar_pop"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "covar_samp"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "every"-> [ ScalarType "bool"-> ] (-> ScalarType "bool" )-> False-> , CatCreateFunction-> FunAgg-> "max"-> [ ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunAgg-> "max"-> [ ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunAgg-> "max"-> [ ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunAgg-> "max"-> [ ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunAgg-> "max"-> [ ScalarType "oid"-> ] (-> ScalarType "oid" )-> False-> , CatCreateFunction-> FunAgg-> "max"-> [ ScalarType "tid"-> ] (-> ScalarType "tid" )-> False-> , CatCreateFunction-> FunAgg-> "max"-> [ ScalarType "float4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunAgg-> "max"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "max"-> [ ScalarType "abstime"-> ] (-> ScalarType "abstime" )-> False-> , CatCreateFunction-> FunAgg-> "max"-> [ ScalarType "money"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunAgg-> "max"-> [ ScalarType "bpchar"-> ] (-> ScalarType "bpchar" )-> False-> , CatCreateFunction-> FunAgg-> "max"-> [ ScalarType "date"-> ] (-> ScalarType "date" )-> False-> , CatCreateFunction-> FunAgg-> "max"-> [ ScalarType "time"-> ] (-> ScalarType "time" )-> False-> , CatCreateFunction-> FunAgg-> "max"-> [ ScalarType "timestamp"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunAgg-> "max"-> [ ScalarType "timestamptz"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunAgg-> "max"-> [ ScalarType "interval"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunAgg-> "max"-> [ ScalarType "timetz"-> ] (-> ScalarType "timetz" )-> False-> , CatCreateFunction-> FunAgg-> "max"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "max"-> [ Pseudo AnyArray-> ] (-> Pseudo AnyArray )-> False-> , CatCreateFunction-> FunAgg-> "max"-> [ Pseudo AnyEnum-> ] (-> Pseudo AnyEnum )-> False-> , CatCreateFunction-> FunAgg-> "min"-> [ ScalarType "int8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunAgg-> "min"-> [ ScalarType "int2"-> ] (-> ScalarType "int2" )-> False-> , CatCreateFunction-> FunAgg-> "min"-> [ ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunAgg-> "min"-> [ ScalarType "text"-> ] (-> ScalarType "text" )-> False-> , CatCreateFunction-> FunAgg-> "min"-> [ ScalarType "oid"-> ] (-> ScalarType "oid" )-> False-> , CatCreateFunction-> FunAgg-> "min"-> [ ScalarType "tid"-> ] (-> ScalarType "tid" )-> False-> , CatCreateFunction-> FunAgg-> "min"-> [ ScalarType "float4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunAgg-> "min"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "min"-> [ ScalarType "abstime"-> ] (-> ScalarType "abstime" )-> False-> , CatCreateFunction-> FunAgg-> "min"-> [ ScalarType "money"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunAgg-> "min"-> [ ScalarType "bpchar"-> ] (-> ScalarType "bpchar" )-> False-> , CatCreateFunction-> FunAgg-> "min"-> [ ScalarType "date"-> ] (-> ScalarType "date" )-> False-> , CatCreateFunction-> FunAgg-> "min"-> [ ScalarType "time"-> ] (-> ScalarType "time" )-> False-> , CatCreateFunction-> FunAgg-> "min"-> [ ScalarType "timestamp"-> ] (-> ScalarType "timestamp" )-> False-> , CatCreateFunction-> FunAgg-> "min"-> [ ScalarType "timestamptz"-> ] (-> ScalarType "timestamptz" )-> False-> , CatCreateFunction-> FunAgg-> "min"-> [ ScalarType "interval"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunAgg-> "min"-> [ ScalarType "timetz"-> ] (-> ScalarType "timetz" )-> False-> , CatCreateFunction-> FunAgg-> "min"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "min"-> [ Pseudo AnyArray-> ] (-> Pseudo AnyArray )-> False-> , CatCreateFunction-> FunAgg-> "min"-> [ Pseudo AnyEnum-> ] (-> Pseudo AnyEnum )-> False-> , CatCreateFunction-> FunAgg-> "regr_avgx"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "regr_avgy"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "regr_count"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunAgg-> "regr_intercept"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "regr_r2"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "regr_slope"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "regr_sxx"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "regr_sxy"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "regr_syy"-> [ ScalarType "float8"-> , ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "stddev"-> [ ScalarType "int8"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "stddev"-> [ ScalarType "int2"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "stddev"-> [ ScalarType "int4"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "stddev"-> [ ScalarType "float4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "stddev"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "stddev"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "stddev_pop"-> [ ScalarType "int8"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "stddev_pop"-> [ ScalarType "int2"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "stddev_pop"-> [ ScalarType "int4"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "stddev_pop"-> [ ScalarType "float4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "stddev_pop"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "stddev_pop"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "stddev_samp"-> [ ScalarType "int8"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "stddev_samp"-> [ ScalarType "int2"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "stddev_samp"-> [ ScalarType "int4"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "stddev_samp"-> [ ScalarType "float4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "stddev_samp"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "stddev_samp"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "sum"-> [ ScalarType "int8"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "sum"-> [ ScalarType "int2"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunAgg-> "sum"-> [ ScalarType "int4"-> ] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunAgg-> "sum"-> [ ScalarType "float4"-> ] (-> ScalarType "float4" )-> False-> , CatCreateFunction-> FunAgg-> "sum"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "sum"-> [ ScalarType "money"-> ] (-> ScalarType "money" )-> False-> , CatCreateFunction-> FunAgg-> "sum"-> [ ScalarType "interval"-> ] (-> ScalarType "interval" )-> False-> , CatCreateFunction-> FunAgg-> "sum"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "var_pop"-> [ ScalarType "int8"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "var_pop"-> [ ScalarType "int2"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "var_pop"-> [ ScalarType "int4"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "var_pop"-> [ ScalarType "float4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "var_pop"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "var_pop"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "var_samp"-> [ ScalarType "int8"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "var_samp"-> [ ScalarType "int2"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "var_samp"-> [ ScalarType "int4"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "var_samp"-> [ ScalarType "float4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "var_samp"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "var_samp"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "variance"-> [ ScalarType "int8"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "variance"-> [ ScalarType "int2"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "variance"-> [ ScalarType "int4"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "variance"-> [ ScalarType "float4"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "variance"-> [ ScalarType "float8"-> ] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunAgg-> "variance"-> [ ScalarType "numeric"-> ] (-> ScalarType "numeric" )-> False-> , CatCreateFunction-> FunAgg-> "xmlagg"-> [ ScalarType "xml"-> ] (-> ScalarType "xml" )-> False-> , CatCreateFunction-> FunWindow-> "cume_dist"-> [] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunWindow-> "dense_rank"-> [] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunWindow-> "first_value"-> [ Pseudo AnyElement-> ] (-> Pseudo AnyElement )-> False-> , CatCreateFunction-> FunWindow-> "lag"-> [ Pseudo AnyElement-> ] (-> Pseudo AnyElement )-> False-> , CatCreateFunction-> FunWindow-> "lag"-> [ Pseudo AnyElement-> , ScalarType "int4"-> ] (-> Pseudo AnyElement )-> False-> , CatCreateFunction-> FunWindow-> "lag"-> [ Pseudo AnyElement-> , ScalarType "int4"-> , Pseudo AnyElement-> ] (-> Pseudo AnyElement )-> False-> , CatCreateFunction-> FunWindow-> "last_value"-> [ Pseudo AnyElement-> ] (-> Pseudo AnyElement )-> False-> , CatCreateFunction-> FunWindow-> "lead"-> [ Pseudo AnyElement-> ] (-> Pseudo AnyElement )-> False-> , CatCreateFunction-> FunWindow-> "lead"-> [ Pseudo AnyElement-> , ScalarType "int4"-> ] (-> Pseudo AnyElement )-> False-> , CatCreateFunction-> FunWindow-> "lead"-> [ Pseudo AnyElement-> , ScalarType "int4"-> , Pseudo AnyElement-> ] (-> Pseudo AnyElement )-> False-> , CatCreateFunction-> FunWindow-> "nth_value"-> [ Pseudo AnyElement-> , ScalarType "int4"-> ] (-> Pseudo AnyElement )-> False-> , CatCreateFunction-> FunWindow-> "ntile"-> [ ScalarType "int4"-> ] (-> ScalarType "int4" )-> False-> , CatCreateFunction-> FunWindow-> "percent_rank"-> [] (-> ScalarType "float8" )-> False-> , CatCreateFunction-> FunWindow-> "rank"-> [] (-> ScalarType "int8" )-> False-> , CatCreateFunction-> FunWindow-> "row_number"-> [] (-> ScalarType "int8" )-> False-> , CatCreateTable-> "pg_aggregate"-> [ ( "aggfnoid"-> , ScalarType "regproc"-> )-> , ( "aggtransfn"-> , ScalarType "regproc"-> )-> , ( "aggfinalfn"-> , ScalarType "regproc"-> )-> , ( "aggsortop"-> , ScalarType "oid"-> )-> , ( "aggtranstype"-> , ScalarType "oid"-> )-> , ( "agginitval"-> , ScalarType "text"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_am"-> [ ( "amname"-> , ScalarType "name"-> )-> , ( "amstrategies"-> , ScalarType "int2"-> )-> , ( "amsupport"-> , ScalarType "int2"-> )-> , ( "amcanorder"-> , ScalarType "bool"-> )-> , ( "amcanbackward"-> , ScalarType "bool"-> )-> , ( "amcanunique"-> , ScalarType "bool"-> )-> , ( "amcanmulticol"-> , ScalarType "bool"-> )-> , ( "amoptionalkey"-> , ScalarType "bool"-> )-> , ( "amindexnulls"-> , ScalarType "bool"-> )-> , ( "amsearchnulls"-> , ScalarType "bool"-> )-> , ( "amstorage"-> , ScalarType "bool"-> )-> , ( "amclusterable"-> , ScalarType "bool"-> )-> , ( "amkeytype"-> , ScalarType "oid"-> )-> , ( "aminsert"-> , ScalarType "regproc"-> )-> , ( "ambeginscan"-> , ScalarType "regproc"-> )-> , ( "amgettuple"-> , ScalarType "regproc"-> )-> , ( "amgetbitmap"-> , ScalarType "regproc"-> )-> , ( "amrescan"-> , ScalarType "regproc"-> )-> , ( "amendscan"-> , ScalarType "regproc"-> )-> , ( "ammarkpos"-> , ScalarType "regproc"-> )-> , ( "amrestrpos"-> , ScalarType "regproc"-> )-> , ( "ambuild"-> , ScalarType "regproc"-> )-> , ( "ambulkdelete"-> , ScalarType "regproc"-> )-> , ( "amvacuumcleanup"-> , ScalarType "regproc"-> )-> , ( "amcostestimate"-> , ScalarType "regproc"-> )-> , ( "amoptions"-> , ScalarType "regproc"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_amop"-> [ ( "amopfamily"-> , ScalarType "oid"-> )-> , ( "amoplefttype"-> , ScalarType "oid"-> )-> , ( "amoprighttype"-> , ScalarType "oid"-> )-> , ( "amopstrategy"-> , ScalarType "int2"-> )-> , ( "amopopr"-> , ScalarType "oid"-> )-> , ( "amopmethod"-> , ScalarType "oid"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_amproc"-> [ ( "amprocfamily"-> , ScalarType "oid"-> )-> , ( "amproclefttype"-> , ScalarType "oid"-> )-> , ( "amprocrighttype"-> , ScalarType "oid"-> )-> , ( "amprocnum"-> , ScalarType "int2"-> )-> , ( "amproc"-> , ScalarType "regproc"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_attrdef"-> [ ( "adrelid"-> , ScalarType "oid"-> )-> , ( "adnum"-> , ScalarType "int2"-> )-> , ( "adbin"-> , ScalarType "text"-> )-> , ( "adsrc"-> , ScalarType "text"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_attribute"-> [ ( "attrelid"-> , ScalarType "oid"-> )-> , ( "attname"-> , ScalarType "name"-> )-> , ( "atttypid"-> , ScalarType "oid"-> )-> , ( "attstattarget"-> , ScalarType "int4"-> )-> , ( "attlen"-> , ScalarType "int2"-> )-> , ( "attnum"-> , ScalarType "int2"-> )-> , ( "attndims"-> , ScalarType "int4"-> )-> , ( "attcacheoff"-> , ScalarType "int4"-> )-> , ( "atttypmod"-> , ScalarType "int4"-> )-> , ( "attbyval"-> , ScalarType "bool"-> )-> , ( "attstorage"-> , ScalarType "char"-> )-> , ( "attalign"-> , ScalarType "char"-> )-> , ( "attnotnull"-> , ScalarType "bool"-> )-> , ( "atthasdef"-> , ScalarType "bool"-> )-> , ( "attisdropped"-> , ScalarType "bool"-> )-> , ( "attislocal"-> , ScalarType "bool"-> )-> , ( "attinhcount"-> , ScalarType "int4"-> )-> , ( "attacl"-> , ArrayType ( ScalarType "aclitem" )-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_auth_members"-> [ ( "roleid"-> , ScalarType "oid"-> )-> , ( "member"-> , ScalarType "oid"-> )-> , ( "grantor"-> , ScalarType "oid"-> )-> , ( "admin_option"-> , ScalarType "bool"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_authid"-> [ ( "rolname"-> , ScalarType "name"-> )-> , ( "rolsuper"-> , ScalarType "bool"-> )-> , ( "rolinherit"-> , ScalarType "bool"-> )-> , ( "rolcreaterole"-> , ScalarType "bool"-> )-> , ( "rolcreatedb"-> , ScalarType "bool"-> )-> , ( "rolcatupdate"-> , ScalarType "bool"-> )-> , ( "rolcanlogin"-> , ScalarType "bool"-> )-> , ( "rolconnlimit"-> , ScalarType "int4"-> )-> , ( "rolpassword"-> , ScalarType "text"-> )-> , ( "rolvaliduntil"-> , ScalarType "timestamptz"-> )-> , ( "rolconfig"-> , ArrayType ( ScalarType "text" )-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_cast"-> [ ( "castsource"-> , ScalarType "oid"-> )-> , ( "casttarget"-> , ScalarType "oid"-> )-> , ( "castfunc"-> , ScalarType "oid"-> )-> , ( "castcontext"-> , ScalarType "char"-> )-> , ( "castmethod"-> , ScalarType "char"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_class"-> [ ( "relname"-> , ScalarType "name"-> )-> , ( "relnamespace"-> , ScalarType "oid"-> )-> , ( "reltype"-> , ScalarType "oid"-> )-> , ( "relowner"-> , ScalarType "oid"-> )-> , ( "relam"-> , ScalarType "oid"-> )-> , ( "relfilenode"-> , ScalarType "oid"-> )-> , ( "reltablespace"-> , ScalarType "oid"-> )-> , ( "relpages"-> , ScalarType "int4"-> )-> , ( "reltuples"-> , ScalarType "float4"-> )-> , ( "reltoastrelid"-> , ScalarType "oid"-> )-> , ( "reltoastidxid"-> , ScalarType "oid"-> )-> , ( "relhasindex"-> , ScalarType "bool"-> )-> , ( "relisshared"-> , ScalarType "bool"-> )-> , ( "relistemp"-> , ScalarType "bool"-> )-> , ( "relkind"-> , ScalarType "char"-> )-> , ( "relnatts"-> , ScalarType "int2"-> )-> , ( "relchecks"-> , ScalarType "int2"-> )-> , ( "relhasoids"-> , ScalarType "bool"-> )-> , ( "relhaspkey"-> , ScalarType "bool"-> )-> , ( "relhasrules"-> , ScalarType "bool"-> )-> , ( "relhastriggers"-> , ScalarType "bool"-> )-> , ( "relhassubclass"-> , ScalarType "bool"-> )-> , ( "relfrozenxid"-> , ScalarType "xid"-> )-> , ( "relacl"-> , ArrayType ( ScalarType "aclitem" )-> )-> , ( "reloptions"-> , ArrayType ( ScalarType "text" )-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_constraint"-> [ ( "conname"-> , ScalarType "name"-> )-> , ( "connamespace"-> , ScalarType "oid"-> )-> , ( "contype"-> , ScalarType "char"-> )-> , ( "condeferrable"-> , ScalarType "bool"-> )-> , ( "condeferred"-> , ScalarType "bool"-> )-> , ( "conrelid"-> , ScalarType "oid"-> )-> , ( "contypid"-> , ScalarType "oid"-> )-> , ( "confrelid"-> , ScalarType "oid"-> )-> , ( "confupdtype"-> , ScalarType "char"-> )-> , ( "confdeltype"-> , ScalarType "char"-> )-> , ( "confmatchtype"-> , ScalarType "char"-> )-> , ( "conislocal"-> , ScalarType "bool"-> )-> , ( "coninhcount"-> , ScalarType "int4"-> )-> , ( "conkey"-> , ArrayType ( ScalarType "int2" )-> )-> , ( "confkey"-> , ArrayType ( ScalarType "int2" )-> )-> , ( "conpfeqop"-> , ArrayType ( ScalarType "oid" )-> )-> , ( "conppeqop"-> , ArrayType ( ScalarType "oid" )-> )-> , ( "conffeqop"-> , ArrayType ( ScalarType "oid" )-> )-> , ( "conbin"-> , ScalarType "text"-> )-> , ( "consrc"-> , ScalarType "text"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_conversion"-> [ ( "conname"-> , ScalarType "name"-> )-> , ( "connamespace"-> , ScalarType "oid"-> )-> , ( "conowner"-> , ScalarType "oid"-> )-> , ( "conforencoding"-> , ScalarType "int4"-> )-> , ( "contoencoding"-> , ScalarType "int4"-> )-> , ( "conproc"-> , ScalarType "regproc"-> )-> , ( "condefault"-> , ScalarType "bool"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_database"-> [ ( "datname"-> , ScalarType "name"-> )-> , ( "datdba"-> , ScalarType "oid"-> )-> , ( "encoding"-> , ScalarType "int4"-> )-> , ( "datcollate"-> , ScalarType "name"-> )-> , ( "datctype"-> , ScalarType "name"-> )-> , ( "datistemplate"-> , ScalarType "bool"-> )-> , ( "datallowconn"-> , ScalarType "bool"-> )-> , ( "datconnlimit"-> , ScalarType "int4"-> )-> , ( "datlastsysoid"-> , ScalarType "oid"-> )-> , ( "datfrozenxid"-> , ScalarType "xid"-> )-> , ( "dattablespace"-> , ScalarType "oid"-> )-> , ( "datconfig"-> , ArrayType ( ScalarType "text" )-> )-> , ( "datacl"-> , ArrayType ( ScalarType "aclitem" )-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_depend"-> [ ( "classid"-> , ScalarType "oid"-> )-> , ( "objid"-> , ScalarType "oid"-> )-> , ( "objsubid"-> , ScalarType "int4"-> )-> , ( "refclassid"-> , ScalarType "oid"-> )-> , ( "refobjid"-> , ScalarType "oid"-> )-> , ( "refobjsubid"-> , ScalarType "int4"-> )-> , ( "deptype"-> , ScalarType "char"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_description"-> [ ( "objoid"-> , ScalarType "oid"-> )-> , ( "classoid"-> , ScalarType "oid"-> )-> , ( "objsubid"-> , ScalarType "int4"-> )-> , ( "description"-> , ScalarType "text"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_enum"-> [ ( "enumtypid"-> , ScalarType "oid"-> )-> , ( "enumlabel"-> , ScalarType "name"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_foreign_data_wrapper"-> [ ( "fdwname"-> , ScalarType "name"-> )-> , ( "fdwowner"-> , ScalarType "oid"-> )-> , ( "fdwvalidator"-> , ScalarType "oid"-> )-> , ( "fdwacl"-> , ArrayType ( ScalarType "aclitem" )-> )-> , ( "fdwoptions"-> , ArrayType ( ScalarType "text" )-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_foreign_server"-> [ ( "srvname"-> , ScalarType "name"-> )-> , ( "srvowner"-> , ScalarType "oid"-> )-> , ( "srvfdw"-> , ScalarType "oid"-> )-> , ( "srvtype"-> , ScalarType "text"-> )-> , ( "srvversion"-> , ScalarType "text"-> )-> , ( "srvacl"-> , ArrayType ( ScalarType "aclitem" )-> )-> , ( "srvoptions"-> , ArrayType ( ScalarType "text" )-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_index"-> [ ( "indexrelid"-> , ScalarType "oid"-> )-> , ( "indrelid"-> , ScalarType "oid"-> )-> , ( "indnatts"-> , ScalarType "int2"-> )-> , ( "indisunique"-> , ScalarType "bool"-> )-> , ( "indisprimary"-> , ScalarType "bool"-> )-> , ( "indisclustered"-> , ScalarType "bool"-> )-> , ( "indisvalid"-> , ScalarType "bool"-> )-> , ( "indcheckxmin"-> , ScalarType "bool"-> )-> , ( "indisready"-> , ScalarType "bool"-> )-> , ( "indkey"-> , ScalarType "int2vector"-> )-> , ( "indclass"-> , ScalarType "oidvector"-> )-> , ( "indoption"-> , ScalarType "int2vector"-> )-> , ( "indexprs"-> , ScalarType "text"-> )-> , ( "indpred"-> , ScalarType "text"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_inherits"-> [ ( "inhrelid"-> , ScalarType "oid"-> )-> , ( "inhparent"-> , ScalarType "oid"-> )-> , ( "inhseqno"-> , ScalarType "int4"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_language"-> [ ( "lanname"-> , ScalarType "name"-> )-> , ( "lanowner"-> , ScalarType "oid"-> )-> , ( "lanispl"-> , ScalarType "bool"-> )-> , ( "lanpltrusted"-> , ScalarType "bool"-> )-> , ( "lanplcallfoid"-> , ScalarType "oid"-> )-> , ( "lanvalidator"-> , ScalarType "oid"-> )-> , ( "lanacl"-> , ArrayType ( ScalarType "aclitem" )-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_largeobject"-> [ ( "loid"-> , ScalarType "oid"-> )-> , ( "pageno"-> , ScalarType "int4"-> )-> , ( "data"-> , ScalarType "bytea"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_listener"-> [ ( "relname"-> , ScalarType "name"-> )-> , ( "listenerpid"-> , ScalarType "int4"-> )-> , ( "notification"-> , ScalarType "int4"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_namespace"-> [ ( "nspname"-> , ScalarType "name"-> )-> , ( "nspowner"-> , ScalarType "oid"-> )-> , ( "nspacl"-> , ArrayType ( ScalarType "aclitem" )-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_opclass"-> [ ( "opcmethod"-> , ScalarType "oid"-> )-> , ( "opcname"-> , ScalarType "name"-> )-> , ( "opcnamespace"-> , ScalarType "oid"-> )-> , ( "opcowner"-> , ScalarType "oid"-> )-> , ( "opcfamily"-> , ScalarType "oid"-> )-> , ( "opcintype"-> , ScalarType "oid"-> )-> , ( "opcdefault"-> , ScalarType "bool"-> )-> , ( "opckeytype"-> , ScalarType "oid"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_operator"-> [ ( "oprname"-> , ScalarType "name"-> )-> , ( "oprnamespace"-> , ScalarType "oid"-> )-> , ( "oprowner"-> , ScalarType "oid"-> )-> , ( "oprkind"-> , ScalarType "char"-> )-> , ( "oprcanmerge"-> , ScalarType "bool"-> )-> , ( "oprcanhash"-> , ScalarType "bool"-> )-> , ( "oprleft"-> , ScalarType "oid"-> )-> , ( "oprright"-> , ScalarType "oid"-> )-> , ( "oprresult"-> , ScalarType "oid"-> )-> , ( "oprcom"-> , ScalarType "oid"-> )-> , ( "oprnegate"-> , ScalarType "oid"-> )-> , ( "oprcode"-> , ScalarType "regproc"-> )-> , ( "oprrest"-> , ScalarType "regproc"-> )-> , ( "oprjoin"-> , ScalarType "regproc"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_opfamily"-> [ ( "opfmethod"-> , ScalarType "oid"-> )-> , ( "opfname"-> , ScalarType "name"-> )-> , ( "opfnamespace"-> , ScalarType "oid"-> )-> , ( "opfowner"-> , ScalarType "oid"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_pltemplate"-> [ ( "tmplname"-> , ScalarType "name"-> )-> , ( "tmpltrusted"-> , ScalarType "bool"-> )-> , ( "tmpldbacreate"-> , ScalarType "bool"-> )-> , ( "tmplhandler"-> , ScalarType "text"-> )-> , ( "tmplvalidator"-> , ScalarType "text"-> )-> , ( "tmpllibrary"-> , ScalarType "text"-> )-> , ( "tmplacl"-> , ArrayType ( ScalarType "aclitem" )-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_proc"-> [ ( "proname"-> , ScalarType "name"-> )-> , ( "pronamespace"-> , ScalarType "oid"-> )-> , ( "proowner"-> , ScalarType "oid"-> )-> , ( "prolang"-> , ScalarType "oid"-> )-> , ( "procost"-> , ScalarType "float4"-> )-> , ( "prorows"-> , ScalarType "float4"-> )-> , ( "provariadic"-> , ScalarType "oid"-> )-> , ( "proisagg"-> , ScalarType "bool"-> )-> , ( "proiswindow"-> , ScalarType "bool"-> )-> , ( "prosecdef"-> , ScalarType "bool"-> )-> , ( "proisstrict"-> , ScalarType "bool"-> )-> , ( "proretset"-> , ScalarType "bool"-> )-> , ( "provolatile"-> , ScalarType "char"-> )-> , ( "pronargs"-> , ScalarType "int2"-> )-> , ( "pronargdefaults"-> , ScalarType "int2"-> )-> , ( "prorettype"-> , ScalarType "oid"-> )-> , ( "proargtypes"-> , ScalarType "oidvector"-> )-> , ( "proallargtypes"-> , ArrayType ( ScalarType "oid" )-> )-> , ( "proargmodes"-> , ArrayType ( ScalarType "char" )-> )-> , ( "proargnames"-> , ArrayType ( ScalarType "text" )-> )-> , ( "proargdefaults"-> , ScalarType "text"-> )-> , ( "prosrc"-> , ScalarType "text"-> )-> , ( "probin"-> , ScalarType "bytea"-> )-> , ( "proconfig"-> , ArrayType ( ScalarType "text" )-> )-> , ( "proacl"-> , ArrayType ( ScalarType "aclitem" )-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_rewrite"-> [ ( "rulename"-> , ScalarType "name"-> )-> , ( "ev_class"-> , ScalarType "oid"-> )-> , ( "ev_attr"-> , ScalarType "int2"-> )-> , ( "ev_type"-> , ScalarType "char"-> )-> , ( "ev_enabled"-> , ScalarType "char"-> )-> , ( "is_instead"-> , ScalarType "bool"-> )-> , ( "ev_qual"-> , ScalarType "text"-> )-> , ( "ev_action"-> , ScalarType "text"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_shdepend"-> [ ( "dbid"-> , ScalarType "oid"-> )-> , ( "classid"-> , ScalarType "oid"-> )-> , ( "objid"-> , ScalarType "oid"-> )-> , ( "objsubid"-> , ScalarType "int4"-> )-> , ( "refclassid"-> , ScalarType "oid"-> )-> , ( "refobjid"-> , ScalarType "oid"-> )-> , ( "deptype"-> , ScalarType "char"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_shdescription"-> [ ( "objoid"-> , ScalarType "oid"-> )-> , ( "classoid"-> , ScalarType "oid"-> )-> , ( "description"-> , ScalarType "text"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_statistic"-> [ ( "starelid"-> , ScalarType "oid"-> )-> , ( "staattnum"-> , ScalarType "int2"-> )-> , ( "stanullfrac"-> , ScalarType "float4"-> )-> , ( "stawidth"-> , ScalarType "int4"-> )-> , ( "stadistinct"-> , ScalarType "float4"-> )-> , ( "stakind1"-> , ScalarType "int2"-> )-> , ( "stakind2"-> , ScalarType "int2"-> )-> , ( "stakind3"-> , ScalarType "int2"-> )-> , ( "stakind4"-> , ScalarType "int2"-> )-> , ( "staop1"-> , ScalarType "oid"-> )-> , ( "staop2"-> , ScalarType "oid"-> )-> , ( "staop3"-> , ScalarType "oid"-> )-> , ( "staop4"-> , ScalarType "oid"-> )-> , ( "stanumbers1"-> , ArrayType ( ScalarType "float4" )-> )-> , ( "stanumbers2"-> , ArrayType ( ScalarType "float4" )-> )-> , ( "stanumbers3"-> , ArrayType ( ScalarType "float4" )-> )-> , ( "stanumbers4"-> , ArrayType ( ScalarType "float4" )-> )-> , ( "stavalues1"-> , Pseudo AnyArray-> )-> , ( "stavalues2"-> , Pseudo AnyArray-> )-> , ( "stavalues3"-> , Pseudo AnyArray-> )-> , ( "stavalues4"-> , Pseudo AnyArray-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_tablespace"-> [ ( "spcname"-> , ScalarType "name"-> )-> , ( "spcowner"-> , ScalarType "oid"-> )-> , ( "spclocation"-> , ScalarType "text"-> )-> , ( "spcacl"-> , ArrayType ( ScalarType "aclitem" )-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_trigger"-> [ ( "tgrelid"-> , ScalarType "oid"-> )-> , ( "tgname"-> , ScalarType "name"-> )-> , ( "tgfoid"-> , ScalarType "oid"-> )-> , ( "tgtype"-> , ScalarType "int2"-> )-> , ( "tgenabled"-> , ScalarType "char"-> )-> , ( "tgisconstraint"-> , ScalarType "bool"-> )-> , ( "tgconstrname"-> , ScalarType "name"-> )-> , ( "tgconstrrelid"-> , ScalarType "oid"-> )-> , ( "tgconstraint"-> , ScalarType "oid"-> )-> , ( "tgdeferrable"-> , ScalarType "bool"-> )-> , ( "tginitdeferred"-> , ScalarType "bool"-> )-> , ( "tgnargs"-> , ScalarType "int2"-> )-> , ( "tgattr"-> , ScalarType "int2vector"-> )-> , ( "tgargs"-> , ScalarType "bytea"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_ts_config"-> [ ( "cfgname"-> , ScalarType "name"-> )-> , ( "cfgnamespace"-> , ScalarType "oid"-> )-> , ( "cfgowner"-> , ScalarType "oid"-> )-> , ( "cfgparser"-> , ScalarType "oid"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_ts_config_map"-> [ ( "mapcfg"-> , ScalarType "oid"-> )-> , ( "maptokentype"-> , ScalarType "int4"-> )-> , ( "mapseqno"-> , ScalarType "int4"-> )-> , ( "mapdict"-> , ScalarType "oid"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_ts_dict"-> [ ( "dictname"-> , ScalarType "name"-> )-> , ( "dictnamespace"-> , ScalarType "oid"-> )-> , ( "dictowner"-> , ScalarType "oid"-> )-> , ( "dicttemplate"-> , ScalarType "oid"-> )-> , ( "dictinitoption"-> , ScalarType "text"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_ts_parser"-> [ ( "prsname"-> , ScalarType "name"-> )-> , ( "prsnamespace"-> , ScalarType "oid"-> )-> , ( "prsstart"-> , ScalarType "regproc"-> )-> , ( "prstoken"-> , ScalarType "regproc"-> )-> , ( "prsend"-> , ScalarType "regproc"-> )-> , ( "prsheadline"-> , ScalarType "regproc"-> )-> , ( "prslextype"-> , ScalarType "regproc"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_ts_template"-> [ ( "tmplname"-> , ScalarType "name"-> )-> , ( "tmplnamespace"-> , ScalarType "oid"-> )-> , ( "tmplinit"-> , ScalarType "regproc"-> )-> , ( "tmpllexize"-> , ScalarType "regproc"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_type"-> [ ( "typname"-> , ScalarType "name"-> )-> , ( "typnamespace"-> , ScalarType "oid"-> )-> , ( "typowner"-> , ScalarType "oid"-> )-> , ( "typlen"-> , ScalarType "int2"-> )-> , ( "typbyval"-> , ScalarType "bool"-> )-> , ( "typtype"-> , ScalarType "char"-> )-> , ( "typcategory"-> , ScalarType "char"-> )-> , ( "typispreferred"-> , ScalarType "bool"-> )-> , ( "typisdefined"-> , ScalarType "bool"-> )-> , ( "typdelim"-> , ScalarType "char"-> )-> , ( "typrelid"-> , ScalarType "oid"-> )-> , ( "typelem"-> , ScalarType "oid"-> )-> , ( "typarray"-> , ScalarType "oid"-> )-> , ( "typinput"-> , ScalarType "regproc"-> )-> , ( "typoutput"-> , ScalarType "regproc"-> )-> , ( "typreceive"-> , ScalarType "regproc"-> )-> , ( "typsend"-> , ScalarType "regproc"-> )-> , ( "typmodin"-> , ScalarType "regproc"-> )-> , ( "typmodout"-> , ScalarType "regproc"-> )-> , ( "typanalyze"-> , ScalarType "regproc"-> )-> , ( "typalign"-> , ScalarType "char"-> )-> , ( "typstorage"-> , ScalarType "char"-> )-> , ( "typnotnull"-> , ScalarType "bool"-> )-> , ( "typbasetype"-> , ScalarType "oid"-> )-> , ( "typtypmod"-> , ScalarType "int4"-> )-> , ( "typndims"-> , ScalarType "int4"-> )-> , ( "typdefaultbin"-> , ScalarType "text"-> )-> , ( "typdefault"-> , ScalarType "text"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "pg_user_mapping"-> [ ( "umuser"-> , ScalarType "oid"-> )-> , ( "umserver"-> , ScalarType "oid"-> )-> , ( "umoptions"-> , ArrayType ( ScalarType "text" )-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "oid"-> , ScalarType "oid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "information_schema.sql_features"-> [ ( "feature_id"-> , DomainType "information_schema.character_data"-> )-> , ( "feature_name"-> , DomainType "information_schema.character_data"-> )-> , ( "sub_feature_id"-> , DomainType "information_schema.character_data"-> )-> , ( "sub_feature_name"-> , DomainType "information_schema.character_data"-> )-> , ( "is_supported"-> , DomainType "information_schema.character_data"-> )-> , ( "is_verified_by"-> , DomainType "information_schema.character_data"-> )-> , ( "comments"-> , DomainType "information_schema.character_data"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "information_schema.sql_implementation_info"-> [ ( "implementation_info_id"-> , DomainType "information_schema.character_data"-> )-> , ( "implementation_info_name"-> , DomainType "information_schema.character_data"-> )-> , ( "integer_value"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "character_value"-> , DomainType "information_schema.character_data"-> )-> , ( "comments"-> , DomainType "information_schema.character_data"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "information_schema.sql_languages"-> [ ( "sql_language_source"-> , DomainType "information_schema.character_data"-> )-> , ( "sql_language_year"-> , DomainType "information_schema.character_data"-> )-> , ( "sql_language_conformance"-> , DomainType "information_schema.character_data"-> )-> , ( "sql_language_integrity"-> , DomainType "information_schema.character_data"-> )-> , ( "sql_language_implementation"-> , DomainType "information_schema.character_data"-> )-> , ( "sql_language_binding_style"-> , DomainType "information_schema.character_data"-> )-> , ( "sql_language_programming_language"-> , DomainType "information_schema.character_data"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "information_schema.sql_packages"-> [ ( "feature_id"-> , DomainType "information_schema.character_data"-> )-> , ( "feature_name"-> , DomainType "information_schema.character_data"-> )-> , ( "is_supported"-> , DomainType "information_schema.character_data"-> )-> , ( "is_verified_by"-> , DomainType "information_schema.character_data"-> )-> , ( "comments"-> , DomainType "information_schema.character_data"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "information_schema.sql_parts"-> [ ( "feature_id"-> , DomainType "information_schema.character_data"-> )-> , ( "feature_name"-> , DomainType "information_schema.character_data"-> )-> , ( "is_supported"-> , DomainType "information_schema.character_data"-> )-> , ( "is_verified_by"-> , DomainType "information_schema.character_data"-> )-> , ( "comments"-> , DomainType "information_schema.character_data"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "information_schema.sql_sizing"-> [ ( "sizing_id"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "sizing_name"-> , DomainType "information_schema.character_data"-> )-> , ( "supported_value"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "comments"-> , DomainType "information_schema.character_data"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateTable-> "information_schema.sql_sizing_profiles"-> [ ( "sizing_id"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "sizing_name"-> , DomainType "information_schema.character_data"-> )-> , ( "profile_id"-> , DomainType "information_schema.character_data"-> )-> , ( "required_value"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "comments"-> , DomainType "information_schema.character_data"-> )-> ]-> [ ( "tableoid"-> , ScalarType "oid"-> )-> , ( "cmax"-> , ScalarType "cid"-> )-> , ( "xmax"-> , ScalarType "xid"-> )-> , ( "cmin"-> , ScalarType "cid"-> )-> , ( "xmin"-> , ScalarType "xid"-> )-> , ( "ctid"-> , ScalarType "tid"-> )-> ]-> , CatCreateView-> "information_schema._pg_foreign_data_wrappers"-> [ ( "oid"-> , ScalarType "oid"-> )-> , ( "fdwowner"-> , ScalarType "oid"-> )-> , ( "fdwoptions"-> , ArrayType ( ScalarType "text" )-> )-> , ( "foreign_data_wrapper_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "foreign_data_wrapper_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "authorization_identifier"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "foreign_data_wrapper_language"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema._pg_foreign_servers"-> [ ( "oid"-> , ScalarType "oid"-> )-> , ( "srvoptions"-> , ArrayType ( ScalarType "text" )-> )-> , ( "foreign_server_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "foreign_server_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "foreign_data_wrapper_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "foreign_data_wrapper_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "foreign_server_type"-> , DomainType "information_schema.character_data"-> )-> , ( "foreign_server_version"-> , DomainType "information_schema.character_data"-> )-> , ( "authorization_identifier"-> , DomainType "information_schema.sql_identifier"-> )-> ]-> , CatCreateView-> "information_schema._pg_user_mappings"-> [ ( "oid"-> , ScalarType "oid"-> )-> , ( "umoptions"-> , ArrayType ( ScalarType "text" )-> )-> , ( "umuser"-> , ScalarType "oid"-> )-> , ( "authorization_identifier"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "foreign_server_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "foreign_server_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "srvowner"-> , DomainType "information_schema.sql_identifier"-> )-> ]-> , CatCreateView-> "information_schema.administrable_role_authorizations"-> [ ( "grantee"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "role_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "is_grantable"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema.applicable_roles"-> [ ( "grantee"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "role_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "is_grantable"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema.attributes"-> [ ( "udt_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "udt_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "udt_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "attribute_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "ordinal_position"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "attribute_default"-> , DomainType "information_schema.character_data"-> )-> , ( "is_nullable"-> , DomainType "information_schema.character_data"-> )-> , ( "data_type"-> , DomainType "information_schema.character_data"-> )-> , ( "character_maximum_length"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "character_octet_length"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "character_set_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "character_set_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "character_set_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "collation_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "collation_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "collation_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "numeric_precision"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "numeric_precision_radix"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "numeric_scale"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "datetime_precision"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "interval_type"-> , DomainType "information_schema.character_data"-> )-> , ( "interval_precision"-> , DomainType "information_schema.character_data"-> )-> , ( "attribute_udt_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "attribute_udt_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "attribute_udt_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "scope_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "scope_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "scope_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "maximum_cardinality"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "dtd_identifier"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "is_derived_reference_attribute"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema.check_constraint_routine_usage"-> [ ( "constraint_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "constraint_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "constraint_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "specific_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "specific_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "specific_name"-> , DomainType "information_schema.sql_identifier"-> )-> ]-> , CatCreateView-> "information_schema.check_constraints"-> [ ( "constraint_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "constraint_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "constraint_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "check_clause"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema.column_domain_usage"-> [ ( "domain_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "domain_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "domain_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "column_name"-> , DomainType "information_schema.sql_identifier"-> )-> ]-> , CatCreateView-> "information_schema.column_privileges"-> [ ( "grantor"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "grantee"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "column_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "privilege_type"-> , DomainType "information_schema.character_data"-> )-> , ( "is_grantable"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema.column_udt_usage"-> [ ( "udt_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "udt_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "udt_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "column_name"-> , DomainType "information_schema.sql_identifier"-> )-> ]-> , CatCreateView-> "information_schema.columns"-> [ ( "table_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "column_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "ordinal_position"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "column_default"-> , DomainType "information_schema.character_data"-> )-> , ( "is_nullable"-> , DomainType "information_schema.character_data"-> )-> , ( "data_type"-> , DomainType "information_schema.character_data"-> )-> , ( "character_maximum_length"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "character_octet_length"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "numeric_precision"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "numeric_precision_radix"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "numeric_scale"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "datetime_precision"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "interval_type"-> , DomainType "information_schema.character_data"-> )-> , ( "interval_precision"-> , DomainType "information_schema.character_data"-> )-> , ( "character_set_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "character_set_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "character_set_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "collation_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "collation_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "collation_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "domain_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "domain_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "domain_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "udt_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "udt_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "udt_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "scope_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "scope_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "scope_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "maximum_cardinality"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "dtd_identifier"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "is_self_referencing"-> , DomainType "information_schema.character_data"-> )-> , ( "is_identity"-> , DomainType "information_schema.character_data"-> )-> , ( "identity_generation"-> , DomainType "information_schema.character_data"-> )-> , ( "identity_start"-> , DomainType "information_schema.character_data"-> )-> , ( "identity_increment"-> , DomainType "information_schema.character_data"-> )-> , ( "identity_maximum"-> , DomainType "information_schema.character_data"-> )-> , ( "identity_minimum"-> , DomainType "information_schema.character_data"-> )-> , ( "identity_cycle"-> , DomainType "information_schema.character_data"-> )-> , ( "is_generated"-> , DomainType "information_schema.character_data"-> )-> , ( "generation_expression"-> , DomainType "information_schema.character_data"-> )-> , ( "is_updatable"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema.constraint_column_usage"-> [ ( "table_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "column_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "constraint_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "constraint_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "constraint_name"-> , DomainType "information_schema.sql_identifier"-> )-> ]-> , CatCreateView-> "information_schema.constraint_table_usage"-> [ ( "table_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "constraint_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "constraint_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "constraint_name"-> , DomainType "information_schema.sql_identifier"-> )-> ]-> , CatCreateView-> "information_schema.data_type_privileges"-> [ ( "object_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "object_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "object_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "object_type"-> , DomainType "information_schema.character_data"-> )-> , ( "dtd_identifier"-> , DomainType "information_schema.sql_identifier"-> )-> ]-> , CatCreateView-> "information_schema.domain_constraints"-> [ ( "constraint_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "constraint_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "constraint_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "domain_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "domain_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "domain_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "is_deferrable"-> , DomainType "information_schema.character_data"-> )-> , ( "initially_deferred"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema.domain_udt_usage"-> [ ( "udt_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "udt_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "udt_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "domain_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "domain_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "domain_name"-> , DomainType "information_schema.sql_identifier"-> )-> ]-> , CatCreateView-> "information_schema.domains"-> [ ( "domain_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "domain_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "domain_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "data_type"-> , DomainType "information_schema.character_data"-> )-> , ( "character_maximum_length"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "character_octet_length"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "character_set_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "character_set_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "character_set_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "collation_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "collation_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "collation_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "numeric_precision"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "numeric_precision_radix"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "numeric_scale"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "datetime_precision"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "interval_type"-> , DomainType "information_schema.character_data"-> )-> , ( "interval_precision"-> , DomainType "information_schema.character_data"-> )-> , ( "domain_default"-> , DomainType "information_schema.character_data"-> )-> , ( "udt_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "udt_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "udt_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "scope_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "scope_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "scope_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "maximum_cardinality"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "dtd_identifier"-> , DomainType "information_schema.sql_identifier"-> )-> ]-> , CatCreateView-> "information_schema.element_types"-> [ ( "object_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "object_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "object_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "object_type"-> , DomainType "information_schema.character_data"-> )-> , ( "collection_type_identifier"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "data_type"-> , DomainType "information_schema.character_data"-> )-> , ( "character_maximum_length"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "character_octet_length"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "character_set_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "character_set_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "character_set_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "collation_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "collation_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "collation_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "numeric_precision"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "numeric_precision_radix"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "numeric_scale"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "datetime_precision"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "interval_type"-> , DomainType "information_schema.character_data"-> )-> , ( "interval_precision"-> , DomainType "information_schema.character_data"-> )-> , ( "domain_default"-> , DomainType "information_schema.character_data"-> )-> , ( "udt_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "udt_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "udt_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "scope_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "scope_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "scope_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "maximum_cardinality"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "dtd_identifier"-> , DomainType "information_schema.sql_identifier"-> )-> ]-> , CatCreateView-> "information_schema.enabled_roles"-> [ ( "role_name"-> , DomainType "information_schema.sql_identifier"-> )-> ]-> , CatCreateView-> "information_schema.foreign_data_wrapper_options"-> [ ( "foreign_data_wrapper_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "foreign_data_wrapper_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "option_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "option_value"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema.foreign_data_wrappers"-> [ ( "foreign_data_wrapper_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "foreign_data_wrapper_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "authorization_identifier"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "library_name"-> , DomainType "information_schema.character_data"-> )-> , ( "foreign_data_wrapper_language"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema.foreign_server_options"-> [ ( "foreign_server_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "foreign_server_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "option_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "option_value"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema.foreign_servers"-> [ ( "foreign_server_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "foreign_server_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "foreign_data_wrapper_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "foreign_data_wrapper_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "foreign_server_type"-> , DomainType "information_schema.character_data"-> )-> , ( "foreign_server_version"-> , DomainType "information_schema.character_data"-> )-> , ( "authorization_identifier"-> , DomainType "information_schema.sql_identifier"-> )-> ]-> , CatCreateView-> "information_schema.information_schema_catalog_name"-> [ ( "catalog_name"-> , DomainType "information_schema.sql_identifier"-> )-> ]-> , CatCreateView-> "information_schema.key_column_usage"-> [ ( "constraint_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "constraint_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "constraint_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "column_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "ordinal_position"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "position_in_unique_constraint"-> , DomainType "information_schema.cardinal_number"-> )-> ]-> , CatCreateView-> "information_schema.parameters"-> [ ( "specific_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "specific_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "specific_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "ordinal_position"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "parameter_mode"-> , DomainType "information_schema.character_data"-> )-> , ( "is_result"-> , DomainType "information_schema.character_data"-> )-> , ( "as_locator"-> , DomainType "information_schema.character_data"-> )-> , ( "parameter_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "data_type"-> , DomainType "information_schema.character_data"-> )-> , ( "character_maximum_length"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "character_octet_length"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "character_set_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "character_set_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "character_set_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "collation_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "collation_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "collation_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "numeric_precision"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "numeric_precision_radix"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "numeric_scale"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "datetime_precision"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "interval_type"-> , DomainType "information_schema.character_data"-> )-> , ( "interval_precision"-> , DomainType "information_schema.character_data"-> )-> , ( "udt_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "udt_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "udt_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "scope_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "scope_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "scope_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "maximum_cardinality"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "dtd_identifier"-> , DomainType "information_schema.sql_identifier"-> )-> ]-> , CatCreateView-> "pg_cursors"-> [ ( "name"-> , ScalarType "text"-> )-> , ( "statement"-> , ScalarType "text"-> )-> , ( "is_holdable"-> , ScalarType "bool"-> )-> , ( "is_binary"-> , ScalarType "bool"-> )-> , ( "is_scrollable"-> , ScalarType "bool"-> )-> , ( "creation_time"-> , ScalarType "timestamptz"-> )-> ]-> , CatCreateView-> "pg_group"-> [ ( "groname"-> , ScalarType "name"-> )-> , ( "grosysid"-> , ScalarType "oid"-> )-> , ( "grolist"-> , ArrayType ( ScalarType "oid" )-> )-> ]-> , CatCreateView-> "pg_indexes"-> [ ( "schemaname"-> , ScalarType "name"-> )-> , ( "tablename"-> , ScalarType "name"-> )-> , ( "indexname"-> , ScalarType "name"-> )-> , ( "tablespace"-> , ScalarType "name"-> )-> , ( "indexdef"-> , ScalarType "text"-> )-> ]-> , CatCreateView-> "pg_locks"-> [ ( "locktype"-> , ScalarType "text"-> )-> , ( "database"-> , ScalarType "oid"-> )-> , ( "relation"-> , ScalarType "oid"-> )-> , ( "page"-> , ScalarType "int4"-> )-> , ( "tuple"-> , ScalarType "int2"-> )-> , ( "virtualxid"-> , ScalarType "text"-> )-> , ( "transactionid"-> , ScalarType "xid"-> )-> , ( "classid"-> , ScalarType "oid"-> )-> , ( "objid"-> , ScalarType "oid"-> )-> , ( "objsubid"-> , ScalarType "int2"-> )-> , ( "virtualtransaction"-> , ScalarType "text"-> )-> , ( "pid"-> , ScalarType "int4"-> )-> , ( "mode"-> , ScalarType "text"-> )-> , ( "granted"-> , ScalarType "bool"-> )-> ]-> , CatCreateView-> "pg_prepared_statements"-> [ ( "name"-> , ScalarType "text"-> )-> , ( "statement"-> , ScalarType "text"-> )-> , ( "prepare_time"-> , ScalarType "timestamptz"-> )-> , ( "parameter_types"-> , ArrayType ( ScalarType "regtype" )-> )-> , ( "from_sql"-> , ScalarType "bool"-> )-> ]-> , CatCreateView-> "pg_prepared_xacts"-> [ ( "transaction"-> , ScalarType "xid"-> )-> , ( "gid"-> , ScalarType "text"-> )-> , ( "prepared"-> , ScalarType "timestamptz"-> )-> , ( "owner"-> , ScalarType "name"-> )-> , ( "database"-> , ScalarType "name"-> )-> ]-> , CatCreateView-> "pg_roles"-> [ ( "rolname"-> , ScalarType "name"-> )-> , ( "rolsuper"-> , ScalarType "bool"-> )-> , ( "rolinherit"-> , ScalarType "bool"-> )-> , ( "rolcreaterole"-> , ScalarType "bool"-> )-> , ( "rolcreatedb"-> , ScalarType "bool"-> )-> , ( "rolcatupdate"-> , ScalarType "bool"-> )-> , ( "rolcanlogin"-> , ScalarType "bool"-> )-> , ( "rolconnlimit"-> , ScalarType "int4"-> )-> , ( "rolpassword"-> , ScalarType "text"-> )-> , ( "rolvaliduntil"-> , ScalarType "timestamptz"-> )-> , ( "rolconfig"-> , ArrayType ( ScalarType "text" )-> )-> , ( "oid"-> , ScalarType "oid"-> )-> ]-> , CatCreateView-> "pg_rules"-> [ ( "schemaname"-> , ScalarType "name"-> )-> , ( "tablename"-> , ScalarType "name"-> )-> , ( "rulename"-> , ScalarType "name"-> )-> , ( "definition"-> , ScalarType "text"-> )-> ]-> , CatCreateView-> "pg_settings"-> [ ( "name"-> , ScalarType "text"-> )-> , ( "setting"-> , ScalarType "text"-> )-> , ( "unit"-> , ScalarType "text"-> )-> , ( "category"-> , ScalarType "text"-> )-> , ( "short_desc"-> , ScalarType "text"-> )-> , ( "extra_desc"-> , ScalarType "text"-> )-> , ( "context"-> , ScalarType "text"-> )-> , ( "vartype"-> , ScalarType "text"-> )-> , ( "source"-> , ScalarType "text"-> )-> , ( "min_val"-> , ScalarType "text"-> )-> , ( "max_val"-> , ScalarType "text"-> )-> , ( "enumvals"-> , ArrayType ( ScalarType "text" )-> )-> , ( "boot_val"-> , ScalarType "text"-> )-> , ( "reset_val"-> , ScalarType "text"-> )-> , ( "sourcefile"-> , ScalarType "text"-> )-> , ( "sourceline"-> , ScalarType "int4"-> )-> ]-> , CatCreateView-> "pg_shadow"-> [ ( "usename"-> , ScalarType "name"-> )-> , ( "usesysid"-> , ScalarType "oid"-> )-> , ( "usecreatedb"-> , ScalarType "bool"-> )-> , ( "usesuper"-> , ScalarType "bool"-> )-> , ( "usecatupd"-> , ScalarType "bool"-> )-> , ( "passwd"-> , ScalarType "text"-> )-> , ( "valuntil"-> , ScalarType "abstime"-> )-> , ( "useconfig"-> , ArrayType ( ScalarType "text" )-> )-> ]-> , CatCreateView-> "pg_stat_activity"-> [ ( "datid"-> , ScalarType "oid"-> )-> , ( "datname"-> , ScalarType "name"-> )-> , ( "procpid"-> , ScalarType "int4"-> )-> , ( "usesysid"-> , ScalarType "oid"-> )-> , ( "usename"-> , ScalarType "name"-> )-> , ( "current_query"-> , ScalarType "text"-> )-> , ( "waiting"-> , ScalarType "bool"-> )-> , ( "xact_start"-> , ScalarType "timestamptz"-> )-> , ( "query_start"-> , ScalarType "timestamptz"-> )-> , ( "backend_start"-> , ScalarType "timestamptz"-> )-> , ( "client_addr"-> , ScalarType "inet"-> )-> , ( "client_port"-> , ScalarType "int4"-> )-> ]-> , CatCreateView-> "pg_stat_all_indexes"-> [ ( "relid"-> , ScalarType "oid"-> )-> , ( "indexrelid"-> , ScalarType "oid"-> )-> , ( "schemaname"-> , ScalarType "name"-> )-> , ( "relname"-> , ScalarType "name"-> )-> , ( "indexrelname"-> , ScalarType "name"-> )-> , ( "idx_scan"-> , ScalarType "int8"-> )-> , ( "idx_tup_read"-> , ScalarType "int8"-> )-> , ( "idx_tup_fetch"-> , ScalarType "int8"-> )-> ]-> , CatCreateView-> "pg_stat_all_tables"-> [ ( "relid"-> , ScalarType "oid"-> )-> , ( "schemaname"-> , ScalarType "name"-> )-> , ( "relname"-> , ScalarType "name"-> )-> , ( "seq_scan"-> , ScalarType "int8"-> )-> , ( "seq_tup_read"-> , ScalarType "int8"-> )-> , ( "idx_scan"-> , ScalarType "int8"-> )-> , ( "idx_tup_fetch"-> , ScalarType "int8"-> )-> , ( "n_tup_ins"-> , ScalarType "int8"-> )-> , ( "n_tup_upd"-> , ScalarType "int8"-> )-> , ( "n_tup_del"-> , ScalarType "int8"-> )-> , ( "n_tup_hot_upd"-> , ScalarType "int8"-> )-> , ( "n_live_tup"-> , ScalarType "int8"-> )-> , ( "n_dead_tup"-> , ScalarType "int8"-> )-> , ( "last_vacuum"-> , ScalarType "timestamptz"-> )-> , ( "last_autovacuum"-> , ScalarType "timestamptz"-> )-> , ( "last_analyze"-> , ScalarType "timestamptz"-> )-> , ( "last_autoanalyze"-> , ScalarType "timestamptz"-> )-> ]-> , CatCreateView-> "pg_stat_bgwriter"-> [ ( "checkpoints_timed"-> , ScalarType "int8"-> )-> , ( "checkpoints_req"-> , ScalarType "int8"-> )-> , ( "buffers_checkpoint"-> , ScalarType "int8"-> )-> , ( "buffers_clean"-> , ScalarType "int8"-> )-> , ( "maxwritten_clean"-> , ScalarType "int8"-> )-> , ( "buffers_backend"-> , ScalarType "int8"-> )-> , ( "buffers_alloc"-> , ScalarType "int8"-> )-> ]-> , CatCreateView-> "pg_stat_database"-> [ ( "datid"-> , ScalarType "oid"-> )-> , ( "datname"-> , ScalarType "name"-> )-> , ( "numbackends"-> , ScalarType "int4"-> )-> , ( "xact_commit"-> , ScalarType "int8"-> )-> , ( "xact_rollback"-> , ScalarType "int8"-> )-> , ( "blks_read"-> , ScalarType "int8"-> )-> , ( "blks_hit"-> , ScalarType "int8"-> )-> , ( "tup_returned"-> , ScalarType "int8"-> )-> , ( "tup_fetched"-> , ScalarType "int8"-> )-> , ( "tup_inserted"-> , ScalarType "int8"-> )-> , ( "tup_updated"-> , ScalarType "int8"-> )-> , ( "tup_deleted"-> , ScalarType "int8"-> )-> ]-> , CatCreateView-> "pg_stat_sys_indexes"-> [ ( "relid"-> , ScalarType "oid"-> )-> , ( "indexrelid"-> , ScalarType "oid"-> )-> , ( "schemaname"-> , ScalarType "name"-> )-> , ( "relname"-> , ScalarType "name"-> )-> , ( "indexrelname"-> , ScalarType "name"-> )-> , ( "idx_scan"-> , ScalarType "int8"-> )-> , ( "idx_tup_read"-> , ScalarType "int8"-> )-> , ( "idx_tup_fetch"-> , ScalarType "int8"-> )-> ]-> , CatCreateView-> "pg_stat_sys_tables"-> [ ( "relid"-> , ScalarType "oid"-> )-> , ( "schemaname"-> , ScalarType "name"-> )-> , ( "relname"-> , ScalarType "name"-> )-> , ( "seq_scan"-> , ScalarType "int8"-> )-> , ( "seq_tup_read"-> , ScalarType "int8"-> )-> , ( "idx_scan"-> , ScalarType "int8"-> )-> , ( "idx_tup_fetch"-> , ScalarType "int8"-> )-> , ( "n_tup_ins"-> , ScalarType "int8"-> )-> , ( "n_tup_upd"-> , ScalarType "int8"-> )-> , ( "n_tup_del"-> , ScalarType "int8"-> )-> , ( "n_tup_hot_upd"-> , ScalarType "int8"-> )-> , ( "n_live_tup"-> , ScalarType "int8"-> )-> , ( "n_dead_tup"-> , ScalarType "int8"-> )-> , ( "last_vacuum"-> , ScalarType "timestamptz"-> )-> , ( "last_autovacuum"-> , ScalarType "timestamptz"-> )-> , ( "last_analyze"-> , ScalarType "timestamptz"-> )-> , ( "last_autoanalyze"-> , ScalarType "timestamptz"-> )-> ]-> , CatCreateView-> "pg_stat_user_functions"-> [ ( "funcid"-> , ScalarType "oid"-> )-> , ( "schemaname"-> , ScalarType "name"-> )-> , ( "funcname"-> , ScalarType "name"-> )-> , ( "calls"-> , ScalarType "int8"-> )-> , ( "total_time"-> , ScalarType "int8"-> )-> , ( "self_time"-> , ScalarType "int8"-> )-> ]-> , CatCreateView-> "pg_stat_user_indexes"-> [ ( "relid"-> , ScalarType "oid"-> )-> , ( "indexrelid"-> , ScalarType "oid"-> )-> , ( "schemaname"-> , ScalarType "name"-> )-> , ( "relname"-> , ScalarType "name"-> )-> , ( "indexrelname"-> , ScalarType "name"-> )-> , ( "idx_scan"-> , ScalarType "int8"-> )-> , ( "idx_tup_read"-> , ScalarType "int8"-> )-> , ( "idx_tup_fetch"-> , ScalarType "int8"-> )-> ]-> , CatCreateView-> "pg_stat_user_tables"-> [ ( "relid"-> , ScalarType "oid"-> )-> , ( "schemaname"-> , ScalarType "name"-> )-> , ( "relname"-> , ScalarType "name"-> )-> , ( "seq_scan"-> , ScalarType "int8"-> )-> , ( "seq_tup_read"-> , ScalarType "int8"-> )-> , ( "idx_scan"-> , ScalarType "int8"-> )-> , ( "idx_tup_fetch"-> , ScalarType "int8"-> )-> , ( "n_tup_ins"-> , ScalarType "int8"-> )-> , ( "n_tup_upd"-> , ScalarType "int8"-> )-> , ( "n_tup_del"-> , ScalarType "int8"-> )-> , ( "n_tup_hot_upd"-> , ScalarType "int8"-> )-> , ( "n_live_tup"-> , ScalarType "int8"-> )-> , ( "n_dead_tup"-> , ScalarType "int8"-> )-> , ( "last_vacuum"-> , ScalarType "timestamptz"-> )-> , ( "last_autovacuum"-> , ScalarType "timestamptz"-> )-> , ( "last_analyze"-> , ScalarType "timestamptz"-> )-> , ( "last_autoanalyze"-> , ScalarType "timestamptz"-> )-> ]-> , CatCreateView-> "pg_statio_all_indexes"-> [ ( "relid"-> , ScalarType "oid"-> )-> , ( "indexrelid"-> , ScalarType "oid"-> )-> , ( "schemaname"-> , ScalarType "name"-> )-> , ( "relname"-> , ScalarType "name"-> )-> , ( "indexrelname"-> , ScalarType "name"-> )-> , ( "idx_blks_read"-> , ScalarType "int8"-> )-> , ( "idx_blks_hit"-> , ScalarType "int8"-> )-> ]-> , CatCreateView-> "pg_statio_all_sequences"-> [ ( "relid"-> , ScalarType "oid"-> )-> , ( "schemaname"-> , ScalarType "name"-> )-> , ( "relname"-> , ScalarType "name"-> )-> , ( "blks_read"-> , ScalarType "int8"-> )-> , ( "blks_hit"-> , ScalarType "int8"-> )-> ]-> , CatCreateView-> "pg_statio_all_tables"-> [ ( "relid"-> , ScalarType "oid"-> )-> , ( "schemaname"-> , ScalarType "name"-> )-> , ( "relname"-> , ScalarType "name"-> )-> , ( "heap_blks_read"-> , ScalarType "int8"-> )-> , ( "heap_blks_hit"-> , ScalarType "int8"-> )-> , ( "idx_blks_read"-> , ScalarType "int8"-> )-> , ( "idx_blks_hit"-> , ScalarType "int8"-> )-> , ( "toast_blks_read"-> , ScalarType "int8"-> )-> , ( "toast_blks_hit"-> , ScalarType "int8"-> )-> , ( "tidx_blks_read"-> , ScalarType "int8"-> )-> , ( "tidx_blks_hit"-> , ScalarType "int8"-> )-> ]-> , CatCreateView-> "pg_statio_sys_indexes"-> [ ( "relid"-> , ScalarType "oid"-> )-> , ( "indexrelid"-> , ScalarType "oid"-> )-> , ( "schemaname"-> , ScalarType "name"-> )-> , ( "relname"-> , ScalarType "name"-> )-> , ( "indexrelname"-> , ScalarType "name"-> )-> , ( "idx_blks_read"-> , ScalarType "int8"-> )-> , ( "idx_blks_hit"-> , ScalarType "int8"-> )-> ]-> , CatCreateView-> "pg_statio_sys_sequences"-> [ ( "relid"-> , ScalarType "oid"-> )-> , ( "schemaname"-> , ScalarType "name"-> )-> , ( "relname"-> , ScalarType "name"-> )-> , ( "blks_read"-> , ScalarType "int8"-> )-> , ( "blks_hit"-> , ScalarType "int8"-> )-> ]-> , CatCreateView-> "pg_statio_sys_tables"-> [ ( "relid"-> , ScalarType "oid"-> )-> , ( "schemaname"-> , ScalarType "name"-> )-> , ( "relname"-> , ScalarType "name"-> )-> , ( "heap_blks_read"-> , ScalarType "int8"-> )-> , ( "heap_blks_hit"-> , ScalarType "int8"-> )-> , ( "idx_blks_read"-> , ScalarType "int8"-> )-> , ( "idx_blks_hit"-> , ScalarType "int8"-> )-> , ( "toast_blks_read"-> , ScalarType "int8"-> )-> , ( "toast_blks_hit"-> , ScalarType "int8"-> )-> , ( "tidx_blks_read"-> , ScalarType "int8"-> )-> , ( "tidx_blks_hit"-> , ScalarType "int8"-> )-> ]-> , CatCreateView-> "pg_statio_user_indexes"-> [ ( "relid"-> , ScalarType "oid"-> )-> , ( "indexrelid"-> , ScalarType "oid"-> )-> , ( "schemaname"-> , ScalarType "name"-> )-> , ( "relname"-> , ScalarType "name"-> )-> , ( "indexrelname"-> , ScalarType "name"-> )-> , ( "idx_blks_read"-> , ScalarType "int8"-> )-> , ( "idx_blks_hit"-> , ScalarType "int8"-> )-> ]-> , CatCreateView-> "pg_statio_user_sequences"-> [ ( "relid"-> , ScalarType "oid"-> )-> , ( "schemaname"-> , ScalarType "name"-> )-> , ( "relname"-> , ScalarType "name"-> )-> , ( "blks_read"-> , ScalarType "int8"-> )-> , ( "blks_hit"-> , ScalarType "int8"-> )-> ]-> , CatCreateView-> "pg_statio_user_tables"-> [ ( "relid"-> , ScalarType "oid"-> )-> , ( "schemaname"-> , ScalarType "name"-> )-> , ( "relname"-> , ScalarType "name"-> )-> , ( "heap_blks_read"-> , ScalarType "int8"-> )-> , ( "heap_blks_hit"-> , ScalarType "int8"-> )-> , ( "idx_blks_read"-> , ScalarType "int8"-> )-> , ( "idx_blks_hit"-> , ScalarType "int8"-> )-> , ( "toast_blks_read"-> , ScalarType "int8"-> )-> , ( "toast_blks_hit"-> , ScalarType "int8"-> )-> , ( "tidx_blks_read"-> , ScalarType "int8"-> )-> , ( "tidx_blks_hit"-> , ScalarType "int8"-> )-> ]-> , CatCreateView-> "pg_stats"-> [ ( "schemaname"-> , ScalarType "name"-> )-> , ( "tablename"-> , ScalarType "name"-> )-> , ( "attname"-> , ScalarType "name"-> )-> , ( "null_frac"-> , ScalarType "float4"-> )-> , ( "avg_width"-> , ScalarType "int4"-> )-> , ( "n_distinct"-> , ScalarType "float4"-> )-> , ( "most_common_vals"-> , Pseudo AnyArray-> )-> , ( "most_common_freqs"-> , ArrayType ( ScalarType "float4" )-> )-> , ( "histogram_bounds"-> , Pseudo AnyArray-> )-> , ( "correlation"-> , ScalarType "float4"-> )-> ]-> , CatCreateView-> "pg_tables"-> [ ( "schemaname"-> , ScalarType "name"-> )-> , ( "tablename"-> , ScalarType "name"-> )-> , ( "tableowner"-> , ScalarType "name"-> )-> , ( "tablespace"-> , ScalarType "name"-> )-> , ( "hasindexes"-> , ScalarType "bool"-> )-> , ( "hasrules"-> , ScalarType "bool"-> )-> , ( "hastriggers"-> , ScalarType "bool"-> )-> ]-> , CatCreateView-> "pg_timezone_abbrevs"-> [ ( "abbrev"-> , ScalarType "text"-> )-> , ( "utc_offset"-> , ScalarType "interval"-> )-> , ( "is_dst"-> , ScalarType "bool"-> )-> ]-> , CatCreateView-> "pg_timezone_names"-> [ ( "name"-> , ScalarType "text"-> )-> , ( "abbrev"-> , ScalarType "text"-> )-> , ( "utc_offset"-> , ScalarType "interval"-> )-> , ( "is_dst"-> , ScalarType "bool"-> )-> ]-> , CatCreateView-> "pg_user"-> [ ( "usename"-> , ScalarType "name"-> )-> , ( "usesysid"-> , ScalarType "oid"-> )-> , ( "usecreatedb"-> , ScalarType "bool"-> )-> , ( "usesuper"-> , ScalarType "bool"-> )-> , ( "usecatupd"-> , ScalarType "bool"-> )-> , ( "passwd"-> , ScalarType "text"-> )-> , ( "valuntil"-> , ScalarType "abstime"-> )-> , ( "useconfig"-> , ArrayType ( ScalarType "text" )-> )-> ]-> , CatCreateView-> "pg_user_mappings"-> [ ( "umid"-> , ScalarType "oid"-> )-> , ( "srvid"-> , ScalarType "oid"-> )-> , ( "srvname"-> , ScalarType "name"-> )-> , ( "umuser"-> , ScalarType "oid"-> )-> , ( "usename"-> , ScalarType "name"-> )-> , ( "umoptions"-> , ArrayType ( ScalarType "text" )-> )-> ]-> , CatCreateView-> "pg_views"-> [ ( "schemaname"-> , ScalarType "name"-> )-> , ( "viewname"-> , ScalarType "name"-> )-> , ( "viewowner"-> , ScalarType "name"-> )-> , ( "definition"-> , ScalarType "text"-> )-> ]-> , CatCreateView-> "information_schema.referential_constraints"-> [ ( "constraint_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "constraint_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "constraint_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "unique_constraint_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "unique_constraint_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "unique_constraint_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "match_option"-> , DomainType "information_schema.character_data"-> )-> , ( "update_rule"-> , DomainType "information_schema.character_data"-> )-> , ( "delete_rule"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema.role_column_grants"-> [ ( "grantor"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "grantee"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "column_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "privilege_type"-> , DomainType "information_schema.character_data"-> )-> , ( "is_grantable"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema.role_routine_grants"-> [ ( "grantor"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "grantee"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "specific_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "specific_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "specific_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "routine_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "routine_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "routine_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "privilege_type"-> , DomainType "information_schema.character_data"-> )-> , ( "is_grantable"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema.role_table_grants"-> [ ( "grantor"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "grantee"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "privilege_type"-> , DomainType "information_schema.character_data"-> )-> , ( "is_grantable"-> , DomainType "information_schema.character_data"-> )-> , ( "with_hierarchy"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema.role_usage_grants"-> [ ( "grantor"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "grantee"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "object_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "object_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "object_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "object_type"-> , DomainType "information_schema.character_data"-> )-> , ( "privilege_type"-> , DomainType "information_schema.character_data"-> )-> , ( "is_grantable"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema.routine_privileges"-> [ ( "grantor"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "grantee"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "specific_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "specific_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "specific_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "routine_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "routine_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "routine_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "privilege_type"-> , DomainType "information_schema.character_data"-> )-> , ( "is_grantable"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema.routines"-> [ ( "specific_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "specific_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "specific_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "routine_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "routine_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "routine_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "routine_type"-> , DomainType "information_schema.character_data"-> )-> , ( "module_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "module_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "module_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "udt_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "udt_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "udt_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "data_type"-> , DomainType "information_schema.character_data"-> )-> , ( "character_maximum_length"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "character_octet_length"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "character_set_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "character_set_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "character_set_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "collation_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "collation_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "collation_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "numeric_precision"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "numeric_precision_radix"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "numeric_scale"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "datetime_precision"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "interval_type"-> , DomainType "information_schema.character_data"-> )-> , ( "interval_precision"-> , DomainType "information_schema.character_data"-> )-> , ( "type_udt_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "type_udt_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "type_udt_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "scope_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "scope_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "scope_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "maximum_cardinality"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "dtd_identifier"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "routine_body"-> , DomainType "information_schema.character_data"-> )-> , ( "routine_definition"-> , DomainType "information_schema.character_data"-> )-> , ( "external_name"-> , DomainType "information_schema.character_data"-> )-> , ( "external_language"-> , DomainType "information_schema.character_data"-> )-> , ( "parameter_style"-> , DomainType "information_schema.character_data"-> )-> , ( "is_deterministic"-> , DomainType "information_schema.character_data"-> )-> , ( "sql_data_access"-> , DomainType "information_schema.character_data"-> )-> , ( "is_null_call"-> , DomainType "information_schema.character_data"-> )-> , ( "sql_path"-> , DomainType "information_schema.character_data"-> )-> , ( "schema_level_routine"-> , DomainType "information_schema.character_data"-> )-> , ( "max_dynamic_result_sets"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "is_user_defined_cast"-> , DomainType "information_schema.character_data"-> )-> , ( "is_implicitly_invocable"-> , DomainType "information_schema.character_data"-> )-> , ( "security_type"-> , DomainType "information_schema.character_data"-> )-> , ( "to_sql_specific_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "to_sql_specific_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "to_sql_specific_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "as_locator"-> , DomainType "information_schema.character_data"-> )-> , ( "created"-> , DomainType "information_schema.time_stamp"-> )-> , ( "last_altered"-> , DomainType "information_schema.time_stamp"-> )-> , ( "new_savepoint_level"-> , DomainType "information_schema.character_data"-> )-> , ( "is_udt_dependent"-> , DomainType "information_schema.character_data"-> )-> , ( "result_cast_from_data_type"-> , DomainType "information_schema.character_data"-> )-> , ( "result_cast_as_locator"-> , DomainType "information_schema.character_data"-> )-> , ( "result_cast_char_max_length"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "result_cast_char_octet_length"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "result_cast_char_set_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "result_cast_char_set_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "result_cast_character_set_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "result_cast_collation_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "result_cast_collation_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "result_cast_collation_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "result_cast_numeric_precision"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "result_cast_numeric_precision_radix"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "result_cast_numeric_scale"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "result_cast_datetime_precision"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "result_cast_interval_type"-> , DomainType "information_schema.character_data"-> )-> , ( "result_cast_interval_precision"-> , DomainType "information_schema.character_data"-> )-> , ( "result_cast_type_udt_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "result_cast_type_udt_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "result_cast_type_udt_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "result_cast_scope_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "result_cast_scope_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "result_cast_scope_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "result_cast_maximum_cardinality"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "result_cast_dtd_identifier"-> , DomainType "information_schema.sql_identifier"-> )-> ]-> , CatCreateView-> "information_schema.schemata"-> [ ( "catalog_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "schema_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "schema_owner"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "default_character_set_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "default_character_set_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "default_character_set_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "sql_path"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema.sequences"-> [ ( "sequence_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "sequence_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "sequence_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "data_type"-> , DomainType "information_schema.character_data"-> )-> , ( "numeric_precision"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "numeric_precision_radix"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "numeric_scale"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "maximum_value"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "minimum_value"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "increment"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "cycle_option"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema.table_constraints"-> [ ( "constraint_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "constraint_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "constraint_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "constraint_type"-> , DomainType "information_schema.character_data"-> )-> , ( "is_deferrable"-> , DomainType "information_schema.character_data"-> )-> , ( "initially_deferred"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema.table_privileges"-> [ ( "grantor"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "grantee"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "privilege_type"-> , DomainType "information_schema.character_data"-> )-> , ( "is_grantable"-> , DomainType "information_schema.character_data"-> )-> , ( "with_hierarchy"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema.tables"-> [ ( "table_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_type"-> , DomainType "information_schema.character_data"-> )-> , ( "self_referencing_column_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "reference_generation"-> , DomainType "information_schema.character_data"-> )-> , ( "user_defined_type_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "user_defined_type_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "user_defined_type_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "is_insertable_into"-> , DomainType "information_schema.character_data"-> )-> , ( "is_typed"-> , DomainType "information_schema.character_data"-> )-> , ( "commit_action"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema.triggered_update_columns"-> [ ( "trigger_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "trigger_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "trigger_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "event_object_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "event_object_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "event_object_table"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "event_object_column"-> , DomainType "information_schema.sql_identifier"-> )-> ]-> , CatCreateView-> "information_schema.triggers"-> [ ( "trigger_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "trigger_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "trigger_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "event_manipulation"-> , DomainType "information_schema.character_data"-> )-> , ( "event_object_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "event_object_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "event_object_table"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "action_order"-> , DomainType "information_schema.cardinal_number"-> )-> , ( "action_condition"-> , DomainType "information_schema.character_data"-> )-> , ( "action_statement"-> , DomainType "information_schema.character_data"-> )-> , ( "action_orientation"-> , DomainType "information_schema.character_data"-> )-> , ( "condition_timing"-> , DomainType "information_schema.character_data"-> )-> , ( "condition_reference_old_table"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "condition_reference_new_table"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "condition_reference_old_row"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "condition_reference_new_row"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "created"-> , DomainType "information_schema.time_stamp"-> )-> ]-> , CatCreateView-> "information_schema.usage_privileges"-> [ ( "grantor"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "grantee"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "object_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "object_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "object_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "object_type"-> , DomainType "information_schema.character_data"-> )-> , ( "privilege_type"-> , DomainType "information_schema.character_data"-> )-> , ( "is_grantable"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema.user_mapping_options"-> [ ( "authorization_identifier"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "foreign_server_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "foreign_server_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "option_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "option_value"-> , DomainType "information_schema.character_data"-> )-> ]-> , CatCreateView-> "information_schema.user_mappings"-> [ ( "authorization_identifier"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "foreign_server_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "foreign_server_name"-> , DomainType "information_schema.sql_identifier"-> )-> ]-> , CatCreateView-> "information_schema.view_column_usage"-> [ ( "view_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "view_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "view_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "column_name"-> , DomainType "information_schema.sql_identifier"-> )-> ]-> , CatCreateView-> "information_schema.view_routine_usage"-> [ ( "table_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "specific_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "specific_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "specific_name"-> , DomainType "information_schema.sql_identifier"-> )-> ]-> , CatCreateView-> "information_schema.view_table_usage"-> [ ( "view_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "view_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "view_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_name"-> , DomainType "information_schema.sql_identifier"-> )-> ]-> , CatCreateView-> "information_schema.views"-> [ ( "table_catalog"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_schema"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "table_name"-> , DomainType "information_schema.sql_identifier"-> )-> , ( "view_definition"-> , DomainType "information_schema.character_data"-> )-> , ( "check_option"-> , DomainType "information_schema.character_data"-> )-> , ( "is_updatable"-> , DomainType "information_schema.character_data"-> )-> , ( "is_insertable_into"-> , DomainType "information_schema.character_data"-> )-> ]-> ]-
− Database/HsSqlPpp/AstInternals/TypeChecking/CreateFunction.ag
@@ -1,135 +0,0 @@-{--Copyright 2009 Jake Wheat--This file contains the ag code for create function statements. This-includes producing the function prototype, and passing the parameter-and variable declaration bindings into the statement body.--== function prototype--all we do here is type check enough to produce the prototype-information which is added to the catalog, this means the function-name, parameter types, and the return type.--type checking failure is contained so that the function prototype is-produced iff the parameter and return types check ok. Any type errors-in the function body (including the top level variable declarations-don't affect the prototype, and hence callers of the function).---}--SEM Statement- | CreateFunction- loc.tpe = dependsOnRTpe- (@rettype.namedType : @loc.parameterTypes) $- Right $ Pseudo Void- loc.catUpdates = dependsOn [tpeToT @loc.tpe] []- [CatCreateFunction FunName- (map toLower @name)- @loc.parameterTypes- @rettype.namedType- False]- loc.parameterTypes = (map snd @params.params)-- loc.backTree = CreateFunction @ann- @name- @params.annotatedTree- @rettype.annotatedTree- @lang.annotatedTree- @bodyQuote- @body.annotatedTree- @vol.annotatedTree- loc.statementType = []- body.cat = @lhs.inProducedCat--{--== parameters--}--ATTR ParamDef [||paramName : String- namedType : Type]--ATTR ParamDefList [||params : {[(String, Type)]}]--SEM ParamDef- | ParamDef ParamDefTp- lhs.namedType = @typ.namedType- | ParamDef- lhs.paramName = @name- | ParamDefTp- lhs.paramName = ""--SEM ParamDefList- | Nil lhs.params = []- | Cons lhs.params = ((@hd.paramName, @hd.namedType) : @tl.params)---{--ISSUE:--when writing an sql file, you can put a create function which refers-to a table definition that is given later. As long as the function-isn't called before the table definition is given, this is ok. To-handle this, need to gather the function prototype, but delay checking-the contents until either a) all the other type checking has been-done, or b) the function is needed (list ways this can happen: used in-a view (even then, not needed until view is used), function can be-called directly, or indirectly in another function call, ...)--No thoughts on how to do this - but at some point want to support-'declarative' sql source code, where the order doesn't matter, and-this code figures out an order to load it into the database which will-get past pgs checks, so hopefully the solution will move towards this-goal also. One additional consideration is that the error message in a-situation like this would be really helpful if it could tell that a-problem like this could be fixed with a reordering, and suggest that-reordering.--New plan: do two passes, type check everything but the bodies of-functions in first pass, then type check bodies of functions in second-pass. Not perfect, but better than current situation. This will be-achieved by using a separate cat attribute which is the same as the cat-value which gets returned from the annotation functions in AstInternal.ag---}--SEM Statement- | CreateFunction- --add the parameters to the catalog for the contained statements- body.lib = let p = @params.params- ++ (zip posNames $ map snd @params.params)- in fromRight @lhs.lib $- updateBindings @lhs.lib @lhs.cat- [LibStackIDs [("", p)- ,(@name, @params.params)]]- where- posNames :: [String]- posNames = map (\l -> '$':show l) [1..]-{--TODO: using fromRight on it's own for identifier bindings or cat-updates is wrong, if an error is produced then this needs to be added-to an annotation somewhere. Some of the code uses error instead of fromRight-which is even worse.--}--SEM FnBody- | PlpgsqlFnBody- --make the variable names available in the body of the- --function this needs to be generalised to begin/end blocks- --which can nest inside plpgsql functions (they aren't even- --supported by the parser at the moment)- sts.lib = fromRight @lhs.lib $- updateBindings @lhs.lib @lhs.cat- [LibStackIDs [("", @vars.defs)]]--ATTR VarDef [||def : {(String,Type)}]--ATTR VarDefList [||defs : {[(String,Type)]}]----slightly hacky, should fix this better-SEM VarDef- | VarDef lhs.def = (@name, if @typ.namedType == Pseudo Record then PgRecord Nothing else @typ.namedType)--SEM VarDefList- | Cons lhs.defs = @hd.def : @tl.defs- | Nil lhs.defs = []
− Database/HsSqlPpp/AstInternals/TypeChecking/CreateTable.ag
@@ -1,101 +0,0 @@-{--Copyright 2009 Jake Wheat--This file contains the code for typechecking create table statements-(and also create table as statements). It's pretty limited at the-moment, the bits that work are:--gathers enough information to add the table attributes types to the-catalog--typechecks row check constraints properly, but table check constraints-and all other constraints are not checked at all.--doesn't check for duplicate attribute names. doesn't check if the-types are valid for a table (e.g. disallow setof types)--We produce a valid catalog update if the types of the attributes-check ok, any errors in the constraints aren't leaked.---}---SEM Statement- | CreateTable- loc.tpe = dependsOnRTpe @loc.attrTypes $ Right $ Pseudo Void- loc.catUpdates = dependsOn @loc.attrTypes []- [CatCreateTable @name @atts.attrs defaultSystemColumns]- loc.attrTypes : {[Type]}- loc.attrTypes = map snd @atts.attrs-- loc.statementType = []- loc.backTree = CreateTable @ann- @name- @atts.annotatedTree- @cons.annotatedTree- cons.lib = case updateBindings @lhs.lib @lhs.cat- [LibStackIDs [("", @atts.attrs)]] of- Left x -> error $ show x- Right e -> e-{-defaultSystemColumns :: [(String,Type)]-defaultSystemColumns = [("tableoid", ScalarType "oid")- ,("cmax", ScalarType "cid")- ,("xmax", ScalarType "xid")- ,("cmin", ScalarType "cid")- ,("xmin", ScalarType "xid")- ,("ctid", ScalarType "tid")]-}---SEM Statement- | CreateTableAs- loc.tpe =- dependsOnRTpe [@loc.selType] $ do- @loc.attrs- Right @loc.selType- loc.catUpdates =- leftToEmpty (\as -> [CatCreateTable @name as defaultSystemColumns]) $ do- ats <- @loc.attrs- return $ dependsOn (tpeToT @loc.tpe :- (map snd ats)) [] ats-- loc.selType = getTypeAnnotation @expr.annotatedTree- -- type of the columns in the select expression- loc.attrs = unwrapSetOfComposite @loc.selType-- loc.backTree = CreateTableAs @ann @name @expr.annotatedTree- loc.statementType = []--{--attribute name and type gathering--}--ATTR AttributeDef [||attrName : String- namedType : Type]--SEM AttributeDef- | AttributeDef- lhs.attrName = map toLower @name- lhs.namedType = @typ.namedType--ATTR AttributeDefList [||attrs : {[(String, Type)]}]--SEM AttributeDefList- | Cons lhs.attrs = (@hd.attrName, @hd.namedType) : @tl.attrs- | Nil lhs.attrs = []--{--row check constraint:-inject the column name and type into the column constraints--}--SEM AttributeDef- | AttributeDef- cons.lib =- case updateBindings @lhs.lib @lhs.cat- [LibStackIDs [("", [(@name, @typ.namedType)])]] of- Left x -> error $ show x- Right e -> e--
− Database/HsSqlPpp/AstInternals/TypeChecking/Dml.ag
@@ -1,236 +0,0 @@-{--Copyright 2009 Jake Wheat--This file contains the type checking code for dml, currently insert,-update and delete.--================================================================================--= insert--check the insert data is the correct type. Doesn't cope with columns-with default values at the moment.---}--SEM Statement- | Insert- loc.tpe =- dependsOnRTpe [getTypeAnnotation @insData.annotatedTree] $ do- @loc.columnTypes- Right $ Pseudo Void- loc.statementType =- leftToEmpty (\ct -> [StatementType (getPlaceholderTypes @loc.insDataAddedInferredTypes) (fromMaybe [] @returning.listType)]) @loc.columnTypes-- loc.columnTypes =- do- tys <- unwrapSetOfComposite $- getTypeAnnotation @insData.annotatedTree- checkColumnConsistency @lhs.cat- @table- @targetCols.strings- tys- loc.insDataAddedInferredTypes =- case @insData.annotatedTree of- Values ann [exl] ->- let fargs = map snd (fromRight [] @loc.columnTypes) ++ repeat TypeCheckFailed- newExl = map (\(ex,ty) -> updateAnnotation (++ [InferredType ty]) ex) $ zip exl fargs- in Values ann [newExl]- x -> x-- loc.backTree = Insert @ann @table @targetCols.annotatedTree- @loc.insDataAddedInferredTypes @returning.annotatedTree- loc.catUpdates = []---- inject the ids into the returning part--SEM Statement- | Insert- returning.lib =- fromRight @lhs.lib $ do- atts <- catCompositeAttrs @lhs.cat relationComposites @table- updateBindings @lhs.lib @lhs.cat [LibStackIDs [("", atts)]]--{--================================================================================--= update--check the set clause assignments are ok, and inject ids into the where part---}--SEM Statement- | Update- loc.tpe =- do- checkRelationExists @lhs.cat @table- dependsOnRTpe (map snd @assigns.pairs) $ do- @loc.columnTypes- liftErrors @assigns.rowSetErrors- return $ Pseudo Void- loc.statementType =- leftToEmpty (\ct -> [StatementType (getPlaceholderTypes @loc.assignWInferredTypes- ++ getPlaceholderTypes @whr.annotatedTree)- (fromMaybe [] @returning.listType)])- @loc.columnTypes-- loc.columnTypes =- checkColumnConsistency @lhs.cat- @table- (map fst @assigns.pairs)- @assigns.pairs- loc.assignWInferredTypes : SetClauseList- loc.assignWInferredTypes =- let colTypes :: [Type]- colTypes = (map snd $ fromRight [] @loc.columnTypes)- in setInferredTypesG colTypes @assigns.annotatedTree-- loc.backTree = Update @ann- @table- @loc.assignWInferredTypes- @whr.annotatedTree- @returning.annotatedTree- loc.catUpdates = []--{--setInferredTypesG :: Data a => [Type] -> a -> a-setInferredTypesG tys x =- evalState (transformBiM f x) tys- where- f (p@(Placeholder _)) = do- y:ys <- get- put ys- return $ updateAnnotation (++ [InferredType y]) p- f z = return z-}---- local identifier bindings: pass the table attribute names and types--- into the where expression, and the set clause expressions--SEM Statement- | Update- loc.lib =- fromRight @lhs.lib $ do- ct <- catCompositeAttrs @lhs.cat- relationComposites- @table- updateBindings @lhs.lib @lhs.cat [LibStackIDs [("", ct)]]- whr.lib = @loc.lib- assigns.lib = @loc.lib- returning.lib = @loc.lib--{--== set clauses--small complication is slightly hacky code to deal with row set-assignments, where we assign from a multiple attribute subselect into-multiple columns - todo: check if we need so much special casing for-this: should be able to reuse the funcall typing of row set equality-(trade one hack for another, squinting so that assignment looks like-an equality check - since it type checks the same we might be ok). If-we do this, we only need to expand the row sets out to produce a-single string,type list at the end.---}--ATTR SetClauseList [||pairs : {[(String,Type)]}- rowSetErrors : {[TypeError]}]--SEM SetClauseList- | Cons lhs.pairs = @hd.pairs ++ @tl.pairs- lhs.rowSetErrors = maybeToList @hd.rowSetError ++ @tl.rowSetErrors- | Nil lhs.pairs = []- lhs.rowSetErrors = []--ATTR SetClause [||pairs : {[(String,Type)]}- rowSetError : {Maybe TypeError}]--SEM SetClause- | SetClause- lhs.pairs = [(@att, getTypeAnnotation @val.annotatedTree)]- lhs.rowSetError = Nothing- | RowSetClause- loc.rowSetError =- let atts = @atts.strings- types = getRowTypes @vals.typeList- in if length atts /= length types- then Just WrongNumberOfColumns- else Nothing- lhs.pairs = zip @atts.strings $ getRowTypes @vals.typeList--{-getRowTypes :: [Type] -> [Type]-getRowTypes [AnonymousRecordType ts] = ts-getRowTypes ts = ts-}--{--================================================================================--= delete--pretty simple, mainly just need to inject ids into the where part---}--SEM Statement- | Delete- loc.tpe =- checkRelationExists @lhs.cat @table >>- Right (Pseudo Void)- loc.statementType = [StatementType (getPlaceholderTypes @whr.annotatedTree)- (fromMaybe [] @returning.listType)]-- loc.backTree = Delete @ann @table @whr.annotatedTree @returning.annotatedTree- loc.catUpdates = []---SEM Statement- | Delete- loc.lib =- fromRight @lhs.lib $ do- columnTypes <- catCompositeAttrs @lhs.cat relationComposites @table- updateBindings @lhs.lib @lhs.cat [LibStackIDs [("", columnTypes)]]- whr.lib = @loc.lib- returning.lib = @loc.lib--{--================================================================================--}-{----small shortcut to help produce better errors?-checkRelationExists :: Catalog -> String -> Either [TypeError] ()-checkRelationExists cat tbl =- catCompositeDef cat relationComposites tbl >>- return ()----used by both insert and update-checkColumnConsistency :: Catalog -> String -> [String] -> [(String,Type)]- -> Either [TypeError] [(String,Type)]-checkColumnConsistency cat tbl cols' insNameTypePairs = do- ttcols <- lowerize <$> catCompositePublicAttrs cat [] tbl- let cols = if null cols'- then map fst ttcols- else map (map toLower) cols'- errorWhen (length insNameTypePairs /= length cols) [WrongNumberOfColumns]- let nonMatchingColumns = cols \\ map fst ttcols- errorWhen (not $ null nonMatchingColumns) $- map UnrecognisedIdentifier nonMatchingColumns- let targetNameTypePairs = map (\l -> (l,fromJust $ lookup l ttcols)) cols- --check the types of the insdata match the column targets- --name datatype columntype- typeTriples = map (\((a,b),c) -> (a,b,c)) $- zip targetNameTypePairs $- map snd insNameTypePairs- errs :: [TypeError]- errs = concat $ lefts $- map (\(_,b,c) -> checkAssignmentValid cat c b) typeTriples- liftErrors errs- return targetNameTypePairs- where- lowerize = map (\(a,b) -> (map toLower a,b))--}
− Database/HsSqlPpp/AstInternals/TypeChecking/Drops.ag
@@ -1,31 +0,0 @@-{--Copyright 2009 Jake Wheat--This file contains the code for drop statements, only does drop function at the moment---}--SEM Statement- | DropFunction- loc.tpe = Right $ Pseudo Void- loc.backTree = DropFunction @ann @ifE.annotatedTree @sigs.annotatedTree @cascade.annotatedTree- loc.catUpdates = flip map @sigs.fnSigs $ \(nm,args) ->- CatDropFunction ifE nm args- where- ifE = @ifE.annotatedTree == IfExists- loc.statementType = []--ATTR StringTypeNameListPairList [||fnSigs:{[(String,[Type])]}]-SEM StringTypeNameListPairList- | Cons lhs.fnSigs = @hd.fnSig : @tl.fnSigs- | Nil lhs.fnSigs = []--ATTR StringTypeNameListPair [||fnSig:{(String,[Type])}]-SEM StringTypeNameListPair- | Tuple lhs.fnSig = (@x1, @x2.namedTypes)--ATTR TypeNameList [||namedTypes:{[Type]}]--SEM TypeNameList- | Cons lhs.namedTypes = @hd.namedType : @tl.namedTypes- | Nil lhs.namedTypes = []
− Database/HsSqlPpp/AstInternals/TypeChecking/ErrorUtils.lhs
@@ -1,57 +0,0 @@-Copyright 2009 Jake Wheat--This file contains a bunch of small low level utilities to help with-type checking.--> {-# OPTIONS_HADDOCK hide #-}--> module Database.HsSqlPpp.AstInternals.TypeChecking.ErrorUtils-> (-> dependsOn-> ,dependsOnRTpe-> ,dependsOnT-> ,tpeToT-> ,liftErrors-> ,getErrors-> ) where--> import Database.HsSqlPpp.AstInternals.TypeType--================================================================================--= type checking utils--== checkErrors--if we find a typecheckfailed in the list, then propagate that, else-use the final argument.--> dependsOn :: [Type] -> t -> t -> t-> dependsOn ts bad ok =-> if any (==TypeCheckFailed) ts-> then bad-> else ok--> dependsOnRTpe :: [Type] -> Either a Type -> Either a Type-> dependsOnRTpe ts = dependsOn ts (Right TypeCheckFailed)--> dependsOnT :: [Type] -> Type -> Type-> dependsOnT ts = dependsOn ts TypeCheckFailed--convert an 'either [typeerror] type' to a type--> tpeToT :: Either [TypeError] Type -> Type-> tpeToT tpe = case tpe of-> Left _ -> TypeCheckFailed-> Right t -> t--> liftErrors :: [TypeError] -> Either [TypeError] ()-> liftErrors es = if null es-> then Right ()-> else Left es--extract errors from an either, gives empty list if right--> getErrors :: Either [TypeError] Type -> [TypeError]-> getErrors = either id (const [])-
− Database/HsSqlPpp/AstInternals/TypeChecking/Expressions.ag
@@ -1,342 +0,0 @@-{--Copyright 2009 Jake Wheat--This file contains the type checking code for the expression ast data-type.---}----gather the backtree, type errors and types together and add annotations-SEM Expression- | IntegerLit StringLit FloatLit BooleanLit NullLit FunCall Identifier- Exists Case CaseSimple Cast InPredicate ScalarSubQuery LiftOperator- PositionalArg Placeholder WindowFn- lhs.annotatedTree = annTypesAndErrors @loc.backTree- (tpeToT @loc.tpe)- (getErrors @loc.tpe)- $ fmap ((:[]) . FunctionPrototypeA) @loc.prototype--SEM Expression- | IntegerLit StringLit FloatLit BooleanLit NullLit FunCall Identifier- Exists Case CaseSimple Cast InPredicate ScalarSubQuery LiftOperator- PositionalArg Placeholder WindowFn- loc.prototype : {Maybe FunctionPrototype}--SEM Expression- | IntegerLit StringLit FloatLit BooleanLit NullLit Identifier- Exists Case CaseSimple Cast InPredicate ScalarSubQuery LiftOperator- PositionalArg Placeholder WindowFn- loc.prototype = Nothing--{--== literals--pretty straightforward--}--SEM Expression- | IntegerLit loc.tpe = Right typeInt- | StringLit loc.tpe = Right UnknownType- | FloatLit loc.tpe = Right typeNumeric- | BooleanLit loc.tpe = Right typeBool- -- I think a null has the same type resolution as an unknown string lit- | NullLit loc.tpe = Right UnknownType--SEM Expression- | IntegerLit- loc.backTree = IntegerLit @ann @i- | StringLit- loc.backTree = StringLit @ann @quote @value- | FloatLit- loc.backTree = FloatLit @ann @d- | BooleanLit- loc.backTree = BooleanLit @ann @b- | NullLit- loc.backTree = NullLit @ann---{---== cast expression--all the work is done in the typename node--}--SEM Expression- | Cast loc.tpe = Right $ @tn.namedType- loc.backTree = Cast @ann @expr.annotatedTree @tn.annotatedTree--{--== operators and functions--}-SEM Expression- | FunCall- (loc.tpe, loc.prototype) = if any (==TypeCheckFailed) @args.typeList- then (Right TypeCheckFailed, Nothing)- else- let fe = typeCheckFunCall- @lhs.cat- @funName- @args.typeList- in (dependsOnRTpe @args.typeList $ fmap (\(_,_,r,_) -> r) fe- ,eitherToMaybe fe)- loc.backTree = FunCall @ann @funName @args.annotatedTree--- | WindowFn- loc.tpe = Right (getTypeAnnotation @fn.annotatedTree)- loc.backTree = WindowFn @ann- @fn.annotatedTree- @partitionBy.annotatedTree- @orderBy.annotatedTree- @dir.annotatedTree- @frm.annotatedTree-{-{---small shim in front of findCallMatch in the type conversion code, to-handle some special cases.--Some of the special cases will no longer be needed when variadic-support is added.--between, greatest and least are treated as syntactic sugar so we-delegate the function lookups to the <=/>= operators.--the row comparison should be more general than this, since it supports-any operator satisfying some properties---TODO: move all of this into find call match. Don't know why it's separate--}-typeCheckFunCall :: Catalog -> String -> [Type] -> Either [TypeError] FunctionPrototype-typeCheckFunCall cat fnName' argsType =- {-trace ("typecheckfncall " ++ fnName' ++ show argsType) $-}- --dependsOnRTpe argsType $- case fnName of- "count" -> -- not quite sure how this is suppose to work,- -- the counts in the pg catalog accept either- -- no args, or one arg of type any, but you can call- -- count with multiple arguments?- return ("count", argsType, typeBigInt, False)- "!between" -> do- f1 <- lookupReturnType ">=" [argsType !! 0, argsType !! 1]- f2 <- lookupReturnType "<=" [argsType !! 0, argsType !! 2]- lookupFn "!and" [f1,f2]- "greatest" -> do- fp@(_,_,t,_) <- lookupFn fnName argsType- lookupFn ">=" [t,t]- return fp- "least" -> do- fp@(_,_,t,_) <- lookupFn fnName argsType- lookupFn "<=" [t,t]- return fp- "!rowctor" -> return $ ("!rowCtor", argsType, AnonymousRecordType argsType, False)- -- special case the row comparison ops- -- this needs to be fixed: we want to match- -- any implicit casts to functions on composite types- -- first, then we can use the anonymous record type on- -- any composite- _ | fnName `elem` ["=", "<>", "<=", ">=", "<", ">"]- && length argsType == 2- && all isCompositeOrSetOfCompositeType argsType- && compositesCompatible cat (head argsType) (head $ tail argsType) -> return (fnName, argsType, typeBool, False)- --checked for all special cases, so run general case now- s -> lookupFn s argsType- where- lookupReturnType :: String -> [Type] -> Either [TypeError] Type- lookupReturnType s1 args = fmap (\(_,_,r,_) -> r) $ lookupFn s1 args- lookupFn :: String -> [Type] -> Either [TypeError] FunctionPrototype- lookupFn s1 args = findCallMatch cat- (if s1 == "u-" then "-" else s1) args- fnName = map toLower fnName'-}--{--lifted operator:-pretty much the same as haskell 'any (lhs [op]) rhss' (or all instead of any)-where lhs is the first argument and rhss is the second argument-which must be an array--pg allows the rhss to also be a subselect, this is a todo---}--SEM Expression- | LiftOperator- loc.tpe = dependsOnRTpe @args.typeList $ do- let args = @args.annotatedTree- errorWhen (length args /= 2)- [AnyAllError $ "must have two args, got " ++ show args]- let [a,b] = args- aType = getTypeAnnotation a- bType = getTypeAnnotation b- dependsOnRTpe [aType,bType] $ do- errorWhen (not $ isArrayType bType)- [AnyAllError $ "second arg must be array, got " ++ show args]- elemType <- unwrapArray $ bType- resType <- fmap (\(_,_,r,_) -> r) $ typeCheckFunCall- @lhs.cat- @oper- [aType,elemType]- errorWhen (resType /= typeBool)- [AnyAllError $ "operator must have bool return, got " ++ show resType]- return resType- loc.backTree = LiftOperator @ann @oper @flav.annotatedTree @args.annotatedTree---{--== case expression--for non simple cases, we need all the when expressions to be bool, and-then to collect the types of the then parts to see if we can resolve a-common type--for simple cases, we need to check all the when parts have the same type-as the value to check against, then we collect the then parts as above.---}--SEM Expression- | Case CaseSimple- loc.whenTypes = map getTypeAnnotation $ concatMap fst $- @cases.annotatedTree- loc.thenTypes = map getTypeAnnotation $- (map snd $ @cases.annotatedTree) ++- maybeToList @els.annotatedTree--SEM Expression- | Case- loc.tpe =- dependsOnRTpe @loc.whenTypes $ do- errorWhen (any (/= typeBool) @loc.whenTypes) $- [WrongTypes typeBool @loc.whenTypes]- dependsOnRTpe @loc.thenTypes $- resolveResultSetType @lhs.cat @loc.thenTypes- loc.backTree = Case @ann @cases.annotatedTree @els.annotatedTree---SEM Expression- | CaseSimple- loc.tpe =- dependsOnRTpe @loc.whenTypes $ do- let valueType = getTypeAnnotation @value.annotatedTree- checkWhenTypes <-- resolveResultSetType @lhs.cat (valueType : @loc.whenTypes)- dependsOnRTpe @loc.thenTypes $- resolveResultSetType @lhs.cat @loc.thenTypes- loc.backTree = CaseSimple @ann- @value.annotatedTree- @cases.annotatedTree- @els.annotatedTree--{--== identifiers-pull id types out of cat for identifiers---}--SEM Expression- | Identifier- loc.tpe = libLookupID @lhs.lib @i- loc.backTree = Identifier @ann @i---SEM Expression- | PositionalArg- loc.tpe = libLookupID @lhs.lib ('$':show @p)- loc.backTree = PositionalArg @ann @p---SEM Expression- | Placeholder- loc.tpe = Right UnknownType- loc.backTree = Placeholder @ann---- exists: will work on any subselect so we don't need to do any checking-SEM Expression- | Exists- loc.tpe = Right typeBool- loc.backTree = Exists @ann @sel.annotatedTree---{--== scalar subquery-1 col -> type of that col-2 + cols -> row type--}--SEM Expression- | ScalarSubQuery- loc.tpe =- do- let selType = getTypeAnnotation @sel.annotatedTree- dependsOnRTpe [selType] $ do- f <- map snd <$> unwrapSetOfComposite selType- case length f of- 0 -> Left [InternalError "no columns in scalar subquery?"]- 1 -> Right $ head f- _ -> Right $ AnonymousRecordType f-- loc.backTree = ScalarSubQuery @ann @sel.annotatedTree-{--== inlist-todo: make the ast and typechecking a special case of lifted operator--}--SEM Expression- | InPredicate- loc.tpe = do- lt <- @list.listType- ty <- resolveResultSetType- @lhs.cat- [getTypeAnnotation @expr.annotatedTree, lt]- return typeBool- loc.backTree = InPredicate @ann- @expr.annotatedTree- @i- @list.annotatedTree---ATTR InList [||listType : {Either [TypeError] Type}]--SEM InList- | InList- lhs.listType = resolveResultSetType @lhs.cat @exprs.typeList- | InSelect- lhs.listType =- do- attrs <- map snd <$> (unwrapSetOfComposite $- getTypeAnnotation @sel.annotatedTree)- typ <- case length attrs of- 0 -> Left [InternalError- "got subquery with no columns? in inselect"]- 1 -> Right $ head attrs- _ -> Right $ AnonymousRecordType attrs- dependsOnRTpe attrs $ Right typ-{--================================================================================--dodgy type inference for parameterized statements--start with ? in function calls only--the idea is to assume the type is unknown, save the matched function prototype,-then set an inferred type attribute back down into the ? node,-then convert this to an annotation--the matched function prototype gets saved in Expression.loc.protoType-above when resolving the matching function--won't work: the function prototype lookup uses the annotation on the-argument nodes, and this will make the annotation dependent on already-having the function prototype.---}---- ATTR Expression [inferredType:Type||]--- ATTR ExpressionList [inferredTypes:{[Type]}||]---- SEM Expression--- | FunCall--- args.inferredTypes = let t =
− Database/HsSqlPpp/AstInternals/TypeChecking/LocalBindings.lhs
@@ -1,120 +0,0 @@-Copyright 2010 Jake Wheat--This module contains the code to manage local identifier bindings-during the type checking process. This is used for e.g. looking up the-types of parameter and variable references in plpgsql functions, and-for looking up the types of identifiers in select expressions.--Some notes on lookups-all lookups are case insensitive - todo: change correlation names and-ids to lower case in the lbupdate function-start by searching the head of the lookup update list and working down-the code here handles resolving the types of join columns when they-are not the same, and the update routine returns error if the join columns are not compatible-the code here handles expanding record types so that the components can be looked up-----> {-# OPTIONS_HADDOCK hide #-}--> module Database.HsSqlPpp.AstInternals.TypeChecking.LocalBindings-> (-> LocalBindingsUpdate(..)-> ,LocalBindings-> ,emptyBindings-> ,lbUpdate-> ,lbExpandStar-> ,lbLookupID-> ) where--> import Control.Monad-> --import Debug.Trace--> import Database.HsSqlPpp.AstInternals.TypeType-> --import Database.HsSqlPpp.Utils-> --import Database.HsSqlPpp.AstInternals.Catalog.CatalogInternal--> data LocalBindings = LocalBindings [LocalBindingsUpdate]--> emptyBindings :: LocalBindings-> emptyBindings = LocalBindings []--> data LocalBindingsUpdate = LBQualifiedIds {-> source :: String-> ,correlationName :: String-> ,lbids :: [(String,Type)]-> ,internalIds :: [(String,Type)]-> }-> | LBUnqualifiedIds {-> source :: String-> ,lbids :: [(String,Type)]-> ,internalIds :: [(String,Type)]-> }-> | LBJoinIds {-> source1 :: String-> ,correlationName1 :: String-> ,lbids1 :: [(String,Type)]-> ,internalIds1 :: [(String,Type)]-> ,source2 :: String-> ,correlationName2 :: String-> ,lbids2 :: [(String,Type)]-> ,internalIds2 :: [(String,Type)]-> ,joinIds :: [String]-> }--> lbUpdate :: LocalBindingsUpdate -> LocalBindings -> LocalBindings-> lbUpdate lbu (LocalBindings lb) = LocalBindings (lbu : lb)--> lbExpandStar :: LocalBindings-> -> String -- correlation name-> -> Either [TypeError] [(String,String,String,Type)] -- either error or [source,(corr,name,type)]-> lbExpandStar (LocalBindings l) cor =-> es l-> where-> es :: [LocalBindingsUpdate] -> Either [TypeError] [(String,String,String,Type)]-> es (LBQualifiedIds src cor1 ids _ :lbus) = if cor == cor1 || cor == ""-> then mapEm src cor1 ids-> else es lbus-> es (LBUnqualifiedIds src ids _ : lbus) = if cor == ""-> then mapEm src "" ids-> else es lbus-> es (LBJoinIds _ _ _ _ _ _ _ _ _ :lbus) = undefined-> es [] = Left [UnrecognisedCorrelationName cor]-> mapEm :: String -> String -> [(String,Type)] -> Either [TypeError] [(String,String,String,Type)]-> mapEm src c = Right . map (\(a,b) -> (src,c,a,b))--> lbLookupID :: LocalBindings-> -> String -- correlation name-> -> String -- identifier name-> -> Either [TypeError] (String,String,String,Type) -- type error or source, corr, type-> lbLookupID (LocalBindings lb) cor i =-> lk lb-> where-> lk (lbu:lbus) = case findID cor i lbu of-> Nothing -> lk lbus-> Just t -> t-> lk [] = Left [UnrecognisedIdentifier (if cor == "" then i else cor ++ "." ++ i)]--> findID :: String-> -> String-> -> LocalBindingsUpdate-> -> Maybe (Either [TypeError] (String,String,String,Type))-> findID cor i (LBQualifiedIds src cor1 ids intIds) =-> if cor `elem` ["", cor1]-> then case (msum [lookup i ids-> ,lookup i intIds]) of-> Just ty -> Just $ Right (src,cor1,i,ty)-> Nothing -> if cor == ""-> then Nothing-> else Just $ Left [UnrecognisedIdentifier (if cor == "" then i else cor ++ "." ++ i)]-> else Nothing--> findID cor i (LBUnqualifiedIds src ids intIds) =-> if cor == ""-> then flip fmap (msum [lookup i ids-> ,lookup i intIds])-> $ \ty -> Right (src,"",i,ty)-> else Nothing-> findID cor i (LBJoinIds _ _ _ _ _ _ _ _ _) = undefined-
− Database/HsSqlPpp/AstInternals/TypeChecking/LocalIdentifierBindings.lhs
@@ -1,238 +0,0 @@-Copyright 2009 Jake Wheat--This module contains the code to manage local identifier bindings-during the type checking process.--Main areas to support are parameters and variables--> {-# OPTIONS_HADDOCK hide #-}--> module Database.HsSqlPpp.AstInternals.TypeChecking.LocalIdentifierBindings-> (-> QualifiedIDs-> ,LocalIdentifierBindings-> ,emptyBindings-> ,updateBindings-> ,LocalIdentifierBindingsUpdate(..)-> ,libExpandStar-> ,libLookupID-> ) where--> import Control.Monad-> import Data.Char--> import Database.HsSqlPpp.AstInternals.TypeType-> import Database.HsSqlPpp.Utils-> import Database.HsSqlPpp.AstInternals.Catalog.CatalogInternal--> -- | The main datatype, this holds the catalog and context-> -- information to type check against.-> data LocalIdentifierBindings = LocalIdentifierBindings-> {identifierTypes :: [[QualifiedIDs]]-> ,starTypes :: [QualifiedIDs]}----> -- | Represents an empty catalog. This doesn't contain things-> -- like the \'and\' operator, and so if you try to use it it will-> -- almost certainly not work.-> emptyBindings :: LocalIdentifierBindings-> emptyBindings = LocalIdentifierBindings [] []--> -- | Represents the types of the ids available, currently used for-> -- resolving identifiers inside select expressions. Will probably-> -- change as this is fixed to support more general contexts. The-> -- components represent the qualifying name (empty string for no-> -- qualifying name), the list of identifier names with their types,-> -- and the list of system column identifier names with their types.-> type QualifiedIDs = (String, [(String,Type)])--> instance Show LocalIdentifierBindings where-> show (LocalIdentifierBindings idTypes starEx) =-> "ID Types:\n" ++ concatMap (flip showQList 0) idTypes ++-> "Star Exp:\n" ++ concatMap showQuals starEx-> where-> showQList :: [QualifiedIDs] -> Int -> String-> showQList (x:xs) n = show n ++ ":\n" ++-> showQuals x ++ "\n" ++ showQList xs (n + 1)-> showQList [] _ = ""-> showQuals :: QualifiedIDs -> String-> showQuals (co, idList) = "qual: " ++ co ++ ":\n" ++ concatMap (\(n,t) -> n ++ "::" ++ show t ++ "\n") idList----= Attribute identifier scoping--The way this scoping works is we have a list of prefixes/namespaces,-which is generally the table/view name, or the alias given to it, and-then a list of identifiers (with no dots) and their types. When we-look up the type of an identifier, if it has an correlation name we-try to match that against a table name or alias in that list, if it is-not present or not unique then throw an error. Similarly with no-correlation name, we look at all the lists, if the id is not present-or not unique then throw an error.--catIdentifierTypes is for expanding *. If we want to access the-common attributes from one of the tables in a using or natural join,-this attribute can be qualified with either of the table names/-aliases. But when we expand the *, we only output these common fields-once, so keep a separate list of these fields used just for expanding-the star. The other twist is that these common fields appear first in-the resultant field list.--System columns: pg also has these - they have names and types like-other attributes, but are not included when expanding stars, so you-only get them when you explicitly ask for them. The main use is using-the oid system column which is heavily used as a target for foreign-key references in the pg catalog.--This system still isn't working right. Subqueries are a-problem. Aspects which don't work right now are:--consider this query:-select relname as relvar_name- from pg_class- where ((relnamespace =- (select oid- from pg_namespace- where (nspname = 'public'))) and (relkind = 'r'));--we need to be able to access attributes from pg_class inside the subquery,-but 1) they aren't inserted if you use * in the inner query-2) they can't make an identifier ambiguous, so the oid here in the subquery-is ok even though both the oid from pg_namespace and the oid from pg_class-are in scope.--So there are two problems with the current code:-it's too aggressive at throwing ambiguous identifier errors-it pulls in too many identifiers when expanding star--Solution ideas:-for the ambiguous errors, create a stack of identifiers, then split-the CatUpdateIDs into two, one to replace the current set, and one to-push a new set on the stack. Then fix the lookup to walk the stack level by level.--for the *, we already have special cases for system columns, and for-join ids. I think the best solution is to provide a separate list of *-columns and types, with a separate cat update ctor, and get the type-checker to resolve the list for * expansion rather than doing it here.--This should also handle parameters and variable declarations in plpgsql-functions too, these stack in the same way, with one complication to-do with parameters:--there is an additional complication with plpgsql, which isn't going to-be handled for now: instead of stacking like everything else, for-variable references inside select, insert, update and delete-statements only, which aren't qualified and match a parameter name,-then the parameter is used in lieu of variable declarations or-attributes inside a select expression. This will be handled at some-point.--this is something the lint checker should flag when it's written, it-will also flag any ambiguous identifiers which resolve ok only because-of stacking, this is a standard warning in many flavours of lint-checkers.--One last thing is that we need to make sure identifiers availability doesn't-get inherited too far: e.g. a create function inside a create function-can't access ids from the outer create function. This is pretty easy:-the following things generate identifier bindings:-select expressions, inside the expression-parameter defs-variable defs--since select expressions can't contain statements, we don't need to-worry about e.g. if statements, they want to inherit ids from params-and variable defs, so the default is good.--For catalogs being updated sequentially: since the catalog is-updated in a statement list (i.e. catalog updates stack from one-statement to the next within a single statement list), any var defs-can't break out of the containing list, so we are covered e.g. for a-variable def leaking from an inner block to an outer block.--With ids going into select expressions: we want the default which is-parameters, vardefs and ids from containing select expressions to be-inherited. So, in the end the only case to deal with is a create-function inside another create function. This isn't dealt with at the-moment.----> libExpandStar :: LocalIdentifierBindings -> String -> Either [TypeError] [(String,Type)]-> libExpandStar cat correlationName =-> case lookup correlationName $ starTypes cat of-> Nothing -> errorWhen (correlationName == "")-> [InternalError "no star expansion found?"] >>-> Left [UnrecognisedCorrelationName correlationName]-> Just l -> Right l--> splitIdentifier :: String -> (String,String)-> splitIdentifier s = let (a,b) = span (/= '.') s-> in if b == ""-> then ("", a)-> else (a,tail b)--> libLookupID :: LocalIdentifierBindings -> String -> Either [TypeError] Type-> libLookupID cat iden1 =-> catLookupID' $ identifierTypes cat-> where-> (correlationName,iden) = splitIdentifier $ map toLower iden1-> catLookupID' (its:itss) =-> case lookup correlationName its of-> Nothing -> catLookupID' itss-> Just s -> case filter (\(n,_) -> map toLower n==iden) s of-> [] -> if correlationName == ""-> then catLookupID' itss-> else Left [UnrecognisedIdentifier $ correlationName ++ "." ++ iden]-> (_,t):[] -> Right t-> _ -> Left [AmbiguousIdentifier iden]-> catLookupID' [] =-> Left [if correlationName == ""-> then UnrecognisedIdentifier iden-> else UnrecognisedCorrelationName correlationName]--> -- | Applies a list of 'CatalogUpdate's to an 'Catalog' value-> -- to produce a new Catalog value.-> updateBindings :: LocalIdentifierBindings-> -> Catalog-> -> [LocalIdentifierBindingsUpdate]-> -> Either [TypeError] LocalIdentifierBindings-> updateBindings lbs' cat eus =-> let r = foldM updateCat' lbs' eus-> in {-trace ("*********************************************\nupdatebindings from " ++ show lbs' ++ "\nto\n" ++ show r) -} r-> where-> updateCat' lbs eu =-> case eu of-> LibStackIDs qids -> return $ lbs {identifierTypes = expandComposites qids : identifierTypes lbs}-> LibSetStarExpansion sids -> return $ lbs {starTypes = sids}-> --take all the composite typed ids, and expand them out-> expandComposites :: [(String, [(String,Type)])] -> [(String, [(String,Type)])]-> expandComposites ((q,attrs):qis) =-> ec attrs ++ (q, map (\(n,t) -> (n,wrapIfRecord n t)) attrs) : expandComposites qis-> where-> ec :: [(String,Type)] -> [(String, [(String,Type)])]-> ec [] = []-> ec ((nm,NamedCompositeType t):xs) = (nm,compFields t):ec xs-> ec ((nm,SetOfType(NamedCompositeType t)):xs) = (nm,compFields t):ec xs-> ec ((nm,CompositeType t):xs) = (nm, t):ec xs-> ec ((nm,SetOfType(CompositeType t)):xs) = (nm, t):ec xs-> ec (_:xs) = ec xs-> wrapIfRecord n t =-> case libLookupID lbs' n of-> Right (PgRecord _) -> PgRecord (Just t)-> _ -> t-> expandComposites [] = []-> compFields = fromRight [] . catCompositePublicAttrs cat []--> data LocalIdentifierBindingsUpdate =-> -- | to allow an unqualified identifier reference to work you need to-> -- supply an extra entry with \"\" as the alias, and all the fields,-> -- in the case of joins, these unaliased fields need to have the-> -- duplicates removed and the types resolved-> LibStackIDs [QualifiedIDs]-> -- | to allow an unqualified star to work you need to-> -- supply an extra entry with \"\" as the alias, and all the fields-> | LibSetStarExpansion [QualifiedIDs]-
− Database/HsSqlPpp/AstInternals/TypeChecking/Misc.ag
@@ -1,171 +0,0 @@-{--Copyright 2009 Jake Wheat--Contains bit and pieces of type checking which don't fit anywhere else--================================================================================--= type names--Types with type modifiers (called PrecTypeName here, to be changed),-are not supported at the moment.---}--ATTR TypeName [||namedType : Type]--SEM TypeName- | SimpleTypeName ArrayTypeName SetOfTypeName PrecTypeName- lhs.namedType = tpeToT @loc.tpe- lhs.annotatedTree = updateAnnotation- ((map TypeErrorA $ getErrors @loc.tpe) ++)- @loc.backTree---SEM TypeName- | SimpleTypeName- loc.tpe = catLookupType @lhs.cat $ canonicalizeTypeName @tn- loc.backTree = SimpleTypeName @ann @tn- | ArrayTypeName- loc.tpe = dependsOnRTpe [@typ.namedType] $ Right $ ArrayType @typ.namedType- loc.backTree = ArrayTypeName @ann @typ.annotatedTree- | SetOfTypeName- loc.tpe = dependsOnRTpe [@typ.namedType] $ Right $ SetOfType @typ.namedType- loc.backTree = SetOfTypeName @ann @typ.annotatedTree- | PrecTypeName- loc.tpe = catLookupType @lhs.cat $ canonicalizeTypeName @tn- loc.backTree = PrecTypeName @ann @tn @prec---{--================================================================================--= generic node types---}----expression list and list list - just collect up the types--ATTR ExpressionList [||typeList : {[Type]}]--SEM ExpressionList- | Cons lhs.typeList = getTypeAnnotation @hd.annotatedTree : @tl.typeList- | Nil lhs.typeList = []---ATTR ExpressionListList [||typeListList : {[[Type]]}]--SEM ExpressionListList- | Cons lhs.typeListList = @hd.typeList : @tl.typeListList- | Nil lhs.typeListList = []----- stringlist: collect the strings-ATTR StringList [||strings : {[String]}]--SEM StringList- | Cons lhs.strings = @hd : @tl.strings- | Nil lhs.strings = []---- maybe bool expression: if present, then check its type is bool--SEM MaybeBoolExpression- | Just- lhs.annotatedTree =- if getTypeAnnotation @just.annotatedTree `notElem` [typeBool, TypeCheckFailed]- then Just $ updateAnnotation ((TypeErrorA ExpressionMustBeBool) :)- @just.annotatedTree- else Just $ @just.annotatedTree---{-{--================================================================================--= couple of small utils--I think this should be alright, an identifier referenced in an-expression can only have zero or one dot in it.--}--splitIdentifier :: String -> (String,String)-splitIdentifier s = let (a,b) = span (/= '.') s- in if b == ""- then ("", a)- else (a,tail b)--{--helper to make adding annotations a bit easier--}--annTypesAndErrors :: Data a => a -> Type -> [TypeError]- -> Maybe [AnnotationElement] -> a-annTypesAndErrors item nt errs add =- updateAnnotation modifier item- where- modifier = (([TypeAnnotation nt] ++ fromMaybe [] add ++- map TypeErrorA errs) ++)--{--================================================================================--proper dodgy:-1st pass is to add inferred types to the tree. This is done only for-expressions in a funcall argument list atm. Then we pull out the-placeholders after they've had this information added. Only the-placeholders in funcall argument lists will have their type inferred-in this way, to be expanded. Insert also does this currently, but in Dml.ag--This should probably be done during the typechecking phase instead,-but probably needs a proper type inferencing algorithm to be used, is-done like this for development expediency.---}-getPlaceholders :: Data a => a -> [Expression]-getPlaceholders st =- filter isPlaceholder $ everything (++) (mkQ [] ga) (setInferredTypes st)- where- ga :: Expression -> [Expression]- ga s = [s]- isPlaceholder e = case e of- PositionalArg _ _ -> True- Placeholder _ -> True- _ -> False--getPlaceholderTypes :: Data a => a -> [Type]-getPlaceholderTypes ex =- map (getInferredType . getAnnotation) $ getPlaceholders ex- where- getInferredType (InferredType t:_) = t- getInferredType (_:as) = getInferredType as- getInferredType [] = TypeCheckFailed---setInferredTypes :: Data a => a -> a-setInferredTypes =- doExprs {-. doSts-}- where- doExprs =- transformBi (\x ->- case x of- FunCall an op exprs- -> FunCall an op (addInferredTypes an exprs)- x1 -> x1)- {-doSts =- transformBi (\x ->- case x of- Insert ann table targetCols insData returning- -> Insert ann table targetCols insData returning- x1 -> x1)-}- addInferredTypes an exprs =- let args1 = fmap (\(_,a,_,_) -> a) $ fp an- args = fromMaybe [] args1- fargs = args ++ repeat TypeCheckFailed- in flip map (zip exprs fargs)- (\(ex, ty) -> updateAnnotation (++ [InferredType ty]) ex)- where- fp (FunctionPrototypeA f:_) = Just f- fp (_:ls) = fp ls- fp [] = Nothing--}
− Database/HsSqlPpp/AstInternals/TypeChecking/MiscCreates.ag
@@ -1,79 +0,0 @@-{--Copyright 2009 Jake Wheat--This file contains the ddl checking, apart from create function and-create table which have their own files.--= create view--pretty simple, just forwards the select expression type---}--SEM Statement- | CreateView- loc.tpe = dependsOnRTpe [getTypeAnnotation @expr.annotatedTree] $- Right $ Pseudo Void- loc.backTree = CreateView @ann @name @expr.annotatedTree- loc.attrs = case getTypeAnnotation @expr.annotatedTree of- SetOfType (CompositeType c) -> c- _ -> [] --TODO: error ignored- loc.catUpdates = [CatCreateView @name @loc.attrs]- loc.statementType = []--{--================================================================================--= create type--might move this to create table since they have a fair bit in common--main shortcomings are the names and types aren't checked---}--ATTR TypeAttributeDef [||attrName : String- namedType : Type]--SEM TypeAttributeDef- | TypeAttDef- lhs.attrName = @name- lhs.namedType = @typ.namedType--ATTR TypeAttributeDefList [||attrs : {[(String, Type)]}]--SEM TypeAttributeDefList- | Cons lhs.attrs = (@hd.attrName, @hd.namedType) : @tl.attrs- | Nil lhs.attrs = []--SEM Statement- | CreateType- loc.tpe = Right $ Pseudo Void- loc.backTree = CreateType @ann @name @atts.annotatedTree- loc.statementType = []- loc.catUpdates = [CatCreateComposite @name @atts.attrs]--{---= create domain---}--SEM Statement- | CreateDomain- loc.tpe = Right $ Pseudo Void- loc.backTree = CreateDomain @ann @name @typ.annotatedTree @checkName @check.annotatedTree- loc.statementType = []- loc.catUpdates = [CatCreateDomain (DomainType @name) @typ.namedType]- --allow refering to value as 'value' in check expression- check.lib = fromRight @lhs.lib $- updateBindings @lhs.lib @lhs.cat- [LibStackIDs [("", [("value", @typ.namedType)])]]--SEM Statement- | CreateLanguage- loc.tpe = Right $ Pseudo Void- loc.backTree = CreateLanguage @ann @name- loc.statementType = []- loc.catUpdates = [CatCreateFunction FunName "plpgsql_call_handler" [] (Pseudo LanguageHandler) False- ,CatCreateFunction FunName "plpgsql_validator" [ScalarType "oid"] (Pseudo Void) False]
− Database/HsSqlPpp/AstInternals/TypeChecking/Plpgsql.ag
@@ -1,87 +0,0 @@-{--Copyright 2009 Jake Wheat--This file contains the checking code for a few plpgsql statements.----}----todo: check return type consistent with function return type-SEM Statement- | Return- loc.tpe =- dependsOnRTpe [maybe typeBool- getTypeAnnotation- @value.annotatedTree] $ Right $ Pseudo Void- loc.backTree = Return @ann @value.annotatedTree- loc.catUpdates = []- loc.statementType = []---SEM Statement- | Assignment- loc.tpe =- do- let fromType = getTypeAnnotation @value.annotatedTree- toType <- libLookupID @lhs.lib @target- dependsOnRTpe [getTypeAnnotation @value.annotatedTree, toType] $ do- checkAssignmentValid @lhs.cat fromType toType- return $ Pseudo Void- loc.backTree = Assignment @ann @target @value.annotatedTree- loc.catUpdates = []- loc.statementType = []--SEM Statement- | ForIntegerStatement- loc.varTypeE = libLookupID @lhs.lib @var- loc.tpe =- do- let fromType = getTypeAnnotation @from.annotatedTree- toType = getTypeAnnotation @to.annotatedTree- dependsOnRTpe [fromType,toType] $ do- --probably a bit too strict:- errorWhen (fromType /= toType) [FromToTypesNotSame fromType toType]- case @loc.varTypeE of- Right t -> checkAssignmentValid @lhs.cat fromType t- Left _ -> return ()- return $ Pseudo Void- sts.lib =- case @loc.varTypeE of- Left [UnrecognisedIdentifier @var] ->- fromRight @lhs.lib $- updateBindings @lhs.lib @lhs.cat- [LibStackIDs [("", [(@var,getTypeAnnotation @from.annotatedTree)])]]- _ -> @lhs.lib-- loc.backTree = ForIntegerStatement @ann @var @from.annotatedTree @to.annotatedTree @sts.annotatedTree- loc.catUpdates = []- loc.statementType = []---SEM Statement- | ForSelectStatement- loc.selType = getTypeAnnotation @sel.annotatedTree- loc.tpe =- do- dependsOnRTpe [@loc.selType] $ do- toType <- libLookupID @lhs.lib @var- dependsOnRTpe [toType] $ do- checkAssignmentValid @lhs.cat @loc.selType toType- return $ Pseudo Void- --just handles assigning to a record type for now- --one thing that isn't quite right is that the record variable- --holds the last row in it after the for statement, which isn't- --supported here- sts.lib =- if okToUpdate- then fromRight @lhs.lib $- updateBindings @lhs.lib @lhs.cat [LibStackIDs [("", [(@var,@loc.selType)])]]- -- todo:ignoring error- else @lhs.lib- where- okToUpdate = isRight @loc.tpe && @loc.selType /= TypeCheckFailed-- loc.backTree = ForSelectStatement @ann @var @sel.annotatedTree @sts.annotatedTree- loc.catUpdates = []- loc.statementType = []-
− Database/HsSqlPpp/AstInternals/TypeChecking/SelectLists.ag
@@ -1,184 +0,0 @@-{--Copyright 2009 Jake Wheat--This file contains the code that handles the select list part of a-select expression.--TODO: stop wrapping string,type lists in unnamedcompositetypes, pointless---}--SEM SelectItem- | SelExp- loc.annotatedTree = SelExp @ann $ fixStar @ex.annotatedTree- | SelectItem- loc.annotatedTree = SelectItem @ann (fixStar @ex.annotatedTree) @name--ATTR MaybeSelectList [||listType : {Maybe [(String,Type)]}]--ATTR SelectItemList SelectList [||listType : {[(String,Type)]}]-ATTR SelectItem [||itemType : Type]--ATTR SelectList [||libUpdates : {[LocalIdentifierBindingsUpdate]}]--SEM MaybeSelectList- | Just lhs.listType = Just @just.listType- | Nothing lhs.listType = Nothing--SEM SelectItemList- | Cons lhs.listType = expandStar @lhs.lib @hd.columnName @hd.itemType @tl.listType- | Nil lhs.listType = []---SEM SelectItem- | SelExp SelectItem- lhs.itemType = getTypeAnnotation @ex.annotatedTree----SEM SelectList- | SelectList- lhs.listType = @items.listType--- check the into types- loc.errs = case @loc.stuff of- (er,_) -> er- loc.stuff =- case () of- _ | null sl -> ([],Nothing)- | not (null targetTypeErrs) -> (targetTypeErrs,Nothing)- | (case targetTypes of- [PgRecord _] -> True- _ -> False) -> ([],Just (head sl, CompositeType @items.listType))- | matchingComposite /= Left [] -> (fromLeft [] matchingComposite,Nothing)- | length sl /= length @items.listType -> ([WrongNumberOfColumns],Nothing)- | not (null assignErrs) -> (assignErrs,Nothing)- | otherwise -> ([],Nothing)- where- targetTypeEithers = map (libLookupID @lhs.lib) sl- targetTypeErrs = concat $ lefts $ targetTypeEithers- targetTypes = rights $ targetTypeEithers- typePairs = zip (map snd @items.listType) targetTypes- assignErrs = concat $ lefts $ map (uncurry $ checkAssignmentValid @lhs.cat) typePairs- sl = @into.strings- matchingComposite =- case targetTypes of- [t] | isCompositeType t -> checkAssignmentValid @lhs.cat (AnonymousRecordType (map snd @items.listType)) t- _ -> Left []-- lhs.annotatedTree = SelectList (@ann ++ map TypeErrorA @loc.errs)- @items.annotatedTree- @into.annotatedTree- lhs.libUpdates =- case @loc.stuff of- (_,Just r) -> [LibStackIDs [("", [r])]]- _ -> []---[(@var,@loc.selType)]--SEM Statement- | SelectStatement- loc.libUpdates = @ex.libUpdates--ATTR SelectExpression [||libUpdates : {[LocalIdentifierBindingsUpdate]}]--SEM SelectExpression- | Select- lhs.libUpdates = @selSelectList.libUpdates- | CombineSelect Values- lhs.libUpdates = []---- utils to handle a star, bit hacky, maybe should use a separate pass--- or something?--{-expandStar :: LocalIdentifierBindings- -> String- -> Type- -> [(String,Type)]- -> [(String,Type)]-expandStar cat colName colType types =- fromRight types $ do- let (correlationName,iden) = splitIdentifier colName- newCols <- if iden == "*"- then libExpandStar cat correlationName- else return [(iden, colType)]- return $ newCols ++ types--fixStar :: Expression -> Expression-fixStar =- everywhere (mkT fixStar')- where- fixStar' :: Annotation -> Annotation- fixStar' a =- if TypeAnnotation TypeCheckFailed `elem` a- && any (\an ->- case an of- TypeErrorA (UnrecognisedIdentifier x) |- let (_,iden) = splitIdentifier x- in iden == "*" -> True- _ -> False) a- then filter (\an -> case an of- TypeAnnotation TypeCheckFailed -> False- TypeErrorA (UnrecognisedIdentifier _) -> False- _ -> True) a- else a-}---{---================================================================================--= attribute names--columnName is used to collect the column names that the select list-produces, it is combined into an unnamedcompositetype in-selectitemlist, which is also where star expansion happens.---}--ATTR SelectItem [||columnName : String]--{--if the select item is just an identifier, then that column is named-after the identifier-e.g. select a, b as c, b + c from d, gives three columns one named-a, one named c, and one unnamed, even though only one has an alias-if the select item is a function or aggregate call at the top level,-then it is named after that function or aggregate--if it is a cast, the column is named after the target data type name-iff it is a simple type name---}----default value for non identifier nodes--{--override for identifier nodes, this only makes it out to the selectitem-node if the identifier is not wrapped in parens, function calls, etc.--}--ATTR Expression [||liftedColumnName : String]--SEM Expression- | Identifier lhs.liftedColumnName = @i- | FunCall lhs.liftedColumnName =- if isOperatorName @funName- then ""- else @funName- | Cast lhs.liftedColumnName = case @tn.annotatedTree of- SimpleTypeName _ tn -> tn- _ -> ""---SEM Expression- | BooleanLit Case Exists FloatLit IntegerLit LiftOperator- NullLit PositionalArg Placeholder ScalarSubQuery StringLit- lhs.liftedColumnName = ""---- collect the aliases and column names for use by the selectitemlist nodes-SEM SelectItem- | SelExp lhs.columnName = case @ex.liftedColumnName of- "" -> "?column?"- s -> s- | SelectItem lhs.columnName = @name
− Database/HsSqlPpp/AstInternals/TypeChecking/SelectStatement.ag
@@ -1,174 +0,0 @@-{--Copyright 2009 Jake Wheat--= basic select statements--This is a bit of a mess, will be rewritten with a proper literate-flavour once all the different bits are type checking ok, which should-make it much more readable.---}--SEM Statement- | SelectStatement- loc.tpe = dependsOnRTpe [getTypeAnnotation @ex.annotatedTree] $ Right $ Pseudo Void- loc.statementType = [StatementType (getPlaceholderTypes @ex.annotatedTree) $ leftToEmpty id $- unwrapSetOfComposite $- getTypeAnnotation @ex.annotatedTree]- loc.backTree = SelectStatement @ann @ex.annotatedTree- loc.catUpdates = []--SEM SelectExpression- | Values Select CombineSelect- lhs.annotatedTree = annTypesAndErrors @loc.backTree- (tpeToT @loc.tpe)- (getErrors @loc.tpe)- Nothing-{---================================================================================--Type checking select expressions--The main issue is the complicated flow of identifier bindings through the-various parts. This is the rough order in which this happens:--with-from-where-groupby-having-select-combine-orderby-limit--if a type error occurs, we want to give up on any following stages,-rather than create loads of type errors (maybe this could be refined-more).--The select list produces the final type which the selectexpression has.--inside the from, if we have any join expressions we need to pass the types-from the joined trefs to the join expressions.--So, the basic plan is to propagate the iden bindings in the cat attribute-as elsewhere, and also pass along a flag to say whether the previous stage-type checked or not, so we can bail if it has failed.--alternative idea: explore transforming the ast for a select expression into-something using relational algebra-like operations - can then follow the flow-of ids easily. The problem might be with updating the annotations in the original-tree though.--== cat passing current bodge--cat flow:-current simple version:-from tref -> select list- -> where--(so we take the identifiers and types from the tref part, and send-them into the selectlist and where parts)--full order of identifier passing:- 1. from- 2. where- 3. group by- 4. having- 5. select---group by notes, from the pg manual:-group by expressions can be an input column name, or the name or-ordinal number of an output column (SELECT list item), or an arbitrary-expression formed from input-column values. In case of ambiguity, a-GROUP BY name will be interpreted as an input-column name rather than-an output column name.--For now, just send the input columns in as identifiers--}--SEM SelectExpression- | Select- loc.newLib = case updateBindings @lhs.lib @lhs.cat @selTref.libUpdates of- Left x -> error $ show x -- @lhs.cat- Right e -> e- selSelectList.lib = @loc.newLib- selWhere.lib = @loc.newLib- selGroupBy.lib = @loc.newLib- selOrderBy.lib = @loc.newLib----SEM SelectExpression- | Values- loc.tpe = typeCheckValuesExpr- @lhs.cat- @vll.typeListList- loc.backTree = Values @ann @vll.annotatedTree- | Select- loc.tpe =- do- --let trefType = fromMaybe typeBool $ fmap getTypeAnnotation- -- @selTref.annotatedTree- Right $ case @selSelectList.listType of- [(_,Pseudo Void)] -> Pseudo Void- _ -> SetOfType $ CompositeType @selSelectList.listType- loc.backTree = Select @ann- @selDistinct.annotatedTree- @selSelectList.annotatedTree- @selTref.annotatedTree- @selWhere.annotatedTree- @selGroupBy.annotatedTree- @selHaving.annotatedTree- @selOrderBy.annotatedTree- @selLimit.annotatedTree- @selOffset.annotatedTree- | CombineSelect- loc.tpe =- let sel1t = getTypeAnnotation @sel1.annotatedTree- sel2t = getTypeAnnotation @sel2.annotatedTree- in dependsOnRTpe [sel1t, sel2t] $- typeCheckCombineSelect @lhs.cat sel1t sel2t- loc.backTree = CombineSelect @ann @ctype.annotatedTree- @sel1.annotatedTree- @sel2.annotatedTree--{--typeCheckValuesExpr :: Catalog -> [[Type]] -> Either [TypeError] Type-typeCheckValuesExpr cat rowsTs =- let colNames = zipWith (++)- (repeat "column")- (map show [1..length $ head rowsTs])- in unionRelTypes cat rowsTs colNames---typeCheckCombineSelect :: Catalog -> Type -> Type -> Either [TypeError] Type-typeCheckCombineSelect cat v1 v2 = do- u1 <- unwrapSetOfComposite v1- let colNames = map fst u1- u2 <- unwrapSetOfComposite v2- let colTypes1 = map snd u1- let colTypes2 = map snd u2- unionRelTypes cat [colTypes1,colTypes2] colNames--unionRelTypes :: Catalog -> [[Type]] -> [String] -> Either [TypeError] Type-unionRelTypes cat rowsTs colNames =- let lengths = map length rowsTs- in case () of- _ | null rowsTs ->- Left [NoRowsGivenForValues]- | not (all (==head lengths) lengths) ->- Left [ValuesListsMustBeSameLength]- | otherwise ->- --i don't think this propagates all the errors, just the first set- mapM (resolveResultSetType cat) (transpose rowsTs) >>=- (return . SetOfType . CompositeType . zip colNames)--}--INCLUDE "TypeChecking/TableRefs.ag"--INCLUDE "TypeChecking/SelectLists.ag"
− Database/HsSqlPpp/AstInternals/TypeChecking/Statements.ag
@@ -1,122 +0,0 @@-{--Copyright 2009 Jake Wheat--This file contains the general code for statements and statement-lists, and includes the ag files for various flavours of statement.--The attributes and sem statements in this file are for chaining the-cat updates as we progress through a statement list, and for producing-the resultant cat after we've checked a whole ast, this can be used-e.g. to type check multiple files in a row which depend on eachother.---}---- cat updates syn attr is used by each statement to report--- what changes it makes to the catalog, we use this to update--- the cat to feed into the next statement--ATTR Statement [||catUpdates : {[CatalogUpdate]}- libUpdates : {[LocalIdentifierBindingsUpdate]}]---ATTR StatementList [catUpdates : {[CatalogUpdate]}- libUpdates : {[LocalIdentifierBindingsUpdate]}||]-----producedcat is used to pass the final updated cat out-ATTR StatementList Root [|| producedCat : Catalog- producedLib : LocalIdentifierBindings]--ATTR Statement [inProducedCat: Catalog||]--SEM StatementList- | Cons Nil- --newcat is the catalog passed into the head statement- --updated with any catalog changes that that statement has made- loc.newCat = fromRight @lhs.cat $ updateCatalog @lhs.cat @lhs.catUpdates- loc.newLib = fromRight @lhs.lib $ updateBindings @lhs.lib @lhs.cat @lhs.libUpdates- | Cons- hd.cat = @loc.newCat- tl.cat = @loc.newCat- hd.lib = @loc.newLib- tl.lib = @loc.newLib- --produced cat is used to chain the final updated catalog from the last- --element of the list and pass it back up the list so in can be pushed up- -- to the root element and sent out from there- lhs.producedCat = @tl.producedCat- lhs.producedLib = @tl.producedLib- --this is probably a bit inefficient: it creates a new catalog from scratch- --on each statement instead of chaining on the last updated cat- tl.catUpdates = @hd.catUpdates- tl.libUpdates = @hd.libUpdates- | Nil- lhs.producedCat = @loc.newCat- lhs.producedLib = @loc.newLib--SEM Statement- | SelectStatement Insert Update Delete CreateView CreateDomain CreateLanguage- CreateFunction CreateType CreateTable CreateTableAs Return Assignment- ForSelectStatement ForIntegerStatement DropFunction- loc.tpe : {Either [TypeError] Type}- lhs.annotatedTree = annTypesAndErrors @loc.backTree- (tpeToT @loc.tpe)- (getErrors @loc.tpe)- $ Just (map StatementTypeA @loc.statementType ++- [CatUpdates @loc.catUpdates])- loc.catUpdates : {[CatalogUpdate]}- lhs.catUpdates = @loc.catUpdates- lhs.libUpdates = @loc.libUpdates- | Insert Update Delete CreateView CreateDomain- CreateFunction CreateType CreateTable CreateTableAs Return- Assignment ForSelectStatement ForIntegerStatement Set CreateLanguage- Notify CreateSequence AlterSequence DropFunction- loc.libUpdates = []--SEM StatementList- | Cons hd.inProducedCat = @tl.producedCat---SEM Root- | Root statements.catUpdates = []- statements.libUpdates = []--SEM Statement- | CaseStatement ContinueStatement Copy CopyData- DropSomething Execute ExecuteInto- If NullStatement Perform Raise ReturnNext ReturnQuery Truncate- WhileStatement Set Notify CreateSequence- AlterSequence AlterTable CreateTrigger- lhs.catUpdates = []- lhs.libUpdates = []--SEM ExpressionListStatementListPair- | Tuple- x2.catUpdates = []- x2.libUpdates = []-SEM ExpressionStatementListPair- | Tuple- x2.catUpdates = []- x2.libUpdates = []-SEM FnBody- | PlpgsqlFnBody SqlFnBody- sts.catUpdates = []- sts.libUpdates = []-SEM Statement- | CaseStatement If- els.catUpdates = []- els.libUpdates = []-SEM Statement- | ForIntegerStatement ForSelectStatement WhileStatement- sts.catUpdates = []- sts.libUpdates = []----INCLUDE "TypeChecking/SelectStatement.ag"-INCLUDE "TypeChecking/Dml.ag"-INCLUDE "TypeChecking/CreateTable.ag"-INCLUDE "TypeChecking/MiscCreates.ag"-INCLUDE "TypeChecking/CreateFunction.ag"-INCLUDE "TypeChecking/Drops.ag"-INCLUDE "TypeChecking/Plpgsql.ag"-
− Database/HsSqlPpp/AstInternals/TypeChecking/TableRefs.ag
@@ -1,270 +0,0 @@-{--Copyright 2009 Jake Wheat--This file contains the checking for tablerefs (the from part of a-select expression).---}---- lib update contains the updated id and star expansions coming out--- of the tableref part of a select expression. These updates aren't--- used for chaining these things for nested table refs (in join--- statements) - use attributes for them--ATTR TableRef TableRefList [|| libUpdates: {[LocalIdentifierBindingsUpdate]}]---- use these attributes which contain a copy of the info in lib--- updates in a form more digestible to the join attributes resolution--- the main advantages is we don't have to pull the ids out of a list--- of update wrappers, and we don't have to split the id bindings into--- qualified and unqualified parts. We could do it just using the--- libupdates in principle, but this way seems to be a bit more direct--- and clear to write and read (i.e. when I tried to to it using--- libupdates I failed and gave up several times).-ATTR TableRef [|| idLookups : {[(String,Type)]}- starExpansion : {[(String,Type)]}- qidLookups : {[(String,[(String,Type)])]}- qstarExpansion : {[(String,[(String,Type)])]}]---- set the annotations, just need to pick up any type errors whilst--- calculating the new bindings-SEM TableRef- | SubTref Tref TrefFun JoinedTref- lhs.annotatedTree =- updateAnnotation (map TypeErrorA @loc.errs ++) @loc.backTree--SEM TableRefList- | Nil- lhs.libUpdates = []- | Cons- lhs.libUpdates = @hd.libUpdates--{---in the individual sem parts, we set four values:-idlookups : [(string,type)] pairs for all the unqualified ids which will be in scope coming out of the tref-qidlookups: [(string, [(string,type)])] for all the qualified ids-starexpansion: to expand unqualified *-qstarexpansion: to expand qualified *-(we need idlookups and starexpansion because of pg system columns,-which are a serious pain to deal with).--These are set as local vars, because we need to feed the resultant lib-update into the on expressions in joins lower down, which we can't do-directly with a syn attribute, so we collect them in locals, the-combined the in a local for libupdates. We copy all the parts and the-lib updates to regular attributes so we can access them from other-sems (the components (idlookups, etc.) are needed in working out joins-attributes, and the libupdate is used in the join expression, so all-this extra copying is only needed to support joins).--in each part, we collect errors in the errs local which we can then-add to the annotation for the node. when this happens, further type-checking in the select statement should stop but this isn't properly-implemented yet (this is to avoid too many type errors all over the-tree resulting from one mistake - a user friendliness consideration)---}--SEM TableRef- | SubTref Tref TrefFun JoinedTref- loc.idLookups : {[(String,Type)]}- loc.qidLookups : {[(String,[(String,Type)])]}- loc.starExpansion : {[(String,Type)]}- loc.qstarExpansion : {[(String,[(String,Type)])]}- loc.libUpdates = if null @errs- then [LibStackIDs $ ("", @loc.idLookups): @loc.qidLookups- ,LibSetStarExpansion $ ("", @loc.starExpansion): @loc.qstarExpansion]- else []--ATTR TableRef [jlibUpdates: {[LocalIdentifierBindingsUpdate]}||]--{---similar sort of pattern for each sem:-forward the errs-get the information we need to fill in the lookups and expansions as an either-fill in the lookups and expansions---}-SEM TableRef- | SubTref- loc.errs = case @loc.selectAttrs of- Left e -> e- Right _ -> []- loc.selectAttrs : {Either [TypeError] [(String,Type)]}- loc.selectAttrs = unwrapSetOfComposite (getTypeAnnotation @sel.annotatedTree)-- loc.idLookups = fromRight [] @loc.selectAttrs- loc.qidLookups = [(getAlias "" @alias.annotatedTree, @loc.idLookups)]- loc.starExpansion = @loc.idLookups- loc.qstarExpansion = @loc.qidLookups-- | Tref- loc.errs = case @loc.relType of- Left e -> e- Right _ -> []- loc.relType : {Either [TypeError] ([(String, Type)], [(String, Type)])}- loc.relType = catCompositeAttrsPair @lhs.cat [] @tbl- loc.relType1 = fromRight ([],[]) @loc.relType- loc.pAttrs = fst @loc.relType1- loc.sAttrs = snd @loc.relType1-- loc.idLookups = @loc.pAttrs ++ @loc.sAttrs- loc.alias = getAlias @tbl @alias.annotatedTree- loc.qidLookups = [(@loc.alias, @loc.idLookups)]- loc.starExpansion = @loc.pAttrs- loc.qstarExpansion = [(@loc.alias, @loc.pAttrs)]-- | TrefFun- loc.errs = case @eqfunIdens of- Left e -> e- Right _ -> []- loc.eqfunIdens : {Either [TypeError] (String,[(String,Type)])}- loc.eqfunIdens = funIdens @lhs.cat @loc.alias @fn.annotatedTree- loc.qfunIdens = fromRight ("",[]) @loc.eqfunIdens- loc.alias2 = fst @loc.qfunIdens- loc.funIdens = snd @loc.qfunIdens- loc.alias = getAlias "" @alias.annotatedTree-- loc.idLookups = @loc.funIdens- loc.qidLookups = [(@alias2, @loc.idLookups)]- loc.starExpansion = @loc.idLookups- loc.qstarExpansion = @loc.qidLookups- | JoinedTref- loc.errs = fromLeft [] @loc.ejoinAttrs- loc.removeJoinAttrs = filter (\(n,_) -> n `notElem` @loc.joinNames)- --the main meat: find out the name and types of all the common- -- join attributes that need to be combined in the result- -- (this is all the attributes which appear in both tables in- -- the case of a natural join, or all the attributes appearing- -- in the join list in the case of a using join. for other- -- joins, this list is empty- -- all the attributes which don't appear in this list just- -- get added together so we don't need to worry about them- loc.ejoinAttrs : {Either [TypeError] [(String,Type)]}- loc.ejoinAttrs =- do- -- get the names of the join columns- let jns = case (@nat.annotatedTree, @onExpr.originalTree) of- (Natural, _) -> commonFieldNames- (_,Just (JoinUsing _ s)) -> s- _ -> []- --make sure these columns appear in both tables- tjtsm = map (flip lookup @tbl.idLookups) jns- t1jtsm = map (flip lookup @tbl1.idLookups) jns- errorWhen (not $ null $ filter (==Nothing) $ tjtsm ++ t1jtsm)- [MissingJoinAttribute]- let tjts = catMaybes tjtsm -- should be no nothings at this stage- t1jts = catMaybes t1jtsm- -- find the types of these columns - this uses the result set- -- type resolution (see typeconversion.lhs for more details- -- and the relevant link to the pg manual- resolvedTypes :: [Either [TypeError] Type]- resolvedTypes = map (\(a,b) -> resolveResultSetType @lhs.cat [a,b]) $ zip tjts t1jts- liftErrors $ concat $ lefts resolvedTypes- return $ zip jns $ rights resolvedTypes- where- commonFieldNames = intersect (f @tbl.starExpansion) (f @tbl1.starExpansion)- where f = map fst- loc.joinNames = map fst @loc.joinAttrs- loc.joinAttrs = fromRight [] @loc.ejoinAttrs-- --this is where we use the joinAttrs to filter the lookups and- --expansions: stick the joinattrs at the start- -- and add the other two lists minus the join attributes- loc.idLookups = @loc.joinAttrs ++- @loc.removeJoinAttrs @tbl.idLookups ++- @loc.removeJoinAttrs @tbl1.idLookups- loc.qidLookups = @tbl.qidLookups ++ @tbl1.qidLookups- loc.starExpansion = @loc.joinAttrs ++- @loc.removeJoinAttrs @tbl.starExpansion ++- @loc.removeJoinAttrs @tbl1.starExpansion- loc.qstarExpansion = @tbl.qstarExpansion ++ @tbl1.qstarExpansion-- -- we need the attributes from the joined tables to be available- -- in the join expression.- loc.newLib = case updateBindings @lhs.lib @lhs.cat (@loc.libUpdates ++ @lhs.jlibUpdates) of- Left x -> error $ show x- Right e -> {-trace ("on expr lib:" ++ show e)-} e- onExpr.lib = @loc.newLib- --need to pass this into nested joins also- tbl.jlibUpdates = @loc.libUpdates- tbl1.jlibUpdates = @loc.libUpdates---SEM TableRefList- | Cons hd.jlibUpdates = []---{-{--convert a function call into a [String,[(string,type)]] list for use-in a tableref context-first consideration is the alias: if there is an alias in the select,-e.g. select * from generate_series(1,2) x; (alias is x)-we use that, otherwise we use the name of the function-second consideration is the attributes coming out, roughly speaking-we have to convert an arbitrary type to a relation type-if we have a relation valued function, we don't need to do anything-if we have a setof non composite, we lift the single type to an-attribute, using the function name for the attribute name-if we have a non setof, we lift the single type to an attribute and-then relation, using the function name for the attribute name-need to check to see what should happen with arrayof---}-funIdens :: Catalog -> String -> Expression -> Either [TypeError] (String,[(String,Type)])-funIdens cat alias fnVal = do- errorWhen (case fnVal of- FunCall _ _ _ -> False- _ -> True)- [ContextError "FunCall"]- let (FunCall _ fnName _) = fnVal- correlationName = if alias /= ""- then alias- else fnName- attrs <- do- case getTypeAnnotation fnVal of- SetOfType (NamedCompositeType t) -> catCompositePublicAttrs cat [] t- SetOfType x -> return [(correlationName,x)]- y -> return [(correlationName,y)]- return (correlationName, attrs)--getAlias :: String -> TableAlias -> String-getAlias def alias =- case alias of- NoAlias -> def- TableAlias t -> t- FullAlias t _ -> t--}---- boilerplate--- copying the locals to syn attrs--SEM TableRef- | SubTref Tref TrefFun JoinedTref- lhs.libUpdates = @loc.libUpdates- lhs.idLookups = @loc.idLookups- lhs.qidLookups = @loc.qidLookups- lhs.starExpansion = @loc.starExpansion- lhs.qstarExpansion = @loc.qstarExpansion---- backtrees--SEM TableRef- | SubTref- loc.backTree = SubTref @ann @sel.annotatedTree @alias.annotatedTree- | Tref- loc.backTree = Tref @ann @tbl @alias.annotatedTree- | TrefFun- loc.backTree = TrefFun @ann @fn.annotatedTree @alias.annotatedTree- | JoinedTref- loc.backTree = JoinedTref @ann- @tbl.annotatedTree- @nat.annotatedTree- @joinType.annotatedTree- @tbl1.annotatedTree- @onExpr.annotatedTree- @alias.annotatedTree
− Database/HsSqlPpp/AstInternals/TypeChecking/TypeChecking.ag
@@ -1,235 +0,0 @@-{--Copyright 2009 Jake Wheat--This file contains the attr and sem definitions, which do the type-checking, etc..--A lot of the haskell code has been moved into other files:-TypeCheckingH, AstUtils.lhs, it is intended that only small amounts of-code appear (i.e. one-liners) inline in this file, and larger bits go-in AstUtils.lhs. These are only divided because the attribute grammar-system uses a custom syntax with a custom preprocessor. These-guidelines aren't followed very well.--The current type checking approach doesn't quite match how SQL-works. The main problem is that you can e.g. exec create table-statements inside a function. This is something that the type checker-will probably not be able to deal for a while if ever. (Will need-hooks into postgresql to do this properly, which might not be-impossible...).--Once most of the type checking is working, all the code and-documentation will be overhauled quite a lot. Alternatively put, this-code is in need of better documentation and organisation, and serious-refactoring.--An unholy mixture of Maybe, Either, Either/Error Monad and TypeCheckFailed-is used to do error handling.--One of the common patterns is when type checking a node:--first check any types of subnodes which it depends on, if any are-typecheckfailed, then this node's type is typecheckfailed and we stop-there.--otherwise, calculate the type of this node, or get an error if there-is a problem, this is put into loc.tpe which is Either TypeError-Type. Then some common code takes this value and sets the node type to-the type or typecheckfailed if tpe is left, and if it is left add a-type error annotation also.--================================================================================--= main attributes used--Here are the main attributes used in the type checking:--cat is used to chain the catalogs up and down the tree, to allow-access to the catalog information, and to store the in catalog-identifier names and types e.g. inside a select expression.--annotatedTree is used to create a copy of the ast with the type,-etc. annotations.---}-ATTR AllNodes Root ExpressionRoot- [ cat : Catalog- lib : LocalIdentifierBindings || annotatedTree : SELF- -- workaround: avoid bogus cycle- -- detections search for this,- -- replace with annotated tree- -- and uuagc can't tell that- -- there aren't any real cycles- originalTree : SELF]----INCLUDE "TypeChecking/Misc.ag"-INCLUDE "TypeChecking/Expressions.ag"-INCLUDE "TypeChecking/Statements.ag"---{---old stuff:--================================================================================--= static tests--Try to use a list of message data types to hold all sorts of-information which works its way out to the top level where the client-code gets it. Want to have the lists concatenated together-automatically from subnodes to parent node, and then to be able to add-extra messages to this list at each node also.--Problem 1: can't have two sem statements for the same node type which-both add messages, and then the messages get combined to provide the-final message list attribute value for that node. You want this so-that e.g. that different sorts of checks appear in different-sections. Workaround is instead of having each check in it's own-section, to combine them all into one SEM. Can work around this-without too much difficulty by using local attributes. Not sure if-something more clever would be an improvement.--Problem 2: no shorthand to combine what the default rule for messages-would be and then add a bit extra - so if you want all the children-messages, plus possibly an extra message or two, have to write out the-default rule in full explicitly. Can get round this by writing out-loads of code, which is error prone. Don't know if there is a better way--================================================================================--= inloop testing--inloop - use to check continue, exit, and other commands that can only-appear inside loops (for, while, loop)--the only nodes that really need this attribute are the ones which can-contain statements--The inloop test is the only thing which uses the messages atm. It-shouldn't, at some point inloop testing will become part of the type-checking.--This is just some example code, will probably do something a lot more-heavy weight like symbolic interpretation - want to do all sorts of-loop, return, nullability, etc. analysis.---}-{--ATTR AllNodes Root ExpressionRoot [||messages USE {++} {[]} : {[Message]}]--ATTR AllNodes- [ inLoop: Bool||]--SEM Root- | Root statements.inLoop = False--SEM ExpressionRoot- | ExpressionRoot expr.inLoop = False---- set the inloop stuff which nests, it's reset inside a create--- function statement, in case you have a create function inside a--- loop, seems unlikely you'd do this though--SEM Statement- | ForSelectStatement ForIntegerStatement WhileStatement sts.inLoop = True- | CreateFunction body.inLoop = False---- now we can check when we hit a continue statement if it is in the--- right context-SEM Statement- | ContinueStatement lhs.messages = if not @lhs.inLoop- then [Error ContinueNotInLoop]- else []--}-{--================================================================================--= notes and todo---containment guide for select expressions:-combineselect 2 selects-insert ?select-createtableas 1 select-createview 1 select-return query 1 select-forselect 1 select-select->subselect select-expression->exists select- scalarsubquery select- inselect select--containment guide for statements:-forselect [statement]-forinteger [statement]-while [statement]-casestatement [[statement]]-if [[statement]]-createfunction->fnbody [Statement]--TODO--some non type-check checks:-check plpgsql only in plpgsql function-orderby in top level select only-copy followed immediately by copydata iff stdin, copydata only follows- copy from stdin-count args to raise, etc., check same number as placeholders in string-no natural with onexpr in joins-typename -> setof (& fix parsing), what else like this?-expressions: positionalarg in function, window function only in select- list top level--review all ast checks, and see if we can also catch them during-parsing (e.g. typeName parses setof, but this should only be allowed-for a function return, and we can make this a parse error when parsing-from source code rather than checking a generated ast. This needs-judgement to say whether a parse error is better than a check error, I-think for setof it is, but e.g. for a continue not in a loop (which-could be caught during parsing) works better as a check error, looking-at the error message the user will get. This might be wrong, haven't-thought too carefully about it yet).---TODO: canonicalize ast process, as part of type checking produces a-canonicalized ast which:-all implicit casts appear explicitly in the ast (maybe distinguished-from explicit casts?)-all names fully qualified-all types use canonical names-literal values and selectors in one form (use row style?)-nodes are tagged with types-what else?--Canonical form only defined for type consistent asts.--This canonical form should pretty print and parse back to the same-form, and type check correctly.---================================================================================--type inferencing--some random ideas about using type inferencing--1) need to be able to gather the constraints: introduce a variable- name for each node that has a type collect together all the- equations that relate these variables-2) need to be able to unify these to get types or errors-3) need to rebuild the tree containing the results of this process in- the annotations, either types or errors--possible issues, don't know how these will affect the process:--literal strings in pg have the type unknown as well as possibly a real-type determined by inference-the implicit type casting e.g. for function resolution is pretty wacky-combinining these, function call resolution apparently distinguishes-between arguments which are unknown and then resolve to being text,-and arguments which are already known to be text, e.g.---}
− Database/HsSqlPpp/AstInternals/TypeChecking/TypeConversion.lhs
@@ -1,571 +0,0 @@-Copyright 2009 Jake Wheat--This file contains the functions for resolving types and-function/operator resolution. See the pg manual chapter 10:--http://www.postgresql.org/docs/8.4/interactive/typeconv.html--This code is really spaghettified.--findCallMatch - pass in a name and a list of arguments, and it returns-the matching function. (pg manual 10.2,10.3)--resolveResultSetType - pass in a set of types, and it tries to find-the common type they can all be cast to. (pg manual 10.5)--checkAssignmentValid - pass in source type and target type, returns- typelist[] if ok, otherwise error, pg manual 10.4- Value Storage--> {-# OPTIONS_HADDOCK hide #-}--> module Database.HsSqlPpp.AstInternals.TypeChecking.TypeConversion (-> findCallMatch-> ,resolveResultSetType-> ,checkAssignmentValid-> ,compositesCompatible-> ) where--> import Data.Maybe-> import Data.List-> --import Debug.Trace--> import Database.HsSqlPpp.AstInternals.TypeType-> import Database.HsSqlPpp.AstInternals.TypeChecking.ErrorUtils-> import Database.HsSqlPpp.AstInternals.Catalog.CatalogInternal-> import Database.HsSqlPpp.Utils-- > traceIt :: Show a => String -> a -> a- > traceIt s t = trace (s ++ ": " ++ show t) t--= findCallMatch--findCallMatch - partially implements the type conversion rules for-finding an operator or function match given a name and list of-arguments with partial or fully specified types--TODO:, qualifiers-namespaces-function style casts not in catalog-variadic args-default args-domains -> base type-what about aggregates and window functions?--Algo:--cands = all fns with matching names- and same number of args--if exact match on types in this list, use it- (if binary operator being matched, and one arg is typed and one is- unknown, also match an operator by assuming the unknown is the same- as the typed arg)--best match part:--filter cands with args which don't exactly match input args, and input-args cannot be converted by an implicit cast. unknowns count as-matching anything-if one left: use it--filter for preferred types:--for each cand, count each arg at each position which needs conversion,-and the cand type is a preferred type at that position.-if there are cands with count>0, keep only cands with the max count,-if one return it-if there are no cands with count>0, keep them all--check unknowns:-if any input args are unknown, and any cand accepts string at that-position, fix that arg's category as string, otherwise if all cands-accept same category at that position, fix that input args as that-category.-if we still have unknowns, then fail--discard cands which don't match the new input arg/category list--for each categorised input arg, if any cand accepts preferred type at-that position, get rid of cands which don't accept preferred type at-that position--if one left: use-else fail--polymorphic matching:-want to create a set of matches to insert into the cast pairs list-so:--find all matches on name, num args and have polymorphic parameters--for each one, check the polymorphic categories - eliminate fns that-have params in wrong category - array, non array, enum.-work out the base types for the polymorphic args at each spot based on-the args passed - so each arg is unchanged except arrays which have-the array part stripped off--now we have a list of types to match against the polymorphic params,-use resolveResultSetType to see if we can produce a match, if so,-create a new prototype which is the same as the polymorphic function-but with this matching arg swapped in, work out the casts and add it-into cand cast pairs, after exact match has been run.---findCallMatch is a bit of a mess--todos:--rewrite this to try to make it a bit clearer--find some way to draw a data flow diagram of the code easily--add a logging facility so the function can explain what has happened-at each state, so you can provide a detailed explanation e.g. if the-code can't find an operator match to see what it has tried to match-against.--> type ProtArgCast = (FunctionPrototype, [ArgCastFlavour])--> findCallMatch :: Catalog -> String -> [Type] -> Either [TypeError] FunctionPrototype-> findCallMatch cat f inArgs =-> returnIfOnne [-> exactMatch-> ,binOp1UnknownMatch-> ,polymorpicExactMatches-> ,reachable-> ,mostExactMatches-> ,filteredForPreferred-> ,unknownMatchesByCat]-> [NoMatchingOperator f inArgs]-> where-> -- basic lists which roughly mirror algo-> -- get the possibly matching candidates-> initialCandList :: [FunctionPrototype]-> initialCandList = filter (\(_,candArgs,_,_) ->-> length candArgs == length inArgs) $-> map expandVariadic $ catLookupFns cat f->-> expandVariadic fp@(fn,a,r,v) =-> if v-> then case last a of-> ArrayType t -> (fn, na,r,v)-> where na = init a ++ replicate (length inArgs - length a + 1) t-> _ -> fp --should be error-> else fp->-> -- record what casts are needed for each candidate-> castPairs :: [[ArgCastFlavour]]-> castPairs = map (listCastPairs . getFnArgs) initialCandList->-> candCastPairs :: [ProtArgCast]-> candCastPairs = {-traceIt "candCastPairs" $-} zip initialCandList castPairs->-> -- see if we have an exact match-> exactMatch :: [ProtArgCast]-> exactMatch = filterCandCastPairs (all (==ExactMatch)) candCastPairs->-> -- implement the one known, one unknown resolution for binary operators-> binOp1UnknownMatch :: [ProtArgCast]-> binOp1UnknownMatch = getBinOp1UnknownMatch candCastPairs->-> --collect possible polymorphic matches-> polymorphicMatches :: [ProtArgCast]-> polymorphicMatches = filterPolymorphics candCastPairs->-> polymorpicExactMatches :: [ProtArgCast]-> polymorpicExactMatches = filterCandCastPairs (all (==ExactMatch)) polymorphicMatches->-> -- eliminate candidates for which the inargs cannot be casted to-> reachable :: [ProtArgCast]-> reachable = mergePolys (filterCandCastPairs (none (==CannotCast)) candCastPairs)-> polymorphicMatches->-> mostExactMatches :: [ProtArgCast]-> mostExactMatches =-> let inArgsBase = map (replaceWithBase cat) inArgs-> exactCounts :: [Int]-> exactCounts =-> map ((length-> . filter (\(a1,a2) -> a1==replaceWithBase cat a2)-> . zip inArgsBase)-> . (\((_,a,_,_),_) -> a)) reachable-> pairs = zip reachable exactCounts-> maxm = maximum exactCounts-> in case () of-> _ | null reachable -> []-> | maxm > 0 -> map fst $ filter (\(_,b) -> b == maxm) pairs-> | otherwise -> []->-> -- keep the cands with the most casts to preferred types-> preferredTypesCounts = countPreferredTypeCasts reachable-> keepCounts = maximum preferredTypesCounts-> itemCountPairs :: [(ProtArgCast,Int)]-> itemCountPairs = zip reachable preferredTypesCounts-> filteredForPreferred :: [ProtArgCast]-> filteredForPreferred = map fst $ filter (\(_,i) -> i == keepCounts) itemCountPairs->-> -- collect the inArg type categories to do unknown inArg resolution-> argCats :: [Either () String]-> argCats = getCastCategoriesForUnknowns filteredForPreferred-> unknownMatchesByCat :: [ProtArgCast]-> unknownMatchesByCat = getCandCatMatches filteredForPreferred argCats->-> -------------->-> listCastPairs :: [Type] -> [ArgCastFlavour]-> listCastPairs l = listCastPairs' inArgs l-> where-> listCastPairs' :: [Type] -> [Type] -> [ArgCastFlavour]-> listCastPairs' (ia:ias) (ca:cas) =-> (case () of-> _ | ia == ca -> ExactMatch-> | castableFromTo cat ImplicitCastContext ia ca ->-> if forceRight (catPreferredType cat ca)-> then ImplicitToPreferred-> else ImplicitToNonPreferred-> | otherwise -> CannotCast-> ) : listCastPairs' ias cas-> listCastPairs' [] [] = []-> listCastPairs' _ _ = error "internal error: mismatched num args in implicit cast algorithm"->->-> getBinOp1UnknownMatch :: [ProtArgCast] -> [ProtArgCast]-> getBinOp1UnknownMatch cands =-> if not (isOperatorName f &&-> length inArgs == 2 &&-> count (==UnknownType) inArgs == 1)-> then []-> else let newInArgs =-> replicate 2 (if head inArgs == UnknownType-> then inArgs !! 1-> else head inArgs)-> in filter (\((_,a,_,_),_) -> a == newInArgs) cands->-> filterPolymorphics :: [ProtArgCast] -> [ProtArgCast]-> filterPolymorphics cl =-> let ms :: [ProtArgCast]-> ms = filter canMatch polys-> polyTypes :: [Maybe Type]-> polyTypes = map resolvePolyType ms-> polyTypePairs :: [(Maybe Type, ProtArgCast)]-> polyTypePairs = zip polyTypes ms-> keepPolyTypePairs :: [(Type, ProtArgCast)]-> keepPolyTypePairs =-> mapMaybe (\(t,p) -> case t of-> Nothing -> Nothing-> Just t' -> Just (t',p))-> polyTypePairs-> finalRows = map (\(t,p) -> instantiatePolyType p t)-> keepPolyTypePairs-> --create the new cast lists-> cps :: [[ArgCastFlavour]]-> cps = map (listCastPairs . getFnArgs . fst) finalRows-> in zip (map fst finalRows) cps-> where-> polys :: [ProtArgCast]-> polys = filter (\((_,a,_,_),_) -> any (`elem`-> [Pseudo Any-> ,Pseudo AnyArray-> ,Pseudo AnyElement-> ,Pseudo AnyEnum-> ,Pseudo AnyNonArray]) a) cl-> canMatch :: ProtArgCast -> Bool-> canMatch pac =-> let ((_,fnArgs,_,_),_) = pac-> in canMatch' inArgs fnArgs-> where-> canMatch' [] [] = True-> canMatch' (ia:ias) (pa:pas) =-> case pa of-> Pseudo Any -> nextMatch-> Pseudo AnyArray -> isArrayType ia && nextMatch-> Pseudo AnyElement -> nextMatch-> Pseudo AnyEnum -> False-> Pseudo AnyNonArray -> if isArrayType ia-> then False-> else nextMatch-> _ -> True-> where-> nextMatch = canMatch' ias pas-> canMatch' _ _ = error "internal error: mismatched lists in canMatch'"-> resolvePolyType :: ProtArgCast -> Maybe Type-> resolvePolyType ((_,fnArgs,_,_),_) =-> {-trace ("\nresolving " ++ show fnArgs ++ " against " ++ show inArgs ++ "\n") $-}-> let argPairs = zip inArgs fnArgs-> typeList :: [Type]-> typeList = catMaybes $ flip map argPairs-> (\(ia,fa) -> case fa of-> Pseudo Any -> if isArrayType ia-> then eitherToMaybe $ unwrapArray ia-> else Just ia-> Pseudo AnyArray -> eitherToMaybe $ unwrapArray ia-> Pseudo AnyElement -> if isArrayType ia-> then eitherToMaybe $ unwrapArray ia-> else Just ia-> Pseudo AnyEnum -> Nothing-> Pseudo AnyNonArray -> Just ia-> _ -> Nothing)-> in {-trace ("\nresolve types: " ++ show typeList ++ "\n") $-}-> case resolveResultSetType cat typeList of-> Left _ -> Nothing-> Right t -> Just t-> instantiatePolyType :: ProtArgCast -> Type -> ProtArgCast-> instantiatePolyType pac t =-> let ((fn,a,r,v),_) = pac-> instArgs = swapPolys t a-> p1 = (fn, instArgs, swapPoly t r,v)-> in let x = (p1,listCastPairs instArgs)-> in {-trace ("\nfixed:" ++ show x ++ "\n")-} x-> where-> swapPolys :: Type -> [Type] -> [Type]-> swapPolys = map . swapPoly-> swapPoly :: Type -> Type -> Type-> swapPoly pit at =-> case at of-> Pseudo Any -> if isArrayType at-> then ArrayType pit-> else pit-> Pseudo AnyArray -> ArrayType pit-> Pseudo AnyElement -> if isArrayType at-> then ArrayType pit-> else pit-> Pseudo AnyEnum -> pit-> Pseudo AnyNonArray -> pit-> _ -> at-> --merge in the instantiated poly functions, with a twist:-> -- if we already have the exact same set of args in the non poly list-> -- as a poly, then don't include that poly-> mergePolys :: [ProtArgCast] -> [ProtArgCast] -> [ProtArgCast]-> mergePolys orig polys =-> let origArgs = map (\((_,a,_,_),_) -> a) orig-> filteredPolys = filter (\((_,a,_,_),_) -> a `notElem` origArgs) polys-> in orig ++ filteredPolys->-> countPreferredTypeCasts :: [ProtArgCast] -> [Int]-> countPreferredTypeCasts =-> map (\(_,cp) -> count (==ImplicitToPreferred) cp)->-> -- Left () is used for inArgs which aren't unknown,-> -- and for unknowns which we don't have a-> -- unique category-> -- Right s -> s is the single letter category at-> -- that position-> getCastCategoriesForUnknowns :: [ProtArgCast] -> [Either () String]-> getCastCategoriesForUnknowns cands =-> filterArgN 0-> where-> candArgLists :: [[Type]]-> candArgLists = map (\((_,a,_,_), _) -> a) cands-> filterArgN :: Int -> [Either () String]-> filterArgN n =-> if n == length inArgs-> then []-> else let targType = inArgs !! n-> in ((if targType /= UnknownType-> then Left ()-> else getCandsCatAt n) : filterArgN (n+1))-> where-> getCandsCatAt :: Int -> Either () String-> getCandsCatAt n' =-> let typesAtN = map (!!n') candArgLists-> catsAtN = map (forceRight . catTypeCategory cat) typesAtN-> in case () of-> --if any are string choose string-> _ | any (== "S") catsAtN -> Right "S"-> -- if all are same cat choose that-> | all (== head catsAtN) catsAtN -> Right $ head catsAtN-> -- otherwise no match, this will be-> -- picked up as complete failure to match-> -- later on-> | otherwise -> Left ()->-> getCandCatMatches :: [ProtArgCast] -> [Either () String] -> [ProtArgCast]-> getCandCatMatches candsA cats = getMatches candsA 0-> where-> getMatches :: [ProtArgCast] -> Int -> [ProtArgCast]-> getMatches cands n =-> case () of-> _ | n == length inArgs -> cands-> | (inArgs !! n) /= UnknownType -> getMatches cands (n + 1)-> | otherwise ->-> let catMatches :: [ProtArgCast]-> catMatches = filter (\c -> Right (getCatForArgN n c) ==-> (cats !! n)) cands-> prefMatches :: [ProtArgCast]-> prefMatches = filter (forceRight . catPreferredType cat .-> getTypeForArgN n) catMatches-> keepMatches :: [ProtArgCast]-> keepMatches = if length prefMatches > 0-> then prefMatches-> else catMatches-> in getMatches keepMatches (n + 1)-> getTypeForArgN :: Int -> ProtArgCast -> Type-> getTypeForArgN n ((_,a,_,_),_) = a !! n-> getCatForArgN :: Int -> ProtArgCast -> String-> getCatForArgN n = forceRight . catTypeCategory cat . getTypeForArgN n->-> -- utils-> -- filter a candidate/cast flavours pair by a predicate on each-> -- individual cast flavour-> filterCandCastPairs :: ([ArgCastFlavour] -> Bool)-> -> [ProtArgCast]-> -> [ProtArgCast]-> filterCandCastPairs predi = filter (\(_,cp) -> predi cp)->-> getFnArgs :: FunctionPrototype -> [Type]-> getFnArgs (_,a,_,_) = a-> returnIfOnne [] e = Left e-> returnIfOnne (l:ls) e = if length l == 1-> then Right $ getHeadFn l-> else returnIfOnne ls e->-> getHeadFn :: [ProtArgCast] -> FunctionPrototype-> getHeadFn l = let ((hdFn, _):_) = l-> in hdFn-> none p = not . any p-> count p = length . filter p->-> data ArgCastFlavour = ExactMatch-> | CannotCast-> | ImplicitToPreferred-> | ImplicitToNonPreferred-> deriving (Eq,Show)->--resolveResultSetType --partially implement the typing of results sets where the types aren't-all the same and not unknown-used in union,except,intersect columns, case, array ctor, values, greatest and least--algo:-if all inputs are same and not unknown -> that type-replace domains with base types-if all inputs are unknown then text-if the non unknown types aren't all in same category then fail-choose first input type that is a preferred type if there is one-choose last non unknown type that has implicit casts from all preceding inputs-check all can convert to selected type else fail--code is not as much of a mess as findCallMatch--> resolveResultSetType :: Catalog -> [Type] -> Either [TypeError] Type-> resolveResultSetType cat inArgs =-> dependsOnRTpe inArgs $ do-> errorWhen (null inArgs) [TypelessEmptyArray]-> returnWhen allSameType (head inArgs) $ do-> returnWhen allSameBaseType (head inArgsBase) $ do-> --returnWhen allUnknown (UnknownType) $ do-> errorWhen (not allSameCat) [IncompatibleTypeSet inArgs]-> returnWhen (isJust targetType &&-> allConvertibleToFrom (fromJust targetType) inArgs)-> (fromJust targetType) $ do-> Left [IncompatibleTypeSet inArgs]-> where-> allSameType = all (== head inArgs) inArgs -- &&-> --head inArgs /= UnknownType-> allSameBaseType = all (== head inArgsBase) inArgsBase &&-> head inArgsBase /= UnknownType-> inArgsBase = map (replaceWithBase cat) inArgs-> --allUnknown = all (==UnknownType) inArgsBase-> allSameCat = let firstCat = catTypeCategory cat (head knownTypes)-> in all (\t -> catTypeCategory cat t == firstCat)-> knownTypes-> targetType = case catMaybes [firstPreferred, lastAllConvertibleTo] of-> [] -> Nothing-> (x:_) -> Just x-> firstPreferred = find (forceRight . catPreferredType cat) knownTypes-> lastAllConvertibleTo = firstAllConvertibleTo (reverse knownTypes)-> firstAllConvertibleTo (x:xs) = if allConvertibleToFrom x xs-> then Just x-> else firstAllConvertibleTo xs-> firstAllConvertibleTo [] = Nothing-> knownTypes = filter (/=UnknownType) inArgsBase-> allConvertibleToFrom = all . flip (castableFromTo cat ImplicitCastContext)--todo:-cast empty array, where else can an empty array work?--================================================================================--= checkAssignmentValue--> checkAssignmentValid :: Catalog -> Type -> Type -> Either [TypeError] ()-> checkAssignmentValid cat from to =-> if castableFromTo cat AssignmentCastContext from to-> then Right ()-> else Left [IncompatibleTypes to from]--> compositesCompatible :: Catalog -> Type -> Type -> Bool-> compositesCompatible cat =-> castableFromTo cat ImplicitCastContext--================================================================================--= castable function--wrapper around the catalog to add a bunch of extra valid casts--> castableFromTo :: Catalog -> CastContext -> Type -> Type -> Bool-> castableFromTo cat cc from to =-> {-trace ("check cast " ++ show from ++ "->" ++ show to) $-}-> -- put this here to avoid having to write it everywhere else-> from == to-> -- unknown can be implicitly cast to anything (is this completely true?)-> || from == UnknownType-> --hack?-> || to == UnknownType-> -- check base types of domains-> || ((isDomainType from || isDomainType to)-> && castableFromTo cat cc (replaceWithBase cat from)-> (replaceWithBase cat to))-> -- check the casts listed in the catalog-> || forceRight (catCast cat cc from to)-> -- implicitcast => assignment cast-> || (cc == AssignmentCastContext-> && forceRight (catCast cat ImplicitCastContext from to))-> -- can assign composite to record-> || (cc == AssignmentCastContext-> && isCompOrSetoOfComp from-> && case to of-> PgRecord _ -> True-> _ -> False)-> -- check unboxing: wrapped single attribute-> || recurseTransFrom (unboxedSingleType from)-> || recurseTransTo (unboxedSingleType to)-> -- check unboxing: wrapped composite-> || recurseTransFrom (unboxedSetOfType from)-> || recurseTransTo (unboxedSetOfType to)-> -- check composites compatible by comparing attribute types-> || case (getCompositeTypes from-> ,getCompositeTypes to) of-> -- zip almost does the right thing here, needs a bit of tweaking-> (Just ft, Just tt) | length ft == length tt -> all (uncurry $ castableFromTo cat cc) $ zip ft tt-> _ -> False-> where--> getCompositeTypes (NamedCompositeType n) =-> Just $ map snd $ fromRight [] $ catCompositePublicAttrs cat [] n-> getCompositeTypes (CompositeType t) = Just $ map snd t-> getCompositeTypes (AnonymousRecordType t) = Just t-> getCompositeTypes (PgRecord Nothing) = Nothing-> getCompositeTypes (PgRecord (Just t)) = getCompositeTypes t-> getCompositeTypes _ = Nothing--> isCompOrSetoOfComp (SetOfType c) = isCompositeType c-> isCompOrSetoOfComp c = isCompositeType c--> unboxedSingleType (SetOfType (CompositeType [(_,t)])) = Just t-> unboxedSingleType (PgRecord (Just t)) = unboxedSingleType t-> unboxedSingleType _ = Nothing--> unboxedSetOfType (SetOfType a) = Just a-> unboxedSetOfType (PgRecord (Just t)) = unboxedSetOfType t-> unboxedSetOfType _ = Nothing--> recurseTransFrom = maybe False (flip (castableFromTo cat cc) to)-> recurseTransTo = maybe False (castableFromTo cat cc from)--> replaceWithBase :: Catalog -> Type -> Type-> replaceWithBase cat t@(DomainType _) = forceRight $ catDomainBaseType cat t-> replaceWithBase _ t = t
− Database/HsSqlPpp/AstInternals/TypeType.lhs
@@ -1,385 +0,0 @@-Copyright 2009 Jake Wheat--This file contains the data type Type. It is kept separate so we can-compile the types and function information from the database-separately to AstInternal.ag.--Types overview:--Regular types: scalarType, arrayType, composite type, domaintype-we can use these anywhere.--semi first class types: row, unknownstringlit (called unknown in pg) --these can be used in some places, but not others, in particular an-expression can have this type or select can have a row with these-type, but a view can't have a column with this type (so a select can-be valid on it's own but not as a view. Not sure if Row types can be-variables, unknownstringlit definitely can't. (Update, seems a view-can have a column with type unknown.)--pseudo types - mirror pg pseudo types-Internal, LanguageHandler, Opaque probably won't ever be properly supported-Not sure exactly what Any is, can't use it in functions like the other any types?- - update: seems that Any is like AnyElement, but multiple Anys don't- have to have the same type.-AnyElement, AnyArray, AnyEnum, AnyNonArray - used to implement polymorphic functions,- can only be used in these functions as params, return type (and local vars?).-Cstring - treated as variant of text?-record -dynamically typed, depends where it is used, i think is used-for type inference in function return types (so you don't have to-write the correct type, the compiler fills it in), and as a dynamically-typed variable in functions, where it can take any composite typed-value.-void is used for functions which return nothing-trigger is a tag to say a function is used in triggers, used as a-return type only-typecheckfailed is used to represent the type of anything which the code-is currently unable to type check, this usage should disappear at some-point, and then it will only represent code which doesn't type check-because of a mistake.--The Type type identifies the type of a node, but doesn't necessarily-describe the type.--Typing relational valued expressions:-use SetOfType combined with composite type for now, see if it works-out. If not, will have to add another type.--> {-# OPTIONS_HADDOCK hide #-}--> {-# LANGUAGE FlexibleInstances,DeriveDataTypeable #-}---> module Database.HsSqlPpp.AstInternals.TypeType where--> import Control.Monad.Error--> import Data.Generics-> import Data.Generics.PlateData-- > import Data.Binary--> data Type = ScalarType String-> | ArrayType Type-> | SetOfType Type-> --three variations, choose better name for rowctor-> --refer to composite type in catalog-> | NamedCompositeType String-> --refer to composite type either in catalog or one generated on fly-> | CompositeType [(String,Type)]-> --refer to anonymous composite type: the fields have no names-> --these three types are equality and assign compatible if the fields-> --are ignoring the names, so the fields have to be in the same order.-> | AnonymousRecordType [Type] -- was rowctor-> | PgRecord (Maybe Type) -- can only hold namedcomposite, composite or anonymousrecord-> | DomainType String-> | EnumType String-> | Pseudo PseudoType-> | TypeCheckFailed -- represents something which the type checker-> -- doesn't know how to type check-> -- or it cannot work the type out because of errors-> | UnknownType -- represents a string literal-> -- token whose type isn't yet-> -- determined-> deriving (Eq,Show,Ord,Typeable,Data)--> data PseudoType = Any-> | AnyArray-> | AnyElement-> | AnyEnum-> | AnyNonArray-> | Cstring-> | Record-> | Trigger-> | Void-> | Internal-> | LanguageHandler-> | Opaque-> deriving (Eq,Show,Ord,Typeable,Data)--this list will need reviewing, probably refactor to a completely-different set of infos, also will want to add more information to-these, and to provide a way of converting into a user friendly-string. It is intended for this code to produce highly useful errors-later on down the line.--> -- mostly expected,got-> data TypeError = WrongTypes Type [Type]-> | UnknownTypeError Type-> | UnknownTypeName String-> | NoMatchingOperator String [Type]-> | TypelessEmptyArray-> | IncompatibleTypeSet [Type]-> | IncompatibleTypes Type Type-> | ValuesListsMustBeSameLength-> | NoRowsGivenForValues-> | UnrecognisedIdentifier String-> | UnrecognisedRelation String-> | UnrecognisedCorrelationName String-> | AmbiguousIdentifier String-> | ContextError String-> | MissingJoinAttribute-> | ExpressionMustBeBool-> | WrongNumberOfColumns-> | ExpectedDomainType Type-> | DomainDefNotFound Type-> | BadCatalogUpdate String-> | TypeAlreadyExists Type-> | AnyAllError String-> | InternalError String-> | FromToTypesNotSame Type Type-> --shoved in to humour the Either Monad-> | MiscError String-> deriving (Eq,Show,Ord,Typeable,Data)--> instance Error ([TypeError]) where-> noMsg = [MiscError "Unknown error"]-> strMsg str = [MiscError str]--=== canonical type name support--Introduce some aliases to protect client code if/when the ast-canonical names are changed:--> typeSmallInt,typeBigInt,typeInt,typeNumeric,typeFloat4,-> typeFloat8,typeVarChar,typeChar,typeBool :: Type-> typeSmallInt = ScalarType "int2"-> typeBigInt = ScalarType "int8"-> typeInt = ScalarType "int4"-> typeNumeric = ScalarType "numeric"-> typeFloat4 = ScalarType "float4"-> typeFloat8 = ScalarType "float8"-> typeVarChar = ScalarType "varchar"-> typeChar = ScalarType "char"-> typeBool = ScalarType "bool"--this converts the name of a type to its canonical name:-try to follow the names that pg uses in a dump--> canonicalizeTypeName :: String -> String-> canonicalizeTypeName s =-> case () of-> _ | s `elem` smallIntNames -> "int2"-> | s `elem` intNames -> "int4"-> | s `elem` bigIntNames -> "int8"-> | s `elem` numericNames -> "numeric"-> | s `elem` float4Names -> "float4"-> | s `elem` float8Names -> "float8"-> | s `elem` varcharNames -> "varchar"-> | s `elem` charNames -> "char"-> | s `elem` boolNames -> "bool"-> | otherwise -> s-> where-> smallIntNames = ["int2", "smallint"]-> intNames = ["int4", "integer", "int", "serial"]-> bigIntNames = ["int8", "bigint"]-> numericNames = ["numeric", "decimal"]-> float4Names = ["real", "float4"]-> float8Names = ["double precision", "float"]-> varcharNames = ["character varying", "varchar"]-> charNames = ["character", "char"]-> boolNames = ["boolean", "bool"]--> canonicalizeTypes :: Data a => a -> a-> canonicalizeTypes =-> transformBi $ \x ->-> case x of-> ScalarType s -> ScalarType $ canonicalizeTypeName s-> x1 -> x1--random notes on pg types:--== domains:-the point of domains is you can't put constraints on types, but you-can wrap a type up in a domain and put a constraint on it there.--== literals/selectors--source strings are parsed as unknown type: they can be implicitly cast-to almost any type in the right context.--rows ctors can also be implicitly cast to any composite type matching-the elements (now sure how exactly are they matched? - number of-elements, type compatibility of elements, just by context?).--string literals are not checked for valid syntax currently, but this-will probably change so we can type check string literals statically.-Postgres defers all checking to runtime, because it has to cope with-custom data types. This code will allow adding a grammar checker for-each type so you can optionally check the string lits statically.--== notes on type checking types--=== basic type checking-Currently can lookup type names against a default template1 list of-types, or against the current list in a database (which is read before-processing and sql code).--todo: collect type names from current source file to check against-A lot of the infrastructure to do this is already in place. We also-need to do this for all other definitions, etc.--=== Type aliases--Some types in postgresql have multiple names. I think this is-hardcoded in the pg parser.--For the canonical name in this code, we use the name given in the-postgresql pg_type catalog relvar.--TODO: Change the ast canonical names: where there is a choice, prefer-the sql standard name, where there are multiple sql standard names,-choose the most concise or common one, so the ast will use different-canonical names to postgresql.--planned ast canonical names:-numbers:-int2, int4/integer, int8 -> smallint, int, bigint-numeric, decimal -> numeric-float(1) to float(24), real -> float(24)-float, float(25) to float(53), double precision -> float-serial, serial4 -> int-bigserial, serial8 -> bigint-character varying(n), varchar(n)-> varchar(n)-character(n), char(n) -> char(n)--TODO:--what about PrecTypeName? - need to fix the ast and parser (found out-these are called type modifiers in pg)--also, what can setof be applied to - don't know if it can apply to an-array or setof type--array types have to match an exact array type in the catalog, so we-can't create an arbitrary array of any type. Not sure if this is-handled quite correctly in this code.--================================================================================--utilities for working with Types--These may indicate that the haskell type system isn't being used very well.--> isArrayType :: Type -> Bool-> isArrayType (ArrayType _) = True-> isArrayType _ = False--> isDomainType :: Type -> Bool-> isDomainType (DomainType _) = True-> isDomainType _ = False---> isCompositeType :: Type -> Bool-> isCompositeType (CompositeType _) = True-> isCompositeType (NamedCompositeType _) = True-> isCompositeType (AnonymousRecordType _) = True-> isCompositeType (PgRecord _) = True-> isCompositeType _ = False--> isCompositeOrSetOfCompositeType :: Type -> Bool-> isCompositeOrSetOfCompositeType (SetOfType a) = isCompositeType a-> isCompositeOrSetOfCompositeType a = isCompositeType a--> unwrapArray :: Type -> Either [TypeError] Type-> unwrapArray (ArrayType t) = Right t-> unwrapArray x = Left [InternalError $ "can't get types from non array " ++ show x]--> unwrapSetOfWhenComposite :: Type -> Either [TypeError] Type-> unwrapSetOfWhenComposite (SetOfType a@(CompositeType _)) = Right a-> unwrapSetOfWhenComposite x = Left [InternalError $ "tried to unwrapSetOfWhenComposite on " ++ show x]--> unwrapSetOfComposite :: Type -> Either [TypeError] [(String,Type)]-> unwrapSetOfComposite (SetOfType (CompositeType a)) = Right a-> unwrapSetOfComposite x = Left [InternalError $ "tried to unwrapSetOfComposite on " ++ show x]---> unwrapSetOf :: Type -> Either [TypeError] Type-> unwrapSetOf (SetOfType a) = Right a-> unwrapSetOf x = Left [InternalError $ "tried to unwrapSetOf on " ++ show x]--> unwrapComposite :: Type -> Either [TypeError] [(String,Type)]-> unwrapComposite (CompositeType a) = Right a-> unwrapComposite x = Left [InternalError $ "cannot unwrapComposite on " ++ show x]--> consComposite :: (String,Type) -> Type -> Either [TypeError] Type-> consComposite l (CompositeType a) = Right $ CompositeType (l:a)-> consComposite a b = Left [InternalError $ "called consComposite on " ++ show (a,b)]--> unwrapRowCtor :: Type -> Either [TypeError] [Type]-> unwrapRowCtor (AnonymousRecordType a) = Right a-> unwrapRowCtor x = Left [InternalError $ "cannot unwrapRowCtor on " ++ show x]--================================================================================--new plan for types:--The type annotations attached to nodes will be either typecheckfailed 'type'-this will allow chaining type check failed more robustly. Type errors don't change.--the sql type type will be changed so we can track the different-contexts where different sql types can be used, split to use different-sets of types so we can use the haskell type system to enforce these-contexts.--rename type to sqltype, too confusing otherwise-new set of sqltypes: (these aren't in one haskell type anymore)-scalar type - corresponds to sqltypes in pg which aren't one of the- other types (no easy way to define this)-array type-setof type : can be applied to scalar, domain, ... but not all types-composite types are changed:-namedcomposite string-composite [(string,type)] -> what types can appear in the attribute list?-anonymousrecord [type] -> what types can appear here? -> this-represents a row expression type, which can be returned in select-expressions (but not as a column in a view), and is used in other places-domaintype : what types are allowable as the base type?-pseudo types: these are used for arguments and return values for function prototypes only-any*, record - just means pg infers the return type which will be a composite type (namedcomposite, composite or anonymousrecord), trigger: just a tag, void: just a tag, any*: polymorphic functions, ignore cstring, internal, language handler and opaque.-issue: a variable declaration can be a polymorphic type in a polymorphic function, but we can't use the other pseudo types so need to split these-a variable declared as type record IS NOT the same thing as the pseudo record type, I've finally worked out.-so our plpgsqlrecordtype is plpgsqlrecordtype (Nothing|one of the three composite types)--typechecking polymorphic functions: will have to relax the type-checking to some degree. want to check against each usage of the-polymorphic function in the source, so substitute in the actual types-and check the function.--contexts:-function prototypes: args and return type-function calls: args and return-variable declaration in plpgsql-attribute in a select expression-attribute in a view (less permissive than a select expression), also create table as?-attribute in a table, type (is this the same list as for composite and anonymous records? - can nest anonymous records)-base type for domain-cast expression-insert: targetatts are same set of types as attributes in a table-update: targets can be attr types or anonymous records of attr types for rowset style assign (x,y) = selectexp-assignment statement: type on left same set as type in a for, types in select into, etc?-return statement-return query statement-expressions in a raise statement-expressions in execute, anything else?-types used inside select expression checking:- selectlist, trefs, groupby, orderby, limit, offset, where, having-expressions:-what can an identifiers type be?-what can the type of an Expression node be?- scalar: integerlit,floatlit- stringlit: what can an unknown resolve to (not quite everything)- booleanlit: scalar- nulllit: same as stringlit?- positionalarg: any type that a function arg can have- cast: any type you can cast to- identifier: ?- case, casesimple: any type in the rhs expressions, what are these?- exists: scalar- funcall: any type a function return type can have- inpredicate: scalar- windowfn: ?- liftoperator: booleans only?--problem: can't get types using gettypeannotation function and support-different valid combinations of types
− Database/HsSqlPpp/Dbms/DBAccess.lhs
@@ -1,59 +0,0 @@-Copyright 2009 Jake Wheat--This file contains a few (almost pointlessly) lightweight wrappers-around hdbc for running commands and queries.--> {-# OPTIONS_HADDOCK hide #-}--> module Database.HsSqlPpp.Dbms.DBAccess (runSqlCommand-> ,withConn-> ,selectValue-> ,catchSql-> ,seErrorMsg-> ,selectRelation) where--> import qualified Database.HDBC.PostgreSQL as Pg-> import Database.HDBC-> import Control.Monad-> import Control.Exception--> runSqlCommand :: (IConnection conn) =>-> conn -> String -> IO ()-> runSqlCommand conn query = do-> _ <- run conn query []-> commit conn--> withConn :: String -> (Pg.Connection -> IO c) -> IO c-> withConn cs = bracket (Pg.connectPostgreSQL cs) disconnect--> selectValue :: (IConnection conn) =>-> conn -> String -> IO String-> selectValue conn query = do-> r <- quickQuery' conn query []-> case length r of-> 0 -> error $ "select value on " ++ query ++-> " returned 0 rows, expected 1"-> 1 -> do-> let t = head r-> when (length t /= 1)-> (error $ "select value on " ++ query ++-> " returned " ++ show (length t) ++ " attributes, expected 1.")-> return $ toS $ head t-> _ -> error $ "select value on " ++ query ++-> " returned " ++ show (length r) ++ " tuples, expected 0 or 1."-> where-> toS a = fromSql a :: String--> selectRelation ::(IConnection conn) =>-> conn -> String -> [String] -> IO [[String]]-> selectRelation conn query args = do-> sth <- prepare conn query-> _ <- execute sth $ map sToSql args-> v <- fetchAllRows' sth-> return $ map (map sqlToS) v--> sToSql :: String -> SqlValue-> sToSql s = toSql (s::String)--> sqlToS :: SqlValue -> String-> sqlToS = fromSql
− Database/HsSqlPpp/Dbms/DBAccess2.lhs
@@ -1,184 +0,0 @@-Copyright 2010 Jake Wheat--More refined example wrapper generator, uses template haskell. See the-docs attached to sqlStmt function below--> {-# LANGUAGE TemplateHaskell #-}--> module Database.HsSqlPpp.Dbms.DBAccess2-> (withConn-> ,sqlStmt-> ,IConnection) where--> import Language.Haskell.TH--> import Data.Maybe-> import Control.Applicative-> import Control.Monad.Error-> import Control.Monad-> import Control.Exception--> import Database.HDBC-> import qualified Database.HDBC.PostgreSQL as Pg--> import System.IO.Unsafe-> import Data.IORef--> import Database.HsSqlPpp.Dbms.WrapLib-> import qualified Database.HsSqlPpp.Ast.SqlTypes as Sql-> import Database.HsSqlPpp.Ast.Catalog-> import Database.HsSqlPpp.Ast.TypeChecker-> import Database.HsSqlPpp.Parsing.Parser-> import Database.HsSqlPpp.Ast.Annotation-> import Database.HsSqlPpp.Utils--> -- | template haskell fn to roughly do typesafe database access, pretty experimental atm-> ---> -- sketch is:-> ---> -- > $(sqlStmt connStr sqlStr)-> -- >-> -- > -- is transformed into-> -- >-> -- > \conn a_0 a_0 ... ->-> -- > selectRelation conn sqlStr [toSql (a_0::Ti0)-> -- > ,toSql (a_1::Ti1), ... ] >>=-> -- > return . map (\ [r_0, r_1, ...] ->-> -- > (fromSql r_0::To0-> -- > ,fromSql r_1::To1-> -- > ,...)-> ---> -- example usage:-> ---> -- > pieces_at_pos = $(sqlStmt connStr "select * from pieces where x = ? and y = ?;")-> ---> -- will come close enough to inferring the type:-> ---> -- > pieces_at_pos :: IConnection conn =>-> -- > conn-> -- > -> Maybe Int-> -- > -> Maybe Int-> -- > -> IO [(Maybe String, Maybe String, Maybe Int, Maybe Int, Maybe Int)]-> ---> -- (as well as producing a working function which accesses a database)-> ---> sqlStmt :: String -> String -> Q Exp-> sqlStmt dbName sqlStr = do-> (StatementHaskellType inA outA) <- liftStType-> let cnName = mkName "cn"-> argNames <- getNNewNames "a" $ length inA-> lamE (map varP (cnName : argNames))-> [| selectRelation $(varE cnName) sqlStr-> $(ListE <$> zipWithM toSqlIt argNames inA) >>=-> return . map $(mapTupleFromSql $ map snd outA)|]->-> where-> liftStType :: Q StatementHaskellType-> liftStType = runIO stType >>= (either (error . show) toH)->-> stType :: IO (Either String StatementType)-> stType = runErrorT $ do-> cat <- getCat-> tsl (getStatementType cat sqlStr)->-> getCat :: ErrorT String IO Catalog-> getCat = do-> -- bad code to avoid reading the catalog multiple times-> c1 <- liftIO $ readIORef globalCachedCatalog-> case c1 of-> Just c -> return c-> Nothing -> do-> c <- liftIO (readCatalogFromDatabase dbName) >>=-> (tsl . updateCatalog defaultCatalog)-> liftIO $ writeIORef globalCachedCatalog (Just c)-> return c->-> -- lambda which does [SqlValue] -> (T1, T2, ...)-> mapTupleFromSql :: [Type] -> Q Exp-> mapTupleFromSql outT = do-> retNames <- getNNewNames "r" $ length outT-> lamE [listP (map varP retNames)]-> (tupE $ zipWith fromSqlIt retNames outT)->-> toSqlIt :: Name -> Type -> Q Exp-> toSqlIt n t = [| toSql $(castName n t)|]->-> fromSqlIt :: Name -> Type -> Q Exp-> fromSqlIt n t = do-> n1 <- [| fromSql $(varE n) |]-> cast n1 t->-> cast :: Exp -> Type -> Q Exp-> cast e = return . SigE e->-> castName :: Name -> Type -> Q Exp-> castName = cast . VarE->-> getNNewNames :: String -> Int -> Q [Name]-> getNNewNames i n = forM [1..n] $ const $ newName i--================================================================================--> -- | Simple wrapper so that all client code needs to do is import this file-> -- and use withConn and sqlStmt without importing HDBC, etc.--> withConn :: String -> (Pg.Connection -> IO c) -> IO c-> withConn cs = bracket (Pg.connectPostgreSQL cs) disconnect--================================================================================--evil hack to avoid reading the catalog from the database for each call-to sqlStmt. Atm this means that you can only read the catalog from one-database at compile time, but this should be an easy fix if too-limiting. TODO: make this change, in case the catalog ends up being-cached in ghci meaning if you change the database whilst developing in-emacs it will go wrong--> globalCachedCatalog :: IORef (Maybe Catalog)-> {-# NOINLINE globalCachedCatalog #-}-> globalCachedCatalog = unsafePerformIO (newIORef Nothing)--================================================================================--sql parsing and typechecking--get the input and output types for a parameterized sql statement:--> getStatementType :: Catalog -> String -> Either String StatementType-> getStatementType cat sql = do-> ast <- tsl $ parseSql "" sql-> let (_,aast) = typeCheck cat ast-> let a = getTopLevelInfos aast-> return $ fromJust $ head a--convert sql statement type to equivalent with sql types replaced with-haskell equivalents - HDBC knows how to convert the actual values using-toSql and fromSql as long as we add in the appropriate casts--> data StatementHaskellType = StatementHaskellType [Type] [(String,Type)]--> toH :: StatementType -> Q StatementHaskellType-> toH (StatementType i o) = do-> ih <- mapM sqlTypeToHaskell i-> oht <- mapM (sqlTypeToHaskell . snd) o-> return $ StatementHaskellType ih $ zip (map fst o) oht-> where-> sqlTypeToHaskell :: Sql.Type -> TypeQ-> sqlTypeToHaskell t =-> case t of-> Sql.ScalarType "text" -> [t| Maybe String |]-> Sql.ScalarType "int4" -> [t| Maybe Int |]-> Sql.ScalarType "int8" -> [t| Maybe Int |]-> Sql.ScalarType "bool" -> [t| Maybe Bool |]-> Sql.DomainType _ -> [t| Maybe String |]-> x -> error $ show x--================================================================================--TODO:-get error reporting at compile time working nicely:-can't connect to database-problem getting catalog -> report connection string used and source- position-problem getting statement type: parse and type check issues, report- source position
− Database/HsSqlPpp/Dbms/DBAccess3.lhs
@@ -1,284 +0,0 @@-Copyright 2010 Jake Wheat--Do type safe database access using template haskell and-hlists. Limitation is that you have to edit this file to add the field-definitions and possibly exports. Suggested use is to copy this file-into your own project and edit it there.--> {-# LANGUAGE TemplateHaskell,EmptyDataDecls,DeriveDataTypeable #-}--> module Database.HsSqlPpp.Dbms.DBAccess3-> (withConn-> ,sqlStmt-> ,IConnection--Export the field proxies for your project here. If you want to write-down type signatures of the result hlists then export the proxy types-here also, exporting them isn't neccessarily neccessary otherwise.--> ,ptype,allegiance,tag,x,y-> ,get_turn_number,current_wizard,colour,sprite-> ,Ptype,Allegiance,Tag,X,Y-> ,Get_turn_number,Current_wizard,Colour,Sprite---> ) where--> import Language.Haskell.TH--> import Data.Maybe-> import Control.Applicative-> import Control.Monad.Error-> import Control.Exception--> import Database.HDBC-> import qualified Database.HDBC.PostgreSQL as Pg--> import Data.HList-> import Data.HList.Label4 ()-> import Data.HList.TypeEqGeneric1 ()-> import Data.HList.TypeCastGeneric1 ()-> import Database.HsSqlPpp.Dbms.MakeLabels--> import System.IO.Unsafe-> --import Data.IORef--> import Database.HsSqlPpp.Dbms.WrapLib-> import qualified Database.HsSqlPpp.Ast.SqlTypes as Sql-> import Database.HsSqlPpp.Ast.Catalog-> import Database.HsSqlPpp.Ast.TypeChecker-> import Database.HsSqlPpp.Parsing.Parser-> import Database.HsSqlPpp.Ast.Annotation-> import Database.HsSqlPpp.Utils---================================================================================--If you are using this file, this is the bit where you add your own-fields.--> $(makeLabels ["ptype"-> ,"allegiance"-> ,"tag"-> ,"x"-> ,"y"-> ,"get_turn_number"-> ,"current_wizard"-> ,"colour"-> ,"sprite"])--================================================================================--> -- | template haskell fn to roughly do typesafe database access with-> -- hlists, pretty experimental atm-> ---> -- sketch is:-> ---> -- >-> -- > $(sqlStmt connStr sqlStr)-> -- >-> -- > -- is transformed into-> -- >-> -- >-> -- > \conn a_0 a_1 ... ->-> -- > selectRelation conn sqlStr [toSql (a_0::Ti0)-> -- > ,toSql (a_1::Ti1), ... ] >>=-> -- > return . map (\ [r_0, r_1, ...] ->-> -- > f1 .=. fromSql (r_0::To0) .*.-> -- > f2 .=. fromSql (r_1::To1) .*.-> -- > ... .*.-> -- > emptyRecord)-> -- >-> ---> -- where the names f1, f2 are the attribute names from the database,-> -- the types Ti[n] are the types of the placeholders in the sql-> -- string, and the types To[n] are the types of the attributes in-> -- the returned relation. To work around a limitation in the-> -- implementation, these names must be in scope in this file, so to-> -- use this in your own projects you need to copy the source and-> -- then add the field defitions in as needed.-> ---> -- example usage:-> ---> -- >-> -- > pieces_at_pos = $(sqlStmt connStr "select * from pieces where x = ? and y = ?;")-> -- >-> ---> -- might (!) infer the type:-> ---> -- >-> -- > pieces_at_pos :: IConnection conn =>-> -- > conn-> -- > -> Maybe Int-> -- > -> Maybe Int-> -- > -> IO [Record (HCons (LVPair (Proxy Ptype)-> -- > (Maybe String))-> -- > (HCons (LVPair (Proxy Allegiance)-> -- > (Maybe String))-> -- > (HCons (LVPair (Proxy Tag)-> -- > (Maybe Int))-> -- > (HCons (LVPair (Proxy X)-> -- > (Maybe Int))-> -- > (HCons (LVPair (Proxy Y)-> -- > (Maybe Int))-> -- > HNil)))))]-> -- >-> ---> -- (as well as producing a working function which accesses a database). Currently, I get-> ---> -- >-> -- > Test3.lhs:16:12:-> -- > Ambiguous type variable `conn' in the constraint:-> -- > `IConnection conn'-> -- > arising from a use of `pieces' at Test3.lhs:16:12-22-> -- > Probable fix: add a type signature that fixes these type variable(s)-> -- >-> ---> -- which can be worked around by adding a type signature like-> ---> -- >-> -- > pieces_at_pos :: IConnection conn =>-> -- > conn-> -- > -> a-> -- > -> b-> -- > -> IO c-> -- >-> ---> -- and then ghc will complain and tell you what a,b,c should be (make-> -- sure you match the number of arguments after conn to the number-> -- of ? placeholders in the sql string).--> sqlStmt :: String -> String -> Q Exp-> sqlStmt dbName sqlStr = do-> (StatementHaskellType inA outA) <- liftStType-> let cnName = mkName "cn"-> argNames <- getNNewNames "a" $ length inA-> lamE (map varP (cnName : argNames))-> [| selectRelation $(varE cnName) sqlStr-> $(ListE <$> zipWithM toSqlIt argNames inA) >>=-> return . map $(mapHlistFromSql outA)|]->-> where-> -- th code gen utils-> mapHlistFromSql :: [(String,Type)] -> Q Exp-> mapHlistFromSql outA = do-> retNames <- getNNewNames "r" $ length outA-> l1 <- mapM (\(a,b,c) -> toHlistField a b c) $ zipWith (\(a,b) c -> (a,b,c)) outA retNames-> lamE [listP (map varP retNames)] $ foldHlist l1->-> toHlistField :: String -> Type -> Name -> Q Exp-> toHlistField f t v = [| $(varE $ mkName f) .=. $(fromSqlIt v t) |]->-> foldHlist :: [Exp] -> Q Exp-> foldHlist (e:e1) = [| $(return e) .*. $(foldHlist e1) |]-> foldHlist [] = [| emptyRecord |]->-> toSqlIt :: Name -> Type -> Q Exp-> toSqlIt n t = [| toSql $(castName n t)|]->-> fromSqlIt :: Name -> Type -> Q Exp-> fromSqlIt n t = do-> n1 <- [| fromSql $(varE n) |]-> casti n1 t->-> casti :: Exp -> Type -> Q Exp-> casti e = return . SigE e->-> castName :: Name -> Type -> Q Exp-> castName = casti . VarE->-> getNNewNames :: String -> Int -> Q [Name]-> getNNewNames i n = replicateM n $ newName i->-> -- statement type stuff-> liftStType :: Q StatementHaskellType-> liftStType = runIO stType >>= either (error . show) toH->-> stType :: IO (Either String StatementType)-> stType = runErrorT $ do-> cat <- getCat-> tsl (getStatementType cat sqlStr)->-> getCat :: ErrorT String IO Catalog-> getCat = do-> -- bad code to avoid reading the catalog multiple times-> c1 <- liftIO $ readIORef globalCachedCatalog-> case c1 of-> Just c -> return c-> Nothing -> do-> c <- liftIO (readCatalogFromDatabase dbName) >>=-> (tsl . updateCatalog defaultCatalog)-> liftIO $ writeIORef globalCachedCatalog (Just c)-> return c->--================================================================================--> -- | Simple wrapper so that all client code needs to do is import this file-> -- and use withConn and sqlStmt without importing HDBC, etc.--> withConn :: String -> (Pg.Connection -> IO c) -> IO c-> withConn cs = bracket (Pg.connectPostgreSQL cs) disconnect--================================================================================--evil hack to avoid reading the catalog from the database for each call-to sqlStmt. Atm this means that you can only read the catalog from one-database at compile time, but this should be an easy fix if too-limiting. TODO: make this change, in case the catalog ends up being-cached in ghci meaning if you change the database whilst developing in-emacs it will go wrong--> globalCachedCatalog :: IORef (Maybe Catalog)-> {-# NOINLINE globalCachedCatalog #-}-> globalCachedCatalog = unsafePerformIO (newIORef Nothing)--================================================================================--sql parsing and typechecking--get the input and output types for a parameterized sql statement:--> getStatementType :: Catalog -> String -> Either String StatementType-> getStatementType cat sql = do-> ast <- tsl $ parseSql "" sql-> let (_,aast) = typeCheck cat ast-> let a = getTopLevelInfos aast-> return $ fromJust $ head a--convert sql statement type to equivalent with sql types replaced with-haskell equivalents - HDBC knows how to convert the actual values using-toSql and fromSql as long as we add in the appropriate casts--> data StatementHaskellType = StatementHaskellType [Type] [(String,Type)]--> toH :: StatementType -> Q StatementHaskellType-> toH (StatementType i o) = do-> ih <- mapM sqlTypeToHaskell i-> oht <- mapM (sqlTypeToHaskell . snd) o-> return $ StatementHaskellType ih $ zip (map fst o) oht-> where-> sqlTypeToHaskell :: Sql.Type -> TypeQ-> sqlTypeToHaskell t =-> case t of-> Sql.ScalarType "text" -> [t| Maybe String |]-> Sql.ScalarType "int4" -> [t| Maybe Int |]-> Sql.ScalarType "int8" -> [t| Maybe Int |]-> Sql.ScalarType "bool" -> [t| Maybe Bool |]-> Sql.DomainType _ -> [t| Maybe String |]-> z -> error $ show z--================================================================================--TODO:-get error reporting at compile time working nicely:-can't connect to database-problem getting catalog -> report connection string used and source- position-problem getting statement type: parse and type check issues, report- source position--turn this file into a toolkit of bits, which can import so can use-without having to copy then edit this file--figure out a better way of handling the proxies
− Database/HsSqlPpp/Dbms/DBUtils.lhs
@@ -1,63 +0,0 @@-Copyright 2010 Jake Wheat--This file contains a few hacked together utility functions for working-with postgres.--> module Database.HsSqlPpp.Dbms.DBUtils-> (readCatalog-> ,loadSqlUsingPsql-> ,loadSqlUsingPsqlFromFile-> ,clearDB-> ,pgDump) where---> import System--> import System.Process.Pipe-> --import Text.Pandoc---> import Database.HsSqlPpp.Ast.Catalog--> import Database.HsSqlPpp.Ast.SqlTypes--> import Database.HsSqlPpp.Dbms.DBAccess--> -- | get the catalog from the database, and return an Catalog value-> readCatalog :: String -> IO (Either [TypeError] Catalog)-> readCatalog dbName =-> (readCatalogFromDatabase dbName) >>=-> return . updateCatalog defaultCatalog--> -- | run psql to load the sql text into a database.-> loadSqlUsingPsql :: String -> String -> IO String-> loadSqlUsingPsql dbName =-> pipeString [("psql", [dbName-> ,"-q"-> ,"--set"-> ,"ON_ERROR_STOP=on"-> ,"--file=-"])]--> -- | run psql to load sql from the filename given into a database.-> loadSqlUsingPsqlFromFile :: String -> FilePath -> IO (Either String String)-> loadSqlUsingPsqlFromFile dbName fn = do-> ex <- system ("psql " ++ dbName ++-> " -q --set ON_ERROR_STOP=on" ++-> " --file=" ++ fn)-> case ex of-> ExitFailure e -> return $ Left $ "psql failed with " ++ show e-> ExitSuccess -> return $ Right ""--> -- | use a dodgy hack to clear the database given-> clearDB :: String -> IO ()-> clearDB db =-> withConn ("dbname=" ++ db) $ \conn ->-> runSqlCommand conn "drop owned by jake cascade;"--> -- | dump the given database to sql source using pg_dump-> pgDump :: String -> IO String-> pgDump db = pipeString [("pg_dump", [db-> ,"--schema-only"-> ,"--no-owner"-> ,"--no-privileges"])] ""-
− Database/HsSqlPpp/Dbms/DatabaseLoader.lhs
@@ -1,217 +0,0 @@-Copyright 2009 Jake Wheat--This module mainly contains the function to take a statement list and-load it into the database.--The loading system works by parsing a sql file then passing the-[Statement] to this module which pretty prints each Statement. (There-is no fundamental reason why it loads each statement one at a time-instead of pretty printing the whole lot, just that the run command-from hdbc only supports one command at a time. This might be a-postgresql limitation.)--The next todo to help this code move along is to use the source-position information in the ast when error (and notice, etc.)-messages come back from the database whilst loading the sql, can try to show the source position from the original file, which will be different to what postgresql reports.--This seems like a whole lot of effort for nothing, but will then allow-using transforming the ast so it no longer directly corresponds to the-source sql, and loading the transformed sql into the database. For-generated code, some thought will be needed on how to link any errors-back to the original source text.--One option for some of the code is to use the original source code-when it hasn't been changed for a given statement, instead of the-pretty printed stuff, don't know how much help this will be.--This code is currently on the backburner, and is a mess.--> {- | Routine load SQL into a database. Should work alright, but if-> you get any errors from PostgreSQL it won't be easy to track them-> down in the original source.-}-> module Database.HsSqlPpp.Dbms.DatabaseLoader-> (-> loadIntoDatabase-> ) where--> import System.Directory-> import Control.Exception-> import Text.Regex.Posix-> import Data.List--> import Database.HsSqlPpp.PrettyPrinter.PrettyPrinter-> import Database.HsSqlPpp.Ast.Ast as Ast-> import Database.HsSqlPpp.Dbms.DBAccess-> import Database.HsSqlPpp.Ast.Annotation--> loadIntoDatabase :: String -- ^ database name-> -> FilePath -- ^ filename to include in error messages-> -- (this file is not accessed)-> -> StatementList -- ^ ast to load into database-> -> IO ()-> loadIntoDatabase dbName fn ast =-> withConn ("dbname=" ++ dbName) $ \conn -> do-> --loadPlpgsqlIntoDatabase conn-> mapM_ (\st ->-> loadStatement conn st-> >> putStr ".") (filterStatements ast)-> where-> loadStatement conn st = case st of-> Skipit -> return ()-> VanillaStatement vs ->-> {-putStrLn (printSql [vs]) >> -}-> handleError fn (getSourcePos vs) vs (runSqlCommand conn-> (printSql [vs]))-> CopyStdin a b -> runCopy conn a b (getSourcePos a)-> getSourcePos st = let a = getAnnotation st-> in sp a-> where-> sp (x:xs) = case x of-> SourcePos s l c -> (s,l,c)-> _ -> sp xs-> sp [] = ("",0,0)-> --hack cos we don't have support in hdbc for copy from stdin-> --(which libpq does support - adding this properly should be a todo)-> --we need the copy from stdin and the copydata to be processed in one go,-> --so filter the list to replace instances of these with a replacement-> --and a dummy statement following. Well dodgy, don't really know-> --how it manages to work correctly.-> filterStatements sts =-> map (\(x,y) ->-> case (x,y) of-> (a@(Copy _ _ _ Stdin), b@(CopyData _ _)) -> (CopyStdin a b)-> (CopyData _ _, _) -> Skipit-> (vs,_) -> VanillaStatement vs)-> statementWithNextStatement-> where-> statementWithNextStatement =-> zip sts (tail sts ++ [NullStatement []])-> runCopy conn a b _ = case (a,b) of-> (Copy _ tb cl Stdin, CopyData _ s) ->-> withTemporaryFile (\tfn -> do-> writeFile tfn s-> tfn1 <- canonicalizePath tfn-> loadStatement conn-> (VanillaStatement (Copy [] tb cl-> (CopyFilename tfn1))))-> _ -> error "internal error: pattern match fail in runCopy in loadIntoDatabase"-> {-loadPlpgsqlIntoDatabase conn = do-> -- first, check plpgsql is in the database-> x <- selectValue conn-> "select count(1) from pg_language where lanname='plpgsql';"-> when (readInt x == 0) $-> runSqlCommand conn "create procedural language plpgsql;"-> readInt x = read x :: Int-}--> data Wrapper = CopyStdin Ast.Statement Ast.Statement-> | Skipit-> | VanillaStatement Ast.Statement-> deriving Show--================================================================================--= Error reporting--The goal is to give a position in the original source when an error-occurs as best as possible.--For now, all statements in the ast correspond 1:1 with statement text-in the source code, so each line,col pair coming from pg should-correspond to onne line,col pair in the original source text.--The lines load in one at a time, so there needs to be a fair bit of-translation to ultimately output the original line and source number.--(For code with no source information, e.g. stuff which is generated-programmatically from scratch, plan is to give a index (the statement-position in the [Statement] arg, and then pretty print this statement-and provide a line and column just for this statement text.--Later on, when working with generated code may need to make guesses as-to which line, and possibly supply multiple references (e.g. for a-template you might want to see the part of the template which is-causing the error, plus the arguments being passed to that template-instantiation call (if nested, you want to see all of them back up to the-top level).--So, for now: want to get the line number and column number from the-error message text--If there is a line and column number in the error coming from-postgresql, they should appear something like this:--execute: PGRES_FATAL_ERROR: ERROR: column "object_name" of relation "system_implementation_objects" does not exist-LINE 1: insert into system_implementation_objects (object_name,objec...- ^--So we are looking at the LINE x: part, and the line with a bunch of-blanks preceding the ^--Parse the line number out : easy-Parse the number of spaces before the ^ easy--Problem: the text following the LINE 1: is a arbitrary snippet of the-source so the column number of the ^ doesn't relate to the column-number in the source in any straightforward way at all...--Probably a better way of doing this, might need alterations to HDBC-though--> getLineAndColumnFromErrorText :: String -> (Int, Int)-> getLineAndColumnFromErrorText errorText =-> let ls = lines errorText-> lineLine = find isLineLine ls-> lineNo = case lineLine of-> Nothing -> 0-> Just ll -> getLineNo ll-> column = 0 --(case find isHatLine ls of-> -- Nothing -> 0-> -- Just ll -> getHatPos ll 0)-> prestuff = 0 --case lineLine of-> -- Nothing -> 0-> -- Just l -> getLineStuffLength l-> in (column - prestuff,lineNo)-> -- wish I knew how to get haskell regexes working...-> -- can't find a way to get just the () part out-> where-> isLineLine l = l =~ "^LINE ([0-9]+):" :: Bool-> getLineNo l = read (stripCrap (l =~ "^LINE ([0-9]+):" :: String)) :: Int-> stripCrap = reverse . drop 1 . reverse . drop 5-- > isHatLine l = l =~ "^[ ]*\\^" :: Bool- > getHatPos l i = case l of- > (x:xs) | x == ' ' -> getHatPos xs (i + 1)- > | otherwise -> i- > _ -> 0- > getLineStuffLength l = length (l =~ "^LINE ([0-9]+):" :: String) + 1--> handleError :: String -> (String,Int,Int) -> Ast.Statement -> IO () -> IO ()-> handleError fn (_, sl,sc) _ f = catchSql f-> (\e -> do-> --s <- readFile fn-> let (l,c) = getLineAndColumnFromErrorText (seErrorMsg e)-> --let (sl,sc) = getStatementPos st-> error $ "ERROR!!!!\n"-> ++ show l ++ ":" ++ show c ++ ":\n"-> ++ "from here:\n"-> ++ fn ++ ":" ++ show sl ++ ":" ++ show sc ++ ":\n"-> ++ seErrorMsg e)-- > getStatementPos (Insert (Just (SourcePos x y)) _ _ _ _) = (x,y)-- > getStatementPos :: t -> (Integer, Integer)- > getStatementPos _ = (0::Integer,0::Integer)--================================================================================--withtemporaryfile, part of the copy from stdin hack--can't use opentempfile since it gets locked and then pg program can't-open the file for reading--proper dodgy, needs fixing:--> withTemporaryFile :: (String -> IO c) -> IO c-> withTemporaryFile f = bracket (return ())-> (\_ -> removeFile "hssqlppptemp.temp")-> (\_ -> f "hssqlppptemp.temp")
− Database/HsSqlPpp/Dbms/MakeLabels.hs
@@ -1,126 +0,0 @@-{-# LANGUAGE TemplateHaskell, FlexibleInstances, EmptyDataDecls, DeriveDataTypeable #-}---- robbed from the darcs version of hlist---- Making labels--{-- The following TH splice- $(makeLabels ["getX","getY","draw"])--should expand into the following declarations--data GetX; getX = proxy::Proxy GetX-data GetY; getY = proxy::Proxy GetY-data Draw; draw = proxy::Proxy Draw---}--module Database.HsSqlPpp.Dbms.MakeLabels (makeLabels,label) where--import Data.HList.FakePrelude--import Language.Haskell.TH.Ppr () --pprint,Ppr)-import Language.Haskell.TH.Syntax--import Data.Char (toUpper, toLower)-import Control.Monad (liftM)--import Data.Typeable--capitalize, uncapitalize :: String -> String-capitalize (c:rest) = toUpper c : rest-capitalize [] = []-uncapitalize (c:rest) = toLower c : rest-uncapitalize [] = []----- Make the name of the type constructor whose string representation--- is capitalized str-make_tname :: String -> Name-make_tname str = mkName $ capitalize str---- Make the name of the value identifier whose string representation--- is uncapitalized str-make_dname :: String -> Name-make_dname str = mkName $ uncapitalize str---- The template of our declaration. We will then replace all occurences--- of Foo with the desired name-dcl_template :: Q [Dec]-dcl_template = [d| data Foo deriving Typeable; foo :: Proxy Foo; foo = proxy::Proxy Foo |]---- A very dirty traversal/replacement...--class ReplaceSyntax a where- replace_name :: (Name,Name) -> (Name,Name) -> a -> a--instance ReplaceSyntax [Dec] where- replace_name frm to dcls = map (replace_name frm to) dcls--instance ReplaceSyntax Dec where- replace_name (tfrom,_) (tto,_)- dcl@(DataD ctx n parms con othern) =- if tfrom == n then- DataD ctx tto parms con othern- else dcl- replace_name (tfrom,dfrom) (tto,dto)- (ValD (VarP n) (NormalB body) []) =- let n' = if n == dfrom then dto else n- in ValD (VarP n')- (NormalB (replace_name (tfrom,dfrom) (tto,dto) body)) []-- replace_name (tfrom,dfrom) (tto,dto) (SigD n t) =- let n' = if n == dfrom then dto else n- in SigD n' (replace_name (tfrom,dfrom) (tto,dto) t)-- replace_name _ _ dcl =- error $ "Can't handle: " ++ show dcl---instance ReplaceSyntax Exp where- replace_name from to (SigE exp' tp) =- SigE (replace_name from to exp')- (replace_name from to tp)- replace_name _ _ exp' = exp'---instance ReplaceSyntax Type where- replace_name (tfrom,_) (tto,_) tp@(ConT n) =- if n == tfrom then (ConT tto) else tp- replace_name from to (AppT t1 t2) =- (AppT (replace_name from to t1) (replace_name from to t2))- replace_name _ _ t = error $ "Can't handle: " ++ show t----- Our main function-makeLabels :: [String] -> Q [Dec]-makeLabels = liftM concat . sequence . map repl- where- repl n = liftM (replace_name from (to n)) dcl_template- from = (make_tname "foo",make_dname "foo")- to n = (make_tname n,make_dname n)--label :: String -> Q [Dec]-label s = makeLabels [s]--{---- Show the code expression-show_code :: Ppr a => Q a -> IO ()-show_code cde = runQ cde >>= putStrLn . pprint--t1 :: IO ()-t1 = show_code [d| data Foo |]--t2 :: String-t2 = showName $ mkName "Foo"--t3 :: IO ()-t3 = show_code $- liftM (replace_name- (make_tname "foo",make_dname "foo")- (make_tname "bar",make_dname "bar")) dcl_template--t4 :: IO ()-t4 = show_code $ makeLabels ["getX","getY","draw"]--}
− Database/HsSqlPpp/Dbms/WrapLib.lhs
@@ -1,15 +0,0 @@-Copyright 2010 Jake Wheat--> -- | Utility function for use with WrapperGen example code-> module Database.HsSqlPpp.Dbms.WrapLib where--> import Database.HDBC--> selectRelation :: (IConnection conn) =>-> conn -> String -> [SqlValue] -> IO [[SqlValue]]-> selectRelation conn query args = do-> sth <- prepare conn query-> _ <- execute sth args-> v <- fetchAllRows' sth-> return v-
− Database/HsSqlPpp/Dbms/WrapperGen.lhs
@@ -1,275 +0,0 @@-Copyright 2010 Jake Wheat--demo code for using the hssqlppp typechecker to generate typesafe-database access code--could probably use some quasi quotation--> {-# LANGUAGE FlexibleContexts #-}--> module Database.HsSqlPpp.Dbms.WrapperGen-> (wrapperGen) where--> import Text.Show.Pretty (ppShow)-> import Language.Haskell.Exts hiding (String)-> import qualified Language.Haskell.Exts as Exts-> import Data.Generics.PlateData-> import Data.Generics hiding (Prefix,Infix)-> import Control.Monad.Error-> import Data.Maybe--> import Database.HsSqlPpp.Ast.SqlTypes as Sql-> import Database.HsSqlPpp.Ast.Catalog-> import Database.HsSqlPpp.Ast.TypeChecker-> import Database.HsSqlPpp.Parsing.Parser-> import Database.HsSqlPpp.Ast.Annotation---> -- | takes a haskell source file and produces a haskell source file-> -- with typesafe wrappers-> ---> -- Example:-> ---> -- > module Testhesql1 where-> -- > pieces = "select * from pieces;"-> -- > turn_number = "select get_turn_number();"-> -- > pieces_at_pos = "select * from pieces where x = ? and y = ?;"-> ---> -- is transformed to-> ---> -- > module Testhesql1 where-> -- > import Database.HDBC-> -- > import Database.HsSqlPpp.Dbms.WrapLib-> -- >-> -- > pieces ::-> -- > (IConnection conn) =>-> -- > conn ->-> -- > IO [(Maybe String, Maybe String, Maybe Int, Maybe Int, Maybe Int)]-> -- > pieces conn-> -- > = do r <- selectRelation conn "select * from pieces;" []-> -- > return $-> -- > flip map r $-> -- > \ [a0, a1, a2, a3, a4] ->-> -- > (fromSql a0, fromSql a1, fromSql a2, fromSql a3, fromSql a4)-> -- >-> -- > turn_number :: (IConnection conn) => conn -> IO [(Maybe Int)]-> -- > turn_number conn-> -- > = do r <- selectRelation conn "select get_turn_number();" []-> -- > return $ flip map r $ \ [a0] -> (fromSql a0)-> -- >-> -- > pieces_at_pos ::-> -- > (IConnection conn) =>-> -- > conn ->-> -- > Maybe Int ->-> -- > Maybe Int ->-> -- > IO [(Maybe String, Maybe String, Maybe Int, Maybe Int, Maybe Int)]-> -- > pieces_at_pos conn b0 b1-> -- > = do r <- selectRelation conn-> -- > "select * from pieces where x = ? and y = ?;"-> -- > [toSql b0, toSql b1]-> -- > return $-> -- > flip map r $-> -- > \ [a0, a1, a2, a3, a4] ->-> -- > (fromSql a0, fromSql a1, fromSql a2, fromSql a3, fromSql a4)-> ---> -- This code is just an example of how to get the type information-> -- out for each sql statement, please see the source code for how it-> -- works. It's not nearly good enough for production use.--> wrapperGen :: String -- ^ name of database to typecheck against-> -> FilePath -- ^ haskell source filename to process-> -> IO String -- ^ generated wrapper source code-> wrapperGen db fn = do-> p <- parseFile fn-> case p of-> ParseOk ast -> do-> catU <- readCatalogFromDatabase db-> case updateCatalog defaultCatalog catU of-> Left er -> return $ show er-> Right cat ->-> return $ {-ppShow ast ++ "\n\n" ++ -} prettyPrint (processTree cat (addImports ast))-> x -> return $ ppShow x--This is the function which finds the statements which look like-ident = "string"-and converts them into hdbc wrappers with the correct types--> processTree :: Data a => Catalog -> a -> a-> processTree cat =-> transformBi $ \x ->-> case x of-> (PatBind _-> (PVar (Ident fnName))-> Nothing-> (UnGuardedRhs(Lit (Exts.String sqlSrc)))-> (BDecls [])) : tl-> -> createWrapper cat fnName sqlSrc ++ tl-> x1 -> x1--for each bind to convert, lookup the haskell types needed, then-create a type sig and a function to use hdbc to run the sql--> createWrapper :: Catalog-> -> String-> -> String-> -> [Decl]-> createWrapper cat fnName sql =-> let rt = getStatementType cat sql-> in case rt of-> Left e -> error e-> Right (StatementType pt ts) ->-> let pts = map sqlTypeToHaskellTypeName pt-> tns = map (sqlTypeToHaskellTypeName . snd) ts-> in [makeTypeSig fnName pts tns-> ,makeFn fnName sql pts tns]--================================================================================--create the type signature for a wrapper, produces something like-(IConnection conn) => conn -> inarg1 -> inarg2 -> ... ->- IO [(outarg1, outarg2, ...)]--> makeTypeSig :: String -> [String] -> [String] -> Decl-> makeTypeSig fnName argTypes typeNames =-> TypeSig noSrcLoc [Ident fnName] $-> TyForall Nothing [ClassA (UnQual (Ident "IConnection")) [TyVar(Ident "conn")]] $-> foldr TyFun lastArg args-> where-> tc = TyCon . UnQual . Ident-> tntt = (TyApp (tc "Maybe")) . tc-> args = ((TyVar (Ident "conn")) : map tntt argTypes)-> lastArg = (TyApp (tc "IO") (TyList (TyTuple Boxed $ map tntt typeNames)))--================================================================================--create the function which calls hdbc--takes something like:-pieces_at_pos = "select * from pieces where x = ? and y = ?;"-and produces:--pieces_at_pos conn b0 b1- = do r <- selectRelation conn- "select * from pieces where x = ? and y = ?;"- [toSql b0, toSql b1]- return $- flip map r $- \ [a0, a1, a2, a3, a4] ->- (fromSql a0, fromSql a1, fromSql a2, fromSql a3, fromSql a4)--doesn't really need to know the types, just the number of inargs and outargs,-since the work is done by hdbc's toSql and fromSql, and by the type signature-that is generated in the function above--> makeFn :: String -> String -> [String] -> [String] -> Decl-> makeFn fnName sql pts typeNames = FunBind-> [ Match noSrcLoc(-> Ident fnName )-> (PVar (Ident "conn") : map (PVar . Ident) pNames)-> Nothing (-> UnGuardedRhs (-> Do-> [ Generator noSrcLoc (-> PVar ( Ident "r" ) ) (-> App (-> App (-> App (-> Var ( UnQual ( Ident "selectRelation" ) ) ) (-> Var ( UnQual ( Ident "conn" ) ) ) ) (-> Lit ( Exts.String sql ) ) ) (-> List $ map (\l -> App (-> Var ( UnQual ( Ident "toSql" ) ) ) (-> Var ( UnQual ( Ident l ) ) )) pNames-> ))-> , Qualifier (-> InfixApp (-> Var ( UnQual ( Ident "return" ) ) ) (-> QVarOp ( UnQual ( Symbol "$" ) ) ) (-> InfixApp (-> App (-> App (-> Var ( UnQual ( Ident "flip" ) ) ) (-> Var ( UnQual ( Ident "map" ) ) ) ) (-> Var ( UnQual ( Ident "r" ) ) ) ) (-> QVarOp ( UnQual ( Symbol "$" ) ) ) (-> Lambda noSrcLoc-> [ PList (map (PVar . Ident) vns)-> ] (-> Tuple (map (\n -> App (vui "fromSql") (vui n)) vns)-> ) ) ) )-> ] ) ) (-> BDecls [] )-> ]-> where-> varName n = "a" ++ show n-> vns = map varName [0..length typeNames - 1]-> vui = Var . UnQual . Ident-> pName n = "b" ++ show n-> pNames = map pName [0..length pts - 1]--================================================================================--> addImports :: Data a => a -> a-> addImports =-> transformBi $ \x ->-> case x of-> Module sl mn o wt es im d -> Module sl mn o wt es (imports ++ im) d--> imports :: [ImportDecl]-> imports = [ImportDecl {importLoc = noSrcLoc-> ,importModule = ModuleName "Database.HDBC"-> ,importQualified = False-> ,importSrc = False-> ,importPkg = Nothing-> ,importAs = Nothing-> ,importSpecs = Nothing-> }-> ,ImportDecl {importLoc = noSrcLoc-> ,importModule = ModuleName "Database.HsSqlPpp.Dbms.WrapLib"-> ,importQualified = False-> ,importSrc = False-> ,importPkg = Nothing-> ,importAs = Nothing-> ,importSpecs = Nothing-> }]--================================================================================--parsing and typechecking--get the input and output types for a parameterized sql statement:--> getStatementType :: Catalog -> String -> Either String StatementType-> getStatementType cat sql = do-> ast <- tsl $ parseSql "" sql-> let (_,aast) = typeCheck cat ast-> let a = getTopLevelInfos aast-> return $ fromJust $ head a--return the equivalent haskell type for a sql type as a string--> sqlTypeToHaskellTypeName :: Sql.Type -> String-> sqlTypeToHaskellTypeName t =-> case t of-> ScalarType "text" -> "String"-> ScalarType "int4" -> "Int"-> ScalarType "int8" -> "Int"-> ScalarType "bool" -> "Bool"-> DomainType _ -> "String"-> x -> show x--================================================================================--simple ast shortcuts--> noSrcLoc :: SrcLoc-> noSrcLoc = (SrcLoc "" 0 0)--================================================================================--error utility - convert either to ErrorT String--> tsl :: (MonadError String m, Show t) => Either t a -> m a-> tsl x = case x of-> Left s -> throwError $ show s-> Right b -> return b
− Database/HsSqlPpp/Extensions/ChaosExtensions.lhs
@@ -1,497 +0,0 @@-Copyright 2009 Jake Wheat--Experimental code to use uniplate to implement extensions--> {-# LANGUAGE ViewPatterns #-}--> {- | Experimental code to half implement some simple syntax-> extensions for plpgsql. Eventually, want to use this to write-> macro type things for plpgsql.->-> The transforms here were already implemented as dynamic pl/pgsql-> generation from pl/pgsql itself, hopefully this approach will-> turn out to be a bit more maintainable, and the resultant code-> visible to the hssqlppp type checking process.->-> Only some of the extensions needed are here, and they are only-> part implemented, the first milestone is to get the type-> checking working, without e.g. worrying about the bodies of-> generated functions.-> -}--> module Database.HsSqlPpp.Extensions.ChaosExtensions-> (-> extensionize-> ,addReadonlyTriggers-> ,rewriteCreateVars-> ,createClientActionWrapper-> ,addNotifyTriggers-> ,addConstraint-> ,addKey-> ,addForeignKey-> ,zeroOneTuple-> ,noDelIns-> ,transitionConstraints-> ,replaceGenerateSpellChoiceActions-> ) where--> import Data.Generics-> import Data.Generics.Uniplate.Data-> import Debug.Trace--> import Text.Parsec hiding(many, optional, (<|>))-> import qualified Text.Parsec.Token as P-> import Text.Parsec.Language--> import Control.Applicative-> import Control.Monad.Identity-> import Data.List--> import Database.HsSqlPpp.Ast.Ast-> import Database.HsSqlPpp.Ast.Annotation-> import Database.HsSqlPpp.Parsing.Lexer-> import Database.HsSqlPpp.Parsing.Parser----> data FunCallView = FUnit-> | FunCallView Annotation String [Expression]--> funCallView :: Statement -> FunCallView-> funCallView (SelectStatement an (Select _ _ (SelectList _ [SelExp _ (FunCall _ fnName-> args)] []) [] Nothing [] Nothing [] Nothing Nothing)) = FunCallView an fnName args-> funCallView _ = FUnit--> -- | run all the extensions in this module on the given ast-> extensionize :: Data a => a -> a-> extensionize = addReadonlyTriggers .-> rewriteCreateVars .-> createClientActionWrapper .-> addNotifyTriggers .-> addConstraint .-> addKey .-> addForeignKey .-> zeroOneTuple .-> noDelIns .-> transitionConstraints .-> replaceGenerateSpellChoiceActions---================================================================================--My dodgy SQL code uses a function called create_var to create a table-with a single attribute, which can hold 0 or 1 tuples (it adds the-constraints to handle all this), a bit like a global maybe-variable. It also creates a wrapper function to return the value from-the table which is sometimes more convenient to use in expressions-instead of e.g. a join.-e.g.-select create_var('name', 'type');-->-create table name_table (- name type-);--create function get_name() returns type as $a$- select * from name_table;-$a$ language sql stable;-[missing constraint stuff...]--When trying to type check these files, my code can't work out that the-create_var invocation changes the catalog in this way, as a hack to-get round this tried to write a little generic function which-transforms the create var invocation to the create table and create-function by transforming the ast tree before it is type checked. With-this in place, the code can type check these tables.--The future plan is to get rid of the create var function definition in-the sql entirely, and just use this macro feature instead. (so we-still call create_var in the same way). The main motivation is to make-type checking the code easier (the other obvious alternative is to-write a partial interpreter for pl/pgsql which sounds like an immense-amount of work in comparison).--> -- | short cut for creating a table with exactly one attribute whose-> -- cardinality is restricted to 0 or 1. Also provides a get_var function shortcut.-> rewriteCreateVars :: Data a => a -> a-> rewriteCreateVars =-> transformBi $ \x ->-> case x of-> (funCallView -> FunCallView an "create_var" [StringLit _ _ tableName,StringLit _ _ typeName]):tl-> -> [(CreateTable an-> (tableName ++ "_table")-> [AttributeDef an-> tableName-> (SimpleTypeName an typeName)-> Nothing-> []]-> [])-> ,(CreateFunction an ("get_" ++ tableName) []-> (SimpleTypeName an typeName) Sql "$a$"-> (SqlFnBody an-> [SelectStatement an-> (Select an Dupes-> (SelectList an-> [SelExp an-> (Identifier an "*")] [])-> [Tref an (tableName ++ "_table") NoAlias]-> Nothing [] Nothing [] Nothing Nothing)]) Stable)]-> ++ createKey an (tableName ++ "_table") [tableName]-> ++ createConstraint True an [tableName ++ "_table"] (tableName ++ "_table_01_tuple") "true"-> ++ tl-> x1 -> x1--================================================================================--> -- | looks for calls to function set_relvar_type and adds triggers to prevent the-> -- referenced table from being updated-> addReadonlyTriggers :: Data a => a -> a-> addReadonlyTriggers =-> transformBi $ \x ->-> case x of-> (funCallView -> FunCallView an "set_relvar_type" [StringLit _ _ tableName,StringLit _ _ "readonly"]):tl-> -> (flip map "diu" ( \t ->-> (CreateFunction an ("check_" ++ tableName ++ "_" ++ [t] ++ "_readonly") []-> (SimpleTypeName an "trigger") Plpgsql-> "$a$"-> (PlpgsqlFnBody an [] [-> If an-> [(FunCall an "!not" [BooleanLit an False]-> ,[Raise an RException-> "delete on base_relvar_metadata \-> \violates transition constraint \-> \base_relvar_metadata_d_readonly" []])] []-> ,Return an $ Just $ NullLit an])-> Volatile)) ++ tl)-> x1 -> x1--================================================================================--> -- | a numpty currying type thing for plpgsql functions-> createClientActionWrapper :: Data a => a -> a-> createClientActionWrapper =-> transformBi $ \x ->-> case x of-> (funCallView -> FunCallView an "create_client_action_wrapper" [StringLit _ _ actname,StringLit _ _ actcall]):tl-> -> (CreateFunction an ("action_" ++ actname) []-> (SimpleTypeName an "void") Plpgsql-> "$a$"-> (PlpgsqlFnBody an [] [-> let (n,as) = parseActionCall actcall-> in Perform an (FunCall an ("action_" ++ n) (map (StringLit an "'") as))-> ]) Volatile : tl)-> x1 -> x1-> where-> parseActionCall :: String -> (String,[String])-> parseActionCall = parseCcawac--> parseCcawac :: String -> (String,[String])-> parseCcawac s = case runParser ccawac [] "" s of-> Left e -> trace ("failed to parse " ++ s) $ error $ show e-> Right r -> r--> ccawac :: ParsecT String LexState Identity (String, [String])-> ccawac = (,)-> <$> identifierString-> <*> parens (sepBy ccawacarg (symbol ","))--> ccawacarg :: ParsecT String LexState Identity String-> ccawacarg = (symbol "'" *> many (noneOf "'") <* symbol "'")-> <|> identifierString--> parens :: ParsecT String LexState Identity a -> ParsecT String LexState Identity a-> parens = between (symbol "(") (symbol ")")--> symbol :: String -> ParsecT String LexState Identity String-> symbol = P.symbol lexer--> lexer :: P.GenTokenParser String LexState Identity-> lexer = P.makeTokenParser emptyDef--================================================================================--> -- | add a trigger to each data table to raise a notify signal when changed-> addNotifyTriggers :: Data a => a -> a-> addNotifyTriggers =-> transformBi $ \x ->-> case x of-> (funCallView -> FunCallView an "set_relvar_type" [StringLit _ _ tableName,StringLit _ _ "data"]):tl-> -> (CreateFunction an (tableName ++ "_changed") []-> (SimpleTypeName an "trigger") Plpgsql-> "$a$"-> (PlpgsqlFnBody an [] [-> Notify an tableName-> ,Return an $ Just $ NullLit an-> ]) Volatile : tl)-> x1 -> x1--================================================================================--> -- | wrapped for the extended constraint system - allows adding constraints-> -- which refer to multiple rows/ multiple tables.-> addConstraint :: Data a => a -> a-> addConstraint =-> transformBi $ \x ->-> case x of-> (funCallView -> FunCallView an "add_constraint"-> [StringLit _ _ conName-> ,StringLit _ _ expr-> ,FunCall _ "!arrayctor" tbls]):tl-> -> createConstraint True an (getStrings tbls) conName expr ++ tl-> x1 -> x1--> parseExpressionWrap :: String -> Expression-> parseExpressionWrap s = case parseExpression "" s of-> Left e -> trace ("parsing expression: " ++ s) $ error $ show e-> Right ast -> ast--> createConstraint :: Bool-> -> Annotation-> -> [String]-> -> String-> -> String-> -> [Statement]-> createConstraint tr an tbls name expr =-> CreateFunction an ("check_con_" ++ name) []-> (SimpleTypeName an "boolean") Plpgsql "$a$"-> (PlpgsqlFnBody an [] [-> Return an $ Just $-> stripAnnotations (parseExpressionWrap expr)-> ]) Stable :-> if tr-> then concatMap (\t -> [DropFunction an IfExists [(t ++ "_constraint_trigger_operator",[])] Restrict-> ,CreateFunction an (t ++ "_constraint_trigger_operator") []-> (SimpleTypeName an "trigger") Plpgsql "$a$"-> (PlpgsqlFnBody an [] [-> NullStatement an]) Volatile]-> ) tbls-> else []--> -- | implement key constraints so that they are integrated with the extended constraint-> -- system, uses pg keys internally.-> addKey :: Data a => a -> a-> addKey =-> transformBi $ \x ->-> case x of-> (funCallView -> FunCallView an "add_key"-> [StringLit _ _ tableName-> ,StringLit _ _ columnName]):tl-> -> createKey an tableName [columnName] ++ tl-> (funCallView -> FunCallView an "add_key"-> [StringLit _ _ tableName-> ,FunCall _ "!arrayctor" cols]):tl-> -> createKey an tableName (getStrings cols) ++ tl-> x1 -> x1--> getStrings :: [Expression] -> [String]-> getStrings = map (\(StringLit _ _ c) -> c)--> createKey :: Annotation-> -> String-> -> [String]-> -> [Statement]-> createKey an tableName colNames =-> let cn = take 49 (tableName ++ "_" ++ intercalate "_" colNames) ++ "_key"-> in createConstraint False an [tableName] cn "true"--> -- | extended inclusion dependency (I think that is the fashionable term these days).-> -- to allow 'foreign keys' to non key attributes, as well as regular foreign keys-> addForeignKey :: Data a => a -> a-> addForeignKey =-> transformBi $ \x ->-> case x of-> (funCallView -> FunCallView an "add_foreign_key"-> [StringLit _ _ tableName-> ,StringLit _ _ colName-> ,StringLit _ _ ttableName]):tl-> -> createFk an tableName [colName] ttableName [colName] ++ tl-> (funCallView -> FunCallView an "add_foreign_key"-> [StringLit _ _ tableName-> ,FunCall _ "!arrayctor" cols-> ,StringLit _ _ ttableName]):tl-> -> createFk an tableName (getStrings cols) ttableName (getStrings cols) ++ tl-> (funCallView -> FunCallView an "add_foreign_key"-> [StringLit _ _ tableName-> ,StringLit _ _ colName-> ,StringLit _ _ ttableName-> ,StringLit _ _ tcolName]):tl-> -> createFk an tableName [colName] ttableName [tcolName] ++ tl-> (funCallView -> FunCallView an "add_foreign_key"-> [StringLit _ _ tableName-> ,FunCall _ "!arrayctor" cols-> ,StringLit _ _ ttableName-> ,FunCall _ "!arrayctor" tcols]):tl-> -> createFk an tableName (getStrings cols) ttableName (getStrings tcols) ++ tl-> x1 -> x1-> where-> createFk an tbl atts _ _ =-> createConstraint False an [tbl] (tbl ++ "_" ++ intercalate "_" atts ++ "_fkey") "true"--> -- | convert calls to zero or one tuple to constraint-> zeroOneTuple :: Data a => a -> a-> zeroOneTuple =-> transformBi $ \x ->-> case x of-> (funCallView -> FunCallView an "constrain_to_zero_or_one_tuple"-> [StringLit _ _ tableName]):tl-> -> createConstraint True an [tableName] (tableName ++ "_01_tuple") "true" ++ tl-> x1 -> x1--================================================================================--> noDelIns :: Data a => a -> a-> noDelIns =-> transformBi $ \x ->-> case x of-> (funCallView -> FunCallView an "no_deletes_inserts_except_new_game"-> [StringLit _ _ tbl]):tl-> -> flip map ["_no_delete","_no_insert"] (\n ->-> CreateFunction an ("check_" ++ tbl ++ n) []-> (SimpleTypeName an "trigger") Plpgsql "$a$"-> (PlpgsqlFnBody an [] [-> NullStatement an-> ]) Stable) ++ tl-> x1 -> x1--================================================================================--> transitionConstraints :: Data a => a -> a-> transitionConstraints =-> transformBi $ \x ->-> case x of-> (funCallView -> FunCallView an "create_update_transition_tuple_constraint"-> [StringLit _ _ _-> ,StringLit _ _ cn-> ,StringLit _ _ _]):tl-> -> addTrigger an cn ++ tl-> (funCallView -> FunCallView an "create_insert_transition_tuple_constraint"-> [StringLit _ _ _-> ,StringLit _ _ cn-> ,StringLit _ _ _]):tl-> -> addTrigger an cn ++ tl-> (funCallView -> FunCallView an "create_delete_transition_tuple_constraint"-> [StringLit _ _ _-> ,StringLit _ _ cn-> ,StringLit _ _ _]):tl-> -> addTrigger an cn ++ tl-> x1 -> x1-> where-> addTrigger an n =-> [CreateFunction an ("check_" ++ n) []-> (SimpleTypeName an "trigger") Plpgsql "$a$"-> (PlpgsqlFnBody an [] [-> NullStatement an-> ]) Stable]--================================================================================--generate_spell_choice_actions--quite dynamic: need to read the data from the spells_mr table to-generate the names of the functions--approach:-first: remove the create function generate_spell_choice_actions, the-select generate_spel..., and the drop function so these aren't used at-all-second: at the point where generate_spell_choice_actions was called,-insert the create functions. To do this need to get the copydata for-the copy statement which set up the data in spells_mr, then read the-first cell from each line in the copy data string.--additional hack: just hardcode the spell names here since they are-unlikely to change for quite a while--> getSpellNames :: Data a => a -> [String]-> getSpellNames _ = ["chaos"-> ,"dark_citadel"-> ,"dark_power"-> ,"decree"-> ,"disbelieve"-> ,"eagle"-> ,"elf"-> ,"faun"-> ,"ghost"-> ,"giant_rat"-> ,"giant"-> ,"goblin"-> ,"golden_dragon"-> ,"gooey_blob"-> ,"gorilla"-> ,"green_dragon"-> ,"gryphon"-> ,"harpy"-> ,"horse"-> ,"hydra"-> ,"justice"-> ,"king_cobra"-> ,"large_chaos"-> ,"large_law"-> ,"law"-> ,"lightning"-> ,"lion"-> ,"magic_armour"-> ,"magic_bolt"-> ,"magic_bow"-> ,"magic_castle"-> ,"magic_fire"-> ,"magic_knife"-> ,"magic_shield"-> ,"magic_sword"-> ,"magic_wings"-> ,"magic_wood"-> ,"manticore"-> ,"ogre"-> ,"orc"-> ,"pegasus"-> ,"raise_dead"-> ,"red_dragon"-> ,"shadow_form"-> ,"shadow_wood"-> ,"skeleton"-> ,"spectre"-> ,"subversion"-> ,"turmoil"-> ,"unicorn"-> ,"vampire"-> ,"vengeance"-> ,"wall"-> ,"wraith"-> ,"zombie"]---> replaceGenerateSpellChoiceActions :: Data a => a -> a-> replaceGenerateSpellChoiceActions d = let sn = getSpellNames d-> in replaceGenerateSpellChoiceActionsInt sn d--> replaceGenerateSpellChoiceActionsInt :: Data a => [String] -> a -> a-> replaceGenerateSpellChoiceActionsInt spellNames =-> transformBi $ \x ->-> case x of-> (funCallView -> FunCallView an "generate_spell_choice_actions" []):tl-> -> map (createChoiceFn an) spellNames ++ tl-> (CreateFunction _ "generate_spell_choice_actions" _ _ _ _ _ _):tl-> -> tl-> (DropFunction _ _ [("generate_spell_choice_actions",[])] _):tl-> -> tl-> x1 -> x1-> where-> createChoiceFn an sn =-> CreateFunction an ("action_choose_" ++ sn ++ "_spell")-> []-> (SimpleTypeName [] "void")-> Plpgsql-> "$$"-> (PlpgsqlFnBody an [] [-> NullStatement an-> ]) Volatile--CREATE FUNCTION action_choose_horse_spell() RETURNS void- LANGUAGE plpgsql- AS $$-begin- perform check_can_run_action('choose_horse_spell');- perform action_choose_spell('horse');-end;-$$;-
− Database/HsSqlPpp/Here.lhs
@@ -1,15 +0,0 @@--Multiline string support, mainly used to enter multiline sql strings--robbed from http://old.nabble.com/Multi-line-string-literals-are-both-easy--and--elegant-in-Haskell-td19959973.html--> {-# OPTIONS_HADDOCK hide #-}--> module Database.HsSqlPpp.Here where--> import Language.Haskell.TH.Quote-> --import Language.Haskell.TH.Syntax-> import Language.Haskell.TH.Lib--> here :: QuasiQuoter-> here = QuasiQuoter (litE . stringL) (litP . stringL)
− Database/HsSqlPpp/HsText/Commands.lhs
@@ -1,46 +0,0 @@--> module Database.HsSqlPpp.HsText.Commands-> (defaultCommands-> ,makeFile-> ,shell-> ,wrapCommand-> ) where--> import Data.Char-> import Data.List-> import System.Exit-> import System.Process (readProcessWithExitCode)-> import System.FilePath--> import Control.Monad.Error---> defaultCommands :: [(String,String -> IO String)]-> defaultCommands = [("file", makeFile)-> ,("shell", shell)]--> makeFile :: String -> IO String-> makeFile s =-> let (fn,content) = break ws $ dropWhile space s-> in do-> writeFile fn content-> return $-> "File " ++ fn ++ "\n\n"-> ++ "~~~~~~~~~~~~{" ++ takeExtension fn ++ "}"-> ++ content ++ "\n~~~~~~~~~~~~\n\n"-> where-> ws = (`elem` " \n\t")-> space = (==' ')--> shell :: String -> IO String-> shell s = {-let (c:as) = words s-> in -} do-> (ex,o,e) <- readProcessWithExitCode "bash" ["-c", ("PATH=$PATH:~/wd/hssqlppp/trunk " ++ s)] ""-> return $ o ++ e ++ case ex of-> ExitSuccess -> ""-> ExitFailure i -> "\nErrorCode: " ++ show i ++ "\n"--PATH=$PATH:~/wd/hssqlppp/trunk && HsSqlSystem--> wrapCommand :: String -> String -> (String -> IO String) -> (String -> IO String)-> wrapCommand pre post c l = c l >>= \m -> return $ pre ++ m ++ post
− Database/HsSqlPpp/HsText/HsText.lhs
@@ -1,72 +0,0 @@---> module Database.HsSqlPpp.HsText.HsText-> (hsTextify-> ,defaultCommands-> ,makeFile-> ,shell-> ,wrapCommand-> ) where--> import Text.Parsec hiding(many, optional, (<|>))--> import Data.Char-> import Data.List-> import System.Directory--> import Control.Applicative-> import Control.Monad.Identity-> import Control.Monad.Error-> import Control.Exception (bracket)--> import Database.HsSqlPpp.HsText.Commands--> data TextChunk = TextChunk String-> | CommandInfo String String-> deriving Show--> type Command = String -> IO String--> hsTextify :: [(String, Command)] -> String -> String -> IO (Either String String)-> hsTextify cmds folder txt = do-> cd <- getCurrentDirectory-> setCurrentDirectory folder-> bracket (return ())-> (\_ -> setCurrentDirectory cd)-> $ return $ runErrorT $-> liftM concat-> (either (throwError . show) return (parseText txt) >>=-> mapM (liftIO . processCommand cmds))--> processCommand :: [(String, Command)] -> TextChunk -> IO String-> processCommand _ (TextChunk s) = return s-> processCommand cmds (CommandInfo c a) = do-> let cr = lookup (map toLower c) cmds-> case cr of-> Nothing -> return $ "Command not found: " ++ c-> Just f -> catchEx (f a)--> catchEx :: IO String -> IO String-> catchEx s = catch s (\i -> return $ "ERROR: " ++ show i)--================================================================================--parsing--> parseText :: String -> Either ParseError [TextChunk]-> parseText = runParser (many textChunk) () ""--> textChunk :: ParsecT String () Identity TextChunk-> textChunk = command <|> nonCommand--> command :: ParsecT String () Identity TextChunk-> command = CommandInfo-> <$> (string "<%Command " *> many (noneOf " "))-> <*> manyTill anyChar (try (string "%>"))--> nonCommand :: ParsecT String () Identity TextChunk-> nonCommand = TextChunk-> <$> ((:) <$> anyChar <*>-> manyTill anyChar-> (try (lookAhead(string "<%Command ") >> return ())-> <|> eof))
− Database/HsSqlPpp/Parsing/Lexer.lhs
@@ -1,298 +0,0 @@-Copyright 2009 Jake Wheat--This file contains the lexer for sql source text.--Lexicon:--string-identifier or keyword-symbols - operators and ;,()[]-positional arg-int-float-copy payload (used to lex copy from stdin data)--> {-# OPTIONS_HADDOCK hide #-}--> module Database.HsSqlPpp.Parsing.Lexer (-> Token-> ,Tok(..)-> ,lexSqlFile-> ,lexSqlText-> ,lexSqlTextWithPosition-> ,identifierString-> ,LexState-> ) where--> import Text.Parsec hiding(many, optional, (<|>))-> import qualified Text.Parsec.Token as P-> import Text.Parsec.Language-> import Text.Parsec.String-> import Text.Parsec.Pos--> import Control.Applicative-> import Control.Monad.Identity--> import Database.HsSqlPpp.Parsing.ParseErrors-> import Database.HsSqlPpp.Utils--================================================================================--= data types--> type Token = (SourcePos, Tok)--> data Tok = StringTok String String --delim, value (delim will one of-> --', $$, $[stuff]$-> | IdStringTok String --includes . and x.y.* type stuff-> | SymbolTok String -- operators, and ()[],;:-> -- '*' is currently always lexed as an id-> -- rather than an operator-> -- this gets fixed in the parsing stage-> | PositionalArgTok Integer -- used for $1, etc.-> | FloatTok Double-> | IntegerTok Integer-> | CopyPayloadTok String -- support copy from stdin; with inline data-> deriving (Eq,Show)--> type LexState = [Tok]--> lexSqlFile :: FilePath -> IO (Either ParseErrorExtra [Token])-> lexSqlFile f = do-> te <- readFile f-> let x = runParser sqlTokens [] f te-> return $ toParseErrorExtra x Nothing te--> lexSqlText :: String -> String -> Either ParseErrorExtra [Token]-> lexSqlText f s = toParseErrorExtra (runParser sqlTokens [] f s) Nothing s--> lexSqlTextWithPosition :: String -> Int -> Int -> String -> Either ParseErrorExtra [Token]-> lexSqlTextWithPosition f l c s =-> toParseErrorExtra (runParser (do-> setPosition (newPos f l c)-> sqlTokens) [] f s) (Just (l,c)) s--================================================================================--= lexers--lexer for tokens, contains a hack for copy from stdin with inline-table data.--> sqlTokens :: ParsecT String LexState Identity [Token]-> sqlTokens =-> setState [] >>-> whiteSpace >>-> many sqlToken <* eof--Lexer for an individual token.--What we could do is lex lazily and when the lexer reads a copy from-stdin statement, it switches lexers to lex the inline table data, then-switches back. Don't know how to do this in parsec, or even if it is-possible, so as a work around, we use the state to trap if we've just-seen 'from stdin;', if so, we read the copy payload as one big token,-otherwise we read a normal token.--> sqlToken :: ParsecT String LexState Identity Token-> sqlToken = do-> sp <- getPosition-> sta <- getState-> t <- if sta == [ft,st,mt]-> then copyPayload-> else try sqlString-> <|> try idString-> <|> try positionalArg-> <|> try sqlSymbol-> <|> try sqlFloat-> <|> try sqlInteger-> updateState $ \stt ->-> case () of-> _ | stt == [] && t == ft -> [ft]-> | stt == [ft] && t == st -> [ft,st]-> | stt == [ft,st] && t == mt -> [ft,st,mt]-> | otherwise -> []--> return (sp,t)-> where-> ft = IdStringTok "from"-> st = IdStringTok "stdin"-> mt = SymbolTok ";"--== specialized token parsers--> sqlString :: ParsecT String LexState Identity Tok-> sqlString = stringQuotes <|> stringLD-> where-> --parse a string delimited by single quotes-> stringQuotes = StringTok "\'" <$> stringPar-> stringPar = optional (char 'E') *> char '\''-> *> readQuoteEscape <* whiteSpace-> --(readquoteescape reads the trailing ')--have to read two consecutive single quotes as a quote character-instead of the end of the string, probably an easier way to do this--other escapes (e.g. \n \t) are left unprocessed--> readQuoteEscape = do-> x <- anyChar-> if x == '\''-> then try ((x:) <$> (char '\'' *> readQuoteEscape))-> <|> return ""-> else (x:) <$> readQuoteEscape--parse a dollar quoted string--> stringLD = do-> -- cope with $$ as well as $[identifier]$-> tag <- try (char '$' *> ((char '$' *> return "")-> <|> (identifierString <* char '$')))-> s <- lexeme $ manyTill anyChar-> (try $ char '$' <* string tag <* char '$')-> return $ StringTok ("$" ++ tag ++ "$") s--> idString :: ParsecT String LexState Identity Tok-> idString = IdStringTok <$> identifierString--> positionalArg :: ParsecT String LexState Identity Tok-> positionalArg = char '$' >> PositionalArgTok <$> integer---Lexing symbols:--approach 1:-try to keep multi symbol operators as single lexical items-(e.g. "==", "~=="--approach 2:-make each character a separate element-e.g. == lexes to ['=', '=']-then the parser sorts this out--Sort of using approach 1 at the moment, see below--== notes on symbols in pg operators-pg symbols can be made from:--=_*/<>=~!@#%^&|`?--no --, /* in symbols--can't end in + or - unless contains-~!@#%^&|?--Most of this isn't relevant for the current lexer.--== sql symbols for this lexer:--sql symbol is one of-()[],; - single character-+-*/<>=~!@#%^&|`? string - one or more of these, parsed until hit char-which isn't one of these (including whitespace). This will parse some-standard sql expressions wrongly at the moment, work around is to add-whitespace e.g. i think 3*-4 is valid sql, should lex as '3' '*' '-'-'4', but will currently lex as '3' '*-' '4'. This is planned to be-fixed in the parser.-.. := :: : - other special cases-A single * will lex as an identifier rather than a symbol, the parser-deals with this.--> sqlSymbol :: ParsecT String LexState Identity Tok-> sqlSymbol =-> SymbolTok <$> lexeme (choice [-> replicate 1 <$> oneOf "()[],;"-> ,string ".."-> ,try $ string "::"-> ,try $ string ":="-> ,string ":"-> ,many1 (oneOf "+-*/<>=~!@#%^&|`?")-> ])--> sqlFloat :: ParsecT String LexState Identity Tok-> sqlFloat = FloatTok <$> float--> sqlInteger :: ParsecT String LexState Identity Tok-> sqlInteger = IntegerTok <$> integer--================================================================================--additional parser bits and pieces--include dots, * in all identifier strings during lexing. This parser-is also used for keywords, so identifiers and keywords aren't-distinguished until during proper parsing, and * and qualifiers aren't-really examined until type checking--> identifierString :: ParsecT String LexState Identity String-> identifierString = lexeme $ choice [-> "*" <$ symbol "*"-> ,do-> a <- nonStarPart-> b <- tryMaybeP ((++) <$> symbol "." <*> identifierString)-> case b of Nothing -> return a-> Just c -> return $ a ++ c]-> where-> nonStarPart = idpart <|> (char '"' *> many (noneOf "\"") <* char '"')-> where idpart = (letter <|> char '_') <:> secondOnwards-> secondOnwards = many (alphaNum <|> char '_')--parse the block of inline data for a copy from stdin, ends with \. on-its own on a line--> copyPayload :: ParsecT String LexState Identity Tok-> copyPayload = CopyPayloadTok <$> lexeme (getLinesTillMatches "\\.\n")-> where-> getLinesTillMatches s = do-> x <- getALine-> if x == s-> then return ""-> else (x++) <$> getLinesTillMatches s-> getALine = (++"\n") <$> manyTill anyChar (try newline)--> tryMaybeP :: GenParser tok st a-> -> ParsecT [tok] st Identity (Maybe a)-> tryMaybeP p = try (optionMaybe p) <|> return Nothing---================================================================================--= parsec pass throughs--> symbol :: String -> ParsecT String LexState Identity String-> symbol = P.symbol lexer--> integer :: ParsecT String LexState Identity Integer-> integer = lexeme $ P.integer lexer--> float :: ParsecT String LexState Identity Double-> float = lexeme $ P.float lexer--> whiteSpace :: ParsecT String LexState Identity ()-> whiteSpace= P.whiteSpace lexer--> lexeme :: ParsecT String LexState Identity a-> -> ParsecT String LexState Identity a-> lexeme = P.lexeme lexer--this lexer isn't really used as much as it could be, probably some of-the fields are not used at all (like identifier and operator stuff)--> lexer :: P.GenTokenParser String LexState Identity-> lexer = P.makeTokenParser (emptyDef {-> P.commentStart = "/*"-> ,P.commentEnd = "*/"-> ,P.commentLine = "--"-> ,P.nestedComments = False-> ,P.identStart = letter <|> char '_'-> ,P.identLetter = alphaNum <|> oneOf "_"-> ,P.opStart = P.opLetter emptyDef-> ,P.opLetter = oneOf opLetters-> ,P.reservedOpNames= []-> ,P.reservedNames = []-> ,P.caseSensitive = False-> })--> opLetters :: String-> opLetters = ".:^*/%+-<>=|!"-
− Database/HsSqlPpp/Parsing/ParseErrors.lhs
@@ -1,76 +0,0 @@-Copyright 2009 Jake Wheat--convert error messages to show source text fragment with little hat,-plus output error location in emacs friendly format.--> {-# OPTIONS_HADDOCK hide #-}--> module Database.HsSqlPpp.Parsing.ParseErrors-> (toParseErrorExtra-> ,ParseErrorExtra(..)) where--> import Text.Parsec-> import Control.Monad.Error--> showPE :: ParseError -> Maybe (Int,Int) -> String -> String-> showPE pe sp src = show pe ++ "\n" ++ pePosToEmacs pe ++ "\n" ++ peToContext pe sp src--> pePosToEmacs :: ParseError -> String-> pePosToEmacs pe = let p = errorPos pe-> f = sourceName p-> l = sourceLine p-> c = sourceColumn p-> in f ++ ":" ++ show l ++ ":" ++ show c ++ ":"--> peToContext :: ParseError -> Maybe (Int,Int) -> String -> String-> peToContext pe sp src =-> let ls = lines src-> line = safeGet ls(lineNo - 1)-> prelines = map (safeGet ls) [(lineNo - 5) .. (lineNo - 2)]-> postlines = map (safeGet ls) [lineNo .. (lineNo + 5)]-> caretLine = replicate (colNo - 1) ' ' ++ "^"-> errorHighlightText = prelines-> ++ [line, caretLine, "ERROR HERE"]-> ++ postlines-> in "\nContext:\n"-> ++ unlines (trimLines errorHighlightText) ++ "\n"-> where-> safeGet a i = if i < 0 || i >= length a-> then ""-> else a !! i-> trimLines = trimStartLines . reverse . trimStartLines . reverse-> trimStartLines = dropWhile (=="")-> pos = errorPos pe-> lineNo = sourceLine pos - adjLine-> colNo = sourceColumn pos-> adjLine = case sp of-> Just (l, _) -> l - 1-> Nothing -> 0--> -- | Simple wrapper to allow showing the source context of a ParseError-> data ParseErrorExtra = ParseErrorExtra {-> -- | wrapped error-> parseErrorError :: ParseError-> -- | source position-> -- adjustment to get the-> -- context bit in error-> -- messages right - this is-> -- the same as what is passed-> -- into parseSqlWithPosition-> ,parseErrorPosition :: (Maybe (Int, Int))-> -- | sql source-> ,parseErrorSqlSource :: String-> }--> instance Show ParseErrorExtra where-> show (ParseErrorExtra pe sp src) = showPE pe sp src--> instance Error ParseErrorExtra where-> noMsg = ParseErrorExtra undefined Nothing "unknown"-> strMsg = ParseErrorExtra undefined Nothing---> toParseErrorExtra :: Either ParseError b -> Maybe (Int,Int) -> String -> Either ParseErrorExtra b-> toParseErrorExtra a sp src = case a of-> Left pe -> Left $ ParseErrorExtra pe sp src-> Right x -> Right x
− Database/HsSqlPpp/Parsing/Parser.lhs
@@ -1,1510 +0,0 @@-Copyright 2009 Jake Wheat--The main file for parsing sql, uses parsec. Not sure if parsec is the-right choice, but it seems to do the job pretty well at the moment.--For syntax reference see-http://savage.net.au/SQL/sql-2003-2.bnf.html-and-http://savage.net.au/SQL/sql-92.bnf.html-for some online sql grammar guides-and-http://www.postgresql.org/docs/8.4/interactive/sql-syntax.html-for some notes on postgresql syntax (the rest of that manual is also helpful)--Some further reference/reading:--parsec tutorial:-http://legacy.cs.uu.nl/daan/download/parsec/parsec.html--parsec reference:-http://hackage.haskell.org/package/parsec-3.0.0--pdf about parsing, uses haskell and parser combinators for examples-and exercises:-http://www.cs.uu.nl/docs/vakken/gont/diktaat.pdf--The parsers are written top down as you go through the file, so the-top level sql text parsers appear first, then the statements, then the-fragments, then the utility parsers and other utilities at the bottom.--> {-# LANGUAGE RankNTypes,FlexibleContexts #-}--> {- | Functions to parse sql.-> -}-> module Database.HsSqlPpp.Parsing.Parser (-> -- * Main-> parseSql-> ,parseSqlWithPosition-> ,parseSqlFile-> -- * Testing-> ,parseExpression-> ,parsePlpgsql-> -- * errors-> ,ParseErrorExtra(..)-> )-> where--> import Text.Parsec hiding(many, optional, (<|>), string)-> import Text.Parsec.Expr-> import Text.Parsec.String-> import Text.Parsec.Perm-> --import Text.Parsec.Error--> import Control.Applicative-> import Control.Monad.Identity--> import Data.Maybe-> import Data.Char--> import Data.Generics.PlateData-> import Data.Generics hiding (Prefix,Infix)--> import Database.HsSqlPpp.Parsing.Lexer-> import Database.HsSqlPpp.Parsing.ParseErrors-> import Database.HsSqlPpp.Ast.Ast-> import Database.HsSqlPpp.Ast.Annotation as A-> import Database.HsSqlPpp.Utils-> import Database.HsSqlPpp.Ast.Catalog--The parse state is used to keep track of source positions inside-function bodies, these bodies are parsed separately to the rest of the-code which is why we need to do this.--> type MySourcePos = (String,Int,Int)-> type ParseState = [MySourcePos]--> startState :: ParseState-> startState = []--> toMySp :: SourcePos -> MySourcePos-> toMySp sp = (sourceName sp, sourceLine sp, sourceColumn sp)--================================================================================--= Top level parsing functions--> parseSql :: String -- ^ filename to use in errors-> -> String -- ^ a string containing the sql to parse-> -> Either ParseErrorExtra StatementList-> parseSql f s = parseIt (lexSqlText f s) sqlStatements f Nothing s startState--> parseSqlWithPosition :: FilePath -- ^ filename to use in errors-> -> Int -- ^ adjust line number in errors by adding this-> -> Int -- ^ adjust column in errors by adding this-> -> String -- ^ a string containing the sql to parse-> -> Either ParseErrorExtra StatementList-> parseSqlWithPosition f l c s = parseIt (lexSqlTextWithPosition f l c s) sqlStatements f (Just (l,c)) s startState---> parseSqlFile :: FilePath -- ^ file name of file containing sql-> -> IO (Either ParseErrorExtra StatementList)-> parseSqlFile fn = do-> sc <- readFile fn-> x <- lexSqlFile fn-> return $ parseIt x sqlStatements fn Nothing sc startState--> -- | Parse expression fragment, used for testing purposes-> parseExpression :: String-> -> String -- ^ sql string containing a single expression, with no-> -- trailing ';'-> -> Either ParseErrorExtra Expression-> parseExpression f s = parseIt (lexSqlText f s) (expr <* eof) f Nothing s startState--> -- | Parse plpgsql statements, used for testing purposes --> -- this can be used to parse a list of plpgsql statements which-> -- aren't contained in a create function.-> -- (The produced ast won't pass a type check.)-> parsePlpgsql :: String-> -> String-> -> Either ParseErrorExtra StatementList-> parsePlpgsql f s = parseIt (lexSqlText f s) (many plPgsqlStatement <* eof) f Nothing s startState--utility function to do error handling in one place-TODO: support parsewithposition--> parseIt :: forall t s u b.(Stream s Identity t, Data b) =>-> Either ParseErrorExtra s-> -> Parsec s u b-> -> SourceName-> -> Maybe (Int,Int)-> -> String-> -> u-> -> Either ParseErrorExtra b-> parseIt lexed parser fn sp src ss =-> case lexed of-> Left er -> Left er-> Right toks -> let r1 = runParser parser ss fn toks-> in case toParseErrorExtra r1 sp src of-> Left er -> Left er-> Right t -> Right $ fixupTree t--================================================================================--= Parsing top level statements--> sqlStatements :: ParsecT [Token] ParseState Identity [Statement]-> sqlStatements = many (sqlStatement True) <* eof--parse a statement--> sqlStatement :: Bool -> ParsecT [Token] ParseState Identity Statement-> sqlStatement reqSemi =-> (choice [-> selectStatement-> ,insert-> ,update-> ,delete-> ,truncateSt-> ,copy-> ,set-> ,notify-> ,keyword "create" *>-> choice [-> createTable-> ,createSequence-> ,createType-> ,createFunction-> ,createView-> ,createDomain-> ,createLanguage-> ,createTrigger]-> ,keyword "alter" *>-> choice [-> alterSequence-> ,alterTable]-> ,keyword "drop" *>-> choice [-> dropSomething-> ,dropFunction]]-> <* (if reqSemi-> then symbol ";" >> return ()-> else optional (symbol ";") >> return ()))-> <|> copyData--================================================================================--statement flavour parsers--top level/sql statements first--= select--select parser, parses things starting with the keyword 'select'--supports plpgsql 'select into' only for the variants which look like-'select into ([targets]) [columnNames] from ...-or-'select [columnNames] into ([targets]) from ...-This should be changed so it can only parse an into clause when-expecting a plpgsql statement.--recurses to support parsing excepts, unions, etc.-this recursion needs refactoring cos it's a mess--> selectStatement :: ParsecT [Token] ParseState Identity Statement-> selectStatement = SelectStatement <$> pos <*> selectExpression--> selectExpression :: ParsecT [Token] ParseState Identity SelectExpression-> selectExpression =-> buildExpressionParser combTable selFactor-> where-> selFactor = try (parens selectExpression) <|> selQuerySpec <|> values-> combTable = [map (\(c,p) -> Infix (CombineSelect <$> pos <*> (c <$ p)) AssocLeft)-> [(Except, keyword "except")-> ,(Intersect, keyword "intersect")-> ,(UnionAll, try (keyword "union" *> keyword "all"))-> ,(Union, keyword "union")]]-> selQuerySpec = Select <$> (pos <* keyword "select")-> <*> option Dupes (Distinct <$ keyword "distinct")-> <*> selectList-> <*> option [] from-> <*> optionMaybe whereClause-> <*> option [] groupBy-> <*> optionMaybe having-> <*> option [] orderBy-> <*> optionMaybe limit-> <*> optionMaybe offset-> from = keyword "from" *> commaSep1 tref-> groupBy = keyword "group" *> keyword "by"-> *> commaSep1 expr-> having = keyword "having" *> expr-> orderBy = keyword "order" *> keyword "by"-> *> commaSep1 oneOrder-> oneOrder = (,) <$> expr-> <*> option Asc (choice [-> Asc <$ keyword "asc"-> ,Desc <$ keyword "desc"])-> limit = keyword "limit" *> expr-> offset = keyword "offset" *> expr--> -- table refs-> -- have to cope with:-> -- a simple tableref i.e just a name-> -- an aliased table ref e.g. select a.b from tbl as a-> -- a sub select e.g. select a from (select b from c)-> -- - these are handled in tref-> -- then cope with joins recursively using joinpart below-> tref = buildExpressionParser [] trefFactor-> trefFactor = threadOptionalSuffix (nonJoinTref <|> try (parens tref)) joinPart <|> parens tref-> --tref = optParens (threadOptionalSuffix (try (parens tref) <|> nonJoinTref) joinPart)-> nonJoinTref = try $ optParens $ do-> p2 <- pos-> choice [-> SubTref p2-> <$> parens selectExpression-> <*> palias-> ,TrefFun p2-> <$> try (identifier >>= functionCallSuffix)-> <*> palias-> ,Tref p2-> <$> nkwid-> <*> palias]-> --joinpart: parse a join after the first part of the tableref-> --(which is a table name, aliased table name or subselect) --> --takes this tableref as an arg so it can recurse to multiple-> --joins-> joinPart tr1 = threadOptionalSuffix (readOneJoinPart tr1) joinPart-> readOneJoinPart tr1 = do-> p2 <- pos-> JoinedTref p2 tr1-> --look for the join flavour first-> <$> option Unnatural (Natural <$ keyword "natural")-> <*> choice [-> LeftOuter <$ try (keyword "left" *> optional (keyword "outer"))-> ,RightOuter <$ try (keyword "right" *> optional (keyword "outer"))-> ,FullOuter <$ try (keyword "full" >> optional (keyword "outer"))-> ,Cross <$ keyword "cross"-> ,Inner <$ optional (keyword "inner")]-> --recurse back to tref to read the table-> <*> (keyword "join" *> tref)-> --now try and read the join condition-> <*> choice [-> Just <$> (JoinOn <$> pos <*> (keyword "on" *> expr))-> ,Just <$> (JoinUsing <$> pos <*> (keyword "using" *> columnNameList))-> ,return Nothing]-> <*> palias-> palias = option NoAlias-> (optionalSuffix-> TableAlias (optional (keyword "as") *> nkwid)-> FullAlias () (parens $ commaSep1 idString))-> nkwid = try $ do-> x <- idString-> --avoid all these keywords as aliases since they can-> --appear immediately following a tableref as the next-> --part of the statement, if we don't do this then lots-> --of things don't parse. Seems a bit inelegant but-> --works for the tests and the test sql files don't know-> --if these should be allowed as aliases without "" or-> --[]-> -- TODO find out what the correct behaviour here is.-> if map toLower x `elem` ["as"-> ,"where"-> ,"except"-> ,"union"-> ,"intersect"-> ,"loop"-> ,"inner"-> ,"on"-> ,"left"-> ,"right"-> ,"full"-> ,"cross"-> ,"join"-> ,"natural"-> ,"order"-> ,"group"-> ,"limit"-> ,"using"-> ,"from"]-> then fail "not keyword"-> else return x-> values = Values <$> (pos <* keyword "values") <*> commaSep1 (parens $ commaSep1 expr)--> optParens :: ParsecT [Token] ParseState Identity a-> -> ParsecT [Token] ParseState Identity a-> optParens p = try (parens p) <|> p--= insert, update and delete--insert statement: supports option column name list,-multiple rows to insert and insert from select statements--> insert :: ParsecT [Token] ParseState Identity Statement-> insert = Insert-> <$> pos <* keyword "insert" <* keyword "into"-> <*> idString-> <*> option [] (try columnNameList)-> <*> selectExpression-> <*> tryOptionMaybe returning--> update :: ParsecT [Token] ParseState Identity Statement-> update = Update-> <$> pos <* keyword "update"-> <*> idString-> <*> (keyword "set" *> commaSep1 setClause)-> <*> tryOptionMaybe whereClause-> <*> tryOptionMaybe returning-> where-> setClause = choice-> [RowSetClause <$> pos-> <*> parens (commaSep1 idString)-> <*> (symbol "=" *> parens (commaSep1 expr))-> ,SetClause <$> pos-> <*> idString-> <*> (symbol "=" *> expr)]--> delete :: ParsecT [Token] ParseState Identity Statement-> delete = Delete-> <$> pos <* keyword "delete" <* keyword "from"-> <*> idString-> <*> tryOptionMaybe whereClause-> <*> tryOptionMaybe returning--> truncateSt :: ParsecT [Token] ParseState Identity Statement-> truncateSt =-> Truncate-> <$> pos <* keyword "truncate" <* optional (keyword "table")-> <*> commaSep1 idString-> <*> option ContinueIdentity (choice [-> ContinueIdentity <$ (keyword "continue"-> <* keyword "identity")-> ,RestartIdentity <$ (keyword "restart"-> <* keyword "identity")])-> <*> cascade--> copy :: ParsecT [Token] ParseState Identity Statement-> copy = do-> p <- pos-> keyword "copy"-> tableName <- idString-> cols <- option [] (parens $ commaSep1 idString)-> keyword "from"-> src <- choice [-> CopyFilename <$> extrStr <$> stringLit-> ,Stdin <$ keyword "stdin"]-> return $ Copy p tableName cols src--> copyData :: ParsecT [Token] ParseState Identity Statement-> copyData = CopyData <$> pos <*> mytoken (\tok ->-> case tok of-> CopyPayloadTok n -> Just n-> _ -> Nothing)--> set :: ParsecT [Token] ParseState Identity Statement-> set = Set <$> pos-> <*> (keyword "set" *> idString)-> <*> ((keyword "to" <|> symbol "=") *>-> commaSep1 sv)-> where-> sv = choice [-> SetStr <$> pos <*> stringN-> ,SetId <$> pos <*> idString-> ,SetNum <$> pos <*> ((fromInteger <$> integer) <|> float)]--> notify :: ParsecT [Token] ParseState Identity Statement-> notify = Notify <$> pos-> <*> (keyword "notify" *> idString)--= ddl--> createTable :: ParsecT [Token] ParseState Identity Statement-> createTable = do-> p <- pos-> keyword "table"-> tname <- idString-> choice [-> CreateTableAs p tname <$> (keyword "as" *> selectExpression)-> ,uncurry (CreateTable p tname) <$> readAttsAndCons]-> where-> --parse our unordered list of attribute defs or constraints, for-> --each line want to try the constraint parser first, then the-> --attribute parser, so we need the swap to feed them in the-> --right order into createtable-> readAttsAndCons = parens (swap <$> multiPerm-> (try tableConstraint)-> tableAtt-> (symbol ","))-> where swap (a,b) = (b,a)-> tableAtt = AttributeDef-> <$> pos-> <*> idString-> <*> typeName-> <*> tryOptionMaybe (keyword "default" *> expr)-> <*> many rowConstraint-> rowConstraint = do-> p <- pos-> cn <- option "" (keyword "constraint" *> idString)-> choice [-> RowUniqueConstraint p cn <$ keyword "unique"-> ,RowPrimaryKeyConstraint p cn <$ keyword "primary" <* keyword "key"-> ,RowCheckConstraint p cn <$> (keyword "check" *> parens expr)-> ,NullConstraint p cn <$ keyword "null"-> ,NotNullConstraint p cn <$ (keyword "not" <* keyword "null")-> ,RowReferenceConstraint p cn-> <$> (keyword "references" *> idString)-> <*> option Nothing (try $ parens $ Just <$> idString)-> <*> onDelete-> <*> onUpdate-> ]--> onDelete,onUpdate :: ParsecT [Token] ParseState Identity Cascade-> onDelete = onSomething "delete"-> onUpdate = onSomething "update"-> onSomething :: String -> ParsecT [Token] ParseState Identity Cascade-> onSomething k = option Restrict $ try $ keyword "on"-> *> keyword k *> cascade--> tableConstraint :: ParsecT [Token] ParseState Identity Constraint-> tableConstraint = do-> p <- pos-> cn <- option "" (keyword "constraint" *> option "" conName)-> choice [-> UniqueConstraint p cn-> <$> try (keyword "unique" *> optParens columnNameList)-> ,PrimaryKeyConstraint p cn-> <$> try (keyword "primary" *> keyword "key"-> *> choice [-> (:[]) <$> idString-> ,parens (commaSep1 idString)])-> ,CheckConstraint p cn-> <$>try (keyword "check" *> parens expr)-> ,ReferenceConstraint p cn-> <$> try (keyword "foreign" *> keyword "key"-> *> parens (commaSep1 idString))-> <*> (keyword "references" *> idString)-> <*> option [] (parens $ commaSep1 idString)-> <*> onUpdate-> <*> onDelete]-> where-> conName = try $ do-> x <- idString-> if map toLower x `elem` [-> "unique"-> ,"primary"-> ,"check"-> ,"foreign"-> ,"references"]-> then fail "not keyword"-> else return x---> alterTable :: ParsecT [Token] ParseState Identity Statement-> alterTable = AlterTable <$> (pos <* keyword "table" <* optional (keyword "only"))-> <*> idString-> <*> many1 action-> where action = choice [-> AlterColumnDefault-> <$> (pos <* keyword "alter" <* keyword "column")-> <*> idString-> <*> (keyword "set" *> keyword "default" *> expr)-> ,AddConstraint-> <$> (pos <* keyword "add")-> <*> tableConstraint]--> createType :: ParsecT [Token] ParseState Identity Statement-> createType = CreateType-> <$> pos <* keyword "type"-> <*> idString-> <*> (keyword "as" *> parens (commaSep1 typeAtt))-> where-> typeAtt = TypeAttDef <$> pos <*> idString <*> typeName--> createSequence :: ParsecT [Token] ParseState Identity Statement-> createSequence = do-> p <- pos-> keyword "sequence"-> nm <- idString-> (stw, incr, mx, mn, c) <- permute ((,,,,) <$?> (1,startWith)-> <|?> (1,increment)-> <|?> ((2::Integer) ^ (63::Integer) - 1, maxi)-> <|?> (1, mini)-> <|?> (1, cache))-> return $ CreateSequence p nm incr mn mx stw c-> where-> startWith = keyword "start" *> optional (keyword "with") *> integer-> increment = keyword "increment" *> optional (keyword "by") *> integer-> maxi = (2::Integer) ^ (63::Integer) - 1 <$ try (keyword "no" <* keyword "maxvalue")-> mini = 1 <$ try (keyword "no" <* keyword "minvalue")-> cache = keyword "cache" *> integer--> alterSequence :: ParsecT [Token] ParseState Identity Statement-> alterSequence = AlterSequence <$> pos-> <*> (keyword "sequence" *> idString)-> <*> (keyword "owned" *> keyword "by" *> idString)--create function, support sql functions and plpgsql functions. Parses-the body in both cases and provides a statement list for the body-rather than just a string.--> createFunction :: ParsecT [Token] ParseState Identity Statement-> createFunction = do-> p <- pos-> keyword "function"-> fnName <- idString-> params <- parens $ commaSep param-> retType <- keyword "returns" *> typeName-> ((bodypos,body), lang,vol) <--> permute ((,,) <$$> parseAs-> <||> readLang-> <|?> (Volatile,pVol))-> case parseBody lang body bodypos of-> Left er -> fail er-> Right (q,b) -> return $ CreateFunction p fnName params retType lang q b vol-> where-> parseAs = do-> keyword "as"-> bodypos <- getAdjustedPosition-> body <- stringLit-> return (bodypos,body)-> pVol = matchAKeyword [("volatile", Volatile)-> ,("stable", Stable)-> ,("immutable", Immutable)]-> readLang = keyword "language" *> matchAKeyword [("plpgsql", Plpgsql)-> ,("sql",Sql)]-> parseBody :: Language -> Expression -> MySourcePos -> Either String (String, FnBody)-> parseBody lang body bodypos@(fileName,line,col) =-> case (parseIt-> (lexSqlTextWithPosition fileName line col (extrStr body))-> (functionBody lang)-> fileName-> (Just (line,col))-> (extrStr body)-> [bodypos]) of-> Left er@(ParseErrorExtra _ _ _) -> Left $ show er-> Right body' -> Right (quoteOfString body, body')--sql function is just a list of statements, the last one has the-trailing semicolon optional--> functionBody Sql = do-> p <- pos-> a <- many (try $ sqlStatement True)-> -- this makes my head hurt, should probably write out-> -- more longhand-> SqlFnBody p <$> option a ((\b -> (a++[b])) <$> sqlStatement False)--plpgsql function has an optional declare section, plus the statements-are enclosed in begin ... end; (semi colon after end is optional(--> functionBody Plpgsql =-> PlpgsqlFnBody-> <$> pos-> <*> option [] declarePart-> <*> statementPart-> where-> statementPart = keyword "begin"-> *> many plPgsqlStatement-> <* keyword "end" <* optional (symbol ";") <* eof-> declarePart = keyword "declare"-> *> manyTill (try varDef) (lookAhead $ keyword "begin")--params to a function--> param :: ParsecT [Token] ParseState Identity ParamDef-> param = choice [-> try (ParamDef <$> pos <*> idString <*> typeName)-> ,ParamDefTp <$> pos <*> typeName]--variable declarations in a plpgsql function--> varDef :: ParsecT [Token] ParseState Identity VarDef-> varDef = VarDef-> <$> pos-> <*> idString-> <*> typeName-> <*> tryOptionMaybe ((symbol ":=" <|> symbol "=")*> expr) <* symbol ";"---> createView :: ParsecT [Token] ParseState Identity Statement-> createView = CreateView-> <$> pos <* keyword "view"-> <*> idString-> <*> (keyword "as" *> selectExpression)--> createDomain :: ParsecT [Token] ParseState Identity Statement-> createDomain = CreateDomain-> <$> pos <* keyword "domain"-> <*> idString-> <*> (tryOptionMaybe (keyword "as") *> typeName)-> <*> option "" (keyword "constraint" *> idString)-> <*> tryOptionMaybe (keyword "check" *> parens expr)--> dropSomething :: ParsecT [Token] ParseState Identity Statement-> dropSomething = do-> p <- pos-> x <- try (choice [-> Domain <$ keyword "domain"-> ,Type <$ keyword "type"-> ,Table <$ keyword "table"-> ,View <$ keyword "view"-> ])-> (i,e,r) <- parseDrop idString-> return $ DropSomething p x i e r--> dropFunction :: ParsecT [Token] ParseState Identity Statement-> dropFunction = do-> p <- pos-> keyword "function"-> (i,e,r) <- parseDrop pFun-> return $ DropFunction p i e r-> where-> pFun = (,) <$> idString-> <*> parens (many typeName)--> parseDrop :: ParsecT [Token] ParseState Identity a-> -> ParsecT [Token] ParseState Identity (IfExists, [a], Cascade)-> parseDrop p = (,,)-> <$> ifExists-> <*> commaSep1 p-> <*> cascade-> where-> ifExists = option Require-> (try $ IfExists <$ (keyword "if"-> *> keyword "exists"))--> createLanguage :: ParsecT [Token] ParseState Identity Statement-> createLanguage =-> CreateLanguage <$> pos-> <*> (optional (keyword "procedural") *>-> keyword "language" *>-> idString)--> createTrigger :: ParsecT [Token] ParseState Identity Statement-> createTrigger =-> CreateTrigger <$> pos-> <*> (keyword "trigger" *> idString)-> <*> twhen-> <*> tevents-> <*> (keyword "on" *> idString)-> <*> tfiring-> <*> (keyword "execute" *> keyword "procedure"-> *> idString)-> <*> parens (commaSep expr)-> where-> twhen = choice [TriggerBefore <$ keyword "before"-> ,TriggerAfter <$ keyword "after"]-> tevents :: ParsecT [Token] ParseState Identity [TriggerEvent]-> tevents = sepBy1 (choice [-> TInsert <$ keyword "insert"-> ,TUpdate <$ keyword "update"-> ,TDelete <$ keyword "delete"]) (keyword "or")-> tfiring = option EachStatement-> (keyword "for" *> optional (keyword "each") *>-> choice [-> EachRow <$ keyword "row"-> ,EachStatement <$ keyword "statement"])--[ FOR [ EACH ] { ROW | STATEMENT } ]-- | CreateTrigger ann:Annotation- name:String- wh : TriggerWhen- events: {[TriggerEvent]}- tbl : String- firing : TriggerFire- fnName : String- fnArgs : {[Expression]}--================================================================================--= component parsers for sql statements--> whereClause :: ParsecT [Token] ParseState Identity Expression-> whereClause = keyword "where" *> expr--selectlist and selectitem: the bit between select and from-check for into either before the whole list of select columns-or after the whole list--> selectList :: ParsecT [Token] ParseState Identity SelectList-> selectList =-> pos >>= \p ->-> choice [-> flip (SelectList p) <$> readInto <*> itemList-> ,SelectList p <$> itemList <*> option [] readInto]-> where-> readInto = keyword "into" *> commaSep1 idString-> itemList = commaSep1 selectItem-> selectItem = pos >>= \p ->-> optionalSuffix-> (SelExp p) expr-> (SelectItem p) () (keyword "as" *> idString)--> returning :: ParsecT [Token] ParseState Identity SelectList-> returning = keyword "returning" *> selectList--> columnNameList :: ParsecT [Token] ParseState Identity [String]-> columnNameList = parens $ commaSep1 idString--> typeName :: ParsecT [Token] ParseState Identity TypeName-> typeName = choice [-> SetOfTypeName <$> pos <*> (keyword "setof" *> typeName)-> ,do-> p <- pos-> s <- map toLower <$> pTypeNameString-> choice [-> PrecTypeName p s <$> parens integer-> ,ArrayTypeName p (SimpleTypeName p s) <$ symbol "[" <* symbol "]"-> ,return $ SimpleTypeName p s]]-> where-> --todo: add special cases for the other type names with spaces in them-> pTypeNameString = ("double precision" <$ try (keyword "double"-> <* keyword "precision"))-> <|> idString--> cascade :: ParsecT [Token] ParseState Identity Cascade-> cascade = option Restrict (choice [-> Restrict <$ keyword "restrict"-> ,Cascade <$ keyword "cascade"])--================================================================================--= plpgsql statements--> plPgsqlStatement :: ParsecT [Token] ParseState Identity Statement-> plPgsqlStatement =-> sqlStatement True-> <|> (choice [-> continue-> ,execute-> ,caseStatement-> ,assignment-> ,ifStatement-> ,returnSt-> ,raise-> ,forStatement-> ,whileStatement-> ,perform-> ,nullStatement]-> <* symbol ";")--> nullStatement :: ParsecT [Token] ParseState Identity Statement-> nullStatement = NullStatement <$> (pos <* keyword "null")--> continue :: ParsecT [Token] ParseState Identity Statement-> continue = ContinueStatement <$> (pos <* keyword "continue")--> perform :: ParsecT [Token] ParseState Identity Statement-> perform = Perform <$> (pos <* keyword "perform") <*> expr--> execute :: ParsecT [Token] ParseState Identity Statement-> execute = pos >>= \p -> keyword "execute" >>-> optionalSuffix-> (Execute p) expr-> (ExecuteInto p) () readInto-> where-> readInto = keyword "into" *> commaSep1 idString--> assignment :: ParsecT [Token] ParseState Identity Statement-> assignment = Assignment-> <$> pos-> -- put the := in the first try to attempt to get a-> -- better error if the code looks like malformed-> -- assignment statement-> <*> try (idString <* (symbol ":=" <|> symbol "="))-> <*> expr--> returnSt :: ParsecT [Token] ParseState Identity Statement-> returnSt = pos >>= \p -> keyword "return" >>-> choice [-> ReturnNext p <$> (keyword "next" *> expr)-> ,ReturnQuery p <$> (keyword "query" *> selectExpression)-> ,Return p <$> tryOptionMaybe expr]--> raise :: ParsecT [Token] ParseState Identity Statement-> raise = pos >>= \p -> keyword "raise" >>-> Raise p-> <$> raiseType-> <*> (extrStr <$> stringLit)-> <*> option [] (symbol "," *> commaSep1 expr)-> where-> raiseType = matchAKeyword [("notice", RNotice)-> ,("exception", RException)-> ,("error", RError)]--> forStatement :: ParsecT [Token] ParseState Identity Statement-> forStatement = do-> p <- pos-> keyword "for"-> start <- idString-> keyword "in"-> choice [(ForSelectStatement p start <$> try selectExpression <*> theRest)-> ,(ForIntegerStatement p start-> <$> expr-> <*> (symbol ".." *> expr)-> <*> theRest)]-> where-> theRest = keyword "loop" *> many plPgsqlStatement-> <* keyword "end" <* keyword "loop"--> whileStatement :: ParsecT [Token] ParseState Identity Statement-> whileStatement = WhileStatement-> <$> (pos <* keyword "while")-> <*> (expr <* keyword "loop")-> <*> many plPgsqlStatement <* keyword "end" <* keyword "loop"--> ifStatement :: ParsecT [Token] ParseState Identity Statement-> ifStatement = If-> <$> (pos <* keyword "if")-> <*> (ifPart <:> elseifParts)-> <*> (elsePart <* endIf)-> where-> ifPart = expr <.> (thn *> many plPgsqlStatement)-> elseifParts = many ((elseif *> expr) <.> (thn *> many plPgsqlStatement))-> elsePart = option [] (keyword "else" *> many plPgsqlStatement)-> endIf = keyword "end" <* keyword "if"-> thn = keyword "then"-> elseif = keyword "elseif"-> --might as well throw this in as well after all that-> -- can't do <,> unfortunately, so use <.> instead-> (<.>) a b = (,) <$> a <*> b--> caseStatement :: ParsecT [Token] ParseState Identity Statement-> caseStatement =-> CaseStatement <$> (pos <* keyword "case")-> <*> expr-> <*> many whenSt-> <*> option [] (keyword "else" *> many plPgsqlStatement)-> <* keyword "end" <* keyword "case"-> where-> whenSt = keyword "when" >>-> (,) <$> commaSep1 expr-> <*> (keyword "then" *> many plPgsqlStatement)--================================================================================--= expressions--This is the bit that makes it the most obvious that I don't really-know haskell, parsing theory or parsec ... robbed a parsing example-from haskell-cafe and mainly just kept changing it until it seemed to-work--> expr :: ParsecT [Token] ParseState Identity Expression-> expr = buildExpressionParser table factor-> <?> "expression"--> factor :: ParsecT [Token] ParseState Identity Expression-> factor =--First job is to take care of forms which start as a regular-expression, and then add a suffix on--> threadOptionalSuffixes fct [castSuffix-> ,betweenSuffix-> ,arraySubSuffix]-> where-> fct = choice [--order these so the ones which can be valid prefixes of others appear-further down the list (used to be a lot more important when there-wasn't a separate lexer), probably want to refactor this to use the-optionalsuffix parsers to improve speed.--One little speed optimisation, to help with pretty printed code which-can contain a lot of parens - check for nested ((-This little addition speeds up ./ParseFile.lhs sqltestfiles/system.sql-on my system from ~4 minutes to ~4 seconds (most of the 4s is probably-compilation overhead).--> try (lookAhead (symbol "(" >> symbol "(")) >> parens expr--start with the factors which start with parens - eliminate scalar-subqueries since they're easy to distinguish from the others then do in-predicate before row constructor, since an in predicate can start with-a row constructor looking thing, then finally vanilla parens--> ,scalarSubQuery-> ,try $ threadOptionalSuffix rowCtor inPredicateSuffix-> ,parens expr--try a few random things which can't start a different expression--> ,positionalArg-> ,placeholder-> ,stringLit--> ,floatLit-> ,integerLit--put the factors which start with keywords before the ones which start-with a function, so we don't try an parse a keyword as a function name--> ,caseParse-> ,exists-> ,booleanLit-> ,nullLit-> ,arrayLit-> ,castKeyword-> ,substring--now do identifiers, functions, and window functions (each is a prefix-to the next one)--> ,threadOptionalSuffixes-> identifier-> [inPredicateSuffix-> ,\l -> threadOptionalSuffix (functionCallSuffix l) windowFnSuffix]]--== operator table--proper hacky, but sort of does the job-the 'missing' notes refer to pg operators which aren't yet supported,-or supported in a different way (e.g. cast uses the type name parser-for one of it's argument, not the expression parser - I don't know if-there is a better way of doing this but there usually is in parsec)--pg's operator table is on this page:-http://www.postgresql.org/docs/8.4/interactive/sql-syntax-lexical.html#SQL-SYNTAX-OPERATORS--will probably need something more custom to handle full range of sql-syntactical novelty, in particular the precedence rules mix these-operators up with irregular syntax operators, you can create new-operators during parsing, and some operators are prefix/postfix or-binary depending on the types of their operands (how do you parse-something like this?)--The full list of operators from a standard template1 database should-be used here.--> table :: [[Operator [Token] ParseState Identity Expression]]-> table = [--[binary "::" (BinOpCall Cast) AssocLeft]-> --missing [] for array element select-> [prefix "-" "u-"]-> ,[binary "^" AssocLeft]-> ,[binary "*" AssocLeft-> ,idHackBinary "*" AssocLeft-> ,binary "/" AssocLeft-> ,binary "%" AssocLeft]-> ,[binary "+" AssocLeft-> ,binary "-" AssocLeft]-> --should be is isnull and notnull-> ,[postfixks ["is", "not", "null"] "!isnotnull"-> ,postfixks ["is", "null"] "!isnull"]-> --other operators all added in this list according to the pg docs:-> ,[binary "<->" AssocNone-> ,binary "<=" AssocRight-> ,binary ">=" AssocRight-> ,binary "||" AssocLeft-> ,prefix "@" "@"-> ]-> --in should be here, but is treated as a factor instead-> --between-> --overlaps-> ,[binaryk "like" "!like" AssocNone-> ,binarycust (symbol "!=") "<>" AssocNone]-> --(also ilike similar)-> ,[binary "<" AssocNone-> ,binary ">" AssocNone]-> ,[binary "=" AssocRight-> ,binary "<>" AssocNone]-> ,[notNot-> ,prefixk "not" "!not"-> ]-> ,[binaryk "and" "!and" AssocLeft-> ,binaryk "or" "!or" AssocLeft]]-> where-> binary s = binarycust (symbol s) s-> -- '*' is lexed as an id token rather than a symbol token, so-> -- work around here-> idHackBinary s = binarycust (keyword s) s-> binaryk = binarycust . keyword-> prefix = unaryCust Prefix . symbol-> prefixk = unaryCust Prefix . keyword-> postfixks = unaryCust Postfix . mapM_ keyword-> binarycust opParse t =-> Infix $ try $ do-> f <- FunCall <$> pos <*> (t <$ opParse)-> return (\l -> \m -> f [l,m])-> unaryCust ctor opParse t =-> ctor $ try $ do-> f <- FunCall <$> pos <*> (t <$ opParse)-> return (\l -> f [l])-> --hack - haven't worked out why parsec buildexpression parser won't parse-> -- something like "not not EXPR" without parens so hack here-> notNot = Prefix (try $ do-> p1 <- pos-> keyword "not"-> p2 <- pos-> keyword "not"-> return (\l -> FunCall p1 "!not" [FunCall p2 "!not" [l]]))--== factor parsers--I think the lookahead is used in an attempt to help the error messages.--> scalarSubQuery :: ParsecT [Token] ParseState Identity Expression-> scalarSubQuery = try (symbol "(" *> lookAhead (keyword "select")) >>-> ScalarSubQuery-> <$> pos-> <*> selectExpression <* symbol ")"--in predicate - an identifier or row constructor followed by 'in'-then a list of expressions or a subselect--> inPredicateSuffix :: Expression -> ParsecT [Token] ParseState Identity Expression-> inPredicateSuffix e =-> InPredicate-> <$> pos-> <*> return e-> <*> option True (False <$ keyword "not")-> <*> (keyword "in" *> parens ((InSelect <$> pos <*> selectExpression)-> <|>-> (InList <$> pos <*> commaSep1 expr)))--row ctor: one of-row ()-row (expr)-row (expr, expr1, ...)-(expr, expr2,...) [implicit (no row keyword) version, at least two elements- must be present]--(expr) parses to just expr rather than row(expr)-and () is a syntax error.--> rowCtor :: ParsecT [Token] ParseState Identity Expression-> rowCtor = FunCall-> <$> pos-> <*> return "!rowctor"-> <*> choice [-> keyword "row" *> parens (commaSep expr)-> ,parens $ commaSep2 expr]--> floatLit :: ParsecT [Token] ParseState Identity Expression-> floatLit = FloatLit <$> pos <*> float--> integerLit :: ParsecT [Token] ParseState Identity Expression-> integerLit = IntegerLit <$> pos <*> integer--case - only supports 'case when condition' flavour and not 'case-expression when value' currently--> caseParse :: ParsecT [Token] ParseState Identity Expression-> caseParse = do-> p <- pos-> keyword "case"-> choice [-> try $ CaseSimple p <$> expr-> <*> many whenParse-> <*> tryOptionMaybe (keyword "else" *> expr)-> <* keyword "end"-> ,Case p <$> many whenParse-> <*> tryOptionMaybe (keyword "else" *> expr)-> <* keyword "end"]-> where-> whenParse = (,) <$> (keyword "when" *> commaSep1 expr)-> <*> (keyword "then" *> expr)--> exists :: ParsecT [Token] ParseState Identity Expression-> exists = Exists <$> pos <* keyword "exists" <*> parens selectExpression--> booleanLit :: ParsecT [Token] ParseState Identity Expression-> booleanLit = BooleanLit <$> pos <*> (True <$ keyword "true"-> <|> False <$ keyword "false")--> nullLit :: ParsecT [Token] ParseState Identity Expression-> nullLit = NullLit <$> pos <* keyword "null"--> arrayLit :: ParsecT [Token] ParseState Identity Expression-> arrayLit = FunCall <$> pos <* keyword "array"-> <*> return "!arrayctor"-> <*> squares (commaSep expr)--> arraySubSuffix :: Expression -> ParsecT [Token] ParseState Identity Expression-> arraySubSuffix e = case e of-> Identifier _ "array" -> fail "can't use array as identifier name"-> _ -> FunCall <$> pos-> <*> return "!arraysub"-> <*> ((e:) <$> squares (commaSep1 expr))--supports basic window functions of the form-fn() over ([partition bit]? [order bit]?)--frame clauses todo:-range unbounded preceding-range between unbounded preceding and current row-range between unbounded preceding and unbounded following-rows unbounded preceding-rows between unbounded preceding and current row-rows between unbounded preceding and unbounded following--> windowFnSuffix :: Expression -> ParsecT [Token] ParseState Identity Expression-> windowFnSuffix e = WindowFn <$> pos <*> return e-> <*> (keyword "over" *> (symbol "(" *> option [] partitionBy))-> <*> option [] orderBy1-> <*> option Asc (try $ choice [-> Asc <$ keyword "asc"-> ,Desc <$ keyword "desc"])-> <*> frm-> <* symbol ")"-> where-> orderBy1 = keyword "order" *> keyword "by" *> commaSep1 expr-> partitionBy = keyword "partition" *> keyword "by" *> commaSep1 expr-> frm = option FrameUnboundedPreceding $ choice $ map (\(a,b) -> a <$ try (ks b)) [-> (FrameUnboundedPreceding, ["range","unbounded","preceding"])-> ,(FrameUnboundedPreceding, ["range","between","unbounded","preceding","and","current","row"])-> ,(FrameUnboundedFull, ["range","between","unbounded","preceding","and","unbounded","following"])-> ,(FrameUnboundedFull, ["rows","between","unbounded","preceding","and","unbounded","following"])-> ,(FrameRowsUnboundedPreceding, ["rows","unbounded","preceding"])-> ,(FrameRowsUnboundedPreceding, ["rows","between","unbounded","preceding","and","current","row"])]-> ks = mapM keyword--> betweenSuffix :: Expression -> ParsecT [Token] ParseState Identity Expression-> betweenSuffix a = do-> p <- pos-> keyword "between"-> b <- dodgyParseElement-> keyword "and"-> c <- dodgyParseElement-> return $ FunCall p "!between" [a,b,c]-> --can't use the full expression parser at this time-> --because of a conflict between the operator 'and' and-> --the 'and' part of a between--From postgresql src/backend/parser/gram.y-- * We have two expression types: a_expr is the unrestricted kind, and- * b_expr is a subset that must be used in some places to avoid shift/reduce- * conflicts. For example, we can't do BETWEEN as "BETWEEN a_expr AND a_expr"- * because that use of AND conflicts with AND as a boolean operator. So,- * b_expr is used in BETWEEN and we remove boolean keywords from b_expr.- *- * Note that '(' a_expr ')' is a b_expr, so an unrestricted expression can- * always be used by surrounding it with parens.--TODO: copy this approach here.--> where-> dodgyParseElement = factor--> functionCallSuffix :: Expression -> ParsecT [Token] ParseState Identity Expression-> functionCallSuffix (Identifier _ fnName) =-> pos >>= \p -> FunCall p fnName-> <$> parens (optional (keyword "all" <|> keyword "distinct") *> commaSep expr)-> functionCallSuffix s = error $ "internal error: cannot make functioncall from " ++ show s--> castKeyword :: ParsecT [Token] ParseState Identity Expression-> castKeyword = Cast-> <$> pos <* keyword "cast" <* symbol "("-> <*> expr-> <*> (keyword "as" *> typeName <* symbol ")")--> castSuffix :: Expression -> ParsecT [Token] ParseState Identity Expression-> castSuffix ex = pos >>= \p -> Cast p ex <$> (symbol "::" *> typeName)--> substring :: ParsecT [Token] ParseState Identity Expression-> substring = do-> p <- pos-> keyword "substring"-> symbol "("-> a <- expr-> keyword "from"-> b <- expr-> keyword "for"-> c <- expr-> symbol ")"-> return $ FunCall p "!substring" [a,b,c]--> identifier :: ParsecT [Token] ParseState Identity Expression-> identifier = Identifier <$> pos <*> idString--try $ do- > p <- pos- > i <- idString- > if i `elem` ["not"]- > then fail "can't use keyword"- > else return $ Identifier p i--================================================================================--= Utility parsers--== tokeny things--keyword has to not be immediately followed by letters or numbers-(symbols and whitespace are ok) so we know that we aren't reading an-identifier which happens to start with a complete keyword--> keyword :: String -> ParsecT [Token] ParseState Identity ()-> keyword k = mytoken (\tok ->-> case tok of-> IdStringTok i | lcase k == lcase i -> Just ()-> _ -> Nothing)-> where-> lcase = map toLower--> idString :: MyParser String-> idString = mytoken (\tok -> case tok of-> IdStringTok "not" -> Nothing-> IdStringTok i -> Just i-> _ -> Nothing)--> symbol :: String -> ParsecT [Token] ParseState Identity ()-> symbol c = mytoken (\tok -> case tok of-> SymbolTok s | c==s -> Just ()-> _ -> Nothing)--> integer :: MyParser Integer-> integer = mytoken (\tok -> case tok of-> IntegerTok n -> Just n-> _ -> Nothing)--> positionalArg :: ParsecT [Token] ParseState Identity Expression-> positionalArg = PositionalArg [] <$> mytoken (\tok -> case tok of-> PositionalArgTok n -> Just n-> _ -> Nothing)--> placeholder :: ParsecT [Token] ParseState Identity Expression-> placeholder = Placeholder [] <$ symbol "?"---> float :: MyParser Double-> float = mytoken (\tok -> case tok of-> FloatTok n -> Just n-> _ -> Nothing)--> stringLit :: MyParser Expression-> stringLit = mytoken (\tok ->-> case tok of-> StringTok d s -> Just $ StringLit [] d s-> _ -> Nothing)--> stringN :: MyParser String-> stringN = mytoken (\tok ->-> case tok of-> StringTok _ s -> Just s-> _ -> Nothing)---couple of helper functions which extract the actual string-from a StringLD or StringL, and the delimiters which were used-(either ' or a dollar tag)--> extrStr :: Expression -> String-> extrStr (StringLit _ _ s) = s-> extrStr x = error $ "internal error: extrStr not supported for this type " ++ show x--> quoteOfString :: Expression -> String-> quoteOfString (StringLit _ tag _) = tag-> quoteOfString x = error $ "internal error: quoteType not supported for this type " ++ show x--== combinatory things--> parens :: ParsecT [Token] ParseState Identity a-> -> ParsecT [Token] ParseState Identity a-> parens = between (symbol "(") (symbol ")")--> squares :: ParsecT [Token] ParseState Identity a-> -> ParsecT [Token] ParseState Identity a-> squares = between (symbol "[") (symbol "]")--> tryOptionMaybe :: (Stream s m t) =>-> ParsecT s u m a -> ParsecT s u m (Maybe a)-> tryOptionMaybe p = try (optionMaybe p) <|> return Nothing--> commaSep2 :: ParsecT [Token] ParseState Identity a-> -> ParsecT [Token] ParseState Identity [a]-> commaSep2 p = sepBy2 p (symbol ",")--> sepBy2 :: (Stream s m t) =>-> ParsecT s u m a -> ParsecT s u m b -> ParsecT s u m [a]-> sepBy2 p sep = (p <* sep) <:> sepBy1 p sep--> commaSep :: ParsecT [Token] ParseState Identity a-> -> ParsecT [Token] ParseState Identity [a]-> commaSep p = sepBy p (symbol ",")--> commaSep1 :: ParsecT [Token] ParseState Identity a-> -> ParsecT [Token] ParseState Identity [a]-> commaSep1 p = sepBy1 p (symbol ",")--pass a list of pairs of strings and values-try each pair k,v in turn,-if keyword k matches then return v-doesn't really add a lot of value--> matchAKeyword :: [(String, a)] -> ParsecT [Token] ParseState Identity a-> matchAKeyword [] = fail "no matches"-> matchAKeyword ((k,v):kvs) = v <$ keyword k <|> matchAKeyword kvs--parseOptionalSuffix--parse the start of something -> parseResultA,-then parse an optional suffix -> parseResultB-if this second parser succeeds, return fn2 parseResultA parseResultB-else return fn1 parseResultA--e.g.-parsing an identifier in a select list can be-fieldName-or-fieldName as alias-so we can pass-* IdentifierCtor-* identifier (returns aval)-* AliasedIdentifierCtor-* () - looks like a place holder, probably a crap idea-* parser for (as b) (returns bval)-as the args, which I like to ident like:-parseOptionalSuffix- IdentifierCtor identifierParser- AliasedIdentifierCtor () asAliasParser-and we get either-* IdentifierCtor identifierValue-or-* AliasedIdentifierCtor identifierValue aliasValue-as the result depending on whether the asAliasParser-succeeds or not.--probably this concept already exists under a better name in parsing-theory--> optionalSuffix :: (Stream s m t2) =>-> (t1 -> b)-> -> ParsecT s u m t1-> -> (t1 -> a -> b)-> -> ()-> -> ParsecT s u m a-> -> ParsecT s u m b-> optionalSuffix c1 p1 c2 _ p2 = do-> x <- p1-> option (c1 x) (c2 x <$> try p2)--threadOptionalSuffix--parse the start of something -> parseResultA,-then parse an optional suffix, passing parseResultA- to this parser -> parseResultB-return parseResultB is it succeeds, else return parseResultA--sort of like a suffix operator parser where the suffixisable part-is parsed, then if the suffix is there it wraps the suffixisable-part in an enclosing tree node.--parser1 -> tree1-(parser2 tree1) -> maybe tree2-tree2 isnothing ? tree1 : tree2--> threadOptionalSuffix :: ParsecT [tok] st Identity a-> -> (a -> GenParser tok st a)-> -> ParsecT [tok] st Identity a-> threadOptionalSuffix p1 p2 = do-> x <- p1-> option x (try $ p2 x)--I'm pretty sure this is some standard monad operation but I don't know-what. It's a bit like the maybe monad but when you get nothing it-returns the previous result instead of nothing-- if you take the parsing specific stuff out you get:--p1 :: (Monad m) =>- m b -> (b -> m (Maybe b)) -> m b-p1 = do- x <- p1- y <- p2 x- case y of- Nothing -> return x- Just z -> return z-=====--like thread optional suffix, but we pass a list of suffixes in, not-much of a shorthand--> threadOptionalSuffixes :: ParsecT [tok] st Identity a-> -> [a -> GenParser tok st a]-> -> ParsecT [tok] st Identity a-> threadOptionalSuffixes p1 p2s = do-> x <- p1-> option x (try $ choice (map (\l -> l x) p2s))--couldn't work how to to perms so just did this hack instead-e.g.-a1,a2,b1,b2,a2,b3,b4 parses to ([a1,a2,a3],[b1,b2,b3,b4])--> multiPerm :: (Stream s m t) =>-> ParsecT s u m a1-> -> ParsecT s u m a-> -> ParsecT s u m sep-> -> ParsecT s u m ([a1], [a])--> multiPerm p1 p2 sep = do-> (r1, r2) <- unzip <$> sepBy1 parseAorB sep-> return (catMaybes r1, catMaybes r2)-> where-> parseAorB = choice [-> (\x -> (Just x,Nothing)) <$> p1-> ,(\y -> (Nothing, Just y)) <$> p2]--== position stuff--getAdjustedPosition is used to modify the positions within a function-body, to absolute positions within the file being parsed.--> getAdjustedPosition :: ParsecT [Token] ParseState Identity MySourcePos-> getAdjustedPosition = do-> p <- toMySp <$> getPosition-> s <- getState-> case s of-> [] -> return p-> x:_ -> return $ adjustPosition x p--> adjustPosition :: MySourcePos -> MySourcePos -> MySourcePos-> adjustPosition (fn,pl,_) (_,l,c) = (fn,pl+l-1,c)--> pos :: ParsecT [Token] ParseState Identity Annotation-> pos = do-> p <- toSp <$> getPosition-> s <- getState-> case s of-> [] -> return [p]-> x:_ -> return [adjustPos x p]-> where-> toSp sp = A.SourcePos (sourceName sp) (sourceLine sp) (sourceColumn sp)-> adjustPos (fn,pl,_) (A.SourcePos _ l c) = A.SourcePos fn (pl+l-1) c-> adjustPos _ x = error $ "internal error - tried to adjust as sourcepos: " ++ show x--== lexer stuff--> type MyParser = GenParser Token ParseState--> mytoken :: (Tok -> Maybe a) -> MyParser a-> mytoken test-> = token showToken posToken testToken-> where-> showToken (_,tok) = show tok-> posToken (posi,_) = posi-> testToken (_,tok) = test tok--================================================================================--= fixup tree--this is where some generics code is used to transform the parse trees-to alter the nodes used where it's too difficult to do whilst-parsing. The only item at the moment that needs this treatment is te-any/some/all construct which looks like this:-expr operator [any|some|all] (expr)--This gets parsed as-funcall operator [expr1,funcall [any|some|all] [expr2,...]]-and we want to transform it to-liftoperator operator any|some|all [expr1, expr2,...]-not doing anything if the funcall name isn't any,some,all-any other checks are left to the type checking stage-(e.g. there can only be one expression in the expr2 part, and it must-be an array or subselect, etc)--> fixupTree :: Data a => a -> a-> fixupTree =-> transformBi $ \x ->-> case x of-> FunCall an op (expr1:FunCall _ nm expr2s:expr3s)-> | isOperatorName op && map toLower nm `elem` ["any", "some", "all"]-> -> LiftOperator an op flav (expr1:expr2s ++ expr3s)-> where flav = case (map toLower nm) of-> "any" -> LiftAny-> "some" -> LiftAny-> "all" -> LiftAll-> z -> error $ "internal error in parsing lift transform: " ++ z-> x1 -> x1
− Database/HsSqlPpp/PrettyPrinter/AnnotateSource.lhs
@@ -1,125 +0,0 @@-Copyright 2009 Jake Wheat--The purpose of this module is to add annotations in comments to the-original source code, so that we can preserve the original formatting-and comments.--A second goal will be to update these comments if they are already-present, so we can run this process repeatedly on a file and not fill-it with junk, or can e.g. make a few changes to the sql, run this-process, then use source control diff to view how the types, etc. have-changed.---Algorithm design--Get all the annotations ordered by source position. Split the original-text on these points, then zip it and output it.---> {- | Function to pretty print annotation information interspersed-> with original source file, so e.g. you can view types,-> etc. inline in the source whilst preserving the original-> formatting and comments. -}-> module Database.HsSqlPpp.PrettyPrinter.AnnotateSource-> (annotateSource) where--> import Data.List-> import Data.Maybe-> --import Debug.Trace--> import Database.HsSqlPpp.Ast.Ast-> import Database.HsSqlPpp.Ast.Annotation-> import Database.HsSqlPpp.Ast.TypeChecker--> annotateSource :: Bool -> String -> StatementList -> String-> annotateSource doErrs src aast =--Details:--First need better syb so we can get two separate lists of annotations,-one for statements and one for non-statements. This will allow us to-output full information for each statement, but output reduced-information for other nodes - just want to output type error-annotations for now. (This could be made more general by allowing a-different kind of annotation pretty printer depending on the node-type, value or context?)--filter these two lists, mainly to strip all the annotations from the-non-statement annotation list except the source positions and the type-errors.--merge these two lists and sort by source position, then map to get-[(sourceposition, annotation without sourceposition)]--Now we have a list of sourcepositions that we can split the original source with:-0->firstsp, firstsp->secondsp, ... second last sp-> last sp, last sp -> eof--> this produces a [string] from the original source-use a zip:-zip splitSource $ ([]:map snd mungedAnnotationlist)-to get [(string,annotation)]-then do map second prettyPrint over this-to gives us a [(string,string)] which we can concatenate to produce-the output text.--To replace existing comments rather than repeatedly add them:-1) make sure the pretty printed comments have some marker--2) strip all the comments with this marker out after splitting the- string on the annotation source positions, i.e. when we get to- [(string,annotation)] or [(string,string)] stage.---> let allAnn = sortBy ordSps $ getStatementPosStringPairs ++ getTypeErrorPosPairs-> splitPoints = map ((\(SourcePos _ l _) -> l - 1) . fst) allAnn-> splitsSrc = splitAts src splitPoints-> anSrcPairs = zip splitsSrc $ map snd allAnn-> in concatMap (uncurry (++)) anSrcPairs-> -- make sure we get the last bit of the source code-> ++ last splitsSrc-> where-> ordSps :: (AnnotationElement,String) -> (AnnotationElement,String) -> Ordering-> ordSps a b = case (a,b) of-> ((SourcePos _ l c, _),(SourcePos _ l1 c1, _)) -> compare (l,c) (l1,c1)-> _ -> EQ-> getTypeErrorPosPairs :: [(AnnotationElement, String)]-> getTypeErrorPosPairs =-> if doErrs-> then map (\(a,b) -> (a,"\n/*ERROR:" ++ show b ++ "*/\n")) typeErrorsWithPositions-> else []-> where-> typeErrorsWithPositions = mapMaybe (\(a,b) -> case a of-> Nothing -> Nothing-> Just a1 -> Just (a1,b)) typeErrors-> typeErrors = getTypeErrors aast-> getStatementPosStringPairs :: [(AnnotationElement, String)]-> getStatementPosStringPairs =-> let statementAnnotations = map interestingAnn $ getStatementAnnotations aast-> split = mapMaybe (\l -> let notSp = filter (not.isSp) l-> in if notSp == []-> then Nothing-> else Just (find isSp l, notSp)) statementAnnotations-> splitsWithSps = mapMaybe (\(a,b) -> case a of-> Nothing -> Nothing-> Just a1 -> Just (a1,b)) split-> in map (\(a,b) -> (a, "\n/*" ++ show b ++ "*/\n")) splitsWithSps-> where-> interestingAnn anns =-> flip filter anns (\a ->-> case a of-> TypeAnnotation _ -> False-> CatUpdates [] -> False-> _ -> True)--> isSp t = case t of-> SourcePos _ _ _ -> True-> _ -> False-> splitAts :: String -> [Int] -> [String]-> splitAts s splits =-> let slines = lines s-> --make sure we get from the last split to the end of the file-> splits1 = splits ++ [length slines]-> pairs :: [(Int,Int)]-> pairs = zip (0:splits) splits1-> in map (\(st,en) -> unlines $ take (en - st) $ drop st slines) pairs-
− Database/HsSqlPpp/PrettyPrinter/PrettyPrinter.lhs
@@ -1,683 +0,0 @@-Copyright 2009 Jake Wheat--The pretty printer which prints ast nodes from Ast.hs-It uses the hughes pj pretty printer--Produces sort of readable code, but mainly just written to produce-reparsable text. Could do with some work to make the outputted text-layout better.--Not much other comments, since it all should be pretty self evident.--> {- | Functions to convert sql asts to valid SQL source code. Includes-> a function - 'printSqlAnn' - to output the annotations from a tree-> in comments in the outputted SQL source.-> -}-> module Database.HsSqlPpp.PrettyPrinter.PrettyPrinter (-> --convert a sql ast to text-> printSql-> ,printSqlAnn-> --convert a single expression parse node to text-> ,printExpression-> )-> where--> import Text.PrettyPrint-> import Data.Char-> import Data.List--> import Database.HsSqlPpp.Ast.Ast-> import Database.HsSqlPpp.Ast.Annotation-> import Database.HsSqlPpp.Ast.Catalog-> import Database.HsSqlPpp.Utils--================================================================================--Public functions--> -- | convert an ast back to valid SQL source, it's also almost human readable.-> printSql :: StatementList -> String-> printSql = printSqlAnn (const "")--> -- | convert the ast back to valid source, and convert any annotations to-> -- text using the function provided and interpolate the output of this function-> -- (inside comments) with the SQL source.-> printSqlAnn :: (Annotation -> String) -> StatementList -> String-> printSqlAnn f ast = render $ vcat (map (convStatement f) ast) <> text "\n"--> -- | Testing function, pretty print an expression-> printExpression :: Expression -> String-> printExpression = render . convExp--================================================================================--Conversion routines - convert Sql asts into Docs-= Statements--> convStatement :: (Annotation -> String) -> Statement -> Doc--== selects--> convStatement ca (SelectStatement ann s) =-> convPa ca ann <+>-> convSelectExpression True True s <> statementEnd--== dml--> convStatement pa (Insert ann tb atts idata rt) =-> convPa pa ann <+>-> text "insert into" <+> text tb-> <+> ifNotEmpty (parens . hcatCsvMap text) atts-> $+$ convSelectExpression True True idata-> $+$ convReturning rt-> <> statementEnd--> convStatement ca (Update ann tb scs wh rt) =-> convPa ca ann <+>-> text "update" <+> text tb <+> text "set"-> <+> hcatCsvMap convSetClause scs-> <+> convWhere wh-> $+$ convReturning rt <> statementEnd-> where-> convSetClause (SetClause _ att ex) = text att <+> text "=" <+> convExp ex-> convSetClause (RowSetClause _ atts exs) =-> parens (hcatCsvMap text atts)-> <+> text "="-> <+> parens (hcatCsvMap convExp exs)--> convStatement ca (Delete ann tbl wh rt) =-> convPa ca ann <+>-> text "delete from" <+> text tbl-> <+> convWhere wh-> $+$ convReturning rt-> <> statementEnd--> convStatement ca (Truncate ann names ri casc) =-> convPa ca ann <+>-> text "truncate"-> <+> hcatCsvMap text names-> <+> text (case ri of-> RestartIdentity -> "restart identity"-> ContinueIdentity -> "continue identity")-> <+> convCasc casc-> <> statementEnd--== ddl--> convStatement ca (CreateTable ann tbl atts cns) =-> convPa ca ann <+>-> text "create table"-> <+> text tbl <+> lparen--> $+$ nest 2 (vcat (csv (map convAttDef atts ++ map convCon cns)))-> $+$ rparen <> statementEnd-> where-> convAttDef (AttributeDef _ n t def cons) =-> text n <+> convTypeName t-> <+> maybeConv (\e -> text "default" <+> convExp e) def-> <+> hsep (map (\e -> (case e of-> NullConstraint _ cn -> mname cn <+> text "null"-> NotNullConstraint _ cn -> mname cn <+> text "not null"-> RowCheckConstraint _ cn ew ->-> mname cn <+> text "check" <+> parens (convExp ew)-> RowUniqueConstraint _ cn -> mname cn <+> text "unique"-> RowPrimaryKeyConstraint _ cn -> mname cn <+> text "primary key"-> RowReferenceConstraint _ cn tb att ondel onupd ->-> mname cn <+>-> text "references" <+> text tb-> <+> maybeConv (parens . text) att-> <+> text "on delete" <+> convCasc ondel-> <+> text "on update" <+> convCasc onupd-> )) cons)--> convStatement ca (AlterTable ann name act) =-> convPa ca ann <+>-> text "alter table" <+> text name-> <+> hcatCsvMap convAct act <> statementEnd-> where-> convAct (AlterColumnDefault _ nm def) =-> text "alter column" <+> text nm <+> text "set default" <+> convExp def-> convAct (AddConstraint _ con) =-> text "add constraint" <+> convCon con--> convStatement ca (CreateSequence ann nm incr _ _ start cache) =-> convPa ca ann <+>-> text "create sequence" <+> text nm <+>-> text "increment" <+> text (show incr) <+>-> text "no minvalue" <+>-> text "no maxvalue" <+>-> text "start" <+> text (show start) <+>-> text "cache" <+> text (show cache) <> statementEnd--> convStatement ca (AlterSequence ann nm o) =-> convPa ca ann <+>-> text "alter sequence" <+> text nm-> <+> text "owned by" <+> text o <> statementEnd---> convStatement ca (CreateTableAs ann t sel) =-> convPa ca ann <+>-> text "create table"-> <+> text t <+> text "as"-> $+$ convSelectExpression True True sel-> <> statementEnd--> convStatement ca (CreateFunction ann name args retType lang qt body vol) =-> convPa ca ann <+>-> text "create function" <+> text name-> <+> parens (hcatCsvMap convParamDef args)-> <+> text "returns" <+> convTypeName retType <+> text "as" <+> text qt-> $+$ convFnBody body-> $+$ text qt <+> text "language"-> <+> text (case lang of-> Sql -> "sql"-> Plpgsql -> "plpgsql")-> <+> text (case vol of-> Volatile -> "volatile"-> Stable -> "stable"-> Immutable -> "immutable")-> <> statementEnd-> where-> convFnBody (SqlFnBody ann1 sts) =-> convPa ca ann1 <+>-> convNestedStatements ca sts-> convFnBody (PlpgsqlFnBody ann1 decls sts) =-> convPa ca ann1 <+>-> ifNotEmpty (\l -> text "declare"-> $+$ nest 2 (vcat $ map convVarDef l)) decls-> $+$ text "begin"-> $+$ convNestedStatements ca sts-> $+$ text "end;"-> convParamDef (ParamDef _ n t) = text n <+> convTypeName t-> convParamDef (ParamDefTp _ t) = convTypeName t-> convVarDef (VarDef _ n t v) =-> text n <+> convTypeName t-> <+> maybeConv (\x -> text ":=" <+> convExp x) v <> semi----> convStatement ca (CreateView ann name sel) =-> convPa ca ann <+>-> text "create view" <+> text name <+> text "as"-> $+$ nest 2 (convSelectExpression True True sel) <> statementEnd--> convStatement ca (CreateDomain ann name tp n ex) =-> convPa ca ann <+>-> text "create domain" <+> text name <+> text "as"-> <+> convTypeName tp <+> cname <+> checkExp ex <> statementEnd-> where-> checkExp = maybeConv (\e -> text "check" <+> parens (convExp e))-> cname = if n == ""-> then empty-> else text "constraint" <+> text n--> convStatement ca (DropFunction ann ifExists fns casc) =-> convPa ca ann <+>-> text "drop function"-> <+> convIfExists ifExists-> <+> hcatCsvMap doFunction fns-> <+> convCasc casc-> <> statementEnd-> where-> doFunction (name,types) = text name <> parens (hcatCsvMap convTypeName types)--> convStatement ca (DropSomething ann dropType ifExists names casc) =-> convPa ca ann <+>-> text "drop"-> <+> text (case dropType of-> Table -> "table"-> View -> "view"-> Domain -> "domain"-> Type -> "type")-> <+> convIfExists ifExists-> <+> hcatCsvMap text names-> <+> convCasc casc-> <> statementEnd--> convStatement ca (CreateType ann name atts) =-> convPa ca ann <+>-> text "create type" <+> text name <+> text "as" <+> lparen-> $+$ nest 2 (vcat (csv-> (map (\(TypeAttDef _ n t) -> text n <+> convTypeName t) atts)))-> $+$ rparen <> statementEnd--> convStatement ca (CreateLanguage ann name) =-> convPa ca ann <+>-> text "create language" <+> text name <> statementEnd--> convStatement ca (CreateTrigger ann name wh events tbl firing fnName fnArgs) =-> convPa ca ann <+>-> text "create trigger" <+> text name-> <+> text (case wh of-> TriggerBefore -> "before"-> TriggerAfter -> "after")-> <+> hcat (map text $ intersperse " or " $ map (\e -> case e of-> TInsert -> "insert"-> TUpdate -> "update"-> TDelete -> "delete") events)-> <+> text "on" <+> text tbl-> <+> text "for" <+> text (case firing of-> EachRow -> "row"-> EachStatement -> "statement")-> <+> text "execute procedure" <+> text fnName-> <> parens (hcatCsvMap convExp fnArgs) <> statementEnd--== plpgsql--> convStatement ca (NullStatement ann) = convPa ca ann <+> text "null" <> statementEnd--> convStatement ca (Assignment ann name val) =-> convPa ca ann <+>-> text name <+> text ":=" <+> convExp val <> statementEnd--> convStatement ca (Return ann ex) =-> convPa ca ann <+>-> text "return" <+> maybeConv convExp ex <> statementEnd--> convStatement ca (ReturnNext ann ex) =-> convPa ca ann <+>-> text "return" <+> text "next" <+> convExp ex <> statementEnd--> convStatement ca (ReturnQuery ann sel) =-> convPa ca ann <+>-> text "return" <+> text "query"-> <+> convSelectExpression True True sel <> statementEnd--> convStatement ca (Raise ann rt st exps) =-> convPa ca ann <+>-> text "raise"-> <+> case rt of-> RNotice -> text "notice"-> RException -> text "exception"-> RError -> text "error"-> <+> convExp (StringLit [] "'" st)-> <> ifNotEmpty (\e -> comma <+> csvExp e) exps-> <> statementEnd--> convStatement ca (ForSelectStatement ann i sel stmts) =-> convPa ca ann <+>-> text "for" <+> text i <+> text "in"-> <+> convSelectExpression True True sel <+> text "loop"-> $+$ convNestedStatements ca stmts-> $+$ text "end loop" <> statementEnd--> convStatement ca (ForIntegerStatement ann var st en stmts) =-> convPa ca ann <+>-> text "for" <+> text var <+> text "in"-> <+> convExp st <+> text ".." <+> convExp en <+> text "loop"-> $+$ convNestedStatements ca stmts-> $+$ text "end loop" <> statementEnd--> convStatement ca (WhileStatement ann ex stmts) =-> convPa ca ann <+>-> text "while" <+> convExp ex <+> text "loop"-> $+$ convNestedStatements ca stmts-> $+$ text "end loop" <> statementEnd--> convStatement ca (ContinueStatement ann) =-> convPa ca ann <+> text "continue" <> statementEnd--> convStatement ca (Perform ann f@(FunCall _ _ _)) =-> convPa ca ann <+>-> text "perform" <+> convExp f <> statementEnd-> convStatement _ (Perform _ x) =-> error $ "internal error: convStatement not supported for " ++ show x--> convStatement ca (Copy ann tb cols src) =-> convPa ca ann <+>-> text "copy" <+> text tb-> <+> ifNotEmpty (parens . hcatCsvMap text) cols-> <+> text "from" <+> case src of-> CopyFilename s -> quotes $ text s-> Stdin -> text "stdin"-> <> statementEnd--> convStatement ca (CopyData ann s) =-> convPa ca ann <+>-> text s <> text "\\." <> newline--> convStatement ca (If ann conds els) =-> convPa ca ann <+>-> text "if" <+> convCond (head conds)-> $+$ vcat (map (\c -> text "elseif" <+> convCond c) $ tail conds)-> $+$ ifNotEmpty (\e -> text "else" $+$ convNestedStatements ca e) els-> $+$ text "end if" <> statementEnd-> where-> convCond (ex, sts) = convExp ex <+> text "then"-> $+$ convNestedStatements ca sts-> convStatement ca (Execute ann s) =-> convPa ca ann <+>-> text "execute" <+> convExp s <> statementEnd--> convStatement ca (ExecuteInto ann s is) =-> convPa ca ann <+>-> text "execute" <+> convExp s-> <+> text "into" <+> hcatCsvMap text is-> <> statementEnd--> convStatement ca (CaseStatement ann c conds els) =-> convPa ca ann <+>-> text "case" <+> convExp c-> $+$ nest 2 (-> vcat (map (uncurry convWhenSt) conds)-> $+$ convElseSt els-> ) $+$ text "end case" <> statementEnd-> where-> convWhenSt ex sts = text "when" <+> hcatCsvMap convExp ex-> <+> text "then" $+$ convNestedStatements ca sts-> convElseSt = ifNotEmpty (\s -> text "else" $+$ convNestedStatements ca s)--== misc--> convStatement _ (Set _ n vs) =-> text "set" <+> text n <+> text "=" <+> hcatCsvMap (text . dv) vs <> statementEnd-> where-> dv (SetStr _ s) = "'" ++ s ++ "'"-> dv (SetId _ i) = i-> dv (SetNum _ nm) = show nm--> convStatement _ (Notify _ n) =-> text "notify" <+> text n <> statementEnd--> statementEnd :: Doc-> statementEnd = semi <> newline--================================================================================--= Statement components--== selects--> convSelectExpression :: Bool -> Bool -> SelectExpression -> Doc-> convSelectExpression writeSelect _ (Select _ dis l tb wh grp hav-> order lim off) =-> text (if writeSelect then "select" else "")-> <+> (case dis of-> Dupes -> empty-> Distinct -> text "distinct")-> <+> convSelList l-> $+$ nest 2 (-> (if null tb-> then empty-> else text "from" <+> hcatCsvMap convTref tb)-> $+$ convWhere wh)-> <+> ifNotEmpty (\g -> text "group by" <+> hcatCsvMap convExp g) grp-> <+> maybeConv (\h -> text "having" <+> convExp h) hav-> <+> ifNotEmpty (\o -> text "order by" <+> hcatCsvMap (\(oe,od) -> convExp oe-> <+> convDir od) o) order-> <+> maybeConv (\lm -> text "limit" <+> convExp lm) lim-> <+> maybeConv (\offs -> text "offset" <+> convExp offs) off-> where-> convTref (Tref _ f a) = text f <+> convTrefAlias a-> convTref (JoinedTref _ t1 nat jt t2 ex a) =-> parens (convTref t1-> $+$ (case nat of-> Natural -> text "natural"-> Unnatural -> empty)-> <+> text (case jt of-> Inner -> "inner"-> Cross -> "cross"-> LeftOuter -> "left outer"-> RightOuter -> "right outer"-> FullOuter -> "full outer")-> <+> text "join"-> <+> convTref t2-> <+> maybeConv (nest 2 . convJoinExpression) ex-> <+> convTrefAlias a)-> where-> convJoinExpression (JoinOn _ e) = text "on" <+> convExp e-> convJoinExpression (JoinUsing _ ids) =-> text "using" <+> parens (hcatCsvMap text ids)--> convTref (SubTref _ sub alias) =-> parens (convSelectExpression True True sub)-> <+> text "as" <+> convTrefAlias alias-> convTref (TrefFun _ f@(FunCall _ _ _) a) = convExp f <+> convTrefAlias a-> convTref (TrefFun _ x _) =-> error $ "internal error: node not supported in function tref: " ++ show x-> convTrefAlias NoAlias = empty-> convTrefAlias (TableAlias t) = text t-> convTrefAlias (FullAlias t s) = text t <+> parens (hcatCsvMap text s)--> convSelectExpression writeSelect topLev (CombineSelect _ tp s1 s2) =-> let p = convSelectExpression writeSelect False s1-> $+$ (case tp of-> Except -> text "except"-> Union -> text "union"-> UnionAll -> text "union" <+> text "all"-> Intersect -> text "intersect")-> $+$ convSelectExpression True False s2-> in if topLev then p else parens p-> convSelectExpression _ _ (Values _ expss) =-> text "values" $$ nest 2 (vcat $ csv $ map (parens . csvExp) expss)--> convDir :: Direction -> Doc-> convDir d = text $ case d of-> Asc -> "asc"-> Desc -> "desc"---> convWhere :: (Maybe Expression) -> Doc-> convWhere (Just ex) = text "where" <+> convExp ex-> convWhere Nothing = empty--> convSelList :: SelectList -> Doc-> convSelList (SelectList _ ex into) =-> hcatCsvMap convSelItem ex-> <+> ifNotEmpty (\i -> text "into" <+> hcatCsvMap text i) into-> where-> convSelItem (SelectItem _ ex1 nm) = convExp ex1 <+> text "as" <+> text nm-> convSelItem (SelExp _ e) = convExp e--> convCasc :: Cascade -> Doc-> convCasc casc = text $ case casc of-> Cascade -> "cascade"-> Restrict -> "restrict"--== ddl--> convCon :: Constraint -> Doc-> convCon (UniqueConstraint _ n c) =-> mname n <+> text "unique"-> <+> parens (hcatCsvMap text c)-> convCon (PrimaryKeyConstraint _ n p) =-> mname n <+>-> text "primary key"-> <+> parens (hcatCsvMap text p)-> convCon (CheckConstraint _ n c) = mname n <+> text "check" <+> parens (convExp c)-> convCon (ReferenceConstraint _ n at tb rat ondel onupd) =-> mname n <+>-> text "foreign key" <+> parens (hcatCsvMap text at)-> <+> text "references" <+> text tb-> <+> ifNotEmpty (parens . hcatCsvMap text) rat-> <+> text "on update" <+> convCasc onupd-> <+> text "on delete" <+> convCasc ondel--> mname :: String -> Doc-> mname n = if n == ""-> then empty-> else text "constraint" <+> text n---> convReturning :: Maybe SelectList -> Doc-> convReturning l = case l of-> Nothing -> empty-> Just ls -> nest 2 (text "returning" <+> convSelList ls)--> convIfExists :: IfExists -> Doc-> convIfExists i = case i of-> Require -> empty-> IfExists -> text "if exists"--== plpgsql--> convNestedStatements :: (Annotation -> String) -> StatementList -> Doc-> convNestedStatements pa = nest 2 . vcat . map (convStatement pa)--> convTypeName :: TypeName -> Doc-> convTypeName (SimpleTypeName _ s) = text s-> convTypeName (PrecTypeName _ s i) = text s <> parens(integer i)-> convTypeName (ArrayTypeName _ t) = convTypeName t <> text "[]"-> convTypeName (SetOfTypeName _ t) = text "setof" <+> convTypeName t--= Expressions--> convExp :: Expression -> Doc-> convExp (Identifier _ i) =-> if quotesNeeded-> then text $ "\"" ++ i ++ "\""-> else text i-> where-> --needs some work - quotes needed if contains invalid unquoted-> --chars, or maybe if matches keyword or similar-> quotesNeeded = case i of-> x:_ | not (isLetter x || x `elem` "_*") -> True-> _ | all okChar i -> False-> | otherwise -> True-> where-> okChar x =isAlphaNum x || x `elem` "*_."-> convExp (IntegerLit _ n) = integer n-> convExp (FloatLit _ n) = double n-> convExp (StringLit _ tag s) = text tag <> text replaceQuotes <> text tag-> where-> replaceQuotes = if tag == "'"-> then replace "'" "''" s-> else s--> convExp (FunCall _ n es) =-> --check for special operators-> case n of-> "!arrayctor" -> text "array" <> brackets (csvExp es)-> "!between" -> convExp (head es) <+> text "between"-> <+> parens (convExp (es !! 1))-> <+> text "and"-> <+> parens (convExp (es !! 2))-> "!substring" -> text "substring"-> <> parens (convExp (head es)-> <+> text "from" <+> convExp (es !! 1)-> <+> text "for" <+> convExp (es !! 2))-> "!arraysub" -> case es of-> ((Identifier _ i):es1) -> text i <> brackets (csvExp es1)-> _ -> parens (convExp (head es)) <> brackets (csvExp (tail es))-> "!rowctor" -> text "row" <> parens (hcatCsvMap convExp es)-> _ | isOperatorName n ->-> case forceRight (getOperatorType defaultTemplate1Catalog n) of-> BinaryOp ->-> parens (convExp (head es)-> <+> text (filterKeyword n)-> <+> convExp (es !! 1))-> PrefixOp -> parens (text (if n == "u-"-> then "-"-> else filterKeyword n)-> <+> parens (convExp (head es)))-> PostfixOp -> parens (convExp (head es) <+> text (filterKeyword n))-> | otherwise -> text n <> parens (csvExp es)-> where-> filterKeyword t = case t of-> "!and" -> "and"-> "!or" -> "or"-> "!not" -> "not"-> "!isnull" -> "is null"-> "!isnotnull" -> "is not null"-> "!like" -> "like"-> x -> x--> convExp (BooleanLit _ b) = bool b-> convExp (InPredicate _ att t lst) =-> convExp att <+> (if not t then text "not" else empty) <+> text "in"-> <+> parens (case lst of-> InList _ expr -> csvExp expr-> InSelect _ sel -> convSelectExpression True True sel)-> convExp (LiftOperator _ op flav args) =-> convExp (head args) <+> text op-> <+> text (case flav of-> LiftAny -> "any"-> LiftAll -> "all")-> <+> parens (convExp $ head $ tail args)-> convExp (ScalarSubQuery _ s) = parens (convSelectExpression True True s)-> convExp (NullLit _) = text "null"-> convExp (WindowFn _ fn part order asc frm) =-> convExp fn <+> text "over"-> <+> (if hp || ho-> then-> parens ((if hp-> then text "partition by" <+> csvExp part-> else empty)-> <+> (if ho-> then text "order by" <+> csvExp order-> <+> convDir asc-> else empty)-> <+> convFrm)-> else empty)-> where-> hp = not (null part)-> ho = not (null order)-> convFrm = case frm of-> FrameUnboundedPreceding -> text "range unbounded preceding"-> FrameUnboundedFull -> text "range between unbounded preceding and unbounded following"-> FrameRowsUnboundedPreceding -> text "rows unbounded preceding"--> convExp (Case _ whens els) =-> text "case"-> $+$ nest 2 (vcat (map convWhen whens)-> $+$ maybeConv (\e -> text "else" <+> convExp e) els)-> $+$ text "end"-> where-> convWhen (ex1, ex2) =-> text "when" <+> hcatCsvMap convExp ex1-> <+> text "then" <+> convExp ex2--> convExp (CaseSimple _ val whens els) =-> text "case" <+> convExp val-> $+$ nest 2 (vcat (map convWhen whens)-> $+$ maybeConv (\e -> text "else" <+> convExp e) els)-> $+$ text "end"-> where-> convWhen (ex1, ex2) =-> text "when" <+> hcatCsvMap convExp ex1-> <+> text "then" <+> convExp ex2--> convExp (PositionalArg _ a) = text "$" <> integer a-> convExp (Placeholder _) = text "?"-> convExp (Exists _ s) = text "exists" <+> parens (convSelectExpression True True s)-> convExp (Cast _ ex t) = text "cast" <> parens (convExp ex-> <+> text "as"-> <+> convTypeName t)--= Utils--convert a list of expressions to horizontal csv--> csvExp :: [Expression] -> Doc-> csvExp = hcatCsvMap convExp--> maybeConv :: (t -> Doc) -> Maybe t -> Doc-> maybeConv f c =-> case c of-> Nothing -> empty-> Just a -> f a--> csv :: [Doc] -> [Doc]-> csv = punctuate comma--> hcatCsv :: [Doc] -> Doc-> hcatCsv = hcat . csv--> ifNotEmpty :: ([a] -> Doc) -> [a] -> Doc-> ifNotEmpty c l = if null l then empty else c l--> hcatCsvMap :: (a -> Doc) -> [a] -> Doc-> hcatCsvMap ex = hcatCsv . map ex--> bool :: Bool -> Doc-> bool b = if b then text "true" else text "false"--> newline :: Doc-> newline = text "\n"--> convPa :: (Annotation -> String) -> Annotation -> Doc-> convPa ca a = let s = ca a-> in if s == ""-> then empty-> else text "/*\n" <+> text s-> <+> text "*/\n"
− Database/HsSqlPpp/Tests/DatabaseLoaderTests.lhs
@@ -1,33 +0,0 @@-Copyright 2009 Jake Wheat--TODO: the point of these tests will be to check the line and column-mapping from parsed and pretty printed sql back to the original source-text.-Will be revived when the DatabaseLoader code is being worked on again.--> module Database.HsSqlPpp.Tests.DatabaseLoaderTests (databaseLoaderTests) where--> import Test.HUnit-> import Test.Framework-> import Test.Framework.Providers.HUnit--> import Database.HsSqlPpp.Dbms.DatabaseLoader--> databaseLoaderTests :: Test.Framework.Test-> databaseLoaderTests = testGroup "databaseLoaderTests" [] {-testGroup "databaseLoaderTests" [-> t "execute: PGRES_FATAL_ERROR: ERROR: column \"object_name\" of relation \"system_implementation_objects\" does not exist\n\-> \LINE 1: insert into system_implementation_objects (object_name,objec...\n\-> \ ^\n"-> 0 1 --0 should be 43--> ,t "execute: PGRES_FATAL_ERROR: ERROR: column \"x\" does not exist\n\-> \LINE 3: (x,'base_relvar')\n\-> \ ^\n"-> 0 3---> ]-> where-> t et l c = testCase et $ do-> let (rl, rc) = getLineAndColumnFromErrorText et-> assertEqual "" (l,c) (rl,rc)-}
− Database/HsSqlPpp/Tests/ExtensionTests.lhs
@@ -1,180 +0,0 @@-Copyright 2009 Jake Wheat--Set of tests for the extensions--> {-# LANGUAGE RankNTypes,FlexibleContexts #-}--> module Database.HsSqlPpp.Tests.ExtensionTests (extensionTests) where--> import Test.HUnit-> import Test.Framework-> import Test.Framework.Providers.HUnit-> --import Debug.Trace--> import Database.HsSqlPpp.Parsing.Parser-> import Database.HsSqlPpp.Ast.Annotation-> import Database.HsSqlPpp.Extensions.ChaosExtensions-> import Database.HsSqlPpp.Ast.Ast-> --import Database.HsSqlPpp.PrettyPrinter.PrettyPrinter--> extensionTests :: Test.Framework.Test-> extensionTests =-> testGroup "extensionTests" (mapCheckExtension [-> t rewriteCreateVars-> "select create_var('varname','vartype');"-> "create table varname_table (\n\-> \ varname vartype);\n\-> \create function get_varname() returns vartype as $a$\n\-> \ select * from varname_table;\n\-> \$a$ language sql stable;\n\-> \create function check_con_varname_table_varname_key() returns boolean as $a$\n\-> \begin\n\-> \ return true;\n\-> \end;\n\-> \$a$ language plpgsql stable;\n\-> \/*drop function if exists varname_table_constraint_trigger_operator();\n\-> \create function varname_table_constraint_trigger_operator() returns trigger as $a$\n\-> \begin\n\-> \ null;\n\-> \end;\n\-> \$a$ language plpgsql;*/\n\-> \create function check_con_varname_table_01_tuple() returns boolean as $a$\n\-> \begin\n\-> \ return true;\n\-> \end;\n\-> \$a$ language plpgsql stable;\n\-> \drop function if exists varname_table_constraint_trigger_operator();\n\-> \create function varname_table_constraint_trigger_operator() returns trigger as $a$\n\-> \begin\n\-> \ null;\n\-> \end;\n\-> \$a$ language plpgsql;"--> ,t addReadonlyTriggers-> "select set_relvar_type('stuff','readonly');"-> "create function check_stuff_d_readonly() returns trigger as $a$\n\-> \begin\n\-> \ if (not (false)) then\n\-> \ raise exception 'delete on base_relvar_metadata violates transition constraint base_relvar_metadata_d_readonly';\n\-> \ end if;\n\-> \return null;\n\-> \end;\n\-> \$a$ language plpgsql volatile;\n\-> \create function check_stuff_i_readonly() returns trigger as $a$\n\-> \begin\n\-> \ if (not (false)) then\n\-> \ raise exception 'delete on base_relvar_metadata violates transition constraint base_relvar_metadata_d_readonly';\n\-> \ end if;\n\-> \ return null;\n\-> \end;\n\-> \$a$ language plpgsql volatile;\n\-> \create function check_stuff_u_readonly() returns trigger as $a$\n\-> \begin\n\-> \ if (not (false)) then\n\-> \ raise exception 'delete on base_relvar_metadata violates transition constraint base_relvar_metadata_d_readonly';\n\-> \ end if;\n\-> \ return null;\n\-> \end;\n\-> \$a$ language plpgsql volatile;"--> ,t createClientActionWrapper-> "select create_client_action_wrapper('actname', $$actcall()$$);"-> "create function action_actname() returns void as $a$\n\-> \begin\n\-> \ perform action_actcall();\n\-> \end;\n\-> \$a$ language plpgsql;"-> ,t createClientActionWrapper-> "select create_client_action_wrapper('actname', $$actcall('test')$$);"-> "create function action_actname() returns void as $a$\n\-> \begin\n\-> \ perform action_actcall('test');\n\-> \end;\n\-> \$a$ language plpgsql;"-> ,t addNotifyTriggers-> "select set_relvar_type('stuff','data');"-> "create function stuff_changed() returns trigger as $a$\n\-> \begin\n\-> \ notify stuff;\n\-> \ return null;\n\-> \end;\n\-> \$a$ language plpgsql;"-> ,t addConstraint-> "select add_constraint('name', 'true', array['t1', 't2']);"-> "create function check_con_name() returns boolean as $a$\n\-> \begin\n\-> \ return true;\n\-> \end;\n\-> \$a$ language plpgsql stable;\n\-> \drop function if exists t1_constraint_trigger_operator();\n\-> \create function t1_constraint_trigger_operator() returns trigger as $a$\n\-> \begin\n\-> \ null;\n\-> \end;\n\-> \$a$ language plpgsql;\n\-> \drop function if exists t2_constraint_trigger_operator();\n\-> \create function t2_constraint_trigger_operator() returns trigger as $a$\n\-> \begin\n\-> \ null;\n\-> \end;\n\-> \$a$ language plpgsql;"-> ,t addKey-> "select add_key('tbl', 'attr');"-> "create function check_con_tbl_attr_key() returns boolean as $a$\n\-> \begin\n\-> \ return true;\n\-> \end;\n\-> \$a$ language plpgsql stable;\n\-> \/*drop function if exists tbl_constraint_trigger_operator();\n\-> \create function tbl_constraint_trigger_operator() returns trigger as $a$\n\-> \begin\n\-> \ null;\n\-> \end;\n\-> \$a$ language plpgsql;*/"-> ,t addKey-> "select add_key('tbl', array['attr1','attr2']);"-> "create function check_con_tbl_attr1_attr2_key() returns boolean as $a$\n\-> \begin\n\-> \ return true;\n\-> \end;\n\-> \$a$ language plpgsql stable;\n\-> \/*drop function if exists tbl_constraint_trigger_operator();\n\-> \create function tbl_constraint_trigger_operator() returns trigger as $a$\n\-> \begin\n\-> \ null;\n\-> \end;\n\-> \$a$ language plpgsql;*/"-> ,t zeroOneTuple-> "select constrain_to_zero_or_one_tuple('tbl');"-> "create function check_con_tbl_01_tuple() returns boolean as $a$\n\-> \begin\n\-> \ return true;\n\-> \end;\n\-> \$a$ language plpgsql stable;\n\-> \drop function if exists tbl_constraint_trigger_operator();\n\-> \create function tbl_constraint_trigger_operator() returns trigger as $a$\n\-> \begin\n\-> \ null;\n\-> \end;\n\-> \$a$ language plpgsql;"---add_foreign_key-constrain zero one-add constraint--> ])--> where-> t a b c = (a,b,c)-> mapCheckExtension = map (\(a,b,c) -> checkExtension a b c)-> checkExtension :: (StatementList -> StatementList) -> String -> String -> Test.Framework.Test-> checkExtension f stxt ttxt = testCase ("check " ++ stxt) $-> case (do-> sast <- parseSql "" stxt-> let esast = f sast-> --trace (printSql esast) $ return ()-> tast <- parseSql "" ttxt-> return (tast,esast)) of-> Left e -> assertFailure $ show e-> Right (ts,es) -> assertEqual "" (stripAnnotations ts) (stripAnnotations es)
− Database/HsSqlPpp/Tests/LocalBindingsTests.lhs
@@ -1,225 +0,0 @@-Copyright 2010 Jake Wheat--Tests for the local bindings lookup code, which is a bit convoluted in-places, particularly for joins--> module Database.HsSqlPpp.Tests.LocalBindingsTests (localBindingsTests) where--> import Test.HUnit-> import Test.Framework-> import Test.Framework.Providers.HUnit-> --import Text.Show.Pretty-> --import Debug.Trace--> import Database.HsSqlPpp.AstInternals.TypeChecking.LocalBindings--> import Database.HsSqlPpp.Ast.SqlTypes-> --import Database.HsSqlPpp.Ast.Annotation-> --import Database.HsSqlPpp.Parsing.Parser-> --import Database.HsSqlPpp.Ast.TypeChecker-> --import Database.HsSqlPpp.Ast.Catalog--> data Item = Group String [Item]-> | Lookup [([LocalBindingsUpdate]-> ,String -- correlation name-> ,String -- id name-> ,Either [TypeError] (String,String,String,Type))] -- source, corr, type-> | StarExpand [([LocalBindingsUpdate], String, Either [TypeError] [(String,String,String,Type)])]--> localBindingsTests :: [Test.Framework.Test]-> localBindingsTests = itemToTft testData--test plan:-no updates uncor lookup, star-cor lookup,star-1 update- uncor match, match sys, no match, star (with sys not appearing)- cor same "- join update: join col type tests + incompatible- join on system columns- ambiguous ids- do cor tests with both cors-2 updates: just one pair: lookup in head with shadowing- lookup in tail- no match- use difference cor to get to shadowed in tail-case insensitive tests-expand composite tests-n layers of joins with ids from each layer cor and uncor, plus star expands--> testData :: Item-> testData =-> Group "local bindings tests" [ Lookup [-> testUnRec [] "" "test"-> ,testUnRec [] "test" "test"-> ,testRec [LBQualifiedIds "source1"-> ""-> [("test1", typeInt)-> ,("test2", typeBool)]-> []]-> ("source1","","test1",typeInt)--> ,testRec [unquids1] res11-> ,testRec [unquids1] res12-> ,testRec [unquids1] res13-> ,testRec [unquids1] res14-> ,testUnRec [unquids1] "" "asdasd"--> ,testRec [quids1] res21-> ,testRec [quids1] res22-> ,testRec [quids1] res23-> ,testRec [quids1] res24-> ,testUnRec [quids1] "qid1" "asdasd"-> ,testUnRec [quids1] "" "asdasd"--> ,testRec [quids2] res31-> ,testRec [quids2] res32-> ,testRec [quids2] res33-> ,testRec [quids2] res34-> ,testUnRec [quids2] "qid2" "asdasd"-> ,testUnRec [quids2] "" "asdasd"--> ,testRecNoCor [quids2] res31-> ,testRecNoCor [quids2] res32-> ,testRecNoCor [quids2] res33-> ,testRecNoCor [quids2] res34---> ]-> ,StarExpand [-> testStar [unquids1] "" $ Right [res11,res12]-> ,testStar [unquids1] "test" $ Left [UnrecognisedCorrelationName "test"]-> ,testStar [quids1] "" $ Right [res21,res22]-> ,testStar [quids1] "test2" $ Left [UnrecognisedCorrelationName "test2"]-> ,testStar [quids2] "" $ Right [res31,res32]-> ,testStar [quids2] "qid2" $ Right [res31,res32]-> ,testStar [quids2] "qid3" $ Left [UnrecognisedCorrelationName "qid3"]--> ]]-> where-> unquids1 = LBUnqualifiedIds "unqid1s"-> [("test1", typeInt)-> ,("test2", typeBool)]-> [("inttest1", typeInt)-> ,("inttest2", typeBool)]-> res11 = ("unqid1s","","test1",typeInt)-> res12 = ("unqid1s","","test2",typeBool)-> res13 = ("unqid1s","","inttest1",typeInt)-> res14 = ("unqid1s","","inttest2",typeBool)--> unquids2 = LBUnqualifiedIds "unqid2s"-> [("test1", ScalarType "text")-> ,("test3", ScalarType "int2")]-> [("inttest1", ScalarType "text")-> ,("inttest3", ScalarType "int2")]-> res211 = ("unqid2s","","test1",ScalarType "text")-> res212 = ("unqid2s","","test3",ScalarType "int2")-> res213 = ("unqid2s","","inttest1",ScalarType "text")-> res214 = ("unqid2s","","inttest3",ScalarType "int2")---> quids1 = LBQualifiedIds "qid1s"-> ""-> [("test1", typeInt)-> ,("test2", typeBool)]-> [("inttest1", typeInt)-> ,("inttest2", typeBool)]-> res21 = ("qid1s","","test1",typeInt)-> res22 = ("qid1s","","test2",typeBool)-> res23 = ("qid1s","","inttest1",typeInt)-> res24 = ("qid1s","","inttest2",typeBool)--> quids2 = LBQualifiedIds "qid2s"-> "qid2"-> [("test3", typeInt)-> ,("test4", typeBool)]-> [("inttest3", typeInt)-> ,("inttest4", typeBool)]-> res31 = ("qid2s","qid2","test3",typeInt)-> res32 = ("qid2s","qid2","test4",typeBool)-> res33 = ("qid2s","qid2","inttest3",typeInt)-> res34 = ("qid2s","qid2","inttest4",typeBool)---> testUnRec :: [LocalBindingsUpdate] -> String -> String-> -> ([LocalBindingsUpdate]-> ,String -- correlation name-> ,String -- id name-> ,Either [TypeError] (String,String,String,Type))-> testUnRec lbus cor i = (lbus,cor,i-> , Left [UnrecognisedIdentifier $-> if cor == "" then i else cor ++ "." ++ i])-> testRec :: [LocalBindingsUpdate]-> -> (String,String,String,Type)-> -> ([LocalBindingsUpdate]-> ,String -- correlation name-> ,String -- id name-> ,Either [TypeError] (String,String,String,Type))-> testRec lbus (src,cor,i,ty) = (lbus,cor,i,Right (src,cor,i,ty))--> testRecNoCor :: [LocalBindingsUpdate]-> -> (String,String,String,Type)-> -> ([LocalBindingsUpdate]-> ,String -- correlation name-> ,String -- id name-> ,Either [TypeError] (String,String,String,Type))-> testRecNoCor lbus (src,cor,i,ty) = (lbus,"",i,Right (src,cor,i,ty))---> testStar :: [LocalBindingsUpdate]-> -> String-> -> Either [TypeError] [(String,String,String,Type)]-> -> ([LocalBindingsUpdate]-> ,String -- correlation name-> ,Either [TypeError] [(String,String,String,Type)])-> testStar lbus cor res = (lbus,cor,res)--LBQualifiedIds {- source :: String- ,correlationName :: String- ,ids :: [(String,Type)]- ,internalIds :: [(String,Type)]- }- | LBUnqualifiedIds {- source :: String- ,ids :: [(String,Type)]- ,internalIds :: [(String,Type)]- }- | LBJoinIds {- source1 :: String- ,correlationName1 :: String- ,ids1 :: [(String,Type)]- ,internalIds1 :: [(String,Type)]- ,source2 :: String- ,correlationName2 :: String- ,ids2 :: [(String,Type)]- ,internalIds2 :: [(String,Type)]- ,joinIds :: [String]- }---================================================================================--> testIdLookup :: [LocalBindingsUpdate]-> -> String-> -> String-> -> Either [TypeError] (String,String,String,Type)-> -> Test.Framework.Test-> testIdLookup lbus cn i res = testCase ("lookup " ++ cn ++ "." ++ i) $ do-> let lb = foldr lbUpdate emptyBindings lbus-> r = lbLookupID lb cn i-> assertEqual "lookupid" res r--> testStarExpand :: [LocalBindingsUpdate]-> -> String-> -> Either [TypeError] [(String,String,String,Type)]-> -> Test.Framework.Test-> testStarExpand lbus cn res = testCase ("expand star " ++ cn) $ do-> let lb = foldr lbUpdate emptyBindings lbus-> r = lbExpandStar lb cn-> assertEqual "lookupid" res r--> itemToTft :: Item -> [Test.Framework.Test]-> itemToTft (Lookup es) = map (\(a,b,c,d) -> testIdLookup a b c d) es-> itemToTft (StarExpand es) = map (\(a,b,c) -> testStarExpand a b c) es-> itemToTft (Group s is) = [testGroup s $ concatMap itemToTft is]
− Database/HsSqlPpp/Tests/ParameterizedStatementTests.lhs
@@ -1,147 +0,0 @@-Copyright 2010 Jake Wheat--Tests for the infrastructure to create type safe access to databases --the information needed is gathered during typechecking and exposed-in the StatementType annotation.--> module Database.HsSqlPpp.Tests.ParameterizedStatementTests (parameterizedStatementTests) where--> import Test.HUnit-> import Test.Framework-> import Test.Framework.Providers.HUnit-> --import Text.Show.Pretty-> --import Debug.Trace---> import Database.HsSqlPpp.Ast.SqlTypes-> import Database.HsSqlPpp.Ast.Annotation-> import Database.HsSqlPpp.Parsing.Parser-> import Database.HsSqlPpp.Ast.TypeChecker-> import Database.HsSqlPpp.Ast.Catalog--> data Item = Group String [Item]-> | Statements [(String, [CatalogUpdate], StatementType)]--> parameterizedStatementTests :: [Test.Framework.Test]-> parameterizedStatementTests = itemToTft testData--> testData :: Item-> testData =-> Group "parameterized statement tests" [-> Group "simple selects" [ Statements [-> ("select test();"-> ,[CatCreateFunction FunName "test" [] (Pseudo Void) False]-> ,StatementType [] [])-> ,("select adnum,adbin from pg_attrdef;"-> ,[]-> ,StatementType [] [("adnum", ScalarType "int2")-> ,("adbin", ScalarType "text")])-> ,("select adnum,adbin from pg_attrdef where oid= ?;"-> ,[]-> ,StatementType [ScalarType "oid"] [("adnum", ScalarType "int2")-> ,("adbin", ScalarType "text")])-> ,("select count(1) from pg_attrdef;"-> ,[]-> ,StatementType [] [("count", ScalarType "int8")])-> {-,("select test($1);"-> ,[CatCreateFunction FunName "test" [ScalarType "int4"] (ScalarType "text") False]-> ,StatementType [ScalarType "int4"] [("test",ScalarType "text")])-> ,-}-> ,("select test(?);"-> ,[CatCreateFunction FunName "test" [ScalarType "int4"] (ScalarType "text") False]-> ,StatementType [ScalarType "int4"] [("test",ScalarType "text")])-> ]-> ]-> ,Group "simple dml" [ Statements [-> ("insert into testt values (1, 'test');"-> ,[CatCreateTable "testt" [("c1", typeInt)-> ,("c2", ScalarType "text")] []]-> ,StatementType [] [])-> ,("insert into testt (c1,c2) values (?, ?);"-> ,[CatCreateTable "testt" [("c1", typeInt)-> ,("c2", ScalarType "text")] []]-> ,StatementType [typeInt, ScalarType "text"] [])-> ,("insert into testt (c1,c2) values (1, 'test') returning c1;"-> ,[CatCreateTable "testt" [("c1", typeInt)-> ,("c2", ScalarType "text")] []]-> ,StatementType [] [("c1",typeInt)])-> ,("insert into testt (c1,c2) values (?, ?) returning c1 as d1, c2;"-> ,[CatCreateTable "testt" [("c1", typeInt)-> ,("c2", ScalarType "text")] []]-> ,StatementType [typeInt, ScalarType "text"] [("d1", typeInt)-> ,("c2", ScalarType "text")])-> {-,("insert into testt (c1,c2) values (?, ?) returning *;"-> ,[CatCreateTable "testt" [("c1", typeInt)-> ,("c2", ScalarType "text")] []]-> ,StatementType [typeInt, ScalarType "text"] [("c1", typeInt)-> ,("c2", ScalarType "text")])-}-> ,("update testt set c1= ?,c2= ? where c1= ? returning c2;"-> ,[CatCreateTable "testt" [("c1", typeInt)-> ,("c2", ScalarType "text")] []]-> ,StatementType [typeInt, ScalarType "text", typeInt] [("c2", ScalarType "text")])-> ,("update testt set (c1,c2) = (?,?);"-> ,[CatCreateTable "testt" [("c1", typeInt)-> ,("c2", ScalarType "text")] []]-> ,StatementType [typeInt, ScalarType "text"] [])-> ,("delete from blah where c1= ? returning c2;"-> ,[CatCreateTable "blah" [("c1", typeInt)-> ,("c2", ScalarType "text")] []]-> ,StatementType [typeInt] [("c2", ScalarType "text")])-> ]-> ]-> ]--select a,b from c where d=e group by f having g=h orderby i limit j offset k;-select function(a,b);-insert into a (b,c) values (d,e) returning f,g-update a set b=c,d=e where f=g returning h,i-delete from t where a=b returning c,d--rough list of grammar elements to possibly add inference support to:--where top level - >maybeboolexpr-having-limit, offset-values for table literal or insert-set clause-rowsetclause-onexpr, joinon?-windowfn-liftoperator-selectitem?-castexpression-caseexpression-funcall-inpredicate-- TODO: add support in each of these places for position args only when- doing typecheckPS- do typecheck error if come across ? when not doing typecheckPS- make sure ? fails type check if not in a valid place in the ast--================================================================================---> testStatementType :: String -> [CatalogUpdate] -> StatementType -> Test.Framework.Test-> testStatementType src eu st = testCase ("typecheck " ++ src) $-> let ast = case parseSql "" src of-> Left e -> error $ show e-> Right l -> l-> in case typeCheckPS makeCat (head ast) of-> Left e -> error $ show e-> Right aast -> --trace (ppShow aast) $-> let is = getTopLevelInfos [aast]-> er = concatMap snd $ getTypeErrors [aast]-> in case is of-> _ | not (null er) -> assertFailure $ show er-> [Just is1] -> assertEqual ("typecheck " ++ src) st is1-> _ -> assertFailure ("expected onne statementinfo, got " ++ show is)-> where-> makeCat = case updateCatalog defaultTemplate1Catalog eu of-> Left x -> error $ show x-> Right e -> e--> itemToTft :: Item -> [Test.Framework.Test]-> itemToTft (Statements es) = map (\(a,b,c) -> testStatementType a b c) es-> itemToTft (Group s is) = [testGroup s $ concatMap itemToTft is]-
− Database/HsSqlPpp/Tests/ParserTests.lhs
@@ -1,1262 +0,0 @@-Copyright 2009 Jake Wheat--The automated tests, uses hunit to check a bunch of text expressions-and sql statements parse to the correct tree, and then checks pretty-printing and then reparsing gives the same tree. The code was mostly-written in a tdd style, which the coverage of the tests reflects.--There are no tests for invalid sql at the moment.--> {-# LANGUAGE QuasiQuotes #-}--> module Database.HsSqlPpp.Tests.ParserTests (parserTests) where--> import Test.HUnit-> import Test.Framework-> import Test.Framework.Providers.HUnit-> import Data.Generics--> import Database.HsSqlPpp.Here--> import Database.HsSqlPpp.Ast.Ast-> import Database.HsSqlPpp.Ast.Annotation-> import Database.HsSqlPpp.Parsing.Parser-> import Database.HsSqlPpp.PrettyPrinter.PrettyPrinter---> data Item = Expressions [(String, Expression)]-> | Statements [(String, [Statement])]-> | PlpgsqlStatements [(String, [Statement])]-> | Group String [Item]--> parserTests :: [Test.Framework.Test]-> parserTests = itemToTft parserTestData--> parserTestData :: Item-> parserTestData =-> Group "parserTests" [--================================================================================--expressions--> Group "parse expressions" [-> Group "basic expressions" [Expressions [-> p "1" (IntegerLit [] 1)-> ,p "-1" (FunCall [] "u-" [IntegerLit [] 1])-> ,p "1.1" (FloatLit [] 1.1)-> ,p "-1.1" (FunCall [] "u-" [FloatLit [] 1.1])-> ,p " 1 + 1 " (FunCall [] "+" [IntegerLit [] 1-> ,IntegerLit [] 1])-> ,p "1+1+1" (FunCall [] "+" [FunCall [] "+" [IntegerLit [] 1-> ,IntegerLit [] 1]-> ,IntegerLit [] 1])-> ]]---> ,Group "parens" [Expressions [--check some basic parens use wrt naked values and row constructors-these tests reflect how pg seems to interpret the variants.--> p "(1)" (IntegerLit [] 1)-> ,p "row ()" (FunCall [] "!rowctor" [])-> ,p "row (1)" (FunCall [] "!rowctor" [IntegerLit [] 1])-> ,p "row (1,2)" (FunCall [] "!rowctor" [IntegerLit [] 1,IntegerLit [] 2])-> ,p "(1,2)" (FunCall [] "!rowctor" [IntegerLit [] 1,IntegerLit [] 2])-> ]]--> ,Group "more basic expressions" [Expressions [--test some more really basic expressions--> p "'test'" (stringQ "test")-> ,p "''" (stringQ "")-> ,p "hello" (Identifier [] "hello")-> ,p "helloTest" (Identifier [] "helloTest")-> ,p "hello_test" (Identifier [] "hello_test")-> ,p "\"this is an identifier\"" (Identifier [] "this is an identifier")-> ,p "hello1234" (Identifier [] "hello1234")-> ,p "true" (BooleanLit [] True)-> ,p "false" (BooleanLit [] False)-> ,p "null" (NullLit [])-> ]]--> ,Group "array ctor and selector" [Expressions [-> p "array[1,2]" (FunCall [] "!arrayctor" [IntegerLit [] 1, IntegerLit [] 2])-> ,p "a[1]" (FunCall [] "!arraysub" [Identifier [] "a", IntegerLit [] 1])--> ]]--> ,Group "simple operators" [Expressions [-> p "1 + tst1" (FunCall [] "+" [IntegerLit [] 1-> ,Identifier [] "tst1"])-> ,p "tst1 + 1" (FunCall [] "+" [Identifier [] "tst1"-> ,IntegerLit [] 1])-> ,p "tst + tst1" (FunCall [] "+" [Identifier [] "tst"-> ,Identifier [] "tst1"])-> ,p "'a' || 'b'" (FunCall [] "||" [stringQ "a"-> ,stringQ "b"])-> ,p "'stuff'::text" (Cast [] (stringQ "stuff") (SimpleTypeName [] "text"))-> ,p "245::float(24)" (Cast [] (IntegerLit [] 245) (PrecTypeName [] "float" 24))--> ,p "245::double precision" (Cast [] (IntegerLit [] 245) (SimpleTypeName [] "double precision"))--> ,p "a between 1 and 3"-> (FunCall [] "!between" [Identifier [] "a", IntegerLit [] 1, IntegerLit [] 3])-> ,p "cast(a as text)"-> (Cast [] (Identifier [] "a") (SimpleTypeName [] "text"))-> ,p "@ a"-> (FunCall [] "@" [Identifier [] "a"])--> ,p "substring(a from 0 for 3)"-> (FunCall [] "!substring" [Identifier [] "a", IntegerLit [] 0, IntegerLit [] 3])--> ,p "substring(a from 0 for (5 - 3))"-> (FunCall [] "!substring" [Identifier [] "a",IntegerLit [] 0,-> FunCall [] "-" [IntegerLit [] 5,IntegerLit [] 3]])-> ,p "a like b"-> (FunCall [] "!like" [Identifier [] "a", Identifier [] "b"])-> ]]--> ,Group "function calls" [Expressions [-> p "fn()" (FunCall [] "fn" [])-> ,p "fn(1)" (FunCall [] "fn" [IntegerLit [] 1])-> ,p "fn('test')" (FunCall [] "fn" [stringQ "test"])-> ,p "fn(1,'test')" (FunCall [] "fn" [IntegerLit [] 1, stringQ "test"])-> ,p "fn('test')" (FunCall [] "fn" [stringQ "test"])-> ]]--> ,Group "simple whitespace sanity checks" [Expressions [-> p "fn (1)" (FunCall [] "fn" [IntegerLit [] 1])-> ,p "fn( 1)" (FunCall [] "fn" [IntegerLit [] 1])-> ,p "fn(1 )" (FunCall [] "fn" [IntegerLit [] 1])-> ,p "fn(1) " (FunCall [] "fn" [IntegerLit [] 1])--> ]]--> ,Group "null stuff" [Expressions [-> p "not null" (FunCall [] "!not" [NullLit []])-> ,p "a is null" (FunCall [] "!isnull" [Identifier [] "a"])-> ,p "a is not null" (FunCall [] "!isnotnull" [Identifier [] "a"])--> ,p "not not true" (FunCall [] "!not"-> [FunCall [] "!not"-> [BooleanLit [] True]])-> ]]--> ,Group "case expressions" [Expressions [-> p {-"case when a,b then 3\n\-> \ when c then 4\n\-> \ else 5\n\-> \end" -}-> [$here|-> case when a,b then 3-> when c then 4-> else 5-> end-> |]-> (Case [] [([Identifier [] "a", Identifier [] "b"], IntegerLit [] 3)-> ,([Identifier [] "c"], IntegerLit [] 4)]-> (Just $ IntegerLit [] 5))--> ,p "case 1 when 2 then 3 else 4 end"-> (CaseSimple [] (IntegerLit [] 1)-> [([IntegerLit [] 2], IntegerLit [] 3)]-> (Just $ IntegerLit [] 4))-> ]]--> ,Group "positional args" [Expressions [-> p "$1" (PositionalArg [] 1)-> ,p "?" (Placeholder [])-> ,p "a = ?" (FunCall [] "=" [Identifier [] "a",Placeholder []])-> ]]--> ,Group "exists" [Expressions [-> p "exists (select 1 from a)"-> (Exists [] (selectFrom [SelExp [] (IntegerLit [] 1)] (Tref [] "a" NoAlias)))-> ]]--> ,Group "in variants" [Expressions [-> p "t in (1,2)"-> (InPredicate [] (Identifier [] "t") True (InList [] [IntegerLit [] 1,IntegerLit [] 2]))-> ,p "t not in (1,2)"-> (InPredicate [] (Identifier [] "t") False (InList [] [IntegerLit [] 1,IntegerLit [] 2]))-> ,p "(t,u) in (1,2)"-> (InPredicate [] (FunCall [] "!rowctor" [Identifier [] "t",Identifier [] "u"]) True-> (InList [] [IntegerLit [] 1,IntegerLit [] 2]))-> ,p "3 = any (array[1,2])"-> (LiftOperator [] "=" LiftAny [IntegerLit [] 3-> ,FunCall [] "!arrayctor" [IntegerLit [] 1-> ,IntegerLit [] 2]])-> ,p "3 = all (array[1,2,4])"-> (LiftOperator [] "=" LiftAll [IntegerLit [] 3-> ,FunCall [] "!arrayctor" [IntegerLit [] 1-> ,IntegerLit [] 2-> ,IntegerLit [] 4]])-> ]]--> ,Group "comparison operators" [Expressions [-> p "a < b"-> (FunCall [] "<" [Identifier [] "a", Identifier [] "b"])-> ,p "a <> b"-> (FunCall [] "<>" [Identifier [] "a", Identifier [] "b"])-> ,p "a != b"-> (FunCall [] "<>" [Identifier [] "a", Identifier [] "b"])-> ]]--test some string parsing, want to check single quote behaviour,-and dollar quoting, including nesting.--> ,Group "string parsing" [Expressions [-> p "''" (stringQ "")-> ,p "''''" (stringQ "'")-> ,p "'test'''" (stringQ "test'")-> ,p "'''test'" (stringQ "'test")-> ,p "'te''st'" (stringQ "te'st")-> ,p "$$test$$" (StringLit [] "$$" "test")-> ,p "$$te'st$$" (StringLit [] "$$" "te'st")-> ,p "$st$test$st$" (StringLit [] "$st$" "test")-> ,p "$outer$te$$yup$$st$outer$" (StringLit [] "$outer$" "te$$yup$$st")-> ,p "'spl$$it'" (stringQ "spl$$it")-> ]]-> ]--================================================================================--select statements--> ,Group "simple select statements" [-> Group "select no table" [Statements [-> p "select 1;" [SelectStatement [] $ selectE (SelectList [] [SelExp [] (IntegerLit [] 1)] [])]-> ]]-> ,Group "select from table" [Statements [-> p "select * from tbl;"-> [SelectStatement [] $ selectFrom (selIL ["*"]) (Tref [] "tbl" NoAlias)]-> ,p "select a,b from tbl;"-> [SelectStatement [] $ selectFrom (selIL ["a", "b"]) (Tref [] "tbl" NoAlias)]--> ,p "select a,b from inf.tbl;"-> [SelectStatement [] $ selectFrom (selIL ["a", "b"]) (Tref [] "inf.tbl" NoAlias)]--> ,p "select distinct * from tbl;"-> [SelectStatement [] $ Select [] Distinct (SelectList [] (selIL ["*"]) []) [Tref [] "tbl" NoAlias]-> Nothing [] Nothing [] Nothing Nothing]--> ,p "select a from tbl where b=2;"-> [SelectStatement [] $ selectFromWhere-> (selIL ["a"])-> (Tref [] "tbl" NoAlias)-> (FunCall [] "="-> [Identifier [] "b", IntegerLit [] 2])]-> ,p "select a from tbl where b=2 and c=3;"-> [SelectStatement [] $ selectFromWhere-> (selIL ["a"])-> (Tref [] "tbl" NoAlias)-> (FunCall [] "!and"-> [FunCall [] "=" [Identifier [] "b", IntegerLit [] 2]-> ,FunCall [] "=" [Identifier [] "c", IntegerLit [] 3]])]--> ]]--> ,Group "more select statements" [Statements [-> p "select a from tbl\n\-> \except\n\-> \select a from tbl1;"-> [SelectStatement [] $ CombineSelect [] Except-> (selectFrom (selIL ["a"]) (Tref [] "tbl" NoAlias))-> (selectFrom (selIL ["a"]) (Tref [] "tbl1" NoAlias))]-> ,p "select a from tbl where true\n\-> \except\n\-> \select a from tbl1 where true;"-> [SelectStatement [] $ CombineSelect [] Except-> (selectFromWhere (selIL ["a"]) (Tref [] "tbl" NoAlias) (BooleanLit [] True))-> (selectFromWhere (selIL ["a"]) (Tref [] "tbl1" NoAlias) (BooleanLit [] True))]-> ,p "select a from tbl\n\-> \union\n\-> \select a from tbl1;"-> [SelectStatement [] $ CombineSelect [] Union-> (selectFrom (selIL ["a"]) (Tref [] "tbl" NoAlias))-> (selectFrom (selIL ["a"]) (Tref [] "tbl1" NoAlias))]-> ,p "select a from tbl\n\-> \union all\n\-> \select a from tbl1;"-> [SelectStatement [] $ CombineSelect [] UnionAll-> (selectFrom (selIL ["a"]) (Tref [] "tbl" NoAlias))-> (selectFrom (selIL ["a"]) (Tref [] "tbl1" NoAlias))]--> ,p "(select 1 union select 2) union select 3;"-> [SelectStatement []-> (CombineSelect [] Union-> (CombineSelect [] Union-> (selectE (SelectList [] [SelExp [] (IntegerLit [] 1)] []))-> (selectE (SelectList [] [SelExp [] (IntegerLit [] 2)] [])))-> (selectE (SelectList [] [SelExp [] (IntegerLit [] 3)] [])))]--> ,p "select 1 union (select 2 union select 3);"-> [SelectStatement []-> (CombineSelect [] Union-> (selectE (SelectList [] [SelExp [] (IntegerLit [] 1)] []))-> (CombineSelect [] Union-> (selectE (SelectList [] [SelExp [] (IntegerLit [] 2)] []))-> (selectE (SelectList [] [SelExp [] (IntegerLit [] 3)] []))))]--> ,p "select a as b from tbl;"-> [SelectStatement [] $ selectFrom [SelectItem [] (Identifier [] "a") "b"] (Tref [] "tbl" NoAlias)]-> ,p "select a + b as b from tbl;"-> [SelectStatement [] $ selectFrom-> [SelectItem []-> (FunCall [] "+"-> [Identifier [] "a", Identifier [] "b"]) "b"]-> (Tref [] "tbl" NoAlias)]-> ,p "select a.* from tbl a;"-> [SelectStatement [] $ selectFrom (selIL ["a.*"]) (Tref [] "tbl" (TableAlias "a"))]--> ,p "select a.* from tbl a(b,c);"-> [SelectStatement [] $ selectFrom (selIL ["a.*"]) (Tref [] "tbl" (FullAlias "a" ["b","c"]))]--> ,p "select * from t1 a, t2 b;"-> [SelectStatement []-> (Select [] Dupes-> (SelectList []-> [SelExp [] (Identifier [] "*")] [])-> [Tref [] "t1" (TableAlias "a"),Tref [] "t2" (TableAlias "b")]-> Nothing [] Nothing [] Nothing Nothing)]-> ,p "select a from b inner join c on b.a=c.a;"-> [SelectStatement [] $ selectFrom-> (selIL ["a"])-> (JoinedTref [] (Tref [] "b" NoAlias) Unnatural Inner (Tref [] "c" NoAlias)-> (Just (JoinOn []-> (FunCall [] "=" [Identifier [] "b.a", Identifier [] "c.a"]))) NoAlias)]-> ,p "select a from b inner join c as d on b.a=d.a;"-> [SelectStatement [] $ selectFrom-> (selIL ["a"])-> (JoinedTref [] (Tref [] "b" NoAlias) Unnatural Inner (Tref [] "c" (TableAlias "d"))-> (Just (JoinOn []-> (FunCall [] "=" [Identifier [] "b.a", Identifier [] "d.a"]))) NoAlias)]--> ,p "select a from b inner join c using(d,e);"-> [SelectStatement [] $ selectFrom-> (selIL ["a"])-> (JoinedTref [] (Tref [] "b" NoAlias) Unnatural Inner (Tref [] "c" NoAlias)-> (Just (JoinUsing [] ["d","e"])) NoAlias)]--> ,p "select a from b natural inner join c;"-> [SelectStatement [] $ selectFrom-> (selIL ["a"])-> (JoinedTref [] (Tref [] "b" NoAlias) Natural Inner (Tref [] "c" NoAlias) Nothing NoAlias)]-> ,p "select a from b left outer join c;"-> [SelectStatement [] $ selectFrom-> (selIL ["a"])-> (JoinedTref [] (Tref [] "b" NoAlias) Unnatural LeftOuter (Tref [] "c" NoAlias) Nothing NoAlias)]-> ,p "select a from b full outer join c;"-> [SelectStatement [] $ selectFrom-> (selIL ["a"])-> (JoinedTref [] (Tref [] "b" NoAlias) Unnatural FullOuter (Tref [] "c" NoAlias) Nothing NoAlias)]-> ,p "select a from b right outer join c;"-> [SelectStatement [] $ selectFrom-> (selIL ["a"])-> (JoinedTref [] (Tref [] "b" NoAlias) Unnatural RightOuter (Tref [] "c" NoAlias) Nothing NoAlias)]-> ,p "select a from b cross join c;"-> [SelectStatement [] $ selectFrom-> (selIL ["a"])-> (JoinedTref [] (Tref [] "b" NoAlias) Unnatural Cross (Tref [] "c" NoAlias) Nothing NoAlias)]--> ,p "select a from (b natural join c);"-> [SelectStatement [] $ selectFrom-> (selIL ["a"])-> (JoinedTref [] (Tref [] "b" NoAlias) Natural Inner (Tref [] "c" NoAlias) Nothing NoAlias)]--> ,p "select x from ((a cross join b) cross join c);"-> [SelectStatement []-> (selectFrom (selIL ["x"])-> (JoinedTref []-> (JoinedTref []-> (Tref [] "a" NoAlias)-> Unnatural Cross-> (Tref [] "b" NoAlias)-> Nothing NoAlias)-> Unnatural Cross-> (Tref [] "c" NoAlias)-> Nothing NoAlias))]--> ,p "select x from (a cross join (b cross join c));"-> [SelectStatement []-> (selectFrom (selIL ["x"])-> (JoinedTref []-> (Tref [] "a" NoAlias)-> Unnatural Cross-> (JoinedTref []-> (Tref [] "b" NoAlias)-> Unnatural Cross-> (Tref [] "c" NoAlias)-> Nothing NoAlias)-> Nothing NoAlias))]--> ,p "select x from ((a cross join b) cross join c);"-> [SelectStatement []-> (selectFrom (selIL ["x"])-> (JoinedTref []-> (JoinedTref []-> (Tref [] "a" NoAlias)-> Unnatural Cross-> (Tref [] "b" NoAlias)-> Nothing NoAlias)-> Unnatural Cross-> (Tref [] "c" NoAlias)-> Nothing NoAlias))]--> ,p "select x from (a cross join b) cross join c;"-> [SelectStatement []-> (selectFrom (selIL ["x"])-> (JoinedTref []-> (JoinedTref []-> (Tref [] "a" NoAlias)-> Unnatural Cross-> (Tref [] "b" NoAlias)-> Nothing NoAlias)-> Unnatural Cross-> (Tref [] "c" NoAlias)-> Nothing NoAlias))]--> ,p "select x from ((a cross join b) cross join c) cross join d;"-> [SelectStatement []-> (selectFrom (selIL ["x"])-> (JoinedTref []-> (JoinedTref []-> (JoinedTref []-> (Tref [] "a" NoAlias)-> Unnatural Cross-> (Tref [] "b" NoAlias)-> Nothing NoAlias)-> Unnatural Cross-> (Tref [] "c" NoAlias)-> Nothing NoAlias)-> Unnatural Cross-> (Tref [] "d" NoAlias)-> Nothing NoAlias))]---> ,p "select a from b\n\-> \ inner join c\n\-> \ on true\n\-> \ inner join d\n\-> \ on 1=1;"-> [SelectStatement [] $ selectFrom-> [SelExp [] (Identifier [] "a")]-> (JoinedTref []-> (JoinedTref [] (Tref [] "b" NoAlias) Unnatural Inner (Tref [] "c" NoAlias)-> (Just $ JoinOn [] (BooleanLit [] True)) NoAlias)-> Unnatural Inner (Tref [] "d" NoAlias)-> (Just $ JoinOn [] (FunCall [] "="-> [IntegerLit [] 1, IntegerLit [] 1])) NoAlias)]--> ,p "select row_number() over(order by a) as place from tbl;"-> [SelectStatement [] $ selectFrom [SelectItem []-> (WindowFn []-> (FunCall [] "row_number" [])-> []-> [Identifier [] "a"] Asc FrameUnboundedPreceding)-> "place"]-> (Tref [] "tbl" NoAlias)]-> ,p "select row_number() over(order by a asc) as place from tbl;"-> [SelectStatement [] $ selectFrom [SelectItem []-> (WindowFn []-> (FunCall [] "row_number" [])-> []-> [Identifier [] "a"] Asc FrameUnboundedPreceding)-> "place"]-> (Tref [] "tbl" NoAlias)]-> ,p "select row_number() over(order by a desc) as place from tbl;"-> [SelectStatement [] $ selectFrom [SelectItem []-> (WindowFn []-> (FunCall [] "row_number" [])-> []-> [Identifier [] "a"] Desc FrameUnboundedPreceding)-> "place"]-> (Tref [] "tbl" NoAlias)]-> ,p "select row_number()\n\-> \over(partition by (a,b) order by c) as place\n\-> \from tbl;"-> [SelectStatement [] $ selectFrom [SelectItem []-> (WindowFn []-> (FunCall [] "row_number" [])-> [FunCall [] "!rowctor" [Identifier [] "a",Identifier [] "b"]]-> [Identifier [] "c"] Asc FrameUnboundedPreceding)-> "place"]-> (Tref [] "tbl" NoAlias)]--> ,p "select * from a natural inner join (select * from b) as a;"-> [SelectStatement [] $ selectFrom-> (selIL ["*"])-> (JoinedTref [] (Tref [] "a" NoAlias) Natural-> Inner (SubTref [] (selectFrom-> (selIL ["*"])-> (Tref [] "b" NoAlias)) (TableAlias "a"))-> Nothing NoAlias)]--> ,p "select * from a order by c;"-> [SelectStatement [] $ Select [] Dupes-> (sl (selIL ["*"]))-> [Tref [] "a" NoAlias]-> Nothing [] Nothing [(Identifier [] "c",Asc)] Nothing Nothing]--> ,p "select *\n\-> \from Adventure\n\-> \order by Clicks desc, AdventureID;"-> [SelectStatement [] $ Select [] Dupes-> (sl (selIL ["*"]))-> [Tref [] "Adventure" NoAlias]-> Nothing [] Nothing [(Identifier [] "Clicks",Desc)-> ,(Identifier [] "AdventureID",Asc)] Nothing Nothing]--> ,p "select * from a order by c,d asc;"-> [SelectStatement [] $ Select [] Dupes-> (sl (selIL ["*"]))-> [Tref [] "a" NoAlias]-> Nothing [] Nothing [(Identifier [] "c", Asc)-> ,(Identifier [] "d", Asc)] Nothing Nothing]--> ,p "select * from a order by c,d desc;"-> [SelectStatement [] $ Select [] Dupes-> (sl (selIL ["*"]))-> [Tref [] "a" NoAlias]-> Nothing [] Nothing [(Identifier [] "c", Asc)-> ,(Identifier [] "d", Desc)] Nothing Nothing]--> ,p "select * from a order by c limit 1;"-> [SelectStatement [] $ Select [] Dupes-> (sl (selIL ["*"]))-> [Tref [] "a" NoAlias]-> Nothing [] Nothing [(Identifier [] "c",Asc)] (Just (IntegerLit [] 1)) Nothing]--> ,p "select * from a order by c offset 3;"-> [SelectStatement [] $ Select [] Dupes-> (sl (selIL ["*"]))-> [Tref [] "a" NoAlias]-> Nothing [] Nothing [(Identifier [] "c",Asc)] Nothing (Just $ IntegerLit [] 3)]--> ,p "select a from (select b from c) as d;"-> [SelectStatement [] $ selectFrom-> (selIL ["a"])-> (SubTref [] (selectFrom-> (selIL ["b"])-> (Tref [] "c" NoAlias))-> (TableAlias "d"))]--> ,p "select * from gen();"-> [SelectStatement [] $ selectFrom (selIL ["*"]) (TrefFun [] (FunCall [] "gen" []) NoAlias)]-> ,p "select * from gen() as t;"-> [SelectStatement [] $ selectFrom-> (selIL ["*"])-> (TrefFun [] (FunCall [] "gen" [])(TableAlias "t"))]--> ,p "select a, count(b) from c group by a;"-> [SelectStatement [] $ Select [] Dupes-> (sl [selI "a", SelExp [] (FunCall [] "count" [Identifier [] "b"])])-> [Tref [] "c" NoAlias] Nothing [Identifier [] "a"]-> Nothing [] Nothing Nothing]--> ,p "select a, count(b) as cnt from c group by a having cnt > 4;"-> [SelectStatement [] $ Select [] Dupes-> (sl [selI "a", SelectItem [] (FunCall [] "count" [Identifier [] "b"]) "cnt"])-> [Tref [] "c" NoAlias] Nothing [Identifier [] "a"]-> (Just $ FunCall [] ">" [Identifier [] "cnt", IntegerLit [] 4])-> [] Nothing Nothing]--> ,p "select a from (select 1 as a, 2 as b) x;"-> [SelectStatement [] $ selectFrom-> [selI "a"]-> (SubTref [] (selectE $ SelectList []-> [SelectItem [] (IntegerLit [] 1) "a"-> ,SelectItem [] (IntegerLit [] 2) "b"] [])-> (TableAlias "x"))]-> ]]--> ,Group "multiple statements" [Statements [-> p "select 1;\nselect 2;" [SelectStatement [] $ selectE $ sl [SelExp [] (IntegerLit [] 1)]-> ,SelectStatement [] $ selectE $ sl [SelExp [] (IntegerLit [] 2)]]-> ]]--> ,Group "comments" [Statements [-> p "" []-> ,p "-- this is a test" []-> ,p "/* this is\n\-> \a test*/" []-> ,p "select 1;\n\-> \-- this is a test\n\-> \select -- this is a test\n\-> \2;" [SelectStatement [] $ selectE $ sl [SelExp [] (IntegerLit [] 1)]-> ,SelectStatement [] $ selectE $ sl [SelExp [] (IntegerLit [] 2)]-> ]-> ,p "select 1;\n\-> \/* this is\n\-> \a test*/\n\-> \select /* this is a test*/2;"-> [SelectStatement [] $ selectE $ sl [SelExp [] (IntegerLit [] 1)]-> ,SelectStatement [] $ selectE $ sl [SelExp [] (IntegerLit [] 2)]-> ]-> ]]-> ]--================================================================================--dml statements--> ,Group "dml" [-> Group "insert" [Statements [-> p "insert into testtable\n\-> \(columna,columnb)\n\-> \values (1,2);\n"-> [Insert []-> "testtable"-> ["columna", "columnb"]-> (Values [] [[IntegerLit [] 1, IntegerLit [] 2]])-> Nothing]--multi row insert, test the stand alone values statement first, maybe-that should be in the select section?--> ,p "values (1,2), (3,4);"-> [SelectStatement [] $ Values [] [[IntegerLit [] 1, IntegerLit [] 2]-> ,[IntegerLit [] 3, IntegerLit [] 4]]]--> ,p "insert into testtable\n\-> \(columna,columnb)\n\-> \values (1,2), (3,4);\n"-> [Insert []-> "testtable"-> ["columna", "columnb"]-> (Values [] [[IntegerLit [] 1, IntegerLit [] 2]-> ,[IntegerLit [] 3, IntegerLit [] 4]])-> Nothing]--insert from select--> ,p "insert into a\n\-> \ select b from c;"-> [Insert [] "a" []-> (selectFrom [selI "b"] (Tref [] "c" NoAlias))-> Nothing]--> ,p "insert into testtable\n\-> \(columna,columnb)\n\-> \values (1,2) returning id;\n"-> [Insert []-> "testtable"-> ["columna", "columnb"]-> (Values [] [[IntegerLit [] 1, IntegerLit [] 2]])-> (Just $ sl [selI "id"])]-> ]]--> ,Group "update" [Statements [-> p "update tb\n\-> \ set x = 1, y = 2;"-> [Update [] "tb" [SetClause [] "x" (IntegerLit [] 1)-> ,SetClause [] "y" (IntegerLit [] 2)]-> Nothing Nothing]-> ,p "update tb\n\-> \ set x = 1, y = 2 where z = true;"-> [Update [] "tb" [SetClause [] "x" (IntegerLit [] 1)-> ,SetClause [] "y" (IntegerLit [] 2)]-> (Just $ FunCall [] "="-> [Identifier [] "z", BooleanLit [] True])-> Nothing]-> ,p "update tb\n\-> \ set x = 1, y = 2 returning id;"-> [Update [] "tb" [SetClause [] "x" (IntegerLit [] 1)-> ,SetClause [] "y" (IntegerLit [] 2)]-> Nothing (Just $ sl [selI "id"])]-> ,p "update pieces\n\-> \set a=b returning tag into r.tag;"-> [Update [] "pieces" [SetClause [] "a" (Identifier [] "b")]-> Nothing (Just (SelectList []-> [SelExp [] (Identifier [] "tag")]-> ["r.tag"]))]-> ,p "update tb\n\-> \ set (x,y) = (1,2);"-> [Update [] "tb" [RowSetClause []-> ["x","y"]-> [IntegerLit [] 1,IntegerLit [] 2]]-> Nothing Nothing]-> ]]--> ,Group "delete" [Statements [-> p "delete from tbl1 where x = true;"-> [Delete [] "tbl1" (Just $ FunCall [] "="-> [Identifier [] "x", BooleanLit [] True])-> Nothing]-> ,p "delete from tbl1 where x = true returning id;"-> [Delete [] "tbl1" (Just $ FunCall [] "="-> [Identifier [] "x", BooleanLit [] True])-> (Just $ sl [selI "id"])]-> ]]--> ,Group "truncate" [Statements [-> p "truncate test;"-> [Truncate [] ["test"] ContinueIdentity Restrict]--> ,p "truncate table test, test2 restart identity cascade;"-> [Truncate [] ["test","test2"] RestartIdentity Cascade]-> ]]--copy, bit crap at the moment--> ,Group "copy" [Statements [-> p "copy tbl(a,b) from stdin;\n\-> \bat\tt\n\-> \bear\tf\n\-> \\\.\n"-> [Copy [] "tbl" ["a", "b"] Stdin-> ,CopyData [] "\-> \bat\tt\n\-> \bear\tf\n"]-> ]]--================================================================================--ddl statements--> ,Group "ddl" [-> Group "simple tables" [Statements [-> p "create table test (\n\-> \ fielda text,\n\-> \ fieldb int\n\-> \);"-> [CreateTable []-> "test"-> [att "fielda" "text"-> ,att "fieldb" "int"-> ]-> []]-> ,p "create table tbl (\n\-> \ fld boolean default false);"-> [CreateTable [] "tbl" [AttributeDef [] "fld" (SimpleTypeName [] "boolean")-> (Just $ BooleanLit [] False) []][]]--> ,p "create table tbl as select 1;"-> [CreateTableAs [] "tbl"-> (selectE (SelectList [] [SelExp [] (IntegerLit [] 1)] []))]---> ,p "alter table a alter column b set default 1;"-> [AlterTable [] "a" [AlterColumnDefault [] "b" (IntegerLit [] 1)]]--> ,p "alter table a add constraint unique(b);"-> [AlterTable [] "a" [AddConstraint [] (UniqueConstraint [] "" ["b"])]]-> ]]--> ,Group "others" [Statements [-> p "create view v1 as\n\-> \select a,b from t;"-> [CreateView []-> "v1"-> (selectFrom [selI "a", selI "b"] (Tref [] "t" NoAlias))]-> ,p "create domain td as text check (value in ('t1', 't2'));"-> [CreateDomain [] "td" (SimpleTypeName [] "text") ""-> (Just (InPredicate [] (Identifier [] "value") True-> (InList [] [stringQ "t1" ,stringQ "t2"])))]-> ,p "create type tp1 as (\n\-> \ f1 text,\n\-> \ f2 text\n\-> \);"-> [CreateType [] "tp1" [TypeAttDef [] "f1" (SimpleTypeName [] "text")-> ,TypeAttDef [] "f2" (SimpleTypeName [] "text")]]--> ,p "create sequence s start with 5 increment by 4 no maxvalue no minvalue cache 1;"-> [CreateSequence [] "s" 4 1 ((2::Integer) ^ (63::Integer) - 1) 5 1]--> ,p "alter sequence s owned by a.b;"-> [AlterSequence [] "s" "a.b"]--> ,p "create trigger tr\n\-> \after insert or delete on tb\n\-> \for each statement\n\-> \execute procedure fb();"-> [CreateTrigger [] "tr" TriggerAfter [TInsert,TDelete] "tb" EachStatement "fb" []]-> ]]--> ,Group "drops" [Statements [-> p "drop domain t;"-> [DropSomething [] Domain Require ["t"] Restrict]-> ,p "drop domain if exists t,u cascade;"-> [DropSomething [] Domain IfExists ["t", "u"] Cascade]-> ,p "drop domain t restrict;"-> [DropSomething [] Domain Require ["t"] Restrict]--> ,p "drop type t;"-> [DropSomething [] Type Require ["t"] Restrict]-> ,p "drop table t;"-> [DropSomething [] Table Require ["t"] Restrict]-> ,p "drop view t;"-> [DropSomething [] View Require ["t"] Restrict]--> ]]--> ,Group "constraints" [-> Group "nulls" [Statements [-> p "create table t1 (\n\-> \ a text null\n\-> \);"-> [CreateTable [] "t1" [AttributeDef [] "a" (SimpleTypeName [] "text")-> Nothing [NullConstraint [] ""]]-> []]-> ,p "create table t1 (\n\-> \ a text not null\n\-> \);"-> [CreateTable [] "t1" [AttributeDef [] "a" (SimpleTypeName [] "text")-> Nothing [NotNullConstraint [] ""]]-> []]-> ]]--> ,Group "unique" [Statements [-> p "create table t1 (\n\-> \ x int,\n\-> \ y int,\n\-> \ unique (x,y)\n\-> \);"-> [CreateTable [] "t1" [att "x" "int"-> ,att "y" "int"]-> [UniqueConstraint [] "" ["x","y"]]]--test arbitrary ordering--> ,p "create table t1 (\n\-> \ x int,\n\-> \ unique (x),\n\-> \ y int\n\-> \);"-> [CreateTable [] "t1" [att "x" "int"-> ,att "y" "int"]-> [UniqueConstraint [] "" ["x"]]]--unique row--> ,p "create table t1 (\n\-> \ x int unique\n\-> \);"-> [CreateTable [] "t1" [AttributeDef [] "x" (SimpleTypeName [] "int") Nothing-> [RowUniqueConstraint [] ""]][]]--> ,p "create table t1 (\n\-> \ x int unique not null\n\-> \);"-> [CreateTable [] "t1" [AttributeDef [] "x" (SimpleTypeName [] "int") Nothing-> [RowUniqueConstraint [] ""-> ,NotNullConstraint [] ""]][]]--quick sanity check--> ,p "create table t1 (\n\-> \ x int not null unique\n\-> \);"-> [CreateTable [] "t1" [AttributeDef [] "x" (SimpleTypeName [] "int") Nothing-> [NotNullConstraint [] ""-> ,RowUniqueConstraint [] ""]][]]-> ]]--> ,Group "primary key" [Statements [-> p "create table t1 (\n\-> \ x int primary key\n\-> \);"-> [CreateTable [] "t1" [AttributeDef [] "x" (SimpleTypeName [] "int") Nothing-> [RowPrimaryKeyConstraint [] ""]][]]--> ,p "create table t1 (\n\-> \ x int,\n\-> \ y int,\n\-> \ primary key (x,y)\n\-> \);"-> [CreateTable [] "t1" [att "x" "int"-> ,att "y" "int"]-> [PrimaryKeyConstraint [] "" ["x", "y"]]]--> ]]--> ,Group "check" [Statements [-> p "create table t (\n\-> \f text check (f in('a', 'b'))\n\-> \);"-> [CreateTable [] "t"-> [AttributeDef [] "f" (SimpleTypeName [] "text") Nothing-> [RowCheckConstraint [] "" (InPredicate []-> (Identifier [] "f") True-> (InList [] [stringQ "a", stringQ "b"]))]] []]--> ,p "create table t1 (\n\-> \ x int,\n\-> \ y int,\n\-> \ check (x>y)\n\-> \);"-> [CreateTable [] "t1" [att "x" "int"-> ,att "y" "int"]-> [CheckConstraint [] "" (FunCall [] ">" [Identifier [] "x", Identifier [] "y"])]]-> ]]--> ,Group "misc" [Statements [-> p "create table t (\n\-> \f text not null unique check (f in('a', 'b'))\n\-> \);"-> [CreateTable [] "t"-> [AttributeDef [] "f" (SimpleTypeName [] "text") Nothing-> [NotNullConstraint [] ""-> ,RowUniqueConstraint [] ""-> ,RowCheckConstraint [] "" (InPredicate []-> (Identifier [] "f") True-> (InList [] [stringQ "a"-> ,stringQ "b"]))]] []]--> ]]--> ,Group "references" [Statements [-> p "create table t1 (\n\-> \ x int references t2\n\-> \);"-> [CreateTable [] "t1" [AttributeDef [] "x" (SimpleTypeName [] "int") Nothing-> [RowReferenceConstraint [] "" "t2" Nothing-> Restrict Restrict]][]]--> ,p "create table t1 (\n\-> \ x int references t2(y)\n\-> \);"-> [CreateTable [] "t1" [AttributeDef [] "x" (SimpleTypeName [] "int") Nothing-> [RowReferenceConstraint [] "" "t2" (Just "y")-> Restrict Restrict]][]]---> ,p "create table t1 (\n\-> \ x int,\n\-> \ y int,\n\-> \ foreign key (x,y) references t2\n\-> \);"-> [CreateTable [] "t1" [att "x" "int"-> ,att "y" "int"]-> [ReferenceConstraint [] "" ["x", "y"] "t2" []-> Restrict Restrict]]--> ,p "create table t1 (\n\-> \ x int,\n\-> \ y int,\n\-> \ foreign key (x,y) references t2(z,w)\n\-> \);"-> [CreateTable [] "t1" [att "x" "int"-> ,att "y" "int"]-> [ReferenceConstraint [] "" ["x", "y"] "t2" ["z", "w"]-> Restrict Restrict]]--> ,p "create table t1 (\n\-> \ x int references t2 on delete cascade\n\-> \);"-> [CreateTable [] "t1" [AttributeDef [] "x" (SimpleTypeName [] "int") Nothing-> [RowReferenceConstraint [] "" "t2" Nothing-> Cascade Restrict]][]]--> ,p "create table t1 (\n\-> \ x int references t2 on update cascade\n\-> \);"-> [CreateTable [] "t1" [AttributeDef [] "x" (SimpleTypeName [] "int") Nothing-> [RowReferenceConstraint [] "" "t2" Nothing-> Restrict Cascade]][]]--> ,p "create table t1 (\n\-> \ x int,\n\-> \ y int,\n\-> \ foreign key (x,y) references t2 on update cascade on delete cascade\n\-> \);"-> [CreateTable [] "t1" [att "x" "int"-> ,att "y" "int"]-> [ReferenceConstraint [] "" ["x", "y"] "t2" []-> Cascade Cascade]]--> ]]-> ]]-> ,Group "functions" [-> Group "basics" [Statements [-> p "create function t1(text) returns text as $$\n\-> \select a from t1 where b = $1;\n\-> \$$ language sql stable;"-> [CreateFunction [] "t1" [ParamDefTp [] $ SimpleTypeName [] "text"]-> (SimpleTypeName [] "text") Sql "$$"-> (SqlFnBody []-> [SelectStatement [] $ selectFromWhere [SelExp [] (Identifier [] "a")] (Tref [] "t1" NoAlias)-> (FunCall [] "="-> [Identifier [] "b", PositionalArg [] 1])])-> Stable]-> ,p "create function fn() returns void as $$\n\-> \declare\n\-> \ a int;\n\-> \ b text;\n\-> \begin\n\-> \ null;\n\-> \end;\n\-> \$$ language plpgsql volatile;"-> [CreateFunction [] "fn" [] (SimpleTypeName [] "void") Plpgsql "$$"-> (PlpgsqlFnBody [] [VarDef [] "a" (SimpleTypeName [] "int") Nothing-> ,VarDef [] "b" (SimpleTypeName [] "text") Nothing]-> [NullStatement []])-> Volatile]-> ,p "create function fn() returns void as $$\n\-> \declare\n\-> \ a int;\n\-> \ b text;\n\-> \begin\n\-> \ null;\n\-> \end;\n\-> \$$ language plpgsql volatile;"-> [CreateFunction [] "fn" [] (SimpleTypeName [] "void") Plpgsql "$$"-> (PlpgsqlFnBody [] [VarDef [] "a" (SimpleTypeName [] "int") Nothing-> ,VarDef [] "b" (SimpleTypeName [] "text") Nothing]-> [NullStatement []])-> Volatile]-> ,p "create function fn(a text[]) returns int[] as $$\n\-> \declare\n\-> \ b xtype[] := '{}';\n\-> \begin\n\-> \ null;\n\-> \end;\n\-> \$$ language plpgsql immutable;"-> [CreateFunction [] "fn"-> [ParamDef [] "a" $ ArrayTypeName [] $ SimpleTypeName [] "text"]-> (ArrayTypeName [] $ SimpleTypeName [] "int") Plpgsql "$$"-> (PlpgsqlFnBody []-> [VarDef [] "b" (ArrayTypeName [] $ SimpleTypeName [] "xtype") (Just $ stringQ "{}")]-> [NullStatement []])-> Immutable]-> ,p "create function fn() returns void as '\n\-> \declare\n\-> \ a int := 3;\n\-> \begin\n\-> \ null;\n\-> \end;\n\-> \' language plpgsql stable;"-> [CreateFunction [] "fn" [] (SimpleTypeName [] "void") Plpgsql "'"-> (PlpgsqlFnBody [] [VarDef [] "a" (SimpleTypeName [] "int") (Just $ IntegerLit [] 3)]-> [NullStatement []])-> Stable]-> ,p "create function fn() returns setof int as $$\n\-> \begin\n\-> \ null;\n\-> \end;\n\-> \$$ language plpgsql stable;"-> [CreateFunction [] "fn" []-> (SetOfTypeName [] $ SimpleTypeName [] "int") Plpgsql "$$"-> (PlpgsqlFnBody [] [] [NullStatement []])-> Stable]-> ,p "create function fn() returns void as $$\n\-> \begin\n\-> \ null;\n\-> \end\n\-> \$$ language plpgsql stable;"-> [CreateFunction [] "fn" []-> (SimpleTypeName [] "void") Plpgsql "$$"-> (PlpgsqlFnBody [] [] [NullStatement []])-> Stable]-> ,p "drop function test(text);"-> [DropFunction [] Require [("test",[SimpleTypeName [] "text"])] Restrict]-> ,p "drop function if exists a(),test(text) cascade;"-> [DropFunction [] IfExists [("a",[])-> ,("test",[SimpleTypeName [] "text"])] Cascade]-> ]]--> ,Group "simple plpgsql statements" [PlpgsqlStatements [-> p "success := true;"-> [Assignment [] "success" (BooleanLit [] True)]-> ,p "success = true;"-> [Assignment [] "success" (BooleanLit [] True)]-> ,p "return true;"-> [Return [] $ Just (BooleanLit [] True)]-> ,p "return;"-> [Return [] Nothing]-> ,p "return next 1;"-> [ReturnNext [] $ IntegerLit [] 1]-> ,p "return query select a from b;"-> [ReturnQuery [] $ selectFrom [selI "a"] (Tref [] "b" NoAlias)]-> ,p "raise notice 'stuff %', 1;"-> [Raise [] RNotice "stuff %" [IntegerLit [] 1]]-> ,p "perform test();"-> [Perform [] $ FunCall [] "test" []]-> ,p "perform test(a,b);"-> [Perform [] $ FunCall [] "test" [Identifier [] "a", Identifier [] "b"]]-> ,p "perform test(r.relvar_name || '_and_stuff');"-> [Perform [] $ FunCall [] "test" [-> FunCall [] "||" [Identifier [] "r.relvar_name"-> ,stringQ "_and_stuff"]]]-> ,p "select into a,b c,d from e;"-> [SelectStatement [] $ Select [] Dupes (SelectList [] [selI "c", selI "d"] ["a", "b"])-> [Tref [] "e" NoAlias] Nothing [] Nothing [] Nothing Nothing]-> ,p "select c,d into a,b from e;"-> [SelectStatement [] $ Select [] Dupes (SelectList [] [selI "c", selI "d"] ["a", "b"])-> [Tref [] "e" NoAlias] Nothing [] Nothing [] Nothing Nothing]--> ,p "execute s;"-> [Execute [] (Identifier [] "s")]-> ,p "execute s into r;"-> [ExecuteInto [] (Identifier [] "s") ["r"]]--> ,p "continue;" [ContinueStatement []]-> ]]--> ,Group "other plpgsql statements" [PlpgsqlStatements [-> p "for r in select a from tbl loop\n\-> \null;\n\-> \end loop;"-> [ForSelectStatement [] "r" (selectFrom [selI "a"] (Tref [] "tbl" NoAlias))-> [NullStatement []]]-> ,p "for r in select a from tbl where true loop\n\-> \null;\n\-> \end loop;"-> [ForSelectStatement [] "r"-> (selectFromWhere [selI "a"] (Tref [] "tbl" NoAlias) (BooleanLit [] True))-> [NullStatement []]]-> ,p "for r in 1 .. 10 loop\n\-> \null;\n\-> \end loop;"-> [ForIntegerStatement [] "r"-> (IntegerLit [] 1) (IntegerLit [] 10)-> [NullStatement []]]--> ,p "if a=b then\n\-> \ update c set d = e;\n\-> \end if;"-> [If [] [((FunCall [] "=" [Identifier [] "a", Identifier [] "b"])-> ,[Update [] "c" [SetClause [] "d" (Identifier [] "e")] Nothing Nothing])]-> []]-> ,p "if true then\n\-> \ null;\n\-> \else\n\-> \ null;\n\-> \end if;"-> [If [] [((BooleanLit [] True),[NullStatement []])]-> [NullStatement []]]-> ,p "if true then\n\-> \ null;\n\-> \elseif false then\n\-> \ return;\n\-> \end if;"-> [If [] [((BooleanLit [] True), [NullStatement []])-> ,((BooleanLit [] False), [Return [] Nothing])]-> []]-> ,p "if true then\n\-> \ null;\n\-> \elseif false then\n\-> \ return;\n\-> \elseif false then\n\-> \ return;\n\-> \else\n\-> \ return;\n\-> \end if;"-> [If [] [((BooleanLit [] True), [NullStatement []])-> ,((BooleanLit [] False), [Return [] Nothing])-> ,((BooleanLit [] False), [Return [] Nothing])]-> [Return [] Nothing]]-> ,p "case a\n\-> \ when b then null;\n\-> \ when c,d then null;\n\-> \ else null;\n\-> \end case;"-> [CaseStatement [] (Identifier [] "a")-> [([Identifier [] "b"], [NullStatement []])-> ,([Identifier [] "c", Identifier [] "d"], [NullStatement []])]-> [NullStatement []]]--> ]]--> ,Group "misc" [Statements [-> p "SET search_path TO my_schema, public;"-> [Set [] "search_path" [SetId [] "my_schema"-> ,SetId [] "public"]]-> ,p "SET t1 = 3;"-> [Set [] "t1" [SetNum [] 3]]-> ,p "SET t1 = 'stuff';"-> [Set [] "t1" [SetStr [] "stuff"]]-> ,p "create language plpgsql;"-> [CreateLanguage [] "plpgsql"]--> ]]--> ]]]--================================================================================--shortcuts for constructing test data and asts--> p :: t -> t1 -> (t, t1)-> p a b = (a,b)--> stringQ :: String -> Expression-> stringQ = StringLit [] "'"--> selectFrom :: SelectItemList-> -> TableRef-> -> SelectExpression-> selectFrom selList frm = Select [] Dupes (SelectList [] selList [])-> [frm] Nothing [] Nothing [] Nothing Nothing--> selectE :: SelectList -> SelectExpression-> selectE selList = Select [] Dupes selList-> [] Nothing [] Nothing [] Nothing Nothing--> selIL :: [String] -> [SelectItem]-> selIL = map selI--> selI :: String -> SelectItem-> selI = SelExp [] . Identifier []--> sl :: SelectItemList -> SelectList-> sl a = SelectList [] a []--> selectFromWhere :: SelectItemList-> -> TableRef-> -> Expression-> -> SelectExpression-> selectFromWhere selList frm whr =-> Select [] Dupes (SelectList [] selList [])-> [frm] (Just whr) [] Nothing [] Nothing Nothing--> att :: String -> String -> AttributeDef-> att n t = AttributeDef [] n (SimpleTypeName [] t) Nothing []---================================================================================--Unit test helpers--> itemToTft :: Item -> [Test.Framework.Test]-> itemToTft (Expressions es) = map (uncurry testParseExpression) es-> itemToTft (PlpgsqlStatements es) = map (uncurry testParsePlpgsqlStatements) es-> itemToTft (Statements es) = map (uncurry testParseStatements) es-> itemToTft (Group s is) = [testGroup s $ concatMap itemToTft is]---> testParseExpression :: String -> Expression -> Test.Framework.Test-> testParseExpression src ast = parseUtil src ast-> (parseExpression "") printExpression--> testParseStatements :: String -> [Statement] -> Test.Framework.Test-> testParseStatements src ast = parseUtil src ast (parseSql "") printSql--> testParsePlpgsqlStatements :: String -> [Statement] -> Test.Framework.Test-> testParsePlpgsqlStatements src ast = parseUtil src ast (parsePlpgsql "") printSql--> parseUtil :: (Show t, Eq b, Show b, Data b) =>-> String-> -> b-> -> (String -> Either t b)-> -> (b -> String)-> -> Test.Framework.Test-> parseUtil src ast parser printer = testCase ("parse " ++ src) $-> case parser src of-> Left er -> assertFailure $ show er-> Right ast' -> do-> assertEqual ("parse " ++ src) ast $ stripAnnotations ast'-> case parser (printer ast) of-> Left er -> assertFailure $ "reparse\n" ++ show er ++ "\n" -- ++ pp ++ "\n"-> Right ast'' -> assertEqual ("reparse " ++ printer ast) ast $ stripAnnotations ast''--TODO-new idea for testing:-parsesql -> ast1-parse, pretty print, parse -> ast2-load into pg, pg_dump, parse -> ast3-parse, pretty print, load into pg, pg_dump, parse -> ast4-check all these asts are the same
− Database/HsSqlPpp/Tests/RoundtripTests.lhs
@@ -1,249 +0,0 @@-Copyright 2010 Jake Wheat--Test sql by typechecking it, then running it through Postgres and comparing:-* compare the catalog from typechecking to the one read from postgres-* load then dump the sql and compare post and pre asts-* (NOT STARTED ON YET) create views and check the type from type- checking to the one from pg--> module Database.HsSqlPpp.Tests.RoundtripTests (roundtripTests) where--> import Test.HUnit-> import Test.Framework-> import Test.Framework.Providers.HUnit-> import Control.Monad.Error-> import Data.List-> import Data.Generics-> import Data.Generics.PlateData-> import Data.Char--> import Database.HsSqlPpp.Utils-> import Database.HsSqlPpp.Parsing.Parser-> import Database.HsSqlPpp.Ast.Catalog-> import Database.HsSqlPpp.Ast.TypeChecker-> import Database.HsSqlPpp.Dbms.DBUtils-> import Database.HsSqlPpp.Dbms.DatabaseLoader-> import Database.HsSqlPpp.Ast.Annotation-> import Database.HsSqlPpp.Ast.Ast-> import Database.HsSqlPpp.Ast.SqlTypes--slightly dodgy, these tests automatically connect to this database and-clear it. hopefully no-one running these tests is storing important-data in a database with this name--> testDatabaseName :: String-> testDatabaseName = "hssqlpppautomatedtests"--> data Item = Group String [Item]-> | Src [(String,String)]--> roundtripTests :: [Test.Framework.Test]-> roundtripTests = itemToTft roundtripTestData--> roundtripTestData :: Item-> roundtripTestData =-> Group "round trip tests" [ Src [-> ("simple select"-> ,"select 1 from pg_attrdef;")-> ,("create domain"-> ,"create domain testd as text;")-> ,("create domain with check"-> ,"create domain testd as text check (length(value) > 2);")-> ,("create composite"-> ,"create type pos as (\n\-> \ x int,\n\-> \ y int);")-> ,("create table"-> ,"create table ttable (\n\-> \ x int,\n\-> \ y int);")-> --,("create table with constraints"-> -- ,"create table ttable (\n\-> -- \ x int primary key,\n\-> -- \ y int not null);")-> ,("create view"-> ,"create view v1 as select * from pg_attrdef;")-> ,("create function"-> ,"create function test1() returns integer as $$\n\-> \ select 1;\n\-> \$$ language sql;")-> ,("create plpgsql function"-> ,"create language plpgsql;\n\-> \create function test1() returns void as $$\n\-> \begin\n\-> \ null;\n\-> \end;\n\-> \$$ language plpgsql;")-> ]]--TODO for test data:-run through constraints in create table after attribute and as seperate rows-do multiple constraints on a line-use create view to run through select variations---================================================================================---> itemToTft :: Item -> [Test.Framework.Test]-> itemToTft (Group s is) = [testGroup s $ concatMap itemToTft is]-> itemToTft (Src ss) = map (uncurry testRoundtrip) ss--> testRoundtrip :: String -> String -> Test.Framework.Test-> testRoundtrip name sql = testCase ("test " ++ name) $ wrapETT $ do-> astOrig <- tsl $ parseSql "" sql-> let (catOrig, astOrigTC) = typeCheck defaultTemplate1Catalog astOrig-> failIfTypeErrors astOrigTC-> -- run the tests first using psql to load the sql into the database-> -- and then using hssqlppp's database loader to load the sql into-> -- the database-> doPgTests astOrig catOrig (liftIO (loadSqlUsingPsql testDatabaseName sql >> return ()))-> doPgTests astOrig catOrig (liftIO $ loadIntoDatabase testDatabaseName "" astOrig)-> where-> doPgTests :: [Statement] -> Catalog -> ErrorT String IO () -> ErrorT String IO () -- a -> a-> doPgTests astOrig catOrig loadIntoDb = do-> -- parse and type check the test sql-> -- load this sql into pg-> liftIO $ clearDB testDatabaseName-> loadIntoDb-> -- check the catalog in pg is the same as the one from type checking-> catPsql <- liftIO (readCatalog testDatabaseName) >>= tsl-> compareCats "load" catOrig catPsql-> -- dump the database to get the sql having been normalized by passing-> -- it through pg's digestive system-> dumpSql <- liftIO $ pgDump testDatabaseName-> astDumped <- tsl $ parseSql "" dumpSql-> let (catDumped, astDumpedTC) = typeCheck defaultTemplate1Catalog astDumped-> failIfTypeErrors $ astDumpedTC-> -- check the original catalog from the catalog gotten from-> -- dumping then typechecking the dump, maybe a little excessive-> compareCats "dump" catOrig catDumped-> -- compare the original ast to the dump ast, uses a transform-> -- to match the changes that happen to the sql when loaded-> -- then dumped by pg-> let astOrigAdj = adjustAstToLookLikeDump $ adjTree astOrig-> astDumpedAdj = adjTree astDumped-> -- do this when a test fails to help diagnose why-> when (astOrigAdj /= astDumpedAdj) $-> liftIO $ putStrLn $ sql ++ "\n" ++ dumpSql-> liftIO $ assertEqual "check dump ast" astOrigAdj astDumpedAdj--> compareCats s c1 c2 =-> case compareCatalogs defaultTemplate1Catalog c1 c2 of-> CatalogDiff [] [] -> liftIO $ return ()-> c -> liftIO $ assertFailure $ s ++ ", catalogs different: " ++ ppCatDiff c-> -- adjust tree is the normalization that we run on the original ast as-> -- well as the dumped ast-> adjTree :: [Statement] -> [Statement]-> adjTree = canonicalizeTypeNames . stripAnnotations-> failIfTypeErrors xast = do-> let te = getTypeErrors xast-> when (not $ null te) $ throwError $ show te--take the parse tree and change the type names to the canonical versions--> canonicalizeTypeNames :: Data a => a -> a-> canonicalizeTypeNames =-> transformBi $ \x ->-> case x of-> SimpleTypeName a tn -> SimpleTypeName a $ canonicalizeTypeName tn-> x1 -> x1---================================================================================--ast roundtrip tests:-want to compare the asts of parsed sql, with the asts of the sql-loaded into pg, dumped and parsed-issues:-some statements are split apart e.g. create table with constraints-some statements are reordered in the dump-a create, select and then drop will be a problem-so need some sort of map function to convert between, and use-extensions to cover the dynamic ddl---one of the things really want to double check is associativity and-precedence mainly in select expressions, pg_dump puts in the implicit-brackets which we can use to check these things---> adjustAstToLookLikeDump :: [Statement] -> [Statement]-> adjustAstToLookLikeDump ast =-> (addPresets . stripDml . addConstraintNames) ast-> where-> -- add the following at the beginning of the ast, since this is what pg_dump does-> -- SET statement_timeout = 0;-> -- SET client_encoding = 'UTF8';-> -- SET standard_conforming_strings = off;-> -- SET check_function_bodies = false;-> -- SET client_min_messages = warning;-> -- SET escape_string_warning = off;->-> -- SET search_path = public, pg_catalog;-> noDml = stripDml ast-> addPresets = adjustForCreatePlpgsql . (presets ++)-> adjustForCreatePlpgsql =-> transformBi $ \x ->-> case x of-> s@(Set _ "search_path" _):s1@(CreateLanguage _ _):s2 -> s1:s:s2-> z -> z--> presets = [Set [] "statement_timeout" [SetNum [] 0.0]-> ,Set [] "client_encoding" [SetStr [] "UTF8"]-> ,Set [] "standard_conforming_strings" [SetId [] "off"]-> ,Set [] "check_function_bodies" [SetId [] "false"]-> ,Set [] "client_min_messages" [SetId [] "warning"]-> ,Set [] "escape_string_warning" [SetId [] "off"]]-> -- if there are no statements, pg_dump doesn't spit out the search path-> ++ if null noDml then [] else-> [Set [] "search_path" [SetId [] "public", SetId [] "pg_catalog"]]-> -- these two sets get added if there are create tables-> ++ case flip find ast (\s ->-> case s of-> CreateTable _ _ _ _ -> True-> _ -> False) of-> Nothing -> []-> Just _ -> [Set [] "default_tablespace" [SetStr [] ""]-> ,Set [] "default_with_oids" [SetId [] "false"]]-> -- dml statements don't appear in the dump-> stripDml = filter (\s -> case s of-> SelectStatement _ _ -> False-> Insert _ _ _ _ _ -> False-> Update _ _ _ _ _ -> False-> Delete _ _ _ _ -> False-> Copy _ _ _ _ -> False-> CopyData _ _ -> False-> Truncate _ _ _ _ -> False-> _ -> True)--when pg comes across a constraint without a name, it generates one-automatically and this appears in the dump, so try to follow the-generation here, also any 'value' identifiers will be in uppercase--> addConstraintNames :: Data a => a -> a-> addConstraintNames =-> transformBi $ \x ->-> case x of-> CreateDomain a name base "" cons ->-> CreateDomain a name base-> (case cons of-> Nothing -> ""-> Just _ -> name ++ "_check") (upcaseValue cons)-> where-> upcaseValue = transformBi $ \y ->-> case y of-> Identifier a1 i | map toUpper i == "VALUE" ->-> Identifier a1 "VALUE"-> y1 -> y1-> x1 -> x1--================================================================================--some random support functions, to be tidied up--> wrapETT :: (Show e) => ErrorT e IO () -> IO ()-> wrapETT c = runErrorT c >>= \x ->-> case x of-> Left er -> assertFailure $ show er-> Right l -> return l
− Database/HsSqlPpp/Tests/TypeCheckTests.lhs
@@ -1,1119 +0,0 @@-Copyright 2009 Jake Wheat--Set of tests to check the type checking code. Includes some tests for-sql which doesn't type check.---> module Database.HsSqlPpp.Tests.TypeCheckTests (typeCheckTests) where--> import Test.HUnit-> import Test.Framework-> import Test.Framework.Providers.HUnit-> import Data.List--> import Database.HsSqlPpp.Parsing.Parser-> import Database.HsSqlPpp.Ast.TypeChecker-> import Database.HsSqlPpp.Ast.Annotation-> import Database.HsSqlPpp.Ast.Catalog-> import Database.HsSqlPpp.Ast.SqlTypes--> data Item = Expressions [(String, Either [TypeError] Type)]-> | StatementTypes [(String, Either [TypeError] [Maybe StatementType])]-> | CatUpStatementTypes [(String-> ,[CatalogUpdate]-> ,Either [TypeError] [Maybe StatementType])]-> | DdlStatements [(String, [[CatalogUpdate]])]-> | DdlStatementsCat [(String, [CatalogUpdate])]-> | Group String [Item]--> typeCheckTests :: [Test.Framework.Test]-> typeCheckTests = itemToTft typeCheckTestData--> typeCheckTestData :: Item-> typeCheckTestData =-> Group "astCheckTests" [--> Group "basic literal types" [ Expressions [-> p "1" $ Right typeInt-> ,p "1.0" $ Right typeNumeric-> ,p "'test'" $ Right UnknownType-> ,p "true" $ Right typeBool-> ,p "array[1,2,3]" $ Right (ArrayType typeInt)-> ,p "array['a','b']" $ Right (ArrayType UnknownType)-> ,p "array['a'::text,'b']" $ Right (ArrayType (ScalarType "text"))-> ,p "array['a','b'::text]" $ Right (ArrayType (ScalarType "text"))-> ,p "array[1,'b']" $ Right (ArrayType typeInt)-> ,p "array[1,true]" $ Left [NoMatchingOperator "!arrayctor" [ScalarType "int4",ScalarType "bool"]]-> ]]--> ,Group "some expressions" [ Expressions [-> p "1=1" $ Right typeBool-> ,p "1=true" $ Left [NoMatchingOperator "=" [typeInt,typeBool]]-> ,p "substring('aqbc' from 2 for 2)" $ Right (ScalarType "text")--> ,p "substring(3 from 2 for 2)" $ Left-> [NoMatchingOperator "!substring"-> [ScalarType "int4"-> ,ScalarType "int4"-> ,ScalarType "int4"]]-> ,p "substring('aqbc' from 2 for true)" $ Left-> [NoMatchingOperator "!substring"-> [UnknownType-> ,ScalarType "int4"-> ,ScalarType "bool"]]--> ,p "3 between 2 and 4" $ Right typeBool-> ,p "3 between true and 4" $ Left-> [NoMatchingOperator ">="-> [typeInt-> ,typeBool]]--> ,p "array[1,2,3][2]" $ Right typeInt-> ,p "array['a','b'][1]" $ Right UnknownType-> ,p "array['a'::text,'b'][1]" $ Right (ScalarType "text")-- > ,p "array['a','b'][true]" (TypeError ("",0,0)- > (WrongType- > typeInt- > UnknownType))--> ,p "not true" $ Right typeBool-> ,p "not 1" $ Left-> [NoMatchingOperator "!not" [typeInt]]--> ,p "@ 3" $ Right typeInt-> ,p "@ true" $ Left-> [NoMatchingOperator "@" [ScalarType "bool"]]--> ,p "-3" $ Right typeInt-> ,p "-'a'" $ Left-> [NoMatchingOperator "-" [UnknownType]]--> ,p "4-3" $ Right typeInt--> ,p "1 is null" $ Right typeBool-> ,p "1 is not null" $ Right typeBool--> ,p "1+1" $ Right typeInt-> ,p "1+1" $ Right typeInt-> ,p "31*511" $ Right typeInt-> ,p "5/2" $ Right typeInt-> ,p "2^10" $ Right typeFloat8-> ,p "17%5" $ Right typeInt--> ,p "3 and 4" $ Left-> [NoMatchingOperator "!and" [typeInt,typeInt]]--> ,p "True and False" $ Right typeBool-> ,p "false or true" $ Right typeBool--> ,p "lower('TEST')" $ Right (ScalarType "text")-> ,p "lower(1)" $ Left [NoMatchingOperator "lower" [typeInt]]-> ]]--> ,Group "special functions" [ Expressions [-> p "coalesce(null,1,2,null)" $ Right typeInt-> ,p "coalesce('3',1,2,null)" $ Right typeInt-> ,p "coalesce('3',1,true,null)"-> $ Left [NoMatchingOperator "coalesce" [UnknownType-> ,ScalarType "int4"-> ,ScalarType "bool"-> ,UnknownType]]-> ,p "nullif('hello','hello')" $ Right UnknownType-> ,p "nullif('hello'::text,'hello')" $ Right (ScalarType "text")-> ,p "nullif(3,4)" $ Right typeInt-> ,p "nullif(true,3)"-> $ Left [NoMatchingOperator "nullif" [ScalarType "bool"-> ,ScalarType "int4"]]-> ,p "greatest(3,5,6,4,3)" $ Right typeInt-> ,p "least(3,5,6,4,3)" $ Right typeInt-> ,p "least(5,true)"-> $ Left [NoMatchingOperator "least" [ScalarType "int4",ScalarType "bool"]]---> ]]--implicit casting and function/operator choice tests:-check when multiple implicit and one exact match on num args-check multiple matches with num args, only one with implicit conversions-check multiple implicit matches with one preferred-check multiple implicit matches with one preferred highest count-check casts from unknown string lits--> ,Group "some expressions" [ Expressions [-> p "3 + '4'" $ Right typeInt-> ,p "3.0 + '4'" $ Right typeNumeric-> ,p "'3' + '4'" $ Left [NoMatchingOperator "+" [UnknownType-> ,UnknownType]]--> ]]--> ,Group "exists expressions" [ Expressions [-> p "exists (select 1 from pg_type)" $ Right typeBool-> ,p "exists (select testit from pg_type)"-> $ Left [UnrecognisedIdentifier "testit"]-> ]]--> ,Group "row comparison expressions" [ Expressions [--rows different lengths-rows match types pairwise, same and different types-rows implicit cast from unknown-rows don't match types--> p "row(1)" $ Right (AnonymousRecordType [typeInt])-> ,p "row(1,2)" $ Right (AnonymousRecordType [typeInt,typeInt])-> ,p "row('t1','t2')" $ Right (AnonymousRecordType [UnknownType,UnknownType])-> ,p "row(true,1,'t3')" $ Right (AnonymousRecordType [typeBool, typeInt,UnknownType])-> ,p "(true,1,'t3',75.3)" $ Right (AnonymousRecordType [typeBool,typeInt-> ,UnknownType,typeNumeric])-> ,p "row(1) = row(2)" $ Right typeBool-> ,p "row(1,2) = row(2,1)" $ Right typeBool-> ,p "(1,2) = (2,1)" $ Right typeBool-> ,p "(1,2,3) = (2,1)" $ Left [NoMatchingOperator "="-> [AnonymousRecordType [ScalarType "int4"-> ,ScalarType "int4"-> ,ScalarType "int4"]-> ,AnonymousRecordType [ScalarType "int4"-> ,ScalarType "int4"]]]-> ,p "('1',2) = (2,'1')" $ Right typeBool-> ,p "(1,true) = (2,1)" $ Left [NoMatchingOperator "="-> [AnonymousRecordType [ScalarType "int4"-> ,ScalarType "bool"]-> ,AnonymousRecordType [ScalarType "int4"-> ,ScalarType "int4"]]]-> ,p "(1,2) <> (2,1)" $ Right typeBool-> ,p "(1,2) >= (2,1)" $ Right typeBool-> ,p "(1,2) <= (2,1)" $ Right typeBool-> ,p "(1,2) > (2,1)" $ Right typeBool-> ,p "(1,2) < (2,1)" $ Right typeBool-> ]]--> ,Group "case expressions" [ Expressions [-> p "case\n\-> \ when true then 1\n\-> \end" $ Right typeInt-> ,p "case\n\-> \ when 1=2 then 'stuff'\n\-> \ when 2=3 then 'blah'\n\-> \ else 'test'\n\-> \end" $ Right UnknownType-> ,p "case\n\-> \ when 1=2 then 'stuff'\n\-> \ when 2=3 then 'blah'\n\-> \ else 'test'::text\n\-> \end" $ Right $ ScalarType "text"-> ,p "case\n\-> \ when 1=2 then 'stuff'\n\-> \ when true=3 then 'blah'\n\-> \ else 'test'\n\-> \end" $ Left [NoMatchingOperator "=" [typeBool,typeInt]]-> ,p "case\n\-> \ when 1=2 then true\n\-> \ when 2=3 then false\n\-> \ else 1\n\-> \end" $ Left [IncompatibleTypeSet [typeBool-> ,typeBool-> ,typeInt]]-> ,p "case\n\-> \ when 1=2 then false\n\-> \ when 2=3 then 1\n\-> \ else true\n\-> \end" $ Left [IncompatibleTypeSet [typeBool-> ,typeInt-> ,typeBool]]--> ,p "case 1 when 2 then 3 else 4 end" $ Right typeInt-> ,p "case 1 when true then 3 else 4 end"-> $ Left [IncompatibleTypeSet [ScalarType "int4"-> ,ScalarType "bool"]]-> ,p "case 1 when 2 then true else false end" $ Right typeBool-> ,p "case 1 when 2 then 3 else false end"-> $ Left [IncompatibleTypeSet [ScalarType "int4"-> ,ScalarType "bool"]]-> ]]--> ,Group "polymorphic functions" [ Expressions [-> p "array_append(ARRAY[1,2], 3)"-> $ Right (ArrayType typeInt)-> ,p "array_append(ARRAY['a','b'], 'c')"-> $ Right (ArrayType UnknownType)-> ,p "array_append(ARRAY['a','b'], 'c'::text)"-> $ Right (ArrayType $ ScalarType "text")-> ,p "array_append(ARRAY['a','b'::text], 'c')"-> $ Right (ArrayType $ ScalarType "text")-> ,p "array_append(ARRAY['a'::int,'b'], 'c')"-> $ Right (ArrayType typeInt)-> ]]--> ,Group "cast expressions" [ Expressions [-> p "cast ('1' as integer)"-> $ Right typeInt-> ,p "cast ('1' as baz)"-> $ Left [UnknownTypeName "baz"]-> ,p "array[]" -- this isn't quite right but not sure how to do it atm-> -- no point fixing this case since need a load of other-> -- test cases where the behaviour is different-> $ Right (Pseudo AnyArray) -- Left [TypelessEmptyArray]-> ,p "array[] :: text[]"-> $ Right (ArrayType (ScalarType "text"))-> ]]--> ,Group "simple selects" [ StatementTypes [-> p "select 1;" $ Right [Just $ StatementType [] [("?column?", typeInt)]]-> ,p "select 1 as a;" $-> Right [Just $ StatementType [] [("a", typeInt)]]-> ,p "select 1,2;" $-> Right [Just $ StatementType [] [("?column?", typeInt)-> ,("?column?", typeInt)]]-> ,p "select 1 as a, 2 as b;" $-> Right [Just $ StatementType [] [("a", typeInt)-> ,("b", typeInt)]]-> ,p "select 1+2 as a, 'a' || 'b';" $-> Right [Just $ StatementType [] [("a", typeInt)-> ,("?column?", ScalarType "text")]]-> ,p "values (1,2);" $ Right [Just $ StatementType []-> [("column1", typeInt)-> ,("column2", typeInt)]]-> ,p "values (1,2),('3', '4');" $ Right [Just $ StatementType []-> [("column1", typeInt)-> ,("column2", typeInt)]]-> ,p "values (1,2),('a', true);" $ Left [IncompatibleTypeSet [typeInt-> ,typeBool]]-> ,p "values ('3', '4'),(1,2);" $ Right [Just $ StatementType []-> [("column1", typeInt)-> ,("column2", typeInt)]]-> ,p "values ('a', true),(1,2);" $ Left [IncompatibleTypeSet [typeBool-> ,typeInt]]-> ,p "values ('a'::text, '2'::int2),('1','2');" $ Right [Just $ StatementType []-> [("column1", ScalarType "text")-> ,("column2", typeSmallInt)]]-> ,p "values (1,2,3),(1,2);" $ Left [ValuesListsMustBeSameLength]--> ]]--> ,Group "simple combine selects" [ StatementTypes [-> p "select 1,2 union select '3', '4';" $ Right [Just $ StatementType []-> [("?column?", typeInt)-> ,("?column?", typeInt)]]-> ,p "select 1,2 intersect select 'a', true;" $ Left [IncompatibleTypeSet [typeInt-> ,typeBool]]-> ,p "select '3', '4' except select 1,2;" $ Right [Just $ StatementType []-> [("?column?", typeInt)-> ,("?column?", typeInt)]]-> ,p "select 'a', true union select 1,2;"-> $ Left [IncompatibleTypeSet [typeBool-> ,typeInt]]-> ,p "select 'a'::text, '2'::int2 intersect select '1','2';" $ Right [Just $ StatementType []-> [("text", ScalarType "text")-> ,("int2", typeSmallInt)]]-> ,p "select 1,2,3 except select 1,2;" $ Left [ValuesListsMustBeSameLength]-> ,p "select '3' as a, '4' as b except select 1,2;" $ Right [Just $ StatementType []-> [("a", typeInt)-> ,("b", typeInt)]]--> ]]--> ,Group "simple selects from" [ StatementTypes [-> p "select a from (select 1 as a, 2 as b) x;"-> $ Right [Just $ StatementType [] [("a", typeInt)]]-> ,p "select b from (select 1 as a, 2 as b) x;"-> $ Right [Just $ StatementType [] [("b", typeInt)]]-> ,p "select c from (select 1 as a, 2 as b) x;"-> $ Left [UnrecognisedIdentifier "c"]-> ,p "select typlen from pg_type;"-> $ Right [Just $ StatementType [] [("typlen", typeSmallInt)]]-> ,p "select oid from pg_type;"-> $ Right [Just $ StatementType [] [("oid", ScalarType "oid")]]-> ,p "select p.oid from pg_type p;"-> $ Right [Just $ StatementType [] [("oid", ScalarType "oid")]]-> ,p "select typlen from nope;"-> $ Left [UnrecognisedIdentifier "typlen",UnrecognisedRelation "nope"]-> ,p "select generate_series from generate_series(1,7);"-> $ Right [Just $ StatementType [] [("generate_series", typeInt)]]--check aliasing--> ,p "select generate_series.generate_series from generate_series(1,7);"-> $ Right [Just $ StatementType [] [("generate_series", typeInt)]]-> ,p "select g from generate_series(1,7) g;"-> $ Right [Just $ StatementType [] [("g", typeInt)]]-> ,p "select g.g from generate_series(1,7) g;"-> $ Right [Just $ StatementType [] [("g", typeInt)]]-> ,p "select generate_series.g from generate_series(1,7) g;"-> $ Left [UnrecognisedCorrelationName "generate_series"]-> ,p "select g.generate_series from generate_series(1,7) g;"-> $ Left [UnrecognisedIdentifier "g.generate_series"]---> ,p "select * from pg_attrdef;"-> $ Right [Just $ StatementType []-> [("adrelid",ScalarType "oid")-> ,("adnum",ScalarType "int2")-> ,("adbin",ScalarType "text")-> ,("adsrc",ScalarType "text")]]-> ,p "select abs from abs(3);"-> $ Right [Just $ StatementType [] [("abs", typeInt)]]-> --todo: these are both valid,-> --the second one means select 3+generate_series from generate_series(1,7)-> -- select generate_series(1,7);-> -- select 3 + generate_series(1,7);--> ]]--> ,Group "simple selects from 2" [ CatUpStatementTypes [-> t "select a,b from testfunc();"-> [CatCreateComposite "testType" [("a", ScalarType "text")-> ,("b", typeInt)-> ,("c", typeInt)]-> ,CatCreateFunction FunName "testfunc" []-> (SetOfType $ NamedCompositeType "testType") False]-> $ Right [Just $ StatementType []-> [("a",ScalarType "text"),("b",ScalarType "int4")]]--> ,t "select testfunc();"-> [CatCreateFunction FunName "testfunc" [] (Pseudo Void) False]-> $ Right [Just $ StatementType [] []]--> ]]--> ,Group "simple join selects" [ StatementTypes [-> p "select * from (select 1 as a, 2 as b) a\n\-> \ cross join (select true as c, 4.5 as d) b;"-> $ Right [Just $ StatementType [] [("a", typeInt)-> ,("b", typeInt)-> ,("c", typeBool)-> ,("d", typeNumeric)]]-> ,p "select * from (select 1 as a, 2 as b) a\n\-> \ inner join (select true as c, 4.5 as d) b on true;"-> $ Right [Just $ StatementType [] [("a", typeInt)-> ,("b", typeInt)-> ,("c", typeBool)-> ,("d", typeNumeric)]]-> ,p "select * from (select 1 as a, 2 as b) a\n\-> \ inner join (select 1 as a, 4.5 as d) b using(a);"-> $ Right [Just $ StatementType [] [("a", typeInt)-> ,("b", typeInt)-> ,("d", typeNumeric)]]-> ,p "select * from (select 1 as a, 2 as b) a\n\-> \ natural inner join (select 1 as a, 4.5 as d) b;"-> $ Right [Just $ StatementType [] [("a", typeInt)-> ,("b", typeInt)-> ,("d", typeNumeric)]]-> --check the attribute order-> ,p "select * from (select 2 as b, 1 as a) a\n\-> \ natural inner join (select 4.5 as d, 1 as a) b;"-> $ Right [Just $ StatementType [] [("a", typeInt)-> ,("b", typeInt)-> ,("d", typeNumeric)]]-> ,p "select * from (select 1 as a1, 2 as b) a\n\-> \ natural inner join (select true as a1, 4.5 as d) b;"-> $ Left [IncompatibleTypeSet [ScalarType "int4"-> ,ScalarType "bool"]]-> ,p "select * from (select 1 as a1, 2 as b) a\n\-> \ natural inner join (select true as a1, 4.5 as d) b;"-> $ Left [IncompatibleTypeSet [ScalarType "int4"-> ,ScalarType "bool"]]--> ,p "select * from (select 1 as a1) a, (select 2 as a2) b;"-> $ Right [Just $ StatementType [] [("a1", typeInt)-> ,("a2", typeInt)]]--> ,p "select * from (select 1 as a1) a, (select 2 as a1) b;"-> $ Right [Just $ StatementType [] [("a1", typeInt)-> ,("a1", typeInt)]]--> ,p "select a1 from (select 1 as a1) a, (select 2 as a1) b;"-> $ Left [AmbiguousIdentifier "a1"]-> ]]--> ,Group "simple scalar identifier qualification" [ StatementTypes [-> p "select a.* from \n\-> \(select 1 as a, 2 as b) a \n\-> \cross join (select 3 as c, 4 as d) b;"-> $ Right [Just $ StatementType [] [("a", typeInt)-> ,("b", typeInt)]]-> ,p "select nothere.* from \n\-> \(select 1 as a, 2 as b) a \n\-> \cross join (select 3 as c, 4 as d) b;"-> $ Left [UnrecognisedCorrelationName "nothere"]-> ,p "select a.b,b.c from \n\-> \(select 1 as a, 2 as b) a \n\-> \natural inner join (select 3 as a, 4 as c) b;"-> $ Right [Just $ StatementType [] [("b", typeInt)-> ,("c", typeInt)]]-> ,p "select a.a,b.a from \n\-> \(select 1 as a, 2 as b) a \n\-> \natural inner join (select 3 as a, 4 as c) b;"-> $ Right [Just $ StatementType [] [("a", typeInt)-> ,("a", typeInt)]]--> ,p "select pg_attrdef.adsrc from pg_attrdef;"-> $ Right [Just $ StatementType [] [("adsrc", ScalarType "text")]]--> ,p "select a.adsrc from pg_attrdef a;"-> $ Right [Just $ StatementType [] [("adsrc", ScalarType "text")]]--> ,p "select pg_attrdef.adsrc from pg_attrdef a;"-> $ Left [UnrecognisedCorrelationName "pg_attrdef"]--> ,p "select a from (select 2 as b, 1 as a) a\n\-> \natural inner join (select 4.5 as d, 1 as a) b;"-> $ Right [Just $ StatementType [] [("a", typeInt)]]--select g.fn from fn() g--> ]]--> ,Group "aggregates" [ StatementTypes [-> p "select max(prorettype::int) from pg_proc;"-> $ Right [Just $ StatementType [] [("max", typeInt)]]-> ]]--> ,Group "simple wheres" [ StatementTypes [-> p "select 1 from pg_type where true;"-> $ Right [Just $ StatementType [] [("?column?", typeInt)]]-> ,p "select 1 from pg_type where 1;"-> $ Left [ExpressionMustBeBool]-> ,p "select typname from pg_type where typbyval;"-> $ Right [Just $ StatementType [] [("typname", ScalarType "name")]]-> ,p "select typname from pg_type where typtype = 'b';"-> $ Right [Just $ StatementType [] [("typname", ScalarType "name")]]-> ,p "select typname from pg_type where what = 'b';"-> $ Left [UnrecognisedIdentifier "what"]-> ]]--TODO: check identifier stacking working, then remove the pg_namespace-qualifier before oid and this should still work--> ,Group "subqueries" [ StatementTypes [-> p "select relname as relvar_name\n\-> \ from pg_class\n\-> \ where ((relnamespace =\n\-> \ (select oid\n\-> \ from pg_namespace\n\-> \ where (nspname = 'public'))) and (relkind = 'r'));"-> $ Right [Just $ StatementType [] [("relvar_name",ScalarType "name")]]-> ,p "select relname from pg_class where relkind in ('r', 'v');"-> $ Right [Just $ StatementType [] [("relname",ScalarType "name")]]-> ,p "select * from generate_series(1,7) g\n\-> \where g not in (select * from generate_series(3,5));"-> $ Right [Just $ StatementType [] [("g",typeInt)]]-> ,p "select 3 = any(array[1,2,3]);"-> $ Right [Just $ StatementType [] [("?column?",typeBool)]]-> ]]--identifiers in select parts-->{- ,testGroup "select part identifiers"-> (mapStatementTypes [-> p "select relname,attname from pg_class\n\-> \inner join pg_attribute\n\-> \on pg_attribute.attrelid = pg_class.oid;"-> $ Right [Just $ StatementType [] [("relvar_name",ScalarType "name")]]-> ])-}--> ,Group "insert" [ StatementTypes [-> p "insert into nope (a,b) values (c,d);"-> $ Left [UnrecognisedRelation "nope",UnrecognisedIdentifier "c",UnrecognisedIdentifier "d"]-> ,p "insert into pg_attrdef (adrelid,adnum,adbin,adsrc)\n\-> \values (1,2, 'a', 'b');"-> $ Right [Just $ StatementType [] [] {-InsertInfo "pg_attrdef"-> [("adrelid",ScalarType "oid")-> ,("adnum",ScalarType "int2")-> ,("adbin",ScalarType "text")-> ,("adsrc",ScalarType "text")]-}]-> ,p "insert into pg_attrdef\n\-> \values (1,2, 'a', 'b');"-> $ Right [Just $ StatementType [] [] {-InsertInfo "pg_attrdef"-> [("adrelid",ScalarType "oid")-> ,("adnum",ScalarType "int2")-> ,("adbin",ScalarType "text")-> ,("adsrc",ScalarType "text")]-}]-> ,p "insert into pg_attrdef (hello,adnum,adbin,adsrc)\n\-> \values (1,2, 'a', 'b');"-> $ Left [UnrecognisedIdentifier "hello"]-> ,p "insert into pg_attrdef (adrelid,adnum,adbin,adsrc)\n\-> \values (1,true, 'a', 'b');"-> $ Left [IncompatibleTypes (ScalarType "int2") (ScalarType "bool")]-> ,p "insert into pg_attrdef (adrelid,adnum,adbin,adsrc)\n\-> \values (1,true, 'a', 'b','c');"-> $ Left [WrongNumberOfColumns]-> ]]--> ,Group "update" [ StatementTypes [-> p "update nope set a = 1;"-> $ Left [UnrecognisedRelation "nope"]-> ,p "update pg_attrdef set adsrc = '' where 1;"-> $ Left [ExpressionMustBeBool]-> ,p "update pg_attrdef set (adbin,adsrc) = ('a','b','c');"-> $ Left [WrongNumberOfColumns]-> ,p "update pg_attrdef set (adrelid,adsrc) = (true,'b');"-> $ Left [IncompatibleTypes (ScalarType "oid") typeBool]-> ,p "update pg_attrdef set (shmadrelid,adsrc) = ('a','b');"-> $ Left [UnrecognisedIdentifier "shmadrelid"]-> ,p "update pg_attrdef set adsrc='';"-> $ Right [Just $ StatementType [] [] {-UpdateInfo "pg_attrdef" [("adsrc",ScalarType "text")]-}]-> ,p "update pg_attrdef set adsrc='' where 1=2;"-> $ Right [Just $ StatementType [] [] {-UpdateInfo "pg_attrdef" [("adsrc",ScalarType "text")]-}]-> -- TODO: actually, pg doesn't support this so need to generate error instead-> ,p "update pg_attrdef set (adbin,adsrc) = ((select 'a','b'));"-> $ Right [Just $ StatementType [] [] {-UpdateInfo "pg_attrdef" [("adbin",ScalarType "text"),("adsrc",ScalarType "text")]-}]-> --check where ids-> ,p "update pg_attrdef set adsrc='' where adsrc='';"-> $ Right [Just $ StatementType [] [] {-UpdateInfo "pg_attrdef" [("adsrc",ScalarType "text")]-}]-> ,p "update pg_attrdef set adnum = adnum + 1;"-> $ Right [Just $ StatementType [] [] {-UpdateInfo "pg_attrdef" [("adnum",ScalarType "int2")]-}]-> ]]--> ,Group "delete" [ StatementTypes [-> p "delete from nope;"-> $ Left [UnrecognisedRelation "nope"]-> ,p "delete from pg_attrdef where 1=2;"-> $ Right [Just $ StatementType [] []]-> ,p "delete from pg_attrdef where 1;"-> $ Left [ExpressionMustBeBool]-> ,p "delete from pg_attrdef where adsrc='';"-> $ Right [Just $ StatementType [] []]-> ]]--================================================================================--test the catalog updates from creates, etc.--> ,Group "creates" [DdlStatements [-> p "create table t1 (\n\-> \ a int,\n\-> \ b text\n\-> \);"-> [[CatCreateTable "t1" [("a",ScalarType "int4")-> ,("b",ScalarType "text")]-> [("tableoid", ScalarType "oid")-> ,("cmax", ScalarType "cid")-> ,("xmax", ScalarType "xid")-> ,("cmin", ScalarType "cid")-> ,("xmin", ScalarType "xid")-> ,("ctid", ScalarType "tid")]]]-> ,p "create type t1 as (\n\-> \ a int,\n\-> \ b text\n\-> \);"-> [[CatCreateComposite "t1" [("a",ScalarType "int4")-> ,("b",ScalarType "text")]]]--> ,p "create domain t1 as text;"-> [[CatCreateDomain (DomainType "t1") (ScalarType "text")]]--> ,p "create domain t1 as text check (value in ('a', 'b'));\n\-> \select 'text'::t1;"-> [[CatCreateDomain (DomainType "t1") (ScalarType "text")]]---> ,p "create view v1 as select * from pg_attrdef;"-> [[CatCreateView "v1" [("adrelid",ScalarType "oid")-> ,("adnum",ScalarType "int2")-> ,("adbin",ScalarType "text")-> ,("adsrc",ScalarType "text")]]]--> ,p "create function t1(text) returns text as $$\n\-> \null;\n\-> \$$ language sql stable;"-> [[CatCreateFunction FunName "t1" [ScalarType "text"]-> (ScalarType "text") False]]-> ,p "create language plpgsql;"-> [[CatCreateFunction FunName "plpgsql_call_handler" [] (Pseudo LanguageHandler) False-> ,CatCreateFunction FunName "plpgsql_validator" [ScalarType "oid"] (Pseudo Void) False]]-> ]]---================================================================================--check the identifier resolution for functions:-parameters-variable declarations-select expressions inside these:-refer to param-refer to variable-override var with var-override var with select iden-todo: override var with param, override select iden with param--check var defs:-check type exists-check type of initial values--> ,Group "create function identifier resolution" [ StatementTypes [-> p "create function t1(stuff text) returns text as $$\n\-> \begin\n\-> \ return stuff || ' and stuff';\n\-> \end;\n\-> \$$ language plpgsql stable;"-> (Right [Nothing])-> ,p "create function t1(stuff text) returns text as $$\n\-> \begin\n\-> \ return badstuff || ' and stuff';\n\-> \end;\n\-> \$$ language plpgsql stable;"-> (Left [UnrecognisedIdentifier "badstuff"])-> ,p "create function t1() returns text as $$\n\-> \declare\n\-> \ stuff text;\n\-> \begin\n\-> \ return stuff || ' and stuff';\n\-> \end;\n\-> \$$ language plpgsql stable;"-> (Right [Nothing])-> ]]--================================================================================--> ,Group "plpgsqlbits" [ StatementTypes [-> p "create function t1(stuff text) returns text as $$\n\-> \begin\n\-> \ return stuff || ' and stuff';\n\-> \end;\n\-> \$$ language plpgsql stable;"-> (Right [Nothing])-> ,p "create function t1(stuff text) returns text as $$\n\-> \begin\n\-> \ return badstuff || ' and stuff';\n\-> \end;\n\-> \$$ language plpgsql stable;"-> (Left [UnrecognisedIdentifier "badstuff"])-> ,p "create function t1() returns text as $$\n\-> \declare\n\-> \ stuff text;\n\-> \begin\n\-> \ return stuff || ' and stuff';\n\-> \end;\n\-> \$$ language plpgsql stable;"-> (Right [Nothing])-> ]]--================================================================================--> ,Group "plpgsqlbits" [ StatementTypes [-> p "create function t1() returns void as $$\n\-> \declare\n\-> \ a bool;\n\-> \begin\n\-> \ a := 3;\n\-> \end;\n\-> \$$ language plpgsql stable;"-> (Left [IncompatibleTypes (ScalarType "bool") (ScalarType "int4")])-> ,p "create function t1() returns void as $$\n\-> \declare\n\-> \ a boolean;\n\-> \begin\n\-> \ a := true;\n\-> \end;\n\-> \$$ language plpgsql stable;"-> (Right [Nothing])-> ]]--================================================================================--> ,Group "for loops" [ StatementTypes [-> p "create function t1() returns void as $$\n\-> \declare\n\-> \ r record;\n\-> \ t int;\n\-> \begin\n\-> \ for r in select * from pg_attrdef loop\n\-> \ t := r.adnum;\n\-> \ end loop;\n\-> \end;\n\-> \$$ language plpgsql stable;"-> (Right [Nothing])---> ,p "create function t1() returns void as $$\n\-> \declare\n\-> \ r record;\n\-> \ t int;\n\-> \begin\n\-> \ for r in select adnum from pg_attrdef loop\n\-> \ t := r;\n\-> \ end loop;\n\-> \end;\n\-> \$$ language plpgsql stable;"-> (Right [Nothing])--loop var already declared--> ,p "create function test() returns void as $$\n\-> \declare\n\-> \ i int;\n\-> \ i1 int;\n\-> \begin\n\-> \ for i in 0 .. 10 loop\n\-> \ i1 := i;\n\-> \ end loop;\n\-> \end;\n\-> \$$ language plpgsql volatile;"-> (Right [Nothing])--implicitly created loop var--> ,p "create function test() returns void as $$\n\-> \declare\n\-> \ i1 int;\n\-> \begin\n\-> \ for i in 0 .. 10 loop\n\-> \ i1 := i;\n\-> \ end loop;\n\-> \end;\n\-> \$$ language plpgsql volatile;"-> (Right [Nothing])--loop var already declared, wrong type--> ,p "create function test() returns void as $$\n\-> \declare\n\-> \ i bool;\n\-> \begin\n\-> \ for i in 0 .. 10 loop\n\-> \ null;\n\-> \ end loop;\n\-> \end;\n\-> \$$ language plpgsql volatile;"-> (Left [IncompatibleTypes (ScalarType "bool") (ScalarType "int4")])--loop var implicit check it's type--> ,p "create function test() returns void as $$\n\-> \declare\n\-> \ t bool;\n\-> \begin\n\-> \ for i in 0 .. 10 loop\n\-> \ t := i;\n\-> \ end loop;\n\-> \end;\n\-> \ $$ language plpgsql volatile;"-> (Left [IncompatibleTypes (ScalarType "bool") (ScalarType "int4")])-> ]]--================================================================================--> ,Group "check catalog chaining" [ StatementTypes [--create function then select-select then create function-then in two separate chained asts--> p "create function t1() returns void as $$\n\-> \begin\n\-> \ null;\n\-> \end;\n\-> \$$ language plpgsql stable;\n\-> \select t1();"-> (Right [Nothing])-> ,p "select t1();\n\-> \create function t1() returns void as $$\n\-> \begin\n\-> \ null;\n\-> \end;\n\-> \$$ language plpgsql stable;"-> (Left [NoMatchingOperator "t1" []])-> ]]--> {-,Group "check catalog chaining2" [ StatementTypes [-> p ["create function t1() returns void as $$\n\-> \begin\n\-> \ null;\n\-> \end;\n\-> \$$ language plpgsql stable;"-> ,"select t1();"]-> (Right [Just (SelectInfo (Pseudo Void))])-> ,p ["select t1();"-> ,"create function t1() returns void as $$\n\-> \begin\n\-> \ null;\n\-> \end;\n\-> \$$ language plpgsql stable;"]-> (Left [NoMatchingOperator "t1" []])-> ]]-}--================================================================================--test some casts-assign composite to record- then assign record to composite-assign row to composite- : check wrong cols, wrong types-check read and write fields in composite->record-check read and write fields in composite-check domain <-> base assigns-check call function with compatible composite, compatible row ctor-assign comp to comp--todo for chaos sql-for loop var = scalar, select = setof composite with one scalar--select into-composite assignment and equality-autocast from rowctor to composite when calling function-assignment to composite fields-read fields of composite--array_contains -> match anyelement-createtable as cat update-window functions-assign domain <-> base-sql function not working--================================================================================--check insert returning, update returning, delete returning, one check each-check select into: multiple vars, record (then access fields to check),- composite var-check errors: select into wrong number of vars, wrong types, and into- composite wrong number and wrong type--> ,Group "select into" [ StatementTypes [-> p "insert into pg_attrdef (adrelid,adnum,adbin,adsrc)\n\-> \values (1,2, 'a', 'b') returning adnum,adbin;"-> $ Right [Just $ StatementType [] [("adnum", ScalarType "int2")-> ,("adbin", ScalarType "text")]]-> ,p "update pg_attrdef set adnum = adnum + 1 returning adnum;"-> $ Right [Just $ StatementType [] [("adnum", ScalarType "int2")]]-> ,p "delete from pg_attrdef returning adnum,adbin;"-> $ Right [Just $ StatementType [] [("adnum", ScalarType "int2")-> ,("adbin", ScalarType "text")]]-> ,p "create function t1() returns void as $$\n\-> \declare\n\-> \ a int;\n\-> \ b text;\n\-> \begin\n\-> \ select adnum,adbin into a,b from pg_attrdef;\n\-> \end;\n\-> \$$ language plpgsql stable;"-> $ Right [Nothing]-> ,p "create function t1() returns void as $$\n\-> \declare\n\-> \ a int;\n\-> \ b text;\n\-> \begin\n\-> \ select adnum,adbin into b,a from pg_attrdef;\n\-> \end;\n\-> \$$ language plpgsql stable;"-> $ Left [IncompatibleTypes (ScalarType "text") (ScalarType "int2")-> ,IncompatibleTypes (ScalarType "int4") (ScalarType "text")]-> ,p "create function t1() returns void as $$\n\-> \declare\n\-> \ a int;\n\-> \ b text;\n\-> \begin\n\-> \ select adnum,adbin into a,c from pg_attrdef;\n\-> \end;\n\-> \$$ language plpgsql stable;"-> $ Left [UnrecognisedIdentifier "c"]-> ,p "create function t1() returns void as $$\n\-> \declare\n\-> \ a int;\n\-> \ b text;\n\-> \begin\n\-> \ select adnum,adbin into a from pg_attrdef;\n\-> \end;\n\-> \$$ language plpgsql stable;"-> $ Left [WrongNumberOfColumns]-> ,p "create function t1() returns void as $$\n\-> \declare\n\-> \ r record;\n\-> \ a int;\n\-> \ b text;\n\-> \begin\n\-> \ select adnum,adbin into r from pg_attrdef;\n\-> \ a := r.adnum;\n\-> \ b := r.adbin;\n\-> \end;\n\-> \$$ language plpgsql stable;"-> $ Right [Nothing]-> ,p "create function t1() returns void as $$\n\-> \declare\n\-> \ r record;\n\-> \ a int;\n\-> \ b text;\n\-> \begin\n\-> \ select adnum,adbin into r from pg_attrdef;\n\-> \ a := r.adnum;\n\-> \ b := r.adsrc;\n\-> \end;\n\-> \$$ language plpgsql stable;"-> $ Left [UnrecognisedIdentifier "r.adsrc"]-> ,p "create function t1() returns void as $$\n\-> \declare\n\-> \ r pg_attrdef;\n\-> \begin\n\-> \ select * into r from pg_attrdef;\n\-> \end;\n\-> \$$ language plpgsql stable;"-> $ Right [Nothing]-> ,p "create function t1() returns void as $$\n\-> \declare\n\-> \ r pg_class;\n\-> \begin\n\-> \ select adnum,adbin into r from pg_attrdef;\n\-> \end;\n\-> \$$ language plpgsql stable;"-> $ Left [IncompatibleTypes (NamedCompositeType "pg_class") (AnonymousRecordType [ScalarType "int2",ScalarType "text"])]-> ,p "create function t1() returns void as $$\n\-> \declare\n\-> \ r record;\n\-> \begin\n\-> \ select adnum,adbin into r from pg_attrdef;\n\-> \ select relname into r from pg_class;\n\-> \end;\n\-> \$$ language plpgsql stable;"-> $ Right [Nothing]-> ]]--> ,Group "composite elements" [ StatementTypes [-> p "create function t1() returns void as $$\n\-> \declare\n\-> \ r pg_attrdef;\n\-> \ a int;\n\-> \ b text;\n\-> \begin\n\-> \ b = r.adsrc;\n\-> \ r.adnum := a;\n\-> \ b = r.adsrc;\n\-> \end;\n\-> \$$ language plpgsql stable;"-> $ Right [Nothing]-> ]]--> ,Group "positional args" [ StatementTypes [-> p "create function distance(int, int, int, int) returns float(24) as $$\n\-> \ select (point($1, $2) <-> point($3, $4))::float(24) as result;\n\-> \$$ language sql immutable;"-> $ Right [Nothing]-> ,p "create function distance(int, int, int, int) returns float(24) as $$\n\-> \ select (point($1, $2) <-> point($3, $5))::float(24) as result;\n\-> \$$ language sql immutable;"-> $ Left [UnrecognisedIdentifier "$5"]-> ]]--> ,Group "window fns" [ StatementTypes [-> p "select *, row_number() over () from pg_attrdef;"-> $ Right [Just $ StatementType []-> [("adrelid",ScalarType "oid")-> ,("adnum",ScalarType "int2")-> ,("adbin",ScalarType "text")-> ,("adsrc",ScalarType "text")-> ,("row_number",ScalarType "int8")]]-> ]]--> ,Group "drop stuff" [ DdlStatementsCat [-> p "create function test(a int) returns void as $$\n\-> \begin\n\-> \ null;\n\-> \end\n\-> \$$ language plpgsql;"-> [CatCreateFunction FunName "test" [typeInt] (Pseudo Void) False]-> ,p "create function test(a int) returns void as $$\n\-> \begin\n\-> \ null;\n\-> \end\n\-> \$$ language plpgsql;\n\-> \drop function test(int);"-> []-> ,p "drop function test(int);" -- this should fail but doesn't-> []-> ,p "drop function if exists test(int);"-> []-> ]]-> ]--================================================================================--> p :: t -> t1 -> (t, t1)-> p a b = (a,b)--> t :: t -> u -> v -> (t,u,v)-> t a b c = (a,b,c)---> testExpressionType :: String -> Either [TypeError] Type -> Test.Framework.Test-> testExpressionType src typ = testCase ("typecheck " ++ src) $-> let ast = case parseExpression "" src of-> Left e -> error $ show e-> Right l -> l-> aast = typeCheckExpression defaultTemplate1Catalog ast-> ty = getTopLevelTypes [aast]-> er = concatMap snd $ getTypeErrors aast-> in case (length er, length ty) of-> (0,0) -> assertFailure "didn't get any types?"-> (0,1) -> assertEqual ("typecheck " ++ src) typ $ Right $ head ty-> (0,_) -> assertFailure "got too many types"-> _ -> assertEqual ("typecheck " ++ src) typ $ Left er--> testStatementType :: String -> Either [TypeError] [Maybe StatementType] -> Test.Framework.Test-> testStatementType src sis = testCase ("typecheck " ++ src) $-> let ast = case parseSql "" src of-> Left e -> error $ show e-> Right l -> l-> aast = snd $ typeCheck defaultTemplate1Catalog ast-> is = getTopLevelInfos aast-> er = concatMap snd $ getTypeErrors aast-> in {-trace (show aast) $-} case (length er, length is) of-> (0,0) -> assertFailure "didn't get any infos?"-> (0,_) -> assertEqual ("typecheck " ++ src) sis $ Right is-> _ -> assertEqual ("typecheck " ++ src) sis $ Left er---> testCatUpStatementType :: String-> -> [CatalogUpdate]-> -> Either [TypeError] [Maybe StatementType]-> -> Test.Framework.Test-> testCatUpStatementType src eu sis = testCase ("typecheck " ++ src) $-> let ast = case parseSql "" src of-> Left e -> error $ show e-> Right l -> l-> aast = snd $ typeCheck makeCat ast-> is = getTopLevelInfos aast-> er = concatMap snd $ getTypeErrors aast-> in {-trace (show aast) $-} case (length er, length is) of-> (0,0) -> assertFailure "didn't get any infos?"-> (0,_) -> assertEqual ("typecheck " ++ src) sis $ Right is-> _ -> assertEqual ("typecheck " ++ src) sis $ Left er-> where-> makeCat = case updateCatalog defaultTemplate1Catalog eu of-> Left x -> error $ show x-> Right e -> e--> testCatUp :: String -> [[CatalogUpdate]] -> Test.Framework.Test-> testCatUp src eu = testCase ("typecheck " ++ src) $-> let ast = case parseSql "" src of-> Left e -> error $ show e-> Right l -> l-> aast = snd $ typeCheck defaultTemplate1Catalog ast-> er = concatMap snd $ getTypeErrors aast-> eu' = getTopLevelCatUpdates aast-> in {-trace (show aast) $-} case (length er, length eu') of-> (0,0) -> assertFailure "didn't get any infos or catupdates?"-> (0,_) -> assertEqual ("eu " ++ src) eu eu'-> (_,_) -> assertFailure $ show er---> testCat :: String -> [CatalogUpdate] -> Test.Framework.Test-> testCat src eu = testCase ("check catalog: " ++ src) $-> let ast = case parseSql "" src of-> Left e -> error $ show e-> Right l -> l-> (ncat,aast) = typeCheck defaultTemplate1Catalog ast-> er = concatMap snd $ getTypeErrors aast-> neu = deconstructCatalog ncat \\ deconstructCatalog defaultTemplate1Catalog-> in if not (null er)-> then assertFailure $ show er-> else assertEqual "check eus" eu neu---> itemToTft :: Item -> [Test.Framework.Test]-> itemToTft (Expressions es) = map (uncurry testExpressionType) es-> itemToTft (StatementTypes es) = map (uncurry testStatementType) es-> itemToTft (CatUpStatementTypes es) = map (\(s,eu,si) -> testCatUpStatementType s eu si) es-> itemToTft (DdlStatements es) = map (uncurry testCatUp) es-> itemToTft (DdlStatementsCat es) = map (uncurry testCat) es--> itemToTft (Group s is) = [testGroup s $ concatMap itemToTft is]
− Database/HsSqlPpp/Utils.lhs
@@ -1,109 +0,0 @@-Copyright 2009 Jake Wheat--This file contains some generic utility stuff--> {-# OPTIONS_HADDOCK hide #-}-> {-# LANGUAGE FlexibleContexts #-}---> module Database.HsSqlPpp.Utils where--> import Data.List-> import Data.Either-> import Control.Arrow-> import Control.Monad.Error-> import Control.Applicative---> errorWhen :: (Error a) => Bool -> a -> Either a ()-> errorWhen cond = when cond . Left--> returnWhen :: (Monad m) => Bool -> a -> m a -> m a-> returnWhen c t t1 = if c then return t else t1--> liftME :: a -> Maybe b -> Either a b-> liftME d m = case m of-> Nothing -> Left d-> Just b -> Right b--> both :: (a->b) -> (a,a) -> (b,b)-> both fn = fn *** fn--> (<:>) :: (Applicative f) =>-> f a -> f [a] -> f [a]-> (<:>) a b = (:) <$> a <*> b--> eitherToMaybe :: Either a b -> Maybe b-> eitherToMaybe (Left _) = Nothing-> eitherToMaybe (Right b) = Just b--> fromRight :: b -> Either a b -> b-> fromRight b (Left _) = b-> fromRight _ (Right r) = r--> fromLeft :: a -> Either a b -> a-> fromLeft _ (Left l) = l-> fromLeft a (Right _) = a--> mapEither :: (a->c) -> (b->d) -> Either a b -> Either c d-> mapEither l _ (Left a) = Left $ l a-> mapEither _ r (Right b) = Right $ r b--> mapRight :: (b -> c) -> Either a b -> Either a c-> mapRight = mapEither id--> mapLeft :: (a -> c) -> Either a b -> Either c b-> mapLeft l = mapEither l id--> isRight :: Either a b -> Bool-> isRight (Right _) = True-> isRight (Left _) = False--> leftToEmpty :: (r -> [a]) -> Either l r -> [a]-> leftToEmpty = either (const [])--> replace :: (Eq a) => [a] -> [a] -> [a] -> [a]-> replace _ _ [] = []-> replace old new xs@(y:ys) =-> case stripPrefix old xs of-> Nothing -> y : replace old new ys-> Just ys' -> new ++ replace old new ys'---> split :: Char -> String -> [String]-> split _ "" = []-> split c s = let (l, s') = break (== c) s-> in l : case s' of-> [] -> []-> (_:s'') -> split c s''--> liftThrows :: (MonadError t m) => Either t a -> m a-> liftThrows (Left err) = throwError err-> liftThrows (Right val) = return val--run in errort monad, throw error as io error--> wrapET :: (Show e, Monad m) => ErrorT e m a -> m a-> wrapET c = runErrorT c >>= \x ->-> case x of-> Left er -> error $ show er-> Right l -> return l--error utility - convert either to ErrorT String--> tsl :: (MonadError String m, Show t) => Either t a -> m a-> tsl x = case x of-> Left s -> throwError $ show s-> Right b -> return b---> listEither :: [Either a b] -> Either [a] [b]-> listEither es = let (l,r) = partitionEithers es-> in if null l-> then Right r-> else Left l---> forceRight :: Show e => Either e a -> a-> forceRight (Left x) = error $ show x-> forceRight (Right x) = x
− HsSqlSystem.lhs
@@ -1,681 +0,0 @@-#! /usr/bin/env runghc--Copyright 2009 Jake Wheat--Command line access to a bunch of utility functions.--run-./HsSqlSystem.lhs -?-to get a list of commands and purpose and usage info--Uses cmdargs to do command line processing and despatch.--The code is a bit messy at the moment, still working out how to use-ErrorT.--> {-# LANGUAGE DeriveDataTypeable, ScopedTypeVariables,FlexibleContexts #-}--> import System.Console.CmdArgs-> import System.IO-> import System.Directory-> import Control.Monad.Error--> import Text.Show.Pretty-> import Test.Framework (defaultMainWithArgs)--> import Data.List--> import Database.HsSqlPpp.Tests.ParserTests-> import Database.HsSqlPpp.Tests.TypeCheckTests-> import Database.HsSqlPpp.Tests.ExtensionTests-> import Database.HsSqlPpp.Tests.ParameterizedStatementTests-> import Database.HsSqlPpp.Tests.RoundtripTests-> import Database.HsSqlPpp.Tests.LocalBindingsTests--> import Database.HsSqlPpp.Utils--> import Database.HsSqlPpp.Ast.Ast-> import Database.HsSqlPpp.Ast.Catalog-> import qualified Database.HsSqlPpp.Ast.TypeChecker as A-> import Database.HsSqlPpp.Ast.Annotation-> import Database.HsSqlPpp.Ast.SqlTypes--> import qualified Database.HsSqlPpp.Parsing.Parser as P-> import Database.HsSqlPpp.Parsing.Lexer---> import Database.HsSqlPpp.PrettyPrinter.PrettyPrinter-> import Database.HsSqlPpp.PrettyPrinter.AnnotateSource--> import Database.HsSqlPpp.Dbms.DatabaseLoader-> import Database.HsSqlPpp.Dbms.WrapperGen-> import Database.HsSqlPpp.Dbms.DBUtils--> import Database.HsSqlPpp.Extensions.ChaosExtensions--===============================================================================--> lexA = mode Lex {files = def &= typ "FILES" & args}-> &= text "lex the files given and output the tokens on separate lines"--> lexFiles :: [FilePath] -> IO ()-> lexFiles fns = wrapET $-> forM_ fns (\f ->-> (liftIO . putStrLn) ("lexing " ++ f) >>-> readInput f >>= tsl . lexSqlText f >>= mapM_ (liftIO . print))--================================================================================--> parseA = mode $ Parse {files = def &= typ "FILES" & args}-> &= text "Parse files and output the asts"--> showAst :: [String] -> IO ()-> showAst = wrapET . mapM_ (\f ->-> (liftIO . putStrLn) ("-- ast of " ++ f) >>-> readInput f >>= tsl . P.parseSql f >>=-> return . stripAnnotations >>= return . ppShow >>= liftIO . putStrLn)--================================================================================--> ppppA = mode $ Pppp {files = def &= typ "FILES" & args}-> &= text "Routine to parse sql from a file, pretty print it then parse it \-> \again and check the post pretty printing ast is the same as the \-> \initial ast"--> testPppp :: [String] -> IO ()-> testPppp = wrapET . mapM_ (\f -> do-> ast1 <- readInput f >>= tsl . P.parseSql f >>= return . stripAnnotations-> ast2 <- (return . printSql) ast1 >>= tsl . P.parseSql "" >>= return . stripAnnotations-> if ast1 /= ast2-> then liftIO $ do-> putStrLn "asts are different\n-- original"-> putStrLn $ ppShow ast1-> putStrLn "-- ppp'd"-> putStrLn $ ppShow ast2-> else (liftIO . putStrLn) "success")--================================================================================--> pppA = mode $ Ppp {files = def &= typ "FILES" & args}-> &= text "Parse then pretty print some sql so you can check the result \-> \hasn't mangled the sql."--> ppp :: String -> IO()-> ppp f = wrapET $ (liftIO . putStrLn) ("--ppp " ++ f) >>-> readInput f >>= tsl . P.parseSql f >>= return . printSql >>= liftIO . putStrLn--================================================================================--> parseExpressionA = mode $ ParseExpression {files = def &= typ "FILES" & args}-> &= text "Parse files each containing one expression \-> \and output the asts"--> parseExpression :: [String] -> IO ()-> parseExpression = wrapET . mapM_ (\f ->-> (liftIO . putStrLn) ("-- ast of " ++ f) >>-> readInput f >>= tsl . P.parseExpression f-> >>= return . stripAnnotations-> >>= return . ppShow >>= liftIO . putStrLn)--================================================================================--> annotateSourceA = mode $ AnnotateSource {database = def-> ,file = def &= typ "FILE"}-> &= text "reads a file, parses, type checks, then outputs info on \-> \each statement interspersed with the original source code"--> annotateSourceF :: String -> FilePath -> IO ()-> annotateSourceF db f =-> wrapET $ do-> (liftIO . putStrLn) ("--annotated source of " ++ f)-> src <- readInput f-> cat <- liftIO (readCatalog db) >>= tsl-> tsl (P.parseSql f src) >>= return . A.typeCheck cat >>= return . snd >>=-> return . annotateSource False src >>= liftIO . putStrLn--================================================================================--> ppCatalogA = mode $ PPCatalog {database = def-> ,files = def &= typ "FILES" & args}-> &= text "reads each file, parses, type checks, then outputs the \-> \changes to the catalog that the sql makes"--> ppCatalog :: String -> [FilePath] -> IO ()-> ppCatalog db fns = wrapET $ do-> scat <- liftIO (readCatalog db) >>= tsl-> (ncat, _) <- mapM (\f -> readInput f >>=-> tsl . P.parseSql f) fns >>=-> return . concat >>= return . A.typeCheck scat-> return (ppCatDiff $ compareCatalogs scat emptyCatalog ncat) >>= liftIO . putStrLn--================================================================================--> typeCheckA = mode $ TypeCheck {database = def-> ,files = def &= typ "FILES" & args}-> &= text "reads each file, parses, type checks, then outputs any type errors"---> typeCheck2 :: String -> [FilePath] -> IO ()-> typeCheck2 db fns = wrapET $-> liftIO (readCatalog db) >>= tsl >>= \cat ->-> mapM (\f -> readInput f >>= tsl . P.parseSql f) fns >>= return . concat >>=-> return . A.typeCheck cat >>= return . snd >>= return . A.getTypeErrors >>= return . ppTypeErrors >>= mapM_ (liftIO . putStrLn)--================================================================================--> allAnnotationsA = mode $ AllAnnotations {database = def-> ,files = def &= typ "FILES" & args}-> &= text "reads each file, parses, type checks, then pretty prints the \-> \ast with all annotations except the source positions"--> allAnnotations :: String -> [FilePath] -> IO ()-> allAnnotations db fns = wrapET $-> liftIO (readCatalog db) >>= tsl >>= \cat ->-> mapM (\f -> readInput f >>= tsl . P.parseSql f) fns >>= return . concat >>=-> return . A.typeCheck cat >>= return . snd >>= return . ppShow >>= liftIO . putStrLn---================================================================================--> typeCheckExpressionA = mode $ TypeCheckExpression {database = def-> ,files = def &= typ "FILES" & args}-> &= text "reads each file, parses as expression, \-> \ type checks, then outputs the type or any type errors"---> typeCheckExpression :: String -> [FilePath] -> IO ()-> typeCheckExpression db fns = wrapET $ do-> aasts <- liftIO (readCatalog db) >>= tsl >>= \cat ->-> forM fns (\f -> readInput f >>= tsl . P.parseExpression f-> >>= return . A.typeCheckExpression cat)-> tes <- mapM (return . A.getTypeErrors) aasts-> mapM_ (\x -> return (ppTypeErrors x) >>= mapM_ (liftIO . putStrLn)) $ filter (not . null) tes-> mapM_ (\a -> liftM (show . head) (return $ A.getTopLevelTypes [a]) >>= liftIO . putStrLn) aasts--================================================================================--= small hack utility to help with testing--TODO: use the correct username in this command-TODO: do something more correct--> clearA = mode $ Clear {database = def}-> &= text "hacky util to clear a database"--> cleardb :: String -> IO ()-> cleardb = clearDB--================================================================================--= load sql file--> loadA = mode $ Load {database = def-> ,files = def &= typ "FILES" & args}-> &= text "This takes one or more files with sql source text, \-> \parses them then loads them into the database given."--> loadSql :: String -> [String] -> IO ()-> loadSql db fns = wrapET $-> liftIO (hSetBuffering stdout NoBuffering) >>-> mapM (\f -> readInput f >>= tsl . P.parseSql f) fns >>= return . concat >>=-> return . extensionize >>= liftIO . loadIntoDatabase db ""--================================================================================--> loadPsqlA = mode $ LoadPsql {database = def-> ,files = def &= typ "FILES" & args}-> &= text "loads sql into a database using psql."--> loadSqlPsql :: String -> [String] -> IO ()-> loadSqlPsql db = wrapET .-> mapM_ (\s -> liftIO (loadSqlUsingPsqlFromFile db s) >>= tsl >>= liftIO . putStrLn)--================================================================================--> pgDumpA = mode $ PgDump {database = def}-> &= text "run pg dump, used for testing."--> pgDump1 :: String -> IO ()-> pgDump1 db = pgDump db >>= putStrLn---================================================================================--might try to work out a way of running multiple commands in one invoc-of this exe, then this command will disappear--> clearLoadA = mode $ ClearLoad {database = def-> ,files = def &= typ "FILES" & args}-> &= text "cleardb then loadsql"--> clearAndLoadSql :: String -> [String] -> IO ()-> clearAndLoadSql db fns = cleardb db >> loadSql db fns--================================================================================--This reads an catalog from a database and writes it out using show.--> catalogA = mode $ DBCatalog {database = def}-> &= text "read the catalog for the given db and dumps it in source \-> \format, used to create the catalog value for template1"--> readCat :: String -> IO ()-> readCat dbName = do-> cat <- readCatalogFromDatabase dbName-> putStrLn preamble-> putStrLn $ prefixLines $ ppShow cat-> where-> preamble = "> {-# OPTIONS_HADDOCK hide #-}\n\-> \\n\-> \> module Database.HsSqlPpp.AstInternals.Catalog.DefaultTemplate1Catalog\n\-> \> (defaultTemplate1Catalog\n\-> \> ) where\n\-> \\n\-> \> import Database.HsSqlPpp.AstInternals.Catalog.CatalogInternal\n\-> \> import Database.HsSqlPpp.AstInternals.TypeType\n\-> \\n\-> \> defaultTemplate1Catalog :: Catalog\n\-> \> defaultTemplate1Catalog =\n\-> \> (\\l -> case l of\n\-> \> Left x -> error $ show x\n\-> \> Right e -> e) $\n\-> \> updateCatalog defaultCatalog\n"-> prefixLines = unlines . map ("> " ++) . lines---================================================================================--run test battery: run a bunch of tests including consistency on the-database and sql files given--The idea is to typecheck the sql, load it into pg and dump it via psql-and via database loader, can then compare asts, catalogs, etc. in a-lot of different ways--currently:-parse and type check sql, save the catalog-load the sql into the db using psql, compare the catalog read from pg-with the catalog from typechecking-dump the sql and typecheck the dump, compare the catalog from this-check with the catalog from the original typecheck--todo: compare asts from initial parse with parsed dump - this is going-to be a lot of work to get passing since the statements are-re-ordered, and sometimes changed/ split up by pg--also: load the sql using the extension system and database loader,-then compare pg catalog with initial catalog, and dump and compare ast-with original ast--want to run a similar set of tests starting with the dump sql:-get ast,cat from dump sql, load using psql and using databaseloader-and check cats and subsequent dump asts.--getting the dump ast comparing with the original ast:--step one: convert tests in parser test to also roundtrip through-database, see parsertests for details--step two: write an ast conversion routine: assume that the pgdump ast-is like the ast fed into pg but with a few statements split into-components (e.g. create table with serial is split into create-sequence and create table), and then the statements are reordered, so-write a routine to mirror this - will then have-(anyast -> rearrange and reorder) == (anyast -> pg->pgdump)--> testBatteryA = mode $ TestBattery {database = def-> ,files = def &= typ "FILES" & args}-> &= text "runs a load of consistency tests on the sql passed"--> runTestBattery :: String -> [FilePath] -> IO ()-> runTestBattery dbName fns = wrapET $ do-> liftIO $ clearDB dbName-> startingCat <- liftIO (readCatalog dbName) >>= tsl-> (originalCat :: Catalog,-> originalAast :: StatementList) <--> mapM (\f -> readInput f >>= tsl . P.parseSql f) fns >>= return . concat >>=-> return . extensionize >>= return . A.typeCheck startingCat--> headerMessage "type errors from initial parse:\n"-> (return . A.getTypeErrors) originalAast >>= return . ppTypeErrors >>= mapM_ (liftIO . putStrLn)--> mapM_ (\s -> liftIO (loadSqlUsingPsqlFromFile dbName s) >>= tsl >>= liftIO . putStrLn) fns-> properCat <- liftIO (readCatalog dbName) >>= tsl-> headerMessage "catalog differences from initial parse and vanilla load:\n"-> return (ppCatDiff (compareCatalogs startingCat originalCat properCat)) >>= liftIO . putStrLn--> (dumpCat,dumpAast) <--> liftIO (pgDump dbName) >>= tsl . P.parseSql "dump" >>= return . A.typeCheck startingCat--> headerMessage "type errors from dump:\n"-> (return . A.getTypeErrors) dumpAast >>= return . ppTypeErrors >>= mapM_ (liftIO . putStrLn)--> headerMessage "catalog differences from initial parse and rechecked pg dump:\n"-> return (ppCatDiff (compareCatalogs startingCat originalCat dumpCat)) >>= liftIO . putStrLn--> (liftIO . putStrLn) "complete!"-> where-> headerMessage = liftIO . putStrLn . ("-----------------------------\n" ++)--================================================================================--run the test suite--> testA = mode $ Test {extra = def &= typ "ANY" & args & unknownFlags}-> &= text "run automated tests, uses test.framework can pass arguments \-> \to this e.g. HsSqlSystem test -t parserTests"--> runTests :: [String] -> IO ()-> runTests as =-> flip defaultMainWithArgs as $-> parserTests ++-> typeCheckTests ++-> parameterizedStatementTests ++-> roundtripTests ++-> localBindingsTests ++-> [extensionTests]--================================================================================--options: nothing -> create/overwrite folders and files- clean -> delete generated files--create target folder if doesn't exist--broken at the moment--> buildDocsA = mode $ BuildDocs-> &= text "build the documention in the docs/ folder"--> buildDocs :: IO ()-> buildDocs = wrapET $ do-> liftIO $ createDirectoryIfMissing False "docs/build"-> inputFiles <- sources-> let sts = zip (map ("docs/" ++) inputFiles) $-> flip map inputFiles-> (\f -> "docs/build/" ++ f ++ ".html")-> forM_ sts $ \(s,t) ->-> readInput s >>= pandoc >>= liftIO . writeFile t-> where-> sources = liftM (filter (isSuffixOf ".txt"))-> (liftIO (getDirectoryContents "docs"))--> -- | Documentation command to produce some hssqlppp docs, takes a-> -- pandoc source file and converts to html, can run and insert-> -- commands embedded in the source-> pandoc :: MonadIO m => String -> ErrorT String m String-> pandoc txt = return txt-> {--> liftM (writeHtmlString wopt . readMarkdown defaultParserState)-> (hsTextize txt)-> where-> wopt = defaultWriterOptions {-> writerStandalone = True-> ,writerTitlePrefix = "HsSqlPpp documentation"-> ,writerTableOfContents = True-> ,writerHeader = "<style>\n\-> \pre {\n\-> \ border: 1px dotted gray;\n\-> \ background-color: #ececec;\n\-> \ color: #1111111;\n\-> \ padding: 0.5em;\n\-> \}\n\-> \</style>"-> }-}---writerStandalone :: Bool Include header and footer-writerHeader :: String Header for the document-writerTitlePrefix :: String Prefix for HTML titles-writerTabStop :: Int Tabstop for conversion btw spaces and tabs-writerTableOfContents :: Bool Include table of contents-writerS5 :: Bool We're writing S5-writerHTMLMathMethod :: HTMLMathMethod How to print math in HTML-writerIgnoreNotes :: Bool Ignore footnotes (used in making toc)-writerIncremental :: Bool Incremental S5 lists-writerNumberSections :: Bool Number sections in LaTeX-writerIncludeBefore :: String String to include before the body-writerIncludeAfter :: String String to include after the body-writerStrictMarkdown :: Bool Use strict markdown syntax-writerReferenceLinks :: Bool Use reference links in writing markdown, rst-writerWrapText :: Bool Wrap text to line length-writerLiterateHaskell :: Bool Write as literate haskell-writerEmailObfuscation :: ObfuscationMethod How to obfu--> {-ex <- liftIO $ system ("pandoc -s -f markdown -t html "-> ++ src ++ " -o " ++ tgt)-> case ex of-> ExitFailure e -> throwError $ AEMisc $ "psql failed with " ++ show e-> ExitSuccess -> return ()-}--process doc commands--> -- | read a text file, and pull out the commands, run them and insert-> -- the results into the text-> {-hsTextize :: MonadIO m => String -> ErrorT String m String-> hsTextize s =-> liftIO (hsTextify-> (("hssqlsystem", hsSqlSystemCommand):defaultCommands)-> "docs/build"-> s) >>= tsl -- . mapLeft --> -- | run hssqlsystem using shell-> hsSqlSystemCommand :: String -> IO String-> hsSqlSystemCommand s = shell ("HsSqlSystem " ++ s) >>= \m ->-> return $ "$ HsSqlSystem " ++ s-> ++ "\n\n~~~~~~~~~~\n"-> ++ m-> ++ "\n~~~~~~~~~~\n\n" -}---================================================================================--> genWrapA = mode $ GenWrap {database = def-> ,file = def &= typ "FILE"}-> &= text "experimental code to generate typesafe haskell wrapper \-> \for db access"-> genWrap :: String -> String -> IO ()-> genWrap db f =-> wrapET doit-> where-> doit :: (MonadIO m) => ErrorT String m ()-> doit = liftIO (wrapperGen db f) >>= liftIO . putStrLn--================================================================================--TODOS--command to display all annotation inline in sql source-better catalog diff, e.g. if two tables differ in one column just show-that difference-see if can improve ppshow to use slightly less newlines-command to show which bits of preexisting catalog are used-command to list which views/functions/etc. aren't used anywhere-replace a bunch of commands with composible set:-parse(expression), ppp, typecheck(expression), allannots-->-parse (expression option)-type check-annotation filter + options-output: ast, sql, annotations + options-----think of a better name for this command than hssqlsystem--want better options system:-first set of options get passed around in reader? monad:- database name, username, password for pg- useextensions- annotation control? - when showing values, which annotations to also output?-these have defaults, can change defaults in ~/.config/hssqlsystem or something,-and can be overridden using --dbname=...,etc. command line args (make-these work like psql? then have environment variables also)-second set of options is for input and output:-read from file(s), stdin, or from string literal command line arg, e.g.-HsSqlSystem expressionType --src="3 + 5"-output to file(s) or stdout--review command names and arguments:-find a better naming convention: some commands produce haskell values as text,-some produce non haskell compatible text e.g. lexfile-some run tests and produce a success/fail result, maybe a list of issues--run multiple commands in one invocation?--check errors passed to user are understandable--command line commands to add:--showAast-ppCatalog - read from db and print in human readable rather- than as haskell value-showexpressionast-showexpressionaast-typecheckexpression-pppexpression-showCatalogUpdates - run over some sql files, outputs the catalog changes- made by this sql-ppCatalogUpdates--graphviz stuff: dependency graph: pass a view name or function and it-draws a graph of all the views, tables and functions which are used by-that view or function--run an extension by name over some sql source to view differences: add-integration with external diff viewers, so can see before and after,-maybe option to either view pp'd sql, annotated pp'd sql, ast, aast,-etc. - can also use this for pppsql and pppexpression to view how the-pretty printer mangles things, and for testing, etc.--logging/verbosity:--want a way to log to stderr/stdout/ files with different verbosity-settings--command line arguments:-options:---database=xxx-?---extensions---username---password-?other connection info-annotation control?--command name-other command arguments:-- on its own is read from stdin---input='xxx' add literal input rather than from file/stdin---================================================================================--> -- | Pretty print list of type errors with optional source position-> -- in emacs readable format.-> ppTypeErrors :: [(Maybe AnnotationElement, [TypeError])] -> [String]-> ppTypeErrors tes =-> map showSpTe tes-> where-> showSpTe (Just (SourcePos fn l c), e) =-> fn ++ ":" ++ show l ++ ":" ++ show c ++ ":\n" ++ show e-> showSpTe (_,e) = "unknown:0:0:\n" ++ show e--================================================================================--read file as string - issues are:--want to support reading from stdin, and reading from a string passed-as an argument to the exe--> -- | read a file as text, will read from stdin if filename is '-'.-> readInput :: (Error e, MonadIO m) => FilePath -> ErrorT e m String-> readInput f =-> liftIO r-> where-> r :: IO String-> r = case f of-> "-" -> getContents-> _ | length f >= 2 &&-> head f == '"' && last f == '"'-> -> return $ drop 1 $ take (length f - 1) f-> | otherwise -> readFile f--================================================================================--cmdargs stuff and main--> data HsSqlSystem = Lex {files :: [String]}-> | Parse {files :: [String]}-> | ParseExpression {files :: [String]}-> | Pppp {files :: [String]}-> | Ppp {files :: [String]}-> | TypeCheck {database :: String-> ,files :: [String]}-> | TypeCheckExpression {database :: String-> ,files :: [String]}-> | AllAnnotations {database :: String-> ,files :: [String]}-> | AnnotateSource {database :: String-> ,file :: String}-> | PPCatalog {database :: String-> ,files :: [String]}-> | Clear {database :: String}-> | Load {database :: String-> ,files :: [String]}-> | ClearLoad {database :: String-> ,files :: [String]}-> | DBCatalog {database :: String}-> | LoadPsql {database :: String-> ,files :: [String]}-> | PgDump {database :: String}-> | TestBattery {database :: String-> ,files :: [String]}-> | Test {extra :: [String]}-> | GenWrap {database :: String-> ,file :: String}-> | BuildDocs-> deriving (Show, Data, Typeable)--> main :: IO ()-> main = do-> cmd <- cmdArgs "HsSqlSystem, Copyright Jake Wheat 2010"-> [lexA, parseA, ppppA, pppA,-> parseExpressionA, typeCheckExpressionA,-> typeCheckA,allAnnotationsA,-> annotateSourceA, ppCatalogA,-> clearA, loadA, clearLoadA, catalogA, loadPsqlA,-> pgDumpA, testBatteryA,-> testA,buildDocsA, genWrapA]--> case cmd of-> Lex fns -> lexFiles fns-> Parse fns -> showAst fns-> Pppp fns -> testPppp fns-> Ppp fns -> showAst fns-> ParseExpression fns -> parseExpression fns-> TypeCheck db fns -> typeCheck2 db fns-> TypeCheckExpression db fns -> typeCheckExpression db fns-> AllAnnotations db fns -> typeCheck2 db fns-> AnnotateSource db fn -> annotateSourceF db fn-> PPCatalog db fns -> ppCatalog db fns-> Clear db -> cleardb db-> Load db fns -> loadSql db fns-> ClearLoad db fns -> clearAndLoadSql db fns-> DBCatalog db -> readCat db-> LoadPsql db fns -> loadSqlPsql db fns-> PgDump db -> pgDump1 db-> TestBattery db fns -> runTestBattery db fns-> Test as -> runTests as-> BuildDocs -> buildDocs-> GenWrap db f -> genWrap db f--would like to have the database argument be a common arg, don't know-how to do this--> lexA, parseA, ppppA, pppA, annotateSourceA, clearA, loadA,-> clearLoadA, catalogA, loadPsqlA, pgDumpA, testBatteryA,-> typeCheckA, testA, parseExpressionA, typeCheckExpressionA,-> buildDocsA, allAnnotationsA, ppCatalogA, genWrapA :: Mode HsSqlSystem-
LICENSE view
@@ -1,4 +1,4 @@-Copyright Jake Wheat 2009+Copyright Jake Wheat 2010 All rights reserved.
README view
@@ -1,121 +1,15 @@-Summary: A parser, pretty printer, and type checker for PostgreSQL SQL-and PL/pgSQL. BSD licensed.--The current aims of the project is to provide a parser and type-checker for a substantial portion of PostgreSQL SQL and PL/pgSQL, and-then hopefully to build on this to make tools and libraries to help-developing PL/pgSQL code, possibly: macros/ code generation/ custom-syntax, type safe access from Haskell, Lint-like checking,-documentation generation.--Status: it successfully parses and accurately pretty prints the three-moderate sized SQL files from another project of mine, but there are-lots of missing bits. Coverage of SQL is sort of reasonable - it's-possible that your SQL files will parse OK, but it's also possible-that they won't parse at all. Please report any SQL which doesn't-parse.--It also has the beginnings of a type checker, which currently can type-check a fair bit of the three files mentioned above. You can run the-type checker on your SQL in various ways from the command line. Please-report any SQL which doesn't type check correctly. Coming soon: a-command to produce a report on how well this code can parse and type-check your SQL.--It comes with a small test suite.+A parser, pretty printer, and type checker for SQL written in+Haskell. Supports PostgreSQL SQL and PL/pgSQL syntax. BSD licensed. -To install, use+Install with: cabal update-then cabal install hssqlppp -It's currently developed on GHC 6.12, but is tested on 6.10 before-each release so should work there too.--There isn't much in the way of documentation at the moment. See the-haddock docs locally or on hackage (link below), which also contain-links to a few example files. The source has a fair bit of comments,-which are currently OK in some places and poor in others.--The main dependencies of this project are: Parsec 3, HDBC,-HDBC-postgresql, and UUAGC is needed only for development). You need-PostgreSQL installed.--================================================================================--Homepage--There isn't really a homepage or website yet, but you can view the-Launchpad page where the code is hosted, and the HackageDB page.--Launchpad:-http://launchpad.net/hssqlppp/--HackageDB page:-http://hackage.haskell.org/package/hssqlppp-You can also browse the limited Haddock documentation online here.--You can get the latest development code from Launchpad using Bazaar:-bzr branch lp:~jakewheat/hssqlppp/trunk--================================================================================--Contact--Let me know if you're using/ interesting in using the library, if you-have any problems or suggestions, etc.. All contributions, comments-and criticism welcome:--jakewheatmail@gmail.com--You can also report problems on the bug tracker on Launchpad.--================================================================================--Example files:--(remove the prefix-http://bazaar.launchpad.net/~jakewheat/hssqlppp/trunk/annotate/head%3A/-to get the local relative path)--The test files for parsing and for type checking contain examples of-what parses/ typechecks and what the asts and annotations look like:--http://bazaar.launchpad.net/~jakewheat/hssqlppp/trunk/annotate/head%3A/Database/HsSqlPpp/Tests/ParserTests.lhs-http://bazaar.launchpad.net/~jakewheat/hssqlppp/trunk/annotate/head%3A/Database/HsSqlPpp/Tests/TypeCheckTests.lhs--The HsSqlSystem command source - HsSqlSystem.lhs.--AST transform code to extend plpgsql without any custom syntax, for-another project, early days:--http://bazaar.launchpad.net/~jakewheat/hssqlppp/trunk/annotate/head%3A/Database/HsSqlPpp/Extensions/ChaosExtensions.lhs--Some type safe database access rough example code, all just half-finished demo ideas at the moment:--Simple idea to work as a preprocess to parse a haskell file and-convert some declarations into calls to a wrapper around HDBC, with-the correct type signatures, with the return type as a list of haskell-tuples:--http://bazaar.launchpad.net/~jakewheat/hssqlppp/trunk/annotate/head%3A/Database/HsSqlPpp/Dbms/WrapperGen.lhs--Similar to previous idea, but using template haskell to do the-substitution at compile time, not as a preprocessor:--http://bazaar.launchpad.net/~jakewheat/hssqlppp/trunk/annotate/head%3A/Database/HsSqlPpp/Dbms/DBAccess2.lhs--example usage:--http://bazaar.launchpad.net/~jakewheat/hssqlppp/trunk/annotate/head%3A/testfiles/DBAccess2Test.lhs--Use template haskell again, but type the return values as lists of-hlists instead of tuples, so that field names in haskell code are also-checked at compile time:+Website, with some docs and examples:+http://jakewheat.github.com/hssqlppp/ -http://bazaar.launchpad.net/~jakewheat/hssqlppp/trunk/annotate/head%3A/Database/HsSqlPpp/Dbms/DBAccess3.lhs+Hackage: http://hackage.haskell.org/package/hssqlppp -example usage:+Repository: https://github.com/JakeWheat/hssqlppp -http://bazaar.launchpad.net/~jakewheat/hssqlppp/trunk/annotate/head%3A/testfiles/DBAccess3Test.lhs+Contact: jakewheatmail@gmail.com
+ THANKS view
@@ -0,0 +1,2 @@+Christoph Bauer for testing and feedback on the API+Hideki Kariya for bug reports and patches
hssqlppp.cabal view
@@ -1,226 +1,78 @@ Name: hssqlppp-Version: 0.2.0-Synopsis: Sql parser and type checker-Description:- Sql parser, pretty printer and type checker, targets PostgreSQL SQL- and PL/pgSQL.- .- See the project page- <https://launchpad.net/hssqlppp> for more information and- documentation links, there are also links to some example usage- files there.- .- Quick module guide:- .- 'Ast' - ast types;- .- 'Parser' - converting strings to asts;- .- 'PrettyPrinter' - converting asts to strings containing valid SQL;- .- 'TypeChecker' - type checking and annotating asts and working- with annotated trees;- .- 'SqlTypes' - the data types which represent SQL types, the data- type for type errors, and some support functions;- .- 'Annotation' - the annotation data types and utilities;- .- 'Catalog' - read a catalog from a database to type check against,- or to generate catalog information.- .- Also comes with command line access to some functions via a exe called- HsSqlSystem, run this file with no arguments to get some help.-+Version: 0.3.0+Synopsis: SQL parser and type checker License: BSD3 License-file: LICENSE Author: Jake Wheat Maintainer: jakewheatmail@gmail.com Build-Type: Simple-Cabal-Version: >=1.2.3-copyright: Copyright 2010 Jake Wheat+Cabal-Version: >=1.6+copyright: Copyright 2009-2011 Jake Wheat stability: pre-alpha-homepage: https://launchpad.net/hssqlppp-bug-reports: mailto:jakewheatmail@gmail.com+homepage: http://jakewheat.github.com/hssqlppp/+bug-reports: https://github.com/JakeWheat/hssqlppp/issues category: Database+Description:+ SQL parser and type checker, targets PostgreSQL SQL and PL/pgSQL.+ .+ Documentation, examples on the homepage:+ <http://jakewheat.github.com/hssqlppp/>. +-- to run haddock use 'cabal configure --ghc-options "-pgmPcpphs -optP--cpp"' first+ extra-source-files: README LICENSE- --find Database/ -type f -a ! -iname '*.o' -a ! -iname '*.hi'- Database/HsSqlPpp/Utils.lhs- Database/HsSqlPpp/Dbms/DBAccess.lhs- Database/HsSqlPpp/Dbms/DBAccess2.lhs- Database/HsSqlPpp/Dbms/DBAccess3.lhs- Database/HsSqlPpp/Dbms/MakeLabels.hs- Database/HsSqlPpp/Dbms/DatabaseLoader.lhs- Database/HsSqlPpp/Dbms/WrapLib.lhs- Database/HsSqlPpp/Dbms/WrapperGen.lhs- Database/HsSqlPpp/Dbms/DBUtils.lhs- Database/HsSqlPpp/Extensions/ChaosExtensions.lhs- Database/HsSqlPpp/AstInternals/AnnotationUtils.lhs- Database/HsSqlPpp/AstInternals/AstAnnotation.lhs- Database/HsSqlPpp/AstInternals/AstInternal.hs- Database/HsSqlPpp/AstInternals/Catalog/CatalogInternal.lhs- Database/HsSqlPpp/AstInternals/Catalog/CatalogReader.lhs- Database/HsSqlPpp/AstInternals/Catalog/DefaultTemplate1Catalog.lhs- Database/HsSqlPpp/AstInternals/AstInternal.ag- Database/HsSqlPpp/AstInternals/TypeType.lhs- Database/HsSqlPpp/AstInternals/TypeChecking/Dml.ag- Database/HsSqlPpp/AstInternals/TypeChecking/SelectStatement.ag- Database/HsSqlPpp/AstInternals/TypeChecking/TypeConversion.lhs- Database/HsSqlPpp/AstInternals/TypeChecking/TableRefs.ag- Database/HsSqlPpp/AstInternals/TypeChecking/Plpgsql.ag- Database/HsSqlPpp/AstInternals/TypeChecking/TypeChecking.ag- Database/HsSqlPpp/AstInternals/TypeChecking/LocalBindings.lhs- Database/HsSqlPpp/AstInternals/TypeChecking/Misc.ag- Database/HsSqlPpp/AstInternals/TypeChecking/ErrorUtils.lhs- Database/HsSqlPpp/AstInternals/TypeChecking/CreateTable.ag- Database/HsSqlPpp/AstInternals/TypeChecking/CreateFunction.ag- Database/HsSqlPpp/AstInternals/TypeChecking/Statements.ag- Database/HsSqlPpp/AstInternals/TypeChecking/SelectLists.ag- Database/HsSqlPpp/AstInternals/TypeChecking/Expressions.ag- Database/HsSqlPpp/AstInternals/TypeChecking/Drops.ag- Database/HsSqlPpp/AstInternals/TypeChecking/MiscCreates.ag- Database/HsSqlPpp/AstInternals/TypeChecking/LocalIdentifierBindings.lhs- Database/HsSqlPpp/Tests/ExtensionTests.lhs- Database/HsSqlPpp/Tests/LocalBindingsTests.lhs- Database/HsSqlPpp/Tests/ParserTests.lhs- Database/HsSqlPpp/Tests/DatabaseLoaderTests.lhs- Database/HsSqlPpp/Tests/RoundtripTests.lhs- Database/HsSqlPpp/Tests/TypeCheckTests.lhs- Database/HsSqlPpp/Tests/ParameterizedStatementTests.lhs- Database/HsSqlPpp/Here.lhs- Database/HsSqlPpp/PrettyPrinter/AnnotateSource.lhs- Database/HsSqlPpp/PrettyPrinter/PrettyPrinter.lhs- Database/HsSqlPpp/HsText/Commands.lhs- Database/HsSqlPpp/HsText/HsText.lhs- Database/HsSqlPpp/Parsing/Lexer.lhs- Database/HsSqlPpp/Parsing/Parser.lhs- Database/HsSqlPpp/Parsing/ParseErrors.lhs- Database/HsSqlPpp/Ast/Ast.lhs- Database/HsSqlPpp/Ast/Annotation.lhs- Database/HsSqlPpp/Ast/Catalog.lhs- Database/HsSqlPpp/Ast/SqlTypes.lhs- Database/HsSqlPpp/Ast/TypeChecker.lhs+ THANKS+ --find src/ -iname '*.ag' -o -iname '.sql' -o -iname '*.txt' -o -iname '*.hs' -o -iname '*.lhs' +source-repository head+ type: git+ location: https://github.com/JakeWheat/hssqlppp.git+ Library Build-Depends: base >= 4 && < 5,- mtl,- parsec >= 3,- pretty,- containers,- regex-posix,- HDBC,- HDBC-postgresql,- directory,- syb,- uniplate,- pretty-show,- Pipe,- process,- --pandoc == 1.2.1,- filepath,- template-haskell,- haskell-src-exts- --HList+ mtl >= 2.0.1.0 && < 2.1,+ containers >= 0.3.0.0 && < 0.5,+ parsec >= 3.1 && < 3.2,+ pretty >= 1.0.1.1 && < 1.1,+ syb >= 0.1.0.2 && < 0.4,+ uniplate >= 1.6 && < 1.7,+ transformers >= 0.2.2.0 && < 0.3+ build-tools: cpphs - Exposed-modules: Database.HsSqlPpp.Ast.Ast- Database.HsSqlPpp.Ast.TypeChecker- Database.HsSqlPpp.Ast.Catalog- Database.HsSqlPpp.Ast.Annotation- Database.HsSqlPpp.Ast.SqlTypes- Database.HsSqlPpp.Parsing.Parser- Database.HsSqlPpp.PrettyPrinter.PrettyPrinter+ hs-source-dirs: src+ Exposed-modules: Database.HsSqlPpp.Ast+ Database.HsSqlPpp.Annotation+ Database.HsSqlPpp.Catalog+ Database.HsSqlPpp.Parser+ Database.HsSqlPpp.Pretty+ Database.HsSqlPpp.Types+ Database.HsSqlPpp.TypeChecker - Other-Modules: Database.HsSqlPpp.Utils- Database.HsSqlPpp.Here- Database.HsSqlPpp.Dbms.DBAccess- --Database.HsSqlPpp.Dbms.MakeLabels- Database.HsSqlPpp.Dbms.DBUtils- Database.HsSqlPpp.AstInternals.AnnotationUtils- Database.HsSqlPpp.AstInternals.AstAnnotation- Database.HsSqlPpp.AstInternals.AstInternal- Database.HsSqlPpp.AstInternals.Catalog.DefaultTemplate1Catalog- Database.HsSqlPpp.AstInternals.Catalog.CatalogReader+ -- find src/lib -iname '*hs' | sed -e "s@src/@@" | sed -e "s@/@.@g" |sed -e "s/.lhs//" |sed -e "s/.hs//"+ Other-Modules: Database.HsSqlPpp.Utils.Utils+ Database.HsSqlPpp.Parsing.ParseErrors+ Database.HsSqlPpp.Parsing.Lexer+ Database.HsSqlPpp.Parsing.ParserInternal Database.HsSqlPpp.AstInternals.Catalog.CatalogInternal- Database.HsSqlPpp.AstInternals.TypeChecking.LocalIdentifierBindings- Database.HsSqlPpp.AstInternals.TypeChecking.LocalBindings- Database.HsSqlPpp.AstInternals.TypeType+ Database.HsSqlPpp.AstInternals.Catalog.DefaultTemplate1Catalog+ Database.HsSqlPpp.AstInternals.AstAnti Database.HsSqlPpp.AstInternals.TypeChecking.TypeConversion Database.HsSqlPpp.AstInternals.TypeChecking.ErrorUtils- Database.HsSqlPpp.Tests.ExtensionTests- Database.HsSqlPpp.Tests.TypeCheckTests- Database.HsSqlPpp.Tests.ParserTests- Database.HsSqlPpp.Tests.DatabaseLoaderTests- Database.HsSqlPpp.Tests.ParameterizedStatementTests- Database.HsSqlPpp.Tests.LocalBindingsTests- Database.HsSqlPpp.HsText.Commands- Database.HsSqlPpp.HsText.HsText- Database.HsSqlPpp.Parsing.Lexer- Database.HsSqlPpp.Parsing.ParseErrors- Database.HsSqlPpp.Dbms.DatabaseLoader- Database.HsSqlPpp.Dbms.WrapperGen- Database.HsSqlPpp.Dbms.WrapLib- Database.HsSqlPpp.Dbms.DBAccess2- --Database.HsSqlPpp.Dbms.DBAccess3- Database.HsSqlPpp.Extensions.ChaosExtensions- Database.HsSqlPpp.PrettyPrinter.AnnotateSource-- extensions: DeriveDataTypeable,RankNTypes,ScopedTypeVariables--Executable HsSqlSystem- Main-is: HsSqlSystem.lhs-- Build-Depends: base,- haskell98,- regex-posix,- HDBC,- HDBC-postgresql,- directory,- test-framework,- test-framework-hunit,- HUnit,- cmdargs- --HList-- Other-Modules: Database.HsSqlPpp.Utils- Database.HsSqlPpp.Here- Database.HsSqlPpp.Dbms.DBAccess- Database.HsSqlPpp.Dbms.DBAccess2- --Database.HsSqlPpp.Dbms.DBAccess3- --Database.HsSqlPpp.Dbms.MakeLabels- Database.HsSqlPpp.Dbms.WrapperGen- Database.HsSqlPpp.Dbms.WrapLib- Database.HsSqlPpp.Dbms.DatabaseLoader- Database.HsSqlPpp.Dbms.DBUtils- Database.HsSqlPpp.Extensions.ChaosExtensions- Database.HsSqlPpp.AstInternals.AnnotationUtils+ Database.HsSqlPpp.AstInternals.TypeChecking.LocalBindings+ Database.HsSqlPpp.AstInternals.TypeChecking.Utils+ Database.HsSqlPpp.AstInternals.TypeChecking.LocalBindingsInternal Database.HsSqlPpp.AstInternals.AstAnnotation+ Database.HsSqlPpp.AstInternals.AnnotationUtils Database.HsSqlPpp.AstInternals.AstInternal- Database.HsSqlPpp.AstInternals.Catalog.DefaultTemplate1Catalog- Database.HsSqlPpp.AstInternals.Catalog.CatalogReader- Database.HsSqlPpp.AstInternals.Catalog.CatalogInternal- Database.HsSqlPpp.AstInternals.TypeChecking.LocalBindings- Database.HsSqlPpp.AstInternals.TypeChecking.LocalIdentifierBindings Database.HsSqlPpp.AstInternals.TypeType- Database.HsSqlPpp.AstInternals.TypeChecking.TypeConversion- Database.HsSqlPpp.AstInternals.TypeChecking.ErrorUtils- Database.HsSqlPpp.Tests.ExtensionTests- Database.HsSqlPpp.Tests.TypeCheckTests- Database.HsSqlPpp.Tests.ParserTests- Database.HsSqlPpp.Tests.DatabaseLoaderTests- Database.HsSqlPpp.Tests.LocalBindingsTests- Database.HsSqlPpp.PrettyPrinter.AnnotateSource- Database.HsSqlPpp.PrettyPrinter.PrettyPrinter- Database.HsSqlPpp.HsText.Commands- Database.HsSqlPpp.HsText.HsText- Database.HsSqlPpp.Parsing.Lexer- Database.HsSqlPpp.Parsing.Parser- Database.HsSqlPpp.Parsing.ParseErrors- Database.HsSqlPpp.Ast.TypeChecker- Database.HsSqlPpp.Ast.Ast- Database.HsSqlPpp.Ast.Catalog- Database.HsSqlPpp.Ast.Annotation- Database.HsSqlPpp.Ast.SqlTypes+ ghc-options: -pgmPcpphs -optP--cpp - extensions: DeriveDataTypeable,RankNTypes,ScopedTypeVariables+ extensions: DeriveDataTypeable,+ RankNTypes,+ ScopedTypeVariables,+ FlexibleContexts,+ ExistentialQuantification,+ CPP,+ PatternGuards,+ TupleSections
+ src/Database/HsSqlPpp/Annotation.lhs view
@@ -0,0 +1,23 @@++This is the public module to the annotation data types and support+functions (not including those that depend on the ast data types).++> {- | Contains the annotation data types and a few auxiliary functions.+> -}+>+> module Database.HsSqlPpp.Annotation+> (+> -- * Annotation data types+> Annotation(..)+> ,SourcePosition+> ,StatementType+> ,getAnnotation+> ,updateAnnotations+> ,updateAnnotation+> ,getAnnotations+> ,emptyAnnotation+> ,resetAnnotations+> ) where+>+> import Database.HsSqlPpp.AstInternals.AstAnnotation+> import Database.HsSqlPpp.AstInternals.AnnotationUtils
+ src/Database/HsSqlPpp/Ast.lhs view
@@ -0,0 +1,97 @@++> {- | This module contains the ast node data types. They are very+> permissive, in that they allow a lot of invalid SQL to be+> represented. The type checking process should catch all invalid+> trees, but doesn't quite manage at the moment. Sorry about all+> the seemingly pointless type synonyms below, they are an+> artefact of using UUAGC. You can see labels for the fields by+> looking at the ag source here:+> <http://jakewheat.github.com/hssqlppp/source/src/Database/HsSqlPpp/AstInternals/AstInternal.ag.html>+> -}+>+> module Database.HsSqlPpp.Ast+> (+> -- * Main nodes+> StatementList+> ,Statement (..)+> ,ScalarExpr (..)+> ,QueryExpr (..)+> -- * Components+> -- ** Selects+> ,SelectList (..)+> ,SelectItem (..)+> ,TableRef (..)+> ,TableAlias(..)+> ,JoinExpr (..)+> ,JoinType (..)+> ,Natural (..)+> ,CombineType (..)+> ,Direction (..)+> ,Distinct (..)+> ,InList (..)+> ,LiftFlavour (..)+> ,FrameClause(..)+> ,WithQueryList+> ,WithQuery(..)+> ,IntervalField(..)+> ,ExtractField(..)+> ,SQIdentifier(..)+> -- ** dml+> ,CopySource (..)+> ,RestartIdentity (..)+> -- ** ddl+> ,AttributeDef (..)+> ,RowConstraint (..)+> ,Constraint (..)+> ,AlterTableAction(..)+> ,TypeAttributeDef (..)+> ,TypeName (..)+> ,DropType (..)+> ,IfExists (..)+> ,Replace(..)+> ,Cascade (..)+> ,TriggerWhen(..)+> ,TriggerEvent(..)+> ,TriggerFire(..)+> -- ** functions+> ,FnBody (..)+> ,ParamDef (..)+> ,VarDef (..)+> ,RaiseType (..)+> ,Volatility (..)+> ,Language (..)+> -- ** misc+> ,SetValue(..)+> -- ,Name(..)+> -- ** typedefs+> ,ScalarExprListStatementListPairList+> ,ScalarExprListStatementListPair+> ,ScalarExprList+> ,MaybeSelectList+> --,StringList+> ,ParamDefList+> ,AttributeDefList+> ,ConstraintList+> ,TypeAttributeDefList+> ,TypeNameList+> ,StringTypeNameListPair+> ,StringTypeNameListPairList+> ,ScalarExprStatementListPairList+> ,CaseScalarExprListScalarExprPairList+> ,MaybeScalarExpr+> ,MaybeBoolExpr+> ,TableRefList+> ,ScalarExprListList+> ,SelectItemList+> ,OnExpr+> ,RowConstraintList+> ,VarDefList+> ,ScalarExprStatementListPair+> ,CaseScalarExprListScalarExprPair+> ,ScalarExprDirectionPair+> ,ScalarExprDirectionPairList+> ,AlterTableActionList+> ) where+>+> import Database.HsSqlPpp.AstInternals.AstInternal+> --import Database.HsSqlPpp.AstInternals.Name
+ src/Database/HsSqlPpp/AstInternals/AnnotationUtils.lhs view
@@ -0,0 +1,28 @@++This module contains some utilities and generic code for working with+asts and annotations which depend on the ast types.++> {-# LANGUAGE ScopedTypeVariables #-}+>+> module Database.HsSqlPpp.AstInternals.AnnotationUtils+> (+> getStatementAnnotations+> ,resetAnnotations+> ) where+>+> import Data.Data+> import Data.Generics.Uniplate.Data+>+> import Database.HsSqlPpp.AstInternals.AstInternal+> import Database.HsSqlPpp.AstInternals.AstAnnotation+>+> -- | Run through the ast and return all the annotations attached to+> -- a Statement node.+> getStatementAnnotations :: Data a => a -> [Annotation]+> getStatementAnnotations st =+> [getAnnotation s | (s::Statement) <- universeBi st]++> -- | Set all the annotations in a tree to be 'emptyAnnotation'.+> resetAnnotations :: Data a => a -> a+> resetAnnotations =+> updateAnnotations (const emptyAnnotation)
+ src/Database/HsSqlPpp/AstInternals/AstAnnotation.lhs view
@@ -0,0 +1,194 @@++The annotation data types and utilities for working with them.++Annotations are used to store source positions, types, errors,+warnings, catalog deltas, information, and other stuff a client might+want to use when looking at an ast. Internal annotations which are+used in the type-checking/ annotation process use the attribute+grammar code and aren't exposed.++> {-# LANGUAGE ExistentialQuantification, DeriveDataTypeable,ScopedTypeVariables,+> RankNTypes,FlexibleContexts #-}+>+> module Database.HsSqlPpp.AstInternals.AstAnnotation+> (+> Annotation(..)+> ,SourcePosition+> ,StatementType+> ,getAnnotation+> ,updateAnnotations+> ,getAnnotations+> ,emptyAnnotation+> ,getTypeAnnotation+> ,updateAnnotation+> ) where+>+> import Data.Generics+> ---import Control.Arrow+> import Data.Generics.Uniplate.Data+> --import Debug.Trace+>+> import Database.HsSqlPpp.AstInternals.TypeType+> import Database.HsSqlPpp.AstInternals.Catalog.CatalogInternal+> --import Database.HsSqlPpp.Utils.Utils+>+> -- | Represents a source file position, usually set by the parser.+> type SourcePosition = (String,Int,Int)+> -- | Statement type is used for getting type information for a parameterized statement.+> type StatementType = ([Type],[(String,Type)])++> -- | Annotation type - one of these is attached to most of the+> -- data types used in the ast.+> data Annotation = Annotation { -- | source position for this node+> asrc :: Maybe SourcePosition+> -- | type of the node, 'Nothing' if the tree hasn't been typechecked or if a type error prevents determining the type+> ,atype :: Maybe Type+> -- | any type errors+> ,errs :: [TypeError]+> -- | 'statement type' - used for getting the in and out types of a parameterized statement+> ,stType :: Maybe StatementType+> -- | any catalog updates that a ddl statement produces+> ,catUpd :: [CatalogUpdate]+> -- | the matched function prototype for a funcall+> ,fnProt :: Maybe FunctionPrototype+> -- | 'inferred' type - fake type inference used for getting the type of ? placeholders in parameterized statements+> ,infType :: Maybe Type}+> deriving (Eq, Show,Typeable,Data)+>+> -- | An annotation value with no information.+> emptyAnnotation :: Annotation+> emptyAnnotation = Annotation Nothing Nothing [] Nothing [] Nothing Nothing++> -- | get the annotation for the root element of the tree passed+> getAnnotation :: Data a => a -> Annotation+> getAnnotation = head . childrenBi++> -- | get all the annotations from a tree+> getAnnotations :: Data a => a -> [Annotation]+> getAnnotations = universeBi -- st --[x | x <- universeBi st]++> -- | update all the annotations in a tree+> updateAnnotations :: Data a => (Annotation -> Annotation) -> a -> a+> updateAnnotations = transformBi++> getTypeAnnotation :: Data a => a -> Maybe Type+> getTypeAnnotation = atype . getAnnotation++++++Use syb/uniplate to pull annotation values from an ast.++I like to cut and paste code from the internet which I don't+understand, then keep changing it till it compiles and passes the tests.++> {- -- | run through the ast, and pull the type annotation from each+> -- of the top level items.+> getTypeAnnotation :: (Show a, Data a) => a -> Type+> getTypeAnnotation st =+> typeAnnot $ getTopLevelAnnotation st+> where+> typeAnnot :: Annotation -> Type+> typeAnnot (x:xs) = case x of+> TypeAnnotation t -> t+> _ -> typeAnnot xs+> typeAnnot [] = TypeCheckFailed -- error "couldn't find type annotation"+>+> -- | Run through the ast given and return a list of statementtypes+> -- from the top level items.+> getTopLevelInfos :: Data a => [a] -> [Maybe StatementType]+> getTopLevelInfos = map (getSIAnnotation . getTopLevelAnnotation)+>+> getTopLevelCatUpdates :: Data a => [a] -> [[CatalogUpdate]]+> getTopLevelCatUpdates = map (getEuAnnotation . getTopLevelAnnotation)+>++> -- | runs through the ast given and returns a list of all the type errors+> -- in the ast. Recurses into all ast nodes to find type errors.+> -- This is the function to use to see if an ast has passed the type checking process.+> -- Returns a Maybe SourcePos and the list of type errors for each node which has one or+> -- more type errors.+> getTypeErrors :: (Data a) => a -> [(Maybe AnnotationElement,[TypeError])]+> getTypeErrors sts =+> filter (\(_,te) -> not $ null te) $ map (gtsp &&& gte) $ getAnnotations sts+> where+> gte (a:as) = case a of+> TypeErrorA e -> e:gte as+> _ -> gte as+> gte _ = []+> gtsp (a:as) = case a of+> s@(SourcePos _ _ _) -> Just s+> _ -> gtsp as+> gtsp _ = Nothing++~~~~+question:+if a node has no source position e.g. the all in select all or select+ distinct may correspond to a token or may be synthesized as the+ default if neither all or distinct is present. Should this have the+ source position of where the token would have appeared, should it+ inherit it from its parent, should there be a separate ctor to+ represent a fake node with no source position?++~~~~++hack job, often not interested in the source positions when testing+the asts produced, so this function will reset all the source+positions to empty ("", 0, 0) so we can compare them for equality, etc.+without having to get the positions correct.++> -}++ > -- | strip all the annotations from a tree. E.g. can be used to compare+ > -- two asts are the same, ignoring any source position annotation differences.+ > stripAnnotations :: Data a => a -> a+ > stripAnnotations = filterAnnotations (const False)+ >++ > filterAnnotations :: Data a => (Annotation -> Bool) -> a -> a+ > filterAnnotations f = transformBi (filter f)++>+> -- | Update all the annotations in a tree using the function supplied+> updateAnnotation :: Data a => (Annotation -> Annotation) -> a -> a+> updateAnnotation f = gmapT (mkT f)+>+++ > case gmapQ (mkQ [] f) a of+ > an:_ -> an+ > [] -> []+ > where+ > f :: Annotation -> Annotation+ > f = id+ >++ >+ > getAnnotations :: Data a => a -> [Annotation]+ > getAnnotations = listifyWholeLists (\(_::Annotation) -> True)+ >++> {-getSIAnnotation :: Annotation -> Maybe StatementType+> getSIAnnotation (x:xs) = case x of+> StatementTypeA t -> Just t+> _ -> getSIAnnotation xs+> getSIAnnotation [] = Nothing+>+> getEuAnnotation :: Annotation -> [CatalogUpdate]+> getEuAnnotation (x:xs) = case x of+> CatUpdates t -> t+> _ -> getEuAnnotation xs+> getEuAnnotation [] = []-}++-------------------------------------------------------------------------------++utils++ > listifyWholeLists :: Typeable b => ([b] -> Bool) -> GenericQ [[b]]+ > listifyWholeLists blp = flip (synthesize id (.) (mkQ id (\bl _ -> if blp bl then (bl:) else id))) []++this might need to be maybe and change head?++ > getTopLevelAnnotation :: Data a => a -> Annotation+ > getTopLevelAnnotation st = head $ childrenBi st
+ src/Database/HsSqlPpp/AstInternals/AstAnti.hs view
@@ -0,0 +1,967 @@+{-+This file is autogenerated, to generate: load this file (MakeAntiNodes.lhs)+into ghci and run:+nwriteAntiNodes+n\nThe path might need tweaking.+n-}+{-# LANGUAGE DeriveDataTypeable #-}+module Database.HsSqlPpp.AstInternals.AstAnti+ (convertStatements, convertScalarExpr, attributeDef, queryExpr,+ Statement(..), QueryExpr(..), WithQuery(..), FnBody(..),+ TableRef(..), TableAlias(..), JoinExpr(..), JoinType(..),+ SelectList(..), SelectItem(..), CopySource(..), AttributeDef(..),+ RowConstraint(..), AlterTableAction(..), Constraint(..),+ TypeAttributeDef(..), ParamDef(..), VarDef(..), RaiseType(..),+ CombineType(..), Volatility(..), Language(..), TypeName(..),+ DropType(..), Cascade(..), Direction(..), Distinct(..),+ Natural(..), IfExists(..), Replace(..), RestartIdentity(..),+ ScalarExpr(..), SQIdentifier(..), IntervalField(..),+ ExtractField(..), FrameClause(..), InList(..), LiftFlavour(..),+ TriggerWhen(..), TriggerEvent(..), TriggerFire(..), SetValue(..),+ WithQueryList, StatementList, ScalarExprListStatementListPairList,+ ScalarExprListStatementListPair, ScalarExprList, ParamDefList,+ AttributeDefList, ConstraintList, TypeAttributeDefList,+ TypeNameList, StringTypeNameListPair, StringTypeNameListPairList,+ ScalarExprStatementListPairList,+ CaseScalarExprListScalarExprPairList, MaybeScalarExpr,+ TableRefList, ScalarExprListList, SelectItemList, OnExpr,+ RowConstraintList, VarDefList, ScalarExprStatementListPair,+ CaseScalarExprListScalarExprPair, ScalarExprDirectionPair,+ ScalarExprDirectionPairList, MaybeBoolExpr, MaybeSelectList,+ AlterTableActionList)+ where+import Data.Generics+import Database.HsSqlPpp.AstInternals.AstAnnotation+import qualified Database.HsSqlPpp.AstInternals.AstInternal as A+ +convertStatements :: [Statement] -> [A.Statement]+convertStatements = statementList+ +convertScalarExpr :: ScalarExpr -> A.ScalarExpr+convertScalarExpr = scalarExpr+ +data JoinType = Inner+ | LeftOuter+ | RightOuter+ | FullOuter+ | Cross+ deriving (Show, Eq, Typeable, Data)+ +data CopySource = CopyFilename String+ | Stdin+ deriving (Show, Eq, Typeable, Data)+ +data SetValue = SetStr Annotation String+ | SetId Annotation String+ | SetNum Annotation Double+ deriving (Show, Eq, Typeable, Data)+ +data TriggerWhen = TriggerBefore+ | TriggerAfter+ deriving (Show, Eq, Typeable, Data)+ +data TriggerEvent = TInsert+ | TUpdate+ | TDelete+ | AntiTriggerEvent String+ deriving (Show, Eq, Typeable, Data)+ +data TriggerFire = EachRow+ | EachStatement+ deriving (Show, Eq, Typeable, Data)+ +data RaiseType = RNotice+ | RException+ | RError+ deriving (Show, Eq, Typeable, Data)+ +data CombineType = Except+ | Union+ | Intersect+ | UnionAll+ deriving (Show, Eq, Typeable, Data)+ +data Volatility = Volatile+ | Stable+ | Immutable+ deriving (Show, Eq, Typeable, Data)+ +data Language = Sql+ | Plpgsql+ deriving (Show, Eq, Typeable, Data)+ +data DropType = Table+ | Domain+ | View+ | Type+ deriving (Show, Eq, Typeable, Data)+ +data Cascade = Cascade+ | Restrict+ deriving (Show, Eq, Typeable, Data)+ +data Direction = Asc+ | Desc+ deriving (Show, Eq, Typeable, Data)+ +data Distinct = Distinct+ | Dupes+ deriving (Show, Eq, Typeable, Data)+ +data Natural = Natural+ | Unnatural+ deriving (Show, Eq, Typeable, Data)+ +data IfExists = Require+ | IfExists+ deriving (Show, Eq, Typeable, Data)+ +data Replace = Replace+ | NoReplace+ deriving (Show, Eq, Typeable, Data)+ +data RestartIdentity = RestartIdentity+ | ContinueIdentity+ deriving (Show, Eq, Typeable, Data)+ +data LiftFlavour = LiftAny+ | LiftAll+ deriving (Show, Eq, Typeable, Data)+ +data IntervalField = IntervalYear+ | IntervalMonth+ | IntervalDay+ | IntervalHour+ | IntervalMinute+ | IntervalSecond+ | IntervalYearToMonth+ | IntervalDayToHour+ | IntervalDayToMinute+ | IntervalDayToSecond+ | IntervalHourToMinute+ | IntervalHourToSecond+ | IntervalMinuteToSecond+ deriving (Show, Eq, Typeable, Data)+ +data ExtractField = ExtractCentury+ | ExtractDay+ | ExtractDecade+ | ExtractDow+ | ExtractDoy+ | ExtractEpoch+ | ExtractHour+ | ExtractIsodow+ | ExtractIsoyear+ | ExtractMicroseconds+ | ExtractMillennium+ | ExtractMilliseconds+ | ExtractMinute+ | ExtractMonth+ | ExtractQuarter+ | ExtractSecond+ | ExtractTimezone+ | ExtractTimezoneHour+ | ExtractTimezoneMinute+ | ExtractWeek+ | ExtractYear+ deriving (Show, Eq, Typeable, Data)+ +data FrameClause = FrameUnboundedPreceding+ | FrameUnboundedFull+ | FrameRowsUnboundedPreceding+ deriving (Show, Eq, Typeable, Data)+ +data AlterTableAction = AddConstraint Annotation Constraint+ | AlterColumnDefault Annotation String ScalarExpr+ deriving (Data, Eq, Show, Typeable)+ +data AttributeDef = AttributeDef Annotation String TypeName+ MaybeScalarExpr RowConstraintList+ deriving (Data, Eq, Show, Typeable)+ +data Constraint = CheckConstraint Annotation String ScalarExpr+ | PrimaryKeyConstraint Annotation String [String]+ | ReferenceConstraint Annotation String [String] String [String]+ Cascade Cascade+ | UniqueConstraint Annotation String [String]+ deriving (Data, Eq, Show, Typeable)+ +data FnBody = PlpgsqlFnBody Annotation Statement+ | SqlFnBody Annotation StatementList+ deriving (Data, Eq, Show, Typeable)+ +data InList = InList Annotation ScalarExprList+ | InQueryExpr Annotation QueryExpr+ deriving (Data, Eq, Show, Typeable)+ +data JoinExpr = JoinOn Annotation ScalarExpr+ | JoinUsing Annotation [String]+ deriving (Data, Eq, Show, Typeable)+ +data ParamDef = ParamDef Annotation String TypeName+ | ParamDefTp Annotation TypeName+ deriving (Data, Eq, Show, Typeable)+ +data QueryExpr = CombineQueryExpr Annotation CombineType QueryExpr+ QueryExpr+ | Select Annotation Distinct SelectList TableRefList MaybeBoolExpr+ ScalarExprList MaybeBoolExpr ScalarExprDirectionPairList+ MaybeScalarExpr MaybeScalarExpr+ | Values Annotation ScalarExprListList+ | WithQueryExpr Annotation WithQueryList QueryExpr+ deriving (Data, Eq, Show, Typeable)+ +data RowConstraint = NotNullConstraint Annotation String+ | NullConstraint Annotation String+ | RowCheckConstraint Annotation String ScalarExpr+ | RowPrimaryKeyConstraint Annotation String+ | RowReferenceConstraint Annotation String String (Maybe String)+ Cascade Cascade+ | RowUniqueConstraint Annotation String+ deriving (Data, Eq, Show, Typeable)+ +data SQIdentifier = SQIdentifier Annotation [String]+ deriving (Data, Eq, Show, Typeable)+ +data ScalarExpr = BooleanLit Annotation Bool+ | Case Annotation CaseScalarExprListScalarExprPairList+ MaybeScalarExpr+ | CaseSimple Annotation ScalarExpr+ CaseScalarExprListScalarExprPairList MaybeScalarExpr+ | Cast Annotation ScalarExpr TypeName+ | Exists Annotation QueryExpr+ | Extract Annotation ExtractField ScalarExpr+ | FunCall Annotation String ScalarExprList+ | Identifier Annotation String+ | InPredicate Annotation ScalarExpr Bool InList+ | Interval Annotation String IntervalField (Maybe Int)+ | LiftOperator Annotation String LiftFlavour ScalarExprList+ | NullLit Annotation+ | NumberLit Annotation String+ | Placeholder Annotation+ | PositionalArg Annotation Integer+ | QIdentifier Annotation ScalarExpr String+ | ScalarSubQuery Annotation QueryExpr+ | StringLit Annotation String+ | TypedStringLit Annotation TypeName String+ | WindowFn Annotation ScalarExpr ScalarExprList ScalarExprList+ Direction FrameClause+ | AntiScalarExpr String+ deriving (Data, Eq, Show, Typeable)+ +data SelectItem = SelExp Annotation ScalarExpr+ | SelectItem Annotation ScalarExpr String+ deriving (Data, Eq, Show, Typeable)+ +data SelectList = SelectList Annotation SelectItemList+ deriving (Data, Eq, Show, Typeable)+ +data Statement = AlterSequence Annotation String SQIdentifier+ | AlterTable Annotation String AlterTableActionList+ | Assignment Annotation ScalarExpr ScalarExpr+ | Block Annotation (Maybe String) VarDefList StatementList+ | CaseStatement Annotation ScalarExprListStatementListPairList+ StatementList+ | CaseStatementSimple Annotation ScalarExpr+ ScalarExprListStatementListPairList StatementList+ | ContinueStatement Annotation (Maybe String)+ | Copy Annotation String [String] CopySource+ | CopyData Annotation String+ | CreateDomain Annotation String TypeName String MaybeBoolExpr+ | CreateFunction Annotation String ParamDefList TypeName Replace+ Language FnBody Volatility+ | CreateLanguage Annotation String+ | CreateSequence Annotation String Integer Integer Integer Integer+ Integer+ | CreateTable Annotation String AttributeDefList ConstraintList+ | CreateTableAs Annotation String QueryExpr+ | CreateTrigger Annotation String TriggerWhen [TriggerEvent] String+ TriggerFire String ScalarExprList+ | CreateType Annotation String TypeAttributeDefList+ | CreateView Annotation String (Maybe [String]) QueryExpr+ | Delete Annotation SQIdentifier TableRefList MaybeBoolExpr+ MaybeSelectList+ | DropFunction Annotation IfExists StringTypeNameListPairList+ Cascade+ | DropSomething Annotation DropType IfExists [String] Cascade+ | Execute Annotation ScalarExpr+ | ExitStatement Annotation (Maybe String)+ | ForIntegerStatement Annotation (Maybe String) ScalarExpr+ ScalarExpr ScalarExpr StatementList+ | ForQueryStatement Annotation (Maybe String) ScalarExpr QueryExpr+ StatementList+ | If Annotation ScalarExprStatementListPairList StatementList+ | Insert Annotation SQIdentifier [String] QueryExpr MaybeSelectList+ | Into Annotation Bool ScalarExprList Statement+ | LoopStatement Annotation (Maybe String) StatementList+ | Notify Annotation String+ | NullStatement Annotation+ | Perform Annotation ScalarExpr+ | QueryStatement Annotation QueryExpr+ | Raise Annotation RaiseType String ScalarExprList+ | Return Annotation MaybeScalarExpr+ | ReturnNext Annotation ScalarExpr+ | ReturnQuery Annotation QueryExpr+ | Set Annotation String [SetValue]+ | Truncate Annotation [String] RestartIdentity Cascade+ | Update Annotation SQIdentifier ScalarExprList TableRefList+ MaybeBoolExpr MaybeSelectList+ | WhileStatement Annotation (Maybe String) ScalarExpr StatementList+ | AntiStatement String+ deriving (Data, Eq, Show, Typeable)+ +data TableAlias = FullAlias Annotation String [String]+ | NoAlias Annotation+ | TableAlias Annotation String+ deriving (Data, Eq, Show, Typeable)+ +data TableRef = FunTref Annotation ScalarExpr TableAlias+ | JoinTref Annotation TableRef Natural JoinType TableRef OnExpr+ TableAlias+ | SubTref Annotation QueryExpr TableAlias+ | Tref Annotation SQIdentifier TableAlias+ deriving (Data, Eq, Show, Typeable)+ +data TypeAttributeDef = TypeAttDef Annotation String TypeName+ deriving (Data, Eq, Show, Typeable)+ +data TypeName = ArrayTypeName Annotation TypeName+ | Prec2TypeName Annotation String Integer Integer+ | PrecTypeName Annotation String Integer+ | SetOfTypeName Annotation TypeName+ | SimpleTypeName Annotation String+ deriving (Data, Eq, Show, Typeable)+ +data VarDef = ParamAlias Annotation String Integer+ | VarAlias Annotation String String+ | VarDef Annotation String TypeName (Maybe ScalarExpr)+ deriving (Data, Eq, Show, Typeable)+ +data WithQuery = WithQuery Annotation String (Maybe [String])+ QueryExpr+ deriving (Data, Eq, Show, Typeable)+ +type AlterTableActionList = [AlterTableAction]+ +type AttributeDefList = [AttributeDef]+ +type CaseScalarExprListScalarExprPair =+ (ScalarExprList, ScalarExpr)+ +type CaseScalarExprListScalarExprPairList =+ [CaseScalarExprListScalarExprPair]+ +type ConstraintList = [Constraint]+ +type MaybeBoolExpr = Maybe ScalarExpr+ +type MaybeScalarExpr = Maybe ScalarExpr+ +type MaybeSelectList = Maybe SelectList+ +type OnExpr = Maybe JoinExpr+ +type ParamDefList = [ParamDef]+ +type RowConstraintList = [RowConstraint]+ +type ScalarExprDirectionPair = (ScalarExpr, Direction)+ +type ScalarExprDirectionPairList = [ScalarExprDirectionPair]+ +type ScalarExprList = [ScalarExpr]+ +type ScalarExprListList = [ScalarExprList]+ +type ScalarExprListStatementListPair =+ (ScalarExprList, StatementList)+ +type ScalarExprListStatementListPairList =+ [ScalarExprListStatementListPair]+ +type ScalarExprStatementListPair = (ScalarExpr, StatementList)+ +type ScalarExprStatementListPairList =+ [ScalarExprStatementListPair]+ +type SelectItemList = [SelectItem]+ +type StatementList = [Statement]+ +type StringTypeNameListPair = (String, TypeNameList)+ +type StringTypeNameListPairList = [StringTypeNameListPair]+ +type TableRefList = [TableRef]+ +type TypeAttributeDefList = [TypeAttributeDef]+ +type TypeNameList = [TypeName]+ +type VarDefList = [VarDef]+ +type WithQueryList = [WithQuery]+ +joinType :: JoinType -> A.JoinType+joinType x+ = case x of+ Inner -> A.Inner+ LeftOuter -> A.LeftOuter+ RightOuter -> A.RightOuter+ FullOuter -> A.FullOuter+ Cross -> A.Cross+ +copySource :: CopySource -> A.CopySource+copySource x+ = case x of+ CopyFilename a1 -> A.CopyFilename a1+ Stdin -> A.Stdin+ +setValue :: SetValue -> A.SetValue+setValue x+ = case x of+ SetStr a1 a2 -> A.SetStr a1 a2+ SetId a1 a2 -> A.SetId a1 a2+ SetNum a1 a2 -> A.SetNum a1 a2+ +triggerWhen :: TriggerWhen -> A.TriggerWhen+triggerWhen x+ = case x of+ TriggerBefore -> A.TriggerBefore+ TriggerAfter -> A.TriggerAfter+ +triggerEvent :: TriggerEvent -> A.TriggerEvent+triggerEvent x+ = case x of+ TInsert -> A.TInsert+ TUpdate -> A.TUpdate+ TDelete -> A.TDelete+ AntiTriggerEvent _ -> error "can't convert anti triggerEvent"+ +triggerFire :: TriggerFire -> A.TriggerFire+triggerFire x+ = case x of+ EachRow -> A.EachRow+ EachStatement -> A.EachStatement+ +raiseType :: RaiseType -> A.RaiseType+raiseType x+ = case x of+ RNotice -> A.RNotice+ RException -> A.RException+ RError -> A.RError+ +combineType :: CombineType -> A.CombineType+combineType x+ = case x of+ Except -> A.Except+ Union -> A.Union+ Intersect -> A.Intersect+ UnionAll -> A.UnionAll+ +volatility :: Volatility -> A.Volatility+volatility x+ = case x of+ Volatile -> A.Volatile+ Stable -> A.Stable+ Immutable -> A.Immutable+ +language :: Language -> A.Language+language x+ = case x of+ Sql -> A.Sql+ Plpgsql -> A.Plpgsql+ +dropType :: DropType -> A.DropType+dropType x+ = case x of+ Table -> A.Table+ Domain -> A.Domain+ View -> A.View+ Type -> A.Type+ +cascade :: Cascade -> A.Cascade+cascade x+ = case x of+ Cascade -> A.Cascade+ Restrict -> A.Restrict+ +direction :: Direction -> A.Direction+direction x+ = case x of+ Asc -> A.Asc+ Desc -> A.Desc+ +distinct :: Distinct -> A.Distinct+distinct x+ = case x of+ Distinct -> A.Distinct+ Dupes -> A.Dupes+ +natural :: Natural -> A.Natural+natural x+ = case x of+ Natural -> A.Natural+ Unnatural -> A.Unnatural+ +ifExists :: IfExists -> A.IfExists+ifExists x+ = case x of+ Require -> A.Require+ IfExists -> A.IfExists+ +replace :: Replace -> A.Replace+replace x+ = case x of+ Replace -> A.Replace+ NoReplace -> A.NoReplace+ +restartIdentity :: RestartIdentity -> A.RestartIdentity+restartIdentity x+ = case x of+ RestartIdentity -> A.RestartIdentity+ ContinueIdentity -> A.ContinueIdentity+ +liftFlavour :: LiftFlavour -> A.LiftFlavour+liftFlavour x+ = case x of+ LiftAny -> A.LiftAny+ LiftAll -> A.LiftAll+ +intervalField :: IntervalField -> A.IntervalField+intervalField x+ = case x of+ IntervalYear -> A.IntervalYear+ IntervalMonth -> A.IntervalMonth+ IntervalDay -> A.IntervalDay+ IntervalHour -> A.IntervalHour+ IntervalMinute -> A.IntervalMinute+ IntervalSecond -> A.IntervalSecond+ IntervalYearToMonth -> A.IntervalYearToMonth+ IntervalDayToHour -> A.IntervalDayToHour+ IntervalDayToMinute -> A.IntervalDayToMinute+ IntervalDayToSecond -> A.IntervalDayToSecond+ IntervalHourToMinute -> A.IntervalHourToMinute+ IntervalHourToSecond -> A.IntervalHourToSecond+ IntervalMinuteToSecond -> A.IntervalMinuteToSecond+ +extractField :: ExtractField -> A.ExtractField+extractField x+ = case x of+ ExtractCentury -> A.ExtractCentury+ ExtractDay -> A.ExtractDay+ ExtractDecade -> A.ExtractDecade+ ExtractDow -> A.ExtractDow+ ExtractDoy -> A.ExtractDoy+ ExtractEpoch -> A.ExtractEpoch+ ExtractHour -> A.ExtractHour+ ExtractIsodow -> A.ExtractIsodow+ ExtractIsoyear -> A.ExtractIsoyear+ ExtractMicroseconds -> A.ExtractMicroseconds+ ExtractMillennium -> A.ExtractMillennium+ ExtractMilliseconds -> A.ExtractMilliseconds+ ExtractMinute -> A.ExtractMinute+ ExtractMonth -> A.ExtractMonth+ ExtractQuarter -> A.ExtractQuarter+ ExtractSecond -> A.ExtractSecond+ ExtractTimezone -> A.ExtractTimezone+ ExtractTimezoneHour -> A.ExtractTimezoneHour+ ExtractTimezoneMinute -> A.ExtractTimezoneMinute+ ExtractWeek -> A.ExtractWeek+ ExtractYear -> A.ExtractYear+ +frameClause :: FrameClause -> A.FrameClause+frameClause x+ = case x of+ FrameUnboundedPreceding -> A.FrameUnboundedPreceding+ FrameUnboundedFull -> A.FrameUnboundedFull+ FrameRowsUnboundedPreceding -> A.FrameRowsUnboundedPreceding+ +alterTableAction :: AlterTableAction -> A.AlterTableAction+alterTableAction x+ = case x of+ AddConstraint a1 a2 -> A.AddConstraint a1 (constraint a2)+ AlterColumnDefault a1 a2 a3 -> A.AlterColumnDefault a1 a2+ (scalarExpr a3)+ +attributeDef :: AttributeDef -> A.AttributeDef+attributeDef x+ = case x of+ AttributeDef a1 a2 a3 a4 a5 -> A.AttributeDef a1 a2 (typeName a3)+ (maybeScalarExpr a4)+ (rowConstraintList a5)+ +constraint :: Constraint -> A.Constraint+constraint x+ = case x of+ CheckConstraint a1 a2 a3 -> A.CheckConstraint a1 a2 (scalarExpr a3)+ PrimaryKeyConstraint a1 a2 a3 -> A.PrimaryKeyConstraint a1 a2 a3+ ReferenceConstraint a1 a2 a3 a4 a5 a6 a7 -> A.ReferenceConstraint+ a1+ a2+ a3+ a4+ a5+ (cascade a6)+ (cascade a7)+ UniqueConstraint a1 a2 a3 -> A.UniqueConstraint a1 a2 a3+ +fnBody :: FnBody -> A.FnBody+fnBody x+ = case x of+ PlpgsqlFnBody a1 a2 -> A.PlpgsqlFnBody a1 (statement a2)+ SqlFnBody a1 a2 -> A.SqlFnBody a1 (statementList a2)+ +inList :: InList -> A.InList+inList x+ = case x of+ InList a1 a2 -> A.InList a1 (scalarExprList a2)+ InQueryExpr a1 a2 -> A.InQueryExpr a1 (queryExpr a2)+ +joinExpr :: JoinExpr -> A.JoinExpr+joinExpr x+ = case x of+ JoinOn a1 a2 -> A.JoinOn a1 (scalarExpr a2)+ JoinUsing a1 a2 -> A.JoinUsing a1 a2+ +paramDef :: ParamDef -> A.ParamDef+paramDef x+ = case x of+ ParamDef a1 a2 a3 -> A.ParamDef a1 a2 (typeName a3)+ ParamDefTp a1 a2 -> A.ParamDefTp a1 (typeName a2)+ +queryExpr :: QueryExpr -> A.QueryExpr+queryExpr x+ = case x of+ CombineQueryExpr a1 a2 a3 a4 -> A.CombineQueryExpr a1+ (combineType a2)+ (queryExpr a3)+ (queryExpr a4)+ Select a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 -> A.Select a1 (distinct a2)+ (selectList a3)+ (tableRefList a4)+ (maybeBoolExpr a5)+ (scalarExprList a6)+ (maybeBoolExpr a7)+ (scalarExprDirectionPairList a8)+ (maybeScalarExpr a9)+ (maybeScalarExpr a10)+ Values a1 a2 -> A.Values a1 (scalarExprListList a2)+ WithQueryExpr a1 a2 a3 -> A.WithQueryExpr a1 (withQueryList a2)+ (queryExpr a3)+ +rowConstraint :: RowConstraint -> A.RowConstraint+rowConstraint x+ = case x of+ NotNullConstraint a1 a2 -> A.NotNullConstraint a1 a2+ NullConstraint a1 a2 -> A.NullConstraint a1 a2+ RowCheckConstraint a1 a2 a3 -> A.RowCheckConstraint a1 a2+ (scalarExpr a3)+ RowPrimaryKeyConstraint a1 a2 -> A.RowPrimaryKeyConstraint a1 a2+ RowReferenceConstraint a1 a2 a3 a4 a5+ a6 -> A.RowReferenceConstraint a1 a2 a3 a4 (cascade a5)+ (cascade a6)+ RowUniqueConstraint a1 a2 -> A.RowUniqueConstraint a1 a2+ +sQIdentifier :: SQIdentifier -> A.SQIdentifier+sQIdentifier x+ = case x of+ SQIdentifier a1 a2 -> A.SQIdentifier a1 a2+ +scalarExpr :: ScalarExpr -> A.ScalarExpr+scalarExpr x+ = case x of+ BooleanLit a1 a2 -> A.BooleanLit a1 a2+ Case a1 a2 a3 -> A.Case a1+ (caseScalarExprListScalarExprPairList a2)+ (maybeScalarExpr a3)+ CaseSimple a1 a2 a3 a4 -> A.CaseSimple a1 (scalarExpr a2)+ (caseScalarExprListScalarExprPairList a3)+ (maybeScalarExpr a4)+ Cast a1 a2 a3 -> A.Cast a1 (scalarExpr a2) (typeName a3)+ Exists a1 a2 -> A.Exists a1 (queryExpr a2)+ Extract a1 a2 a3 -> A.Extract a1 (extractField a2) (scalarExpr a3)+ FunCall a1 a2 a3 -> A.FunCall a1 a2 (scalarExprList a3)+ Identifier a1 a2 -> A.Identifier a1 a2+ InPredicate a1 a2 a3 a4 -> A.InPredicate a1 (scalarExpr a2) a3+ (inList a4)+ Interval a1 a2 a3 a4 -> A.Interval a1 a2 (intervalField a3) a4+ LiftOperator a1 a2 a3 a4 -> A.LiftOperator a1 a2 (liftFlavour a3)+ (scalarExprList a4)+ NullLit a1 -> A.NullLit a1+ NumberLit a1 a2 -> A.NumberLit a1 a2+ Placeholder a1 -> A.Placeholder a1+ PositionalArg a1 a2 -> A.PositionalArg a1 a2+ QIdentifier a1 a2 a3 -> A.QIdentifier a1 (scalarExpr a2) a3+ ScalarSubQuery a1 a2 -> A.ScalarSubQuery a1 (queryExpr a2)+ StringLit a1 a2 -> A.StringLit a1 a2+ TypedStringLit a1 a2 a3 -> A.TypedStringLit a1 (typeName a2) a3+ WindowFn a1 a2 a3 a4 a5 a6 -> A.WindowFn a1 (scalarExpr a2)+ (scalarExprList a3)+ (scalarExprList a4)+ (direction a5)+ (frameClause a6)+ AntiScalarExpr _ -> error "can't convert anti scalarExpr"+ +selectItem :: SelectItem -> A.SelectItem+selectItem x+ = case x of+ SelExp a1 a2 -> A.SelExp a1 (scalarExpr a2)+ SelectItem a1 a2 a3 -> A.SelectItem a1 (scalarExpr a2) a3+ +selectList :: SelectList -> A.SelectList+selectList x+ = case x of+ SelectList a1 a2 -> A.SelectList a1 (selectItemList a2)+ +statement :: Statement -> A.Statement+statement x+ = case x of+ AlterSequence a1 a2 a3 -> A.AlterSequence a1 a2 (sQIdentifier a3)+ AlterTable a1 a2 a3 -> A.AlterTable a1 a2 (alterTableActionList a3)+ Assignment a1 a2 a3 -> A.Assignment a1 (scalarExpr a2)+ (scalarExpr a3)+ Block a1 a2 a3 a4 -> A.Block a1 a2 (varDefList a3)+ (statementList a4)+ CaseStatement a1 a2 a3 -> A.CaseStatement a1+ (scalarExprListStatementListPairList a2)+ (statementList a3)+ CaseStatementSimple a1 a2 a3 a4 -> A.CaseStatementSimple a1+ (scalarExpr a2)+ (scalarExprListStatementListPairList a3)+ (statementList a4)+ ContinueStatement a1 a2 -> A.ContinueStatement a1 a2+ Copy a1 a2 a3 a4 -> A.Copy a1 a2 a3 (copySource a4)+ CopyData a1 a2 -> A.CopyData a1 a2+ CreateDomain a1 a2 a3 a4 a5 -> A.CreateDomain a1 a2 (typeName a3)+ a4+ (maybeBoolExpr a5)+ CreateFunction a1 a2 a3 a4 a5 a6 a7 a8 -> A.CreateFunction a1 a2+ (paramDefList a3)+ (typeName a4)+ (replace a5)+ (language a6)+ (fnBody a7)+ (volatility a8)+ CreateLanguage a1 a2 -> A.CreateLanguage a1 a2+ CreateSequence a1 a2 a3 a4 a5 a6 a7 -> A.CreateSequence a1 a2 a3 a4+ a5+ a6+ a7+ CreateTable a1 a2 a3 a4 -> A.CreateTable a1 a2+ (attributeDefList a3)+ (constraintList a4)+ CreateTableAs a1 a2 a3 -> A.CreateTableAs a1 a2 (queryExpr a3)+ CreateTrigger a1 a2 a3 a4 a5 a6 a7 a8 -> A.CreateTrigger a1 a2+ (triggerWhen a3)+ (fmap triggerEvent a4)+ a5+ (triggerFire a6)+ a7+ (scalarExprList a8)+ CreateType a1 a2 a3 -> A.CreateType a1 a2 (typeAttributeDefList a3)+ CreateView a1 a2 a3 a4 -> A.CreateView a1 a2 a3 (queryExpr a4)+ Delete a1 a2 a3 a4 a5 -> A.Delete a1 (sQIdentifier a2)+ (tableRefList a3)+ (maybeBoolExpr a4)+ (maybeSelectList a5)+ DropFunction a1 a2 a3 a4 -> A.DropFunction a1 (ifExists a2)+ (stringTypeNameListPairList a3)+ (cascade a4)+ DropSomething a1 a2 a3 a4 a5 -> A.DropSomething a1 (dropType a2)+ (ifExists a3)+ a4+ (cascade a5)+ Execute a1 a2 -> A.Execute a1 (scalarExpr a2)+ ExitStatement a1 a2 -> A.ExitStatement a1 a2+ ForIntegerStatement a1 a2 a3 a4 a5 a6 -> A.ForIntegerStatement a1+ a2+ (scalarExpr a3)+ (scalarExpr a4)+ (scalarExpr a5)+ (statementList a6)+ ForQueryStatement a1 a2 a3 a4 a5 -> A.ForQueryStatement a1 a2+ (scalarExpr a3)+ (queryExpr a4)+ (statementList a5)+ If a1 a2 a3 -> A.If a1 (scalarExprStatementListPairList a2)+ (statementList a3)+ Insert a1 a2 a3 a4 a5 -> A.Insert a1 (sQIdentifier a2) a3+ (queryExpr a4)+ (maybeSelectList a5)+ Into a1 a2 a3 a4 -> A.Into a1 a2 (scalarExprList a3) (statement a4)+ LoopStatement a1 a2 a3 -> A.LoopStatement a1 a2 (statementList a3)+ Notify a1 a2 -> A.Notify a1 a2+ NullStatement a1 -> A.NullStatement a1+ Perform a1 a2 -> A.Perform a1 (scalarExpr a2)+ QueryStatement a1 a2 -> A.QueryStatement a1 (queryExpr a2)+ Raise a1 a2 a3 a4 -> A.Raise a1 (raiseType a2) a3+ (scalarExprList a4)+ Return a1 a2 -> A.Return a1 (maybeScalarExpr a2)+ ReturnNext a1 a2 -> A.ReturnNext a1 (scalarExpr a2)+ ReturnQuery a1 a2 -> A.ReturnQuery a1 (queryExpr a2)+ Set a1 a2 a3 -> A.Set a1 a2 (fmap setValue a3)+ Truncate a1 a2 a3 a4 -> A.Truncate a1 a2 (restartIdentity a3)+ (cascade a4)+ Update a1 a2 a3 a4 a5 a6 -> A.Update a1 (sQIdentifier a2)+ (scalarExprList a3)+ (tableRefList a4)+ (maybeBoolExpr a5)+ (maybeSelectList a6)+ WhileStatement a1 a2 a3 a4 -> A.WhileStatement a1 a2+ (scalarExpr a3)+ (statementList a4)+ AntiStatement _ -> error "can't convert anti statement"+ +tableAlias :: TableAlias -> A.TableAlias+tableAlias x+ = case x of+ FullAlias a1 a2 a3 -> A.FullAlias a1 a2 a3+ NoAlias a1 -> A.NoAlias a1+ TableAlias a1 a2 -> A.TableAlias a1 a2+ +tableRef :: TableRef -> A.TableRef+tableRef x+ = case x of+ FunTref a1 a2 a3 -> A.FunTref a1 (scalarExpr a2) (tableAlias a3)+ JoinTref a1 a2 a3 a4 a5 a6 a7 -> A.JoinTref a1 (tableRef a2)+ (natural a3)+ (joinType a4)+ (tableRef a5)+ (onExpr a6)+ (tableAlias a7)+ SubTref a1 a2 a3 -> A.SubTref a1 (queryExpr a2) (tableAlias a3)+ Tref a1 a2 a3 -> A.Tref a1 (sQIdentifier a2) (tableAlias a3)+ +typeAttributeDef :: TypeAttributeDef -> A.TypeAttributeDef+typeAttributeDef x+ = case x of+ TypeAttDef a1 a2 a3 -> A.TypeAttDef a1 a2 (typeName a3)+ +typeName :: TypeName -> A.TypeName+typeName x+ = case x of+ ArrayTypeName a1 a2 -> A.ArrayTypeName a1 (typeName a2)+ Prec2TypeName a1 a2 a3 a4 -> A.Prec2TypeName a1 a2 a3 a4+ PrecTypeName a1 a2 a3 -> A.PrecTypeName a1 a2 a3+ SetOfTypeName a1 a2 -> A.SetOfTypeName a1 (typeName a2)+ SimpleTypeName a1 a2 -> A.SimpleTypeName a1 a2+ +varDef :: VarDef -> A.VarDef+varDef x+ = case x of+ ParamAlias a1 a2 a3 -> A.ParamAlias a1 a2 a3+ VarAlias a1 a2 a3 -> A.VarAlias a1 a2 a3+ VarDef a1 a2 a3 a4 -> A.VarDef a1 a2 (typeName a3)+ (maybeScalarExpr a4)+ +withQuery :: WithQuery -> A.WithQuery+withQuery x+ = case x of+ WithQuery a1 a2 a3 a4 -> A.WithQuery a1 a2 a3 (queryExpr a4)+ +alterTableActionList ::+ AlterTableActionList -> A.AlterTableActionList+alterTableActionList = fmap alterTableAction+ +attributeDefList :: AttributeDefList -> A.AttributeDefList+attributeDefList = fmap attributeDef+ +caseScalarExprListScalarExprPair ::+ CaseScalarExprListScalarExprPair ->+ A.CaseScalarExprListScalarExprPair+caseScalarExprListScalarExprPair (a, b)+ = (scalarExprList a, scalarExpr b)+ +caseScalarExprListScalarExprPairList ::+ CaseScalarExprListScalarExprPairList ->+ A.CaseScalarExprListScalarExprPairList+caseScalarExprListScalarExprPairList+ = fmap caseScalarExprListScalarExprPair+ +constraintList :: ConstraintList -> A.ConstraintList+constraintList = fmap constraint+ +maybeBoolExpr :: MaybeBoolExpr -> A.MaybeBoolExpr+maybeBoolExpr = fmap scalarExpr+ +maybeScalarExpr :: MaybeScalarExpr -> A.MaybeScalarExpr+maybeScalarExpr = fmap scalarExpr+ +maybeSelectList :: MaybeSelectList -> A.MaybeSelectList+maybeSelectList = fmap selectList+ +onExpr :: OnExpr -> A.OnExpr+onExpr = fmap joinExpr+ +paramDefList :: ParamDefList -> A.ParamDefList+paramDefList = fmap paramDef+ +rowConstraintList :: RowConstraintList -> A.RowConstraintList+rowConstraintList = fmap rowConstraint+ +scalarExprDirectionPair ::+ ScalarExprDirectionPair -> A.ScalarExprDirectionPair+scalarExprDirectionPair (a, b) = (scalarExpr a, direction b)+ +scalarExprDirectionPairList ::+ ScalarExprDirectionPairList -> A.ScalarExprDirectionPairList+scalarExprDirectionPairList = fmap scalarExprDirectionPair+ +scalarExprList :: ScalarExprList -> A.ScalarExprList+scalarExprList = fmap scalarExpr+ +scalarExprListList :: ScalarExprListList -> A.ScalarExprListList+scalarExprListList = fmap scalarExprList+ +scalarExprListStatementListPair ::+ ScalarExprListStatementListPair ->+ A.ScalarExprListStatementListPair+scalarExprListStatementListPair (a, b)+ = (scalarExprList a, statementList b)+ +scalarExprListStatementListPairList ::+ ScalarExprListStatementListPairList ->+ A.ScalarExprListStatementListPairList+scalarExprListStatementListPairList+ = fmap scalarExprListStatementListPair+ +scalarExprStatementListPair ::+ ScalarExprStatementListPair -> A.ScalarExprStatementListPair+scalarExprStatementListPair (a, b)+ = (scalarExpr a, statementList b)+ +scalarExprStatementListPairList ::+ ScalarExprStatementListPairList ->+ A.ScalarExprStatementListPairList+scalarExprStatementListPairList = fmap scalarExprStatementListPair+ +selectItemList :: SelectItemList -> A.SelectItemList+selectItemList = fmap selectItem+ +statementList :: StatementList -> A.StatementList+statementList = fmap statement+ +stringTypeNameListPair ::+ StringTypeNameListPair -> A.StringTypeNameListPair+stringTypeNameListPair (a, b) = (a, typeNameList b)+ +stringTypeNameListPairList ::+ StringTypeNameListPairList -> A.StringTypeNameListPairList+stringTypeNameListPairList = fmap stringTypeNameListPair+ +tableRefList :: TableRefList -> A.TableRefList+tableRefList = fmap tableRef+ +typeAttributeDefList ::+ TypeAttributeDefList -> A.TypeAttributeDefList+typeAttributeDefList = fmap typeAttributeDef+ +typeNameList :: TypeNameList -> A.TypeNameList+typeNameList = fmap typeName+ +varDefList :: VarDefList -> A.VarDefList+varDefList = fmap varDef+ +withQueryList :: WithQueryList -> A.WithQueryList+withQueryList = fmap withQuery
+ src/Database/HsSqlPpp/AstInternals/AstInternal.hs view
@@ -0,0 +1,14400 @@+++-- UUAGC 0.9.38.1 (AstInternal.ag)+module Database.HsSqlPpp.AstInternals.AstInternal(+ -- {-# LANGUAGE DeriveDataTypeable,RankNTypes,ScopedTypeVariables #-}+ --from the ag files:+ --ast nodes+ Statement (..)+ ,QueryExpr (..)+ ,WithQueryList+ ,WithQuery(..)+ ,FnBody (..)+ --,SetClause (..)+ ,TableRef (..)+ ,TableAlias(..)+ ,JoinExpr (..)+ ,JoinType (..)+ ,SelectList (..)+ ,SelectItem (..)+ ,CopySource (..)+ ,AttributeDef (..)+ ,RowConstraint (..)+ ,AlterTableAction(..)+ ,Constraint (..)+ ,TypeAttributeDef (..)+ ,ParamDef (..)+ ,VarDef (..)+ ,RaiseType (..)+ ,CombineType (..)+ ,Volatility (..)+ ,Language (..)+ ,TypeName (..)+ ,DropType (..)+ ,Cascade (..)+ ,Direction (..)+ ,Distinct (..)+ ,Natural (..)+ ,IfExists (..)+ ,Replace(..)+ ,RestartIdentity (..)+ ,ScalarExpr (..)+ ,SQIdentifier(..)+ ,IntervalField(..)+ ,ExtractField(..)+ ,FrameClause(..)+ ,InList (..)+ ,LiftFlavour(..)+ ,TriggerWhen(..)+ ,TriggerEvent(..)+ ,TriggerFire(..)+ ,StatementList+ ,ScalarExprListStatementListPairList+ ,ScalarExprListStatementListPair+ ,ScalarExprList+ ,ParamDefList+ ,AttributeDefList+ ,ConstraintList+ ,TypeAttributeDefList+ ,TypeNameList+ ,StringTypeNameListPair+ ,StringTypeNameListPairList+ ,ScalarExprStatementListPairList+ --,SetClauseList+ ,CaseScalarExprListScalarExprPairList+ ,MaybeScalarExpr+ ,TableRefList+ ,ScalarExprListList+ ,SelectItemList+ ,OnExpr+ ,RowConstraintList+ ,VarDefList+ ,ScalarExprStatementListPair+ ,CaseScalarExprListScalarExprPair+ ,ScalarExprDirectionPair+ ,ScalarExprDirectionPairList+ ,MaybeBoolExpr+ ,MaybeSelectList+ ,SetValue(..)+ ,AlterTableActionList+ -- typechecking+ ,typeCheckStatements+ ,typeCheckParameterizedStatement+ ,typeCheckScalarExpr+ ,typeCheckQueryExpr+ ,fixUpIdentifiers+ ,fixUpIdentifiersQE+ ,fixUpIdentifiersSE+) where++import Data.Maybe+import Data.List+import Control.Applicative+import Data.Data+import Data.Char+import Control.Monad.State+import Control.Arrow++import Data.Generics.PlateData+import Debug.Trace+++import Database.HsSqlPpp.AstInternals.TypeType+import Database.HsSqlPpp.AstInternals.TypeChecking.TypeConversion+import Database.HsSqlPpp.AstInternals.AstAnnotation+import Database.HsSqlPpp.AstInternals.Catalog.CatalogInternal+import Database.HsSqlPpp.AstInternals.TypeChecking.LocalBindings+import Database.HsSqlPpp.Utils.Utils+import Database.HsSqlPpp.AstInternals.TypeChecking.ErrorUtils++++++-- used for schema qualified identifiers+-- should be used in more places in the ast+++data JoinType = Inner | LeftOuter| RightOuter | FullOuter | Cross+ deriving (Show,Eq,Typeable,Data)+++data CopySource = CopyFilename String+ | Stdin+ deriving (Show,Eq,Typeable,Data)+++data SetValue+ = SetStr Annotation String+ | SetId Annotation String+ | SetNum Annotation Double+ deriving (Show,Eq,Typeable,Data)+++data TriggerWhen = TriggerBefore | TriggerAfter+ deriving (Show,Eq,Typeable,Data)+data TriggerEvent = TInsert| TUpdate | TDelete+ deriving (Show,Eq,Typeable,Data)+data TriggerFire = EachRow | EachStatement+ deriving (Show,Eq,Typeable,Data)+++data RaiseType = RNotice | RException | RError+ deriving (Show,Eq,Typeable,Data)++data CombineType = Except | Union | Intersect | UnionAll+ deriving (Show,Eq,Typeable,Data)++data Volatility = Volatile | Stable | Immutable+ deriving (Show,Eq,Typeable,Data)++data Language = Sql | Plpgsql+ deriving (Show,Eq,Typeable,Data)+++data DropType = Table+ | Domain+ | View+ | Type+ deriving (Show,Eq,Typeable,Data)++data Cascade = Cascade | Restrict+ deriving (Show,Eq,Typeable,Data)++data Direction = Asc | Desc+ deriving (Show,Eq,Typeable,Data)++data Distinct = Distinct | Dupes+ deriving (Show,Eq,Typeable,Data)++data Natural = Natural | Unnatural+ deriving (Show,Eq,Typeable,Data)++data IfExists = Require | IfExists+ deriving (Show,Eq,Typeable,Data)++data Replace = Replace | NoReplace+ deriving (Show,Eq,Typeable,Data)++data RestartIdentity = RestartIdentity | ContinueIdentity+ deriving (Show,Eq,Typeable,Data)++++data LiftFlavour = LiftAny | LiftAll+ deriving (Show,Eq,Typeable,Data)++data IntervalField = IntervalYear+ | IntervalMonth+ | IntervalDay+ | IntervalHour+ | IntervalMinute+ | IntervalSecond+ | IntervalYearToMonth+ | IntervalDayToHour+ | IntervalDayToMinute+ | IntervalDayToSecond+ | IntervalHourToMinute+ | IntervalHourToSecond+ | IntervalMinuteToSecond+ deriving (Show,Eq,Typeable,Data)++data ExtractField = ExtractCentury+ | ExtractDay+ | ExtractDecade+ | ExtractDow+ | ExtractDoy+ | ExtractEpoch+ | ExtractHour+ | ExtractIsodow+ | ExtractIsoyear+ | ExtractMicroseconds+ | ExtractMillennium+ | ExtractMilliseconds+ | ExtractMinute+ | ExtractMonth+ | ExtractQuarter+ | ExtractSecond+ | ExtractTimezone+ | ExtractTimezoneHour+ | ExtractTimezoneMinute+ | ExtractWeek+ | ExtractYear+ deriving (Show,Eq,Typeable,Data)++++data FrameClause = FrameUnboundedPreceding+ | FrameUnboundedFull+ | FrameRowsUnboundedPreceding+ deriving (Show,Eq,Typeable,Data)+++-- | Takes an ast, checks against catalog passed, and adds+-- annotations, including types, type errors, and statement info.+-- Returns the updated catalog as well as the annotated ast.+typeCheckStatements :: Catalog -> [Statement] -> (Catalog,[Statement])+typeCheckStatements cat sts =+ let t = sem_Root (Root $ fixUpIdentifiers cat sts)+ ta = wrap_Root t Inh_Root {cat_Inh_Root = cat+ ,lib_Inh_Root = emptyBindings+ ,idenv_Inh_Root = emptyIDEnv}+ tl = annotatedTree_Syn_Root ta+ cat1 = producedCat_Syn_Root ta+ in case tl of+ Root r -> (cat1,r)++typeCheckQueryExpr :: Catalog -> QueryExpr -> QueryExpr+typeCheckQueryExpr cat qe =+ let (_,[QueryStatement _ qe']) = typeCheckStatements cat [QueryStatement emptyAnnotation qe]+ in qe'++-- | Unfinished version of type check which can type check an+-- individual statement with ? or positional arg placeholders in+-- it. Will error if the statement isn't select, update, insert or+-- delete. For use in type checking embedded parameterized+-- statements. Does all typechecking and annotation that the regular+-- typecheck does.+typeCheckParameterizedStatement :: Catalog -> Statement -> Either String Statement+typeCheckParameterizedStatement cat st =+ case st of+ QueryStatement _ _ -> tc+ Insert _ _ _ _ _ -> tc+ Update _ _ _ _ _ _ -> tc+ Delete _ _ _ _ _ -> tc+ _ -> Left "requires select, update, insert or delete statement"+ where+ tc = let t = sem_Root (Root $ fixUpIdentifiers cat [st])+ ta = wrap_Root t Inh_Root {cat_Inh_Root = cat+ ,lib_Inh_Root = emptyBindings+ ,idenv_Inh_Root = emptyIDEnv}+ tl = annotatedTree_Syn_Root ta+ --cat1 = producedCat_Syn_Root ta+ in case tl of+ Root [st1] -> Right st1+ _ -> error "impossible happened in typeCheckPS!"+++-- | Testing utility, mainly used to check an expression for type errors+-- or to get its type.+typeCheckScalarExpr :: Catalog -> ScalarExpr -> ScalarExpr+typeCheckScalarExpr cat ex =+ let t = sem_ScalarExprRoot (ScalarExprRoot $ fixUpIdentifiersSE cat ex)+ rt = (annotatedTree_Syn_ScalarExprRoot+ (wrap_ScalarExprRoot t Inh_ScalarExprRoot {cat_Inh_ScalarExprRoot = cat+ ,lib_Inh_ScalarExprRoot = emptyBindings+ ,idenv_Inh_ScalarExprRoot = emptyIDEnv}))+ in case rt of+ ScalarExprRoot e -> e+++++data IDEnv = IDEnv [(String, [String])]+ deriving Show+emptyIDEnv :: IDEnv+emptyIDEnv = IDEnv []++qualifyID :: IDEnv -> String -> Maybe (String,String)+qualifyID (IDEnv env) i =+ q env i+ where+ q [] _ = Nothing+ q ((t,cs):es) i' =+ if i' `elem` cs+ then Just (t,i')+ else q es i'++makeIDEnv :: String -- range qualifier+ -> [String] -- attribute names+ -> IDEnv+makeIDEnv t c = IDEnv [(t,c)]++makeIDEnvP :: [(String,[String])] -> IDEnv+makeIDEnvP x = IDEnv x++unimplementedIDEnv :: IDEnv+unimplementedIDEnv = IDEnv []++joinIDEnvs :: IDEnv -> IDEnv -> IDEnv+joinIDEnvs (IDEnv a) (IDEnv b) = IDEnv $ a ++ b++expandStar :: IDEnv -> Maybe String --qualifier+ -> [(String,String)]+expandStar (IDEnv es) Nothing =+ flip concatMap es $ \(t,cs) -> map (t,) cs+expandStar (IDEnv es) (Just t) =+ maybe [(t,"*")] (map (t,)) $ lookup t es++++++makeSelExps :: Annotation -> Annotation -> Annotation -> [(String,String)] -> [SelectItem]+makeSelExps sea a0 a1 is =+ flip map is $ \(q,c) -> addSIAlias $ SelExp sea $ QIdentifier a0 (Identifier a1 q) c++addSIAlias :: SelectItem -> SelectItem+addSIAlias s@(SelectItem _ _ _) = s+addSIAlias (SelExp ann ex) = SelectItem ann ex $ getColName ex+ where+ getColName (Identifier _ i) = i+ getColName (QIdentifier _ _ i) = i+ getColName (FunCall _ f _) | not (isOperatorName f) = f+ getColName (Cast _ _ (SimpleTypeName _ tn)) = tn+ getColName (WindowFn _ (FunCall _ f _) _ _ _ _) = f+ getColName _ = "?column?"+++++++++-- | transform the tree by converting * to explicit lists of columns and adding qualifiers to all column references+fixUpIdentifiers :: Catalog -> [Statement] -> [Statement]+fixUpIdentifiers cat sts =+ let t = sem_Root (Root sts)+ ta = wrap_Root t Inh_Root {cat_Inh_Root = cat+ ,lib_Inh_Root = emptyBindings+ ,idenv_Inh_Root = emptyIDEnv}+ tl = fixedUpIdentifiersTree_Syn_Root ta+ in case tl of+ Root r -> countHack r++fixUpIdentifiersSE :: Catalog -> ScalarExpr -> ScalarExpr+fixUpIdentifiersSE cat sts =+ let t = sem_ScalarExprRoot (ScalarExprRoot sts)+ ta = wrap_ScalarExprRoot t Inh_ScalarExprRoot {cat_Inh_ScalarExprRoot = cat+ ,lib_Inh_ScalarExprRoot = emptyBindings+ ,idenv_Inh_ScalarExprRoot = emptyIDEnv}+ tl = fixedUpIdentifiersTree_Syn_ScalarExprRoot ta+ in case tl of+ ScalarExprRoot r -> countHack r++fixUpIdentifiersQE :: Catalog -> QueryExpr -> QueryExpr+fixUpIdentifiersQE cat qe =+ let [QueryStatement _ qe'] = fixUpIdentifiers cat [QueryStatement emptyAnnotation qe]+ in countHack qe'++-- small hack to convert count(*) into count(True). Should be fixed when+-- a more general approach to aggregates is written++countHack :: Data a => a -> a+countHack = transformBi $ \x -> case x of+ FunCall a "count" [Identifier ia "*"] ->+ FunCall a "count" [BooleanLit ia True]+ x1 -> x1++++doAlias :: TableAlias -> [(String,[String])] -> ([(String,[String])],TableAlias)+doAlias (NoAlias a) [] = ([],NoAlias a)+doAlias (NoAlias a) cs@((t,_):ts) = if all (==t) $ map fst ts+ then (cs,FullAlias a t $ concatMap snd cs)+ else (cs,NoAlias a)+doAlias (TableAlias a t) cs = let cs' = concatMap snd cs+ in ([(t, cs')], FullAlias a t cs')+doAlias f@(FullAlias _ t cs) _ = ([(t,cs)], f)++++addTypeErrors :: Data a => [TypeError] -> a -> a+addTypeErrors es el = updateAnnotation u el+ where+ u a = a {errs = errs a ++ es}++setTypeAddErrors :: Data a => Et -> a -> a+setTypeAddErrors et el = updateAnnotation (setTypeAddErrorsA et) el++setTypeAddErrorsA :: Et -> Annotation -> Annotation+setTypeAddErrorsA et a =+ let a1 = a {errs = errs a ++ tes et}+ in case atype a1 of+ Just _ -> a1 {errs = errs a+ ++ [InternalError $ "tried to set type a second time - " ++ show (etmt et)]}+ Nothing -> a1 {atype = etmt et}++allJust :: [Maybe a] -> Maybe [a]+allJust ts = sequence ts++-- bit dogdy, needs some thought+-- this is just to convert the new approach of using "." as an operator+-- to construct names, with the old approach which stuck the whole lot+-- in a string+getName :: ScalarExpr -> String+getName (Identifier _ i) = i+getName (FunCall _ "." [Identifier _ _,Identifier _ i]) = i+getName (FunCall _ "." [_,a]) = getName a+getName x = error $ "internal error getName called on: " ++ show x++getTName :: SQIdentifier -> String+getTName (SQIdentifier _ x@(_:_)) = last x+getTName x = error $ "internal error getName called on: " ++ show x+++unwrapLookup :: (String,[String],Type) -> Type+unwrapLookup (_,_,t) = t++allAtts :: ([(String,Type)],[(String,Type)]) -> [(String,Type)]+allAtts (a,b) = a ++ b++++typeCheckValuesExpr :: Catalog -> [[Maybe Type]] -> Either [TypeError] Type+typeCheckValuesExpr cat rowsTs = do+ rts <- lmt $ allJust $ map allJust rowsTs+ let colNames = zipWith (++)+ (repeat "column")+ (map show [1..length $ head rowsTs])+ unionRelTypes cat rts colNames+++typeCheckCombineSelect :: Catalog -> Type -> Type -> Either [TypeError] Type+typeCheckCombineSelect cat v1 v2 = do+ u1 <- unwrapSetOfComposite v1+ let colNames = map fst u1+ u2 <- unwrapSetOfComposite v2+ let colTypes1 = map snd u1+ let colTypes2 = map snd u2+ unionRelTypes cat [colTypes1,colTypes2] colNames++unionRelTypes :: Catalog -> [[Type]] -> [String] -> Either [TypeError] Type+unionRelTypes cat rowsTs colNames =+ let lengths = map length rowsTs+ in case () of+ _ | null rowsTs ->+ Left [NoRowsGivenForValues]+ | not (all (==head lengths) lengths) ->+ Left [ValuesListsMustBeSameLength]+ | otherwise ->+ --i don't think this propagates all the errors, just the first set+ mapM (resolveResultSetType cat) (transpose rowsTs) >>=+ (return . SetOfType . CompositeType . zip colNames)+++++++{-+convert a function call into a [String,[(string,type)]] list for use+in a tableref context+first consideration is the alias: if there is an alias in the select,+e.g. select * from generate_series(1,2) x; (alias is x)+we use that, otherwise we use the name of the function+second consideration is the attributes coming out, roughly speaking+we have to convert an arbitrary type to a relation type+if we have a relation valued function, we don't need to do anything+if we have a setof non composite, we lift the single type to an+attribute, using the function name for the attribute name+if we have a non setof, we lift the single type to an attribute and+then relation, using the function name for the attribute name+need to check to see what should happen with arrayof++-}+funIdens :: Catalog -> String -> ScalarExpr -> Maybe Type -> Either [TypeError] (String,[(String,Type)])+funIdens cat alias fnVal ft = do+ errorWhen (case fnVal of+ FunCall _ _ _ -> False+ _ -> True)+ [ContextError "FunCall"]+ let (FunCall _ fnName _) = fnVal+ cn = if alias /= ""+ then alias+ else fnName+ attrs <- do+ fnt <- lmt ft+ case fnt of+ SetOfType (NamedCompositeType t) -> catCompositePublicAttrs cat [] t+ SetOfType x -> return [(cn,x)]+ y -> return [(cn,y)]+ return (cn, attrs)++getAlias :: String -> TableAlias -> String+getAlias def alias =+ case alias of+ NoAlias _ -> def+ TableAlias _ t -> t+ FullAlias _ t _ -> t++++{-data SiType = SiType (String,Maybe Type)+ | SiStarType [(String,Maybe Type)]-}+++--unwrapSetofs :: [(String,Type)] -> [(String,Type)]+--unwrapSetofs = map (\(n,t) -> (n, unwrapSetof t))++unwrapSetof :: Type -> Type+unwrapSetof (SetOfType u) = u+unwrapSetof v = v++++defaultSystemColumns :: [(String,Type)]+defaultSystemColumns = [("tableoid", ScalarType "oid")+ ,("cmax", ScalarType "cid")+ ,("xmax", ScalarType "xid")+ ,("cmin", ScalarType "cid")+ ,("xmin", ScalarType "xid")+ ,("ctid", ScalarType "tid")]+++data ParamName = NamedParam Int String+ | UnnamedParam Int+++getPlaceholderTypes :: Data a => a -> [Maybe Type]+getPlaceholderTypes ex =+ [infType (getAnnotation x) | x <- universeBi ex+ , isPlaceholder x]+ where+ isPlaceholder e = case e of+ PositionalArg _ _ -> True+ Placeholder _ -> True+ _ -> False++-- AlterTableAction --------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + alternatives:+ alternative AddConstraint:+ child ann : {Annotation}+ child con : Constraint + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative AlterColumnDefault:+ child ann : {Annotation}+ child nm : {String}+ child def : ScalarExpr + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+data AlterTableAction = AddConstraint (Annotation) (Constraint ) + | AlterColumnDefault (Annotation) (String) (ScalarExpr ) + deriving ( Data,Eq,Show,Typeable)+-- cata+sem_AlterTableAction :: AlterTableAction ->+ T_AlterTableAction +sem_AlterTableAction (AddConstraint _ann _con ) =+ (sem_AlterTableAction_AddConstraint _ann (sem_Constraint _con ) )+sem_AlterTableAction (AlterColumnDefault _ann _nm _def ) =+ (sem_AlterTableAction_AlterColumnDefault _ann _nm (sem_ScalarExpr _def ) )+-- semantic domain+type T_AlterTableAction = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( AlterTableAction ,AlterTableAction ,AlterTableAction )+data Inh_AlterTableAction = Inh_AlterTableAction {cat_Inh_AlterTableAction :: Catalog,idenv_Inh_AlterTableAction :: IDEnv,lib_Inh_AlterTableAction :: LocalBindings}+data Syn_AlterTableAction = Syn_AlterTableAction {annotatedTree_Syn_AlterTableAction :: AlterTableAction ,fixedUpIdentifiersTree_Syn_AlterTableAction :: AlterTableAction ,originalTree_Syn_AlterTableAction :: AlterTableAction }+wrap_AlterTableAction :: T_AlterTableAction ->+ Inh_AlterTableAction ->+ Syn_AlterTableAction +wrap_AlterTableAction sem (Inh_AlterTableAction _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_AlterTableAction _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree ))+sem_AlterTableAction_AddConstraint :: Annotation ->+ T_Constraint ->+ T_AlterTableAction +sem_AlterTableAction_AddConstraint ann_ con_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: AlterTableAction + _lhsOfixedUpIdentifiersTree :: AlterTableAction + _lhsOoriginalTree :: AlterTableAction + _conOcat :: Catalog+ _conOidenv :: IDEnv+ _conOlib :: LocalBindings+ _conIannotatedTree :: Constraint + _conIfixedUpIdentifiersTree :: Constraint + _conIoriginalTree :: Constraint + -- self rule+ _annotatedTree =+ AddConstraint ann_ _conIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ AddConstraint ann_ _conIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ AddConstraint ann_ _conIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _conOcat =+ _lhsIcat+ -- copy rule (down)+ _conOidenv =+ _lhsIidenv+ -- copy rule (down)+ _conOlib =+ _lhsIlib+ ( _conIannotatedTree,_conIfixedUpIdentifiersTree,_conIoriginalTree) =+ con_ _conOcat _conOidenv _conOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_AlterTableAction_AlterColumnDefault :: Annotation ->+ String ->+ T_ScalarExpr ->+ T_AlterTableAction +sem_AlterTableAction_AlterColumnDefault ann_ nm_ def_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _defOexpectedType :: (Maybe Type)+ _lhsOannotatedTree :: AlterTableAction + _lhsOfixedUpIdentifiersTree :: AlterTableAction + _lhsOoriginalTree :: AlterTableAction + _defOcat :: Catalog+ _defOidenv :: IDEnv+ _defOlib :: LocalBindings+ _defIannotatedTree :: ScalarExpr + _defIfixedUpIdentifiersTree :: ScalarExpr + _defIoriginalTree :: ScalarExpr + _defIuType :: (Maybe Type)+ -- "./TypeChecking/ParameterizedStatements.ag"(line 72, column 26)+ _defOexpectedType =+ Nothing+ -- self rule+ _annotatedTree =+ AlterColumnDefault ann_ nm_ _defIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ AlterColumnDefault ann_ nm_ _defIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ AlterColumnDefault ann_ nm_ _defIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _defOcat =+ _lhsIcat+ -- copy rule (down)+ _defOidenv =+ _lhsIidenv+ -- copy rule (down)+ _defOlib =+ _lhsIlib+ ( _defIannotatedTree,_defIfixedUpIdentifiersTree,_defIoriginalTree,_defIuType) =+ def_ _defOcat _defOexpectedType _defOidenv _defOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+-- AlterTableActionList ----------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + alternatives:+ alternative Cons:+ child hd : AlterTableAction + child tl : AlterTableActionList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Nil:+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type AlterTableActionList = [AlterTableAction ]+-- cata+sem_AlterTableActionList :: AlterTableActionList ->+ T_AlterTableActionList +sem_AlterTableActionList list =+ (Prelude.foldr sem_AlterTableActionList_Cons sem_AlterTableActionList_Nil (Prelude.map sem_AlterTableAction list) )+-- semantic domain+type T_AlterTableActionList = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( AlterTableActionList ,AlterTableActionList ,AlterTableActionList )+data Inh_AlterTableActionList = Inh_AlterTableActionList {cat_Inh_AlterTableActionList :: Catalog,idenv_Inh_AlterTableActionList :: IDEnv,lib_Inh_AlterTableActionList :: LocalBindings}+data Syn_AlterTableActionList = Syn_AlterTableActionList {annotatedTree_Syn_AlterTableActionList :: AlterTableActionList ,fixedUpIdentifiersTree_Syn_AlterTableActionList :: AlterTableActionList ,originalTree_Syn_AlterTableActionList :: AlterTableActionList }+wrap_AlterTableActionList :: T_AlterTableActionList ->+ Inh_AlterTableActionList ->+ Syn_AlterTableActionList +wrap_AlterTableActionList sem (Inh_AlterTableActionList _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_AlterTableActionList _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree ))+sem_AlterTableActionList_Cons :: T_AlterTableAction ->+ T_AlterTableActionList ->+ T_AlterTableActionList +sem_AlterTableActionList_Cons hd_ tl_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: AlterTableActionList + _lhsOfixedUpIdentifiersTree :: AlterTableActionList + _lhsOoriginalTree :: AlterTableActionList + _hdOcat :: Catalog+ _hdOidenv :: IDEnv+ _hdOlib :: LocalBindings+ _tlOcat :: Catalog+ _tlOidenv :: IDEnv+ _tlOlib :: LocalBindings+ _hdIannotatedTree :: AlterTableAction + _hdIfixedUpIdentifiersTree :: AlterTableAction + _hdIoriginalTree :: AlterTableAction + _tlIannotatedTree :: AlterTableActionList + _tlIfixedUpIdentifiersTree :: AlterTableActionList + _tlIoriginalTree :: AlterTableActionList + -- self rule+ _annotatedTree =+ (:) _hdIannotatedTree _tlIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ (:) _hdIfixedUpIdentifiersTree _tlIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ (:) _hdIoriginalTree _tlIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _hdOcat =+ _lhsIcat+ -- copy rule (down)+ _hdOidenv =+ _lhsIidenv+ -- copy rule (down)+ _hdOlib =+ _lhsIlib+ -- copy rule (down)+ _tlOcat =+ _lhsIcat+ -- copy rule (down)+ _tlOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tlOlib =+ _lhsIlib+ ( _hdIannotatedTree,_hdIfixedUpIdentifiersTree,_hdIoriginalTree) =+ hd_ _hdOcat _hdOidenv _hdOlib + ( _tlIannotatedTree,_tlIfixedUpIdentifiersTree,_tlIoriginalTree) =+ tl_ _tlOcat _tlOidenv _tlOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_AlterTableActionList_Nil :: T_AlterTableActionList +sem_AlterTableActionList_Nil =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: AlterTableActionList + _lhsOfixedUpIdentifiersTree :: AlterTableActionList + _lhsOoriginalTree :: AlterTableActionList + -- self rule+ _annotatedTree =+ []+ -- self rule+ _fixedUpIdentifiersTree =+ []+ -- self rule+ _originalTree =+ []+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+-- AttributeDef ------------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + attrName : String+ fixedUpIdentifiersTree : SELF + namedType : Maybe Type+ originalTree : SELF + alternatives:+ alternative AttributeDef:+ child ann : {Annotation}+ child name : {String}+ child typ : TypeName + child def : MaybeScalarExpr + child cons : RowConstraintList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+data AttributeDef = AttributeDef (Annotation) (String) (TypeName ) (MaybeScalarExpr ) (RowConstraintList ) + deriving ( Data,Eq,Show,Typeable)+-- cata+sem_AttributeDef :: AttributeDef ->+ T_AttributeDef +sem_AttributeDef (AttributeDef _ann _name _typ _def _cons ) =+ (sem_AttributeDef_AttributeDef _ann _name (sem_TypeName _typ ) (sem_MaybeScalarExpr _def ) (sem_RowConstraintList _cons ) )+-- semantic domain+type T_AttributeDef = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( AttributeDef ,String,AttributeDef ,(Maybe Type),AttributeDef )+data Inh_AttributeDef = Inh_AttributeDef {cat_Inh_AttributeDef :: Catalog,idenv_Inh_AttributeDef :: IDEnv,lib_Inh_AttributeDef :: LocalBindings}+data Syn_AttributeDef = Syn_AttributeDef {annotatedTree_Syn_AttributeDef :: AttributeDef ,attrName_Syn_AttributeDef :: String,fixedUpIdentifiersTree_Syn_AttributeDef :: AttributeDef ,namedType_Syn_AttributeDef :: (Maybe Type),originalTree_Syn_AttributeDef :: AttributeDef }+wrap_AttributeDef :: T_AttributeDef ->+ Inh_AttributeDef ->+ Syn_AttributeDef +wrap_AttributeDef sem (Inh_AttributeDef _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOattrName,_lhsOfixedUpIdentifiersTree,_lhsOnamedType,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_AttributeDef _lhsOannotatedTree _lhsOattrName _lhsOfixedUpIdentifiersTree _lhsOnamedType _lhsOoriginalTree ))+sem_AttributeDef_AttributeDef :: Annotation ->+ String ->+ T_TypeName ->+ T_MaybeScalarExpr ->+ T_RowConstraintList ->+ T_AttributeDef +sem_AttributeDef_AttributeDef ann_ name_ typ_ def_ cons_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOattrName :: String+ _lhsOnamedType :: (Maybe Type)+ _consOlib :: LocalBindings+ _lhsOannotatedTree :: AttributeDef + _lhsOfixedUpIdentifiersTree :: AttributeDef + _lhsOoriginalTree :: AttributeDef + _typOcat :: Catalog+ _typOidenv :: IDEnv+ _typOlib :: LocalBindings+ _defOcat :: Catalog+ _defOidenv :: IDEnv+ _defOlib :: LocalBindings+ _consOcat :: Catalog+ _consOidenv :: IDEnv+ _typIannotatedTree :: TypeName + _typIfixedUpIdentifiersTree :: TypeName + _typInamedType :: (Maybe Type)+ _typIoriginalTree :: TypeName + _defIannotatedTree :: MaybeScalarExpr + _defIfixedUpIdentifiersTree :: MaybeScalarExpr + _defIoriginalTree :: MaybeScalarExpr + _defIuType :: (Maybe Type)+ _consIannotatedTree :: RowConstraintList + _consIfixedUpIdentifiersTree :: RowConstraintList + _consIoriginalTree :: RowConstraintList + -- "./TypeChecking/Ddl/CreateTable.ag"(line 83, column 9)+ _lhsOattrName =+ map toLower name_+ -- "./TypeChecking/Ddl/CreateTable.ag"(line 84, column 9)+ _lhsOnamedType =+ _typInamedType+ -- "./TypeChecking/Ddl/CreateTable.ag"(line 98, column 9)+ _consOlib =+ either (const _lhsIlib) id $ do+ t <- lmt _typInamedType+ lbUpdate _lhsIcat+ (LBIds "attribute def" Nothing+ [(name_, t)]) _lhsIlib+ -- self rule+ _annotatedTree =+ AttributeDef ann_ name_ _typIannotatedTree _defIannotatedTree _consIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ AttributeDef ann_ name_ _typIfixedUpIdentifiersTree _defIfixedUpIdentifiersTree _consIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ AttributeDef ann_ name_ _typIoriginalTree _defIoriginalTree _consIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _typOcat =+ _lhsIcat+ -- copy rule (down)+ _typOidenv =+ _lhsIidenv+ -- copy rule (down)+ _typOlib =+ _lhsIlib+ -- copy rule (down)+ _defOcat =+ _lhsIcat+ -- copy rule (down)+ _defOidenv =+ _lhsIidenv+ -- copy rule (down)+ _defOlib =+ _lhsIlib+ -- copy rule (down)+ _consOcat =+ _lhsIcat+ -- copy rule (down)+ _consOidenv =+ _lhsIidenv+ ( _typIannotatedTree,_typIfixedUpIdentifiersTree,_typInamedType,_typIoriginalTree) =+ typ_ _typOcat _typOidenv _typOlib + ( _defIannotatedTree,_defIfixedUpIdentifiersTree,_defIoriginalTree,_defIuType) =+ def_ _defOcat _defOidenv _defOlib + ( _consIannotatedTree,_consIfixedUpIdentifiersTree,_consIoriginalTree) =+ cons_ _consOcat _consOidenv _consOlib + in ( _lhsOannotatedTree,_lhsOattrName,_lhsOfixedUpIdentifiersTree,_lhsOnamedType,_lhsOoriginalTree)))+-- AttributeDefList --------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + attrs : [(String, Maybe Type)]+ fixedUpIdentifiersTree : SELF + originalTree : SELF + alternatives:+ alternative Cons:+ child hd : AttributeDef + child tl : AttributeDefList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Nil:+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type AttributeDefList = [AttributeDef ]+-- cata+sem_AttributeDefList :: AttributeDefList ->+ T_AttributeDefList +sem_AttributeDefList list =+ (Prelude.foldr sem_AttributeDefList_Cons sem_AttributeDefList_Nil (Prelude.map sem_AttributeDef list) )+-- semantic domain+type T_AttributeDefList = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( AttributeDefList ,([(String, Maybe Type)]),AttributeDefList ,AttributeDefList )+data Inh_AttributeDefList = Inh_AttributeDefList {cat_Inh_AttributeDefList :: Catalog,idenv_Inh_AttributeDefList :: IDEnv,lib_Inh_AttributeDefList :: LocalBindings}+data Syn_AttributeDefList = Syn_AttributeDefList {annotatedTree_Syn_AttributeDefList :: AttributeDefList ,attrs_Syn_AttributeDefList :: ([(String, Maybe Type)]),fixedUpIdentifiersTree_Syn_AttributeDefList :: AttributeDefList ,originalTree_Syn_AttributeDefList :: AttributeDefList }+wrap_AttributeDefList :: T_AttributeDefList ->+ Inh_AttributeDefList ->+ Syn_AttributeDefList +wrap_AttributeDefList sem (Inh_AttributeDefList _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOattrs,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_AttributeDefList _lhsOannotatedTree _lhsOattrs _lhsOfixedUpIdentifiersTree _lhsOoriginalTree ))+sem_AttributeDefList_Cons :: T_AttributeDef ->+ T_AttributeDefList ->+ T_AttributeDefList +sem_AttributeDefList_Cons hd_ tl_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOattrs :: ([(String, Maybe Type)])+ _lhsOannotatedTree :: AttributeDefList + _lhsOfixedUpIdentifiersTree :: AttributeDefList + _lhsOoriginalTree :: AttributeDefList + _hdOcat :: Catalog+ _hdOidenv :: IDEnv+ _hdOlib :: LocalBindings+ _tlOcat :: Catalog+ _tlOidenv :: IDEnv+ _tlOlib :: LocalBindings+ _hdIannotatedTree :: AttributeDef + _hdIattrName :: String+ _hdIfixedUpIdentifiersTree :: AttributeDef + _hdInamedType :: (Maybe Type)+ _hdIoriginalTree :: AttributeDef + _tlIannotatedTree :: AttributeDefList + _tlIattrs :: ([(String, Maybe Type)])+ _tlIfixedUpIdentifiersTree :: AttributeDefList + _tlIoriginalTree :: AttributeDefList + -- "./TypeChecking/Ddl/CreateTable.ag"(line 88, column 12)+ _lhsOattrs =+ (_hdIattrName, _hdInamedType) : _tlIattrs+ -- self rule+ _annotatedTree =+ (:) _hdIannotatedTree _tlIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ (:) _hdIfixedUpIdentifiersTree _tlIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ (:) _hdIoriginalTree _tlIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _hdOcat =+ _lhsIcat+ -- copy rule (down)+ _hdOidenv =+ _lhsIidenv+ -- copy rule (down)+ _hdOlib =+ _lhsIlib+ -- copy rule (down)+ _tlOcat =+ _lhsIcat+ -- copy rule (down)+ _tlOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tlOlib =+ _lhsIlib+ ( _hdIannotatedTree,_hdIattrName,_hdIfixedUpIdentifiersTree,_hdInamedType,_hdIoriginalTree) =+ hd_ _hdOcat _hdOidenv _hdOlib + ( _tlIannotatedTree,_tlIattrs,_tlIfixedUpIdentifiersTree,_tlIoriginalTree) =+ tl_ _tlOcat _tlOidenv _tlOlib + in ( _lhsOannotatedTree,_lhsOattrs,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_AttributeDefList_Nil :: T_AttributeDefList +sem_AttributeDefList_Nil =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOattrs :: ([(String, Maybe Type)])+ _lhsOannotatedTree :: AttributeDefList + _lhsOfixedUpIdentifiersTree :: AttributeDefList + _lhsOoriginalTree :: AttributeDefList + -- "./TypeChecking/Ddl/CreateTable.ag"(line 89, column 11)+ _lhsOattrs =+ []+ -- self rule+ _annotatedTree =+ []+ -- self rule+ _fixedUpIdentifiersTree =+ []+ -- self rule+ _originalTree =+ []+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOattrs,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+-- CaseScalarExprListScalarExprPair ----------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + thenType : Maybe Type+ whenTypes : [Maybe Type]+ alternatives:+ alternative Tuple:+ child x1 : ScalarExprList + child x2 : ScalarExpr + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type CaseScalarExprListScalarExprPair = ( ScalarExprList ,ScalarExpr )+-- cata+sem_CaseScalarExprListScalarExprPair :: CaseScalarExprListScalarExprPair ->+ T_CaseScalarExprListScalarExprPair +sem_CaseScalarExprListScalarExprPair ( x1,x2) =+ (sem_CaseScalarExprListScalarExprPair_Tuple (sem_ScalarExprList x1 ) (sem_ScalarExpr x2 ) )+-- semantic domain+type T_CaseScalarExprListScalarExprPair = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( CaseScalarExprListScalarExprPair ,CaseScalarExprListScalarExprPair ,CaseScalarExprListScalarExprPair ,(Maybe Type),([Maybe Type]))+data Inh_CaseScalarExprListScalarExprPair = Inh_CaseScalarExprListScalarExprPair {cat_Inh_CaseScalarExprListScalarExprPair :: Catalog,idenv_Inh_CaseScalarExprListScalarExprPair :: IDEnv,lib_Inh_CaseScalarExprListScalarExprPair :: LocalBindings}+data Syn_CaseScalarExprListScalarExprPair = Syn_CaseScalarExprListScalarExprPair {annotatedTree_Syn_CaseScalarExprListScalarExprPair :: CaseScalarExprListScalarExprPair ,fixedUpIdentifiersTree_Syn_CaseScalarExprListScalarExprPair :: CaseScalarExprListScalarExprPair ,originalTree_Syn_CaseScalarExprListScalarExprPair :: CaseScalarExprListScalarExprPair ,thenType_Syn_CaseScalarExprListScalarExprPair :: (Maybe Type),whenTypes_Syn_CaseScalarExprListScalarExprPair :: ([Maybe Type])}+wrap_CaseScalarExprListScalarExprPair :: T_CaseScalarExprListScalarExprPair ->+ Inh_CaseScalarExprListScalarExprPair ->+ Syn_CaseScalarExprListScalarExprPair +wrap_CaseScalarExprListScalarExprPair sem (Inh_CaseScalarExprListScalarExprPair _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOthenType,_lhsOwhenTypes) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_CaseScalarExprListScalarExprPair _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree _lhsOthenType _lhsOwhenTypes ))+sem_CaseScalarExprListScalarExprPair_Tuple :: T_ScalarExprList ->+ T_ScalarExpr ->+ T_CaseScalarExprListScalarExprPair +sem_CaseScalarExprListScalarExprPair_Tuple x1_ x2_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOwhenTypes :: ([Maybe Type])+ _lhsOthenType :: (Maybe Type)+ _x1OexpectedTypes :: ([Maybe Type])+ _x2OexpectedType :: (Maybe Type)+ _lhsOannotatedTree :: CaseScalarExprListScalarExprPair + _lhsOfixedUpIdentifiersTree :: CaseScalarExprListScalarExprPair + _lhsOoriginalTree :: CaseScalarExprListScalarExprPair + _x1Ocat :: Catalog+ _x1Oidenv :: IDEnv+ _x1Olib :: LocalBindings+ _x2Ocat :: Catalog+ _x2Oidenv :: IDEnv+ _x2Olib :: LocalBindings+ _x1IannotatedTree :: ScalarExprList + _x1IfixedUpIdentifiersTree :: ScalarExprList + _x1IoriginalTree :: ScalarExprList + _x1IuType :: ([Maybe Type])+ _x2IannotatedTree :: ScalarExpr + _x2IfixedUpIdentifiersTree :: ScalarExpr + _x2IoriginalTree :: ScalarExpr + _x2IuType :: (Maybe Type)+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 270, column 13)+ _lhsOwhenTypes =+ _x1IuType+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 271, column 13)+ _lhsOthenType =+ _x2IuType+ -- "./TypeChecking/ParameterizedStatements.ag"(line 76, column 13)+ _x1OexpectedTypes =+ []+ -- "./TypeChecking/ParameterizedStatements.ag"(line 77, column 13)+ _x2OexpectedType =+ Nothing+ -- self rule+ _annotatedTree =+ (_x1IannotatedTree,_x2IannotatedTree)+ -- self rule+ _fixedUpIdentifiersTree =+ (_x1IfixedUpIdentifiersTree,_x2IfixedUpIdentifiersTree)+ -- self rule+ _originalTree =+ (_x1IoriginalTree,_x2IoriginalTree)+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _x1Ocat =+ _lhsIcat+ -- copy rule (down)+ _x1Oidenv =+ _lhsIidenv+ -- copy rule (down)+ _x1Olib =+ _lhsIlib+ -- copy rule (down)+ _x2Ocat =+ _lhsIcat+ -- copy rule (down)+ _x2Oidenv =+ _lhsIidenv+ -- copy rule (down)+ _x2Olib =+ _lhsIlib+ ( _x1IannotatedTree,_x1IfixedUpIdentifiersTree,_x1IoriginalTree,_x1IuType) =+ x1_ _x1Ocat _x1OexpectedTypes _x1Oidenv _x1Olib + ( _x2IannotatedTree,_x2IfixedUpIdentifiersTree,_x2IoriginalTree,_x2IuType) =+ x2_ _x2Ocat _x2OexpectedType _x2Oidenv _x2Olib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOthenType,_lhsOwhenTypes)))+-- CaseScalarExprListScalarExprPairList ------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + thenTypes : [Maybe Type]+ whenTypes : [[Maybe Type]]+ alternatives:+ alternative Cons:+ child hd : CaseScalarExprListScalarExprPair + child tl : CaseScalarExprListScalarExprPairList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Nil:+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type CaseScalarExprListScalarExprPairList = [CaseScalarExprListScalarExprPair ]+-- cata+sem_CaseScalarExprListScalarExprPairList :: CaseScalarExprListScalarExprPairList ->+ T_CaseScalarExprListScalarExprPairList +sem_CaseScalarExprListScalarExprPairList list =+ (Prelude.foldr sem_CaseScalarExprListScalarExprPairList_Cons sem_CaseScalarExprListScalarExprPairList_Nil (Prelude.map sem_CaseScalarExprListScalarExprPair list) )+-- semantic domain+type T_CaseScalarExprListScalarExprPairList = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( CaseScalarExprListScalarExprPairList ,CaseScalarExprListScalarExprPairList ,CaseScalarExprListScalarExprPairList ,([Maybe Type]),([[Maybe Type]]))+data Inh_CaseScalarExprListScalarExprPairList = Inh_CaseScalarExprListScalarExprPairList {cat_Inh_CaseScalarExprListScalarExprPairList :: Catalog,idenv_Inh_CaseScalarExprListScalarExprPairList :: IDEnv,lib_Inh_CaseScalarExprListScalarExprPairList :: LocalBindings}+data Syn_CaseScalarExprListScalarExprPairList = Syn_CaseScalarExprListScalarExprPairList {annotatedTree_Syn_CaseScalarExprListScalarExprPairList :: CaseScalarExprListScalarExprPairList ,fixedUpIdentifiersTree_Syn_CaseScalarExprListScalarExprPairList :: CaseScalarExprListScalarExprPairList ,originalTree_Syn_CaseScalarExprListScalarExprPairList :: CaseScalarExprListScalarExprPairList ,thenTypes_Syn_CaseScalarExprListScalarExprPairList :: ([Maybe Type]),whenTypes_Syn_CaseScalarExprListScalarExprPairList :: ([[Maybe Type]])}+wrap_CaseScalarExprListScalarExprPairList :: T_CaseScalarExprListScalarExprPairList ->+ Inh_CaseScalarExprListScalarExprPairList ->+ Syn_CaseScalarExprListScalarExprPairList +wrap_CaseScalarExprListScalarExprPairList sem (Inh_CaseScalarExprListScalarExprPairList _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOthenTypes,_lhsOwhenTypes) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_CaseScalarExprListScalarExprPairList _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree _lhsOthenTypes _lhsOwhenTypes ))+sem_CaseScalarExprListScalarExprPairList_Cons :: T_CaseScalarExprListScalarExprPair ->+ T_CaseScalarExprListScalarExprPairList ->+ T_CaseScalarExprListScalarExprPairList +sem_CaseScalarExprListScalarExprPairList_Cons hd_ tl_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOwhenTypes :: ([[Maybe Type]])+ _lhsOthenTypes :: ([Maybe Type])+ _lhsOannotatedTree :: CaseScalarExprListScalarExprPairList + _lhsOfixedUpIdentifiersTree :: CaseScalarExprListScalarExprPairList + _lhsOoriginalTree :: CaseScalarExprListScalarExprPairList + _hdOcat :: Catalog+ _hdOidenv :: IDEnv+ _hdOlib :: LocalBindings+ _tlOcat :: Catalog+ _tlOidenv :: IDEnv+ _tlOlib :: LocalBindings+ _hdIannotatedTree :: CaseScalarExprListScalarExprPair + _hdIfixedUpIdentifiersTree :: CaseScalarExprListScalarExprPair + _hdIoriginalTree :: CaseScalarExprListScalarExprPair + _hdIthenType :: (Maybe Type)+ _hdIwhenTypes :: ([Maybe Type])+ _tlIannotatedTree :: CaseScalarExprListScalarExprPairList + _tlIfixedUpIdentifiersTree :: CaseScalarExprListScalarExprPairList + _tlIoriginalTree :: CaseScalarExprListScalarExprPairList + _tlIthenTypes :: ([Maybe Type])+ _tlIwhenTypes :: ([[Maybe Type]])+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 261, column 10)+ _lhsOwhenTypes =+ _hdIwhenTypes : _tlIwhenTypes+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 262, column 10)+ _lhsOthenTypes =+ _hdIthenType : _tlIthenTypes+ -- self rule+ _annotatedTree =+ (:) _hdIannotatedTree _tlIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ (:) _hdIfixedUpIdentifiersTree _tlIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ (:) _hdIoriginalTree _tlIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _hdOcat =+ _lhsIcat+ -- copy rule (down)+ _hdOidenv =+ _lhsIidenv+ -- copy rule (down)+ _hdOlib =+ _lhsIlib+ -- copy rule (down)+ _tlOcat =+ _lhsIcat+ -- copy rule (down)+ _tlOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tlOlib =+ _lhsIlib+ ( _hdIannotatedTree,_hdIfixedUpIdentifiersTree,_hdIoriginalTree,_hdIthenType,_hdIwhenTypes) =+ hd_ _hdOcat _hdOidenv _hdOlib + ( _tlIannotatedTree,_tlIfixedUpIdentifiersTree,_tlIoriginalTree,_tlIthenTypes,_tlIwhenTypes) =+ tl_ _tlOcat _tlOidenv _tlOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOthenTypes,_lhsOwhenTypes)))+sem_CaseScalarExprListScalarExprPairList_Nil :: T_CaseScalarExprListScalarExprPairList +sem_CaseScalarExprListScalarExprPairList_Nil =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOwhenTypes :: ([[Maybe Type]])+ _lhsOthenTypes :: ([Maybe Type])+ _lhsOannotatedTree :: CaseScalarExprListScalarExprPairList + _lhsOfixedUpIdentifiersTree :: CaseScalarExprListScalarExprPairList + _lhsOoriginalTree :: CaseScalarExprListScalarExprPairList + -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 263, column 9)+ _lhsOwhenTypes =+ []+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 264, column 9)+ _lhsOthenTypes =+ []+ -- self rule+ _annotatedTree =+ []+ -- self rule+ _fixedUpIdentifiersTree =+ []+ -- self rule+ _originalTree =+ []+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOthenTypes,_lhsOwhenTypes)))+-- Constraint --------------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + alternatives:+ alternative CheckConstraint:+ child ann : {Annotation}+ child name : {String}+ child expr : ScalarExpr + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative PrimaryKeyConstraint:+ child ann : {Annotation}+ child name : {String}+ child x : {[String]}+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative ReferenceConstraint:+ child ann : {Annotation}+ child name : {String}+ child atts : {[String]}+ child table : {String}+ child tableAtts : {[String]}+ child onUpdate : {Cascade}+ child onDelete : {Cascade}+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative UniqueConstraint:+ child ann : {Annotation}+ child name : {String}+ child x : {[String]}+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+data Constraint = CheckConstraint (Annotation) (String) (ScalarExpr ) + | PrimaryKeyConstraint (Annotation) (String) (([String])) + | ReferenceConstraint (Annotation) (String) (([String])) (String) (([String])) (Cascade) (Cascade) + | UniqueConstraint (Annotation) (String) (([String])) + deriving ( Data,Eq,Show,Typeable)+-- cata+sem_Constraint :: Constraint ->+ T_Constraint +sem_Constraint (CheckConstraint _ann _name _expr ) =+ (sem_Constraint_CheckConstraint _ann _name (sem_ScalarExpr _expr ) )+sem_Constraint (PrimaryKeyConstraint _ann _name _x ) =+ (sem_Constraint_PrimaryKeyConstraint _ann _name _x )+sem_Constraint (ReferenceConstraint _ann _name _atts _table _tableAtts _onUpdate _onDelete ) =+ (sem_Constraint_ReferenceConstraint _ann _name _atts _table _tableAtts _onUpdate _onDelete )+sem_Constraint (UniqueConstraint _ann _name _x ) =+ (sem_Constraint_UniqueConstraint _ann _name _x )+-- semantic domain+type T_Constraint = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( Constraint ,Constraint ,Constraint )+data Inh_Constraint = Inh_Constraint {cat_Inh_Constraint :: Catalog,idenv_Inh_Constraint :: IDEnv,lib_Inh_Constraint :: LocalBindings}+data Syn_Constraint = Syn_Constraint {annotatedTree_Syn_Constraint :: Constraint ,fixedUpIdentifiersTree_Syn_Constraint :: Constraint ,originalTree_Syn_Constraint :: Constraint }+wrap_Constraint :: T_Constraint ->+ Inh_Constraint ->+ Syn_Constraint +wrap_Constraint sem (Inh_Constraint _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_Constraint _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree ))+sem_Constraint_CheckConstraint :: Annotation ->+ String ->+ T_ScalarExpr ->+ T_Constraint +sem_Constraint_CheckConstraint ann_ name_ expr_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _exprOexpectedType :: (Maybe Type)+ _lhsOannotatedTree :: Constraint + _lhsOfixedUpIdentifiersTree :: Constraint + _lhsOoriginalTree :: Constraint + _exprOcat :: Catalog+ _exprOidenv :: IDEnv+ _exprOlib :: LocalBindings+ _exprIannotatedTree :: ScalarExpr + _exprIfixedUpIdentifiersTree :: ScalarExpr + _exprIoriginalTree :: ScalarExpr + _exprIuType :: (Maybe Type)+ -- "./TypeChecking/ParameterizedStatements.ag"(line 80, column 23)+ _exprOexpectedType =+ Nothing+ -- self rule+ _annotatedTree =+ CheckConstraint ann_ name_ _exprIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ CheckConstraint ann_ name_ _exprIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ CheckConstraint ann_ name_ _exprIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _exprOcat =+ _lhsIcat+ -- copy rule (down)+ _exprOidenv =+ _lhsIidenv+ -- copy rule (down)+ _exprOlib =+ _lhsIlib+ ( _exprIannotatedTree,_exprIfixedUpIdentifiersTree,_exprIoriginalTree,_exprIuType) =+ expr_ _exprOcat _exprOexpectedType _exprOidenv _exprOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_Constraint_PrimaryKeyConstraint :: Annotation ->+ String ->+ ([String]) ->+ T_Constraint +sem_Constraint_PrimaryKeyConstraint ann_ name_ x_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: Constraint + _lhsOfixedUpIdentifiersTree :: Constraint + _lhsOoriginalTree :: Constraint + -- self rule+ _annotatedTree =+ PrimaryKeyConstraint ann_ name_ x_+ -- self rule+ _fixedUpIdentifiersTree =+ PrimaryKeyConstraint ann_ name_ x_+ -- self rule+ _originalTree =+ PrimaryKeyConstraint ann_ name_ x_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_Constraint_ReferenceConstraint :: Annotation ->+ String ->+ ([String]) ->+ String ->+ ([String]) ->+ Cascade ->+ Cascade ->+ T_Constraint +sem_Constraint_ReferenceConstraint ann_ name_ atts_ table_ tableAtts_ onUpdate_ onDelete_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: Constraint + _lhsOfixedUpIdentifiersTree :: Constraint + _lhsOoriginalTree :: Constraint + -- self rule+ _annotatedTree =+ ReferenceConstraint ann_ name_ atts_ table_ tableAtts_ onUpdate_ onDelete_+ -- self rule+ _fixedUpIdentifiersTree =+ ReferenceConstraint ann_ name_ atts_ table_ tableAtts_ onUpdate_ onDelete_+ -- self rule+ _originalTree =+ ReferenceConstraint ann_ name_ atts_ table_ tableAtts_ onUpdate_ onDelete_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_Constraint_UniqueConstraint :: Annotation ->+ String ->+ ([String]) ->+ T_Constraint +sem_Constraint_UniqueConstraint ann_ name_ x_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: Constraint + _lhsOfixedUpIdentifiersTree :: Constraint + _lhsOoriginalTree :: Constraint + -- self rule+ _annotatedTree =+ UniqueConstraint ann_ name_ x_+ -- self rule+ _fixedUpIdentifiersTree =+ UniqueConstraint ann_ name_ x_+ -- self rule+ _originalTree =+ UniqueConstraint ann_ name_ x_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+-- ConstraintList ----------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + alternatives:+ alternative Cons:+ child hd : Constraint + child tl : ConstraintList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Nil:+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type ConstraintList = [Constraint ]+-- cata+sem_ConstraintList :: ConstraintList ->+ T_ConstraintList +sem_ConstraintList list =+ (Prelude.foldr sem_ConstraintList_Cons sem_ConstraintList_Nil (Prelude.map sem_Constraint list) )+-- semantic domain+type T_ConstraintList = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( ConstraintList ,ConstraintList ,ConstraintList )+data Inh_ConstraintList = Inh_ConstraintList {cat_Inh_ConstraintList :: Catalog,idenv_Inh_ConstraintList :: IDEnv,lib_Inh_ConstraintList :: LocalBindings}+data Syn_ConstraintList = Syn_ConstraintList {annotatedTree_Syn_ConstraintList :: ConstraintList ,fixedUpIdentifiersTree_Syn_ConstraintList :: ConstraintList ,originalTree_Syn_ConstraintList :: ConstraintList }+wrap_ConstraintList :: T_ConstraintList ->+ Inh_ConstraintList ->+ Syn_ConstraintList +wrap_ConstraintList sem (Inh_ConstraintList _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_ConstraintList _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree ))+sem_ConstraintList_Cons :: T_Constraint ->+ T_ConstraintList ->+ T_ConstraintList +sem_ConstraintList_Cons hd_ tl_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ConstraintList + _lhsOfixedUpIdentifiersTree :: ConstraintList + _lhsOoriginalTree :: ConstraintList + _hdOcat :: Catalog+ _hdOidenv :: IDEnv+ _hdOlib :: LocalBindings+ _tlOcat :: Catalog+ _tlOidenv :: IDEnv+ _tlOlib :: LocalBindings+ _hdIannotatedTree :: Constraint + _hdIfixedUpIdentifiersTree :: Constraint + _hdIoriginalTree :: Constraint + _tlIannotatedTree :: ConstraintList + _tlIfixedUpIdentifiersTree :: ConstraintList + _tlIoriginalTree :: ConstraintList + -- self rule+ _annotatedTree =+ (:) _hdIannotatedTree _tlIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ (:) _hdIfixedUpIdentifiersTree _tlIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ (:) _hdIoriginalTree _tlIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _hdOcat =+ _lhsIcat+ -- copy rule (down)+ _hdOidenv =+ _lhsIidenv+ -- copy rule (down)+ _hdOlib =+ _lhsIlib+ -- copy rule (down)+ _tlOcat =+ _lhsIcat+ -- copy rule (down)+ _tlOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tlOlib =+ _lhsIlib+ ( _hdIannotatedTree,_hdIfixedUpIdentifiersTree,_hdIoriginalTree) =+ hd_ _hdOcat _hdOidenv _hdOlib + ( _tlIannotatedTree,_tlIfixedUpIdentifiersTree,_tlIoriginalTree) =+ tl_ _tlOcat _tlOidenv _tlOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_ConstraintList_Nil :: T_ConstraintList +sem_ConstraintList_Nil =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ConstraintList + _lhsOfixedUpIdentifiersTree :: ConstraintList + _lhsOoriginalTree :: ConstraintList + -- self rule+ _annotatedTree =+ []+ -- self rule+ _fixedUpIdentifiersTree =+ []+ -- self rule+ _originalTree =+ []+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+-- FnBody ------------------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + alternatives:+ alternative PlpgsqlFnBody:+ child ann : {Annotation}+ child blk : Statement + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative SqlFnBody:+ child ann : {Annotation}+ child sts : StatementList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+data FnBody = PlpgsqlFnBody (Annotation) (Statement ) + | SqlFnBody (Annotation) (StatementList ) + deriving ( Data,Eq,Show,Typeable)+-- cata+sem_FnBody :: FnBody ->+ T_FnBody +sem_FnBody (PlpgsqlFnBody _ann _blk ) =+ (sem_FnBody_PlpgsqlFnBody _ann (sem_Statement _blk ) )+sem_FnBody (SqlFnBody _ann _sts ) =+ (sem_FnBody_SqlFnBody _ann (sem_StatementList _sts ) )+-- semantic domain+type T_FnBody = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( FnBody ,FnBody ,FnBody )+data Inh_FnBody = Inh_FnBody {cat_Inh_FnBody :: Catalog,idenv_Inh_FnBody :: IDEnv,lib_Inh_FnBody :: LocalBindings}+data Syn_FnBody = Syn_FnBody {annotatedTree_Syn_FnBody :: FnBody ,fixedUpIdentifiersTree_Syn_FnBody :: FnBody ,originalTree_Syn_FnBody :: FnBody }+wrap_FnBody :: T_FnBody ->+ Inh_FnBody ->+ Syn_FnBody +wrap_FnBody sem (Inh_FnBody _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_FnBody _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree ))+sem_FnBody_PlpgsqlFnBody :: Annotation ->+ T_Statement ->+ T_FnBody +sem_FnBody_PlpgsqlFnBody ann_ blk_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _blkOinProducedCat :: Catalog+ _lhsOannotatedTree :: FnBody + _lhsOfixedUpIdentifiersTree :: FnBody + _lhsOoriginalTree :: FnBody + _blkOcat :: Catalog+ _blkOidenv :: IDEnv+ _blkOlib :: LocalBindings+ _blkIannotatedTree :: Statement + _blkIcatUpdates :: ([CatalogUpdate])+ _blkIfixedUpIdentifiersTree :: Statement + _blkIlibUpdates :: ([LocalBindingsUpdate])+ _blkIoriginalTree :: Statement + -- "./TypeChecking/Statements.ag"(line 104, column 9)+ _blkOinProducedCat =+ emptyCatalog+ -- self rule+ _annotatedTree =+ PlpgsqlFnBody ann_ _blkIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ PlpgsqlFnBody ann_ _blkIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ PlpgsqlFnBody ann_ _blkIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _blkOcat =+ _lhsIcat+ -- copy rule (down)+ _blkOidenv =+ _lhsIidenv+ -- copy rule (down)+ _blkOlib =+ _lhsIlib+ ( _blkIannotatedTree,_blkIcatUpdates,_blkIfixedUpIdentifiersTree,_blkIlibUpdates,_blkIoriginalTree) =+ blk_ _blkOcat _blkOidenv _blkOinProducedCat _blkOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_FnBody_SqlFnBody :: Annotation ->+ T_StatementList ->+ T_FnBody +sem_FnBody_SqlFnBody ann_ sts_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _stsOcatUpdates :: ([CatalogUpdate])+ _stsOlibUpdates :: ([LocalBindingsUpdate])+ _lhsOannotatedTree :: FnBody + _lhsOfixedUpIdentifiersTree :: FnBody + _lhsOoriginalTree :: FnBody + _stsOcat :: Catalog+ _stsOidenv :: IDEnv+ _stsOlib :: LocalBindings+ _stsIannotatedTree :: StatementList + _stsIfixedUpIdentifiersTree :: StatementList + _stsIoriginalTree :: StatementList + _stsIproducedCat :: Catalog+ _stsIproducedLib :: LocalBindings+ -- "./TypeChecking/Statements.ag"(line 129, column 9)+ _stsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 130, column 9)+ _stsOlibUpdates =+ []+ -- self rule+ _annotatedTree =+ SqlFnBody ann_ _stsIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ SqlFnBody ann_ _stsIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ SqlFnBody ann_ _stsIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _stsOcat =+ _lhsIcat+ -- copy rule (down)+ _stsOidenv =+ _lhsIidenv+ -- copy rule (down)+ _stsOlib =+ _lhsIlib+ ( _stsIannotatedTree,_stsIfixedUpIdentifiersTree,_stsIoriginalTree,_stsIproducedCat,_stsIproducedLib) =+ sts_ _stsOcat _stsOcatUpdates _stsOidenv _stsOlib _stsOlibUpdates + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+-- InList ------------------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ expectedType : Maybe Type+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + listType : Either [TypeError] Type+ originalTree : SELF + alternatives:+ alternative InList:+ child ann : {Annotation}+ child exprs : ScalarExprList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative InQueryExpr:+ child ann : {Annotation}+ child sel : QueryExpr + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+data InList = InList (Annotation) (ScalarExprList ) + | InQueryExpr (Annotation) (QueryExpr ) + deriving ( Data,Eq,Show,Typeable)+-- cata+sem_InList :: InList ->+ T_InList +sem_InList (InList _ann _exprs ) =+ (sem_InList_InList _ann (sem_ScalarExprList _exprs ) )+sem_InList (InQueryExpr _ann _sel ) =+ (sem_InList_InQueryExpr _ann (sem_QueryExpr _sel ) )+-- semantic domain+type T_InList = Catalog ->+ (Maybe Type) ->+ IDEnv ->+ LocalBindings ->+ ( InList ,InList ,(Either [TypeError] Type),InList )+data Inh_InList = Inh_InList {cat_Inh_InList :: Catalog,expectedType_Inh_InList :: (Maybe Type),idenv_Inh_InList :: IDEnv,lib_Inh_InList :: LocalBindings}+data Syn_InList = Syn_InList {annotatedTree_Syn_InList :: InList ,fixedUpIdentifiersTree_Syn_InList :: InList ,listType_Syn_InList :: (Either [TypeError] Type),originalTree_Syn_InList :: InList }+wrap_InList :: T_InList ->+ Inh_InList ->+ Syn_InList +wrap_InList sem (Inh_InList _lhsIcat _lhsIexpectedType _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOlistType,_lhsOoriginalTree) = sem _lhsIcat _lhsIexpectedType _lhsIidenv _lhsIlib + in (Syn_InList _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOlistType _lhsOoriginalTree ))+sem_InList_InList :: Annotation ->+ T_ScalarExprList ->+ T_InList +sem_InList_InList ann_ exprs_ =+ (\ _lhsIcat+ _lhsIexpectedType+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOlistType :: (Either [TypeError] Type)+ _exprsOexpectedTypes :: ([Maybe Type])+ _lhsOannotatedTree :: InList + _lhsOfixedUpIdentifiersTree :: InList + _lhsOoriginalTree :: InList + _exprsOcat :: Catalog+ _exprsOidenv :: IDEnv+ _exprsOlib :: LocalBindings+ _exprsIannotatedTree :: ScalarExprList + _exprsIfixedUpIdentifiersTree :: ScalarExprList + _exprsIoriginalTree :: ScalarExprList + _exprsIuType :: ([Maybe Type])+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 409, column 9)+ _lhsOlistType =+ mapM lmt _exprsIuType >>= resolveResultSetType _lhsIcat+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 410, column 9)+ _exprsOexpectedTypes =+ repeat _lhsIexpectedType+ -- self rule+ _annotatedTree =+ InList ann_ _exprsIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ InList ann_ _exprsIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ InList ann_ _exprsIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _exprsOcat =+ _lhsIcat+ -- copy rule (down)+ _exprsOidenv =+ _lhsIidenv+ -- copy rule (down)+ _exprsOlib =+ _lhsIlib+ ( _exprsIannotatedTree,_exprsIfixedUpIdentifiersTree,_exprsIoriginalTree,_exprsIuType) =+ exprs_ _exprsOcat _exprsOexpectedTypes _exprsOidenv _exprsOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOlistType,_lhsOoriginalTree)))+sem_InList_InQueryExpr :: Annotation ->+ T_QueryExpr ->+ T_InList +sem_InList_InQueryExpr ann_ sel_ =+ (\ _lhsIcat+ _lhsIexpectedType+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOlistType :: (Either [TypeError] Type)+ _selOcsql :: LocalBindings+ _selOexpectedTypes :: ([Maybe Type])+ _lhsOannotatedTree :: InList + _lhsOfixedUpIdentifiersTree :: InList + _lhsOoriginalTree :: InList + _selOcat :: Catalog+ _selOidenv :: IDEnv+ _selOlib :: LocalBindings+ _selIannotatedTree :: QueryExpr + _selIcidenv :: IDEnv+ _selIfixedUpIdentifiersTree :: QueryExpr + _selIlibUpdates :: ([LocalBindingsUpdate])+ _selIoriginalTree :: QueryExpr + _selIuType :: (Maybe [(String,Type)])+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 413, column 9)+ _lhsOlistType =+ do+ st <- lmt (map snd <$> _selIuType)+ case length st of+ 0 -> Left [InternalError+ "got subquery with no columns? in inselect"]+ 1 -> Right $ head st+ _ -> Right $ AnonymousRecordType st+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 120, column 19)+ _selOcsql =+ emptyBindings+ -- "./TypeChecking/ParameterizedStatements.ag"(line 173, column 19)+ _selOexpectedTypes =+ []+ -- self rule+ _annotatedTree =+ InQueryExpr ann_ _selIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ InQueryExpr ann_ _selIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ InQueryExpr ann_ _selIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _selOcat =+ _lhsIcat+ -- copy rule (down)+ _selOidenv =+ _lhsIidenv+ -- copy rule (down)+ _selOlib =+ _lhsIlib+ ( _selIannotatedTree,_selIcidenv,_selIfixedUpIdentifiersTree,_selIlibUpdates,_selIoriginalTree,_selIuType) =+ sel_ _selOcat _selOcsql _selOexpectedTypes _selOidenv _selOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOlistType,_lhsOoriginalTree)))+-- JoinExpr ----------------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + alternatives:+ alternative JoinOn:+ child ann : {Annotation}+ child expr : ScalarExpr + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative JoinUsing:+ child ann : {Annotation}+ child x : {[String]}+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+data JoinExpr = JoinOn (Annotation) (ScalarExpr ) + | JoinUsing (Annotation) (([String])) + deriving ( Data,Eq,Show,Typeable)+-- cata+sem_JoinExpr :: JoinExpr ->+ T_JoinExpr +sem_JoinExpr (JoinOn _ann _expr ) =+ (sem_JoinExpr_JoinOn _ann (sem_ScalarExpr _expr ) )+sem_JoinExpr (JoinUsing _ann _x ) =+ (sem_JoinExpr_JoinUsing _ann _x )+-- semantic domain+type T_JoinExpr = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( JoinExpr ,JoinExpr ,JoinExpr )+data Inh_JoinExpr = Inh_JoinExpr {cat_Inh_JoinExpr :: Catalog,idenv_Inh_JoinExpr :: IDEnv,lib_Inh_JoinExpr :: LocalBindings}+data Syn_JoinExpr = Syn_JoinExpr {annotatedTree_Syn_JoinExpr :: JoinExpr ,fixedUpIdentifiersTree_Syn_JoinExpr :: JoinExpr ,originalTree_Syn_JoinExpr :: JoinExpr }+wrap_JoinExpr :: T_JoinExpr ->+ Inh_JoinExpr ->+ Syn_JoinExpr +wrap_JoinExpr sem (Inh_JoinExpr _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_JoinExpr _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree ))+sem_JoinExpr_JoinOn :: Annotation ->+ T_ScalarExpr ->+ T_JoinExpr +sem_JoinExpr_JoinOn ann_ expr_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _exprOexpectedType :: (Maybe Type)+ _lhsOannotatedTree :: JoinExpr + _lhsOfixedUpIdentifiersTree :: JoinExpr + _lhsOoriginalTree :: JoinExpr + _exprOcat :: Catalog+ _exprOidenv :: IDEnv+ _exprOlib :: LocalBindings+ _exprIannotatedTree :: ScalarExpr + _exprIfixedUpIdentifiersTree :: ScalarExpr + _exprIoriginalTree :: ScalarExpr + _exprIuType :: (Maybe Type)+ -- "./TypeChecking/ParameterizedStatements.ag"(line 94, column 14)+ _exprOexpectedType =+ Just typeBool+ -- self rule+ _annotatedTree =+ JoinOn ann_ _exprIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ JoinOn ann_ _exprIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ JoinOn ann_ _exprIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _exprOcat =+ _lhsIcat+ -- copy rule (down)+ _exprOidenv =+ _lhsIidenv+ -- copy rule (down)+ _exprOlib =+ _lhsIlib+ ( _exprIannotatedTree,_exprIfixedUpIdentifiersTree,_exprIoriginalTree,_exprIuType) =+ expr_ _exprOcat _exprOexpectedType _exprOidenv _exprOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_JoinExpr_JoinUsing :: Annotation ->+ ([String]) ->+ T_JoinExpr +sem_JoinExpr_JoinUsing ann_ x_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: JoinExpr + _lhsOfixedUpIdentifiersTree :: JoinExpr + _lhsOoriginalTree :: JoinExpr + -- self rule+ _annotatedTree =+ JoinUsing ann_ x_+ -- self rule+ _fixedUpIdentifiersTree =+ JoinUsing ann_ x_+ -- self rule+ _originalTree =+ JoinUsing ann_ x_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+-- MaybeBoolExpr -----------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + alternatives:+ alternative Just:+ child just : ScalarExpr + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Nothing:+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type MaybeBoolExpr = Maybe ScalarExpr +-- cata+sem_MaybeBoolExpr :: MaybeBoolExpr ->+ T_MaybeBoolExpr +sem_MaybeBoolExpr (Prelude.Just x ) =+ (sem_MaybeBoolExpr_Just (sem_ScalarExpr x ) )+sem_MaybeBoolExpr Prelude.Nothing =+ sem_MaybeBoolExpr_Nothing+-- semantic domain+type T_MaybeBoolExpr = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( MaybeBoolExpr ,MaybeBoolExpr ,MaybeBoolExpr )+data Inh_MaybeBoolExpr = Inh_MaybeBoolExpr {cat_Inh_MaybeBoolExpr :: Catalog,idenv_Inh_MaybeBoolExpr :: IDEnv,lib_Inh_MaybeBoolExpr :: LocalBindings}+data Syn_MaybeBoolExpr = Syn_MaybeBoolExpr {annotatedTree_Syn_MaybeBoolExpr :: MaybeBoolExpr ,fixedUpIdentifiersTree_Syn_MaybeBoolExpr :: MaybeBoolExpr ,originalTree_Syn_MaybeBoolExpr :: MaybeBoolExpr }+wrap_MaybeBoolExpr :: T_MaybeBoolExpr ->+ Inh_MaybeBoolExpr ->+ Syn_MaybeBoolExpr +wrap_MaybeBoolExpr sem (Inh_MaybeBoolExpr _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_MaybeBoolExpr _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree ))+sem_MaybeBoolExpr_Just :: T_ScalarExpr ->+ T_MaybeBoolExpr +sem_MaybeBoolExpr_Just just_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: MaybeBoolExpr + _justOexpectedType :: (Maybe Type)+ _lhsOfixedUpIdentifiersTree :: MaybeBoolExpr + _lhsOoriginalTree :: MaybeBoolExpr + _justOcat :: Catalog+ _justOidenv :: IDEnv+ _justOlib :: LocalBindings+ _justIannotatedTree :: ScalarExpr + _justIfixedUpIdentifiersTree :: ScalarExpr + _justIoriginalTree :: ScalarExpr + _justIuType :: (Maybe Type)+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 132, column 9)+ _lhsOannotatedTree =+ let t = _justIuType+ in if t `elem` [Nothing,Just typeBool]+ then Just _justIannotatedTree+ else Just $ addTypeErrors [ExpressionMustBeBool] _justIannotatedTree+ -- "./TypeChecking/ParameterizedStatements.ag"(line 97, column 12)+ _justOexpectedType =+ Just typeBool+ -- self rule+ _annotatedTree =+ Just _justIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ Just _justIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ Just _justIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _justOcat =+ _lhsIcat+ -- copy rule (down)+ _justOidenv =+ _lhsIidenv+ -- copy rule (down)+ _justOlib =+ _lhsIlib+ ( _justIannotatedTree,_justIfixedUpIdentifiersTree,_justIoriginalTree,_justIuType) =+ just_ _justOcat _justOexpectedType _justOidenv _justOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_MaybeBoolExpr_Nothing :: T_MaybeBoolExpr +sem_MaybeBoolExpr_Nothing =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: MaybeBoolExpr + _lhsOfixedUpIdentifiersTree :: MaybeBoolExpr + _lhsOoriginalTree :: MaybeBoolExpr + -- self rule+ _annotatedTree =+ Nothing+ -- self rule+ _fixedUpIdentifiersTree =+ Nothing+ -- self rule+ _originalTree =+ Nothing+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+-- MaybeScalarExpr ---------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + uType : Maybe Type+ alternatives:+ alternative Just:+ child just : ScalarExpr + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Nothing:+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type MaybeScalarExpr = Maybe ScalarExpr +-- cata+sem_MaybeScalarExpr :: MaybeScalarExpr ->+ T_MaybeScalarExpr +sem_MaybeScalarExpr (Prelude.Just x ) =+ (sem_MaybeScalarExpr_Just (sem_ScalarExpr x ) )+sem_MaybeScalarExpr Prelude.Nothing =+ sem_MaybeScalarExpr_Nothing+-- semantic domain+type T_MaybeScalarExpr = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( MaybeScalarExpr ,MaybeScalarExpr ,MaybeScalarExpr ,(Maybe Type))+data Inh_MaybeScalarExpr = Inh_MaybeScalarExpr {cat_Inh_MaybeScalarExpr :: Catalog,idenv_Inh_MaybeScalarExpr :: IDEnv,lib_Inh_MaybeScalarExpr :: LocalBindings}+data Syn_MaybeScalarExpr = Syn_MaybeScalarExpr {annotatedTree_Syn_MaybeScalarExpr :: MaybeScalarExpr ,fixedUpIdentifiersTree_Syn_MaybeScalarExpr :: MaybeScalarExpr ,originalTree_Syn_MaybeScalarExpr :: MaybeScalarExpr ,uType_Syn_MaybeScalarExpr :: (Maybe Type)}+wrap_MaybeScalarExpr :: T_MaybeScalarExpr ->+ Inh_MaybeScalarExpr ->+ Syn_MaybeScalarExpr +wrap_MaybeScalarExpr sem (Inh_MaybeScalarExpr _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_MaybeScalarExpr _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree _lhsOuType ))+sem_MaybeScalarExpr_Just :: T_ScalarExpr ->+ T_MaybeScalarExpr +sem_MaybeScalarExpr_Just just_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOuType :: (Maybe Type)+ _justOexpectedType :: (Maybe Type)+ _lhsOannotatedTree :: MaybeScalarExpr + _lhsOfixedUpIdentifiersTree :: MaybeScalarExpr + _lhsOoriginalTree :: MaybeScalarExpr + _justOcat :: Catalog+ _justOidenv :: IDEnv+ _justOlib :: LocalBindings+ _justIannotatedTree :: ScalarExpr + _justIfixedUpIdentifiersTree :: ScalarExpr + _justIoriginalTree :: ScalarExpr + _justIuType :: (Maybe Type)+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 124, column 12)+ _lhsOuType =+ _justIuType+ -- "./TypeChecking/ParameterizedStatements.ag"(line 100, column 12)+ _justOexpectedType =+ Nothing+ -- self rule+ _annotatedTree =+ Just _justIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ Just _justIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ Just _justIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _justOcat =+ _lhsIcat+ -- copy rule (down)+ _justOidenv =+ _lhsIidenv+ -- copy rule (down)+ _justOlib =+ _lhsIlib+ ( _justIannotatedTree,_justIfixedUpIdentifiersTree,_justIoriginalTree,_justIuType) =+ just_ _justOcat _justOexpectedType _justOidenv _justOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+sem_MaybeScalarExpr_Nothing :: T_MaybeScalarExpr +sem_MaybeScalarExpr_Nothing =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOuType :: (Maybe Type)+ _lhsOannotatedTree :: MaybeScalarExpr + _lhsOfixedUpIdentifiersTree :: MaybeScalarExpr + _lhsOoriginalTree :: MaybeScalarExpr + -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 125, column 15)+ _lhsOuType =+ Nothing+ -- self rule+ _annotatedTree =+ Nothing+ -- self rule+ _fixedUpIdentifiersTree =+ Nothing+ -- self rule+ _originalTree =+ Nothing+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+-- MaybeSelectList ---------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + listType : [(String,Maybe Type)]+ originalTree : SELF + alternatives:+ alternative Just:+ child just : SelectList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Nothing:+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type MaybeSelectList = Maybe SelectList +-- cata+sem_MaybeSelectList :: MaybeSelectList ->+ T_MaybeSelectList +sem_MaybeSelectList (Prelude.Just x ) =+ (sem_MaybeSelectList_Just (sem_SelectList x ) )+sem_MaybeSelectList Prelude.Nothing =+ sem_MaybeSelectList_Nothing+-- semantic domain+type T_MaybeSelectList = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( MaybeSelectList ,MaybeSelectList ,([(String,Maybe Type)]),MaybeSelectList )+data Inh_MaybeSelectList = Inh_MaybeSelectList {cat_Inh_MaybeSelectList :: Catalog,idenv_Inh_MaybeSelectList :: IDEnv,lib_Inh_MaybeSelectList :: LocalBindings}+data Syn_MaybeSelectList = Syn_MaybeSelectList {annotatedTree_Syn_MaybeSelectList :: MaybeSelectList ,fixedUpIdentifiersTree_Syn_MaybeSelectList :: MaybeSelectList ,listType_Syn_MaybeSelectList :: ([(String,Maybe Type)]),originalTree_Syn_MaybeSelectList :: MaybeSelectList }+wrap_MaybeSelectList :: T_MaybeSelectList ->+ Inh_MaybeSelectList ->+ Syn_MaybeSelectList +wrap_MaybeSelectList sem (Inh_MaybeSelectList _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOlistType,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_MaybeSelectList _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOlistType _lhsOoriginalTree ))+sem_MaybeSelectList_Just :: T_SelectList ->+ T_MaybeSelectList +sem_MaybeSelectList_Just just_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOlistType :: ([(String,Maybe Type)])+ _lhsOannotatedTree :: MaybeSelectList + _lhsOfixedUpIdentifiersTree :: MaybeSelectList + _lhsOoriginalTree :: MaybeSelectList + _justOcat :: Catalog+ _justOidenv :: IDEnv+ _justOlib :: LocalBindings+ _justIannotatedTree :: SelectList + _justIcidenv :: IDEnv+ _justIfixedUpIdentifiersTree :: SelectList + _justIlibUpdates :: ([LocalBindingsUpdate])+ _justIlistType :: ([(String,Maybe Type)])+ _justIoriginalTree :: SelectList + -- "./TypeChecking/QueryExprs/SelectLists.ag"(line 38, column 12)+ _lhsOlistType =+ _justIlistType+ -- self rule+ _annotatedTree =+ Just _justIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ Just _justIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ Just _justIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _justOcat =+ _lhsIcat+ -- copy rule (down)+ _justOidenv =+ _lhsIidenv+ -- copy rule (down)+ _justOlib =+ _lhsIlib+ ( _justIannotatedTree,_justIcidenv,_justIfixedUpIdentifiersTree,_justIlibUpdates,_justIlistType,_justIoriginalTree) =+ just_ _justOcat _justOidenv _justOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOlistType,_lhsOoriginalTree)))+sem_MaybeSelectList_Nothing :: T_MaybeSelectList +sem_MaybeSelectList_Nothing =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOlistType :: ([(String,Maybe Type)])+ _lhsOannotatedTree :: MaybeSelectList + _lhsOfixedUpIdentifiersTree :: MaybeSelectList + _lhsOoriginalTree :: MaybeSelectList + -- "./TypeChecking/QueryExprs/SelectLists.ag"(line 39, column 15)+ _lhsOlistType =+ []+ -- self rule+ _annotatedTree =+ Nothing+ -- self rule+ _fixedUpIdentifiersTree =+ Nothing+ -- self rule+ _originalTree =+ Nothing+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOlistType,_lhsOoriginalTree)))+-- OnExpr ------------------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + alternatives:+ alternative Just:+ child just : JoinExpr + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Nothing:+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type OnExpr = Maybe JoinExpr +-- cata+sem_OnExpr :: OnExpr ->+ T_OnExpr +sem_OnExpr (Prelude.Just x ) =+ (sem_OnExpr_Just (sem_JoinExpr x ) )+sem_OnExpr Prelude.Nothing =+ sem_OnExpr_Nothing+-- semantic domain+type T_OnExpr = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( OnExpr ,OnExpr ,OnExpr )+data Inh_OnExpr = Inh_OnExpr {cat_Inh_OnExpr :: Catalog,idenv_Inh_OnExpr :: IDEnv,lib_Inh_OnExpr :: LocalBindings}+data Syn_OnExpr = Syn_OnExpr {annotatedTree_Syn_OnExpr :: OnExpr ,fixedUpIdentifiersTree_Syn_OnExpr :: OnExpr ,originalTree_Syn_OnExpr :: OnExpr }+wrap_OnExpr :: T_OnExpr ->+ Inh_OnExpr ->+ Syn_OnExpr +wrap_OnExpr sem (Inh_OnExpr _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_OnExpr _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree ))+sem_OnExpr_Just :: T_JoinExpr ->+ T_OnExpr +sem_OnExpr_Just just_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: OnExpr + _lhsOfixedUpIdentifiersTree :: OnExpr + _lhsOoriginalTree :: OnExpr + _justOcat :: Catalog+ _justOidenv :: IDEnv+ _justOlib :: LocalBindings+ _justIannotatedTree :: JoinExpr + _justIfixedUpIdentifiersTree :: JoinExpr + _justIoriginalTree :: JoinExpr + -- self rule+ _annotatedTree =+ Just _justIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ Just _justIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ Just _justIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _justOcat =+ _lhsIcat+ -- copy rule (down)+ _justOidenv =+ _lhsIidenv+ -- copy rule (down)+ _justOlib =+ _lhsIlib+ ( _justIannotatedTree,_justIfixedUpIdentifiersTree,_justIoriginalTree) =+ just_ _justOcat _justOidenv _justOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_OnExpr_Nothing :: T_OnExpr +sem_OnExpr_Nothing =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: OnExpr + _lhsOfixedUpIdentifiersTree :: OnExpr + _lhsOoriginalTree :: OnExpr + -- self rule+ _annotatedTree =+ Nothing+ -- self rule+ _fixedUpIdentifiersTree =+ Nothing+ -- self rule+ _originalTree =+ Nothing+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+-- ParamDef ----------------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ pos : Int+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + namedType : Maybe Type+ originalTree : SELF + paramName : ParamName+ alternatives:+ alternative ParamDef:+ child ann : {Annotation}+ child name : {String}+ child typ : TypeName + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative ParamDefTp:+ child ann : {Annotation}+ child typ : TypeName + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+data ParamDef = ParamDef (Annotation) (String) (TypeName ) + | ParamDefTp (Annotation) (TypeName ) + deriving ( Data,Eq,Show,Typeable)+-- cata+sem_ParamDef :: ParamDef ->+ T_ParamDef +sem_ParamDef (ParamDef _ann _name _typ ) =+ (sem_ParamDef_ParamDef _ann _name (sem_TypeName _typ ) )+sem_ParamDef (ParamDefTp _ann _typ ) =+ (sem_ParamDef_ParamDefTp _ann (sem_TypeName _typ ) )+-- semantic domain+type T_ParamDef = Catalog ->+ IDEnv ->+ LocalBindings ->+ Int ->+ ( ParamDef ,ParamDef ,(Maybe Type),ParamDef ,ParamName)+data Inh_ParamDef = Inh_ParamDef {cat_Inh_ParamDef :: Catalog,idenv_Inh_ParamDef :: IDEnv,lib_Inh_ParamDef :: LocalBindings,pos_Inh_ParamDef :: Int}+data Syn_ParamDef = Syn_ParamDef {annotatedTree_Syn_ParamDef :: ParamDef ,fixedUpIdentifiersTree_Syn_ParamDef :: ParamDef ,namedType_Syn_ParamDef :: (Maybe Type),originalTree_Syn_ParamDef :: ParamDef ,paramName_Syn_ParamDef :: ParamName}+wrap_ParamDef :: T_ParamDef ->+ Inh_ParamDef ->+ Syn_ParamDef +wrap_ParamDef sem (Inh_ParamDef _lhsIcat _lhsIidenv _lhsIlib _lhsIpos ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOnamedType,_lhsOoriginalTree,_lhsOparamName) = sem _lhsIcat _lhsIidenv _lhsIlib _lhsIpos + in (Syn_ParamDef _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOnamedType _lhsOoriginalTree _lhsOparamName ))+sem_ParamDef_ParamDef :: Annotation ->+ String ->+ T_TypeName ->+ T_ParamDef +sem_ParamDef_ParamDef ann_ name_ typ_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib+ _lhsIpos ->+ (let _lhsOnamedType :: (Maybe Type)+ _lhsOparamName :: ParamName+ _lhsOannotatedTree :: ParamDef + _lhsOfixedUpIdentifiersTree :: ParamDef + _lhsOoriginalTree :: ParamDef + _typOcat :: Catalog+ _typOidenv :: IDEnv+ _typOlib :: LocalBindings+ _typIannotatedTree :: TypeName + _typIfixedUpIdentifiersTree :: TypeName + _typInamedType :: (Maybe Type)+ _typIoriginalTree :: TypeName + -- "./TypeChecking/Ddl/CreateFunction.ag"(line 45, column 9)+ _lhsOnamedType =+ _typInamedType+ -- "./TypeChecking/Ddl/CreateFunction.ag"(line 47, column 9)+ _lhsOparamName =+ NamedParam _lhsIpos name_+ -- self rule+ _annotatedTree =+ ParamDef ann_ name_ _typIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ ParamDef ann_ name_ _typIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ ParamDef ann_ name_ _typIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _typOcat =+ _lhsIcat+ -- copy rule (down)+ _typOidenv =+ _lhsIidenv+ -- copy rule (down)+ _typOlib =+ _lhsIlib+ ( _typIannotatedTree,_typIfixedUpIdentifiersTree,_typInamedType,_typIoriginalTree) =+ typ_ _typOcat _typOidenv _typOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOnamedType,_lhsOoriginalTree,_lhsOparamName)))+sem_ParamDef_ParamDefTp :: Annotation ->+ T_TypeName ->+ T_ParamDef +sem_ParamDef_ParamDefTp ann_ typ_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib+ _lhsIpos ->+ (let _lhsOnamedType :: (Maybe Type)+ _lhsOparamName :: ParamName+ _lhsOannotatedTree :: ParamDef + _lhsOfixedUpIdentifiersTree :: ParamDef + _lhsOoriginalTree :: ParamDef + _typOcat :: Catalog+ _typOidenv :: IDEnv+ _typOlib :: LocalBindings+ _typIannotatedTree :: TypeName + _typIfixedUpIdentifiersTree :: TypeName + _typInamedType :: (Maybe Type)+ _typIoriginalTree :: TypeName + -- "./TypeChecking/Ddl/CreateFunction.ag"(line 45, column 9)+ _lhsOnamedType =+ _typInamedType+ -- "./TypeChecking/Ddl/CreateFunction.ag"(line 49, column 9)+ _lhsOparamName =+ UnnamedParam _lhsIpos+ -- self rule+ _annotatedTree =+ ParamDefTp ann_ _typIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ ParamDefTp ann_ _typIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ ParamDefTp ann_ _typIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _typOcat =+ _lhsIcat+ -- copy rule (down)+ _typOidenv =+ _lhsIidenv+ -- copy rule (down)+ _typOlib =+ _lhsIlib+ ( _typIannotatedTree,_typIfixedUpIdentifiersTree,_typInamedType,_typIoriginalTree) =+ typ_ _typOcat _typOidenv _typOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOnamedType,_lhsOoriginalTree,_lhsOparamName)))+-- ParamDefList ------------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ pos : Int+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + params : [(ParamName, Maybe Type)]+ alternatives:+ alternative Cons:+ child hd : ParamDef + child tl : ParamDefList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Nil:+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type ParamDefList = [ParamDef ]+-- cata+sem_ParamDefList :: ParamDefList ->+ T_ParamDefList +sem_ParamDefList list =+ (Prelude.foldr sem_ParamDefList_Cons sem_ParamDefList_Nil (Prelude.map sem_ParamDef list) )+-- semantic domain+type T_ParamDefList = Catalog ->+ IDEnv ->+ LocalBindings ->+ Int ->+ ( ParamDefList ,ParamDefList ,ParamDefList ,([(ParamName, Maybe Type)]))+data Inh_ParamDefList = Inh_ParamDefList {cat_Inh_ParamDefList :: Catalog,idenv_Inh_ParamDefList :: IDEnv,lib_Inh_ParamDefList :: LocalBindings,pos_Inh_ParamDefList :: Int}+data Syn_ParamDefList = Syn_ParamDefList {annotatedTree_Syn_ParamDefList :: ParamDefList ,fixedUpIdentifiersTree_Syn_ParamDefList :: ParamDefList ,originalTree_Syn_ParamDefList :: ParamDefList ,params_Syn_ParamDefList :: ([(ParamName, Maybe Type)])}+wrap_ParamDefList :: T_ParamDefList ->+ Inh_ParamDefList ->+ Syn_ParamDefList +wrap_ParamDefList sem (Inh_ParamDefList _lhsIcat _lhsIidenv _lhsIlib _lhsIpos ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOparams) = sem _lhsIcat _lhsIidenv _lhsIlib _lhsIpos + in (Syn_ParamDefList _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree _lhsOparams ))+sem_ParamDefList_Cons :: T_ParamDef ->+ T_ParamDefList ->+ T_ParamDefList +sem_ParamDefList_Cons hd_ tl_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib+ _lhsIpos ->+ (let _lhsOparams :: ([(ParamName, Maybe Type)])+ _hdOpos :: Int+ _tlOpos :: Int+ _lhsOannotatedTree :: ParamDefList + _lhsOfixedUpIdentifiersTree :: ParamDefList + _lhsOoriginalTree :: ParamDefList + _hdOcat :: Catalog+ _hdOidenv :: IDEnv+ _hdOlib :: LocalBindings+ _tlOcat :: Catalog+ _tlOidenv :: IDEnv+ _tlOlib :: LocalBindings+ _hdIannotatedTree :: ParamDef + _hdIfixedUpIdentifiersTree :: ParamDef + _hdInamedType :: (Maybe Type)+ _hdIoriginalTree :: ParamDef + _hdIparamName :: ParamName+ _tlIannotatedTree :: ParamDefList + _tlIfixedUpIdentifiersTree :: ParamDefList + _tlIoriginalTree :: ParamDefList + _tlIparams :: ([(ParamName, Maybe Type)])+ -- "./TypeChecking/Ddl/CreateFunction.ag"(line 53, column 13)+ _lhsOparams =+ ((_hdIparamName, _hdInamedType) : _tlIparams)+ -- "./TypeChecking/Ddl/CreateFunction.ag"(line 54, column 13)+ _hdOpos =+ _lhsIpos+ -- "./TypeChecking/Ddl/CreateFunction.ag"(line 55, column 13)+ _tlOpos =+ _lhsIpos + 1+ -- self rule+ _annotatedTree =+ (:) _hdIannotatedTree _tlIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ (:) _hdIfixedUpIdentifiersTree _tlIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ (:) _hdIoriginalTree _tlIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _hdOcat =+ _lhsIcat+ -- copy rule (down)+ _hdOidenv =+ _lhsIidenv+ -- copy rule (down)+ _hdOlib =+ _lhsIlib+ -- copy rule (down)+ _tlOcat =+ _lhsIcat+ -- copy rule (down)+ _tlOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tlOlib =+ _lhsIlib+ ( _hdIannotatedTree,_hdIfixedUpIdentifiersTree,_hdInamedType,_hdIoriginalTree,_hdIparamName) =+ hd_ _hdOcat _hdOidenv _hdOlib _hdOpos + ( _tlIannotatedTree,_tlIfixedUpIdentifiersTree,_tlIoriginalTree,_tlIparams) =+ tl_ _tlOcat _tlOidenv _tlOlib _tlOpos + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOparams)))+sem_ParamDefList_Nil :: T_ParamDefList +sem_ParamDefList_Nil =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib+ _lhsIpos ->+ (let _lhsOparams :: ([(ParamName, Maybe Type)])+ _lhsOannotatedTree :: ParamDefList + _lhsOfixedUpIdentifiersTree :: ParamDefList + _lhsOoriginalTree :: ParamDefList + -- "./TypeChecking/Ddl/CreateFunction.ag"(line 52, column 12)+ _lhsOparams =+ []+ -- self rule+ _annotatedTree =+ []+ -- self rule+ _fixedUpIdentifiersTree =+ []+ -- self rule+ _originalTree =+ []+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOparams)))+-- QueryExpr ---------------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ csql : LocalBindings+ expectedTypes : [Maybe Type]+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + cidenv : IDEnv+ fixedUpIdentifiersTree : SELF + libUpdates : [LocalBindingsUpdate]+ originalTree : SELF + uType : Maybe [(String,Type)]+ alternatives:+ alternative CombineQueryExpr:+ child ann : {Annotation}+ child ctype : {CombineType}+ child sel1 : QueryExpr + child sel2 : QueryExpr + visit 0:+ local tpe : {Et}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Select:+ child ann : {Annotation}+ child selDistinct : {Distinct}+ child selSelectList : SelectList + child selTref : TableRefList + child selWhere : MaybeBoolExpr + child selGroupBy : ScalarExprList + child selHaving : MaybeBoolExpr + child selOrderBy : ScalarExprDirectionPairList + child selLimit : MaybeScalarExpr + child selOffset : MaybeScalarExpr + visit 0:+ local trefEnv : _+ local includeCorrelations : _+ local newLib : _+ local slTypes : {LocalBindings}+ local tpe : {Et}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Values:+ child ann : {Annotation}+ child vll : ScalarExprListList + visit 0:+ local tpe : {Et}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative WithQueryExpr:+ child ann : {Annotation}+ child withs : WithQueryList + child ex : QueryExpr + visit 0:+ local tpe : {Et}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+data QueryExpr = CombineQueryExpr (Annotation) (CombineType) (QueryExpr ) (QueryExpr ) + | Select (Annotation) (Distinct) (SelectList ) (TableRefList ) (MaybeBoolExpr ) (ScalarExprList ) (MaybeBoolExpr ) (ScalarExprDirectionPairList ) (MaybeScalarExpr ) (MaybeScalarExpr ) + | Values (Annotation) (ScalarExprListList ) + | WithQueryExpr (Annotation) (WithQueryList ) (QueryExpr ) + deriving ( Data,Eq,Show,Typeable)+-- cata+sem_QueryExpr :: QueryExpr ->+ T_QueryExpr +sem_QueryExpr (CombineQueryExpr _ann _ctype _sel1 _sel2 ) =+ (sem_QueryExpr_CombineQueryExpr _ann _ctype (sem_QueryExpr _sel1 ) (sem_QueryExpr _sel2 ) )+sem_QueryExpr (Select _ann _selDistinct _selSelectList _selTref _selWhere _selGroupBy _selHaving _selOrderBy _selLimit _selOffset ) =+ (sem_QueryExpr_Select _ann _selDistinct (sem_SelectList _selSelectList ) (sem_TableRefList _selTref ) (sem_MaybeBoolExpr _selWhere ) (sem_ScalarExprList _selGroupBy ) (sem_MaybeBoolExpr _selHaving ) (sem_ScalarExprDirectionPairList _selOrderBy ) (sem_MaybeScalarExpr _selLimit ) (sem_MaybeScalarExpr _selOffset ) )+sem_QueryExpr (Values _ann _vll ) =+ (sem_QueryExpr_Values _ann (sem_ScalarExprListList _vll ) )+sem_QueryExpr (WithQueryExpr _ann _withs _ex ) =+ (sem_QueryExpr_WithQueryExpr _ann (sem_WithQueryList _withs ) (sem_QueryExpr _ex ) )+-- semantic domain+type T_QueryExpr = Catalog ->+ LocalBindings ->+ ([Maybe Type]) ->+ IDEnv ->+ LocalBindings ->+ ( QueryExpr ,IDEnv,QueryExpr ,([LocalBindingsUpdate]),QueryExpr ,(Maybe [(String,Type)]))+data Inh_QueryExpr = Inh_QueryExpr {cat_Inh_QueryExpr :: Catalog,csql_Inh_QueryExpr :: LocalBindings,expectedTypes_Inh_QueryExpr :: ([Maybe Type]),idenv_Inh_QueryExpr :: IDEnv,lib_Inh_QueryExpr :: LocalBindings}+data Syn_QueryExpr = Syn_QueryExpr {annotatedTree_Syn_QueryExpr :: QueryExpr ,cidenv_Syn_QueryExpr :: IDEnv,fixedUpIdentifiersTree_Syn_QueryExpr :: QueryExpr ,libUpdates_Syn_QueryExpr :: ([LocalBindingsUpdate]),originalTree_Syn_QueryExpr :: QueryExpr ,uType_Syn_QueryExpr :: (Maybe [(String,Type)])}+wrap_QueryExpr :: T_QueryExpr ->+ Inh_QueryExpr ->+ Syn_QueryExpr +wrap_QueryExpr sem (Inh_QueryExpr _lhsIcat _lhsIcsql _lhsIexpectedTypes _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOcidenv,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree,_lhsOuType) = sem _lhsIcat _lhsIcsql _lhsIexpectedTypes _lhsIidenv _lhsIlib + in (Syn_QueryExpr _lhsOannotatedTree _lhsOcidenv _lhsOfixedUpIdentifiersTree _lhsOlibUpdates _lhsOoriginalTree _lhsOuType ))+sem_QueryExpr_CombineQueryExpr :: Annotation ->+ CombineType ->+ T_QueryExpr ->+ T_QueryExpr ->+ T_QueryExpr +sem_QueryExpr_CombineQueryExpr ann_ ctype_ sel1_ sel2_ =+ (\ _lhsIcat+ _lhsIcsql+ _lhsIexpectedTypes+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOcidenv :: IDEnv+ _lhsOannotatedTree :: QueryExpr + _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _tpe :: Et+ _lhsOuType :: (Maybe [(String,Type)])+ _lhsOfixedUpIdentifiersTree :: QueryExpr + _lhsOoriginalTree :: QueryExpr + _sel1Ocat :: Catalog+ _sel1Ocsql :: LocalBindings+ _sel1OexpectedTypes :: ([Maybe Type])+ _sel1Oidenv :: IDEnv+ _sel1Olib :: LocalBindings+ _sel2Ocat :: Catalog+ _sel2Ocsql :: LocalBindings+ _sel2OexpectedTypes :: ([Maybe Type])+ _sel2Oidenv :: IDEnv+ _sel2Olib :: LocalBindings+ _sel1IannotatedTree :: QueryExpr + _sel1Icidenv :: IDEnv+ _sel1IfixedUpIdentifiersTree :: QueryExpr + _sel1IlibUpdates :: ([LocalBindingsUpdate])+ _sel1IoriginalTree :: QueryExpr + _sel1IuType :: (Maybe [(String,Type)])+ _sel2IannotatedTree :: QueryExpr + _sel2Icidenv :: IDEnv+ _sel2IfixedUpIdentifiersTree :: QueryExpr + _sel2IlibUpdates :: ([LocalBindingsUpdate])+ _sel2IoriginalTree :: QueryExpr + _sel2IuType :: (Maybe [(String,Type)])+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 230, column 24)+ _lhsOcidenv =+ _sel1Icidenv+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 29, column 9)+ _lhsOannotatedTree =+ setTypeAddErrors _tpe _backTree+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 141, column 9)+ _lhsOlibUpdates =+ []+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 168, column 9)+ _tpe =+ do+ sel1t <- lmt ((SetOfType . CompositeType) <$> _sel1IuType)+ sel2t <- lmt ((SetOfType . CompositeType) <$> _sel2IuType)+ typeCheckCombineSelect _lhsIcat sel1t sel2t+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 174, column 9)+ _backTree =+ CombineQueryExpr ann_ ctype_+ _sel1IannotatedTree+ _sel2IannotatedTree+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 185, column 9)+ _lhsOuType =+ etmt (_tpe >>= unwrapSetOfComposite)+ -- self rule+ _annotatedTree =+ CombineQueryExpr ann_ ctype_ _sel1IannotatedTree _sel2IannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ CombineQueryExpr ann_ ctype_ _sel1IfixedUpIdentifiersTree _sel2IfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ CombineQueryExpr ann_ ctype_ _sel1IoriginalTree _sel2IoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _sel1Ocat =+ _lhsIcat+ -- copy rule (down)+ _sel1Ocsql =+ _lhsIcsql+ -- copy rule (down)+ _sel1OexpectedTypes =+ _lhsIexpectedTypes+ -- copy rule (down)+ _sel1Oidenv =+ _lhsIidenv+ -- copy rule (down)+ _sel1Olib =+ _lhsIlib+ -- copy rule (down)+ _sel2Ocat =+ _lhsIcat+ -- copy rule (down)+ _sel2Ocsql =+ _lhsIcsql+ -- copy rule (down)+ _sel2OexpectedTypes =+ _lhsIexpectedTypes+ -- copy rule (down)+ _sel2Oidenv =+ _lhsIidenv+ -- copy rule (down)+ _sel2Olib =+ _lhsIlib+ ( _sel1IannotatedTree,_sel1Icidenv,_sel1IfixedUpIdentifiersTree,_sel1IlibUpdates,_sel1IoriginalTree,_sel1IuType) =+ sel1_ _sel1Ocat _sel1Ocsql _sel1OexpectedTypes _sel1Oidenv _sel1Olib + ( _sel2IannotatedTree,_sel2Icidenv,_sel2IfixedUpIdentifiersTree,_sel2IlibUpdates,_sel2IoriginalTree,_sel2IuType) =+ sel2_ _sel2Ocat _sel2Ocsql _sel2OexpectedTypes _sel2Oidenv _sel2Olib + in ( _lhsOannotatedTree,_lhsOcidenv,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree,_lhsOuType)))+sem_QueryExpr_Select :: Annotation ->+ Distinct ->+ T_SelectList ->+ T_TableRefList ->+ T_MaybeBoolExpr ->+ T_ScalarExprList ->+ T_MaybeBoolExpr ->+ T_ScalarExprDirectionPairList ->+ T_MaybeScalarExpr ->+ T_MaybeScalarExpr ->+ T_QueryExpr +sem_QueryExpr_Select ann_ selDistinct_ selSelectList_ selTref_ selWhere_ selGroupBy_ selHaving_ selOrderBy_ selLimit_ selOffset_ =+ (\ _lhsIcat+ _lhsIcsql+ _lhsIexpectedTypes+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOfixedUpIdentifiersTree :: QueryExpr + _lhsOcidenv :: IDEnv+ _selSelectListOidenv :: IDEnv+ _selWhereOidenv :: IDEnv+ _selGroupByOidenv :: IDEnv+ _selHavingOidenv :: IDEnv+ _selOrderByOidenv :: IDEnv+ _lhsOannotatedTree :: QueryExpr + _selSelectListOlib :: LocalBindings+ _selWhereOlib :: LocalBindings+ _selHavingOlib :: LocalBindings+ _selGroupByOlib :: LocalBindings+ _slTypes :: LocalBindings+ _selOrderByOlib :: LocalBindings+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _tpe :: Et+ _lhsOuType :: (Maybe [(String,Type)])+ _selGroupByOexpectedTypes :: ([Maybe Type])+ _lhsOoriginalTree :: QueryExpr + _selSelectListOcat :: Catalog+ _selTrefOcat :: Catalog+ _selTrefOidenv :: IDEnv+ _selTrefOlib :: LocalBindings+ _selWhereOcat :: Catalog+ _selGroupByOcat :: Catalog+ _selHavingOcat :: Catalog+ _selOrderByOcat :: Catalog+ _selLimitOcat :: Catalog+ _selLimitOidenv :: IDEnv+ _selLimitOlib :: LocalBindings+ _selOffsetOcat :: Catalog+ _selOffsetOidenv :: IDEnv+ _selOffsetOlib :: LocalBindings+ _selSelectListIannotatedTree :: SelectList + _selSelectListIcidenv :: IDEnv+ _selSelectListIfixedUpIdentifiersTree :: SelectList + _selSelectListIlibUpdates :: ([LocalBindingsUpdate])+ _selSelectListIlistType :: ([(String,Maybe Type)])+ _selSelectListIoriginalTree :: SelectList + _selTrefIannotatedTree :: TableRefList + _selTrefIfixedUpIdentifiersTree :: TableRefList + _selTrefIlibUpdates :: ([LocalBindingsUpdate])+ _selTrefInewLib2 :: LocalBindings+ _selTrefIoriginalTree :: TableRefList + _selTrefItrefIDs :: ([(String,[String])])+ _selWhereIannotatedTree :: MaybeBoolExpr + _selWhereIfixedUpIdentifiersTree :: MaybeBoolExpr + _selWhereIoriginalTree :: MaybeBoolExpr + _selGroupByIannotatedTree :: ScalarExprList + _selGroupByIfixedUpIdentifiersTree :: ScalarExprList + _selGroupByIoriginalTree :: ScalarExprList + _selGroupByIuType :: ([Maybe Type])+ _selHavingIannotatedTree :: MaybeBoolExpr + _selHavingIfixedUpIdentifiersTree :: MaybeBoolExpr + _selHavingIoriginalTree :: MaybeBoolExpr + _selOrderByIannotatedTree :: ScalarExprDirectionPairList + _selOrderByIfixedUpIdentifiersTree :: ScalarExprDirectionPairList + _selOrderByIoriginalTree :: ScalarExprDirectionPairList + _selLimitIannotatedTree :: MaybeScalarExpr + _selLimitIfixedUpIdentifiersTree :: MaybeScalarExpr + _selLimitIoriginalTree :: MaybeScalarExpr + _selLimitIuType :: (Maybe Type)+ _selOffsetIannotatedTree :: MaybeScalarExpr + _selOffsetIfixedUpIdentifiersTree :: MaybeScalarExpr + _selOffsetIoriginalTree :: MaybeScalarExpr + _selOffsetIuType :: (Maybe Type)+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 187, column 9)+ _lhsOfixedUpIdentifiersTree =+ Select ann_+ selDistinct_+ _selSelectListIfixedUpIdentifiersTree+ _selTrefIfixedUpIdentifiersTree+ _selWhereIfixedUpIdentifiersTree+ _selGroupByIfixedUpIdentifiersTree+ _selHavingIfixedUpIdentifiersTree+ _selOrderByIfixedUpIdentifiersTree+ _selLimitIfixedUpIdentifiersTree+ _selOffsetIfixedUpIdentifiersTree+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 229, column 14)+ _lhsOcidenv =+ _selSelectListIcidenv+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 270, column 14)+ _trefEnv =+ makeIDEnvP _selTrefItrefIDs+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 271, column 14)+ _includeCorrelations =+ joinIDEnvs _lhsIidenv _trefEnv+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 272, column 14)+ _selSelectListOidenv =+ _trefEnv+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 273, column 14)+ _selWhereOidenv =+ _includeCorrelations+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 274, column 14)+ _selGroupByOidenv =+ _trefEnv+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 275, column 14)+ _selHavingOidenv =+ _includeCorrelations+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 276, column 14)+ _selOrderByOidenv =+ _trefEnv+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 29, column 9)+ _lhsOannotatedTree =+ setTypeAddErrors _tpe _backTree+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 101, column 10)+ _newLib =+ _selTrefInewLib2+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 102, column 10)+ _selSelectListOlib =+ _newLib+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 104, column 10)+ _selWhereOlib =+ joinBindings _newLib _lhsIcsql+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 105, column 10)+ _selHavingOlib =+ joinBindings _newLib _lhsIcsql+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 106, column 10)+ _selGroupByOlib =+ _newLib+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 111, column 10)+ _slTypes =+ createLocalBindings $ Just [("",_selSelectListIlistType)]+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 112, column 10)+ _selOrderByOlib =+ joinBindings _slTypes _newLib+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 143, column 9)+ _lhsOlibUpdates =+ _selSelectListIlibUpdates+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 155, column 9)+ _tpe =+ Right $ SetOfType $ CompositeType $ fromMaybe [] $ liftList _selSelectListIlistType+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 157, column 9)+ _backTree =+ Select ann_+ selDistinct_+ _selSelectListIannotatedTree+ _selTrefIannotatedTree+ _selWhereIannotatedTree+ _selGroupByIannotatedTree+ _selHavingIannotatedTree+ _selOrderByIannotatedTree+ _selLimitIannotatedTree+ _selOffsetIannotatedTree+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 185, column 9)+ _lhsOuType =+ etmt (_tpe >>= unwrapSetOfComposite)+ -- "./TypeChecking/ParameterizedStatements.ag"(line 150, column 14)+ _selGroupByOexpectedTypes =+ []+ -- self rule+ _annotatedTree =+ Select ann_ selDistinct_ _selSelectListIannotatedTree _selTrefIannotatedTree _selWhereIannotatedTree _selGroupByIannotatedTree _selHavingIannotatedTree _selOrderByIannotatedTree _selLimitIannotatedTree _selOffsetIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ Select ann_ selDistinct_ _selSelectListIfixedUpIdentifiersTree _selTrefIfixedUpIdentifiersTree _selWhereIfixedUpIdentifiersTree _selGroupByIfixedUpIdentifiersTree _selHavingIfixedUpIdentifiersTree _selOrderByIfixedUpIdentifiersTree _selLimitIfixedUpIdentifiersTree _selOffsetIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ Select ann_ selDistinct_ _selSelectListIoriginalTree _selTrefIoriginalTree _selWhereIoriginalTree _selGroupByIoriginalTree _selHavingIoriginalTree _selOrderByIoriginalTree _selLimitIoriginalTree _selOffsetIoriginalTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _selSelectListOcat =+ _lhsIcat+ -- copy rule (down)+ _selTrefOcat =+ _lhsIcat+ -- copy rule (down)+ _selTrefOidenv =+ _lhsIidenv+ -- copy rule (down)+ _selTrefOlib =+ _lhsIlib+ -- copy rule (down)+ _selWhereOcat =+ _lhsIcat+ -- copy rule (down)+ _selGroupByOcat =+ _lhsIcat+ -- copy rule (down)+ _selHavingOcat =+ _lhsIcat+ -- copy rule (down)+ _selOrderByOcat =+ _lhsIcat+ -- copy rule (down)+ _selLimitOcat =+ _lhsIcat+ -- copy rule (down)+ _selLimitOidenv =+ _lhsIidenv+ -- copy rule (down)+ _selLimitOlib =+ _lhsIlib+ -- copy rule (down)+ _selOffsetOcat =+ _lhsIcat+ -- copy rule (down)+ _selOffsetOidenv =+ _lhsIidenv+ -- copy rule (down)+ _selOffsetOlib =+ _lhsIlib+ ( _selSelectListIannotatedTree,_selSelectListIcidenv,_selSelectListIfixedUpIdentifiersTree,_selSelectListIlibUpdates,_selSelectListIlistType,_selSelectListIoriginalTree) =+ selSelectList_ _selSelectListOcat _selSelectListOidenv _selSelectListOlib + ( _selTrefIannotatedTree,_selTrefIfixedUpIdentifiersTree,_selTrefIlibUpdates,_selTrefInewLib2,_selTrefIoriginalTree,_selTrefItrefIDs) =+ selTref_ _selTrefOcat _selTrefOidenv _selTrefOlib + ( _selWhereIannotatedTree,_selWhereIfixedUpIdentifiersTree,_selWhereIoriginalTree) =+ selWhere_ _selWhereOcat _selWhereOidenv _selWhereOlib + ( _selGroupByIannotatedTree,_selGroupByIfixedUpIdentifiersTree,_selGroupByIoriginalTree,_selGroupByIuType) =+ selGroupBy_ _selGroupByOcat _selGroupByOexpectedTypes _selGroupByOidenv _selGroupByOlib + ( _selHavingIannotatedTree,_selHavingIfixedUpIdentifiersTree,_selHavingIoriginalTree) =+ selHaving_ _selHavingOcat _selHavingOidenv _selHavingOlib + ( _selOrderByIannotatedTree,_selOrderByIfixedUpIdentifiersTree,_selOrderByIoriginalTree) =+ selOrderBy_ _selOrderByOcat _selOrderByOidenv _selOrderByOlib + ( _selLimitIannotatedTree,_selLimitIfixedUpIdentifiersTree,_selLimitIoriginalTree,_selLimitIuType) =+ selLimit_ _selLimitOcat _selLimitOidenv _selLimitOlib + ( _selOffsetIannotatedTree,_selOffsetIfixedUpIdentifiersTree,_selOffsetIoriginalTree,_selOffsetIuType) =+ selOffset_ _selOffsetOcat _selOffsetOidenv _selOffsetOlib + in ( _lhsOannotatedTree,_lhsOcidenv,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree,_lhsOuType)))+sem_QueryExpr_Values :: Annotation ->+ T_ScalarExprListList ->+ T_QueryExpr +sem_QueryExpr_Values ann_ vll_ =+ (\ _lhsIcat+ _lhsIcsql+ _lhsIexpectedTypes+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOcidenv :: IDEnv+ _lhsOannotatedTree :: QueryExpr + _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _tpe :: Et+ _lhsOuType :: (Maybe [(String,Type)])+ _vllOexpectedTypes :: ([Maybe Type])+ _lhsOfixedUpIdentifiersTree :: QueryExpr + _lhsOoriginalTree :: QueryExpr + _vllOcat :: Catalog+ _vllOidenv :: IDEnv+ _vllOlib :: LocalBindings+ _vllIannotatedTree :: ScalarExprListList + _vllIfixedUpIdentifiersTree :: ScalarExprListList + _vllIoriginalTree :: ScalarExprListList + _vllIuType :: ([[Maybe Type]])+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 231, column 14)+ _lhsOcidenv =+ unimplementedIDEnv+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 29, column 9)+ _lhsOannotatedTree =+ setTypeAddErrors _tpe _backTree+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 141, column 9)+ _lhsOlibUpdates =+ []+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 150, column 9)+ _tpe =+ typeCheckValuesExpr+ _lhsIcat+ _vllIuType+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 153, column 9)+ _backTree =+ Values ann_ _vllIannotatedTree+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 185, column 9)+ _lhsOuType =+ etmt (_tpe >>= unwrapSetOfComposite)+ -- "./TypeChecking/ParameterizedStatements.ag"(line 164, column 14)+ _vllOexpectedTypes =+ _lhsIexpectedTypes+ -- self rule+ _annotatedTree =+ Values ann_ _vllIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ Values ann_ _vllIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ Values ann_ _vllIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _vllOcat =+ _lhsIcat+ -- copy rule (down)+ _vllOidenv =+ _lhsIidenv+ -- copy rule (down)+ _vllOlib =+ _lhsIlib+ ( _vllIannotatedTree,_vllIfixedUpIdentifiersTree,_vllIoriginalTree,_vllIuType) =+ vll_ _vllOcat _vllOexpectedTypes _vllOidenv _vllOlib + in ( _lhsOannotatedTree,_lhsOcidenv,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree,_lhsOuType)))+sem_QueryExpr_WithQueryExpr :: Annotation ->+ T_WithQueryList ->+ T_QueryExpr ->+ T_QueryExpr +sem_QueryExpr_WithQueryExpr ann_ withs_ ex_ =+ (\ _lhsIcat+ _lhsIcsql+ _lhsIexpectedTypes+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOcidenv :: IDEnv+ _lhsOannotatedTree :: QueryExpr + _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _tpe :: Et+ _exOcat :: Catalog+ _withsOcatUpdates :: ([CatalogUpdate])+ _lhsOuType :: (Maybe [(String,Type)])+ _lhsOfixedUpIdentifiersTree :: QueryExpr + _lhsOoriginalTree :: QueryExpr + _withsOcat :: Catalog+ _withsOidenv :: IDEnv+ _withsOlib :: LocalBindings+ _exOcsql :: LocalBindings+ _exOexpectedTypes :: ([Maybe Type])+ _exOidenv :: IDEnv+ _exOlib :: LocalBindings+ _withsIannotatedTree :: WithQueryList + _withsIfixedUpIdentifiersTree :: WithQueryList + _withsIoriginalTree :: WithQueryList + _withsIproducedCat :: Catalog+ _exIannotatedTree :: QueryExpr + _exIcidenv :: IDEnv+ _exIfixedUpIdentifiersTree :: QueryExpr + _exIlibUpdates :: ([LocalBindingsUpdate])+ _exIoriginalTree :: QueryExpr + _exIuType :: (Maybe [(String,Type)])+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 232, column 21)+ _lhsOcidenv =+ _exIcidenv+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 29, column 9)+ _lhsOannotatedTree =+ setTypeAddErrors _tpe _backTree+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 145, column 9)+ _lhsOlibUpdates =+ _exIlibUpdates+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 178, column 9)+ _tpe =+ lmt ((SetOfType . CompositeType) <$> _exIuType)+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 179, column 9)+ _backTree =+ WithQueryExpr ann_ _withsIannotatedTree _exIannotatedTree+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 180, column 9)+ _exOcat =+ _withsIproducedCat+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 181, column 9)+ _withsOcatUpdates =+ []+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 185, column 9)+ _lhsOuType =+ etmt (_tpe >>= unwrapSetOfComposite)+ -- self rule+ _annotatedTree =+ WithQueryExpr ann_ _withsIannotatedTree _exIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ WithQueryExpr ann_ _withsIfixedUpIdentifiersTree _exIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ WithQueryExpr ann_ _withsIoriginalTree _exIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _withsOcat =+ _lhsIcat+ -- copy rule (down)+ _withsOidenv =+ _lhsIidenv+ -- copy rule (down)+ _withsOlib =+ _lhsIlib+ -- copy rule (down)+ _exOcsql =+ _lhsIcsql+ -- copy rule (down)+ _exOexpectedTypes =+ _lhsIexpectedTypes+ -- copy rule (down)+ _exOidenv =+ _lhsIidenv+ -- copy rule (down)+ _exOlib =+ _lhsIlib+ ( _withsIannotatedTree,_withsIfixedUpIdentifiersTree,_withsIoriginalTree,_withsIproducedCat) =+ withs_ _withsOcat _withsOcatUpdates _withsOidenv _withsOlib + ( _exIannotatedTree,_exIcidenv,_exIfixedUpIdentifiersTree,_exIlibUpdates,_exIoriginalTree,_exIuType) =+ ex_ _exOcat _exOcsql _exOexpectedTypes _exOidenv _exOlib + in ( _lhsOannotatedTree,_lhsOcidenv,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree,_lhsOuType)))+-- Root --------------------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + producedCat : Catalog+ producedLib : LocalBindings+ alternatives:+ alternative Root:+ child statements : StatementList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+data Root = Root (StatementList ) + deriving ( Show)+-- cata+sem_Root :: Root ->+ T_Root +sem_Root (Root _statements ) =+ (sem_Root_Root (sem_StatementList _statements ) )+-- semantic domain+type T_Root = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( Root ,Root ,Root ,Catalog,LocalBindings)+data Inh_Root = Inh_Root {cat_Inh_Root :: Catalog,idenv_Inh_Root :: IDEnv,lib_Inh_Root :: LocalBindings}+data Syn_Root = Syn_Root {annotatedTree_Syn_Root :: Root ,fixedUpIdentifiersTree_Syn_Root :: Root ,originalTree_Syn_Root :: Root ,producedCat_Syn_Root :: Catalog,producedLib_Syn_Root :: LocalBindings}+wrap_Root :: T_Root ->+ Inh_Root ->+ Syn_Root +wrap_Root sem (Inh_Root _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOproducedCat,_lhsOproducedLib) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_Root _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree _lhsOproducedCat _lhsOproducedLib ))+sem_Root_Root :: T_StatementList ->+ T_Root +sem_Root_Root statements_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _statementsOcatUpdates :: ([CatalogUpdate])+ _statementsOlibUpdates :: ([LocalBindingsUpdate])+ _lhsOannotatedTree :: Root + _lhsOfixedUpIdentifiersTree :: Root + _lhsOoriginalTree :: Root + _lhsOproducedCat :: Catalog+ _lhsOproducedLib :: LocalBindings+ _statementsOcat :: Catalog+ _statementsOidenv :: IDEnv+ _statementsOlib :: LocalBindings+ _statementsIannotatedTree :: StatementList + _statementsIfixedUpIdentifiersTree :: StatementList + _statementsIoriginalTree :: StatementList + _statementsIproducedCat :: Catalog+ _statementsIproducedLib :: LocalBindings+ -- "./TypeChecking/Statements.ag"(line 107, column 12)+ _statementsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 108, column 12)+ _statementsOlibUpdates =+ []+ -- self rule+ _annotatedTree =+ Root _statementsIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ Root _statementsIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ Root _statementsIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (up)+ _lhsOproducedCat =+ _statementsIproducedCat+ -- copy rule (up)+ _lhsOproducedLib =+ _statementsIproducedLib+ -- copy rule (down)+ _statementsOcat =+ _lhsIcat+ -- copy rule (down)+ _statementsOidenv =+ _lhsIidenv+ -- copy rule (down)+ _statementsOlib =+ _lhsIlib+ ( _statementsIannotatedTree,_statementsIfixedUpIdentifiersTree,_statementsIoriginalTree,_statementsIproducedCat,_statementsIproducedLib) =+ statements_ _statementsOcat _statementsOcatUpdates _statementsOidenv _statementsOlib _statementsOlibUpdates + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOproducedCat,_lhsOproducedLib)))+-- RowConstraint -----------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + alternatives:+ alternative NotNullConstraint:+ child ann : {Annotation}+ child name : {String}+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative NullConstraint:+ child ann : {Annotation}+ child name : {String}+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative RowCheckConstraint:+ child ann : {Annotation}+ child name : {String}+ child expr : ScalarExpr + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative RowPrimaryKeyConstraint:+ child ann : {Annotation}+ child name : {String}+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative RowReferenceConstraint:+ child ann : {Annotation}+ child name : {String}+ child table : {String}+ child att : {Maybe String}+ child onUpdate : {Cascade}+ child onDelete : {Cascade}+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative RowUniqueConstraint:+ child ann : {Annotation}+ child name : {String}+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+data RowConstraint = NotNullConstraint (Annotation) (String) + | NullConstraint (Annotation) (String) + | RowCheckConstraint (Annotation) (String) (ScalarExpr ) + | RowPrimaryKeyConstraint (Annotation) (String) + | RowReferenceConstraint (Annotation) (String) (String) ((Maybe String)) (Cascade) (Cascade) + | RowUniqueConstraint (Annotation) (String) + deriving ( Data,Eq,Show,Typeable)+-- cata+sem_RowConstraint :: RowConstraint ->+ T_RowConstraint +sem_RowConstraint (NotNullConstraint _ann _name ) =+ (sem_RowConstraint_NotNullConstraint _ann _name )+sem_RowConstraint (NullConstraint _ann _name ) =+ (sem_RowConstraint_NullConstraint _ann _name )+sem_RowConstraint (RowCheckConstraint _ann _name _expr ) =+ (sem_RowConstraint_RowCheckConstraint _ann _name (sem_ScalarExpr _expr ) )+sem_RowConstraint (RowPrimaryKeyConstraint _ann _name ) =+ (sem_RowConstraint_RowPrimaryKeyConstraint _ann _name )+sem_RowConstraint (RowReferenceConstraint _ann _name _table _att _onUpdate _onDelete ) =+ (sem_RowConstraint_RowReferenceConstraint _ann _name _table _att _onUpdate _onDelete )+sem_RowConstraint (RowUniqueConstraint _ann _name ) =+ (sem_RowConstraint_RowUniqueConstraint _ann _name )+-- semantic domain+type T_RowConstraint = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( RowConstraint ,RowConstraint ,RowConstraint )+data Inh_RowConstraint = Inh_RowConstraint {cat_Inh_RowConstraint :: Catalog,idenv_Inh_RowConstraint :: IDEnv,lib_Inh_RowConstraint :: LocalBindings}+data Syn_RowConstraint = Syn_RowConstraint {annotatedTree_Syn_RowConstraint :: RowConstraint ,fixedUpIdentifiersTree_Syn_RowConstraint :: RowConstraint ,originalTree_Syn_RowConstraint :: RowConstraint }+wrap_RowConstraint :: T_RowConstraint ->+ Inh_RowConstraint ->+ Syn_RowConstraint +wrap_RowConstraint sem (Inh_RowConstraint _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_RowConstraint _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree ))+sem_RowConstraint_NotNullConstraint :: Annotation ->+ String ->+ T_RowConstraint +sem_RowConstraint_NotNullConstraint ann_ name_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: RowConstraint + _lhsOfixedUpIdentifiersTree :: RowConstraint + _lhsOoriginalTree :: RowConstraint + -- self rule+ _annotatedTree =+ NotNullConstraint ann_ name_+ -- self rule+ _fixedUpIdentifiersTree =+ NotNullConstraint ann_ name_+ -- self rule+ _originalTree =+ NotNullConstraint ann_ name_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_RowConstraint_NullConstraint :: Annotation ->+ String ->+ T_RowConstraint +sem_RowConstraint_NullConstraint ann_ name_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: RowConstraint + _lhsOfixedUpIdentifiersTree :: RowConstraint + _lhsOoriginalTree :: RowConstraint + -- self rule+ _annotatedTree =+ NullConstraint ann_ name_+ -- self rule+ _fixedUpIdentifiersTree =+ NullConstraint ann_ name_+ -- self rule+ _originalTree =+ NullConstraint ann_ name_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_RowConstraint_RowCheckConstraint :: Annotation ->+ String ->+ T_ScalarExpr ->+ T_RowConstraint +sem_RowConstraint_RowCheckConstraint ann_ name_ expr_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _exprOexpectedType :: (Maybe Type)+ _lhsOannotatedTree :: RowConstraint + _lhsOfixedUpIdentifiersTree :: RowConstraint + _lhsOoriginalTree :: RowConstraint + _exprOcat :: Catalog+ _exprOidenv :: IDEnv+ _exprOlib :: LocalBindings+ _exprIannotatedTree :: ScalarExpr + _exprIfixedUpIdentifiersTree :: ScalarExpr + _exprIoriginalTree :: ScalarExpr + _exprIuType :: (Maybe Type)+ -- "./TypeChecking/ParameterizedStatements.ag"(line 103, column 26)+ _exprOexpectedType =+ Nothing+ -- self rule+ _annotatedTree =+ RowCheckConstraint ann_ name_ _exprIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ RowCheckConstraint ann_ name_ _exprIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ RowCheckConstraint ann_ name_ _exprIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _exprOcat =+ _lhsIcat+ -- copy rule (down)+ _exprOidenv =+ _lhsIidenv+ -- copy rule (down)+ _exprOlib =+ _lhsIlib+ ( _exprIannotatedTree,_exprIfixedUpIdentifiersTree,_exprIoriginalTree,_exprIuType) =+ expr_ _exprOcat _exprOexpectedType _exprOidenv _exprOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_RowConstraint_RowPrimaryKeyConstraint :: Annotation ->+ String ->+ T_RowConstraint +sem_RowConstraint_RowPrimaryKeyConstraint ann_ name_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: RowConstraint + _lhsOfixedUpIdentifiersTree :: RowConstraint + _lhsOoriginalTree :: RowConstraint + -- self rule+ _annotatedTree =+ RowPrimaryKeyConstraint ann_ name_+ -- self rule+ _fixedUpIdentifiersTree =+ RowPrimaryKeyConstraint ann_ name_+ -- self rule+ _originalTree =+ RowPrimaryKeyConstraint ann_ name_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_RowConstraint_RowReferenceConstraint :: Annotation ->+ String ->+ String ->+ (Maybe String) ->+ Cascade ->+ Cascade ->+ T_RowConstraint +sem_RowConstraint_RowReferenceConstraint ann_ name_ table_ att_ onUpdate_ onDelete_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: RowConstraint + _lhsOfixedUpIdentifiersTree :: RowConstraint + _lhsOoriginalTree :: RowConstraint + -- self rule+ _annotatedTree =+ RowReferenceConstraint ann_ name_ table_ att_ onUpdate_ onDelete_+ -- self rule+ _fixedUpIdentifiersTree =+ RowReferenceConstraint ann_ name_ table_ att_ onUpdate_ onDelete_+ -- self rule+ _originalTree =+ RowReferenceConstraint ann_ name_ table_ att_ onUpdate_ onDelete_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_RowConstraint_RowUniqueConstraint :: Annotation ->+ String ->+ T_RowConstraint +sem_RowConstraint_RowUniqueConstraint ann_ name_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: RowConstraint + _lhsOfixedUpIdentifiersTree :: RowConstraint + _lhsOoriginalTree :: RowConstraint + -- self rule+ _annotatedTree =+ RowUniqueConstraint ann_ name_+ -- self rule+ _fixedUpIdentifiersTree =+ RowUniqueConstraint ann_ name_+ -- self rule+ _originalTree =+ RowUniqueConstraint ann_ name_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+-- RowConstraintList -------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + alternatives:+ alternative Cons:+ child hd : RowConstraint + child tl : RowConstraintList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Nil:+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type RowConstraintList = [RowConstraint ]+-- cata+sem_RowConstraintList :: RowConstraintList ->+ T_RowConstraintList +sem_RowConstraintList list =+ (Prelude.foldr sem_RowConstraintList_Cons sem_RowConstraintList_Nil (Prelude.map sem_RowConstraint list) )+-- semantic domain+type T_RowConstraintList = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( RowConstraintList ,RowConstraintList ,RowConstraintList )+data Inh_RowConstraintList = Inh_RowConstraintList {cat_Inh_RowConstraintList :: Catalog,idenv_Inh_RowConstraintList :: IDEnv,lib_Inh_RowConstraintList :: LocalBindings}+data Syn_RowConstraintList = Syn_RowConstraintList {annotatedTree_Syn_RowConstraintList :: RowConstraintList ,fixedUpIdentifiersTree_Syn_RowConstraintList :: RowConstraintList ,originalTree_Syn_RowConstraintList :: RowConstraintList }+wrap_RowConstraintList :: T_RowConstraintList ->+ Inh_RowConstraintList ->+ Syn_RowConstraintList +wrap_RowConstraintList sem (Inh_RowConstraintList _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_RowConstraintList _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree ))+sem_RowConstraintList_Cons :: T_RowConstraint ->+ T_RowConstraintList ->+ T_RowConstraintList +sem_RowConstraintList_Cons hd_ tl_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: RowConstraintList + _lhsOfixedUpIdentifiersTree :: RowConstraintList + _lhsOoriginalTree :: RowConstraintList + _hdOcat :: Catalog+ _hdOidenv :: IDEnv+ _hdOlib :: LocalBindings+ _tlOcat :: Catalog+ _tlOidenv :: IDEnv+ _tlOlib :: LocalBindings+ _hdIannotatedTree :: RowConstraint + _hdIfixedUpIdentifiersTree :: RowConstraint + _hdIoriginalTree :: RowConstraint + _tlIannotatedTree :: RowConstraintList + _tlIfixedUpIdentifiersTree :: RowConstraintList + _tlIoriginalTree :: RowConstraintList + -- self rule+ _annotatedTree =+ (:) _hdIannotatedTree _tlIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ (:) _hdIfixedUpIdentifiersTree _tlIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ (:) _hdIoriginalTree _tlIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _hdOcat =+ _lhsIcat+ -- copy rule (down)+ _hdOidenv =+ _lhsIidenv+ -- copy rule (down)+ _hdOlib =+ _lhsIlib+ -- copy rule (down)+ _tlOcat =+ _lhsIcat+ -- copy rule (down)+ _tlOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tlOlib =+ _lhsIlib+ ( _hdIannotatedTree,_hdIfixedUpIdentifiersTree,_hdIoriginalTree) =+ hd_ _hdOcat _hdOidenv _hdOlib + ( _tlIannotatedTree,_tlIfixedUpIdentifiersTree,_tlIoriginalTree) =+ tl_ _tlOcat _tlOidenv _tlOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_RowConstraintList_Nil :: T_RowConstraintList +sem_RowConstraintList_Nil =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: RowConstraintList + _lhsOfixedUpIdentifiersTree :: RowConstraintList + _lhsOoriginalTree :: RowConstraintList + -- self rule+ _annotatedTree =+ []+ -- self rule+ _fixedUpIdentifiersTree =+ []+ -- self rule+ _originalTree =+ []+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+-- SQIdentifier ------------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + tbAnnotatedTree : SQIdentifier + tbUType : Maybe ([(String,Type)],[(String,Type)])+ alternatives:+ alternative SQIdentifier:+ child ann : {Annotation}+ child is : {[String]}+ visit 0:+ local tpe : {E ([(String,Type)],[(String,Type)])}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+data SQIdentifier = SQIdentifier (Annotation) (([String])) + deriving ( Data,Eq,Show,Typeable)+-- cata+sem_SQIdentifier :: SQIdentifier ->+ T_SQIdentifier +sem_SQIdentifier (SQIdentifier _ann _is ) =+ (sem_SQIdentifier_SQIdentifier _ann _is )+-- semantic domain+type T_SQIdentifier = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( SQIdentifier ,SQIdentifier ,SQIdentifier ,SQIdentifier ,(Maybe ([(String,Type)],[(String,Type)])))+data Inh_SQIdentifier = Inh_SQIdentifier {cat_Inh_SQIdentifier :: Catalog,idenv_Inh_SQIdentifier :: IDEnv,lib_Inh_SQIdentifier :: LocalBindings}+data Syn_SQIdentifier = Syn_SQIdentifier {annotatedTree_Syn_SQIdentifier :: SQIdentifier ,fixedUpIdentifiersTree_Syn_SQIdentifier :: SQIdentifier ,originalTree_Syn_SQIdentifier :: SQIdentifier ,tbAnnotatedTree_Syn_SQIdentifier :: SQIdentifier ,tbUType_Syn_SQIdentifier :: (Maybe ([(String,Type)],[(String,Type)]))}+wrap_SQIdentifier :: T_SQIdentifier ->+ Inh_SQIdentifier ->+ Syn_SQIdentifier +wrap_SQIdentifier sem (Inh_SQIdentifier _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOtbAnnotatedTree,_lhsOtbUType) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_SQIdentifier _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree _lhsOtbAnnotatedTree _lhsOtbUType ))+sem_SQIdentifier_SQIdentifier :: Annotation ->+ ([String]) ->+ T_SQIdentifier +sem_SQIdentifier_SQIdentifier ann_ is_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _tpe :: (E ([(String,Type)],[(String,Type)]))+ _lhsOtbUType :: (Maybe ([(String,Type)],[(String,Type)]))+ _lhsOtbAnnotatedTree :: SQIdentifier + _lhsOannotatedTree :: SQIdentifier + _lhsOfixedUpIdentifiersTree :: SQIdentifier + _lhsOoriginalTree :: SQIdentifier + -- "./TypeChecking/Misc.ag"(line 67, column 9)+ _tpe =+ catCompositeAttrsPair _lhsIcat relationComposites (last is_)+ -- "./TypeChecking/Misc.ag"(line 68, column 9)+ _lhsOtbUType =+ either (const Nothing) Just _tpe+ -- "./TypeChecking/Misc.ag"(line 69, column 9)+ _lhsOtbAnnotatedTree =+ updateAnnotation+ (\a -> a {errs = errs a ++ tes _tpe }) _backTree+ -- "./TypeChecking/Misc.ag"(line 72, column 9)+ _backTree =+ SQIdentifier ann_ is_+ -- self rule+ _annotatedTree =+ SQIdentifier ann_ is_+ -- self rule+ _fixedUpIdentifiersTree =+ SQIdentifier ann_ is_+ -- self rule+ _originalTree =+ SQIdentifier ann_ is_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOtbAnnotatedTree,_lhsOtbUType)))+-- ScalarExpr --------------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ expectedType : Maybe Type+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + uType : Maybe Type+ alternatives:+ alternative BooleanLit:+ child ann : {Annotation}+ child b : {Bool}+ visit 0:+ local prototype : {Maybe FunctionPrototype}+ local tpe : {Et}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Case:+ child ann : {Annotation}+ child cases : CaseScalarExprListScalarExprPairList + child els : MaybeScalarExpr + visit 0:+ local prototype : {Maybe FunctionPrototype}+ local whenTypes : _+ local thenTypes : _+ local tpe : {Et}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative CaseSimple:+ child ann : {Annotation}+ child value : ScalarExpr + child cases : CaseScalarExprListScalarExprPairList + child els : MaybeScalarExpr + visit 0:+ local prototype : {Maybe FunctionPrototype}+ local whenTypes : _+ local thenTypes : _+ local tpe : {Et}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Cast:+ child ann : {Annotation}+ child expr : ScalarExpr + child tn : TypeName + visit 0:+ local prototype : {Maybe FunctionPrototype}+ local tpe : {Et}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Exists:+ child ann : {Annotation}+ child sel : QueryExpr + visit 0:+ local prototype : {Maybe FunctionPrototype}+ local tpe : {Et}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Extract:+ child ann : {Annotation}+ child field : {ExtractField}+ child e : ScalarExpr + visit 0:+ local prototype : {Maybe FunctionPrototype}+ local tpe : {Et}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative FunCall:+ child ann : {Annotation}+ child funName : {String}+ child args : ScalarExprList + visit 0:+ local _tup1 : _+ local tpe : {Et}+ local prototype : _+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Identifier:+ child ann : {Annotation}+ child i : {String}+ visit 0:+ local prototype : {Maybe FunctionPrototype}+ local tpe : {Et}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative InPredicate:+ child ann : {Annotation}+ child expr : ScalarExpr + child i : {Bool}+ child list : InList + visit 0:+ local prototype : {Maybe FunctionPrototype}+ local rt : {Either [TypeError] Type}+ local tpe : {Et}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Interval:+ child ann : {Annotation}+ child value : {String}+ child field : {IntervalField}+ child prec : {Maybe Int}+ visit 0:+ local prototype : {Maybe FunctionPrototype}+ local tpe : {Et}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative LiftOperator:+ child ann : {Annotation}+ child oper : {String}+ child flav : {LiftFlavour}+ child args : ScalarExprList + visit 0:+ local prototype : {Maybe FunctionPrototype}+ local tpe : {Et}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative NullLit:+ child ann : {Annotation}+ visit 0:+ local prototype : {Maybe FunctionPrototype}+ local tpe : {Et}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative NumberLit:+ child ann : {Annotation}+ child d : {String}+ visit 0:+ local prototype : {Maybe FunctionPrototype}+ local tpe : {Et}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Placeholder:+ child ann : {Annotation}+ visit 0:+ local prototype : {Maybe FunctionPrototype}+ local tpe : {Et}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative PositionalArg:+ child ann : {Annotation}+ child p : {Integer}+ visit 0:+ local prototype : {Maybe FunctionPrototype}+ local tpe : {Et}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative QIdentifier:+ child ann : {Annotation}+ child qual : ScalarExpr + child i : {String}+ visit 0:+ local prototype : {Maybe FunctionPrototype}+ local tpe : {Et}+ local qid : {Maybe String}+ local backTree : _+ local qAnnTreeNoUnrec : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative ScalarSubQuery:+ child ann : {Annotation}+ child sel : QueryExpr + visit 0:+ local prototype : {Maybe FunctionPrototype}+ local tpe : {Et}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative StringLit:+ child ann : {Annotation}+ child value : {String}+ visit 0:+ local prototype : {Maybe FunctionPrototype}+ local tpe : {Et}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative TypedStringLit:+ child ann : {Annotation}+ child tn : TypeName + child value : {String}+ visit 0:+ local prototype : {Maybe FunctionPrototype}+ local tpe : {Et}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative WindowFn:+ child ann : {Annotation}+ child fn : ScalarExpr + child partitionBy : ScalarExprList + child orderBy : ScalarExprList + child dir : {Direction}+ child frm : {FrameClause}+ visit 0:+ local prototype : {Maybe FunctionPrototype}+ local tpe : {Et}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+data ScalarExpr = BooleanLit (Annotation) (Bool) + | Case (Annotation) (CaseScalarExprListScalarExprPairList ) (MaybeScalarExpr ) + | CaseSimple (Annotation) (ScalarExpr ) (CaseScalarExprListScalarExprPairList ) (MaybeScalarExpr ) + | Cast (Annotation) (ScalarExpr ) (TypeName ) + | Exists (Annotation) (QueryExpr ) + | Extract (Annotation) (ExtractField) (ScalarExpr ) + | FunCall (Annotation) (String) (ScalarExprList ) + | Identifier (Annotation) (String) + | InPredicate (Annotation) (ScalarExpr ) (Bool) (InList ) + | Interval (Annotation) (String) (IntervalField) ((Maybe Int)) + | LiftOperator (Annotation) (String) (LiftFlavour) (ScalarExprList ) + | NullLit (Annotation) + | NumberLit (Annotation) (String) + | Placeholder (Annotation) + | PositionalArg (Annotation) (Integer) + | QIdentifier (Annotation) (ScalarExpr ) (String) + | ScalarSubQuery (Annotation) (QueryExpr ) + | StringLit (Annotation) (String) + | TypedStringLit (Annotation) (TypeName ) (String) + | WindowFn (Annotation) (ScalarExpr ) (ScalarExprList ) (ScalarExprList ) (Direction) (FrameClause) + deriving ( Data,Eq,Show,Typeable)+-- cata+sem_ScalarExpr :: ScalarExpr ->+ T_ScalarExpr +sem_ScalarExpr (BooleanLit _ann _b ) =+ (sem_ScalarExpr_BooleanLit _ann _b )+sem_ScalarExpr (Case _ann _cases _els ) =+ (sem_ScalarExpr_Case _ann (sem_CaseScalarExprListScalarExprPairList _cases ) (sem_MaybeScalarExpr _els ) )+sem_ScalarExpr (CaseSimple _ann _value _cases _els ) =+ (sem_ScalarExpr_CaseSimple _ann (sem_ScalarExpr _value ) (sem_CaseScalarExprListScalarExprPairList _cases ) (sem_MaybeScalarExpr _els ) )+sem_ScalarExpr (Cast _ann _expr _tn ) =+ (sem_ScalarExpr_Cast _ann (sem_ScalarExpr _expr ) (sem_TypeName _tn ) )+sem_ScalarExpr (Exists _ann _sel ) =+ (sem_ScalarExpr_Exists _ann (sem_QueryExpr _sel ) )+sem_ScalarExpr (Extract _ann _field _e ) =+ (sem_ScalarExpr_Extract _ann _field (sem_ScalarExpr _e ) )+sem_ScalarExpr (FunCall _ann _funName _args ) =+ (sem_ScalarExpr_FunCall _ann _funName (sem_ScalarExprList _args ) )+sem_ScalarExpr (Identifier _ann _i ) =+ (sem_ScalarExpr_Identifier _ann _i )+sem_ScalarExpr (InPredicate _ann _expr _i _list ) =+ (sem_ScalarExpr_InPredicate _ann (sem_ScalarExpr _expr ) _i (sem_InList _list ) )+sem_ScalarExpr (Interval _ann _value _field _prec ) =+ (sem_ScalarExpr_Interval _ann _value _field _prec )+sem_ScalarExpr (LiftOperator _ann _oper _flav _args ) =+ (sem_ScalarExpr_LiftOperator _ann _oper _flav (sem_ScalarExprList _args ) )+sem_ScalarExpr (NullLit _ann ) =+ (sem_ScalarExpr_NullLit _ann )+sem_ScalarExpr (NumberLit _ann _d ) =+ (sem_ScalarExpr_NumberLit _ann _d )+sem_ScalarExpr (Placeholder _ann ) =+ (sem_ScalarExpr_Placeholder _ann )+sem_ScalarExpr (PositionalArg _ann _p ) =+ (sem_ScalarExpr_PositionalArg _ann _p )+sem_ScalarExpr (QIdentifier _ann _qual _i ) =+ (sem_ScalarExpr_QIdentifier _ann (sem_ScalarExpr _qual ) _i )+sem_ScalarExpr (ScalarSubQuery _ann _sel ) =+ (sem_ScalarExpr_ScalarSubQuery _ann (sem_QueryExpr _sel ) )+sem_ScalarExpr (StringLit _ann _value ) =+ (sem_ScalarExpr_StringLit _ann _value )+sem_ScalarExpr (TypedStringLit _ann _tn _value ) =+ (sem_ScalarExpr_TypedStringLit _ann (sem_TypeName _tn ) _value )+sem_ScalarExpr (WindowFn _ann _fn _partitionBy _orderBy _dir _frm ) =+ (sem_ScalarExpr_WindowFn _ann (sem_ScalarExpr _fn ) (sem_ScalarExprList _partitionBy ) (sem_ScalarExprList _orderBy ) _dir _frm )+-- semantic domain+type T_ScalarExpr = Catalog ->+ (Maybe Type) ->+ IDEnv ->+ LocalBindings ->+ ( ScalarExpr ,ScalarExpr ,ScalarExpr ,(Maybe Type))+data Inh_ScalarExpr = Inh_ScalarExpr {cat_Inh_ScalarExpr :: Catalog,expectedType_Inh_ScalarExpr :: (Maybe Type),idenv_Inh_ScalarExpr :: IDEnv,lib_Inh_ScalarExpr :: LocalBindings}+data Syn_ScalarExpr = Syn_ScalarExpr {annotatedTree_Syn_ScalarExpr :: ScalarExpr ,fixedUpIdentifiersTree_Syn_ScalarExpr :: ScalarExpr ,originalTree_Syn_ScalarExpr :: ScalarExpr ,uType_Syn_ScalarExpr :: (Maybe Type)}+wrap_ScalarExpr :: T_ScalarExpr ->+ Inh_ScalarExpr ->+ Syn_ScalarExpr +wrap_ScalarExpr sem (Inh_ScalarExpr _lhsIcat _lhsIexpectedType _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType) = sem _lhsIcat _lhsIexpectedType _lhsIidenv _lhsIlib + in (Syn_ScalarExpr _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree _lhsOuType ))+sem_ScalarExpr_BooleanLit :: Annotation ->+ Bool ->+ T_ScalarExpr +sem_ScalarExpr_BooleanLit ann_ b_ =+ (\ _lhsIcat+ _lhsIexpectedType+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExpr + _prototype :: (Maybe FunctionPrototype)+ _lhsOuType :: (Maybe Type)+ _tpe :: Et+ _lhsOfixedUpIdentifiersTree :: ScalarExpr + _lhsOoriginalTree :: ScalarExpr + -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 24, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (setTypeAddErrorsA _tpe+ . \a -> a {fnProt = _prototype+ ,infType = msum [_lhsIexpectedType+ ,etmt _tpe+ ,Nothing]}) _backTree+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 46, column 9)+ _prototype =+ Nothing+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 104, column 9)+ _lhsOuType =+ etmt _tpe+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 155, column 19)+ _tpe =+ Right typeBool+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 165, column 9)+ _backTree =+ BooleanLit ann_ b_+ -- self rule+ _annotatedTree =+ BooleanLit ann_ b_+ -- self rule+ _fixedUpIdentifiersTree =+ BooleanLit ann_ b_+ -- self rule+ _originalTree =+ BooleanLit ann_ b_+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+sem_ScalarExpr_Case :: Annotation ->+ T_CaseScalarExprListScalarExprPairList ->+ T_MaybeScalarExpr ->+ T_ScalarExpr +sem_ScalarExpr_Case ann_ cases_ els_ =+ (\ _lhsIcat+ _lhsIexpectedType+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExpr + _prototype :: (Maybe FunctionPrototype)+ _lhsOuType :: (Maybe Type)+ _tpe :: Et+ _lhsOfixedUpIdentifiersTree :: ScalarExpr + _lhsOoriginalTree :: ScalarExpr + _casesOcat :: Catalog+ _casesOidenv :: IDEnv+ _casesOlib :: LocalBindings+ _elsOcat :: Catalog+ _elsOidenv :: IDEnv+ _elsOlib :: LocalBindings+ _casesIannotatedTree :: CaseScalarExprListScalarExprPairList + _casesIfixedUpIdentifiersTree :: CaseScalarExprListScalarExprPairList + _casesIoriginalTree :: CaseScalarExprListScalarExprPairList + _casesIthenTypes :: ([Maybe Type])+ _casesIwhenTypes :: ([[Maybe Type]])+ _elsIannotatedTree :: MaybeScalarExpr + _elsIfixedUpIdentifiersTree :: MaybeScalarExpr + _elsIoriginalTree :: MaybeScalarExpr + _elsIuType :: (Maybe Type)+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 24, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (setTypeAddErrorsA _tpe+ . \a -> a {fnProt = _prototype+ ,infType = msum [_lhsIexpectedType+ ,etmt _tpe+ ,Nothing]}) _backTree+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 46, column 9)+ _prototype =+ Nothing+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 104, column 9)+ _lhsOuType =+ etmt _tpe+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 276, column 9)+ _whenTypes =+ _casesIwhenTypes+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 277, column 9)+ _thenTypes =+ _casesIthenTypes ++ maybe [] ((:[]) . Just) _elsIuType+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 281, column 9)+ _tpe =+ do+ wt <- mapM lmt $ concat _whenTypes+ errorWhen (any (/= typeBool) wt)+ [WrongTypes typeBool wt]+ tt <- mapM lmt _thenTypes+ resolveResultSetType _lhsIcat tt+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 289, column 9)+ _backTree =+ Case ann_ _casesIannotatedTree _elsIannotatedTree+ -- self rule+ _annotatedTree =+ Case ann_ _casesIannotatedTree _elsIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ Case ann_ _casesIfixedUpIdentifiersTree _elsIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ Case ann_ _casesIoriginalTree _elsIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _casesOcat =+ _lhsIcat+ -- copy rule (down)+ _casesOidenv =+ _lhsIidenv+ -- copy rule (down)+ _casesOlib =+ _lhsIlib+ -- copy rule (down)+ _elsOcat =+ _lhsIcat+ -- copy rule (down)+ _elsOidenv =+ _lhsIidenv+ -- copy rule (down)+ _elsOlib =+ _lhsIlib+ ( _casesIannotatedTree,_casesIfixedUpIdentifiersTree,_casesIoriginalTree,_casesIthenTypes,_casesIwhenTypes) =+ cases_ _casesOcat _casesOidenv _casesOlib + ( _elsIannotatedTree,_elsIfixedUpIdentifiersTree,_elsIoriginalTree,_elsIuType) =+ els_ _elsOcat _elsOidenv _elsOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+sem_ScalarExpr_CaseSimple :: Annotation ->+ T_ScalarExpr ->+ T_CaseScalarExprListScalarExprPairList ->+ T_MaybeScalarExpr ->+ T_ScalarExpr +sem_ScalarExpr_CaseSimple ann_ value_ cases_ els_ =+ (\ _lhsIcat+ _lhsIexpectedType+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExpr + _prototype :: (Maybe FunctionPrototype)+ _lhsOuType :: (Maybe Type)+ _tpe :: Et+ _lhsOfixedUpIdentifiersTree :: ScalarExpr + _lhsOoriginalTree :: ScalarExpr + _valueOcat :: Catalog+ _valueOexpectedType :: (Maybe Type)+ _valueOidenv :: IDEnv+ _valueOlib :: LocalBindings+ _casesOcat :: Catalog+ _casesOidenv :: IDEnv+ _casesOlib :: LocalBindings+ _elsOcat :: Catalog+ _elsOidenv :: IDEnv+ _elsOlib :: LocalBindings+ _valueIannotatedTree :: ScalarExpr + _valueIfixedUpIdentifiersTree :: ScalarExpr + _valueIoriginalTree :: ScalarExpr + _valueIuType :: (Maybe Type)+ _casesIannotatedTree :: CaseScalarExprListScalarExprPairList + _casesIfixedUpIdentifiersTree :: CaseScalarExprListScalarExprPairList + _casesIoriginalTree :: CaseScalarExprListScalarExprPairList + _casesIthenTypes :: ([Maybe Type])+ _casesIwhenTypes :: ([[Maybe Type]])+ _elsIannotatedTree :: MaybeScalarExpr + _elsIfixedUpIdentifiersTree :: MaybeScalarExpr + _elsIoriginalTree :: MaybeScalarExpr + _elsIuType :: (Maybe Type)+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 24, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (setTypeAddErrorsA _tpe+ . \a -> a {fnProt = _prototype+ ,infType = msum [_lhsIexpectedType+ ,etmt _tpe+ ,Nothing]}) _backTree+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 46, column 9)+ _prototype =+ Nothing+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 104, column 9)+ _lhsOuType =+ etmt _tpe+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 276, column 9)+ _whenTypes =+ _casesIwhenTypes+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 277, column 9)+ _thenTypes =+ _casesIthenTypes ++ maybe [] ((:[]) . Just) _elsIuType+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 294, column 9)+ _tpe =+ do+ wt <- mapM lmt $ concat _whenTypes+ vt <- lmt _valueIuType+ _ <- resolveResultSetType _lhsIcat (vt : wt)+ tt <- mapM lmt _thenTypes+ resolveResultSetType _lhsIcat tt+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 301, column 9)+ _backTree =+ CaseSimple ann_+ _valueIannotatedTree+ _casesIannotatedTree+ _elsIannotatedTree+ -- self rule+ _annotatedTree =+ CaseSimple ann_ _valueIannotatedTree _casesIannotatedTree _elsIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ CaseSimple ann_ _valueIfixedUpIdentifiersTree _casesIfixedUpIdentifiersTree _elsIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ CaseSimple ann_ _valueIoriginalTree _casesIoriginalTree _elsIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _valueOcat =+ _lhsIcat+ -- copy rule (down)+ _valueOexpectedType =+ _lhsIexpectedType+ -- copy rule (down)+ _valueOidenv =+ _lhsIidenv+ -- copy rule (down)+ _valueOlib =+ _lhsIlib+ -- copy rule (down)+ _casesOcat =+ _lhsIcat+ -- copy rule (down)+ _casesOidenv =+ _lhsIidenv+ -- copy rule (down)+ _casesOlib =+ _lhsIlib+ -- copy rule (down)+ _elsOcat =+ _lhsIcat+ -- copy rule (down)+ _elsOidenv =+ _lhsIidenv+ -- copy rule (down)+ _elsOlib =+ _lhsIlib+ ( _valueIannotatedTree,_valueIfixedUpIdentifiersTree,_valueIoriginalTree,_valueIuType) =+ value_ _valueOcat _valueOexpectedType _valueOidenv _valueOlib + ( _casesIannotatedTree,_casesIfixedUpIdentifiersTree,_casesIoriginalTree,_casesIthenTypes,_casesIwhenTypes) =+ cases_ _casesOcat _casesOidenv _casesOlib + ( _elsIannotatedTree,_elsIfixedUpIdentifiersTree,_elsIoriginalTree,_elsIuType) =+ els_ _elsOcat _elsOidenv _elsOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+sem_ScalarExpr_Cast :: Annotation ->+ T_ScalarExpr ->+ T_TypeName ->+ T_ScalarExpr +sem_ScalarExpr_Cast ann_ expr_ tn_ =+ (\ _lhsIcat+ _lhsIexpectedType+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExpr + _prototype :: (Maybe FunctionPrototype)+ _lhsOuType :: (Maybe Type)+ _tpe :: Et+ _lhsOfixedUpIdentifiersTree :: ScalarExpr + _lhsOoriginalTree :: ScalarExpr + _exprOcat :: Catalog+ _exprOexpectedType :: (Maybe Type)+ _exprOidenv :: IDEnv+ _exprOlib :: LocalBindings+ _tnOcat :: Catalog+ _tnOidenv :: IDEnv+ _tnOlib :: LocalBindings+ _exprIannotatedTree :: ScalarExpr + _exprIfixedUpIdentifiersTree :: ScalarExpr + _exprIoriginalTree :: ScalarExpr + _exprIuType :: (Maybe Type)+ _tnIannotatedTree :: TypeName + _tnIfixedUpIdentifiersTree :: TypeName + _tnInamedType :: (Maybe Type)+ _tnIoriginalTree :: TypeName + -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 24, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (setTypeAddErrorsA _tpe+ . \a -> a {fnProt = _prototype+ ,infType = msum [_lhsIexpectedType+ ,etmt _tpe+ ,Nothing]}) _backTree+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 46, column 9)+ _prototype =+ Nothing+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 104, column 9)+ _lhsOuType =+ etmt _tpe+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 182, column 12)+ _tpe =+ lmt _tnInamedType+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 183, column 12)+ _backTree =+ Cast ann_ _exprIannotatedTree _tnIannotatedTree+ -- self rule+ _annotatedTree =+ Cast ann_ _exprIannotatedTree _tnIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ Cast ann_ _exprIfixedUpIdentifiersTree _tnIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ Cast ann_ _exprIoriginalTree _tnIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _exprOcat =+ _lhsIcat+ -- copy rule (down)+ _exprOexpectedType =+ _lhsIexpectedType+ -- copy rule (down)+ _exprOidenv =+ _lhsIidenv+ -- copy rule (down)+ _exprOlib =+ _lhsIlib+ -- copy rule (down)+ _tnOcat =+ _lhsIcat+ -- copy rule (down)+ _tnOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tnOlib =+ _lhsIlib+ ( _exprIannotatedTree,_exprIfixedUpIdentifiersTree,_exprIoriginalTree,_exprIuType) =+ expr_ _exprOcat _exprOexpectedType _exprOidenv _exprOlib + ( _tnIannotatedTree,_tnIfixedUpIdentifiersTree,_tnInamedType,_tnIoriginalTree) =+ tn_ _tnOcat _tnOidenv _tnOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+sem_ScalarExpr_Exists :: Annotation ->+ T_QueryExpr ->+ T_ScalarExpr +sem_ScalarExpr_Exists ann_ sel_ =+ (\ _lhsIcat+ _lhsIexpectedType+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExpr + _prototype :: (Maybe FunctionPrototype)+ _lhsOuType :: (Maybe Type)+ _tpe :: Et+ _selOcsql :: LocalBindings+ _selOexpectedTypes :: ([Maybe Type])+ _lhsOfixedUpIdentifiersTree :: ScalarExpr + _lhsOoriginalTree :: ScalarExpr + _selOcat :: Catalog+ _selOidenv :: IDEnv+ _selOlib :: LocalBindings+ _selIannotatedTree :: QueryExpr + _selIcidenv :: IDEnv+ _selIfixedUpIdentifiersTree :: QueryExpr + _selIlibUpdates :: ([LocalBindingsUpdate])+ _selIoriginalTree :: QueryExpr + _selIuType :: (Maybe [(String,Type)])+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 24, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (setTypeAddErrorsA _tpe+ . \a -> a {fnProt = _prototype+ ,infType = msum [_lhsIexpectedType+ ,etmt _tpe+ ,Nothing]}) _backTree+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 46, column 9)+ _prototype =+ Nothing+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 104, column 9)+ _lhsOuType =+ etmt _tpe+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 355, column 9)+ _tpe =+ Right typeBool+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 356, column 9)+ _backTree =+ Exists ann_ _selIannotatedTree+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 379, column 9)+ _selOcsql =+ _lhsIlib+ -- "./TypeChecking/ParameterizedStatements.ag"(line 171, column 29)+ _selOexpectedTypes =+ []+ -- self rule+ _annotatedTree =+ Exists ann_ _selIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ Exists ann_ _selIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ Exists ann_ _selIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _selOcat =+ _lhsIcat+ -- copy rule (down)+ _selOidenv =+ _lhsIidenv+ -- copy rule (down)+ _selOlib =+ _lhsIlib+ ( _selIannotatedTree,_selIcidenv,_selIfixedUpIdentifiersTree,_selIlibUpdates,_selIoriginalTree,_selIuType) =+ sel_ _selOcat _selOcsql _selOexpectedTypes _selOidenv _selOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+sem_ScalarExpr_Extract :: Annotation ->+ ExtractField ->+ T_ScalarExpr ->+ T_ScalarExpr +sem_ScalarExpr_Extract ann_ field_ e_ =+ (\ _lhsIcat+ _lhsIexpectedType+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExpr + _prototype :: (Maybe FunctionPrototype)+ _lhsOuType :: (Maybe Type)+ _tpe :: Et+ _lhsOfixedUpIdentifiersTree :: ScalarExpr + _lhsOoriginalTree :: ScalarExpr + _eOcat :: Catalog+ _eOexpectedType :: (Maybe Type)+ _eOidenv :: IDEnv+ _eOlib :: LocalBindings+ _eIannotatedTree :: ScalarExpr + _eIfixedUpIdentifiersTree :: ScalarExpr + _eIoriginalTree :: ScalarExpr + _eIuType :: (Maybe Type)+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 24, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (setTypeAddErrorsA _tpe+ . \a -> a {fnProt = _prototype+ ,infType = msum [_lhsIexpectedType+ ,etmt _tpe+ ,Nothing]}) _backTree+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 46, column 9)+ _prototype =+ Nothing+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 104, column 9)+ _lhsOuType =+ etmt _tpe+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 424, column 9)+ _tpe =+ do+ x <- lmt _eIuType+ if x == typeDate+ then Right typeFloat8+ else Left [NoMatchingOperator "extract" [x]]+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 429, column 9)+ _backTree =+ Extract ann_ field_ _eIannotatedTree+ -- self rule+ _annotatedTree =+ Extract ann_ field_ _eIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ Extract ann_ field_ _eIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ Extract ann_ field_ _eIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _eOcat =+ _lhsIcat+ -- copy rule (down)+ _eOexpectedType =+ _lhsIexpectedType+ -- copy rule (down)+ _eOidenv =+ _lhsIidenv+ -- copy rule (down)+ _eOlib =+ _lhsIlib+ ( _eIannotatedTree,_eIfixedUpIdentifiersTree,_eIoriginalTree,_eIuType) =+ e_ _eOcat _eOexpectedType _eOidenv _eOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+sem_ScalarExpr_FunCall :: Annotation ->+ String ->+ T_ScalarExprList ->+ T_ScalarExpr +sem_ScalarExpr_FunCall ann_ funName_ args_ =+ (\ _lhsIcat+ _lhsIexpectedType+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExpr + _lhsOuType :: (Maybe Type)+ _tpe :: Et+ _argsOexpectedTypes :: ([Maybe Type])+ _lhsOfixedUpIdentifiersTree :: ScalarExpr + _lhsOoriginalTree :: ScalarExpr + _argsOcat :: Catalog+ _argsOidenv :: IDEnv+ _argsOlib :: LocalBindings+ _argsIannotatedTree :: ScalarExprList + _argsIfixedUpIdentifiersTree :: ScalarExprList + _argsIoriginalTree :: ScalarExprList + _argsIuType :: ([Maybe Type])+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 24, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (setTypeAddErrorsA _tpe+ . \a -> a {fnProt = _prototype+ ,infType = msum [_lhsIexpectedType+ ,etmt _tpe+ ,Nothing]}) _backTree+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 104, column 9)+ _lhsOuType =+ etmt _tpe+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 196, column 9)+ __tup1 =+ either (\e -> (Left e, Nothing)) id $ do+ args <- mapM lmt _argsIuType+ efp <- findCallMatch _lhsIcat+ funName_+ args+ let (_,_,r,_) = efp+ return (Right r, Just efp)+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 196, column 9)+ (_tpe,_) =+ __tup1+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 196, column 9)+ (_,_prototype) =+ __tup1+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 206, column 9)+ _backTree =+ FunCall ann_ funName_ _argsIannotatedTree+ -- "./TypeChecking/ParameterizedStatements.ag"(line 130, column 9)+ _argsOexpectedTypes =+ maybe [] id $+ case (funName_,_lhsIexpectedType) of+ ("!rowctor", Just (AnonymousRecordType ts)) -> return $ map Just ts+ _ -> do+ (_,t,_,_) <- _prototype+ return $ map Just t+ -- self rule+ _annotatedTree =+ FunCall ann_ funName_ _argsIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ FunCall ann_ funName_ _argsIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ FunCall ann_ funName_ _argsIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _argsOcat =+ _lhsIcat+ -- copy rule (down)+ _argsOidenv =+ _lhsIidenv+ -- copy rule (down)+ _argsOlib =+ _lhsIlib+ ( _argsIannotatedTree,_argsIfixedUpIdentifiersTree,_argsIoriginalTree,_argsIuType) =+ args_ _argsOcat _argsOexpectedTypes _argsOidenv _argsOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+sem_ScalarExpr_Identifier :: Annotation ->+ String ->+ T_ScalarExpr +sem_ScalarExpr_Identifier ann_ i_ =+ (\ _lhsIcat+ _lhsIexpectedType+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOfixedUpIdentifiersTree :: ScalarExpr + _lhsOannotatedTree :: ScalarExpr + _prototype :: (Maybe FunctionPrototype)+ _lhsOuType :: (Maybe Type)+ _tpe :: Et+ _lhsOoriginalTree :: ScalarExpr + -- "./TypeChecking/FixUpIdentifiers.ag"(line 131, column 9)+ _lhsOfixedUpIdentifiersTree =+ case qualifyID _lhsIidenv i_ of+ Nothing -> Identifier ann_ i_+ Just (t,i) -> QIdentifier ann_ (Identifier ann_ t) i+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 24, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (setTypeAddErrorsA _tpe+ . \a -> a {fnProt = _prototype+ ,infType = msum [_lhsIexpectedType+ ,etmt _tpe+ ,Nothing]}) _backTree+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 46, column 9)+ _prototype =+ Nothing+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 104, column 9)+ _lhsOuType =+ etmt _tpe+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 314, column 9)+ _tpe =+ case lookupLocalBinding _lhsIlib "" i_ of+ Right Nothing -> Left []+ Right (Just t) -> Right t+ Left e -> Left e+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 319, column 9)+ _backTree =+ Identifier ann_ i_+ -- self rule+ _annotatedTree =+ Identifier ann_ i_+ -- self rule+ _fixedUpIdentifiersTree =+ Identifier ann_ i_+ -- self rule+ _originalTree =+ Identifier ann_ i_+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+sem_ScalarExpr_InPredicate :: Annotation ->+ T_ScalarExpr ->+ Bool ->+ T_InList ->+ T_ScalarExpr +sem_ScalarExpr_InPredicate ann_ expr_ i_ list_ =+ (\ _lhsIcat+ _lhsIexpectedType+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExpr + _prototype :: (Maybe FunctionPrototype)+ _lhsOuType :: (Maybe Type)+ _rt :: (Either [TypeError] Type)+ _tpe :: Et+ _listOexpectedType :: (Maybe Type)+ _exprOexpectedType :: (Maybe Type)+ _lhsOfixedUpIdentifiersTree :: ScalarExpr + _lhsOoriginalTree :: ScalarExpr + _exprOcat :: Catalog+ _exprOidenv :: IDEnv+ _exprOlib :: LocalBindings+ _listOcat :: Catalog+ _listOidenv :: IDEnv+ _listOlib :: LocalBindings+ _exprIannotatedTree :: ScalarExpr + _exprIfixedUpIdentifiersTree :: ScalarExpr + _exprIoriginalTree :: ScalarExpr + _exprIuType :: (Maybe Type)+ _listIannotatedTree :: InList + _listIfixedUpIdentifiersTree :: InList + _listIlistType :: (Either [TypeError] Type)+ _listIoriginalTree :: InList + -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 24, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (setTypeAddErrorsA _tpe+ . \a -> a {fnProt = _prototype+ ,infType = msum [_lhsIexpectedType+ ,etmt _tpe+ ,Nothing]}) _backTree+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 46, column 9)+ _prototype =+ Nothing+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 104, column 9)+ _lhsOuType =+ etmt _tpe+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 388, column 9)+ _rt =+ do+ lt <- _listIlistType+ expt <- lmt _exprIuType+ resolveResultSetType _lhsIcat [expt, lt]+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 392, column 9)+ _tpe =+ do+ _ <- _rt+ return typeBool+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 395, column 9)+ _listOexpectedType =+ etmt _rt+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 396, column 9)+ _exprOexpectedType =+ etmt _rt+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 397, column 9)+ _backTree =+ InPredicate ann_+ _exprIannotatedTree+ i_+ _listIannotatedTree+ -- self rule+ _annotatedTree =+ InPredicate ann_ _exprIannotatedTree i_ _listIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ InPredicate ann_ _exprIfixedUpIdentifiersTree i_ _listIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ InPredicate ann_ _exprIoriginalTree i_ _listIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _exprOcat =+ _lhsIcat+ -- copy rule (down)+ _exprOidenv =+ _lhsIidenv+ -- copy rule (down)+ _exprOlib =+ _lhsIlib+ -- copy rule (down)+ _listOcat =+ _lhsIcat+ -- copy rule (down)+ _listOidenv =+ _lhsIidenv+ -- copy rule (down)+ _listOlib =+ _lhsIlib+ ( _exprIannotatedTree,_exprIfixedUpIdentifiersTree,_exprIoriginalTree,_exprIuType) =+ expr_ _exprOcat _exprOexpectedType _exprOidenv _exprOlib + ( _listIannotatedTree,_listIfixedUpIdentifiersTree,_listIlistType,_listIoriginalTree) =+ list_ _listOcat _listOexpectedType _listOidenv _listOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+sem_ScalarExpr_Interval :: Annotation ->+ String ->+ IntervalField ->+ (Maybe Int) ->+ T_ScalarExpr +sem_ScalarExpr_Interval ann_ value_ field_ prec_ =+ (\ _lhsIcat+ _lhsIexpectedType+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExpr + _prototype :: (Maybe FunctionPrototype)+ _lhsOuType :: (Maybe Type)+ _tpe :: Et+ _lhsOfixedUpIdentifiersTree :: ScalarExpr + _lhsOoriginalTree :: ScalarExpr + -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 24, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (setTypeAddErrorsA _tpe+ . \a -> a {fnProt = _prototype+ ,infType = msum [_lhsIexpectedType+ ,etmt _tpe+ ,Nothing]}) _backTree+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 46, column 9)+ _prototype =+ Nothing+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 104, column 9)+ _lhsOuType =+ etmt _tpe+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 170, column 16)+ _tpe =+ Right $ ScalarType "interval"+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 171, column 16)+ _backTree =+ Interval ann_ value_ field_ prec_+ -- self rule+ _annotatedTree =+ Interval ann_ value_ field_ prec_+ -- self rule+ _fixedUpIdentifiersTree =+ Interval ann_ value_ field_ prec_+ -- self rule+ _originalTree =+ Interval ann_ value_ field_ prec_+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+sem_ScalarExpr_LiftOperator :: Annotation ->+ String ->+ LiftFlavour ->+ T_ScalarExprList ->+ T_ScalarExpr +sem_ScalarExpr_LiftOperator ann_ oper_ flav_ args_ =+ (\ _lhsIcat+ _lhsIexpectedType+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExpr + _prototype :: (Maybe FunctionPrototype)+ _lhsOuType :: (Maybe Type)+ _tpe :: Et+ _argsOexpectedTypes :: ([Maybe Type])+ _lhsOfixedUpIdentifiersTree :: ScalarExpr + _lhsOoriginalTree :: ScalarExpr + _argsOcat :: Catalog+ _argsOidenv :: IDEnv+ _argsOlib :: LocalBindings+ _argsIannotatedTree :: ScalarExprList + _argsIfixedUpIdentifiersTree :: ScalarExprList + _argsIoriginalTree :: ScalarExprList + _argsIuType :: ([Maybe Type])+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 24, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (setTypeAddErrorsA _tpe+ . \a -> a {fnProt = _prototype+ ,infType = msum [_lhsIexpectedType+ ,etmt _tpe+ ,Nothing]}) _backTree+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 46, column 9)+ _prototype =+ Nothing+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 104, column 9)+ _lhsOuType =+ etmt _tpe+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 229, column 9)+ _tpe =+ do+ at <- mapM lmt _argsIuType+ errorWhen (length at /= 2)+ [AnyAllError $ "must have two args, got " ++ show at]+ let [aType,bType] = at+ errorWhen (not $ isArrayType bType)+ [AnyAllError $ "second arg must be array, got " ++ show at]+ elemType <- unwrapArray $ bType+ resType <- fmap (\(_,_,r,_) -> r) $ findCallMatch _lhsIcat+ oper_+ [aType,elemType]+ errorWhen (resType /= typeBool)+ [AnyAllError $ "operator must have bool return, got " ++ show resType]+ return resType+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 243, column 9)+ _backTree =+ LiftOperator ann_ oper_ flav_ _argsIannotatedTree+ -- "./TypeChecking/ParameterizedStatements.ag"(line 138, column 9)+ _argsOexpectedTypes =+ []+ -- self rule+ _annotatedTree =+ LiftOperator ann_ oper_ flav_ _argsIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ LiftOperator ann_ oper_ flav_ _argsIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ LiftOperator ann_ oper_ flav_ _argsIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _argsOcat =+ _lhsIcat+ -- copy rule (down)+ _argsOidenv =+ _lhsIidenv+ -- copy rule (down)+ _argsOlib =+ _lhsIlib+ ( _argsIannotatedTree,_argsIfixedUpIdentifiersTree,_argsIoriginalTree,_argsIuType) =+ args_ _argsOcat _argsOexpectedTypes _argsOidenv _argsOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+sem_ScalarExpr_NullLit :: Annotation ->+ T_ScalarExpr +sem_ScalarExpr_NullLit ann_ =+ (\ _lhsIcat+ _lhsIexpectedType+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExpr + _prototype :: (Maybe FunctionPrototype)+ _lhsOuType :: (Maybe Type)+ _tpe :: Et+ _lhsOfixedUpIdentifiersTree :: ScalarExpr + _lhsOoriginalTree :: ScalarExpr + -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 24, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (setTypeAddErrorsA _tpe+ . \a -> a {fnProt = _prototype+ ,infType = msum [_lhsIexpectedType+ ,etmt _tpe+ ,Nothing]}) _backTree+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 46, column 9)+ _prototype =+ Nothing+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 104, column 9)+ _lhsOuType =+ etmt _tpe+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 157, column 16)+ _tpe =+ Right UnknownType+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 167, column 9)+ _backTree =+ NullLit ann_+ -- self rule+ _annotatedTree =+ NullLit ann_+ -- self rule+ _fixedUpIdentifiersTree =+ NullLit ann_+ -- self rule+ _originalTree =+ NullLit ann_+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+sem_ScalarExpr_NumberLit :: Annotation ->+ String ->+ T_ScalarExpr +sem_ScalarExpr_NumberLit ann_ d_ =+ (\ _lhsIcat+ _lhsIexpectedType+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExpr + _prototype :: (Maybe FunctionPrototype)+ _lhsOuType :: (Maybe Type)+ _tpe :: Et+ _lhsOfixedUpIdentifiersTree :: ScalarExpr + _lhsOoriginalTree :: ScalarExpr + -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 24, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (setTypeAddErrorsA _tpe+ . \a -> a {fnProt = _prototype+ ,infType = msum [_lhsIexpectedType+ ,etmt _tpe+ ,Nothing]}) _backTree+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 46, column 9)+ _prototype =+ Nothing+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 104, column 9)+ _lhsOuType =+ etmt _tpe+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 149, column 18)+ _tpe =+ if all (`elem` digChars) d_+ then Right typeInt+ else Right typeNumeric+ where+ digChars = concatMap show [(0::Int)..9]+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 161, column 9)+ _backTree =+ NumberLit ann_ d_+ -- self rule+ _annotatedTree =+ NumberLit ann_ d_+ -- self rule+ _fixedUpIdentifiersTree =+ NumberLit ann_ d_+ -- self rule+ _originalTree =+ NumberLit ann_ d_+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+sem_ScalarExpr_Placeholder :: Annotation ->+ T_ScalarExpr +sem_ScalarExpr_Placeholder ann_ =+ (\ _lhsIcat+ _lhsIexpectedType+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExpr + _prototype :: (Maybe FunctionPrototype)+ _lhsOuType :: (Maybe Type)+ _tpe :: Et+ _lhsOfixedUpIdentifiersTree :: ScalarExpr + _lhsOoriginalTree :: ScalarExpr + -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 24, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (setTypeAddErrorsA _tpe+ . \a -> a {fnProt = _prototype+ ,infType = msum [_lhsIexpectedType+ ,etmt _tpe+ ,Nothing]}) _backTree+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 46, column 9)+ _prototype =+ Nothing+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 104, column 9)+ _lhsOuType =+ etmt _tpe+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 349, column 9)+ _tpe =+ Right UnknownType+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 350, column 9)+ _backTree =+ Placeholder ann_+ -- self rule+ _annotatedTree =+ Placeholder ann_+ -- self rule+ _fixedUpIdentifiersTree =+ Placeholder ann_+ -- self rule+ _originalTree =+ Placeholder ann_+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+sem_ScalarExpr_PositionalArg :: Annotation ->+ Integer ->+ T_ScalarExpr +sem_ScalarExpr_PositionalArg ann_ p_ =+ (\ _lhsIcat+ _lhsIexpectedType+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExpr + _prototype :: (Maybe FunctionPrototype)+ _lhsOuType :: (Maybe Type)+ _tpe :: Et+ _lhsOfixedUpIdentifiersTree :: ScalarExpr + _lhsOoriginalTree :: ScalarExpr + -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 24, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (setTypeAddErrorsA _tpe+ . \a -> a {fnProt = _prototype+ ,infType = msum [_lhsIexpectedType+ ,etmt _tpe+ ,Nothing]}) _backTree+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 46, column 9)+ _prototype =+ Nothing+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 104, column 9)+ _lhsOuType =+ etmt _tpe+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 343, column 9)+ _tpe =+ unwrapLookup <$> lbLookupID _lhsIlib ['$':show p_]+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 344, column 9)+ _backTree =+ PositionalArg ann_ p_+ -- self rule+ _annotatedTree =+ PositionalArg ann_ p_+ -- self rule+ _fixedUpIdentifiersTree =+ PositionalArg ann_ p_+ -- self rule+ _originalTree =+ PositionalArg ann_ p_+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+sem_ScalarExpr_QIdentifier :: Annotation ->+ T_ScalarExpr ->+ String ->+ T_ScalarExpr +sem_ScalarExpr_QIdentifier ann_ qual_ i_ =+ (\ _lhsIcat+ _lhsIexpectedType+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOfixedUpIdentifiersTree :: ScalarExpr + _lhsOannotatedTree :: ScalarExpr + _prototype :: (Maybe FunctionPrototype)+ _lhsOuType :: (Maybe Type)+ _tpe :: Et+ _qid :: (Maybe String)+ _lhsOoriginalTree :: ScalarExpr + _qualOcat :: Catalog+ _qualOexpectedType :: (Maybe Type)+ _qualOidenv :: IDEnv+ _qualOlib :: LocalBindings+ _qualIannotatedTree :: ScalarExpr + _qualIfixedUpIdentifiersTree :: ScalarExpr + _qualIoriginalTree :: ScalarExpr + _qualIuType :: (Maybe Type)+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 137, column 9)+ _lhsOfixedUpIdentifiersTree =+ QIdentifier ann_ _qualIoriginalTree i_+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 24, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (setTypeAddErrorsA _tpe+ . \a -> a {fnProt = _prototype+ ,infType = msum [_lhsIexpectedType+ ,etmt _tpe+ ,Nothing]}) _backTree+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 46, column 9)+ _prototype =+ Nothing+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 104, column 9)+ _lhsOuType =+ etmt _tpe+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 321, column 9)+ _tpe =+ case _qid of+ Nothing -> Left [InternalError "dot selection not implemented"]+ Just q -> case lookupLocalBinding _lhsIlib q i_ of+ Right Nothing -> Left []+ Right (Just t) -> Right t+ Left e -> Left e+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 334, column 9)+ _qid =+ case _backTree of+ QIdentifier _ (Identifier _ q) _ -> Just q+ _ -> Nothing+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 337, column 9)+ _backTree =+ QIdentifier ann_ _qAnnTreeNoUnrec i_+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 339, column 9)+ _qAnnTreeNoUnrec =+ updateAnnotation (\a -> a {errs = []}) _qualIannotatedTree+ -- self rule+ _annotatedTree =+ QIdentifier ann_ _qualIannotatedTree i_+ -- self rule+ _fixedUpIdentifiersTree =+ QIdentifier ann_ _qualIfixedUpIdentifiersTree i_+ -- self rule+ _originalTree =+ QIdentifier ann_ _qualIoriginalTree i_+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _qualOcat =+ _lhsIcat+ -- copy rule (down)+ _qualOexpectedType =+ _lhsIexpectedType+ -- copy rule (down)+ _qualOidenv =+ _lhsIidenv+ -- copy rule (down)+ _qualOlib =+ _lhsIlib+ ( _qualIannotatedTree,_qualIfixedUpIdentifiersTree,_qualIoriginalTree,_qualIuType) =+ qual_ _qualOcat _qualOexpectedType _qualOidenv _qualOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+sem_ScalarExpr_ScalarSubQuery :: Annotation ->+ T_QueryExpr ->+ T_ScalarExpr +sem_ScalarExpr_ScalarSubQuery ann_ sel_ =+ (\ _lhsIcat+ _lhsIexpectedType+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExpr + _prototype :: (Maybe FunctionPrototype)+ _lhsOuType :: (Maybe Type)+ _tpe :: Et+ _selOcsql :: LocalBindings+ _selOexpectedTypes :: ([Maybe Type])+ _lhsOfixedUpIdentifiersTree :: ScalarExpr + _lhsOoriginalTree :: ScalarExpr + _selOcat :: Catalog+ _selOidenv :: IDEnv+ _selOlib :: LocalBindings+ _selIannotatedTree :: QueryExpr + _selIcidenv :: IDEnv+ _selIfixedUpIdentifiersTree :: QueryExpr + _selIlibUpdates :: ([LocalBindingsUpdate])+ _selIoriginalTree :: QueryExpr + _selIuType :: (Maybe [(String,Type)])+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 24, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (setTypeAddErrorsA _tpe+ . \a -> a {fnProt = _prototype+ ,infType = msum [_lhsIexpectedType+ ,etmt _tpe+ ,Nothing]}) _backTree+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 46, column 9)+ _prototype =+ Nothing+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 104, column 9)+ _lhsOuType =+ etmt _tpe+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 367, column 9)+ _tpe =+ do+ selType <- lmt (map snd <$> _selIuType)+ case length selType of+ 0 -> Left [InternalError "no columns in scalar subquery?"]+ 1 -> Right $ head selType+ _ -> Right $ AnonymousRecordType selType+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 375, column 9)+ _backTree =+ ScalarSubQuery ann_ _selIannotatedTree+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 377, column 9)+ _selOcsql =+ _lhsIlib+ -- "./TypeChecking/ParameterizedStatements.ag"(line 171, column 29)+ _selOexpectedTypes =+ []+ -- self rule+ _annotatedTree =+ ScalarSubQuery ann_ _selIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ ScalarSubQuery ann_ _selIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ ScalarSubQuery ann_ _selIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _selOcat =+ _lhsIcat+ -- copy rule (down)+ _selOidenv =+ _lhsIidenv+ -- copy rule (down)+ _selOlib =+ _lhsIlib+ ( _selIannotatedTree,_selIcidenv,_selIfixedUpIdentifiersTree,_selIlibUpdates,_selIoriginalTree,_selIuType) =+ sel_ _selOcat _selOcsql _selOexpectedTypes _selOidenv _selOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+sem_ScalarExpr_StringLit :: Annotation ->+ String ->+ T_ScalarExpr +sem_ScalarExpr_StringLit ann_ value_ =+ (\ _lhsIcat+ _lhsIexpectedType+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExpr + _prototype :: (Maybe FunctionPrototype)+ _lhsOuType :: (Maybe Type)+ _tpe :: Et+ _lhsOfixedUpIdentifiersTree :: ScalarExpr + _lhsOoriginalTree :: ScalarExpr + -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 24, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (setTypeAddErrorsA _tpe+ . \a -> a {fnProt = _prototype+ ,infType = msum [_lhsIexpectedType+ ,etmt _tpe+ ,Nothing]}) _backTree+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 46, column 9)+ _prototype =+ Nothing+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 104, column 9)+ _lhsOuType =+ etmt _tpe+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 154, column 18)+ _tpe =+ Right UnknownType+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 163, column 9)+ _backTree =+ StringLit ann_ value_+ -- self rule+ _annotatedTree =+ StringLit ann_ value_+ -- self rule+ _fixedUpIdentifiersTree =+ StringLit ann_ value_+ -- self rule+ _originalTree =+ StringLit ann_ value_+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+sem_ScalarExpr_TypedStringLit :: Annotation ->+ T_TypeName ->+ String ->+ T_ScalarExpr +sem_ScalarExpr_TypedStringLit ann_ tn_ value_ =+ (\ _lhsIcat+ _lhsIexpectedType+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExpr + _prototype :: (Maybe FunctionPrototype)+ _lhsOuType :: (Maybe Type)+ _tpe :: Et+ _lhsOfixedUpIdentifiersTree :: ScalarExpr + _lhsOoriginalTree :: ScalarExpr + _tnOcat :: Catalog+ _tnOidenv :: IDEnv+ _tnOlib :: LocalBindings+ _tnIannotatedTree :: TypeName + _tnIfixedUpIdentifiersTree :: TypeName + _tnInamedType :: (Maybe Type)+ _tnIoriginalTree :: TypeName + -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 24, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (setTypeAddErrorsA _tpe+ . \a -> a {fnProt = _prototype+ ,infType = msum [_lhsIexpectedType+ ,etmt _tpe+ ,Nothing]}) _backTree+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 46, column 9)+ _prototype =+ Nothing+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 104, column 9)+ _lhsOuType =+ etmt _tpe+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 187, column 10)+ _tpe =+ lmt _tnInamedType+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 188, column 10)+ _backTree =+ TypedStringLit ann_ _tnIannotatedTree value_+ -- self rule+ _annotatedTree =+ TypedStringLit ann_ _tnIannotatedTree value_+ -- self rule+ _fixedUpIdentifiersTree =+ TypedStringLit ann_ _tnIfixedUpIdentifiersTree value_+ -- self rule+ _originalTree =+ TypedStringLit ann_ _tnIoriginalTree value_+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _tnOcat =+ _lhsIcat+ -- copy rule (down)+ _tnOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tnOlib =+ _lhsIlib+ ( _tnIannotatedTree,_tnIfixedUpIdentifiersTree,_tnInamedType,_tnIoriginalTree) =+ tn_ _tnOcat _tnOidenv _tnOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+sem_ScalarExpr_WindowFn :: Annotation ->+ T_ScalarExpr ->+ T_ScalarExprList ->+ T_ScalarExprList ->+ Direction ->+ FrameClause ->+ T_ScalarExpr +sem_ScalarExpr_WindowFn ann_ fn_ partitionBy_ orderBy_ dir_ frm_ =+ (\ _lhsIcat+ _lhsIexpectedType+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExpr + _prototype :: (Maybe FunctionPrototype)+ _lhsOuType :: (Maybe Type)+ _tpe :: Et+ _partitionByOexpectedTypes :: ([Maybe Type])+ _orderByOexpectedTypes :: ([Maybe Type])+ _lhsOfixedUpIdentifiersTree :: ScalarExpr + _lhsOoriginalTree :: ScalarExpr + _fnOcat :: Catalog+ _fnOexpectedType :: (Maybe Type)+ _fnOidenv :: IDEnv+ _fnOlib :: LocalBindings+ _partitionByOcat :: Catalog+ _partitionByOidenv :: IDEnv+ _partitionByOlib :: LocalBindings+ _orderByOcat :: Catalog+ _orderByOidenv :: IDEnv+ _orderByOlib :: LocalBindings+ _fnIannotatedTree :: ScalarExpr + _fnIfixedUpIdentifiersTree :: ScalarExpr + _fnIoriginalTree :: ScalarExpr + _fnIuType :: (Maybe Type)+ _partitionByIannotatedTree :: ScalarExprList + _partitionByIfixedUpIdentifiersTree :: ScalarExprList + _partitionByIoriginalTree :: ScalarExprList + _partitionByIuType :: ([Maybe Type])+ _orderByIannotatedTree :: ScalarExprList + _orderByIfixedUpIdentifiersTree :: ScalarExprList + _orderByIoriginalTree :: ScalarExprList + _orderByIuType :: ([Maybe Type])+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 24, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (setTypeAddErrorsA _tpe+ . \a -> a {fnProt = _prototype+ ,infType = msum [_lhsIexpectedType+ ,etmt _tpe+ ,Nothing]}) _backTree+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 46, column 9)+ _prototype =+ Nothing+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 104, column 9)+ _lhsOuType =+ etmt _tpe+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 210, column 9)+ _tpe =+ lmt _fnIuType+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 211, column 9)+ _backTree =+ WindowFn ann_+ _fnIannotatedTree+ _partitionByIannotatedTree+ _orderByIannotatedTree+ dir_+ frm_+ -- "./TypeChecking/ParameterizedStatements.ag"(line 140, column 9)+ _partitionByOexpectedTypes =+ []+ -- "./TypeChecking/ParameterizedStatements.ag"(line 141, column 9)+ _orderByOexpectedTypes =+ []+ -- self rule+ _annotatedTree =+ WindowFn ann_ _fnIannotatedTree _partitionByIannotatedTree _orderByIannotatedTree dir_ frm_+ -- self rule+ _fixedUpIdentifiersTree =+ WindowFn ann_ _fnIfixedUpIdentifiersTree _partitionByIfixedUpIdentifiersTree _orderByIfixedUpIdentifiersTree dir_ frm_+ -- self rule+ _originalTree =+ WindowFn ann_ _fnIoriginalTree _partitionByIoriginalTree _orderByIoriginalTree dir_ frm_+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _fnOcat =+ _lhsIcat+ -- copy rule (down)+ _fnOexpectedType =+ _lhsIexpectedType+ -- copy rule (down)+ _fnOidenv =+ _lhsIidenv+ -- copy rule (down)+ _fnOlib =+ _lhsIlib+ -- copy rule (down)+ _partitionByOcat =+ _lhsIcat+ -- copy rule (down)+ _partitionByOidenv =+ _lhsIidenv+ -- copy rule (down)+ _partitionByOlib =+ _lhsIlib+ -- copy rule (down)+ _orderByOcat =+ _lhsIcat+ -- copy rule (down)+ _orderByOidenv =+ _lhsIidenv+ -- copy rule (down)+ _orderByOlib =+ _lhsIlib+ ( _fnIannotatedTree,_fnIfixedUpIdentifiersTree,_fnIoriginalTree,_fnIuType) =+ fn_ _fnOcat _fnOexpectedType _fnOidenv _fnOlib + ( _partitionByIannotatedTree,_partitionByIfixedUpIdentifiersTree,_partitionByIoriginalTree,_partitionByIuType) =+ partitionBy_ _partitionByOcat _partitionByOexpectedTypes _partitionByOidenv _partitionByOlib + ( _orderByIannotatedTree,_orderByIfixedUpIdentifiersTree,_orderByIoriginalTree,_orderByIuType) =+ orderBy_ _orderByOcat _orderByOexpectedTypes _orderByOidenv _orderByOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+-- ScalarExprDirectionPair -------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + alternatives:+ alternative Tuple:+ child x1 : ScalarExpr + child x2 : {Direction}+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type ScalarExprDirectionPair = ( ScalarExpr ,(Direction))+-- cata+sem_ScalarExprDirectionPair :: ScalarExprDirectionPair ->+ T_ScalarExprDirectionPair +sem_ScalarExprDirectionPair ( x1,x2) =+ (sem_ScalarExprDirectionPair_Tuple (sem_ScalarExpr x1 ) x2 )+-- semantic domain+type T_ScalarExprDirectionPair = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( ScalarExprDirectionPair ,ScalarExprDirectionPair ,ScalarExprDirectionPair )+data Inh_ScalarExprDirectionPair = Inh_ScalarExprDirectionPair {cat_Inh_ScalarExprDirectionPair :: Catalog,idenv_Inh_ScalarExprDirectionPair :: IDEnv,lib_Inh_ScalarExprDirectionPair :: LocalBindings}+data Syn_ScalarExprDirectionPair = Syn_ScalarExprDirectionPair {annotatedTree_Syn_ScalarExprDirectionPair :: ScalarExprDirectionPair ,fixedUpIdentifiersTree_Syn_ScalarExprDirectionPair :: ScalarExprDirectionPair ,originalTree_Syn_ScalarExprDirectionPair :: ScalarExprDirectionPair }+wrap_ScalarExprDirectionPair :: T_ScalarExprDirectionPair ->+ Inh_ScalarExprDirectionPair ->+ Syn_ScalarExprDirectionPair +wrap_ScalarExprDirectionPair sem (Inh_ScalarExprDirectionPair _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_ScalarExprDirectionPair _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree ))+sem_ScalarExprDirectionPair_Tuple :: T_ScalarExpr ->+ Direction ->+ T_ScalarExprDirectionPair +sem_ScalarExprDirectionPair_Tuple x1_ x2_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _x1OexpectedType :: (Maybe Type)+ _lhsOannotatedTree :: ScalarExprDirectionPair + _lhsOfixedUpIdentifiersTree :: ScalarExprDirectionPair + _lhsOoriginalTree :: ScalarExprDirectionPair + _x1Ocat :: Catalog+ _x1Oidenv :: IDEnv+ _x1Olib :: LocalBindings+ _x1IannotatedTree :: ScalarExpr + _x1IfixedUpIdentifiersTree :: ScalarExpr + _x1IoriginalTree :: ScalarExpr + _x1IuType :: (Maybe Type)+ -- "./TypeChecking/ParameterizedStatements.ag"(line 83, column 13)+ _x1OexpectedType =+ Nothing+ -- self rule+ _annotatedTree =+ (_x1IannotatedTree,x2_)+ -- self rule+ _fixedUpIdentifiersTree =+ (_x1IfixedUpIdentifiersTree,x2_)+ -- self rule+ _originalTree =+ (_x1IoriginalTree,x2_)+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _x1Ocat =+ _lhsIcat+ -- copy rule (down)+ _x1Oidenv =+ _lhsIidenv+ -- copy rule (down)+ _x1Olib =+ _lhsIlib+ ( _x1IannotatedTree,_x1IfixedUpIdentifiersTree,_x1IoriginalTree,_x1IuType) =+ x1_ _x1Ocat _x1OexpectedType _x1Oidenv _x1Olib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+-- ScalarExprDirectionPairList ---------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + alternatives:+ alternative Cons:+ child hd : ScalarExprDirectionPair + child tl : ScalarExprDirectionPairList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Nil:+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type ScalarExprDirectionPairList = [ScalarExprDirectionPair ]+-- cata+sem_ScalarExprDirectionPairList :: ScalarExprDirectionPairList ->+ T_ScalarExprDirectionPairList +sem_ScalarExprDirectionPairList list =+ (Prelude.foldr sem_ScalarExprDirectionPairList_Cons sem_ScalarExprDirectionPairList_Nil (Prelude.map sem_ScalarExprDirectionPair list) )+-- semantic domain+type T_ScalarExprDirectionPairList = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( ScalarExprDirectionPairList ,ScalarExprDirectionPairList ,ScalarExprDirectionPairList )+data Inh_ScalarExprDirectionPairList = Inh_ScalarExprDirectionPairList {cat_Inh_ScalarExprDirectionPairList :: Catalog,idenv_Inh_ScalarExprDirectionPairList :: IDEnv,lib_Inh_ScalarExprDirectionPairList :: LocalBindings}+data Syn_ScalarExprDirectionPairList = Syn_ScalarExprDirectionPairList {annotatedTree_Syn_ScalarExprDirectionPairList :: ScalarExprDirectionPairList ,fixedUpIdentifiersTree_Syn_ScalarExprDirectionPairList :: ScalarExprDirectionPairList ,originalTree_Syn_ScalarExprDirectionPairList :: ScalarExprDirectionPairList }+wrap_ScalarExprDirectionPairList :: T_ScalarExprDirectionPairList ->+ Inh_ScalarExprDirectionPairList ->+ Syn_ScalarExprDirectionPairList +wrap_ScalarExprDirectionPairList sem (Inh_ScalarExprDirectionPairList _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_ScalarExprDirectionPairList _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree ))+sem_ScalarExprDirectionPairList_Cons :: T_ScalarExprDirectionPair ->+ T_ScalarExprDirectionPairList ->+ T_ScalarExprDirectionPairList +sem_ScalarExprDirectionPairList_Cons hd_ tl_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExprDirectionPairList + _lhsOfixedUpIdentifiersTree :: ScalarExprDirectionPairList + _lhsOoriginalTree :: ScalarExprDirectionPairList + _hdOcat :: Catalog+ _hdOidenv :: IDEnv+ _hdOlib :: LocalBindings+ _tlOcat :: Catalog+ _tlOidenv :: IDEnv+ _tlOlib :: LocalBindings+ _hdIannotatedTree :: ScalarExprDirectionPair + _hdIfixedUpIdentifiersTree :: ScalarExprDirectionPair + _hdIoriginalTree :: ScalarExprDirectionPair + _tlIannotatedTree :: ScalarExprDirectionPairList + _tlIfixedUpIdentifiersTree :: ScalarExprDirectionPairList + _tlIoriginalTree :: ScalarExprDirectionPairList + -- self rule+ _annotatedTree =+ (:) _hdIannotatedTree _tlIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ (:) _hdIfixedUpIdentifiersTree _tlIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ (:) _hdIoriginalTree _tlIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _hdOcat =+ _lhsIcat+ -- copy rule (down)+ _hdOidenv =+ _lhsIidenv+ -- copy rule (down)+ _hdOlib =+ _lhsIlib+ -- copy rule (down)+ _tlOcat =+ _lhsIcat+ -- copy rule (down)+ _tlOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tlOlib =+ _lhsIlib+ ( _hdIannotatedTree,_hdIfixedUpIdentifiersTree,_hdIoriginalTree) =+ hd_ _hdOcat _hdOidenv _hdOlib + ( _tlIannotatedTree,_tlIfixedUpIdentifiersTree,_tlIoriginalTree) =+ tl_ _tlOcat _tlOidenv _tlOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_ScalarExprDirectionPairList_Nil :: T_ScalarExprDirectionPairList +sem_ScalarExprDirectionPairList_Nil =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExprDirectionPairList + _lhsOfixedUpIdentifiersTree :: ScalarExprDirectionPairList + _lhsOoriginalTree :: ScalarExprDirectionPairList + -- self rule+ _annotatedTree =+ []+ -- self rule+ _fixedUpIdentifiersTree =+ []+ -- self rule+ _originalTree =+ []+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+-- ScalarExprList ----------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ expectedTypes : [Maybe Type]+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + uType : [Maybe Type]+ alternatives:+ alternative Cons:+ child hd : ScalarExpr + child tl : ScalarExprList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Nil:+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type ScalarExprList = [ScalarExpr ]+-- cata+sem_ScalarExprList :: ScalarExprList ->+ T_ScalarExprList +sem_ScalarExprList list =+ (Prelude.foldr sem_ScalarExprList_Cons sem_ScalarExprList_Nil (Prelude.map sem_ScalarExpr list) )+-- semantic domain+type T_ScalarExprList = Catalog ->+ ([Maybe Type]) ->+ IDEnv ->+ LocalBindings ->+ ( ScalarExprList ,ScalarExprList ,ScalarExprList ,([Maybe Type]))+data Inh_ScalarExprList = Inh_ScalarExprList {cat_Inh_ScalarExprList :: Catalog,expectedTypes_Inh_ScalarExprList :: ([Maybe Type]),idenv_Inh_ScalarExprList :: IDEnv,lib_Inh_ScalarExprList :: LocalBindings}+data Syn_ScalarExprList = Syn_ScalarExprList {annotatedTree_Syn_ScalarExprList :: ScalarExprList ,fixedUpIdentifiersTree_Syn_ScalarExprList :: ScalarExprList ,originalTree_Syn_ScalarExprList :: ScalarExprList ,uType_Syn_ScalarExprList :: ([Maybe Type])}+wrap_ScalarExprList :: T_ScalarExprList ->+ Inh_ScalarExprList ->+ Syn_ScalarExprList +wrap_ScalarExprList sem (Inh_ScalarExprList _lhsIcat _lhsIexpectedTypes _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType) = sem _lhsIcat _lhsIexpectedTypes _lhsIidenv _lhsIlib + in (Syn_ScalarExprList _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree _lhsOuType ))+sem_ScalarExprList_Cons :: T_ScalarExpr ->+ T_ScalarExprList ->+ T_ScalarExprList +sem_ScalarExprList_Cons hd_ tl_ =+ (\ _lhsIcat+ _lhsIexpectedTypes+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOuType :: ([Maybe Type])+ _hdOexpectedType :: (Maybe Type)+ _tlOexpectedTypes :: ([Maybe Type])+ _lhsOannotatedTree :: ScalarExprList + _lhsOfixedUpIdentifiersTree :: ScalarExprList + _lhsOoriginalTree :: ScalarExprList + _hdOcat :: Catalog+ _hdOidenv :: IDEnv+ _hdOlib :: LocalBindings+ _tlOcat :: Catalog+ _tlOidenv :: IDEnv+ _tlOlib :: LocalBindings+ _hdIannotatedTree :: ScalarExpr + _hdIfixedUpIdentifiersTree :: ScalarExpr + _hdIoriginalTree :: ScalarExpr + _hdIuType :: (Maybe Type)+ _tlIannotatedTree :: ScalarExprList + _tlIfixedUpIdentifiersTree :: ScalarExprList + _tlIoriginalTree :: ScalarExprList + _tlIuType :: ([Maybe Type])+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 107, column 12)+ _lhsOuType =+ _hdIuType : _tlIuType+ -- "./TypeChecking/ParameterizedStatements.ag"(line 86, column 12)+ _hdOexpectedType =+ case _lhsIexpectedTypes of+ (t:_) -> t+ _ -> Nothing+ -- "./TypeChecking/ParameterizedStatements.ag"(line 89, column 12)+ _tlOexpectedTypes =+ case _lhsIexpectedTypes of+ (_:ts) -> ts+ _ -> []+ -- self rule+ _annotatedTree =+ (:) _hdIannotatedTree _tlIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ (:) _hdIfixedUpIdentifiersTree _tlIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ (:) _hdIoriginalTree _tlIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _hdOcat =+ _lhsIcat+ -- copy rule (down)+ _hdOidenv =+ _lhsIidenv+ -- copy rule (down)+ _hdOlib =+ _lhsIlib+ -- copy rule (down)+ _tlOcat =+ _lhsIcat+ -- copy rule (down)+ _tlOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tlOlib =+ _lhsIlib+ ( _hdIannotatedTree,_hdIfixedUpIdentifiersTree,_hdIoriginalTree,_hdIuType) =+ hd_ _hdOcat _hdOexpectedType _hdOidenv _hdOlib + ( _tlIannotatedTree,_tlIfixedUpIdentifiersTree,_tlIoriginalTree,_tlIuType) =+ tl_ _tlOcat _tlOexpectedTypes _tlOidenv _tlOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+sem_ScalarExprList_Nil :: T_ScalarExprList +sem_ScalarExprList_Nil =+ (\ _lhsIcat+ _lhsIexpectedTypes+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOuType :: ([Maybe Type])+ _lhsOannotatedTree :: ScalarExprList + _lhsOfixedUpIdentifiersTree :: ScalarExprList + _lhsOoriginalTree :: ScalarExprList + -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 108, column 11)+ _lhsOuType =+ []+ -- self rule+ _annotatedTree =+ []+ -- self rule+ _fixedUpIdentifiersTree =+ []+ -- self rule+ _originalTree =+ []+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+-- ScalarExprListList ------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ expectedTypes : [Maybe Type]+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + uType : [[Maybe Type]]+ alternatives:+ alternative Cons:+ child hd : ScalarExprList + child tl : ScalarExprListList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Nil:+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type ScalarExprListList = [ScalarExprList ]+-- cata+sem_ScalarExprListList :: ScalarExprListList ->+ T_ScalarExprListList +sem_ScalarExprListList list =+ (Prelude.foldr sem_ScalarExprListList_Cons sem_ScalarExprListList_Nil (Prelude.map sem_ScalarExprList list) )+-- semantic domain+type T_ScalarExprListList = Catalog ->+ ([Maybe Type]) ->+ IDEnv ->+ LocalBindings ->+ ( ScalarExprListList ,ScalarExprListList ,ScalarExprListList ,([[Maybe Type]]))+data Inh_ScalarExprListList = Inh_ScalarExprListList {cat_Inh_ScalarExprListList :: Catalog,expectedTypes_Inh_ScalarExprListList :: ([Maybe Type]),idenv_Inh_ScalarExprListList :: IDEnv,lib_Inh_ScalarExprListList :: LocalBindings}+data Syn_ScalarExprListList = Syn_ScalarExprListList {annotatedTree_Syn_ScalarExprListList :: ScalarExprListList ,fixedUpIdentifiersTree_Syn_ScalarExprListList :: ScalarExprListList ,originalTree_Syn_ScalarExprListList :: ScalarExprListList ,uType_Syn_ScalarExprListList :: ([[Maybe Type]])}+wrap_ScalarExprListList :: T_ScalarExprListList ->+ Inh_ScalarExprListList ->+ Syn_ScalarExprListList +wrap_ScalarExprListList sem (Inh_ScalarExprListList _lhsIcat _lhsIexpectedTypes _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType) = sem _lhsIcat _lhsIexpectedTypes _lhsIidenv _lhsIlib + in (Syn_ScalarExprListList _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree _lhsOuType ))+sem_ScalarExprListList_Cons :: T_ScalarExprList ->+ T_ScalarExprListList ->+ T_ScalarExprListList +sem_ScalarExprListList_Cons hd_ tl_ =+ (\ _lhsIcat+ _lhsIexpectedTypes+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOuType :: ([[Maybe Type]])+ _hdOexpectedTypes :: ([Maybe Type])+ _tlOexpectedTypes :: ([Maybe Type])+ _lhsOannotatedTree :: ScalarExprListList + _lhsOfixedUpIdentifiersTree :: ScalarExprListList + _lhsOoriginalTree :: ScalarExprListList + _hdOcat :: Catalog+ _hdOidenv :: IDEnv+ _hdOlib :: LocalBindings+ _tlOcat :: Catalog+ _tlOidenv :: IDEnv+ _tlOlib :: LocalBindings+ _hdIannotatedTree :: ScalarExprList + _hdIfixedUpIdentifiersTree :: ScalarExprList + _hdIoriginalTree :: ScalarExprList + _hdIuType :: ([Maybe Type])+ _tlIannotatedTree :: ScalarExprListList + _tlIfixedUpIdentifiersTree :: ScalarExprListList + _tlIoriginalTree :: ScalarExprListList + _tlIuType :: ([[Maybe Type]])+ -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 117, column 12)+ _lhsOuType =+ _hdIuType : _tlIuType+ -- "./TypeChecking/ParameterizedStatements.ag"(line 167, column 12)+ _hdOexpectedTypes =+ _lhsIexpectedTypes+ -- "./TypeChecking/ParameterizedStatements.ag"(line 168, column 12)+ _tlOexpectedTypes =+ _lhsIexpectedTypes+ -- self rule+ _annotatedTree =+ (:) _hdIannotatedTree _tlIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ (:) _hdIfixedUpIdentifiersTree _tlIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ (:) _hdIoriginalTree _tlIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _hdOcat =+ _lhsIcat+ -- copy rule (down)+ _hdOidenv =+ _lhsIidenv+ -- copy rule (down)+ _hdOlib =+ _lhsIlib+ -- copy rule (down)+ _tlOcat =+ _lhsIcat+ -- copy rule (down)+ _tlOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tlOlib =+ _lhsIlib+ ( _hdIannotatedTree,_hdIfixedUpIdentifiersTree,_hdIoriginalTree,_hdIuType) =+ hd_ _hdOcat _hdOexpectedTypes _hdOidenv _hdOlib + ( _tlIannotatedTree,_tlIfixedUpIdentifiersTree,_tlIoriginalTree,_tlIuType) =+ tl_ _tlOcat _tlOexpectedTypes _tlOidenv _tlOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+sem_ScalarExprListList_Nil :: T_ScalarExprListList +sem_ScalarExprListList_Nil =+ (\ _lhsIcat+ _lhsIexpectedTypes+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOuType :: ([[Maybe Type]])+ _lhsOannotatedTree :: ScalarExprListList + _lhsOfixedUpIdentifiersTree :: ScalarExprListList + _lhsOoriginalTree :: ScalarExprListList + -- "./TypeChecking/ScalarExprs/ScalarExprs.ag"(line 118, column 11)+ _lhsOuType =+ []+ -- self rule+ _annotatedTree =+ []+ -- self rule+ _fixedUpIdentifiersTree =+ []+ -- self rule+ _originalTree =+ []+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOuType)))+-- ScalarExprListStatementListPair -----------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + alternatives:+ alternative Tuple:+ child x1 : ScalarExprList + child x2 : StatementList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type ScalarExprListStatementListPair = ( ScalarExprList ,StatementList )+-- cata+sem_ScalarExprListStatementListPair :: ScalarExprListStatementListPair ->+ T_ScalarExprListStatementListPair +sem_ScalarExprListStatementListPair ( x1,x2) =+ (sem_ScalarExprListStatementListPair_Tuple (sem_ScalarExprList x1 ) (sem_StatementList x2 ) )+-- semantic domain+type T_ScalarExprListStatementListPair = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( ScalarExprListStatementListPair ,ScalarExprListStatementListPair ,ScalarExprListStatementListPair )+data Inh_ScalarExprListStatementListPair = Inh_ScalarExprListStatementListPair {cat_Inh_ScalarExprListStatementListPair :: Catalog,idenv_Inh_ScalarExprListStatementListPair :: IDEnv,lib_Inh_ScalarExprListStatementListPair :: LocalBindings}+data Syn_ScalarExprListStatementListPair = Syn_ScalarExprListStatementListPair {annotatedTree_Syn_ScalarExprListStatementListPair :: ScalarExprListStatementListPair ,fixedUpIdentifiersTree_Syn_ScalarExprListStatementListPair :: ScalarExprListStatementListPair ,originalTree_Syn_ScalarExprListStatementListPair :: ScalarExprListStatementListPair }+wrap_ScalarExprListStatementListPair :: T_ScalarExprListStatementListPair ->+ Inh_ScalarExprListStatementListPair ->+ Syn_ScalarExprListStatementListPair +wrap_ScalarExprListStatementListPair sem (Inh_ScalarExprListStatementListPair _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_ScalarExprListStatementListPair _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree ))+sem_ScalarExprListStatementListPair_Tuple :: T_ScalarExprList ->+ T_StatementList ->+ T_ScalarExprListStatementListPair +sem_ScalarExprListStatementListPair_Tuple x1_ x2_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _x2OcatUpdates :: ([CatalogUpdate])+ _x2OlibUpdates :: ([LocalBindingsUpdate])+ _x1OexpectedTypes :: ([Maybe Type])+ _lhsOannotatedTree :: ScalarExprListStatementListPair + _lhsOfixedUpIdentifiersTree :: ScalarExprListStatementListPair + _lhsOoriginalTree :: ScalarExprListStatementListPair + _x1Ocat :: Catalog+ _x1Oidenv :: IDEnv+ _x1Olib :: LocalBindings+ _x2Ocat :: Catalog+ _x2Oidenv :: IDEnv+ _x2Olib :: LocalBindings+ _x1IannotatedTree :: ScalarExprList + _x1IfixedUpIdentifiersTree :: ScalarExprList + _x1IoriginalTree :: ScalarExprList + _x1IuType :: ([Maybe Type])+ _x2IannotatedTree :: StatementList + _x2IfixedUpIdentifiersTree :: StatementList + _x2IoriginalTree :: StatementList + _x2IproducedCat :: Catalog+ _x2IproducedLib :: LocalBindings+ -- "./TypeChecking/Statements.ag"(line 121, column 9)+ _x2OcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 122, column 9)+ _x2OlibUpdates =+ []+ -- "./TypeChecking/ParameterizedStatements.ag"(line 144, column 13)+ _x1OexpectedTypes =+ []+ -- self rule+ _annotatedTree =+ (_x1IannotatedTree,_x2IannotatedTree)+ -- self rule+ _fixedUpIdentifiersTree =+ (_x1IfixedUpIdentifiersTree,_x2IfixedUpIdentifiersTree)+ -- self rule+ _originalTree =+ (_x1IoriginalTree,_x2IoriginalTree)+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _x1Ocat =+ _lhsIcat+ -- copy rule (down)+ _x1Oidenv =+ _lhsIidenv+ -- copy rule (down)+ _x1Olib =+ _lhsIlib+ -- copy rule (down)+ _x2Ocat =+ _lhsIcat+ -- copy rule (down)+ _x2Oidenv =+ _lhsIidenv+ -- copy rule (down)+ _x2Olib =+ _lhsIlib+ ( _x1IannotatedTree,_x1IfixedUpIdentifiersTree,_x1IoriginalTree,_x1IuType) =+ x1_ _x1Ocat _x1OexpectedTypes _x1Oidenv _x1Olib + ( _x2IannotatedTree,_x2IfixedUpIdentifiersTree,_x2IoriginalTree,_x2IproducedCat,_x2IproducedLib) =+ x2_ _x2Ocat _x2OcatUpdates _x2Oidenv _x2Olib _x2OlibUpdates + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+-- ScalarExprListStatementListPairList -------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + alternatives:+ alternative Cons:+ child hd : ScalarExprListStatementListPair + child tl : ScalarExprListStatementListPairList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Nil:+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type ScalarExprListStatementListPairList = [ScalarExprListStatementListPair ]+-- cata+sem_ScalarExprListStatementListPairList :: ScalarExprListStatementListPairList ->+ T_ScalarExprListStatementListPairList +sem_ScalarExprListStatementListPairList list =+ (Prelude.foldr sem_ScalarExprListStatementListPairList_Cons sem_ScalarExprListStatementListPairList_Nil (Prelude.map sem_ScalarExprListStatementListPair list) )+-- semantic domain+type T_ScalarExprListStatementListPairList = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( ScalarExprListStatementListPairList ,ScalarExprListStatementListPairList ,ScalarExprListStatementListPairList )+data Inh_ScalarExprListStatementListPairList = Inh_ScalarExprListStatementListPairList {cat_Inh_ScalarExprListStatementListPairList :: Catalog,idenv_Inh_ScalarExprListStatementListPairList :: IDEnv,lib_Inh_ScalarExprListStatementListPairList :: LocalBindings}+data Syn_ScalarExprListStatementListPairList = Syn_ScalarExprListStatementListPairList {annotatedTree_Syn_ScalarExprListStatementListPairList :: ScalarExprListStatementListPairList ,fixedUpIdentifiersTree_Syn_ScalarExprListStatementListPairList :: ScalarExprListStatementListPairList ,originalTree_Syn_ScalarExprListStatementListPairList :: ScalarExprListStatementListPairList }+wrap_ScalarExprListStatementListPairList :: T_ScalarExprListStatementListPairList ->+ Inh_ScalarExprListStatementListPairList ->+ Syn_ScalarExprListStatementListPairList +wrap_ScalarExprListStatementListPairList sem (Inh_ScalarExprListStatementListPairList _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_ScalarExprListStatementListPairList _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree ))+sem_ScalarExprListStatementListPairList_Cons :: T_ScalarExprListStatementListPair ->+ T_ScalarExprListStatementListPairList ->+ T_ScalarExprListStatementListPairList +sem_ScalarExprListStatementListPairList_Cons hd_ tl_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExprListStatementListPairList + _lhsOfixedUpIdentifiersTree :: ScalarExprListStatementListPairList + _lhsOoriginalTree :: ScalarExprListStatementListPairList + _hdOcat :: Catalog+ _hdOidenv :: IDEnv+ _hdOlib :: LocalBindings+ _tlOcat :: Catalog+ _tlOidenv :: IDEnv+ _tlOlib :: LocalBindings+ _hdIannotatedTree :: ScalarExprListStatementListPair + _hdIfixedUpIdentifiersTree :: ScalarExprListStatementListPair + _hdIoriginalTree :: ScalarExprListStatementListPair + _tlIannotatedTree :: ScalarExprListStatementListPairList + _tlIfixedUpIdentifiersTree :: ScalarExprListStatementListPairList + _tlIoriginalTree :: ScalarExprListStatementListPairList + -- self rule+ _annotatedTree =+ (:) _hdIannotatedTree _tlIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ (:) _hdIfixedUpIdentifiersTree _tlIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ (:) _hdIoriginalTree _tlIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _hdOcat =+ _lhsIcat+ -- copy rule (down)+ _hdOidenv =+ _lhsIidenv+ -- copy rule (down)+ _hdOlib =+ _lhsIlib+ -- copy rule (down)+ _tlOcat =+ _lhsIcat+ -- copy rule (down)+ _tlOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tlOlib =+ _lhsIlib+ ( _hdIannotatedTree,_hdIfixedUpIdentifiersTree,_hdIoriginalTree) =+ hd_ _hdOcat _hdOidenv _hdOlib + ( _tlIannotatedTree,_tlIfixedUpIdentifiersTree,_tlIoriginalTree) =+ tl_ _tlOcat _tlOidenv _tlOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_ScalarExprListStatementListPairList_Nil :: T_ScalarExprListStatementListPairList +sem_ScalarExprListStatementListPairList_Nil =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExprListStatementListPairList + _lhsOfixedUpIdentifiersTree :: ScalarExprListStatementListPairList + _lhsOoriginalTree :: ScalarExprListStatementListPairList + -- self rule+ _annotatedTree =+ []+ -- self rule+ _fixedUpIdentifiersTree =+ []+ -- self rule+ _originalTree =+ []+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+-- ScalarExprRoot ----------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + alternatives:+ alternative ScalarExprRoot:+ child expr : ScalarExpr + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+data ScalarExprRoot = ScalarExprRoot (ScalarExpr ) + deriving ( Show)+-- cata+sem_ScalarExprRoot :: ScalarExprRoot ->+ T_ScalarExprRoot +sem_ScalarExprRoot (ScalarExprRoot _expr ) =+ (sem_ScalarExprRoot_ScalarExprRoot (sem_ScalarExpr _expr ) )+-- semantic domain+type T_ScalarExprRoot = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( ScalarExprRoot ,ScalarExprRoot ,ScalarExprRoot )+data Inh_ScalarExprRoot = Inh_ScalarExprRoot {cat_Inh_ScalarExprRoot :: Catalog,idenv_Inh_ScalarExprRoot :: IDEnv,lib_Inh_ScalarExprRoot :: LocalBindings}+data Syn_ScalarExprRoot = Syn_ScalarExprRoot {annotatedTree_Syn_ScalarExprRoot :: ScalarExprRoot ,fixedUpIdentifiersTree_Syn_ScalarExprRoot :: ScalarExprRoot ,originalTree_Syn_ScalarExprRoot :: ScalarExprRoot }+wrap_ScalarExprRoot :: T_ScalarExprRoot ->+ Inh_ScalarExprRoot ->+ Syn_ScalarExprRoot +wrap_ScalarExprRoot sem (Inh_ScalarExprRoot _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_ScalarExprRoot _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree ))+sem_ScalarExprRoot_ScalarExprRoot :: T_ScalarExpr ->+ T_ScalarExprRoot +sem_ScalarExprRoot_ScalarExprRoot expr_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _exprOexpectedType :: (Maybe Type)+ _lhsOannotatedTree :: ScalarExprRoot + _lhsOfixedUpIdentifiersTree :: ScalarExprRoot + _lhsOoriginalTree :: ScalarExprRoot + _exprOcat :: Catalog+ _exprOidenv :: IDEnv+ _exprOlib :: LocalBindings+ _exprIannotatedTree :: ScalarExpr + _exprIfixedUpIdentifiersTree :: ScalarExpr + _exprIoriginalTree :: ScalarExpr + _exprIuType :: (Maybe Type)+ -- "./TypeChecking/ParameterizedStatements.ag"(line 123, column 22)+ _exprOexpectedType =+ Nothing+ -- self rule+ _annotatedTree =+ ScalarExprRoot _exprIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ ScalarExprRoot _exprIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ ScalarExprRoot _exprIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _exprOcat =+ _lhsIcat+ -- copy rule (down)+ _exprOidenv =+ _lhsIidenv+ -- copy rule (down)+ _exprOlib =+ _lhsIlib+ ( _exprIannotatedTree,_exprIfixedUpIdentifiersTree,_exprIoriginalTree,_exprIuType) =+ expr_ _exprOcat _exprOexpectedType _exprOidenv _exprOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+-- ScalarExprStatementListPair ---------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + alternatives:+ alternative Tuple:+ child x1 : ScalarExpr + child x2 : StatementList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type ScalarExprStatementListPair = ( ScalarExpr ,StatementList )+-- cata+sem_ScalarExprStatementListPair :: ScalarExprStatementListPair ->+ T_ScalarExprStatementListPair +sem_ScalarExprStatementListPair ( x1,x2) =+ (sem_ScalarExprStatementListPair_Tuple (sem_ScalarExpr x1 ) (sem_StatementList x2 ) )+-- semantic domain+type T_ScalarExprStatementListPair = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( ScalarExprStatementListPair ,ScalarExprStatementListPair ,ScalarExprStatementListPair )+data Inh_ScalarExprStatementListPair = Inh_ScalarExprStatementListPair {cat_Inh_ScalarExprStatementListPair :: Catalog,idenv_Inh_ScalarExprStatementListPair :: IDEnv,lib_Inh_ScalarExprStatementListPair :: LocalBindings}+data Syn_ScalarExprStatementListPair = Syn_ScalarExprStatementListPair {annotatedTree_Syn_ScalarExprStatementListPair :: ScalarExprStatementListPair ,fixedUpIdentifiersTree_Syn_ScalarExprStatementListPair :: ScalarExprStatementListPair ,originalTree_Syn_ScalarExprStatementListPair :: ScalarExprStatementListPair }+wrap_ScalarExprStatementListPair :: T_ScalarExprStatementListPair ->+ Inh_ScalarExprStatementListPair ->+ Syn_ScalarExprStatementListPair +wrap_ScalarExprStatementListPair sem (Inh_ScalarExprStatementListPair _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_ScalarExprStatementListPair _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree ))+sem_ScalarExprStatementListPair_Tuple :: T_ScalarExpr ->+ T_StatementList ->+ T_ScalarExprStatementListPair +sem_ScalarExprStatementListPair_Tuple x1_ x2_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _x2OcatUpdates :: ([CatalogUpdate])+ _x2OlibUpdates :: ([LocalBindingsUpdate])+ _x1OexpectedType :: (Maybe Type)+ _lhsOannotatedTree :: ScalarExprStatementListPair + _lhsOfixedUpIdentifiersTree :: ScalarExprStatementListPair + _lhsOoriginalTree :: ScalarExprStatementListPair + _x1Ocat :: Catalog+ _x1Oidenv :: IDEnv+ _x1Olib :: LocalBindings+ _x2Ocat :: Catalog+ _x2Oidenv :: IDEnv+ _x2Olib :: LocalBindings+ _x1IannotatedTree :: ScalarExpr + _x1IfixedUpIdentifiersTree :: ScalarExpr + _x1IoriginalTree :: ScalarExpr + _x1IuType :: (Maybe Type)+ _x2IannotatedTree :: StatementList + _x2IfixedUpIdentifiersTree :: StatementList + _x2IoriginalTree :: StatementList + _x2IproducedCat :: Catalog+ _x2IproducedLib :: LocalBindings+ -- "./TypeChecking/Statements.ag"(line 125, column 9)+ _x2OcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 126, column 9)+ _x2OlibUpdates =+ []+ -- "./TypeChecking/ParameterizedStatements.ag"(line 126, column 13)+ _x1OexpectedType =+ Nothing+ -- self rule+ _annotatedTree =+ (_x1IannotatedTree,_x2IannotatedTree)+ -- self rule+ _fixedUpIdentifiersTree =+ (_x1IfixedUpIdentifiersTree,_x2IfixedUpIdentifiersTree)+ -- self rule+ _originalTree =+ (_x1IoriginalTree,_x2IoriginalTree)+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _x1Ocat =+ _lhsIcat+ -- copy rule (down)+ _x1Oidenv =+ _lhsIidenv+ -- copy rule (down)+ _x1Olib =+ _lhsIlib+ -- copy rule (down)+ _x2Ocat =+ _lhsIcat+ -- copy rule (down)+ _x2Oidenv =+ _lhsIidenv+ -- copy rule (down)+ _x2Olib =+ _lhsIlib+ ( _x1IannotatedTree,_x1IfixedUpIdentifiersTree,_x1IoriginalTree,_x1IuType) =+ x1_ _x1Ocat _x1OexpectedType _x1Oidenv _x1Olib + ( _x2IannotatedTree,_x2IfixedUpIdentifiersTree,_x2IoriginalTree,_x2IproducedCat,_x2IproducedLib) =+ x2_ _x2Ocat _x2OcatUpdates _x2Oidenv _x2Olib _x2OlibUpdates + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+-- ScalarExprStatementListPairList -----------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + alternatives:+ alternative Cons:+ child hd : ScalarExprStatementListPair + child tl : ScalarExprStatementListPairList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Nil:+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type ScalarExprStatementListPairList = [ScalarExprStatementListPair ]+-- cata+sem_ScalarExprStatementListPairList :: ScalarExprStatementListPairList ->+ T_ScalarExprStatementListPairList +sem_ScalarExprStatementListPairList list =+ (Prelude.foldr sem_ScalarExprStatementListPairList_Cons sem_ScalarExprStatementListPairList_Nil (Prelude.map sem_ScalarExprStatementListPair list) )+-- semantic domain+type T_ScalarExprStatementListPairList = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( ScalarExprStatementListPairList ,ScalarExprStatementListPairList ,ScalarExprStatementListPairList )+data Inh_ScalarExprStatementListPairList = Inh_ScalarExprStatementListPairList {cat_Inh_ScalarExprStatementListPairList :: Catalog,idenv_Inh_ScalarExprStatementListPairList :: IDEnv,lib_Inh_ScalarExprStatementListPairList :: LocalBindings}+data Syn_ScalarExprStatementListPairList = Syn_ScalarExprStatementListPairList {annotatedTree_Syn_ScalarExprStatementListPairList :: ScalarExprStatementListPairList ,fixedUpIdentifiersTree_Syn_ScalarExprStatementListPairList :: ScalarExprStatementListPairList ,originalTree_Syn_ScalarExprStatementListPairList :: ScalarExprStatementListPairList }+wrap_ScalarExprStatementListPairList :: T_ScalarExprStatementListPairList ->+ Inh_ScalarExprStatementListPairList ->+ Syn_ScalarExprStatementListPairList +wrap_ScalarExprStatementListPairList sem (Inh_ScalarExprStatementListPairList _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_ScalarExprStatementListPairList _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree ))+sem_ScalarExprStatementListPairList_Cons :: T_ScalarExprStatementListPair ->+ T_ScalarExprStatementListPairList ->+ T_ScalarExprStatementListPairList +sem_ScalarExprStatementListPairList_Cons hd_ tl_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExprStatementListPairList + _lhsOfixedUpIdentifiersTree :: ScalarExprStatementListPairList + _lhsOoriginalTree :: ScalarExprStatementListPairList + _hdOcat :: Catalog+ _hdOidenv :: IDEnv+ _hdOlib :: LocalBindings+ _tlOcat :: Catalog+ _tlOidenv :: IDEnv+ _tlOlib :: LocalBindings+ _hdIannotatedTree :: ScalarExprStatementListPair + _hdIfixedUpIdentifiersTree :: ScalarExprStatementListPair + _hdIoriginalTree :: ScalarExprStatementListPair + _tlIannotatedTree :: ScalarExprStatementListPairList + _tlIfixedUpIdentifiersTree :: ScalarExprStatementListPairList + _tlIoriginalTree :: ScalarExprStatementListPairList + -- self rule+ _annotatedTree =+ (:) _hdIannotatedTree _tlIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ (:) _hdIfixedUpIdentifiersTree _tlIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ (:) _hdIoriginalTree _tlIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _hdOcat =+ _lhsIcat+ -- copy rule (down)+ _hdOidenv =+ _lhsIidenv+ -- copy rule (down)+ _hdOlib =+ _lhsIlib+ -- copy rule (down)+ _tlOcat =+ _lhsIcat+ -- copy rule (down)+ _tlOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tlOlib =+ _lhsIlib+ ( _hdIannotatedTree,_hdIfixedUpIdentifiersTree,_hdIoriginalTree) =+ hd_ _hdOcat _hdOidenv _hdOlib + ( _tlIannotatedTree,_tlIfixedUpIdentifiersTree,_tlIoriginalTree) =+ tl_ _tlOcat _tlOidenv _tlOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_ScalarExprStatementListPairList_Nil :: T_ScalarExprStatementListPairList +sem_ScalarExprStatementListPairList_Nil =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: ScalarExprStatementListPairList + _lhsOfixedUpIdentifiersTree :: ScalarExprStatementListPairList + _lhsOoriginalTree :: ScalarExprStatementListPairList + -- self rule+ _annotatedTree =+ []+ -- self rule+ _fixedUpIdentifiersTree =+ []+ -- self rule+ _originalTree =+ []+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+-- SelectItem --------------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + itemType : (String,Maybe Type)+ originalTree : SELF + seIdTree : [SelectItem]+ alternatives:+ alternative SelExp:+ child ann : {Annotation}+ child ex : ScalarExpr + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative SelectItem:+ child ann : {Annotation}+ child ex : ScalarExpr + child name : {String}+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+data SelectItem = SelExp (Annotation) (ScalarExpr ) + | SelectItem (Annotation) (ScalarExpr ) (String) + deriving ( Data,Eq,Show,Typeable)+-- cata+sem_SelectItem :: SelectItem ->+ T_SelectItem +sem_SelectItem (SelExp _ann _ex ) =+ (sem_SelectItem_SelExp _ann (sem_ScalarExpr _ex ) )+sem_SelectItem (SelectItem _ann _ex _name ) =+ (sem_SelectItem_SelectItem _ann (sem_ScalarExpr _ex ) _name )+-- semantic domain+type T_SelectItem = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( SelectItem ,SelectItem ,((String,Maybe Type)),SelectItem ,([SelectItem]))+data Inh_SelectItem = Inh_SelectItem {cat_Inh_SelectItem :: Catalog,idenv_Inh_SelectItem :: IDEnv,lib_Inh_SelectItem :: LocalBindings}+data Syn_SelectItem = Syn_SelectItem {annotatedTree_Syn_SelectItem :: SelectItem ,fixedUpIdentifiersTree_Syn_SelectItem :: SelectItem ,itemType_Syn_SelectItem :: ((String,Maybe Type)),originalTree_Syn_SelectItem :: SelectItem ,seIdTree_Syn_SelectItem :: ([SelectItem])}+wrap_SelectItem :: T_SelectItem ->+ Inh_SelectItem ->+ Syn_SelectItem +wrap_SelectItem sem (Inh_SelectItem _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOitemType,_lhsOoriginalTree,_lhsOseIdTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_SelectItem _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOitemType _lhsOoriginalTree _lhsOseIdTree ))+sem_SelectItem_SelExp :: Annotation ->+ T_ScalarExpr ->+ T_SelectItem +sem_SelectItem_SelExp ann_ ex_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOseIdTree :: ([SelectItem])+ _lhsOitemType :: ((String,Maybe Type))+ _exOexpectedType :: (Maybe Type)+ _lhsOannotatedTree :: SelectItem + _lhsOfixedUpIdentifiersTree :: SelectItem + _lhsOoriginalTree :: SelectItem + _exOcat :: Catalog+ _exOidenv :: IDEnv+ _exOlib :: LocalBindings+ _exIannotatedTree :: ScalarExpr + _exIfixedUpIdentifiersTree :: ScalarExpr + _exIoriginalTree :: ScalarExpr + _exIuType :: (Maybe Type)+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 150, column 14)+ _lhsOseIdTree =+ case _exIfixedUpIdentifiersTree of+ Identifier a "*" -> let s = expandStar _lhsIidenv Nothing+ in if null s+ then [addSIAlias $ SelExp ann_ _exIfixedUpIdentifiersTree]+ else makeSelExps ann_ a a s+ QIdentifier a0 (Identifier a1 q) "*" ->+ let s = expandStar _lhsIidenv $ Just q+ in if null s+ then [addSIAlias $ SelExp ann_ _exIfixedUpIdentifiersTree]+ else makeSelExps ann_ a0 a1 s+ _ -> [addSIAlias $ SelExp ann_ _exIfixedUpIdentifiersTree]+ -- "./TypeChecking/QueryExprs/SelectLists.ag"(line 32, column 9)+ _annotatedTree =+ SelExp ann_ _exIannotatedTree+ -- "./TypeChecking/QueryExprs/SelectLists.ag"(line 60, column 9)+ _lhsOitemType =+ ("", Nothing)+ -- "./TypeChecking/ParameterizedStatements.ag"(line 106, column 25)+ _exOexpectedType =+ Nothing+ -- self rule+ _fixedUpIdentifiersTree =+ SelExp ann_ _exIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ SelExp ann_ _exIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _exOcat =+ _lhsIcat+ -- copy rule (down)+ _exOidenv =+ _lhsIidenv+ -- copy rule (down)+ _exOlib =+ _lhsIlib+ ( _exIannotatedTree,_exIfixedUpIdentifiersTree,_exIoriginalTree,_exIuType) =+ ex_ _exOcat _exOexpectedType _exOidenv _exOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOitemType,_lhsOoriginalTree,_lhsOseIdTree)))+sem_SelectItem_SelectItem :: Annotation ->+ T_ScalarExpr ->+ String ->+ T_SelectItem +sem_SelectItem_SelectItem ann_ ex_ name_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOseIdTree :: ([SelectItem])+ _lhsOitemType :: ((String,Maybe Type))+ _exOexpectedType :: (Maybe Type)+ _lhsOannotatedTree :: SelectItem + _lhsOfixedUpIdentifiersTree :: SelectItem + _lhsOoriginalTree :: SelectItem + _exOcat :: Catalog+ _exOidenv :: IDEnv+ _exOlib :: LocalBindings+ _exIannotatedTree :: ScalarExpr + _exIfixedUpIdentifiersTree :: ScalarExpr + _exIoriginalTree :: ScalarExpr + _exIuType :: (Maybe Type)+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 163, column 18)+ _lhsOseIdTree =+ [SelectItem ann_ _exIfixedUpIdentifiersTree name_]+ -- "./TypeChecking/QueryExprs/SelectLists.ag"(line 34, column 9)+ _annotatedTree =+ SelectItem ann_ _exIannotatedTree name_+ -- "./TypeChecking/QueryExprs/SelectLists.ag"(line 62, column 9)+ _lhsOitemType =+ (name_, unwrapSetof `fmap` _exIuType)+ -- "./TypeChecking/ParameterizedStatements.ag"(line 106, column 25)+ _exOexpectedType =+ Nothing+ -- self rule+ _fixedUpIdentifiersTree =+ SelectItem ann_ _exIfixedUpIdentifiersTree name_+ -- self rule+ _originalTree =+ SelectItem ann_ _exIoriginalTree name_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _exOcat =+ _lhsIcat+ -- copy rule (down)+ _exOidenv =+ _lhsIidenv+ -- copy rule (down)+ _exOlib =+ _lhsIlib+ ( _exIannotatedTree,_exIfixedUpIdentifiersTree,_exIoriginalTree,_exIuType) =+ ex_ _exOcat _exOexpectedType _exOidenv _exOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOitemType,_lhsOoriginalTree,_lhsOseIdTree)))+-- SelectItemList ----------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + listType : [(String,Maybe Type)]+ originalTree : SELF + alternatives:+ alternative Cons:+ child hd : SelectItem + child tl : SelectItemList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Nil:+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type SelectItemList = [SelectItem ]+-- cata+sem_SelectItemList :: SelectItemList ->+ T_SelectItemList +sem_SelectItemList list =+ (Prelude.foldr sem_SelectItemList_Cons sem_SelectItemList_Nil (Prelude.map sem_SelectItem list) )+-- semantic domain+type T_SelectItemList = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( SelectItemList ,SelectItemList ,([(String,Maybe Type)]),SelectItemList )+data Inh_SelectItemList = Inh_SelectItemList {cat_Inh_SelectItemList :: Catalog,idenv_Inh_SelectItemList :: IDEnv,lib_Inh_SelectItemList :: LocalBindings}+data Syn_SelectItemList = Syn_SelectItemList {annotatedTree_Syn_SelectItemList :: SelectItemList ,fixedUpIdentifiersTree_Syn_SelectItemList :: SelectItemList ,listType_Syn_SelectItemList :: ([(String,Maybe Type)]),originalTree_Syn_SelectItemList :: SelectItemList }+wrap_SelectItemList :: T_SelectItemList ->+ Inh_SelectItemList ->+ Syn_SelectItemList +wrap_SelectItemList sem (Inh_SelectItemList _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOlistType,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_SelectItemList _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOlistType _lhsOoriginalTree ))+sem_SelectItemList_Cons :: T_SelectItem ->+ T_SelectItemList ->+ T_SelectItemList +sem_SelectItemList_Cons hd_ tl_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOfixedUpIdentifiersTree :: SelectItemList + _lhsOlistType :: ([(String,Maybe Type)])+ _lhsOannotatedTree :: SelectItemList + _lhsOoriginalTree :: SelectItemList + _hdOcat :: Catalog+ _hdOidenv :: IDEnv+ _hdOlib :: LocalBindings+ _tlOcat :: Catalog+ _tlOidenv :: IDEnv+ _tlOlib :: LocalBindings+ _hdIannotatedTree :: SelectItem + _hdIfixedUpIdentifiersTree :: SelectItem + _hdIitemType :: ((String,Maybe Type))+ _hdIoriginalTree :: SelectItem + _hdIseIdTree :: ([SelectItem])+ _tlIannotatedTree :: SelectItemList + _tlIfixedUpIdentifiersTree :: SelectItemList + _tlIlistType :: ([(String,Maybe Type)])+ _tlIoriginalTree :: SelectItemList + -- "./TypeChecking/FixUpIdentifiers.ag"(line 141, column 12)+ _lhsOfixedUpIdentifiersTree =+ _hdIseIdTree ++ _tlIfixedUpIdentifiersTree+ -- "./TypeChecking/QueryExprs/SelectLists.ag"(line 42, column 12)+ _lhsOlistType =+ _hdIitemType : _tlIlistType+ -- self rule+ _annotatedTree =+ (:) _hdIannotatedTree _tlIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ (:) _hdIfixedUpIdentifiersTree _tlIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ (:) _hdIoriginalTree _tlIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _hdOcat =+ _lhsIcat+ -- copy rule (down)+ _hdOidenv =+ _lhsIidenv+ -- copy rule (down)+ _hdOlib =+ _lhsIlib+ -- copy rule (down)+ _tlOcat =+ _lhsIcat+ -- copy rule (down)+ _tlOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tlOlib =+ _lhsIlib+ ( _hdIannotatedTree,_hdIfixedUpIdentifiersTree,_hdIitemType,_hdIoriginalTree,_hdIseIdTree) =+ hd_ _hdOcat _hdOidenv _hdOlib + ( _tlIannotatedTree,_tlIfixedUpIdentifiersTree,_tlIlistType,_tlIoriginalTree) =+ tl_ _tlOcat _tlOidenv _tlOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOlistType,_lhsOoriginalTree)))+sem_SelectItemList_Nil :: T_SelectItemList +sem_SelectItemList_Nil =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOfixedUpIdentifiersTree :: SelectItemList + _lhsOlistType :: ([(String,Maybe Type)])+ _lhsOannotatedTree :: SelectItemList + _lhsOoriginalTree :: SelectItemList + -- "./TypeChecking/FixUpIdentifiers.ag"(line 142, column 11)+ _lhsOfixedUpIdentifiersTree =+ []+ -- "./TypeChecking/QueryExprs/SelectLists.ag"(line 43, column 11)+ _lhsOlistType =+ []+ -- self rule+ _annotatedTree =+ []+ -- self rule+ _fixedUpIdentifiersTree =+ []+ -- self rule+ _originalTree =+ []+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOlistType,_lhsOoriginalTree)))+-- SelectList --------------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + cidenv : IDEnv+ fixedUpIdentifiersTree : SELF + libUpdates : [LocalBindingsUpdate]+ listType : [(String,Maybe Type)]+ originalTree : SELF + alternatives:+ alternative SelectList:+ child ann : {Annotation}+ child items : SelectItemList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+data SelectList = SelectList (Annotation) (SelectItemList ) + deriving ( Data,Eq,Show,Typeable)+-- cata+sem_SelectList :: SelectList ->+ T_SelectList +sem_SelectList (SelectList _ann _items ) =+ (sem_SelectList_SelectList _ann (sem_SelectItemList _items ) )+-- semantic domain+type T_SelectList = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( SelectList ,IDEnv,SelectList ,([LocalBindingsUpdate]),([(String,Maybe Type)]),SelectList )+data Inh_SelectList = Inh_SelectList {cat_Inh_SelectList :: Catalog,idenv_Inh_SelectList :: IDEnv,lib_Inh_SelectList :: LocalBindings}+data Syn_SelectList = Syn_SelectList {annotatedTree_Syn_SelectList :: SelectList ,cidenv_Syn_SelectList :: IDEnv,fixedUpIdentifiersTree_Syn_SelectList :: SelectList ,libUpdates_Syn_SelectList :: ([LocalBindingsUpdate]),listType_Syn_SelectList :: ([(String,Maybe Type)]),originalTree_Syn_SelectList :: SelectList }+wrap_SelectList :: T_SelectList ->+ Inh_SelectList ->+ Syn_SelectList +wrap_SelectList sem (Inh_SelectList _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOcidenv,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOlistType,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_SelectList _lhsOannotatedTree _lhsOcidenv _lhsOfixedUpIdentifiersTree _lhsOlibUpdates _lhsOlistType _lhsOoriginalTree ))+sem_SelectList_SelectList :: Annotation ->+ T_SelectItemList ->+ T_SelectList +sem_SelectList_SelectList ann_ items_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOcidenv :: IDEnv+ _lhsOlistType :: ([(String,Maybe Type)])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _lhsOannotatedTree :: SelectList + _lhsOfixedUpIdentifiersTree :: SelectList + _lhsOoriginalTree :: SelectList + _itemsOcat :: Catalog+ _itemsOidenv :: IDEnv+ _itemsOlib :: LocalBindings+ _itemsIannotatedTree :: SelectItemList + _itemsIfixedUpIdentifiersTree :: SelectItemList + _itemsIlistType :: ([(String,Maybe Type)])+ _itemsIoriginalTree :: SelectItemList + -- "./TypeChecking/FixUpIdentifiers.ag"(line 124, column 18)+ _lhsOcidenv =+ makeIDEnv "" $ flip map _itemsIfixedUpIdentifiersTree+ $ \(SelectItem _ _ n) -> n+ -- "./TypeChecking/QueryExprs/SelectLists.ag"(line 77, column 9)+ _lhsOlistType =+ _itemsIlistType+ -- "./TypeChecking/QueryExprs/SelectLists.ag"(line 97, column 9)+ _lhsOlibUpdates =+ []+ -- "./TypeChecking/QueryExprs/SelectLists.ag"(line 131, column 9)+ _lhsOannotatedTree =+ SelectList ann_+ _itemsIannotatedTree+ -- self rule+ _annotatedTree =+ SelectList ann_ _itemsIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ SelectList ann_ _itemsIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ SelectList ann_ _itemsIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _itemsOcat =+ _lhsIcat+ -- copy rule (down)+ _itemsOidenv =+ _lhsIidenv+ -- copy rule (down)+ _itemsOlib =+ _lhsIlib+ ( _itemsIannotatedTree,_itemsIfixedUpIdentifiersTree,_itemsIlistType,_itemsIoriginalTree) =+ items_ _itemsOcat _itemsOidenv _itemsOlib + in ( _lhsOannotatedTree,_lhsOcidenv,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOlistType,_lhsOoriginalTree)))+-- Statement ---------------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ inProducedCat : Catalog+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + catUpdates : [CatalogUpdate]+ fixedUpIdentifiersTree : SELF + libUpdates : [LocalBindingsUpdate]+ originalTree : SELF + alternatives:+ alternative AlterSequence:+ child ann : {Annotation}+ child name : {String}+ child ownedBy : SQIdentifier + visit 0:+ local libUpdates : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative AlterTable:+ child ann : {Annotation}+ child name : {String}+ child actions : AlterTableActionList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Assignment:+ child ann : {Annotation}+ child target : ScalarExpr + child value : ScalarExpr + visit 0:+ local libUpdates : _+ local tpe : {Either [TypeError] Type}+ local backTree : _+ local catUpdates : {[CatalogUpdate]}+ local statementType : {Maybe StatementType}+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Block:+ child ann : {Annotation}+ child lb : {Maybe String}+ child vars : VarDefList + child sts : StatementList + visit 0:+ local libUpdates : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative CaseStatement:+ child ann : {Annotation}+ child cases : ScalarExprListStatementListPairList + child els : StatementList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative CaseStatementSimple:+ child ann : {Annotation}+ child val : ScalarExpr + child cases : ScalarExprListStatementListPairList + child els : StatementList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative ContinueStatement:+ child ann : {Annotation}+ child lb : {Maybe String}+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Copy:+ child ann : {Annotation}+ child table : {String}+ child targetCols : {[String]}+ child source : {CopySource}+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative CopyData:+ child ann : {Annotation}+ child insData : {String}+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative CreateDomain:+ child ann : {Annotation}+ child name : {String}+ child typ : TypeName + child checkName : {String}+ child check : MaybeBoolExpr + visit 0:+ local libUpdates : _+ local tpe : {Either [TypeError] Type}+ local backTree : _+ local statementType : {Maybe StatementType}+ local catUpdates : {[CatalogUpdate]}+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative CreateFunction:+ child ann : {Annotation}+ child name : {String}+ child params : ParamDefList + child rettype : TypeName + child rep : {Replace}+ child lang : {Language}+ child body : FnBody + child vol : {Volatility}+ visit 0:+ local libUpdates : _+ local tpe : {Either [TypeError] Type}+ local catUpdates : {[CatalogUpdate]}+ local backTree : _+ local statementType : {Maybe StatementType}+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative CreateLanguage:+ child ann : {Annotation}+ child name : {String}+ visit 0:+ local libUpdates : _+ local tpe : {Either [TypeError] Type}+ local backTree : _+ local statementType : {Maybe StatementType}+ local catUpdates : {[CatalogUpdate]}+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative CreateSequence:+ child ann : {Annotation}+ child name : {String}+ child incr : {Integer}+ child min : {Integer}+ child max : {Integer}+ child start : {Integer}+ child cache : {Integer}+ visit 0:+ local libUpdates : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative CreateTable:+ child ann : {Annotation}+ child name : {String}+ child atts : AttributeDefList + child cons : ConstraintList + visit 0:+ local libUpdates : _+ local tpe : {Either [TypeError] Type}+ local catUpdates : {[CatalogUpdate]}+ local attrs : {[(String,Type)]}+ local statementType : {Maybe StatementType}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative CreateTableAs:+ child ann : {Annotation}+ child name : {String}+ child expr : QueryExpr + visit 0:+ local libUpdates : _+ local tpe : {Either [TypeError] Type}+ local catUpdates : {[CatalogUpdate]}+ local attrs : {Either [TypeError] [(String,Type)]}+ local backTree : _+ local statementType : {Maybe StatementType}+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative CreateTrigger:+ child ann : {Annotation}+ child name : {String}+ child wh : {TriggerWhen}+ child events : {[TriggerEvent]}+ child tbl : {String}+ child firing : {TriggerFire}+ child fnName : {String}+ child fnArgs : ScalarExprList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative CreateType:+ child ann : {Annotation}+ child name : {String}+ child atts : TypeAttributeDefList + visit 0:+ local libUpdates : _+ local tpe : {Either [TypeError] Type}+ local attrs : _+ local backTree : _+ local statementType : {Maybe StatementType}+ local catUpdates : {[CatalogUpdate]}+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative CreateView:+ child ann : {Annotation}+ child name : {String}+ child colNames : {Maybe [String]}+ child expr : QueryExpr + visit 0:+ local libUpdates : _+ local tpe : {Either [TypeError] Type}+ local backTree : _+ local catUpdates : {[CatalogUpdate]}+ local statementType : {Maybe StatementType}+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Delete:+ child ann : {Annotation}+ child table : SQIdentifier + child using : TableRefList + child whr : MaybeBoolExpr + child returning : MaybeSelectList + visit 0:+ local libUpdates : _+ local tpe : {Either [TypeError] Type}+ local statementType : {Maybe StatementType}+ local backTree : _+ local catUpdates : {[CatalogUpdate]}+ local lib : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative DropFunction:+ child ann : {Annotation}+ child ifE : {IfExists}+ child sigs : StringTypeNameListPairList + child cascade : {Cascade}+ visit 0:+ local libUpdates : _+ local tpe : {Either [TypeError] Type}+ local backTree : _+ local catUpdates : {[CatalogUpdate]}+ local statementType : {Maybe StatementType}+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative DropSomething:+ child ann : {Annotation}+ child dropType : {DropType}+ child ifE : {IfExists}+ child names : {[String]}+ child cascade : {Cascade}+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Execute:+ child ann : {Annotation}+ child expr : ScalarExpr + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative ExitStatement:+ child ann : {Annotation}+ child lb : {Maybe String}+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative ForIntegerStatement:+ child ann : {Annotation}+ child lb : {Maybe String}+ child var : ScalarExpr + child from : ScalarExpr + child to : ScalarExpr + child sts : StatementList + visit 0:+ local libUpdates : _+ local tpe : {Either [TypeError] Type}+ local implicitVar : _+ local backTree : _+ local catUpdates : {[CatalogUpdate]}+ local statementType : {Maybe StatementType}+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative ForQueryStatement:+ child ann : {Annotation}+ child lb : {Maybe String}+ child var : ScalarExpr + child sel : QueryExpr + child sts : StatementList + visit 0:+ local libUpdates : _+ local tpe : {Either [TypeError] Type}+ local backTree : _+ local catUpdates : {[CatalogUpdate]}+ local statementType : {Maybe StatementType}+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative If:+ child ann : {Annotation}+ child cases : ScalarExprStatementListPairList + child els : StatementList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Insert:+ child ann : {Annotation}+ child table : SQIdentifier + child targetCols : {[String]}+ child insData : QueryExpr + child returning : MaybeSelectList + visit 0:+ local libUpdates : _+ local tpe : {Either [TypeError] Type}+ local statementType : {Maybe StatementType}+ local columnTypes : {Either [TypeError] [(String,Type)]}+ local backTree : _+ local catUpdates : {[CatalogUpdate]}+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Into:+ child ann : {Annotation}+ child strict : {Bool}+ child into : ScalarExprList + child stmt : Statement + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative LoopStatement:+ child ann : {Annotation}+ child lb : {Maybe String}+ child sts : StatementList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Notify:+ child ann : {Annotation}+ child name : {String}+ visit 0:+ local libUpdates : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative NullStatement:+ child ann : {Annotation}+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Perform:+ child ann : {Annotation}+ child expr : ScalarExpr + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative QueryStatement:+ child ann : {Annotation}+ child ex : QueryExpr + visit 0:+ local tpe : {Either [TypeError] Type}+ local statementType : {Maybe StatementType}+ local backTree : _+ local catUpdates : {[CatalogUpdate]}+ local libUpdates : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Raise:+ child ann : {Annotation}+ child level : {RaiseType}+ child message : {String}+ child args : ScalarExprList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Return:+ child ann : {Annotation}+ child value : MaybeScalarExpr + visit 0:+ local libUpdates : _+ local tpe : {Either [TypeError] Type}+ local backTree : _+ local catUpdates : {[CatalogUpdate]}+ local statementType : {Maybe StatementType}+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative ReturnNext:+ child ann : {Annotation}+ child expr : ScalarExpr + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative ReturnQuery:+ child ann : {Annotation}+ child sel : QueryExpr + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Set:+ child ann : {Annotation}+ child name : {String}+ child values : {[SetValue]}+ visit 0:+ local libUpdates : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Truncate:+ child ann : {Annotation}+ child tables : {[String]}+ child restartIdentity : {RestartIdentity}+ child cascade : {Cascade}+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Update:+ child ann : {Annotation}+ child table : SQIdentifier + child assigns : ScalarExprList + child fromList : TableRefList + child whr : MaybeBoolExpr + child returning : MaybeSelectList + visit 0:+ local libUpdates : _+ local tpe : {Either [TypeError] Type}+ local statementType : {Maybe StatementType}+ local backTree : _+ local catUpdates : {[CatalogUpdate]}+ local lib : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative WhileStatement:+ child ann : {Annotation}+ child lb : {Maybe String}+ child expr : ScalarExpr + child sts : StatementList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+data Statement = AlterSequence (Annotation) (String) (SQIdentifier ) + | AlterTable (Annotation) (String) (AlterTableActionList ) + | Assignment (Annotation) (ScalarExpr ) (ScalarExpr ) + | Block (Annotation) ((Maybe String)) (VarDefList ) (StatementList ) + | CaseStatement (Annotation) (ScalarExprListStatementListPairList ) (StatementList ) + | CaseStatementSimple (Annotation) (ScalarExpr ) (ScalarExprListStatementListPairList ) (StatementList ) + | ContinueStatement (Annotation) ((Maybe String)) + | Copy (Annotation) (String) (([String])) (CopySource) + | CopyData (Annotation) (String) + | CreateDomain (Annotation) (String) (TypeName ) (String) (MaybeBoolExpr ) + | CreateFunction (Annotation) (String) (ParamDefList ) (TypeName ) (Replace) (Language) (FnBody ) (Volatility) + | CreateLanguage (Annotation) (String) + | CreateSequence (Annotation) (String) (Integer) (Integer) (Integer) (Integer) (Integer) + | CreateTable (Annotation) (String) (AttributeDefList ) (ConstraintList ) + | CreateTableAs (Annotation) (String) (QueryExpr ) + | CreateTrigger (Annotation) (String) (TriggerWhen) (([TriggerEvent])) (String) (TriggerFire) (String) (ScalarExprList ) + | CreateType (Annotation) (String) (TypeAttributeDefList ) + | CreateView (Annotation) (String) ((Maybe [String])) (QueryExpr ) + | Delete (Annotation) (SQIdentifier ) (TableRefList ) (MaybeBoolExpr ) (MaybeSelectList ) + | DropFunction (Annotation) (IfExists) (StringTypeNameListPairList ) (Cascade) + | DropSomething (Annotation) (DropType) (IfExists) (([String])) (Cascade) + | Execute (Annotation) (ScalarExpr ) + | ExitStatement (Annotation) ((Maybe String)) + | ForIntegerStatement (Annotation) ((Maybe String)) (ScalarExpr ) (ScalarExpr ) (ScalarExpr ) (StatementList ) + | ForQueryStatement (Annotation) ((Maybe String)) (ScalarExpr ) (QueryExpr ) (StatementList ) + | If (Annotation) (ScalarExprStatementListPairList ) (StatementList ) + | Insert (Annotation) (SQIdentifier ) (([String])) (QueryExpr ) (MaybeSelectList ) + | Into (Annotation) (Bool) (ScalarExprList ) (Statement ) + | LoopStatement (Annotation) ((Maybe String)) (StatementList ) + | Notify (Annotation) (String) + | NullStatement (Annotation) + | Perform (Annotation) (ScalarExpr ) + | QueryStatement (Annotation) (QueryExpr ) + | Raise (Annotation) (RaiseType) (String) (ScalarExprList ) + | Return (Annotation) (MaybeScalarExpr ) + | ReturnNext (Annotation) (ScalarExpr ) + | ReturnQuery (Annotation) (QueryExpr ) + | Set (Annotation) (String) (([SetValue])) + | Truncate (Annotation) (([String])) (RestartIdentity) (Cascade) + | Update (Annotation) (SQIdentifier ) (ScalarExprList ) (TableRefList ) (MaybeBoolExpr ) (MaybeSelectList ) + | WhileStatement (Annotation) ((Maybe String)) (ScalarExpr ) (StatementList ) + deriving ( Data,Eq,Show,Typeable)+-- cata+sem_Statement :: Statement ->+ T_Statement +sem_Statement (AlterSequence _ann _name _ownedBy ) =+ (sem_Statement_AlterSequence _ann _name (sem_SQIdentifier _ownedBy ) )+sem_Statement (AlterTable _ann _name _actions ) =+ (sem_Statement_AlterTable _ann _name (sem_AlterTableActionList _actions ) )+sem_Statement (Assignment _ann _target _value ) =+ (sem_Statement_Assignment _ann (sem_ScalarExpr _target ) (sem_ScalarExpr _value ) )+sem_Statement (Block _ann _lb _vars _sts ) =+ (sem_Statement_Block _ann _lb (sem_VarDefList _vars ) (sem_StatementList _sts ) )+sem_Statement (CaseStatement _ann _cases _els ) =+ (sem_Statement_CaseStatement _ann (sem_ScalarExprListStatementListPairList _cases ) (sem_StatementList _els ) )+sem_Statement (CaseStatementSimple _ann _val _cases _els ) =+ (sem_Statement_CaseStatementSimple _ann (sem_ScalarExpr _val ) (sem_ScalarExprListStatementListPairList _cases ) (sem_StatementList _els ) )+sem_Statement (ContinueStatement _ann _lb ) =+ (sem_Statement_ContinueStatement _ann _lb )+sem_Statement (Copy _ann _table _targetCols _source ) =+ (sem_Statement_Copy _ann _table _targetCols _source )+sem_Statement (CopyData _ann _insData ) =+ (sem_Statement_CopyData _ann _insData )+sem_Statement (CreateDomain _ann _name _typ _checkName _check ) =+ (sem_Statement_CreateDomain _ann _name (sem_TypeName _typ ) _checkName (sem_MaybeBoolExpr _check ) )+sem_Statement (CreateFunction _ann _name _params _rettype _rep _lang _body _vol ) =+ (sem_Statement_CreateFunction _ann _name (sem_ParamDefList _params ) (sem_TypeName _rettype ) _rep _lang (sem_FnBody _body ) _vol )+sem_Statement (CreateLanguage _ann _name ) =+ (sem_Statement_CreateLanguage _ann _name )+sem_Statement (CreateSequence _ann _name _incr _min _max _start _cache ) =+ (sem_Statement_CreateSequence _ann _name _incr _min _max _start _cache )+sem_Statement (CreateTable _ann _name _atts _cons ) =+ (sem_Statement_CreateTable _ann _name (sem_AttributeDefList _atts ) (sem_ConstraintList _cons ) )+sem_Statement (CreateTableAs _ann _name _expr ) =+ (sem_Statement_CreateTableAs _ann _name (sem_QueryExpr _expr ) )+sem_Statement (CreateTrigger _ann _name _wh _events _tbl _firing _fnName _fnArgs ) =+ (sem_Statement_CreateTrigger _ann _name _wh _events _tbl _firing _fnName (sem_ScalarExprList _fnArgs ) )+sem_Statement (CreateType _ann _name _atts ) =+ (sem_Statement_CreateType _ann _name (sem_TypeAttributeDefList _atts ) )+sem_Statement (CreateView _ann _name _colNames _expr ) =+ (sem_Statement_CreateView _ann _name _colNames (sem_QueryExpr _expr ) )+sem_Statement (Delete _ann _table _using _whr _returning ) =+ (sem_Statement_Delete _ann (sem_SQIdentifier _table ) (sem_TableRefList _using ) (sem_MaybeBoolExpr _whr ) (sem_MaybeSelectList _returning ) )+sem_Statement (DropFunction _ann _ifE _sigs _cascade ) =+ (sem_Statement_DropFunction _ann _ifE (sem_StringTypeNameListPairList _sigs ) _cascade )+sem_Statement (DropSomething _ann _dropType _ifE _names _cascade ) =+ (sem_Statement_DropSomething _ann _dropType _ifE _names _cascade )+sem_Statement (Execute _ann _expr ) =+ (sem_Statement_Execute _ann (sem_ScalarExpr _expr ) )+sem_Statement (ExitStatement _ann _lb ) =+ (sem_Statement_ExitStatement _ann _lb )+sem_Statement (ForIntegerStatement _ann _lb _var _from _to _sts ) =+ (sem_Statement_ForIntegerStatement _ann _lb (sem_ScalarExpr _var ) (sem_ScalarExpr _from ) (sem_ScalarExpr _to ) (sem_StatementList _sts ) )+sem_Statement (ForQueryStatement _ann _lb _var _sel _sts ) =+ (sem_Statement_ForQueryStatement _ann _lb (sem_ScalarExpr _var ) (sem_QueryExpr _sel ) (sem_StatementList _sts ) )+sem_Statement (If _ann _cases _els ) =+ (sem_Statement_If _ann (sem_ScalarExprStatementListPairList _cases ) (sem_StatementList _els ) )+sem_Statement (Insert _ann _table _targetCols _insData _returning ) =+ (sem_Statement_Insert _ann (sem_SQIdentifier _table ) _targetCols (sem_QueryExpr _insData ) (sem_MaybeSelectList _returning ) )+sem_Statement (Into _ann _strict _into _stmt ) =+ (sem_Statement_Into _ann _strict (sem_ScalarExprList _into ) (sem_Statement _stmt ) )+sem_Statement (LoopStatement _ann _lb _sts ) =+ (sem_Statement_LoopStatement _ann _lb (sem_StatementList _sts ) )+sem_Statement (Notify _ann _name ) =+ (sem_Statement_Notify _ann _name )+sem_Statement (NullStatement _ann ) =+ (sem_Statement_NullStatement _ann )+sem_Statement (Perform _ann _expr ) =+ (sem_Statement_Perform _ann (sem_ScalarExpr _expr ) )+sem_Statement (QueryStatement _ann _ex ) =+ (sem_Statement_QueryStatement _ann (sem_QueryExpr _ex ) )+sem_Statement (Raise _ann _level _message _args ) =+ (sem_Statement_Raise _ann _level _message (sem_ScalarExprList _args ) )+sem_Statement (Return _ann _value ) =+ (sem_Statement_Return _ann (sem_MaybeScalarExpr _value ) )+sem_Statement (ReturnNext _ann _expr ) =+ (sem_Statement_ReturnNext _ann (sem_ScalarExpr _expr ) )+sem_Statement (ReturnQuery _ann _sel ) =+ (sem_Statement_ReturnQuery _ann (sem_QueryExpr _sel ) )+sem_Statement (Set _ann _name _values ) =+ (sem_Statement_Set _ann _name _values )+sem_Statement (Truncate _ann _tables _restartIdentity _cascade ) =+ (sem_Statement_Truncate _ann _tables _restartIdentity _cascade )+sem_Statement (Update _ann _table _assigns _fromList _whr _returning ) =+ (sem_Statement_Update _ann (sem_SQIdentifier _table ) (sem_ScalarExprList _assigns ) (sem_TableRefList _fromList ) (sem_MaybeBoolExpr _whr ) (sem_MaybeSelectList _returning ) )+sem_Statement (WhileStatement _ann _lb _expr _sts ) =+ (sem_Statement_WhileStatement _ann _lb (sem_ScalarExpr _expr ) (sem_StatementList _sts ) )+-- semantic domain+type T_Statement = Catalog ->+ IDEnv ->+ Catalog ->+ LocalBindings ->+ ( Statement ,([CatalogUpdate]),Statement ,([LocalBindingsUpdate]),Statement )+data Inh_Statement = Inh_Statement {cat_Inh_Statement :: Catalog,idenv_Inh_Statement :: IDEnv,inProducedCat_Inh_Statement :: Catalog,lib_Inh_Statement :: LocalBindings}+data Syn_Statement = Syn_Statement {annotatedTree_Syn_Statement :: Statement ,catUpdates_Syn_Statement :: ([CatalogUpdate]),fixedUpIdentifiersTree_Syn_Statement :: Statement ,libUpdates_Syn_Statement :: ([LocalBindingsUpdate]),originalTree_Syn_Statement :: Statement }+wrap_Statement :: T_Statement ->+ Inh_Statement ->+ Syn_Statement +wrap_Statement sem (Inh_Statement _lhsIcat _lhsIidenv _lhsIinProducedCat _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIinProducedCat _lhsIlib + in (Syn_Statement _lhsOannotatedTree _lhsOcatUpdates _lhsOfixedUpIdentifiersTree _lhsOlibUpdates _lhsOoriginalTree ))+sem_Statement_AlterSequence :: Annotation ->+ String ->+ T_SQIdentifier ->+ T_Statement +sem_Statement_AlterSequence ann_ name_ ownedBy_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _ownedByOcat :: Catalog+ _ownedByOidenv :: IDEnv+ _ownedByOlib :: LocalBindings+ _ownedByIannotatedTree :: SQIdentifier + _ownedByIfixedUpIdentifiersTree :: SQIdentifier + _ownedByIoriginalTree :: SQIdentifier + _ownedByItbAnnotatedTree :: SQIdentifier + _ownedByItbUType :: (Maybe ([(String,Type)],[(String,Type)]))+ -- "./TypeChecking/Statements.ag"(line 94, column 9)+ _libUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- self rule+ _annotatedTree =+ AlterSequence ann_ name_ _ownedByIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ AlterSequence ann_ name_ _ownedByIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ AlterSequence ann_ name_ _ownedByIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _ownedByOcat =+ _lhsIcat+ -- copy rule (down)+ _ownedByOidenv =+ _lhsIidenv+ -- copy rule (down)+ _ownedByOlib =+ _lhsIlib+ ( _ownedByIannotatedTree,_ownedByIfixedUpIdentifiersTree,_ownedByIoriginalTree,_ownedByItbAnnotatedTree,_ownedByItbUType) =+ ownedBy_ _ownedByOcat _ownedByOidenv _ownedByOlib + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_AlterTable :: Annotation ->+ String ->+ T_AlterTableActionList ->+ T_Statement +sem_Statement_AlterTable ann_ name_ actions_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _actionsOcat :: Catalog+ _actionsOidenv :: IDEnv+ _actionsOlib :: LocalBindings+ _actionsIannotatedTree :: AlterTableActionList + _actionsIfixedUpIdentifiersTree :: AlterTableActionList + _actionsIoriginalTree :: AlterTableActionList + -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- self rule+ _annotatedTree =+ AlterTable ann_ name_ _actionsIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ AlterTable ann_ name_ _actionsIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ AlterTable ann_ name_ _actionsIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _actionsOcat =+ _lhsIcat+ -- copy rule (down)+ _actionsOidenv =+ _lhsIidenv+ -- copy rule (down)+ _actionsOlib =+ _lhsIlib+ ( _actionsIannotatedTree,_actionsIfixedUpIdentifiersTree,_actionsIoriginalTree) =+ actions_ _actionsOcat _actionsOidenv _actionsOlib + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_Assignment :: Annotation ->+ T_ScalarExpr ->+ T_ScalarExpr ->+ T_Statement +sem_Statement_Assignment ann_ target_ value_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOannotatedTree :: Statement + _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _tpe :: (Either [TypeError] Type)+ _catUpdates :: ([CatalogUpdate])+ _statementType :: (Maybe StatementType)+ _valueOexpectedType :: (Maybe Type)+ _targetOexpectedType :: (Maybe Type)+ _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _targetOcat :: Catalog+ _targetOidenv :: IDEnv+ _targetOlib :: LocalBindings+ _valueOcat :: Catalog+ _valueOidenv :: IDEnv+ _valueOlib :: LocalBindings+ _targetIannotatedTree :: ScalarExpr + _targetIfixedUpIdentifiersTree :: ScalarExpr + _targetIoriginalTree :: ScalarExpr + _targetIuType :: (Maybe Type)+ _valueIannotatedTree :: ScalarExpr + _valueIfixedUpIdentifiersTree :: ScalarExpr + _valueIoriginalTree :: ScalarExpr + _valueIuType :: (Maybe Type)+ -- "./TypeChecking/Statements.ag"(line 82, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (\a -> a {stType = _statementType+ ,catUpd = _catUpdates }) $+ setTypeAddErrors _tpe _backTree+ -- "./TypeChecking/Statements.ag"(line 88, column 9)+ _lhsOcatUpdates =+ _catUpdates+ -- "./TypeChecking/Statements.ag"(line 89, column 9)+ _lhsOlibUpdates =+ _libUpdates+ -- "./TypeChecking/Statements.ag"(line 94, column 9)+ _libUpdates =+ []+ -- "./TypeChecking/Plpgsql/Plpgsql.ag"(line 20, column 9)+ _tpe =+ do+ fromType <- lmt _valueIuType+ toType <- lmt _targetIuType+ checkAssignmentValid _lhsIcat fromType toType+ return $ Pseudo Void+ -- "./TypeChecking/Plpgsql/Plpgsql.ag"(line 26, column 9)+ _backTree =+ Assignment ann_ _targetIannotatedTree _valueIannotatedTree+ -- "./TypeChecking/Plpgsql/Plpgsql.ag"(line 27, column 9)+ _catUpdates =+ []+ -- "./TypeChecking/Plpgsql/Plpgsql.ag"(line 28, column 9)+ _statementType =+ Nothing+ -- "./TypeChecking/ParameterizedStatements.ag"(line 109, column 18)+ _valueOexpectedType =+ Nothing+ -- "./TypeChecking/ParameterizedStatements.ag"(line 115, column 18)+ _targetOexpectedType =+ Nothing+ -- self rule+ _annotatedTree =+ Assignment ann_ _targetIannotatedTree _valueIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ Assignment ann_ _targetIfixedUpIdentifiersTree _valueIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ Assignment ann_ _targetIoriginalTree _valueIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _targetOcat =+ _lhsIcat+ -- copy rule (down)+ _targetOidenv =+ _lhsIidenv+ -- copy rule (down)+ _targetOlib =+ _lhsIlib+ -- copy rule (down)+ _valueOcat =+ _lhsIcat+ -- copy rule (down)+ _valueOidenv =+ _lhsIidenv+ -- copy rule (down)+ _valueOlib =+ _lhsIlib+ ( _targetIannotatedTree,_targetIfixedUpIdentifiersTree,_targetIoriginalTree,_targetIuType) =+ target_ _targetOcat _targetOexpectedType _targetOidenv _targetOlib + ( _valueIannotatedTree,_valueIfixedUpIdentifiersTree,_valueIoriginalTree,_valueIuType) =+ value_ _valueOcat _valueOexpectedType _valueOidenv _valueOlib + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_Block :: Annotation ->+ (Maybe String) ->+ T_VarDefList ->+ T_StatementList ->+ T_Statement +sem_Statement_Block ann_ lb_ vars_ sts_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _stsOcatUpdates :: ([CatalogUpdate])+ _stsOlib :: LocalBindings+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _varsOcat :: Catalog+ _varsOidenv :: IDEnv+ _varsOlib :: LocalBindings+ _stsOcat :: Catalog+ _stsOidenv :: IDEnv+ _stsOlibUpdates :: ([LocalBindingsUpdate])+ _varsIannotatedTree :: VarDefList + _varsIdefs :: ([(String,Maybe Type)])+ _varsIfixedUpIdentifiersTree :: VarDefList + _varsIoriginalTree :: VarDefList + _stsIannotatedTree :: StatementList + _stsIfixedUpIdentifiersTree :: StatementList + _stsIoriginalTree :: StatementList + _stsIproducedCat :: Catalog+ _stsIproducedLib :: LocalBindings+ -- "./TypeChecking/Statements.ag"(line 94, column 9)+ _libUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 100, column 13)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 101, column 13)+ _stsOcatUpdates =+ []+ -- "./TypeChecking/Plpgsql/Block.ag"(line 22, column 9)+ _stsOlib =+ fromRight _lhsIlib $+ lbUpdate _lhsIcat+ (LBIds "declarations" lb_ $ mapMaybe lv _varsIdefs)+ _lhsIlib+ where+ lv (_,Nothing) = Nothing+ lv (s,Just t) = Just (s,t)+ -- self rule+ _annotatedTree =+ Block ann_ lb_ _varsIannotatedTree _stsIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ Block ann_ lb_ _varsIfixedUpIdentifiersTree _stsIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ Block ann_ lb_ _varsIoriginalTree _stsIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (from local)+ _lhsOlibUpdates =+ _libUpdates+ -- copy rule (down)+ _varsOcat =+ _lhsIcat+ -- copy rule (down)+ _varsOidenv =+ _lhsIidenv+ -- copy rule (down)+ _varsOlib =+ _lhsIlib+ -- copy rule (down)+ _stsOcat =+ _lhsIcat+ -- copy rule (down)+ _stsOidenv =+ _lhsIidenv+ -- copy rule (from local)+ _stsOlibUpdates =+ _libUpdates+ ( _varsIannotatedTree,_varsIdefs,_varsIfixedUpIdentifiersTree,_varsIoriginalTree) =+ vars_ _varsOcat _varsOidenv _varsOlib + ( _stsIannotatedTree,_stsIfixedUpIdentifiersTree,_stsIoriginalTree,_stsIproducedCat,_stsIproducedLib) =+ sts_ _stsOcat _stsOcatUpdates _stsOidenv _stsOlib _stsOlibUpdates + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_CaseStatement :: Annotation ->+ T_ScalarExprListStatementListPairList ->+ T_StatementList ->+ T_Statement +sem_Statement_CaseStatement ann_ cases_ els_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _elsOcatUpdates :: ([CatalogUpdate])+ _elsOlibUpdates :: ([LocalBindingsUpdate])+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _casesOcat :: Catalog+ _casesOidenv :: IDEnv+ _casesOlib :: LocalBindings+ _elsOcat :: Catalog+ _elsOidenv :: IDEnv+ _elsOlib :: LocalBindings+ _casesIannotatedTree :: ScalarExprListStatementListPairList + _casesIfixedUpIdentifiersTree :: ScalarExprListStatementListPairList + _casesIoriginalTree :: ScalarExprListStatementListPairList + _elsIannotatedTree :: StatementList + _elsIfixedUpIdentifiersTree :: StatementList + _elsIoriginalTree :: StatementList + _elsIproducedCat :: Catalog+ _elsIproducedLib :: LocalBindings+ -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 134, column 9)+ _elsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 135, column 9)+ _elsOlibUpdates =+ []+ -- self rule+ _annotatedTree =+ CaseStatement ann_ _casesIannotatedTree _elsIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ CaseStatement ann_ _casesIfixedUpIdentifiersTree _elsIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ CaseStatement ann_ _casesIoriginalTree _elsIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _casesOcat =+ _lhsIcat+ -- copy rule (down)+ _casesOidenv =+ _lhsIidenv+ -- copy rule (down)+ _casesOlib =+ _lhsIlib+ -- copy rule (down)+ _elsOcat =+ _lhsIcat+ -- copy rule (down)+ _elsOidenv =+ _lhsIidenv+ -- copy rule (down)+ _elsOlib =+ _lhsIlib+ ( _casesIannotatedTree,_casesIfixedUpIdentifiersTree,_casesIoriginalTree) =+ cases_ _casesOcat _casesOidenv _casesOlib + ( _elsIannotatedTree,_elsIfixedUpIdentifiersTree,_elsIoriginalTree,_elsIproducedCat,_elsIproducedLib) =+ els_ _elsOcat _elsOcatUpdates _elsOidenv _elsOlib _elsOlibUpdates + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_CaseStatementSimple :: Annotation ->+ T_ScalarExpr ->+ T_ScalarExprListStatementListPairList ->+ T_StatementList ->+ T_Statement +sem_Statement_CaseStatementSimple ann_ val_ cases_ els_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _elsOcatUpdates :: ([CatalogUpdate])+ _elsOlibUpdates :: ([LocalBindingsUpdate])+ _valOexpectedType :: (Maybe Type)+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _valOcat :: Catalog+ _valOidenv :: IDEnv+ _valOlib :: LocalBindings+ _casesOcat :: Catalog+ _casesOidenv :: IDEnv+ _casesOlib :: LocalBindings+ _elsOcat :: Catalog+ _elsOidenv :: IDEnv+ _elsOlib :: LocalBindings+ _valIannotatedTree :: ScalarExpr + _valIfixedUpIdentifiersTree :: ScalarExpr + _valIoriginalTree :: ScalarExpr + _valIuType :: (Maybe Type)+ _casesIannotatedTree :: ScalarExprListStatementListPairList + _casesIfixedUpIdentifiersTree :: ScalarExprListStatementListPairList + _casesIoriginalTree :: ScalarExprListStatementListPairList + _elsIannotatedTree :: StatementList + _elsIfixedUpIdentifiersTree :: StatementList + _elsIoriginalTree :: StatementList + _elsIproducedCat :: Catalog+ _elsIproducedLib :: LocalBindings+ -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 134, column 9)+ _elsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 135, column 9)+ _elsOlibUpdates =+ []+ -- "./TypeChecking/ParameterizedStatements.ag"(line 110, column 27)+ _valOexpectedType =+ Nothing+ -- self rule+ _annotatedTree =+ CaseStatementSimple ann_ _valIannotatedTree _casesIannotatedTree _elsIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ CaseStatementSimple ann_ _valIfixedUpIdentifiersTree _casesIfixedUpIdentifiersTree _elsIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ CaseStatementSimple ann_ _valIoriginalTree _casesIoriginalTree _elsIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _valOcat =+ _lhsIcat+ -- copy rule (down)+ _valOidenv =+ _lhsIidenv+ -- copy rule (down)+ _valOlib =+ _lhsIlib+ -- copy rule (down)+ _casesOcat =+ _lhsIcat+ -- copy rule (down)+ _casesOidenv =+ _lhsIidenv+ -- copy rule (down)+ _casesOlib =+ _lhsIlib+ -- copy rule (down)+ _elsOcat =+ _lhsIcat+ -- copy rule (down)+ _elsOidenv =+ _lhsIidenv+ -- copy rule (down)+ _elsOlib =+ _lhsIlib+ ( _valIannotatedTree,_valIfixedUpIdentifiersTree,_valIoriginalTree,_valIuType) =+ val_ _valOcat _valOexpectedType _valOidenv _valOlib + ( _casesIannotatedTree,_casesIfixedUpIdentifiersTree,_casesIoriginalTree) =+ cases_ _casesOcat _casesOidenv _casesOlib + ( _elsIannotatedTree,_elsIfixedUpIdentifiersTree,_elsIoriginalTree,_elsIproducedCat,_elsIproducedLib) =+ els_ _elsOcat _elsOcatUpdates _elsOidenv _elsOlib _elsOlibUpdates + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_ContinueStatement :: Annotation ->+ (Maybe String) ->+ T_Statement +sem_Statement_ContinueStatement ann_ lb_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- self rule+ _annotatedTree =+ ContinueStatement ann_ lb_+ -- self rule+ _fixedUpIdentifiersTree =+ ContinueStatement ann_ lb_+ -- self rule+ _originalTree =+ ContinueStatement ann_ lb_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_Copy :: Annotation ->+ String ->+ ([String]) ->+ CopySource ->+ T_Statement +sem_Statement_Copy ann_ table_ targetCols_ source_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- self rule+ _annotatedTree =+ Copy ann_ table_ targetCols_ source_+ -- self rule+ _fixedUpIdentifiersTree =+ Copy ann_ table_ targetCols_ source_+ -- self rule+ _originalTree =+ Copy ann_ table_ targetCols_ source_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_CopyData :: Annotation ->+ String ->+ T_Statement +sem_Statement_CopyData ann_ insData_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- self rule+ _annotatedTree =+ CopyData ann_ insData_+ -- self rule+ _fixedUpIdentifiersTree =+ CopyData ann_ insData_+ -- self rule+ _originalTree =+ CopyData ann_ insData_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_CreateDomain :: Annotation ->+ String ->+ T_TypeName ->+ String ->+ T_MaybeBoolExpr ->+ T_Statement +sem_Statement_CreateDomain ann_ name_ typ_ checkName_ check_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOannotatedTree :: Statement + _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _tpe :: (Either [TypeError] Type)+ _statementType :: (Maybe StatementType)+ _catUpdates :: ([CatalogUpdate])+ _checkOlib :: LocalBindings+ _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _typOcat :: Catalog+ _typOidenv :: IDEnv+ _typOlib :: LocalBindings+ _checkOcat :: Catalog+ _checkOidenv :: IDEnv+ _typIannotatedTree :: TypeName + _typIfixedUpIdentifiersTree :: TypeName + _typInamedType :: (Maybe Type)+ _typIoriginalTree :: TypeName + _checkIannotatedTree :: MaybeBoolExpr + _checkIfixedUpIdentifiersTree :: MaybeBoolExpr + _checkIoriginalTree :: MaybeBoolExpr + -- "./TypeChecking/Statements.ag"(line 82, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (\a -> a {stType = _statementType+ ,catUpd = _catUpdates }) $+ setTypeAddErrors _tpe _backTree+ -- "./TypeChecking/Statements.ag"(line 88, column 9)+ _lhsOcatUpdates =+ _catUpdates+ -- "./TypeChecking/Statements.ag"(line 89, column 9)+ _lhsOlibUpdates =+ _libUpdates+ -- "./TypeChecking/Statements.ag"(line 94, column 9)+ _libUpdates =+ []+ -- "./TypeChecking/Ddl/MiscCreates.ag"(line 65, column 9)+ _tpe =+ Right $ Pseudo Void+ -- "./TypeChecking/Ddl/MiscCreates.ag"(line 66, column 9)+ _backTree =+ CreateDomain ann_ name_ _typIannotatedTree checkName_ _checkIannotatedTree+ -- "./TypeChecking/Ddl/MiscCreates.ag"(line 67, column 9)+ _statementType =+ Nothing+ -- "./TypeChecking/Ddl/MiscCreates.ag"(line 68, column 9)+ _catUpdates =+ maybe [] (\t -> [CatCreateDomain (DomainType name_) t]) _typInamedType+ -- "./TypeChecking/Ddl/MiscCreates.ag"(line 70, column 9)+ _checkOlib =+ either (const _lhsIlib) id $ do+ nt <- lmt _typInamedType+ lbUpdate _lhsIcat+ (LBIds "domain check value" Nothing [("value", nt)])+ _lhsIlib+ -- self rule+ _annotatedTree =+ CreateDomain ann_ name_ _typIannotatedTree checkName_ _checkIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ CreateDomain ann_ name_ _typIfixedUpIdentifiersTree checkName_ _checkIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ CreateDomain ann_ name_ _typIoriginalTree checkName_ _checkIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _typOcat =+ _lhsIcat+ -- copy rule (down)+ _typOidenv =+ _lhsIidenv+ -- copy rule (down)+ _typOlib =+ _lhsIlib+ -- copy rule (down)+ _checkOcat =+ _lhsIcat+ -- copy rule (down)+ _checkOidenv =+ _lhsIidenv+ ( _typIannotatedTree,_typIfixedUpIdentifiersTree,_typInamedType,_typIoriginalTree) =+ typ_ _typOcat _typOidenv _typOlib + ( _checkIannotatedTree,_checkIfixedUpIdentifiersTree,_checkIoriginalTree) =+ check_ _checkOcat _checkOidenv _checkOlib + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_CreateFunction :: Annotation ->+ String ->+ T_ParamDefList ->+ T_TypeName ->+ Replace ->+ Language ->+ T_FnBody ->+ Volatility ->+ T_Statement +sem_Statement_CreateFunction ann_ name_ params_ rettype_ rep_ lang_ body_ vol_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOannotatedTree :: Statement + _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _bodyOlib :: LocalBindings+ _paramsOpos :: Int+ _tpe :: (Either [TypeError] Type)+ _catUpdates :: ([CatalogUpdate])+ _statementType :: (Maybe StatementType)+ _bodyOcat :: Catalog+ _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _paramsOcat :: Catalog+ _paramsOidenv :: IDEnv+ _paramsOlib :: LocalBindings+ _rettypeOcat :: Catalog+ _rettypeOidenv :: IDEnv+ _rettypeOlib :: LocalBindings+ _bodyOidenv :: IDEnv+ _paramsIannotatedTree :: ParamDefList + _paramsIfixedUpIdentifiersTree :: ParamDefList + _paramsIoriginalTree :: ParamDefList + _paramsIparams :: ([(ParamName, Maybe Type)])+ _rettypeIannotatedTree :: TypeName + _rettypeIfixedUpIdentifiersTree :: TypeName + _rettypeInamedType :: (Maybe Type)+ _rettypeIoriginalTree :: TypeName + _bodyIannotatedTree :: FnBody + _bodyIfixedUpIdentifiersTree :: FnBody + _bodyIoriginalTree :: FnBody + -- "./TypeChecking/Statements.ag"(line 82, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (\a -> a {stType = _statementType+ ,catUpd = _catUpdates }) $+ setTypeAddErrors _tpe _backTree+ -- "./TypeChecking/Statements.ag"(line 88, column 9)+ _lhsOcatUpdates =+ _catUpdates+ -- "./TypeChecking/Statements.ag"(line 89, column 9)+ _lhsOlibUpdates =+ _libUpdates+ -- "./TypeChecking/Statements.ag"(line 94, column 9)+ _libUpdates =+ []+ -- "./TypeChecking/Ddl/CreateFunction.ag"(line 63, column 9)+ _bodyOlib =+ either (const _lhsIlib) id $ do+ _ <- lmt _rettypeInamedType+ lbUpdate _lhsIcat (LBIds (name_ ++ " parameters") (Just name_) paramsNoPos) _lhsIlib+ >>= lbUpdate _lhsIcat (LBIds (name_ ++ " parameters") Nothing paramsPosOnly)+ where+ paramsPosOnly :: [(String,Type)]+ paramsPosOnly = mapMaybe prm _paramsIparams+ prm :: (ParamName,Maybe Type) -> Maybe (String,Type)+ prm (NamedParam p _,Just t) = Just ("$" ++ show p, t)+ prm (UnnamedParam p,Just t) = Just ("$" ++ show p, t)+ prm _ = Nothing+ paramsNoPos :: [(String,Type)]+ paramsNoPos = mapMaybe pnp _paramsIparams+ pnp :: (ParamName,Maybe Type) -> Maybe (String,Type)+ pnp (NamedParam _ n,Just t) = Just (n,t)+ pnp _ = Nothing+ -- "./TypeChecking/Ddl/CreateFunction.ag"(line 79, column 9)+ _paramsOpos =+ 1+ -- "./TypeChecking/Ddl/CreateFunction.ag"(line 88, column 9)+ _tpe =+ Right $ Pseudo Void+ -- "./TypeChecking/Ddl/CreateFunction.ag"(line 89, column 9)+ _catUpdates =+ either (const []) id $ do+ let ps = mapMaybe lpt _paramsIparams+ rt <- lmt _rettypeInamedType+ return [CatCreateFunction FunName+ (map toLower name_)+ ps+ rt+ False]+ where+ lpt (_,Just t) = Just t+ lpt _ = Nothing+ -- "./TypeChecking/Ddl/CreateFunction.ag"(line 101, column 9)+ _backTree =+ CreateFunction ann_+ name_+ _paramsIannotatedTree+ _rettypeIannotatedTree+ rep_+ lang_+ _bodyIannotatedTree+ vol_+ -- "./TypeChecking/Ddl/CreateFunction.ag"(line 109, column 9)+ _statementType =+ Nothing+ -- "./TypeChecking/Ddl/CreateFunction.ag"(line 110, column 9)+ _bodyOcat =+ _lhsIinProducedCat+ -- self rule+ _annotatedTree =+ CreateFunction ann_ name_ _paramsIannotatedTree _rettypeIannotatedTree rep_ lang_ _bodyIannotatedTree vol_+ -- self rule+ _fixedUpIdentifiersTree =+ CreateFunction ann_ name_ _paramsIfixedUpIdentifiersTree _rettypeIfixedUpIdentifiersTree rep_ lang_ _bodyIfixedUpIdentifiersTree vol_+ -- self rule+ _originalTree =+ CreateFunction ann_ name_ _paramsIoriginalTree _rettypeIoriginalTree rep_ lang_ _bodyIoriginalTree vol_+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _paramsOcat =+ _lhsIcat+ -- copy rule (down)+ _paramsOidenv =+ _lhsIidenv+ -- copy rule (down)+ _paramsOlib =+ _lhsIlib+ -- copy rule (down)+ _rettypeOcat =+ _lhsIcat+ -- copy rule (down)+ _rettypeOidenv =+ _lhsIidenv+ -- copy rule (down)+ _rettypeOlib =+ _lhsIlib+ -- copy rule (down)+ _bodyOidenv =+ _lhsIidenv+ ( _paramsIannotatedTree,_paramsIfixedUpIdentifiersTree,_paramsIoriginalTree,_paramsIparams) =+ params_ _paramsOcat _paramsOidenv _paramsOlib _paramsOpos + ( _rettypeIannotatedTree,_rettypeIfixedUpIdentifiersTree,_rettypeInamedType,_rettypeIoriginalTree) =+ rettype_ _rettypeOcat _rettypeOidenv _rettypeOlib + ( _bodyIannotatedTree,_bodyIfixedUpIdentifiersTree,_bodyIoriginalTree) =+ body_ _bodyOcat _bodyOidenv _bodyOlib + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_CreateLanguage :: Annotation ->+ String ->+ T_Statement +sem_Statement_CreateLanguage ann_ name_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOannotatedTree :: Statement + _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _tpe :: (Either [TypeError] Type)+ _statementType :: (Maybe StatementType)+ _catUpdates :: ([CatalogUpdate])+ _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + -- "./TypeChecking/Statements.ag"(line 82, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (\a -> a {stType = _statementType+ ,catUpd = _catUpdates }) $+ setTypeAddErrors _tpe _backTree+ -- "./TypeChecking/Statements.ag"(line 88, column 9)+ _lhsOcatUpdates =+ _catUpdates+ -- "./TypeChecking/Statements.ag"(line 89, column 9)+ _lhsOlibUpdates =+ _libUpdates+ -- "./TypeChecking/Statements.ag"(line 94, column 9)+ _libUpdates =+ []+ -- "./TypeChecking/Ddl/MiscCreates.ag"(line 78, column 9)+ _tpe =+ Right $ Pseudo Void+ -- "./TypeChecking/Ddl/MiscCreates.ag"(line 79, column 9)+ _backTree =+ CreateLanguage ann_ name_+ -- "./TypeChecking/Ddl/MiscCreates.ag"(line 80, column 9)+ _statementType =+ Nothing+ -- "./TypeChecking/Ddl/MiscCreates.ag"(line 81, column 9)+ _catUpdates =+ [CatCreateFunction FunName "plpgsql_call_handler" [] (Pseudo LanguageHandler) False+ ,CatCreateFunction FunName "plpgsql_validator" [ScalarType "oid"] (Pseudo Void) False]+ -- self rule+ _annotatedTree =+ CreateLanguage ann_ name_+ -- self rule+ _fixedUpIdentifiersTree =+ CreateLanguage ann_ name_+ -- self rule+ _originalTree =+ CreateLanguage ann_ name_+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_CreateSequence :: Annotation ->+ String ->+ Integer ->+ Integer ->+ Integer ->+ Integer ->+ Integer ->+ T_Statement +sem_Statement_CreateSequence ann_ name_ incr_ min_ max_ start_ cache_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + -- "./TypeChecking/Statements.ag"(line 94, column 9)+ _libUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- self rule+ _annotatedTree =+ CreateSequence ann_ name_ incr_ min_ max_ start_ cache_+ -- self rule+ _fixedUpIdentifiersTree =+ CreateSequence ann_ name_ incr_ min_ max_ start_ cache_+ -- self rule+ _originalTree =+ CreateSequence ann_ name_ incr_ min_ max_ start_ cache_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_CreateTable :: Annotation ->+ String ->+ T_AttributeDefList ->+ T_ConstraintList ->+ T_Statement +sem_Statement_CreateTable ann_ name_ atts_ cons_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOannotatedTree :: Statement + _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _tpe :: (Either [TypeError] Type)+ _catUpdates :: ([CatalogUpdate])+ _attrs :: ([(String,Type)])+ _statementType :: (Maybe StatementType)+ _consOlib :: LocalBindings+ _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _attsOcat :: Catalog+ _attsOidenv :: IDEnv+ _attsOlib :: LocalBindings+ _consOcat :: Catalog+ _consOidenv :: IDEnv+ _attsIannotatedTree :: AttributeDefList + _attsIattrs :: ([(String, Maybe Type)])+ _attsIfixedUpIdentifiersTree :: AttributeDefList + _attsIoriginalTree :: AttributeDefList + _consIannotatedTree :: ConstraintList + _consIfixedUpIdentifiersTree :: ConstraintList + _consIoriginalTree :: ConstraintList + -- "./TypeChecking/Statements.ag"(line 82, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (\a -> a {stType = _statementType+ ,catUpd = _catUpdates }) $+ setTypeAddErrors _tpe _backTree+ -- "./TypeChecking/Statements.ag"(line 88, column 9)+ _lhsOcatUpdates =+ _catUpdates+ -- "./TypeChecking/Statements.ag"(line 89, column 9)+ _lhsOlibUpdates =+ _libUpdates+ -- "./TypeChecking/Statements.ag"(line 94, column 9)+ _libUpdates =+ []+ -- "./TypeChecking/Ddl/CreateTable.ag"(line 31, column 9)+ _tpe =+ Right $ Pseudo Void+ -- "./TypeChecking/Ddl/CreateTable.ag"(line 32, column 9)+ _catUpdates =+ [CatCreateTable name_ _attrs defaultSystemColumns]+ -- "./TypeChecking/Ddl/CreateTable.ag"(line 35, column 9)+ _attrs =+ mapMaybe okAt _attsIattrs+ where+ okAt (s, Just t) = Just (s,t)+ okAt (_,Nothing) = Nothing+ -- "./TypeChecking/Ddl/CreateTable.ag"(line 40, column 9)+ _statementType =+ Nothing+ -- "./TypeChecking/Ddl/CreateTable.ag"(line 41, column 9)+ _backTree =+ CreateTable ann_+ name_+ _attsIannotatedTree+ _consIannotatedTree+ -- "./TypeChecking/Ddl/CreateTable.ag"(line 45, column 9)+ _consOlib =+ case lbUpdate _lhsIcat+ (LBIds "attributedefs" Nothing _attrs )+ _lhsIlib of+ Left x -> error $ "statement-createtable-cons.lib " ++ show x+ Right e -> e+ -- self rule+ _annotatedTree =+ CreateTable ann_ name_ _attsIannotatedTree _consIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ CreateTable ann_ name_ _attsIfixedUpIdentifiersTree _consIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ CreateTable ann_ name_ _attsIoriginalTree _consIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _attsOcat =+ _lhsIcat+ -- copy rule (down)+ _attsOidenv =+ _lhsIidenv+ -- copy rule (down)+ _attsOlib =+ _lhsIlib+ -- copy rule (down)+ _consOcat =+ _lhsIcat+ -- copy rule (down)+ _consOidenv =+ _lhsIidenv+ ( _attsIannotatedTree,_attsIattrs,_attsIfixedUpIdentifiersTree,_attsIoriginalTree) =+ atts_ _attsOcat _attsOidenv _attsOlib + ( _consIannotatedTree,_consIfixedUpIdentifiersTree,_consIoriginalTree) =+ cons_ _consOcat _consOidenv _consOlib + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_CreateTableAs :: Annotation ->+ String ->+ T_QueryExpr ->+ T_Statement +sem_Statement_CreateTableAs ann_ name_ expr_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOannotatedTree :: Statement + _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _exprOcsql :: LocalBindings+ _tpe :: (Either [TypeError] Type)+ _catUpdates :: ([CatalogUpdate])+ _attrs :: (Either [TypeError] [(String,Type)])+ _statementType :: (Maybe StatementType)+ _exprOexpectedTypes :: ([Maybe Type])+ _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _exprOcat :: Catalog+ _exprOidenv :: IDEnv+ _exprOlib :: LocalBindings+ _exprIannotatedTree :: QueryExpr + _exprIcidenv :: IDEnv+ _exprIfixedUpIdentifiersTree :: QueryExpr + _exprIlibUpdates :: ([LocalBindingsUpdate])+ _exprIoriginalTree :: QueryExpr + _exprIuType :: (Maybe [(String,Type)])+ -- "./TypeChecking/Statements.ag"(line 82, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (\a -> a {stType = _statementType+ ,catUpd = _catUpdates }) $+ setTypeAddErrors _tpe _backTree+ -- "./TypeChecking/Statements.ag"(line 88, column 9)+ _lhsOcatUpdates =+ _catUpdates+ -- "./TypeChecking/Statements.ag"(line 89, column 9)+ _lhsOlibUpdates =+ _libUpdates+ -- "./TypeChecking/Statements.ag"(line 94, column 9)+ _libUpdates =+ []+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 122, column 21)+ _exprOcsql =+ emptyBindings+ -- "./TypeChecking/Ddl/CreateTable.ag"(line 64, column 9)+ _tpe =+ CompositeType <$> lmt _exprIuType+ -- "./TypeChecking/Ddl/CreateTable.ag"(line 65, column 9)+ _catUpdates =+ either (const []) id $ do+ ats <- _attrs+ return [CatCreateTable name_ ats defaultSystemColumns]+ -- "./TypeChecking/Ddl/CreateTable.ag"(line 71, column 9)+ _attrs =+ lmt _exprIuType+ -- "./TypeChecking/Ddl/CreateTable.ag"(line 73, column 9)+ _backTree =+ CreateTableAs ann_ name_ _exprIannotatedTree+ -- "./TypeChecking/Ddl/CreateTable.ag"(line 74, column 9)+ _statementType =+ Nothing+ -- "./TypeChecking/ParameterizedStatements.ag"(line 175, column 32)+ _exprOexpectedTypes =+ []+ -- self rule+ _annotatedTree =+ CreateTableAs ann_ name_ _exprIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ CreateTableAs ann_ name_ _exprIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ CreateTableAs ann_ name_ _exprIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _exprOcat =+ _lhsIcat+ -- copy rule (down)+ _exprOidenv =+ _lhsIidenv+ -- copy rule (down)+ _exprOlib =+ _lhsIlib+ ( _exprIannotatedTree,_exprIcidenv,_exprIfixedUpIdentifiersTree,_exprIlibUpdates,_exprIoriginalTree,_exprIuType) =+ expr_ _exprOcat _exprOcsql _exprOexpectedTypes _exprOidenv _exprOlib + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_CreateTrigger :: Annotation ->+ String ->+ TriggerWhen ->+ ([TriggerEvent]) ->+ String ->+ TriggerFire ->+ String ->+ T_ScalarExprList ->+ T_Statement +sem_Statement_CreateTrigger ann_ name_ wh_ events_ tbl_ firing_ fnName_ fnArgs_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _fnArgsOexpectedTypes :: ([Maybe Type])+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _fnArgsOcat :: Catalog+ _fnArgsOidenv :: IDEnv+ _fnArgsOlib :: LocalBindings+ _fnArgsIannotatedTree :: ScalarExprList + _fnArgsIfixedUpIdentifiersTree :: ScalarExprList + _fnArgsIoriginalTree :: ScalarExprList + _fnArgsIuType :: ([Maybe Type])+ -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- "./TypeChecking/ParameterizedStatements.ag"(line 153, column 21)+ _fnArgsOexpectedTypes =+ []+ -- self rule+ _annotatedTree =+ CreateTrigger ann_ name_ wh_ events_ tbl_ firing_ fnName_ _fnArgsIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ CreateTrigger ann_ name_ wh_ events_ tbl_ firing_ fnName_ _fnArgsIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ CreateTrigger ann_ name_ wh_ events_ tbl_ firing_ fnName_ _fnArgsIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _fnArgsOcat =+ _lhsIcat+ -- copy rule (down)+ _fnArgsOidenv =+ _lhsIidenv+ -- copy rule (down)+ _fnArgsOlib =+ _lhsIlib+ ( _fnArgsIannotatedTree,_fnArgsIfixedUpIdentifiersTree,_fnArgsIoriginalTree,_fnArgsIuType) =+ fnArgs_ _fnArgsOcat _fnArgsOexpectedTypes _fnArgsOidenv _fnArgsOlib + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_CreateType :: Annotation ->+ String ->+ T_TypeAttributeDefList ->+ T_Statement +sem_Statement_CreateType ann_ name_ atts_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOannotatedTree :: Statement + _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _tpe :: (Either [TypeError] Type)+ _statementType :: (Maybe StatementType)+ _catUpdates :: ([CatalogUpdate])+ _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _attsOcat :: Catalog+ _attsOidenv :: IDEnv+ _attsOlib :: LocalBindings+ _attsIannotatedTree :: TypeAttributeDefList + _attsIattrs :: ([(String, Maybe Type)])+ _attsIfixedUpIdentifiersTree :: TypeAttributeDefList + _attsIoriginalTree :: TypeAttributeDefList + -- "./TypeChecking/Statements.ag"(line 82, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (\a -> a {stType = _statementType+ ,catUpd = _catUpdates }) $+ setTypeAddErrors _tpe _backTree+ -- "./TypeChecking/Statements.ag"(line 88, column 9)+ _lhsOcatUpdates =+ _catUpdates+ -- "./TypeChecking/Statements.ag"(line 89, column 9)+ _lhsOlibUpdates =+ _libUpdates+ -- "./TypeChecking/Statements.ag"(line 94, column 9)+ _libUpdates =+ []+ -- "./TypeChecking/Ddl/MiscCreates.ag"(line 48, column 9)+ _tpe =+ Right $ Pseudo Void+ -- "./TypeChecking/Ddl/MiscCreates.ag"(line 49, column 9)+ _attrs =+ mapMaybe okAt _attsIattrs+ where+ okAt (s, Just t) = Just (s,t)+ okAt (_,Nothing) = Nothing+ -- "./TypeChecking/Ddl/MiscCreates.ag"(line 53, column 9)+ _backTree =+ CreateType ann_ name_ _attsIannotatedTree+ -- "./TypeChecking/Ddl/MiscCreates.ag"(line 54, column 9)+ _statementType =+ Nothing+ -- "./TypeChecking/Ddl/MiscCreates.ag"(line 55, column 9)+ _catUpdates =+ [CatCreateComposite name_ _attrs ]+ -- self rule+ _annotatedTree =+ CreateType ann_ name_ _attsIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ CreateType ann_ name_ _attsIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ CreateType ann_ name_ _attsIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _attsOcat =+ _lhsIcat+ -- copy rule (down)+ _attsOidenv =+ _lhsIidenv+ -- copy rule (down)+ _attsOlib =+ _lhsIlib+ ( _attsIannotatedTree,_attsIattrs,_attsIfixedUpIdentifiersTree,_attsIoriginalTree) =+ atts_ _attsOcat _attsOidenv _attsOlib + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_CreateView :: Annotation ->+ String ->+ (Maybe [String]) ->+ T_QueryExpr ->+ T_Statement +sem_Statement_CreateView ann_ name_ colNames_ expr_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOannotatedTree :: Statement + _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _exprOcsql :: LocalBindings+ _tpe :: (Either [TypeError] Type)+ _catUpdates :: ([CatalogUpdate])+ _statementType :: (Maybe StatementType)+ _exprOexpectedTypes :: ([Maybe Type])+ _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _exprOcat :: Catalog+ _exprOidenv :: IDEnv+ _exprOlib :: LocalBindings+ _exprIannotatedTree :: QueryExpr + _exprIcidenv :: IDEnv+ _exprIfixedUpIdentifiersTree :: QueryExpr + _exprIlibUpdates :: ([LocalBindingsUpdate])+ _exprIoriginalTree :: QueryExpr + _exprIuType :: (Maybe [(String,Type)])+ -- "./TypeChecking/Statements.ag"(line 82, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (\a -> a {stType = _statementType+ ,catUpd = _catUpdates }) $+ setTypeAddErrors _tpe _backTree+ -- "./TypeChecking/Statements.ag"(line 88, column 9)+ _lhsOcatUpdates =+ _catUpdates+ -- "./TypeChecking/Statements.ag"(line 89, column 9)+ _lhsOlibUpdates =+ _libUpdates+ -- "./TypeChecking/Statements.ag"(line 94, column 9)+ _libUpdates =+ []+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 123, column 18)+ _exprOcsql =+ emptyBindings+ -- "./TypeChecking/Ddl/MiscCreates.ag"(line 15, column 9)+ _tpe =+ Right $ Pseudo Void+ -- "./TypeChecking/Ddl/MiscCreates.ag"(line 16, column 9)+ _backTree =+ CreateView ann_ name_ colNames_ _exprIannotatedTree+ -- "./TypeChecking/Ddl/MiscCreates.ag"(line 17, column 9)+ _catUpdates =+ maybe [] (\a -> [CatCreateView name_ a]) _exprIuType+ -- "./TypeChecking/Ddl/MiscCreates.ag"(line 19, column 9)+ _statementType =+ Nothing+ -- "./TypeChecking/ParameterizedStatements.ag"(line 175, column 32)+ _exprOexpectedTypes =+ []+ -- self rule+ _annotatedTree =+ CreateView ann_ name_ colNames_ _exprIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ CreateView ann_ name_ colNames_ _exprIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ CreateView ann_ name_ colNames_ _exprIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _exprOcat =+ _lhsIcat+ -- copy rule (down)+ _exprOidenv =+ _lhsIidenv+ -- copy rule (down)+ _exprOlib =+ _lhsIlib+ ( _exprIannotatedTree,_exprIcidenv,_exprIfixedUpIdentifiersTree,_exprIlibUpdates,_exprIoriginalTree,_exprIuType) =+ expr_ _exprOcat _exprOcsql _exprOexpectedTypes _exprOidenv _exprOlib + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_Delete :: Annotation ->+ T_SQIdentifier ->+ T_TableRefList ->+ T_MaybeBoolExpr ->+ T_MaybeSelectList ->+ T_Statement +sem_Statement_Delete ann_ table_ using_ whr_ returning_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOannotatedTree :: Statement + _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _tpe :: (Either [TypeError] Type)+ _statementType :: (Maybe StatementType)+ _catUpdates :: ([CatalogUpdate])+ _whrOlib :: LocalBindings+ _returningOlib :: LocalBindings+ _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _tableOcat :: Catalog+ _tableOidenv :: IDEnv+ _tableOlib :: LocalBindings+ _usingOcat :: Catalog+ _usingOidenv :: IDEnv+ _usingOlib :: LocalBindings+ _whrOcat :: Catalog+ _whrOidenv :: IDEnv+ _returningOcat :: Catalog+ _returningOidenv :: IDEnv+ _tableIannotatedTree :: SQIdentifier + _tableIfixedUpIdentifiersTree :: SQIdentifier + _tableIoriginalTree :: SQIdentifier + _tableItbAnnotatedTree :: SQIdentifier + _tableItbUType :: (Maybe ([(String,Type)],[(String,Type)]))+ _usingIannotatedTree :: TableRefList + _usingIfixedUpIdentifiersTree :: TableRefList + _usingIlibUpdates :: ([LocalBindingsUpdate])+ _usingInewLib2 :: LocalBindings+ _usingIoriginalTree :: TableRefList + _usingItrefIDs :: ([(String,[String])])+ _whrIannotatedTree :: MaybeBoolExpr + _whrIfixedUpIdentifiersTree :: MaybeBoolExpr + _whrIoriginalTree :: MaybeBoolExpr + _returningIannotatedTree :: MaybeSelectList + _returningIfixedUpIdentifiersTree :: MaybeSelectList + _returningIlistType :: ([(String,Maybe Type)])+ _returningIoriginalTree :: MaybeSelectList + -- "./TypeChecking/Statements.ag"(line 82, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (\a -> a {stType = _statementType+ ,catUpd = _catUpdates }) $+ setTypeAddErrors _tpe _backTree+ -- "./TypeChecking/Statements.ag"(line 88, column 9)+ _lhsOcatUpdates =+ _catUpdates+ -- "./TypeChecking/Statements.ag"(line 89, column 9)+ _lhsOlibUpdates =+ _libUpdates+ -- "./TypeChecking/Statements.ag"(line 94, column 9)+ _libUpdates =+ []+ -- "./TypeChecking/Dml/Delete.ag"(line 13, column 9)+ _tpe =+ Right $ Pseudo Void+ -- "./TypeChecking/Dml/Delete.ag"(line 14, column 9)+ _statementType =+ do+ pt <- sequence $ getPlaceholderTypes _whrIannotatedTree+ lt <- liftList _returningIlistType+ return (pt,lt)+ -- "./TypeChecking/Dml/Delete.ag"(line 19, column 9)+ _backTree =+ Delete ann_ _tableItbAnnotatedTree _usingIannotatedTree _whrIannotatedTree _returningIannotatedTree+ -- "./TypeChecking/Dml/Delete.ag"(line 20, column 9)+ _catUpdates =+ []+ -- "./TypeChecking/Dml/Delete.ag"(line 22, column 9)+ _lib =+ either (const _lhsIlib) id $ do+ a <- lmt (allAtts <$> _tableItbUType)+ lbUpdate _lhsIcat (LBIds "delete table attrs" (Just $ getTName _tableIannotatedTree) a) _lhsIlib+ -- "./TypeChecking/Dml/Delete.ag"(line 26, column 9)+ _whrOlib =+ _lib+ -- "./TypeChecking/Dml/Delete.ag"(line 27, column 9)+ _returningOlib =+ _lib+ -- self rule+ _annotatedTree =+ Delete ann_ _tableIannotatedTree _usingIannotatedTree _whrIannotatedTree _returningIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ Delete ann_ _tableIfixedUpIdentifiersTree _usingIfixedUpIdentifiersTree _whrIfixedUpIdentifiersTree _returningIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ Delete ann_ _tableIoriginalTree _usingIoriginalTree _whrIoriginalTree _returningIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _tableOcat =+ _lhsIcat+ -- copy rule (down)+ _tableOidenv =+ _lhsIidenv+ -- copy rule (from local)+ _tableOlib =+ _lib+ -- copy rule (down)+ _usingOcat =+ _lhsIcat+ -- copy rule (down)+ _usingOidenv =+ _lhsIidenv+ -- copy rule (from local)+ _usingOlib =+ _lib+ -- copy rule (down)+ _whrOcat =+ _lhsIcat+ -- copy rule (down)+ _whrOidenv =+ _lhsIidenv+ -- copy rule (down)+ _returningOcat =+ _lhsIcat+ -- copy rule (down)+ _returningOidenv =+ _lhsIidenv+ ( _tableIannotatedTree,_tableIfixedUpIdentifiersTree,_tableIoriginalTree,_tableItbAnnotatedTree,_tableItbUType) =+ table_ _tableOcat _tableOidenv _tableOlib + ( _usingIannotatedTree,_usingIfixedUpIdentifiersTree,_usingIlibUpdates,_usingInewLib2,_usingIoriginalTree,_usingItrefIDs) =+ using_ _usingOcat _usingOidenv _usingOlib + ( _whrIannotatedTree,_whrIfixedUpIdentifiersTree,_whrIoriginalTree) =+ whr_ _whrOcat _whrOidenv _whrOlib + ( _returningIannotatedTree,_returningIfixedUpIdentifiersTree,_returningIlistType,_returningIoriginalTree) =+ returning_ _returningOcat _returningOidenv _returningOlib + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_DropFunction :: Annotation ->+ IfExists ->+ T_StringTypeNameListPairList ->+ Cascade ->+ T_Statement +sem_Statement_DropFunction ann_ ifE_ sigs_ cascade_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOannotatedTree :: Statement + _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _tpe :: (Either [TypeError] Type)+ _catUpdates :: ([CatalogUpdate])+ _statementType :: (Maybe StatementType)+ _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _sigsOcat :: Catalog+ _sigsOidenv :: IDEnv+ _sigsOlib :: LocalBindings+ _sigsIannotatedTree :: StringTypeNameListPairList + _sigsIfixedUpIdentifiersTree :: StringTypeNameListPairList + _sigsIfnSigs :: ([(String,[Maybe Type])])+ _sigsIoriginalTree :: StringTypeNameListPairList + -- "./TypeChecking/Statements.ag"(line 82, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (\a -> a {stType = _statementType+ ,catUpd = _catUpdates }) $+ setTypeAddErrors _tpe _backTree+ -- "./TypeChecking/Statements.ag"(line 88, column 9)+ _lhsOcatUpdates =+ _catUpdates+ -- "./TypeChecking/Statements.ag"(line 89, column 9)+ _lhsOlibUpdates =+ _libUpdates+ -- "./TypeChecking/Statements.ag"(line 94, column 9)+ _libUpdates =+ []+ -- "./TypeChecking/Ddl/Drops.ag"(line 10, column 9)+ _tpe =+ Right $ Pseudo Void+ -- "./TypeChecking/Ddl/Drops.ag"(line 11, column 9)+ _backTree =+ DropFunction ann_ ifE_ _sigsIannotatedTree cascade_+ -- "./TypeChecking/Ddl/Drops.ag"(line 12, column 9)+ _catUpdates =+ either (const []) id $+ Right $ map mcu $ mapMaybe goodSig _sigsIfnSigs+ where+ mcu :: (String,[Type]) -> CatalogUpdate+ mcu (nm,args) = CatDropFunction ifE nm args+ ifE = ifE_ == IfExists+ goodSig :: (String,[Maybe Type]) -> Maybe (String,[Type])+ goodSig (s, ts) = do+ ts1 <- sequence ts+ return (s,ts1)+ -- "./TypeChecking/Ddl/Drops.ag"(line 23, column 9)+ _statementType =+ Nothing+ -- self rule+ _annotatedTree =+ DropFunction ann_ ifE_ _sigsIannotatedTree cascade_+ -- self rule+ _fixedUpIdentifiersTree =+ DropFunction ann_ ifE_ _sigsIfixedUpIdentifiersTree cascade_+ -- self rule+ _originalTree =+ DropFunction ann_ ifE_ _sigsIoriginalTree cascade_+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _sigsOcat =+ _lhsIcat+ -- copy rule (down)+ _sigsOidenv =+ _lhsIidenv+ -- copy rule (down)+ _sigsOlib =+ _lhsIlib+ ( _sigsIannotatedTree,_sigsIfixedUpIdentifiersTree,_sigsIfnSigs,_sigsIoriginalTree) =+ sigs_ _sigsOcat _sigsOidenv _sigsOlib + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_DropSomething :: Annotation ->+ DropType ->+ IfExists ->+ ([String]) ->+ Cascade ->+ T_Statement +sem_Statement_DropSomething ann_ dropType_ ifE_ names_ cascade_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- self rule+ _annotatedTree =+ DropSomething ann_ dropType_ ifE_ names_ cascade_+ -- self rule+ _fixedUpIdentifiersTree =+ DropSomething ann_ dropType_ ifE_ names_ cascade_+ -- self rule+ _originalTree =+ DropSomething ann_ dropType_ ifE_ names_ cascade_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_Execute :: Annotation ->+ T_ScalarExpr ->+ T_Statement +sem_Statement_Execute ann_ expr_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _exprOexpectedType :: (Maybe Type)+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _exprOcat :: Catalog+ _exprOidenv :: IDEnv+ _exprOlib :: LocalBindings+ _exprIannotatedTree :: ScalarExpr + _exprIfixedUpIdentifiersTree :: ScalarExpr + _exprIoriginalTree :: ScalarExpr + _exprIuType :: (Maybe Type)+ -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- "./TypeChecking/ParameterizedStatements.ag"(line 112, column 9)+ _exprOexpectedType =+ Nothing+ -- self rule+ _annotatedTree =+ Execute ann_ _exprIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ Execute ann_ _exprIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ Execute ann_ _exprIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _exprOcat =+ _lhsIcat+ -- copy rule (down)+ _exprOidenv =+ _lhsIidenv+ -- copy rule (down)+ _exprOlib =+ _lhsIlib+ ( _exprIannotatedTree,_exprIfixedUpIdentifiersTree,_exprIoriginalTree,_exprIuType) =+ expr_ _exprOcat _exprOexpectedType _exprOidenv _exprOlib + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_ExitStatement :: Annotation ->+ (Maybe String) ->+ T_Statement +sem_Statement_ExitStatement ann_ lb_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- self rule+ _annotatedTree =+ ExitStatement ann_ lb_+ -- self rule+ _fixedUpIdentifiersTree =+ ExitStatement ann_ lb_+ -- self rule+ _originalTree =+ ExitStatement ann_ lb_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_ForIntegerStatement :: Annotation ->+ (Maybe String) ->+ T_ScalarExpr ->+ T_ScalarExpr ->+ T_ScalarExpr ->+ T_StatementList ->+ T_Statement +sem_Statement_ForIntegerStatement ann_ lb_ var_ from_ to_ sts_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOannotatedTree :: Statement + _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _stsOcatUpdates :: ([CatalogUpdate])+ _stsOlibUpdates :: ([LocalBindingsUpdate])+ _tpe :: (Either [TypeError] Type)+ _stsOlib :: LocalBindings+ _catUpdates :: ([CatalogUpdate])+ _statementType :: (Maybe StatementType)+ _fromOexpectedType :: (Maybe Type)+ _toOexpectedType :: (Maybe Type)+ _varOexpectedType :: (Maybe Type)+ _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _varOcat :: Catalog+ _varOidenv :: IDEnv+ _varOlib :: LocalBindings+ _fromOcat :: Catalog+ _fromOidenv :: IDEnv+ _fromOlib :: LocalBindings+ _toOcat :: Catalog+ _toOidenv :: IDEnv+ _toOlib :: LocalBindings+ _stsOcat :: Catalog+ _stsOidenv :: IDEnv+ _varIannotatedTree :: ScalarExpr + _varIfixedUpIdentifiersTree :: ScalarExpr + _varIoriginalTree :: ScalarExpr + _varIuType :: (Maybe Type)+ _fromIannotatedTree :: ScalarExpr + _fromIfixedUpIdentifiersTree :: ScalarExpr + _fromIoriginalTree :: ScalarExpr + _fromIuType :: (Maybe Type)+ _toIannotatedTree :: ScalarExpr + _toIfixedUpIdentifiersTree :: ScalarExpr + _toIoriginalTree :: ScalarExpr + _toIuType :: (Maybe Type)+ _stsIannotatedTree :: StatementList + _stsIfixedUpIdentifiersTree :: StatementList + _stsIoriginalTree :: StatementList + _stsIproducedCat :: Catalog+ _stsIproducedLib :: LocalBindings+ -- "./TypeChecking/Statements.ag"(line 82, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (\a -> a {stType = _statementType+ ,catUpd = _catUpdates }) $+ setTypeAddErrors _tpe _backTree+ -- "./TypeChecking/Statements.ag"(line 88, column 9)+ _lhsOcatUpdates =+ _catUpdates+ -- "./TypeChecking/Statements.ag"(line 89, column 9)+ _lhsOlibUpdates =+ _libUpdates+ -- "./TypeChecking/Statements.ag"(line 94, column 9)+ _libUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 138, column 9)+ _stsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 139, column 9)+ _stsOlibUpdates =+ []+ -- "./TypeChecking/Plpgsql/Plpgsql.ag"(line 32, column 9)+ _tpe =+ do+ fromType <- lmt _fromIuType+ toType <- lmt _toIuType+ errorWhen (fromType /= toType) [FromToTypesNotSame fromType toType]+ case _varIuType of+ Just t -> checkAssignmentValid _lhsIcat fromType t+ Nothing -> return ()+ return $ Pseudo Void+ -- "./TypeChecking/Plpgsql/Plpgsql.ag"(line 41, column 9)+ _implicitVar =+ case _varIannotatedTree of+ Identifier a i | errs a == [UnrecognisedIdentifier i] -> True+ _ -> False+ -- "./TypeChecking/Plpgsql/Plpgsql.ag"(line 44, column 9)+ _stsOlib =+ if _implicitVar+ then either (const _lhsIlib) id $ do+ ft <- lmt _fromIuType+ lbUpdate _lhsIcat+ (LBIds "local for loop variable" Nothing [((getName _varIannotatedTree),ft)]) _lhsIlib+ else _lhsIlib+ -- "./TypeChecking/Plpgsql/Plpgsql.ag"(line 52, column 9)+ _backTree =+ let i = if _implicitVar+ then let (Identifier a i') = _varIannotatedTree+ in Identifier a { errs = []} i'+ else _varIannotatedTree+ in ForIntegerStatement ann_ lb_ i _fromIannotatedTree _toIannotatedTree _stsIannotatedTree+ -- "./TypeChecking/Plpgsql/Plpgsql.ag"(line 58, column 9)+ _catUpdates =+ []+ -- "./TypeChecking/Plpgsql/Plpgsql.ag"(line 59, column 9)+ _statementType =+ Nothing+ -- "./TypeChecking/ParameterizedStatements.ag"(line 113, column 27)+ _fromOexpectedType =+ Nothing+ -- "./TypeChecking/ParameterizedStatements.ag"(line 114, column 27)+ _toOexpectedType =+ Nothing+ -- "./TypeChecking/ParameterizedStatements.ag"(line 116, column 45)+ _varOexpectedType =+ Nothing+ -- self rule+ _annotatedTree =+ ForIntegerStatement ann_ lb_ _varIannotatedTree _fromIannotatedTree _toIannotatedTree _stsIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ ForIntegerStatement ann_ lb_ _varIfixedUpIdentifiersTree _fromIfixedUpIdentifiersTree _toIfixedUpIdentifiersTree _stsIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ ForIntegerStatement ann_ lb_ _varIoriginalTree _fromIoriginalTree _toIoriginalTree _stsIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _varOcat =+ _lhsIcat+ -- copy rule (down)+ _varOidenv =+ _lhsIidenv+ -- copy rule (down)+ _varOlib =+ _lhsIlib+ -- copy rule (down)+ _fromOcat =+ _lhsIcat+ -- copy rule (down)+ _fromOidenv =+ _lhsIidenv+ -- copy rule (down)+ _fromOlib =+ _lhsIlib+ -- copy rule (down)+ _toOcat =+ _lhsIcat+ -- copy rule (down)+ _toOidenv =+ _lhsIidenv+ -- copy rule (down)+ _toOlib =+ _lhsIlib+ -- copy rule (down)+ _stsOcat =+ _lhsIcat+ -- copy rule (down)+ _stsOidenv =+ _lhsIidenv+ ( _varIannotatedTree,_varIfixedUpIdentifiersTree,_varIoriginalTree,_varIuType) =+ var_ _varOcat _varOexpectedType _varOidenv _varOlib + ( _fromIannotatedTree,_fromIfixedUpIdentifiersTree,_fromIoriginalTree,_fromIuType) =+ from_ _fromOcat _fromOexpectedType _fromOidenv _fromOlib + ( _toIannotatedTree,_toIfixedUpIdentifiersTree,_toIoriginalTree,_toIuType) =+ to_ _toOcat _toOexpectedType _toOidenv _toOlib + ( _stsIannotatedTree,_stsIfixedUpIdentifiersTree,_stsIoriginalTree,_stsIproducedCat,_stsIproducedLib) =+ sts_ _stsOcat _stsOcatUpdates _stsOidenv _stsOlib _stsOlibUpdates + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_ForQueryStatement :: Annotation ->+ (Maybe String) ->+ T_ScalarExpr ->+ T_QueryExpr ->+ T_StatementList ->+ T_Statement +sem_Statement_ForQueryStatement ann_ lb_ var_ sel_ sts_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOannotatedTree :: Statement + _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _stsOcatUpdates :: ([CatalogUpdate])+ _stsOlibUpdates :: ([LocalBindingsUpdate])+ _selOcsql :: LocalBindings+ _tpe :: (Either [TypeError] Type)+ _stsOlib :: LocalBindings+ _catUpdates :: ([CatalogUpdate])+ _statementType :: (Maybe StatementType)+ _varOexpectedType :: (Maybe Type)+ _selOexpectedTypes :: ([Maybe Type])+ _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _varOcat :: Catalog+ _varOidenv :: IDEnv+ _varOlib :: LocalBindings+ _selOcat :: Catalog+ _selOidenv :: IDEnv+ _selOlib :: LocalBindings+ _stsOcat :: Catalog+ _stsOidenv :: IDEnv+ _varIannotatedTree :: ScalarExpr + _varIfixedUpIdentifiersTree :: ScalarExpr + _varIoriginalTree :: ScalarExpr + _varIuType :: (Maybe Type)+ _selIannotatedTree :: QueryExpr + _selIcidenv :: IDEnv+ _selIfixedUpIdentifiersTree :: QueryExpr + _selIlibUpdates :: ([LocalBindingsUpdate])+ _selIoriginalTree :: QueryExpr + _selIuType :: (Maybe [(String,Type)])+ _stsIannotatedTree :: StatementList + _stsIfixedUpIdentifiersTree :: StatementList + _stsIoriginalTree :: StatementList + _stsIproducedCat :: Catalog+ _stsIproducedLib :: LocalBindings+ -- "./TypeChecking/Statements.ag"(line 82, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (\a -> a {stType = _statementType+ ,catUpd = _catUpdates }) $+ setTypeAddErrors _tpe _backTree+ -- "./TypeChecking/Statements.ag"(line 88, column 9)+ _lhsOcatUpdates =+ _catUpdates+ -- "./TypeChecking/Statements.ag"(line 89, column 9)+ _lhsOlibUpdates =+ _libUpdates+ -- "./TypeChecking/Statements.ag"(line 94, column 9)+ _libUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 138, column 9)+ _stsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 139, column 9)+ _stsOlibUpdates =+ []+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 124, column 25)+ _selOcsql =+ emptyBindings+ -- "./TypeChecking/Plpgsql/Plpgsql.ag"(line 64, column 9)+ _tpe =+ do+ st <- lmt (CompositeType <$> _selIuType)+ toType <- lmt _varIuType+ checkAssignmentValid _lhsIcat st toType+ return $ Pseudo Void+ -- "./TypeChecking/Plpgsql/Plpgsql.ag"(line 74, column 9)+ _stsOlib =+ either (const _lhsIlib) id $ do+ _ <- _tpe+ st <- lmt (CompositeType <$> _selIuType)+ lbUpdate _lhsIcat (LBIds "for loop record type" Nothing [(getName _varIannotatedTree,st)]) _lhsIlib+ -- "./TypeChecking/Plpgsql/Plpgsql.ag"(line 80, column 9)+ _backTree =+ ForQueryStatement ann_ lb_ _varIannotatedTree _selIannotatedTree _stsIannotatedTree+ -- "./TypeChecking/Plpgsql/Plpgsql.ag"(line 81, column 9)+ _catUpdates =+ []+ -- "./TypeChecking/Plpgsql/Plpgsql.ag"(line 82, column 9)+ _statementType =+ Nothing+ -- "./TypeChecking/ParameterizedStatements.ag"(line 116, column 45)+ _varOexpectedType =+ Nothing+ -- "./TypeChecking/ParameterizedStatements.ag"(line 177, column 9)+ _selOexpectedTypes =+ []+ -- self rule+ _annotatedTree =+ ForQueryStatement ann_ lb_ _varIannotatedTree _selIannotatedTree _stsIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ ForQueryStatement ann_ lb_ _varIfixedUpIdentifiersTree _selIfixedUpIdentifiersTree _stsIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ ForQueryStatement ann_ lb_ _varIoriginalTree _selIoriginalTree _stsIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _varOcat =+ _lhsIcat+ -- copy rule (down)+ _varOidenv =+ _lhsIidenv+ -- copy rule (down)+ _varOlib =+ _lhsIlib+ -- copy rule (down)+ _selOcat =+ _lhsIcat+ -- copy rule (down)+ _selOidenv =+ _lhsIidenv+ -- copy rule (down)+ _selOlib =+ _lhsIlib+ -- copy rule (down)+ _stsOcat =+ _lhsIcat+ -- copy rule (down)+ _stsOidenv =+ _lhsIidenv+ ( _varIannotatedTree,_varIfixedUpIdentifiersTree,_varIoriginalTree,_varIuType) =+ var_ _varOcat _varOexpectedType _varOidenv _varOlib + ( _selIannotatedTree,_selIcidenv,_selIfixedUpIdentifiersTree,_selIlibUpdates,_selIoriginalTree,_selIuType) =+ sel_ _selOcat _selOcsql _selOexpectedTypes _selOidenv _selOlib + ( _stsIannotatedTree,_stsIfixedUpIdentifiersTree,_stsIoriginalTree,_stsIproducedCat,_stsIproducedLib) =+ sts_ _stsOcat _stsOcatUpdates _stsOidenv _stsOlib _stsOlibUpdates + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_If :: Annotation ->+ T_ScalarExprStatementListPairList ->+ T_StatementList ->+ T_Statement +sem_Statement_If ann_ cases_ els_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _elsOcatUpdates :: ([CatalogUpdate])+ _elsOlibUpdates :: ([LocalBindingsUpdate])+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _casesOcat :: Catalog+ _casesOidenv :: IDEnv+ _casesOlib :: LocalBindings+ _elsOcat :: Catalog+ _elsOidenv :: IDEnv+ _elsOlib :: LocalBindings+ _casesIannotatedTree :: ScalarExprStatementListPairList + _casesIfixedUpIdentifiersTree :: ScalarExprStatementListPairList + _casesIoriginalTree :: ScalarExprStatementListPairList + _elsIannotatedTree :: StatementList + _elsIfixedUpIdentifiersTree :: StatementList + _elsIoriginalTree :: StatementList + _elsIproducedCat :: Catalog+ _elsIproducedLib :: LocalBindings+ -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 134, column 9)+ _elsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 135, column 9)+ _elsOlibUpdates =+ []+ -- self rule+ _annotatedTree =+ If ann_ _casesIannotatedTree _elsIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ If ann_ _casesIfixedUpIdentifiersTree _elsIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ If ann_ _casesIoriginalTree _elsIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _casesOcat =+ _lhsIcat+ -- copy rule (down)+ _casesOidenv =+ _lhsIidenv+ -- copy rule (down)+ _casesOlib =+ _lhsIlib+ -- copy rule (down)+ _elsOcat =+ _lhsIcat+ -- copy rule (down)+ _elsOidenv =+ _lhsIidenv+ -- copy rule (down)+ _elsOlib =+ _lhsIlib+ ( _casesIannotatedTree,_casesIfixedUpIdentifiersTree,_casesIoriginalTree) =+ cases_ _casesOcat _casesOidenv _casesOlib + ( _elsIannotatedTree,_elsIfixedUpIdentifiersTree,_elsIoriginalTree,_elsIproducedCat,_elsIproducedLib) =+ els_ _elsOcat _elsOcatUpdates _elsOidenv _elsOlib _elsOlibUpdates + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_Insert :: Annotation ->+ T_SQIdentifier ->+ ([String]) ->+ T_QueryExpr ->+ T_MaybeSelectList ->+ T_Statement +sem_Statement_Insert ann_ table_ targetCols_ insData_ returning_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOannotatedTree :: Statement + _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _insDataOcsql :: LocalBindings+ _tpe :: (Either [TypeError] Type)+ _statementType :: (Maybe StatementType)+ _columnTypes :: (Either [TypeError] [(String,Type)])+ _catUpdates :: ([CatalogUpdate])+ _insDataOexpectedTypes :: ([Maybe Type])+ _returningOlib :: LocalBindings+ _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _tableOcat :: Catalog+ _tableOidenv :: IDEnv+ _tableOlib :: LocalBindings+ _insDataOcat :: Catalog+ _insDataOidenv :: IDEnv+ _insDataOlib :: LocalBindings+ _returningOcat :: Catalog+ _returningOidenv :: IDEnv+ _tableIannotatedTree :: SQIdentifier + _tableIfixedUpIdentifiersTree :: SQIdentifier + _tableIoriginalTree :: SQIdentifier + _tableItbAnnotatedTree :: SQIdentifier + _tableItbUType :: (Maybe ([(String,Type)],[(String,Type)]))+ _insDataIannotatedTree :: QueryExpr + _insDataIcidenv :: IDEnv+ _insDataIfixedUpIdentifiersTree :: QueryExpr + _insDataIlibUpdates :: ([LocalBindingsUpdate])+ _insDataIoriginalTree :: QueryExpr + _insDataIuType :: (Maybe [(String,Type)])+ _returningIannotatedTree :: MaybeSelectList + _returningIfixedUpIdentifiersTree :: MaybeSelectList + _returningIlistType :: ([(String,Maybe Type)])+ _returningIoriginalTree :: MaybeSelectList + -- "./TypeChecking/Statements.ag"(line 82, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (\a -> a {stType = _statementType+ ,catUpd = _catUpdates }) $+ setTypeAddErrors _tpe _backTree+ -- "./TypeChecking/Statements.ag"(line 88, column 9)+ _lhsOcatUpdates =+ _catUpdates+ -- "./TypeChecking/Statements.ag"(line 89, column 9)+ _lhsOlibUpdates =+ _libUpdates+ -- "./TypeChecking/Statements.ag"(line 94, column 9)+ _libUpdates =+ []+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 125, column 14)+ _insDataOcsql =+ emptyBindings+ -- "./TypeChecking/Dml/Insert.ag"(line 14, column 9)+ _tpe =+ either Left (const $ Right $ Pseudo Void) _columnTypes+ -- "./TypeChecking/Dml/Insert.ag"(line 15, column 9)+ _statementType =+ Just (catMaybes $ getPlaceholderTypes _insDataIannotatedTree+ ,fromMaybe [] $ liftList _returningIlistType)+ -- "./TypeChecking/Dml/Insert.ag"(line 20, column 9)+ _columnTypes =+ do+ atts <- lmt (allAtts <$> _tableItbUType)+ pAtts <- lmt (fst <$> _tableItbUType)+ tAtts <- case targetCols_ of+ [] -> return pAtts+ _ -> mapM (lkpA atts) targetCols_+ expAtts <- lmt _insDataIuType+ checkAssignmentsValid _lhsIcat (map snd expAtts) (map snd tAtts)+ return tAtts+ where+ lkpA :: [(String,Type)] -> String -> E (String,Type)+ lkpA m n = maybe (Left [UnrecognisedIdentifier n])+ (\t -> Right (n,t))+ $ lookup n m+ -- "./TypeChecking/Dml/Insert.ag"(line 36, column 9)+ _backTree =+ Insert ann_ _tableItbAnnotatedTree+ targetCols_+ _insDataIannotatedTree+ _returningIannotatedTree+ -- "./TypeChecking/Dml/Insert.ag"(line 40, column 9)+ _catUpdates =+ []+ -- "./TypeChecking/Dml/Insert.ag"(line 41, column 9)+ _insDataOexpectedTypes =+ maybe [] id $ do+ ts <- etmt $ _columnTypes+ return $ map (Just . snd) ts+ -- "./TypeChecking/Dml/Insert.ag"(line 45, column 9)+ _returningOlib =+ either (const _lhsIlib) id $ do+ atts <- lmt (allAtts <$> _tableItbUType)+ lbUpdate _lhsIcat (LBIds "insert target table" (Just $ getTName _tableIannotatedTree) atts) _lhsIlib+ -- self rule+ _annotatedTree =+ Insert ann_ _tableIannotatedTree targetCols_ _insDataIannotatedTree _returningIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ Insert ann_ _tableIfixedUpIdentifiersTree targetCols_ _insDataIfixedUpIdentifiersTree _returningIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ Insert ann_ _tableIoriginalTree targetCols_ _insDataIoriginalTree _returningIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _tableOcat =+ _lhsIcat+ -- copy rule (down)+ _tableOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tableOlib =+ _lhsIlib+ -- copy rule (down)+ _insDataOcat =+ _lhsIcat+ -- copy rule (down)+ _insDataOidenv =+ _lhsIidenv+ -- copy rule (down)+ _insDataOlib =+ _lhsIlib+ -- copy rule (down)+ _returningOcat =+ _lhsIcat+ -- copy rule (down)+ _returningOidenv =+ _lhsIidenv+ ( _tableIannotatedTree,_tableIfixedUpIdentifiersTree,_tableIoriginalTree,_tableItbAnnotatedTree,_tableItbUType) =+ table_ _tableOcat _tableOidenv _tableOlib + ( _insDataIannotatedTree,_insDataIcidenv,_insDataIfixedUpIdentifiersTree,_insDataIlibUpdates,_insDataIoriginalTree,_insDataIuType) =+ insData_ _insDataOcat _insDataOcsql _insDataOexpectedTypes _insDataOidenv _insDataOlib + ( _returningIannotatedTree,_returningIfixedUpIdentifiersTree,_returningIlistType,_returningIoriginalTree) =+ returning_ _returningOcat _returningOidenv _returningOlib + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_Into :: Annotation ->+ Bool ->+ T_ScalarExprList ->+ T_Statement ->+ T_Statement +sem_Statement_Into ann_ strict_ into_ stmt_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _intoOexpectedTypes :: ([Maybe Type])+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _intoOcat :: Catalog+ _intoOidenv :: IDEnv+ _intoOlib :: LocalBindings+ _stmtOcat :: Catalog+ _stmtOidenv :: IDEnv+ _stmtOinProducedCat :: Catalog+ _stmtOlib :: LocalBindings+ _intoIannotatedTree :: ScalarExprList + _intoIfixedUpIdentifiersTree :: ScalarExprList + _intoIoriginalTree :: ScalarExprList + _intoIuType :: ([Maybe Type])+ _stmtIannotatedTree :: Statement + _stmtIcatUpdates :: ([CatalogUpdate])+ _stmtIfixedUpIdentifiersTree :: Statement + _stmtIlibUpdates :: ([LocalBindingsUpdate])+ _stmtIoriginalTree :: Statement + -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- "./TypeChecking/ParameterizedStatements.ag"(line 117, column 12)+ _intoOexpectedTypes =+ []+ -- self rule+ _annotatedTree =+ Into ann_ strict_ _intoIannotatedTree _stmtIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ Into ann_ strict_ _intoIfixedUpIdentifiersTree _stmtIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ Into ann_ strict_ _intoIoriginalTree _stmtIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _intoOcat =+ _lhsIcat+ -- copy rule (down)+ _intoOidenv =+ _lhsIidenv+ -- copy rule (down)+ _intoOlib =+ _lhsIlib+ -- copy rule (down)+ _stmtOcat =+ _lhsIcat+ -- copy rule (down)+ _stmtOidenv =+ _lhsIidenv+ -- copy rule (down)+ _stmtOinProducedCat =+ _lhsIinProducedCat+ -- copy rule (down)+ _stmtOlib =+ _lhsIlib+ ( _intoIannotatedTree,_intoIfixedUpIdentifiersTree,_intoIoriginalTree,_intoIuType) =+ into_ _intoOcat _intoOexpectedTypes _intoOidenv _intoOlib + ( _stmtIannotatedTree,_stmtIcatUpdates,_stmtIfixedUpIdentifiersTree,_stmtIlibUpdates,_stmtIoriginalTree) =+ stmt_ _stmtOcat _stmtOidenv _stmtOinProducedCat _stmtOlib + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_LoopStatement :: Annotation ->+ (Maybe String) ->+ T_StatementList ->+ T_Statement +sem_Statement_LoopStatement ann_ lb_ sts_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _stsOcatUpdates :: ([CatalogUpdate])+ _stsOlibUpdates :: ([LocalBindingsUpdate])+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _stsOcat :: Catalog+ _stsOidenv :: IDEnv+ _stsOlib :: LocalBindings+ _stsIannotatedTree :: StatementList + _stsIfixedUpIdentifiersTree :: StatementList + _stsIoriginalTree :: StatementList + _stsIproducedCat :: Catalog+ _stsIproducedLib :: LocalBindings+ -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 138, column 9)+ _stsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 139, column 9)+ _stsOlibUpdates =+ []+ -- self rule+ _annotatedTree =+ LoopStatement ann_ lb_ _stsIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ LoopStatement ann_ lb_ _stsIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ LoopStatement ann_ lb_ _stsIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _stsOcat =+ _lhsIcat+ -- copy rule (down)+ _stsOidenv =+ _lhsIidenv+ -- copy rule (down)+ _stsOlib =+ _lhsIlib+ ( _stsIannotatedTree,_stsIfixedUpIdentifiersTree,_stsIoriginalTree,_stsIproducedCat,_stsIproducedLib) =+ sts_ _stsOcat _stsOcatUpdates _stsOidenv _stsOlib _stsOlibUpdates + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_Notify :: Annotation ->+ String ->+ T_Statement +sem_Statement_Notify ann_ name_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + -- "./TypeChecking/Statements.ag"(line 94, column 9)+ _libUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- self rule+ _annotatedTree =+ Notify ann_ name_+ -- self rule+ _fixedUpIdentifiersTree =+ Notify ann_ name_+ -- self rule+ _originalTree =+ Notify ann_ name_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_NullStatement :: Annotation ->+ T_Statement +sem_Statement_NullStatement ann_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- self rule+ _annotatedTree =+ NullStatement ann_+ -- self rule+ _fixedUpIdentifiersTree =+ NullStatement ann_+ -- self rule+ _originalTree =+ NullStatement ann_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_Perform :: Annotation ->+ T_ScalarExpr ->+ T_Statement +sem_Statement_Perform ann_ expr_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _exprOexpectedType :: (Maybe Type)+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _exprOcat :: Catalog+ _exprOidenv :: IDEnv+ _exprOlib :: LocalBindings+ _exprIannotatedTree :: ScalarExpr + _exprIfixedUpIdentifiersTree :: ScalarExpr + _exprIoriginalTree :: ScalarExpr + _exprIuType :: (Maybe Type)+ -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- "./TypeChecking/ParameterizedStatements.ag"(line 112, column 9)+ _exprOexpectedType =+ Nothing+ -- self rule+ _annotatedTree =+ Perform ann_ _exprIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ Perform ann_ _exprIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ Perform ann_ _exprIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _exprOcat =+ _lhsIcat+ -- copy rule (down)+ _exprOidenv =+ _lhsIidenv+ -- copy rule (down)+ _exprOlib =+ _lhsIlib+ ( _exprIannotatedTree,_exprIfixedUpIdentifiersTree,_exprIoriginalTree,_exprIuType) =+ expr_ _exprOcat _exprOexpectedType _exprOidenv _exprOlib + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_QueryStatement :: Annotation ->+ T_QueryExpr ->+ T_Statement +sem_Statement_QueryStatement ann_ ex_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOannotatedTree :: Statement + _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _tpe :: (Either [TypeError] Type)+ _statementType :: (Maybe StatementType)+ _catUpdates :: ([CatalogUpdate])+ _exOcsql :: LocalBindings+ _exOexpectedTypes :: ([Maybe Type])+ _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _exOcat :: Catalog+ _exOidenv :: IDEnv+ _exOlib :: LocalBindings+ _exIannotatedTree :: QueryExpr + _exIcidenv :: IDEnv+ _exIfixedUpIdentifiersTree :: QueryExpr + _exIlibUpdates :: ([LocalBindingsUpdate])+ _exIoriginalTree :: QueryExpr + _exIuType :: (Maybe [(String,Type)])+ -- "./TypeChecking/Statements.ag"(line 82, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (\a -> a {stType = _statementType+ ,catUpd = _catUpdates }) $+ setTypeAddErrors _tpe _backTree+ -- "./TypeChecking/Statements.ag"(line 88, column 9)+ _lhsOcatUpdates =+ _catUpdates+ -- "./TypeChecking/Statements.ag"(line 89, column 9)+ _lhsOlibUpdates =+ _libUpdates+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 14, column 9)+ _tpe =+ Right $ Pseudo Void+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 15, column 9)+ _statementType =+ do+ pt <- sequence $ getPlaceholderTypes _exIannotatedTree+ st <- _exIuType+ return (pt+ ,case st of+ [(_,(Pseudo Void))] -> []+ t -> t)+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 23, column 9)+ _backTree =+ QueryStatement ann_ _exIannotatedTree+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 24, column 9)+ _catUpdates =+ []+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 126, column 22)+ _exOcsql =+ emptyBindings+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 137, column 9)+ _libUpdates =+ _exIlibUpdates+ -- "./TypeChecking/ParameterizedStatements.ag"(line 178, column 22)+ _exOexpectedTypes =+ []+ -- self rule+ _annotatedTree =+ QueryStatement ann_ _exIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ QueryStatement ann_ _exIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ QueryStatement ann_ _exIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _exOcat =+ _lhsIcat+ -- copy rule (down)+ _exOidenv =+ _lhsIidenv+ -- copy rule (down)+ _exOlib =+ _lhsIlib+ ( _exIannotatedTree,_exIcidenv,_exIfixedUpIdentifiersTree,_exIlibUpdates,_exIoriginalTree,_exIuType) =+ ex_ _exOcat _exOcsql _exOexpectedTypes _exOidenv _exOlib + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_Raise :: Annotation ->+ RaiseType ->+ String ->+ T_ScalarExprList ->+ T_Statement +sem_Statement_Raise ann_ level_ message_ args_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _argsOexpectedTypes :: ([Maybe Type])+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _argsOcat :: Catalog+ _argsOidenv :: IDEnv+ _argsOlib :: LocalBindings+ _argsIannotatedTree :: ScalarExprList + _argsIfixedUpIdentifiersTree :: ScalarExprList + _argsIoriginalTree :: ScalarExprList + _argsIuType :: ([Maybe Type])+ -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- "./TypeChecking/ParameterizedStatements.ag"(line 154, column 13)+ _argsOexpectedTypes =+ []+ -- self rule+ _annotatedTree =+ Raise ann_ level_ message_ _argsIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ Raise ann_ level_ message_ _argsIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ Raise ann_ level_ message_ _argsIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _argsOcat =+ _lhsIcat+ -- copy rule (down)+ _argsOidenv =+ _lhsIidenv+ -- copy rule (down)+ _argsOlib =+ _lhsIlib+ ( _argsIannotatedTree,_argsIfixedUpIdentifiersTree,_argsIoriginalTree,_argsIuType) =+ args_ _argsOcat _argsOexpectedTypes _argsOidenv _argsOlib + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_Return :: Annotation ->+ T_MaybeScalarExpr ->+ T_Statement +sem_Statement_Return ann_ value_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOannotatedTree :: Statement + _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _tpe :: (Either [TypeError] Type)+ _catUpdates :: ([CatalogUpdate])+ _statementType :: (Maybe StatementType)+ _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _valueOcat :: Catalog+ _valueOidenv :: IDEnv+ _valueOlib :: LocalBindings+ _valueIannotatedTree :: MaybeScalarExpr + _valueIfixedUpIdentifiersTree :: MaybeScalarExpr + _valueIoriginalTree :: MaybeScalarExpr + _valueIuType :: (Maybe Type)+ -- "./TypeChecking/Statements.ag"(line 82, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (\a -> a {stType = _statementType+ ,catUpd = _catUpdates }) $+ setTypeAddErrors _tpe _backTree+ -- "./TypeChecking/Statements.ag"(line 88, column 9)+ _lhsOcatUpdates =+ _catUpdates+ -- "./TypeChecking/Statements.ag"(line 89, column 9)+ _lhsOlibUpdates =+ _libUpdates+ -- "./TypeChecking/Statements.ag"(line 94, column 9)+ _libUpdates =+ []+ -- "./TypeChecking/Plpgsql/Plpgsql.ag"(line 12, column 9)+ _tpe =+ maybe (Right $ Pseudo Void) Right _valueIuType+ -- "./TypeChecking/Plpgsql/Plpgsql.ag"(line 13, column 9)+ _backTree =+ Return ann_ _valueIannotatedTree+ -- "./TypeChecking/Plpgsql/Plpgsql.ag"(line 14, column 9)+ _catUpdates =+ []+ -- "./TypeChecking/Plpgsql/Plpgsql.ag"(line 15, column 9)+ _statementType =+ Nothing+ -- self rule+ _annotatedTree =+ Return ann_ _valueIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ Return ann_ _valueIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ Return ann_ _valueIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _valueOcat =+ _lhsIcat+ -- copy rule (down)+ _valueOidenv =+ _lhsIidenv+ -- copy rule (down)+ _valueOlib =+ _lhsIlib+ ( _valueIannotatedTree,_valueIfixedUpIdentifiersTree,_valueIoriginalTree,_valueIuType) =+ value_ _valueOcat _valueOidenv _valueOlib + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_ReturnNext :: Annotation ->+ T_ScalarExpr ->+ T_Statement +sem_Statement_ReturnNext ann_ expr_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _exprOexpectedType :: (Maybe Type)+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _exprOcat :: Catalog+ _exprOidenv :: IDEnv+ _exprOlib :: LocalBindings+ _exprIannotatedTree :: ScalarExpr + _exprIfixedUpIdentifiersTree :: ScalarExpr + _exprIoriginalTree :: ScalarExpr + _exprIuType :: (Maybe Type)+ -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- "./TypeChecking/ParameterizedStatements.ag"(line 112, column 9)+ _exprOexpectedType =+ Nothing+ -- self rule+ _annotatedTree =+ ReturnNext ann_ _exprIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ ReturnNext ann_ _exprIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ ReturnNext ann_ _exprIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _exprOcat =+ _lhsIcat+ -- copy rule (down)+ _exprOidenv =+ _lhsIidenv+ -- copy rule (down)+ _exprOlib =+ _lhsIlib+ ( _exprIannotatedTree,_exprIfixedUpIdentifiersTree,_exprIoriginalTree,_exprIuType) =+ expr_ _exprOcat _exprOexpectedType _exprOidenv _exprOlib + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_ReturnQuery :: Annotation ->+ T_QueryExpr ->+ T_Statement +sem_Statement_ReturnQuery ann_ sel_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _selOcsql :: LocalBindings+ _selOexpectedTypes :: ([Maybe Type])+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _selOcat :: Catalog+ _selOidenv :: IDEnv+ _selOlib :: LocalBindings+ _selIannotatedTree :: QueryExpr + _selIcidenv :: IDEnv+ _selIfixedUpIdentifiersTree :: QueryExpr + _selIlibUpdates :: ([LocalBindingsUpdate])+ _selIoriginalTree :: QueryExpr + _selIuType :: (Maybe [(String,Type)])+ -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 127, column 19)+ _selOcsql =+ emptyBindings+ -- "./TypeChecking/ParameterizedStatements.ag"(line 177, column 9)+ _selOexpectedTypes =+ []+ -- self rule+ _annotatedTree =+ ReturnQuery ann_ _selIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ ReturnQuery ann_ _selIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ ReturnQuery ann_ _selIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _selOcat =+ _lhsIcat+ -- copy rule (down)+ _selOidenv =+ _lhsIidenv+ -- copy rule (down)+ _selOlib =+ _lhsIlib+ ( _selIannotatedTree,_selIcidenv,_selIfixedUpIdentifiersTree,_selIlibUpdates,_selIoriginalTree,_selIuType) =+ sel_ _selOcat _selOcsql _selOexpectedTypes _selOidenv _selOlib + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_Set :: Annotation ->+ String ->+ ([SetValue]) ->+ T_Statement +sem_Statement_Set ann_ name_ values_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + -- "./TypeChecking/Statements.ag"(line 94, column 9)+ _libUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- self rule+ _annotatedTree =+ Set ann_ name_ values_+ -- self rule+ _fixedUpIdentifiersTree =+ Set ann_ name_ values_+ -- self rule+ _originalTree =+ Set ann_ name_ values_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_Truncate :: Annotation ->+ ([String]) ->+ RestartIdentity ->+ Cascade ->+ T_Statement +sem_Statement_Truncate ann_ tables_ restartIdentity_ cascade_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- self rule+ _annotatedTree =+ Truncate ann_ tables_ restartIdentity_ cascade_+ -- self rule+ _fixedUpIdentifiersTree =+ Truncate ann_ tables_ restartIdentity_ cascade_+ -- self rule+ _originalTree =+ Truncate ann_ tables_ restartIdentity_ cascade_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_Update :: Annotation ->+ T_SQIdentifier ->+ T_ScalarExprList ->+ T_TableRefList ->+ T_MaybeBoolExpr ->+ T_MaybeSelectList ->+ T_Statement +sem_Statement_Update ann_ table_ assigns_ fromList_ whr_ returning_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOannotatedTree :: Statement + _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _tpe :: (Either [TypeError] Type)+ _statementType :: (Maybe StatementType)+ _catUpdates :: ([CatalogUpdate])+ _whrOlib :: LocalBindings+ _assignsOlib :: LocalBindings+ _returningOlib :: LocalBindings+ _assignsOexpectedTypes :: ([Maybe Type])+ _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _tableOcat :: Catalog+ _tableOidenv :: IDEnv+ _tableOlib :: LocalBindings+ _assignsOcat :: Catalog+ _assignsOidenv :: IDEnv+ _fromListOcat :: Catalog+ _fromListOidenv :: IDEnv+ _fromListOlib :: LocalBindings+ _whrOcat :: Catalog+ _whrOidenv :: IDEnv+ _returningOcat :: Catalog+ _returningOidenv :: IDEnv+ _tableIannotatedTree :: SQIdentifier + _tableIfixedUpIdentifiersTree :: SQIdentifier + _tableIoriginalTree :: SQIdentifier + _tableItbAnnotatedTree :: SQIdentifier + _tableItbUType :: (Maybe ([(String,Type)],[(String,Type)]))+ _assignsIannotatedTree :: ScalarExprList + _assignsIfixedUpIdentifiersTree :: ScalarExprList + _assignsIoriginalTree :: ScalarExprList + _assignsIuType :: ([Maybe Type])+ _fromListIannotatedTree :: TableRefList + _fromListIfixedUpIdentifiersTree :: TableRefList + _fromListIlibUpdates :: ([LocalBindingsUpdate])+ _fromListInewLib2 :: LocalBindings+ _fromListIoriginalTree :: TableRefList + _fromListItrefIDs :: ([(String,[String])])+ _whrIannotatedTree :: MaybeBoolExpr + _whrIfixedUpIdentifiersTree :: MaybeBoolExpr + _whrIoriginalTree :: MaybeBoolExpr + _returningIannotatedTree :: MaybeSelectList + _returningIfixedUpIdentifiersTree :: MaybeSelectList + _returningIlistType :: ([(String,Maybe Type)])+ _returningIoriginalTree :: MaybeSelectList + -- "./TypeChecking/Statements.ag"(line 82, column 9)+ _lhsOannotatedTree =+ updateAnnotation+ (\a -> a {stType = _statementType+ ,catUpd = _catUpdates }) $+ setTypeAddErrors _tpe _backTree+ -- "./TypeChecking/Statements.ag"(line 88, column 9)+ _lhsOcatUpdates =+ _catUpdates+ -- "./TypeChecking/Statements.ag"(line 89, column 9)+ _lhsOlibUpdates =+ _libUpdates+ -- "./TypeChecking/Statements.ag"(line 94, column 9)+ _libUpdates =+ []+ -- "./TypeChecking/Dml/Update.ag"(line 13, column 9)+ _tpe =+ Right $ Pseudo Void+ -- "./TypeChecking/Dml/Update.ag"(line 18, column 9)+ _statementType =+ do+ pt <- sequence $ getPlaceholderTypes _assignsIannotatedTree+ ++ getPlaceholderTypes _whrIannotatedTree+ return (pt,fromMaybe [] $ liftList _returningIlistType)+ -- "./TypeChecking/Dml/Update.ag"(line 24, column 9)+ _backTree =+ Update ann_+ _tableItbAnnotatedTree+ _assignsIannotatedTree+ _fromListIannotatedTree+ _whrIannotatedTree+ _returningIannotatedTree+ -- "./TypeChecking/Dml/Update.ag"(line 30, column 9)+ _catUpdates =+ []+ -- "./TypeChecking/Dml/Update.ag"(line 35, column 9)+ _lib =+ either (const _lhsIlib) id $ do+ a <- lmt (allAtts <$> _tableItbUType)+ lbUpdate _lhsIcat (LBIds "updated table attrs" (Just $ getTName _tableIannotatedTree) a) _lhsIlib+ -- "./TypeChecking/Dml/Update.ag"(line 39, column 9)+ _whrOlib =+ _lib+ -- "./TypeChecking/Dml/Update.ag"(line 40, column 9)+ _assignsOlib =+ _lib+ -- "./TypeChecking/Dml/Update.ag"(line 41, column 9)+ _returningOlib =+ _lib+ -- "./TypeChecking/ParameterizedStatements.ag"(line 155, column 14)+ _assignsOexpectedTypes =+ []+ -- self rule+ _annotatedTree =+ Update ann_ _tableIannotatedTree _assignsIannotatedTree _fromListIannotatedTree _whrIannotatedTree _returningIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ Update ann_ _tableIfixedUpIdentifiersTree _assignsIfixedUpIdentifiersTree _fromListIfixedUpIdentifiersTree _whrIfixedUpIdentifiersTree _returningIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ Update ann_ _tableIoriginalTree _assignsIoriginalTree _fromListIoriginalTree _whrIoriginalTree _returningIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _tableOcat =+ _lhsIcat+ -- copy rule (down)+ _tableOidenv =+ _lhsIidenv+ -- copy rule (from local)+ _tableOlib =+ _lib+ -- copy rule (down)+ _assignsOcat =+ _lhsIcat+ -- copy rule (down)+ _assignsOidenv =+ _lhsIidenv+ -- copy rule (down)+ _fromListOcat =+ _lhsIcat+ -- copy rule (down)+ _fromListOidenv =+ _lhsIidenv+ -- copy rule (from local)+ _fromListOlib =+ _lib+ -- copy rule (down)+ _whrOcat =+ _lhsIcat+ -- copy rule (down)+ _whrOidenv =+ _lhsIidenv+ -- copy rule (down)+ _returningOcat =+ _lhsIcat+ -- copy rule (down)+ _returningOidenv =+ _lhsIidenv+ ( _tableIannotatedTree,_tableIfixedUpIdentifiersTree,_tableIoriginalTree,_tableItbAnnotatedTree,_tableItbUType) =+ table_ _tableOcat _tableOidenv _tableOlib + ( _assignsIannotatedTree,_assignsIfixedUpIdentifiersTree,_assignsIoriginalTree,_assignsIuType) =+ assigns_ _assignsOcat _assignsOexpectedTypes _assignsOidenv _assignsOlib + ( _fromListIannotatedTree,_fromListIfixedUpIdentifiersTree,_fromListIlibUpdates,_fromListInewLib2,_fromListIoriginalTree,_fromListItrefIDs) =+ fromList_ _fromListOcat _fromListOidenv _fromListOlib + ( _whrIannotatedTree,_whrIfixedUpIdentifiersTree,_whrIoriginalTree) =+ whr_ _whrOcat _whrOidenv _whrOlib + ( _returningIannotatedTree,_returningIfixedUpIdentifiersTree,_returningIlistType,_returningIoriginalTree) =+ returning_ _returningOcat _returningOidenv _returningOlib + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+sem_Statement_WhileStatement :: Annotation ->+ (Maybe String) ->+ T_ScalarExpr ->+ T_StatementList ->+ T_Statement +sem_Statement_WhileStatement ann_ lb_ expr_ sts_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIinProducedCat+ _lhsIlib ->+ (let _lhsOcatUpdates :: ([CatalogUpdate])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _stsOcatUpdates :: ([CatalogUpdate])+ _stsOlibUpdates :: ([LocalBindingsUpdate])+ _exprOexpectedType :: (Maybe Type)+ _lhsOannotatedTree :: Statement + _lhsOfixedUpIdentifiersTree :: Statement + _lhsOoriginalTree :: Statement + _exprOcat :: Catalog+ _exprOidenv :: IDEnv+ _exprOlib :: LocalBindings+ _stsOcat :: Catalog+ _stsOidenv :: IDEnv+ _stsOlib :: LocalBindings+ _exprIannotatedTree :: ScalarExpr + _exprIfixedUpIdentifiersTree :: ScalarExpr + _exprIoriginalTree :: ScalarExpr + _exprIuType :: (Maybe Type)+ _stsIannotatedTree :: StatementList + _stsIfixedUpIdentifiersTree :: StatementList + _stsIoriginalTree :: StatementList + _stsIproducedCat :: Catalog+ _stsIproducedLib :: LocalBindings+ -- "./TypeChecking/Statements.ag"(line 116, column 9)+ _lhsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 117, column 9)+ _lhsOlibUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 138, column 9)+ _stsOcatUpdates =+ []+ -- "./TypeChecking/Statements.ag"(line 139, column 9)+ _stsOlibUpdates =+ []+ -- "./TypeChecking/ParameterizedStatements.ag"(line 112, column 9)+ _exprOexpectedType =+ Nothing+ -- self rule+ _annotatedTree =+ WhileStatement ann_ lb_ _exprIannotatedTree _stsIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ WhileStatement ann_ lb_ _exprIfixedUpIdentifiersTree _stsIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ WhileStatement ann_ lb_ _exprIoriginalTree _stsIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _exprOcat =+ _lhsIcat+ -- copy rule (down)+ _exprOidenv =+ _lhsIidenv+ -- copy rule (down)+ _exprOlib =+ _lhsIlib+ -- copy rule (down)+ _stsOcat =+ _lhsIcat+ -- copy rule (down)+ _stsOidenv =+ _lhsIidenv+ -- copy rule (down)+ _stsOlib =+ _lhsIlib+ ( _exprIannotatedTree,_exprIfixedUpIdentifiersTree,_exprIoriginalTree,_exprIuType) =+ expr_ _exprOcat _exprOexpectedType _exprOidenv _exprOlib + ( _stsIannotatedTree,_stsIfixedUpIdentifiersTree,_stsIoriginalTree,_stsIproducedCat,_stsIproducedLib) =+ sts_ _stsOcat _stsOcatUpdates _stsOidenv _stsOlib _stsOlibUpdates + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOoriginalTree)))+-- StatementList -----------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ catUpdates : [CatalogUpdate]+ idenv : IDEnv+ lib : LocalBindings+ libUpdates : [LocalBindingsUpdate]+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + producedCat : Catalog+ producedLib : LocalBindings+ alternatives:+ alternative Cons:+ child hd : Statement + child tl : StatementList + visit 0:+ local newCat : _+ local newLib : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Nil:+ visit 0:+ local newCat : _+ local newLib : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type StatementList = [Statement ]+-- cata+sem_StatementList :: StatementList ->+ T_StatementList +sem_StatementList list =+ (Prelude.foldr sem_StatementList_Cons sem_StatementList_Nil (Prelude.map sem_Statement list) )+-- semantic domain+type T_StatementList = Catalog ->+ ([CatalogUpdate]) ->+ IDEnv ->+ LocalBindings ->+ ([LocalBindingsUpdate]) ->+ ( StatementList ,StatementList ,StatementList ,Catalog,LocalBindings)+data Inh_StatementList = Inh_StatementList {cat_Inh_StatementList :: Catalog,catUpdates_Inh_StatementList :: ([CatalogUpdate]),idenv_Inh_StatementList :: IDEnv,lib_Inh_StatementList :: LocalBindings,libUpdates_Inh_StatementList :: ([LocalBindingsUpdate])}+data Syn_StatementList = Syn_StatementList {annotatedTree_Syn_StatementList :: StatementList ,fixedUpIdentifiersTree_Syn_StatementList :: StatementList ,originalTree_Syn_StatementList :: StatementList ,producedCat_Syn_StatementList :: Catalog,producedLib_Syn_StatementList :: LocalBindings}+wrap_StatementList :: T_StatementList ->+ Inh_StatementList ->+ Syn_StatementList +wrap_StatementList sem (Inh_StatementList _lhsIcat _lhsIcatUpdates _lhsIidenv _lhsIlib _lhsIlibUpdates ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOproducedCat,_lhsOproducedLib) = sem _lhsIcat _lhsIcatUpdates _lhsIidenv _lhsIlib _lhsIlibUpdates + in (Syn_StatementList _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree _lhsOproducedCat _lhsOproducedLib ))+sem_StatementList_Cons :: T_Statement ->+ T_StatementList ->+ T_StatementList +sem_StatementList_Cons hd_ tl_ =+ (\ _lhsIcat+ _lhsIcatUpdates+ _lhsIidenv+ _lhsIlib+ _lhsIlibUpdates ->+ (let _hdOcat :: Catalog+ _tlOcat :: Catalog+ _hdOlib :: LocalBindings+ _tlOlib :: LocalBindings+ _lhsOproducedCat :: Catalog+ _lhsOproducedLib :: LocalBindings+ _tlOcatUpdates :: ([CatalogUpdate])+ _tlOlibUpdates :: ([LocalBindingsUpdate])+ _hdOinProducedCat :: Catalog+ _lhsOannotatedTree :: StatementList + _lhsOfixedUpIdentifiersTree :: StatementList + _lhsOoriginalTree :: StatementList + _hdOidenv :: IDEnv+ _tlOidenv :: IDEnv+ _hdIannotatedTree :: Statement + _hdIcatUpdates :: ([CatalogUpdate])+ _hdIfixedUpIdentifiersTree :: Statement + _hdIlibUpdates :: ([LocalBindingsUpdate])+ _hdIoriginalTree :: Statement + _tlIannotatedTree :: StatementList + _tlIfixedUpIdentifiersTree :: StatementList + _tlIoriginalTree :: StatementList + _tlIproducedCat :: Catalog+ _tlIproducedLib :: LocalBindings+ -- "./TypeChecking/Statements.ag"(line 56, column 9)+ _newCat =+ fromRight _lhsIcat $ updateCatalog _lhsIcat _lhsIcatUpdates+ -- "./TypeChecking/Statements.ag"(line 57, column 9)+ _newLib =+ fromRight _lhsIlib $ foldM (flip $ lbUpdate _lhsIcat) _lhsIlib _lhsIlibUpdates+ -- "./TypeChecking/Statements.ag"(line 59, column 9)+ _hdOcat =+ _newCat+ -- "./TypeChecking/Statements.ag"(line 60, column 9)+ _tlOcat =+ _newCat+ -- "./TypeChecking/Statements.ag"(line 61, column 9)+ _hdOlib =+ _newLib+ -- "./TypeChecking/Statements.ag"(line 62, column 9)+ _tlOlib =+ _newLib+ -- "./TypeChecking/Statements.ag"(line 66, column 9)+ _lhsOproducedCat =+ _tlIproducedCat+ -- "./TypeChecking/Statements.ag"(line 67, column 9)+ _lhsOproducedLib =+ _tlIproducedLib+ -- "./TypeChecking/Statements.ag"(line 70, column 9)+ _tlOcatUpdates =+ _hdIcatUpdates+ -- "./TypeChecking/Statements.ag"(line 71, column 9)+ _tlOlibUpdates =+ _hdIlibUpdates+ -- "./TypeChecking/Statements.ag"(line 97, column 12)+ _hdOinProducedCat =+ _tlIproducedCat+ -- self rule+ _annotatedTree =+ (:) _hdIannotatedTree _tlIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ (:) _hdIfixedUpIdentifiersTree _tlIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ (:) _hdIoriginalTree _tlIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _hdOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tlOidenv =+ _lhsIidenv+ ( _hdIannotatedTree,_hdIcatUpdates,_hdIfixedUpIdentifiersTree,_hdIlibUpdates,_hdIoriginalTree) =+ hd_ _hdOcat _hdOidenv _hdOinProducedCat _hdOlib + ( _tlIannotatedTree,_tlIfixedUpIdentifiersTree,_tlIoriginalTree,_tlIproducedCat,_tlIproducedLib) =+ tl_ _tlOcat _tlOcatUpdates _tlOidenv _tlOlib _tlOlibUpdates + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOproducedCat,_lhsOproducedLib)))+sem_StatementList_Nil :: T_StatementList +sem_StatementList_Nil =+ (\ _lhsIcat+ _lhsIcatUpdates+ _lhsIidenv+ _lhsIlib+ _lhsIlibUpdates ->+ (let _lhsOproducedCat :: Catalog+ _lhsOproducedLib :: LocalBindings+ _lhsOannotatedTree :: StatementList + _lhsOfixedUpIdentifiersTree :: StatementList + _lhsOoriginalTree :: StatementList + -- "./TypeChecking/Statements.ag"(line 56, column 9)+ _newCat =+ fromRight _lhsIcat $ updateCatalog _lhsIcat _lhsIcatUpdates+ -- "./TypeChecking/Statements.ag"(line 57, column 9)+ _newLib =+ fromRight _lhsIlib $ foldM (flip $ lbUpdate _lhsIcat) _lhsIlib _lhsIlibUpdates+ -- "./TypeChecking/Statements.ag"(line 73, column 9)+ _lhsOproducedCat =+ _newCat+ -- "./TypeChecking/Statements.ag"(line 74, column 9)+ _lhsOproducedLib =+ _newLib+ -- self rule+ _annotatedTree =+ []+ -- self rule+ _fixedUpIdentifiersTree =+ []+ -- self rule+ _originalTree =+ []+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOproducedCat,_lhsOproducedLib)))+-- StringTypeNameListPair --------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + fnSig : (String,[Maybe Type])+ originalTree : SELF + alternatives:+ alternative Tuple:+ child x1 : {String}+ child x2 : TypeNameList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type StringTypeNameListPair = ( (String),TypeNameList )+-- cata+sem_StringTypeNameListPair :: StringTypeNameListPair ->+ T_StringTypeNameListPair +sem_StringTypeNameListPair ( x1,x2) =+ (sem_StringTypeNameListPair_Tuple x1 (sem_TypeNameList x2 ) )+-- semantic domain+type T_StringTypeNameListPair = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( StringTypeNameListPair ,StringTypeNameListPair ,((String,[Maybe Type])),StringTypeNameListPair )+data Inh_StringTypeNameListPair = Inh_StringTypeNameListPair {cat_Inh_StringTypeNameListPair :: Catalog,idenv_Inh_StringTypeNameListPair :: IDEnv,lib_Inh_StringTypeNameListPair :: LocalBindings}+data Syn_StringTypeNameListPair = Syn_StringTypeNameListPair {annotatedTree_Syn_StringTypeNameListPair :: StringTypeNameListPair ,fixedUpIdentifiersTree_Syn_StringTypeNameListPair :: StringTypeNameListPair ,fnSig_Syn_StringTypeNameListPair :: ((String,[Maybe Type])),originalTree_Syn_StringTypeNameListPair :: StringTypeNameListPair }+wrap_StringTypeNameListPair :: T_StringTypeNameListPair ->+ Inh_StringTypeNameListPair ->+ Syn_StringTypeNameListPair +wrap_StringTypeNameListPair sem (Inh_StringTypeNameListPair _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOfnSig,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_StringTypeNameListPair _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOfnSig _lhsOoriginalTree ))+sem_StringTypeNameListPair_Tuple :: String ->+ T_TypeNameList ->+ T_StringTypeNameListPair +sem_StringTypeNameListPair_Tuple x1_ x2_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOfnSig :: ((String,[Maybe Type]))+ _lhsOannotatedTree :: StringTypeNameListPair + _lhsOfixedUpIdentifiersTree :: StringTypeNameListPair + _lhsOoriginalTree :: StringTypeNameListPair + _x2Ocat :: Catalog+ _x2Oidenv :: IDEnv+ _x2Olib :: LocalBindings+ _x2IannotatedTree :: TypeNameList + _x2IfixedUpIdentifiersTree :: TypeNameList + _x2InamedTypes :: ([Maybe Type])+ _x2IoriginalTree :: TypeNameList + -- "./TypeChecking/Ddl/Drops.ag"(line 32, column 13)+ _lhsOfnSig =+ (x1_, _x2InamedTypes)+ -- self rule+ _annotatedTree =+ (x1_,_x2IannotatedTree)+ -- self rule+ _fixedUpIdentifiersTree =+ (x1_,_x2IfixedUpIdentifiersTree)+ -- self rule+ _originalTree =+ (x1_,_x2IoriginalTree)+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _x2Ocat =+ _lhsIcat+ -- copy rule (down)+ _x2Oidenv =+ _lhsIidenv+ -- copy rule (down)+ _x2Olib =+ _lhsIlib+ ( _x2IannotatedTree,_x2IfixedUpIdentifiersTree,_x2InamedTypes,_x2IoriginalTree) =+ x2_ _x2Ocat _x2Oidenv _x2Olib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOfnSig,_lhsOoriginalTree)))+-- StringTypeNameListPairList ----------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + fnSigs : [(String,[Maybe Type])]+ originalTree : SELF + alternatives:+ alternative Cons:+ child hd : StringTypeNameListPair + child tl : StringTypeNameListPairList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Nil:+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type StringTypeNameListPairList = [StringTypeNameListPair ]+-- cata+sem_StringTypeNameListPairList :: StringTypeNameListPairList ->+ T_StringTypeNameListPairList +sem_StringTypeNameListPairList list =+ (Prelude.foldr sem_StringTypeNameListPairList_Cons sem_StringTypeNameListPairList_Nil (Prelude.map sem_StringTypeNameListPair list) )+-- semantic domain+type T_StringTypeNameListPairList = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( StringTypeNameListPairList ,StringTypeNameListPairList ,([(String,[Maybe Type])]),StringTypeNameListPairList )+data Inh_StringTypeNameListPairList = Inh_StringTypeNameListPairList {cat_Inh_StringTypeNameListPairList :: Catalog,idenv_Inh_StringTypeNameListPairList :: IDEnv,lib_Inh_StringTypeNameListPairList :: LocalBindings}+data Syn_StringTypeNameListPairList = Syn_StringTypeNameListPairList {annotatedTree_Syn_StringTypeNameListPairList :: StringTypeNameListPairList ,fixedUpIdentifiersTree_Syn_StringTypeNameListPairList :: StringTypeNameListPairList ,fnSigs_Syn_StringTypeNameListPairList :: ([(String,[Maybe Type])]),originalTree_Syn_StringTypeNameListPairList :: StringTypeNameListPairList }+wrap_StringTypeNameListPairList :: T_StringTypeNameListPairList ->+ Inh_StringTypeNameListPairList ->+ Syn_StringTypeNameListPairList +wrap_StringTypeNameListPairList sem (Inh_StringTypeNameListPairList _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOfnSigs,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_StringTypeNameListPairList _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOfnSigs _lhsOoriginalTree ))+sem_StringTypeNameListPairList_Cons :: T_StringTypeNameListPair ->+ T_StringTypeNameListPairList ->+ T_StringTypeNameListPairList +sem_StringTypeNameListPairList_Cons hd_ tl_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOfnSigs :: ([(String,[Maybe Type])])+ _lhsOannotatedTree :: StringTypeNameListPairList + _lhsOfixedUpIdentifiersTree :: StringTypeNameListPairList + _lhsOoriginalTree :: StringTypeNameListPairList + _hdOcat :: Catalog+ _hdOidenv :: IDEnv+ _hdOlib :: LocalBindings+ _tlOcat :: Catalog+ _tlOidenv :: IDEnv+ _tlOlib :: LocalBindings+ _hdIannotatedTree :: StringTypeNameListPair + _hdIfixedUpIdentifiersTree :: StringTypeNameListPair + _hdIfnSig :: ((String,[Maybe Type]))+ _hdIoriginalTree :: StringTypeNameListPair + _tlIannotatedTree :: StringTypeNameListPairList + _tlIfixedUpIdentifiersTree :: StringTypeNameListPairList + _tlIfnSigs :: ([(String,[Maybe Type])])+ _tlIoriginalTree :: StringTypeNameListPairList + -- "./TypeChecking/Ddl/Drops.ag"(line 27, column 12)+ _lhsOfnSigs =+ _hdIfnSig : _tlIfnSigs+ -- self rule+ _annotatedTree =+ (:) _hdIannotatedTree _tlIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ (:) _hdIfixedUpIdentifiersTree _tlIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ (:) _hdIoriginalTree _tlIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _hdOcat =+ _lhsIcat+ -- copy rule (down)+ _hdOidenv =+ _lhsIidenv+ -- copy rule (down)+ _hdOlib =+ _lhsIlib+ -- copy rule (down)+ _tlOcat =+ _lhsIcat+ -- copy rule (down)+ _tlOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tlOlib =+ _lhsIlib+ ( _hdIannotatedTree,_hdIfixedUpIdentifiersTree,_hdIfnSig,_hdIoriginalTree) =+ hd_ _hdOcat _hdOidenv _hdOlib + ( _tlIannotatedTree,_tlIfixedUpIdentifiersTree,_tlIfnSigs,_tlIoriginalTree) =+ tl_ _tlOcat _tlOidenv _tlOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOfnSigs,_lhsOoriginalTree)))+sem_StringTypeNameListPairList_Nil :: T_StringTypeNameListPairList +sem_StringTypeNameListPairList_Nil =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOfnSigs :: ([(String,[Maybe Type])])+ _lhsOannotatedTree :: StringTypeNameListPairList + _lhsOfixedUpIdentifiersTree :: StringTypeNameListPairList + _lhsOoriginalTree :: StringTypeNameListPairList + -- "./TypeChecking/Ddl/Drops.ag"(line 28, column 11)+ _lhsOfnSigs =+ []+ -- self rule+ _annotatedTree =+ []+ -- self rule+ _fixedUpIdentifiersTree =+ []+ -- self rule+ _originalTree =+ []+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOfnSigs,_lhsOoriginalTree)))+-- TableAlias --------------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ expectedNumCols : Maybe Int+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + alternatives:+ alternative FullAlias:+ child ann : {Annotation}+ child tb : {String}+ child cols : {[String]}+ visit 0:+ local errs : _+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative NoAlias:+ child ann : {Annotation}+ visit 0:+ local backTree : _+ local errs : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative TableAlias:+ child ann : {Annotation}+ child tb : {String}+ visit 0:+ local backTree : _+ local errs : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+data TableAlias = FullAlias (Annotation) (String) (([String])) + | NoAlias (Annotation) + | TableAlias (Annotation) (String) + deriving ( Data,Eq,Show,Typeable)+-- cata+sem_TableAlias :: TableAlias ->+ T_TableAlias +sem_TableAlias (FullAlias _ann _tb _cols ) =+ (sem_TableAlias_FullAlias _ann _tb _cols )+sem_TableAlias (NoAlias _ann ) =+ (sem_TableAlias_NoAlias _ann )+sem_TableAlias (TableAlias _ann _tb ) =+ (sem_TableAlias_TableAlias _ann _tb )+-- semantic domain+type T_TableAlias = Catalog ->+ (Maybe Int) ->+ IDEnv ->+ LocalBindings ->+ ( TableAlias ,TableAlias ,TableAlias )+data Inh_TableAlias = Inh_TableAlias {cat_Inh_TableAlias :: Catalog,expectedNumCols_Inh_TableAlias :: (Maybe Int),idenv_Inh_TableAlias :: IDEnv,lib_Inh_TableAlias :: LocalBindings}+data Syn_TableAlias = Syn_TableAlias {annotatedTree_Syn_TableAlias :: TableAlias ,fixedUpIdentifiersTree_Syn_TableAlias :: TableAlias ,originalTree_Syn_TableAlias :: TableAlias }+wrap_TableAlias :: T_TableAlias ->+ Inh_TableAlias ->+ Syn_TableAlias +wrap_TableAlias sem (Inh_TableAlias _lhsIcat _lhsIexpectedNumCols _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree) = sem _lhsIcat _lhsIexpectedNumCols _lhsIidenv _lhsIlib + in (Syn_TableAlias _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree ))+sem_TableAlias_FullAlias :: Annotation ->+ String ->+ ([String]) ->+ T_TableAlias +sem_TableAlias_FullAlias ann_ tb_ cols_ =+ (\ _lhsIcat+ _lhsIexpectedNumCols+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: TableAlias + _lhsOfixedUpIdentifiersTree :: TableAlias + _lhsOoriginalTree :: TableAlias + -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 286, column 9)+ _lhsOannotatedTree =+ addTypeErrors _errs _backTree+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 288, column 9)+ _errs =+ case _lhsIexpectedNumCols of+ Nothing -> []+ Just n -> if n == length cols_+ then []+ else [WrongNumberOfAliasCols n $ length cols_]+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 293, column 9)+ _backTree =+ FullAlias ann_ tb_ cols_+ -- self rule+ _annotatedTree =+ FullAlias ann_ tb_ cols_+ -- self rule+ _fixedUpIdentifiersTree =+ FullAlias ann_ tb_ cols_+ -- self rule+ _originalTree =+ FullAlias ann_ tb_ cols_+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_TableAlias_NoAlias :: Annotation ->+ T_TableAlias +sem_TableAlias_NoAlias ann_ =+ (\ _lhsIcat+ _lhsIexpectedNumCols+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: TableAlias + _lhsOfixedUpIdentifiersTree :: TableAlias + _lhsOoriginalTree :: TableAlias + -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 286, column 9)+ _lhsOannotatedTree =+ addTypeErrors _errs _backTree+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 296, column 15)+ _backTree =+ NoAlias ann_+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 297, column 15)+ _errs =+ []+ -- self rule+ _annotatedTree =+ NoAlias ann_+ -- self rule+ _fixedUpIdentifiersTree =+ NoAlias ann_+ -- self rule+ _originalTree =+ NoAlias ann_+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_TableAlias_TableAlias :: Annotation ->+ String ->+ T_TableAlias +sem_TableAlias_TableAlias ann_ tb_ =+ (\ _lhsIcat+ _lhsIexpectedNumCols+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOannotatedTree :: TableAlias + _lhsOfixedUpIdentifiersTree :: TableAlias + _lhsOoriginalTree :: TableAlias + -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 286, column 9)+ _lhsOannotatedTree =+ addTypeErrors _errs _backTree+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 294, column 18)+ _backTree =+ TableAlias ann_ tb_+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 295, column 18)+ _errs =+ []+ -- self rule+ _annotatedTree =+ TableAlias ann_ tb_+ -- self rule+ _fixedUpIdentifiersTree =+ TableAlias ann_ tb_+ -- self rule+ _originalTree =+ TableAlias ann_ tb_+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+-- TableRef ----------------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + libUpdates : [LocalBindingsUpdate]+ newLib2 : LocalBindings+ originalTree : SELF + trefIDs : [(String,[String])]+ alternatives:+ alternative FunTref:+ child ann : {Annotation}+ child fn : ScalarExpr + child alias : TableAlias + visit 0:+ local _tup2 : {([(String,[String])],TableRef)}+ local errs : _+ local eqfunIdens : {Either [TypeError] (String,[(String,Type)])}+ local qfunIdens : _+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative JoinTref:+ child ann : {Annotation}+ child tbl : TableRef + child nat : {Natural}+ child joinType : {JoinType}+ child tbl1 : TableRef + child onExpr : OnExpr + child alias : TableAlias + visit 0:+ local _tup3 : _+ local trefIDs : _+ local errs : _+ local joinErrors : _+ local libUpdates : _+ local newLib : {Either [TypeError] LocalBindings}+ local newLib2 : _+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative SubTref:+ child ann : {Annotation}+ child sel : QueryExpr + child alias : TableAlias + visit 0:+ local _tup4 : {([(String,[String])],TableRef)}+ local errs : _+ local selectAttrs : {Either [TypeError] [(String,Type)]}+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Tref:+ child ann : {Annotation}+ child tbl : SQIdentifier + child alias : TableAlias + visit 0:+ local _tup5 : {([(String,[String])],TableRef)}+ local errs : _+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+data TableRef = FunTref (Annotation) (ScalarExpr ) (TableAlias ) + | JoinTref (Annotation) (TableRef ) (Natural) (JoinType) (TableRef ) (OnExpr ) (TableAlias ) + | SubTref (Annotation) (QueryExpr ) (TableAlias ) + | Tref (Annotation) (SQIdentifier ) (TableAlias ) + deriving ( Data,Eq,Show,Typeable)+-- cata+sem_TableRef :: TableRef ->+ T_TableRef +sem_TableRef (FunTref _ann _fn _alias ) =+ (sem_TableRef_FunTref _ann (sem_ScalarExpr _fn ) (sem_TableAlias _alias ) )+sem_TableRef (JoinTref _ann _tbl _nat _joinType _tbl1 _onExpr _alias ) =+ (sem_TableRef_JoinTref _ann (sem_TableRef _tbl ) _nat _joinType (sem_TableRef _tbl1 ) (sem_OnExpr _onExpr ) (sem_TableAlias _alias ) )+sem_TableRef (SubTref _ann _sel _alias ) =+ (sem_TableRef_SubTref _ann (sem_QueryExpr _sel ) (sem_TableAlias _alias ) )+sem_TableRef (Tref _ann _tbl _alias ) =+ (sem_TableRef_Tref _ann (sem_SQIdentifier _tbl ) (sem_TableAlias _alias ) )+-- semantic domain+type T_TableRef = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( TableRef ,TableRef ,([LocalBindingsUpdate]),LocalBindings,TableRef ,([(String,[String])]))+data Inh_TableRef = Inh_TableRef {cat_Inh_TableRef :: Catalog,idenv_Inh_TableRef :: IDEnv,lib_Inh_TableRef :: LocalBindings}+data Syn_TableRef = Syn_TableRef {annotatedTree_Syn_TableRef :: TableRef ,fixedUpIdentifiersTree_Syn_TableRef :: TableRef ,libUpdates_Syn_TableRef :: ([LocalBindingsUpdate]),newLib2_Syn_TableRef :: LocalBindings,originalTree_Syn_TableRef :: TableRef ,trefIDs_Syn_TableRef :: ([(String,[String])])}+wrap_TableRef :: T_TableRef ->+ Inh_TableRef ->+ Syn_TableRef +wrap_TableRef sem (Inh_TableRef _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOnewLib2,_lhsOoriginalTree,_lhsOtrefIDs) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_TableRef _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOlibUpdates _lhsOnewLib2 _lhsOoriginalTree _lhsOtrefIDs ))+sem_TableRef_FunTref :: Annotation ->+ T_ScalarExpr ->+ T_TableAlias ->+ T_TableRef +sem_TableRef_FunTref ann_ fn_ alias_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let __tup2 :: (([(String,[String])],TableRef))+ _lhsOtrefIDs :: ([(String,[String])])+ _lhsOfixedUpIdentifiersTree :: TableRef + _lhsOannotatedTree :: TableRef + _eqfunIdens :: (Either [TypeError] (String,[(String,Type)]))+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _lhsOnewLib2 :: LocalBindings+ _aliasOexpectedNumCols :: (Maybe Int)+ _fnOexpectedType :: (Maybe Type)+ _lhsOoriginalTree :: TableRef + _fnOcat :: Catalog+ _fnOidenv :: IDEnv+ _fnOlib :: LocalBindings+ _aliasOcat :: Catalog+ _aliasOidenv :: IDEnv+ _aliasOlib :: LocalBindings+ _fnIannotatedTree :: ScalarExpr + _fnIfixedUpIdentifiersTree :: ScalarExpr + _fnIoriginalTree :: ScalarExpr + _fnIuType :: (Maybe Type)+ _aliasIannotatedTree :: TableAlias + _aliasIfixedUpIdentifiersTree :: TableAlias + _aliasIoriginalTree :: TableAlias + -- "./TypeChecking/FixUpIdentifiers.ag"(line 382, column 15)+ __tup2 =+ let (FunCall _ f _) = _fnIfixedUpIdentifiersTree+ (trs,al) = doAlias _aliasIannotatedTree [(f,[f])]+ in (trs,FunTref ann_ _fnIfixedUpIdentifiersTree al)+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 382, column 15)+ (_lhsOtrefIDs,_) =+ __tup2+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 382, column 15)+ (_,_lhsOfixedUpIdentifiersTree) =+ __tup2+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 55, column 9)+ _lhsOannotatedTree =+ addTypeErrors _errs _backTree+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 102, column 9)+ _errs =+ case _eqfunIdens of+ Left e -> e+ Right _ -> []+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 108, column 9)+ _eqfunIdens =+ funIdens _lhsIcat (getAlias "" _aliasIoriginalTree) _fnIannotatedTree _fnIuType+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 109, column 9)+ _lhsOlibUpdates =+ [LBTref "fn"+ (fst _qfunIdens )+ (snd _qfunIdens )+ []]+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 113, column 9)+ _qfunIdens =+ fromRight ("",[]) _eqfunIdens+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 247, column 9)+ _lhsOnewLib2 =+ emptyBindings+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 260, column 9)+ _backTree =+ FunTref ann_ _fnIannotatedTree _aliasIannotatedTree+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 281, column 9)+ _aliasOexpectedNumCols =+ Nothing+ -- "./TypeChecking/ParameterizedStatements.ag"(line 120, column 15)+ _fnOexpectedType =+ Nothing+ -- self rule+ _annotatedTree =+ FunTref ann_ _fnIannotatedTree _aliasIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ FunTref ann_ _fnIfixedUpIdentifiersTree _aliasIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ FunTref ann_ _fnIoriginalTree _aliasIoriginalTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _fnOcat =+ _lhsIcat+ -- copy rule (down)+ _fnOidenv =+ _lhsIidenv+ -- copy rule (down)+ _fnOlib =+ _lhsIlib+ -- copy rule (down)+ _aliasOcat =+ _lhsIcat+ -- copy rule (down)+ _aliasOidenv =+ _lhsIidenv+ -- copy rule (down)+ _aliasOlib =+ _lhsIlib+ ( _fnIannotatedTree,_fnIfixedUpIdentifiersTree,_fnIoriginalTree,_fnIuType) =+ fn_ _fnOcat _fnOexpectedType _fnOidenv _fnOlib + ( _aliasIannotatedTree,_aliasIfixedUpIdentifiersTree,_aliasIoriginalTree) =+ alias_ _aliasOcat _aliasOexpectedNumCols _aliasOidenv _aliasOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOnewLib2,_lhsOoriginalTree,_lhsOtrefIDs)))+sem_TableRef_JoinTref :: Annotation ->+ T_TableRef ->+ Natural ->+ JoinType ->+ T_TableRef ->+ T_OnExpr ->+ T_TableAlias ->+ T_TableRef +sem_TableRef_JoinTref ann_ tbl_ nat_ joinType_ tbl1_ onExpr_ alias_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOfixedUpIdentifiersTree :: TableRef + _lhsOtrefIDs :: ([(String,[String])])+ _onExprOidenv :: IDEnv+ _lhsOannotatedTree :: TableRef + _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _newLib :: (Either [TypeError] LocalBindings)+ _lhsOnewLib2 :: LocalBindings+ _onExprOlib :: LocalBindings+ _aliasOexpectedNumCols :: (Maybe Int)+ _lhsOoriginalTree :: TableRef + _tblOcat :: Catalog+ _tblOidenv :: IDEnv+ _tblOlib :: LocalBindings+ _tbl1Ocat :: Catalog+ _tbl1Oidenv :: IDEnv+ _tbl1Olib :: LocalBindings+ _onExprOcat :: Catalog+ _aliasOcat :: Catalog+ _aliasOidenv :: IDEnv+ _aliasOlib :: LocalBindings+ _tblIannotatedTree :: TableRef + _tblIfixedUpIdentifiersTree :: TableRef + _tblIlibUpdates :: ([LocalBindingsUpdate])+ _tblInewLib2 :: LocalBindings+ _tblIoriginalTree :: TableRef + _tblItrefIDs :: ([(String,[String])])+ _tbl1IannotatedTree :: TableRef + _tbl1IfixedUpIdentifiersTree :: TableRef + _tbl1IlibUpdates :: ([LocalBindingsUpdate])+ _tbl1InewLib2 :: LocalBindings+ _tbl1IoriginalTree :: TableRef + _tbl1ItrefIDs :: ([(String,[String])])+ _onExprIannotatedTree :: OnExpr + _onExprIfixedUpIdentifiersTree :: OnExpr + _onExprIoriginalTree :: OnExpr + _aliasIannotatedTree :: TableAlias + _aliasIfixedUpIdentifiersTree :: TableAlias + _aliasIoriginalTree :: TableAlias + -- "./TypeChecking/FixUpIdentifiers.ag"(line 388, column 9)+ __tup3 =+ let (trs,al) = doAlias _aliasIannotatedTree $ _tblItrefIDs ++ _tbl1ItrefIDs+ in (trs, JoinTref ann_ _tblIfixedUpIdentifiersTree+ nat_ joinType_ _tbl1IfixedUpIdentifiersTree+ _onExprIfixedUpIdentifiersTree al)+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 388, column 9)+ (_trefIDs,_) =+ __tup3+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 388, column 9)+ (_,_lhsOfixedUpIdentifiersTree) =+ __tup3+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 394, column 9)+ _lhsOtrefIDs =+ _trefIDs+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 395, column 9)+ _onExprOidenv =+ IDEnv _trefIDs+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 55, column 9)+ _lhsOannotatedTree =+ addTypeErrors _errs _backTree+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 118, column 9)+ _errs =+ fromLeft [] _newLib+ ++ _joinErrors+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 120, column 9)+ _lhsOlibUpdates =+ if _joinErrors == []+ then _libUpdates+ else []+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 125, column 9)+ _joinErrors =+ fromLeft [] (foldM (flip $ lbUpdate _lhsIcat) _lhsIlib _libUpdates )+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 126, column 9)+ _libUpdates =+ case (_tblIlibUpdates, _tbl1IlibUpdates) of+ ([u1], [u2]) -> [LBJoinTref "join" u1 u2 jids+ (case _aliasIoriginalTree of+ NoAlias _ -> Nothing+ TableAlias _ t -> Just t+ FullAlias _ t _ -> Just t)]+ _ -> []+ where+ jids = case (nat_, _onExprIoriginalTree) of+ (Natural, _) -> Left ()+ (_,Just (JoinUsing _ s)) -> Right s+ _ -> Right []+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 140, column 9)+ _newLib =+ case (_tblIlibUpdates, _tbl1IlibUpdates) of+ ([u1],[u2]) -> lbUpdate _lhsIcat+ (LBJoinTref "join" u1 u2 (Right []) Nothing) _lhsIlib+ _ -> Right _lhsIlib+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 220, column 9)+ _newLib2 =+ let t0t :: [(String,Maybe Type)]+ t0t = getUnqualifiedBindings _tblInewLib2+ t1t = getUnqualifiedBindings _tbl1InewLib2+ in case _aliasIoriginalTree of+ (FullAlias _ n cs) ->+ createLocalBindings $ Just [(n,zip cs $ map snd (t0t ++ t1t))]+ (TableAlias _ n) ->+ createLocalBindings $ Just [(n, t0t ++ t1t)]+ NoAlias _ ->+ joinBindings _tblInewLib2 _tbl1InewLib2+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 233, column 9)+ _lhsOnewLib2 =+ _newLib2+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 234, column 9)+ _onExprOlib =+ _newLib2+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 262, column 9)+ _backTree =+ JoinTref ann_+ _tblIannotatedTree+ nat_+ joinType_+ _tbl1IannotatedTree+ _onExprIannotatedTree+ _aliasIannotatedTree+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 281, column 9)+ _aliasOexpectedNumCols =+ Nothing+ -- self rule+ _annotatedTree =+ JoinTref ann_ _tblIannotatedTree nat_ joinType_ _tbl1IannotatedTree _onExprIannotatedTree _aliasIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ JoinTref ann_ _tblIfixedUpIdentifiersTree nat_ joinType_ _tbl1IfixedUpIdentifiersTree _onExprIfixedUpIdentifiersTree _aliasIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ JoinTref ann_ _tblIoriginalTree nat_ joinType_ _tbl1IoriginalTree _onExprIoriginalTree _aliasIoriginalTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _tblOcat =+ _lhsIcat+ -- copy rule (down)+ _tblOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tblOlib =+ _lhsIlib+ -- copy rule (down)+ _tbl1Ocat =+ _lhsIcat+ -- copy rule (down)+ _tbl1Oidenv =+ _lhsIidenv+ -- copy rule (down)+ _tbl1Olib =+ _lhsIlib+ -- copy rule (down)+ _onExprOcat =+ _lhsIcat+ -- copy rule (down)+ _aliasOcat =+ _lhsIcat+ -- copy rule (down)+ _aliasOidenv =+ _lhsIidenv+ -- copy rule (down)+ _aliasOlib =+ _lhsIlib+ ( _tblIannotatedTree,_tblIfixedUpIdentifiersTree,_tblIlibUpdates,_tblInewLib2,_tblIoriginalTree,_tblItrefIDs) =+ tbl_ _tblOcat _tblOidenv _tblOlib + ( _tbl1IannotatedTree,_tbl1IfixedUpIdentifiersTree,_tbl1IlibUpdates,_tbl1InewLib2,_tbl1IoriginalTree,_tbl1ItrefIDs) =+ tbl1_ _tbl1Ocat _tbl1Oidenv _tbl1Olib + ( _onExprIannotatedTree,_onExprIfixedUpIdentifiersTree,_onExprIoriginalTree) =+ onExpr_ _onExprOcat _onExprOidenv _onExprOlib + ( _aliasIannotatedTree,_aliasIfixedUpIdentifiersTree,_aliasIoriginalTree) =+ alias_ _aliasOcat _aliasOexpectedNumCols _aliasOidenv _aliasOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOnewLib2,_lhsOoriginalTree,_lhsOtrefIDs)))+sem_TableRef_SubTref :: Annotation ->+ T_QueryExpr ->+ T_TableAlias ->+ T_TableRef +sem_TableRef_SubTref ann_ sel_ alias_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let __tup4 :: (([(String,[String])],TableRef))+ _lhsOtrefIDs :: ([(String,[String])])+ _lhsOfixedUpIdentifiersTree :: TableRef + _selOcsql :: LocalBindings+ _lhsOannotatedTree :: TableRef + _selectAttrs :: (Either [TypeError] [(String,Type)])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _lhsOnewLib2 :: LocalBindings+ _aliasOexpectedNumCols :: (Maybe Int)+ _selOexpectedTypes :: ([Maybe Type])+ _lhsOoriginalTree :: TableRef + _selOcat :: Catalog+ _selOidenv :: IDEnv+ _selOlib :: LocalBindings+ _aliasOcat :: Catalog+ _aliasOidenv :: IDEnv+ _aliasOlib :: LocalBindings+ _selIannotatedTree :: QueryExpr + _selIcidenv :: IDEnv+ _selIfixedUpIdentifiersTree :: QueryExpr + _selIlibUpdates :: ([LocalBindingsUpdate])+ _selIoriginalTree :: QueryExpr + _selIuType :: (Maybe [(String,Type)])+ _aliasIannotatedTree :: TableAlias + _aliasIfixedUpIdentifiersTree :: TableAlias + _aliasIoriginalTree :: TableAlias + -- "./TypeChecking/FixUpIdentifiers.ag"(line 377, column 15)+ __tup4 =+ let IDEnv x = _selIcidenv+ (trs,al) = doAlias _aliasIannotatedTree x+ in (trs, SubTref ann_ _selIfixedUpIdentifiersTree al)+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 377, column 15)+ (_lhsOtrefIDs,_) =+ __tup4+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 377, column 15)+ (_,_lhsOfixedUpIdentifiersTree) =+ __tup4+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 129, column 15)+ _selOcsql =+ emptyBindings+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 55, column 9)+ _lhsOannotatedTree =+ addTypeErrors _errs _backTree+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 72, column 9)+ _errs =+ case _selectAttrs of+ Left e -> e+ Right _ -> []+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 76, column 9)+ _selectAttrs =+ lmt _selIuType+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 77, column 9)+ _lhsOlibUpdates =+ [LBTref "sub query" (getAlias "" _aliasIoriginalTree)+ (fromRight [] _selectAttrs ) []]+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 237, column 9)+ _lhsOnewLib2 =+ createLocalBindings $ do+ pu <- _selIuType+ let (n,cs) = case _aliasIoriginalTree of+ (FullAlias _ n cs) -> (n,cs)+ _ -> (n, [])+ return [(n,zip cs $ map (Just . snd) pu)]+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 256, column 9)+ _backTree =+ SubTref ann_ _selIannotatedTree _aliasIannotatedTree+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 281, column 9)+ _aliasOexpectedNumCols =+ Nothing+ -- "./TypeChecking/ParameterizedStatements.ag"(line 180, column 15)+ _selOexpectedTypes =+ []+ -- self rule+ _annotatedTree =+ SubTref ann_ _selIannotatedTree _aliasIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ SubTref ann_ _selIfixedUpIdentifiersTree _aliasIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ SubTref ann_ _selIoriginalTree _aliasIoriginalTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _selOcat =+ _lhsIcat+ -- copy rule (down)+ _selOidenv =+ _lhsIidenv+ -- copy rule (down)+ _selOlib =+ _lhsIlib+ -- copy rule (down)+ _aliasOcat =+ _lhsIcat+ -- copy rule (down)+ _aliasOidenv =+ _lhsIidenv+ -- copy rule (down)+ _aliasOlib =+ _lhsIlib+ ( _selIannotatedTree,_selIcidenv,_selIfixedUpIdentifiersTree,_selIlibUpdates,_selIoriginalTree,_selIuType) =+ sel_ _selOcat _selOcsql _selOexpectedTypes _selOidenv _selOlib + ( _aliasIannotatedTree,_aliasIfixedUpIdentifiersTree,_aliasIoriginalTree) =+ alias_ _aliasOcat _aliasOexpectedNumCols _aliasOidenv _aliasOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOnewLib2,_lhsOoriginalTree,_lhsOtrefIDs)))+sem_TableRef_Tref :: Annotation ->+ T_SQIdentifier ->+ T_TableAlias ->+ T_TableRef +sem_TableRef_Tref ann_ tbl_ alias_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let __tup5 :: (([(String,[String])],TableRef))+ _lhsOtrefIDs :: ([(String,[String])])+ _lhsOfixedUpIdentifiersTree :: TableRef + _lhsOannotatedTree :: TableRef + _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _lhsOnewLib2 :: LocalBindings+ _aliasOexpectedNumCols :: (Maybe Int)+ _lhsOoriginalTree :: TableRef + _tblOcat :: Catalog+ _tblOidenv :: IDEnv+ _tblOlib :: LocalBindings+ _aliasOcat :: Catalog+ _aliasOidenv :: IDEnv+ _aliasOlib :: LocalBindings+ _tblIannotatedTree :: SQIdentifier + _tblIfixedUpIdentifiersTree :: SQIdentifier + _tblIoriginalTree :: SQIdentifier + _tblItbAnnotatedTree :: SQIdentifier + _tblItbUType :: (Maybe ([(String,Type)],[(String,Type)]))+ _aliasIannotatedTree :: TableAlias + _aliasIfixedUpIdentifiersTree :: TableAlias + _aliasIoriginalTree :: TableAlias + -- "./TypeChecking/FixUpIdentifiers.ag"(line 369, column 12)+ __tup5 =+ let tn = getTName _tblIfixedUpIdentifiersTree+ ids = case catCompositePublicAttrs _lhsIcat relationComposites tn of+ Right attrs -> [(tn, map fst attrs)]+ Left _ -> [(tn,[])]+ (trs,al) = doAlias _aliasIannotatedTree ids+ in (trs,Tref ann_ _tblIfixedUpIdentifiersTree al)+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 369, column 12)+ (_lhsOtrefIDs,_) =+ __tup5+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 369, column 12)+ (_,_lhsOfixedUpIdentifiersTree) =+ __tup5+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 55, column 9)+ _lhsOannotatedTree =+ addTypeErrors _errs _backTree+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 85, column 9)+ _errs =+ []+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 86, column 9)+ _lhsOlibUpdates =+ maybe [] id $ do+ let n = getTName _tblIannotatedTree+ (pu,pr) <- _tblItbUType+ return [LBTref ("tref: " ++ n)+ (getAlias n _aliasIoriginalTree)+ pu+ pr]+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 208, column 9)+ _lhsOnewLib2 =+ createLocalBindings $ do+ let n = getTName _tblIannotatedTree+ (pu,pr) <- _tblItbUType+ let (n,cs) = case _aliasIoriginalTree of+ (FullAlias _ n cs) -> (n,cs)+ _ -> (n, [])+ return [(n,zip cs $ map (Just . snd) pu)+ ,(n,map (second Just) pr)]+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 258, column 9)+ _backTree =+ Tref ann_ _tblItbAnnotatedTree _aliasIannotatedTree+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 275, column 9)+ _aliasOexpectedNumCols =+ do+ let n = getTName _tblIannotatedTree+ (pu,_) <- _tblItbUType+ return $ length pu+ -- self rule+ _annotatedTree =+ Tref ann_ _tblIannotatedTree _aliasIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ Tref ann_ _tblIfixedUpIdentifiersTree _aliasIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ Tref ann_ _tblIoriginalTree _aliasIoriginalTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _tblOcat =+ _lhsIcat+ -- copy rule (down)+ _tblOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tblOlib =+ _lhsIlib+ -- copy rule (down)+ _aliasOcat =+ _lhsIcat+ -- copy rule (down)+ _aliasOidenv =+ _lhsIidenv+ -- copy rule (down)+ _aliasOlib =+ _lhsIlib+ ( _tblIannotatedTree,_tblIfixedUpIdentifiersTree,_tblIoriginalTree,_tblItbAnnotatedTree,_tblItbUType) =+ tbl_ _tblOcat _tblOidenv _tblOlib + ( _aliasIannotatedTree,_aliasIfixedUpIdentifiersTree,_aliasIoriginalTree) =+ alias_ _aliasOcat _aliasOexpectedNumCols _aliasOidenv _aliasOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOnewLib2,_lhsOoriginalTree,_lhsOtrefIDs)))+-- TableRefList ------------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + libUpdates : [LocalBindingsUpdate]+ newLib2 : LocalBindings+ originalTree : SELF + trefIDs : [(String,[String])]+ alternatives:+ alternative Cons:+ child hd : TableRef + child tl : TableRefList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Nil:+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type TableRefList = [TableRef ]+-- cata+sem_TableRefList :: TableRefList ->+ T_TableRefList +sem_TableRefList list =+ (Prelude.foldr sem_TableRefList_Cons sem_TableRefList_Nil (Prelude.map sem_TableRef list) )+-- semantic domain+type T_TableRefList = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( TableRefList ,TableRefList ,([LocalBindingsUpdate]),LocalBindings,TableRefList ,([(String,[String])]))+data Inh_TableRefList = Inh_TableRefList {cat_Inh_TableRefList :: Catalog,idenv_Inh_TableRefList :: IDEnv,lib_Inh_TableRefList :: LocalBindings}+data Syn_TableRefList = Syn_TableRefList {annotatedTree_Syn_TableRefList :: TableRefList ,fixedUpIdentifiersTree_Syn_TableRefList :: TableRefList ,libUpdates_Syn_TableRefList :: ([LocalBindingsUpdate]),newLib2_Syn_TableRefList :: LocalBindings,originalTree_Syn_TableRefList :: TableRefList ,trefIDs_Syn_TableRefList :: ([(String,[String])])}+wrap_TableRefList :: T_TableRefList ->+ Inh_TableRefList ->+ Syn_TableRefList +wrap_TableRefList sem (Inh_TableRefList _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOnewLib2,_lhsOoriginalTree,_lhsOtrefIDs) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_TableRefList _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOlibUpdates _lhsOnewLib2 _lhsOoriginalTree _lhsOtrefIDs ))+sem_TableRefList_Cons :: T_TableRef ->+ T_TableRefList ->+ T_TableRefList +sem_TableRefList_Cons hd_ tl_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOtrefIDs :: ([(String,[String])])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _lhsOnewLib2 :: LocalBindings+ _lhsOannotatedTree :: TableRefList + _lhsOfixedUpIdentifiersTree :: TableRefList + _lhsOoriginalTree :: TableRefList + _hdOcat :: Catalog+ _hdOidenv :: IDEnv+ _hdOlib :: LocalBindings+ _tlOcat :: Catalog+ _tlOidenv :: IDEnv+ _tlOlib :: LocalBindings+ _hdIannotatedTree :: TableRef + _hdIfixedUpIdentifiersTree :: TableRef + _hdIlibUpdates :: ([LocalBindingsUpdate])+ _hdInewLib2 :: LocalBindings+ _hdIoriginalTree :: TableRef + _hdItrefIDs :: ([(String,[String])])+ _tlIannotatedTree :: TableRefList + _tlIfixedUpIdentifiersTree :: TableRefList + _tlIlibUpdates :: ([LocalBindingsUpdate])+ _tlInewLib2 :: LocalBindings+ _tlIoriginalTree :: TableRefList + _tlItrefIDs :: ([(String,[String])])+ -- "./TypeChecking/FixUpIdentifiers.ag"(line 365, column 12)+ _lhsOtrefIDs =+ _hdItrefIDs ++ _tlItrefIDs+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 61, column 9)+ _lhsOlibUpdates =+ _hdIlibUpdates+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 204, column 9)+ _lhsOnewLib2 =+ joinBindings _hdInewLib2 _tlInewLib2+ -- self rule+ _annotatedTree =+ (:) _hdIannotatedTree _tlIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ (:) _hdIfixedUpIdentifiersTree _tlIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ (:) _hdIoriginalTree _tlIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _hdOcat =+ _lhsIcat+ -- copy rule (down)+ _hdOidenv =+ _lhsIidenv+ -- copy rule (down)+ _hdOlib =+ _lhsIlib+ -- copy rule (down)+ _tlOcat =+ _lhsIcat+ -- copy rule (down)+ _tlOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tlOlib =+ _lhsIlib+ ( _hdIannotatedTree,_hdIfixedUpIdentifiersTree,_hdIlibUpdates,_hdInewLib2,_hdIoriginalTree,_hdItrefIDs) =+ hd_ _hdOcat _hdOidenv _hdOlib + ( _tlIannotatedTree,_tlIfixedUpIdentifiersTree,_tlIlibUpdates,_tlInewLib2,_tlIoriginalTree,_tlItrefIDs) =+ tl_ _tlOcat _tlOidenv _tlOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOnewLib2,_lhsOoriginalTree,_lhsOtrefIDs)))+sem_TableRefList_Nil :: T_TableRefList +sem_TableRefList_Nil =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOtrefIDs :: ([(String,[String])])+ _lhsOlibUpdates :: ([LocalBindingsUpdate])+ _lhsOnewLib2 :: LocalBindings+ _lhsOannotatedTree :: TableRefList + _lhsOfixedUpIdentifiersTree :: TableRefList + _lhsOoriginalTree :: TableRefList + -- "./TypeChecking/FixUpIdentifiers.ag"(line 366, column 11)+ _lhsOtrefIDs =+ []+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 59, column 9)+ _lhsOlibUpdates =+ []+ -- "./TypeChecking/QueryExprs/TableRefs.ag"(line 202, column 9)+ _lhsOnewLib2 =+ createLocalBindings $ Just []+ -- self rule+ _annotatedTree =+ []+ -- self rule+ _fixedUpIdentifiersTree =+ []+ -- self rule+ _originalTree =+ []+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOlibUpdates,_lhsOnewLib2,_lhsOoriginalTree,_lhsOtrefIDs)))+-- TypeAttributeDef --------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + attrName : String+ fixedUpIdentifiersTree : SELF + namedType : Maybe Type+ originalTree : SELF + alternatives:+ alternative TypeAttDef:+ child ann : {Annotation}+ child name : {String}+ child typ : TypeName + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+data TypeAttributeDef = TypeAttDef (Annotation) (String) (TypeName ) + deriving ( Data,Eq,Show,Typeable)+-- cata+sem_TypeAttributeDef :: TypeAttributeDef ->+ T_TypeAttributeDef +sem_TypeAttributeDef (TypeAttDef _ann _name _typ ) =+ (sem_TypeAttributeDef_TypeAttDef _ann _name (sem_TypeName _typ ) )+-- semantic domain+type T_TypeAttributeDef = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( TypeAttributeDef ,String,TypeAttributeDef ,(Maybe Type),TypeAttributeDef )+data Inh_TypeAttributeDef = Inh_TypeAttributeDef {cat_Inh_TypeAttributeDef :: Catalog,idenv_Inh_TypeAttributeDef :: IDEnv,lib_Inh_TypeAttributeDef :: LocalBindings}+data Syn_TypeAttributeDef = Syn_TypeAttributeDef {annotatedTree_Syn_TypeAttributeDef :: TypeAttributeDef ,attrName_Syn_TypeAttributeDef :: String,fixedUpIdentifiersTree_Syn_TypeAttributeDef :: TypeAttributeDef ,namedType_Syn_TypeAttributeDef :: (Maybe Type),originalTree_Syn_TypeAttributeDef :: TypeAttributeDef }+wrap_TypeAttributeDef :: T_TypeAttributeDef ->+ Inh_TypeAttributeDef ->+ Syn_TypeAttributeDef +wrap_TypeAttributeDef sem (Inh_TypeAttributeDef _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOattrName,_lhsOfixedUpIdentifiersTree,_lhsOnamedType,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_TypeAttributeDef _lhsOannotatedTree _lhsOattrName _lhsOfixedUpIdentifiersTree _lhsOnamedType _lhsOoriginalTree ))+sem_TypeAttributeDef_TypeAttDef :: Annotation ->+ String ->+ T_TypeName ->+ T_TypeAttributeDef +sem_TypeAttributeDef_TypeAttDef ann_ name_ typ_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOattrName :: String+ _lhsOnamedType :: (Maybe Type)+ _lhsOannotatedTree :: TypeAttributeDef + _lhsOfixedUpIdentifiersTree :: TypeAttributeDef + _lhsOoriginalTree :: TypeAttributeDef + _typOcat :: Catalog+ _typOidenv :: IDEnv+ _typOlib :: LocalBindings+ _typIannotatedTree :: TypeName + _typIfixedUpIdentifiersTree :: TypeName + _typInamedType :: (Maybe Type)+ _typIoriginalTree :: TypeName + -- "./TypeChecking/Ddl/MiscCreates.ag"(line 37, column 9)+ _lhsOattrName =+ name_+ -- "./TypeChecking/Ddl/MiscCreates.ag"(line 38, column 9)+ _lhsOnamedType =+ _typInamedType+ -- self rule+ _annotatedTree =+ TypeAttDef ann_ name_ _typIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ TypeAttDef ann_ name_ _typIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ TypeAttDef ann_ name_ _typIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _typOcat =+ _lhsIcat+ -- copy rule (down)+ _typOidenv =+ _lhsIidenv+ -- copy rule (down)+ _typOlib =+ _lhsIlib+ ( _typIannotatedTree,_typIfixedUpIdentifiersTree,_typInamedType,_typIoriginalTree) =+ typ_ _typOcat _typOidenv _typOlib + in ( _lhsOannotatedTree,_lhsOattrName,_lhsOfixedUpIdentifiersTree,_lhsOnamedType,_lhsOoriginalTree)))+-- TypeAttributeDefList ----------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + attrs : [(String, Maybe Type)]+ fixedUpIdentifiersTree : SELF + originalTree : SELF + alternatives:+ alternative Cons:+ child hd : TypeAttributeDef + child tl : TypeAttributeDefList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Nil:+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type TypeAttributeDefList = [TypeAttributeDef ]+-- cata+sem_TypeAttributeDefList :: TypeAttributeDefList ->+ T_TypeAttributeDefList +sem_TypeAttributeDefList list =+ (Prelude.foldr sem_TypeAttributeDefList_Cons sem_TypeAttributeDefList_Nil (Prelude.map sem_TypeAttributeDef list) )+-- semantic domain+type T_TypeAttributeDefList = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( TypeAttributeDefList ,([(String, Maybe Type)]),TypeAttributeDefList ,TypeAttributeDefList )+data Inh_TypeAttributeDefList = Inh_TypeAttributeDefList {cat_Inh_TypeAttributeDefList :: Catalog,idenv_Inh_TypeAttributeDefList :: IDEnv,lib_Inh_TypeAttributeDefList :: LocalBindings}+data Syn_TypeAttributeDefList = Syn_TypeAttributeDefList {annotatedTree_Syn_TypeAttributeDefList :: TypeAttributeDefList ,attrs_Syn_TypeAttributeDefList :: ([(String, Maybe Type)]),fixedUpIdentifiersTree_Syn_TypeAttributeDefList :: TypeAttributeDefList ,originalTree_Syn_TypeAttributeDefList :: TypeAttributeDefList }+wrap_TypeAttributeDefList :: T_TypeAttributeDefList ->+ Inh_TypeAttributeDefList ->+ Syn_TypeAttributeDefList +wrap_TypeAttributeDefList sem (Inh_TypeAttributeDefList _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOattrs,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_TypeAttributeDefList _lhsOannotatedTree _lhsOattrs _lhsOfixedUpIdentifiersTree _lhsOoriginalTree ))+sem_TypeAttributeDefList_Cons :: T_TypeAttributeDef ->+ T_TypeAttributeDefList ->+ T_TypeAttributeDefList +sem_TypeAttributeDefList_Cons hd_ tl_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOattrs :: ([(String, Maybe Type)])+ _lhsOannotatedTree :: TypeAttributeDefList + _lhsOfixedUpIdentifiersTree :: TypeAttributeDefList + _lhsOoriginalTree :: TypeAttributeDefList + _hdOcat :: Catalog+ _hdOidenv :: IDEnv+ _hdOlib :: LocalBindings+ _tlOcat :: Catalog+ _tlOidenv :: IDEnv+ _tlOlib :: LocalBindings+ _hdIannotatedTree :: TypeAttributeDef + _hdIattrName :: String+ _hdIfixedUpIdentifiersTree :: TypeAttributeDef + _hdInamedType :: (Maybe Type)+ _hdIoriginalTree :: TypeAttributeDef + _tlIannotatedTree :: TypeAttributeDefList + _tlIattrs :: ([(String, Maybe Type)])+ _tlIfixedUpIdentifiersTree :: TypeAttributeDefList + _tlIoriginalTree :: TypeAttributeDefList + -- "./TypeChecking/Ddl/MiscCreates.ag"(line 43, column 12)+ _lhsOattrs =+ (_hdIattrName, _hdInamedType) : _tlIattrs+ -- self rule+ _annotatedTree =+ (:) _hdIannotatedTree _tlIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ (:) _hdIfixedUpIdentifiersTree _tlIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ (:) _hdIoriginalTree _tlIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _hdOcat =+ _lhsIcat+ -- copy rule (down)+ _hdOidenv =+ _lhsIidenv+ -- copy rule (down)+ _hdOlib =+ _lhsIlib+ -- copy rule (down)+ _tlOcat =+ _lhsIcat+ -- copy rule (down)+ _tlOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tlOlib =+ _lhsIlib+ ( _hdIannotatedTree,_hdIattrName,_hdIfixedUpIdentifiersTree,_hdInamedType,_hdIoriginalTree) =+ hd_ _hdOcat _hdOidenv _hdOlib + ( _tlIannotatedTree,_tlIattrs,_tlIfixedUpIdentifiersTree,_tlIoriginalTree) =+ tl_ _tlOcat _tlOidenv _tlOlib + in ( _lhsOannotatedTree,_lhsOattrs,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_TypeAttributeDefList_Nil :: T_TypeAttributeDefList +sem_TypeAttributeDefList_Nil =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOattrs :: ([(String, Maybe Type)])+ _lhsOannotatedTree :: TypeAttributeDefList + _lhsOfixedUpIdentifiersTree :: TypeAttributeDefList + _lhsOoriginalTree :: TypeAttributeDefList + -- "./TypeChecking/Ddl/MiscCreates.ag"(line 44, column 11)+ _lhsOattrs =+ []+ -- self rule+ _annotatedTree =+ []+ -- self rule+ _fixedUpIdentifiersTree =+ []+ -- self rule+ _originalTree =+ []+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOattrs,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+-- TypeName ----------------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + namedType : Maybe Type+ originalTree : SELF + alternatives:+ alternative ArrayTypeName:+ child ann : {Annotation}+ child typ : TypeName + visit 0:+ local tpe : _+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Prec2TypeName:+ child ann : {Annotation}+ child tn : {String}+ child prec : {Integer}+ child prec1 : {Integer}+ visit 0:+ local tpe : _+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative PrecTypeName:+ child ann : {Annotation}+ child tn : {String}+ child prec : {Integer}+ visit 0:+ local tpe : _+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative SetOfTypeName:+ child ann : {Annotation}+ child typ : TypeName + visit 0:+ local tpe : _+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative SimpleTypeName:+ child ann : {Annotation}+ child tn : {String}+ visit 0:+ local tpe : _+ local backTree : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+data TypeName = ArrayTypeName (Annotation) (TypeName ) + | Prec2TypeName (Annotation) (String) (Integer) (Integer) + | PrecTypeName (Annotation) (String) (Integer) + | SetOfTypeName (Annotation) (TypeName ) + | SimpleTypeName (Annotation) (String) + deriving ( Data,Eq,Show,Typeable)+-- cata+sem_TypeName :: TypeName ->+ T_TypeName +sem_TypeName (ArrayTypeName _ann _typ ) =+ (sem_TypeName_ArrayTypeName _ann (sem_TypeName _typ ) )+sem_TypeName (Prec2TypeName _ann _tn _prec _prec1 ) =+ (sem_TypeName_Prec2TypeName _ann _tn _prec _prec1 )+sem_TypeName (PrecTypeName _ann _tn _prec ) =+ (sem_TypeName_PrecTypeName _ann _tn _prec )+sem_TypeName (SetOfTypeName _ann _typ ) =+ (sem_TypeName_SetOfTypeName _ann (sem_TypeName _typ ) )+sem_TypeName (SimpleTypeName _ann _tn ) =+ (sem_TypeName_SimpleTypeName _ann _tn )+-- semantic domain+type T_TypeName = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( TypeName ,TypeName ,(Maybe Type),TypeName )+data Inh_TypeName = Inh_TypeName {cat_Inh_TypeName :: Catalog,idenv_Inh_TypeName :: IDEnv,lib_Inh_TypeName :: LocalBindings}+data Syn_TypeName = Syn_TypeName {annotatedTree_Syn_TypeName :: TypeName ,fixedUpIdentifiersTree_Syn_TypeName :: TypeName ,namedType_Syn_TypeName :: (Maybe Type),originalTree_Syn_TypeName :: TypeName }+wrap_TypeName :: T_TypeName ->+ Inh_TypeName ->+ Syn_TypeName +wrap_TypeName sem (Inh_TypeName _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOnamedType,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_TypeName _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOnamedType _lhsOoriginalTree ))+sem_TypeName_ArrayTypeName :: Annotation ->+ T_TypeName ->+ T_TypeName +sem_TypeName_ArrayTypeName ann_ typ_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOnamedType :: (Maybe Type)+ _lhsOannotatedTree :: TypeName + _lhsOfixedUpIdentifiersTree :: TypeName + _lhsOoriginalTree :: TypeName + _typOcat :: Catalog+ _typOidenv :: IDEnv+ _typOlib :: LocalBindings+ _typIannotatedTree :: TypeName + _typIfixedUpIdentifiersTree :: TypeName + _typInamedType :: (Maybe Type)+ _typIoriginalTree :: TypeName + -- "./TypeChecking/Misc.ag"(line 19, column 10)+ _lhsOnamedType =+ etmt _tpe+ -- "./TypeChecking/Misc.ag"(line 20, column 10)+ _lhsOannotatedTree =+ addTypeErrors (tes _tpe ) _backTree+ -- "./TypeChecking/Misc.ag"(line 27, column 9)+ _tpe =+ lmt _typInamedType >>= Right . ArrayType+ -- "./TypeChecking/Misc.ag"(line 28, column 9)+ _backTree =+ ArrayTypeName ann_ _typIannotatedTree+ -- self rule+ _annotatedTree =+ ArrayTypeName ann_ _typIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ ArrayTypeName ann_ _typIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ ArrayTypeName ann_ _typIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _typOcat =+ _lhsIcat+ -- copy rule (down)+ _typOidenv =+ _lhsIidenv+ -- copy rule (down)+ _typOlib =+ _lhsIlib+ ( _typIannotatedTree,_typIfixedUpIdentifiersTree,_typInamedType,_typIoriginalTree) =+ typ_ _typOcat _typOidenv _typOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOnamedType,_lhsOoriginalTree)))+sem_TypeName_Prec2TypeName :: Annotation ->+ String ->+ Integer ->+ Integer ->+ T_TypeName +sem_TypeName_Prec2TypeName ann_ tn_ prec_ prec1_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOnamedType :: (Maybe Type)+ _lhsOannotatedTree :: TypeName + _lhsOfixedUpIdentifiersTree :: TypeName + _lhsOoriginalTree :: TypeName + -- "./TypeChecking/Misc.ag"(line 19, column 10)+ _lhsOnamedType =+ etmt _tpe+ -- "./TypeChecking/Misc.ag"(line 20, column 10)+ _lhsOannotatedTree =+ addTypeErrors (tes _tpe ) _backTree+ -- "./TypeChecking/Misc.ag"(line 36, column 9)+ _tpe =+ catLookupType _lhsIcat $ canonicalizeTypeName tn_+ -- "./TypeChecking/Misc.ag"(line 37, column 9)+ _backTree =+ Prec2TypeName ann_ tn_ prec_ prec1_+ -- self rule+ _annotatedTree =+ Prec2TypeName ann_ tn_ prec_ prec1_+ -- self rule+ _fixedUpIdentifiersTree =+ Prec2TypeName ann_ tn_ prec_ prec1_+ -- self rule+ _originalTree =+ Prec2TypeName ann_ tn_ prec_ prec1_+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOnamedType,_lhsOoriginalTree)))+sem_TypeName_PrecTypeName :: Annotation ->+ String ->+ Integer ->+ T_TypeName +sem_TypeName_PrecTypeName ann_ tn_ prec_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOnamedType :: (Maybe Type)+ _lhsOannotatedTree :: TypeName + _lhsOfixedUpIdentifiersTree :: TypeName + _lhsOoriginalTree :: TypeName + -- "./TypeChecking/Misc.ag"(line 19, column 10)+ _lhsOnamedType =+ etmt _tpe+ -- "./TypeChecking/Misc.ag"(line 20, column 10)+ _lhsOannotatedTree =+ addTypeErrors (tes _tpe ) _backTree+ -- "./TypeChecking/Misc.ag"(line 33, column 9)+ _tpe =+ catLookupType _lhsIcat $ canonicalizeTypeName tn_+ -- "./TypeChecking/Misc.ag"(line 34, column 9)+ _backTree =+ PrecTypeName ann_ tn_ prec_+ -- self rule+ _annotatedTree =+ PrecTypeName ann_ tn_ prec_+ -- self rule+ _fixedUpIdentifiersTree =+ PrecTypeName ann_ tn_ prec_+ -- self rule+ _originalTree =+ PrecTypeName ann_ tn_ prec_+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOnamedType,_lhsOoriginalTree)))+sem_TypeName_SetOfTypeName :: Annotation ->+ T_TypeName ->+ T_TypeName +sem_TypeName_SetOfTypeName ann_ typ_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOnamedType :: (Maybe Type)+ _lhsOannotatedTree :: TypeName + _lhsOfixedUpIdentifiersTree :: TypeName + _lhsOoriginalTree :: TypeName + _typOcat :: Catalog+ _typOidenv :: IDEnv+ _typOlib :: LocalBindings+ _typIannotatedTree :: TypeName + _typIfixedUpIdentifiersTree :: TypeName + _typInamedType :: (Maybe Type)+ _typIoriginalTree :: TypeName + -- "./TypeChecking/Misc.ag"(line 19, column 10)+ _lhsOnamedType =+ etmt _tpe+ -- "./TypeChecking/Misc.ag"(line 20, column 10)+ _lhsOannotatedTree =+ addTypeErrors (tes _tpe ) _backTree+ -- "./TypeChecking/Misc.ag"(line 30, column 9)+ _tpe =+ lmt _typInamedType >>= Right . SetOfType+ -- "./TypeChecking/Misc.ag"(line 31, column 9)+ _backTree =+ SetOfTypeName ann_ _typIannotatedTree+ -- self rule+ _annotatedTree =+ SetOfTypeName ann_ _typIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ SetOfTypeName ann_ _typIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ SetOfTypeName ann_ _typIoriginalTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _typOcat =+ _lhsIcat+ -- copy rule (down)+ _typOidenv =+ _lhsIidenv+ -- copy rule (down)+ _typOlib =+ _lhsIlib+ ( _typIannotatedTree,_typIfixedUpIdentifiersTree,_typInamedType,_typIoriginalTree) =+ typ_ _typOcat _typOidenv _typOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOnamedType,_lhsOoriginalTree)))+sem_TypeName_SimpleTypeName :: Annotation ->+ String ->+ T_TypeName +sem_TypeName_SimpleTypeName ann_ tn_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOnamedType :: (Maybe Type)+ _lhsOannotatedTree :: TypeName + _lhsOfixedUpIdentifiersTree :: TypeName + _lhsOoriginalTree :: TypeName + -- "./TypeChecking/Misc.ag"(line 19, column 10)+ _lhsOnamedType =+ etmt _tpe+ -- "./TypeChecking/Misc.ag"(line 20, column 10)+ _lhsOannotatedTree =+ addTypeErrors (tes _tpe ) _backTree+ -- "./TypeChecking/Misc.ag"(line 24, column 9)+ _tpe =+ catLookupType _lhsIcat $ canonicalizeTypeName tn_+ -- "./TypeChecking/Misc.ag"(line 25, column 9)+ _backTree =+ SimpleTypeName ann_ tn_+ -- self rule+ _annotatedTree =+ SimpleTypeName ann_ tn_+ -- self rule+ _fixedUpIdentifiersTree =+ SimpleTypeName ann_ tn_+ -- self rule+ _originalTree =+ SimpleTypeName ann_ tn_+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOnamedType,_lhsOoriginalTree)))+-- TypeNameList ------------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + namedTypes : [Maybe Type]+ originalTree : SELF + alternatives:+ alternative Cons:+ child hd : TypeName + child tl : TypeNameList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Nil:+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type TypeNameList = [TypeName ]+-- cata+sem_TypeNameList :: TypeNameList ->+ T_TypeNameList +sem_TypeNameList list =+ (Prelude.foldr sem_TypeNameList_Cons sem_TypeNameList_Nil (Prelude.map sem_TypeName list) )+-- semantic domain+type T_TypeNameList = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( TypeNameList ,TypeNameList ,([Maybe Type]),TypeNameList )+data Inh_TypeNameList = Inh_TypeNameList {cat_Inh_TypeNameList :: Catalog,idenv_Inh_TypeNameList :: IDEnv,lib_Inh_TypeNameList :: LocalBindings}+data Syn_TypeNameList = Syn_TypeNameList {annotatedTree_Syn_TypeNameList :: TypeNameList ,fixedUpIdentifiersTree_Syn_TypeNameList :: TypeNameList ,namedTypes_Syn_TypeNameList :: ([Maybe Type]),originalTree_Syn_TypeNameList :: TypeNameList }+wrap_TypeNameList :: T_TypeNameList ->+ Inh_TypeNameList ->+ Syn_TypeNameList +wrap_TypeNameList sem (Inh_TypeNameList _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOnamedTypes,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_TypeNameList _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOnamedTypes _lhsOoriginalTree ))+sem_TypeNameList_Cons :: T_TypeName ->+ T_TypeNameList ->+ T_TypeNameList +sem_TypeNameList_Cons hd_ tl_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOnamedTypes :: ([Maybe Type])+ _lhsOannotatedTree :: TypeNameList + _lhsOfixedUpIdentifiersTree :: TypeNameList + _lhsOoriginalTree :: TypeNameList + _hdOcat :: Catalog+ _hdOidenv :: IDEnv+ _hdOlib :: LocalBindings+ _tlOcat :: Catalog+ _tlOidenv :: IDEnv+ _tlOlib :: LocalBindings+ _hdIannotatedTree :: TypeName + _hdIfixedUpIdentifiersTree :: TypeName + _hdInamedType :: (Maybe Type)+ _hdIoriginalTree :: TypeName + _tlIannotatedTree :: TypeNameList + _tlIfixedUpIdentifiersTree :: TypeNameList + _tlInamedTypes :: ([Maybe Type])+ _tlIoriginalTree :: TypeNameList + -- "./TypeChecking/Ddl/Drops.ag"(line 37, column 12)+ _lhsOnamedTypes =+ _hdInamedType : _tlInamedTypes+ -- self rule+ _annotatedTree =+ (:) _hdIannotatedTree _tlIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ (:) _hdIfixedUpIdentifiersTree _tlIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ (:) _hdIoriginalTree _tlIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _hdOcat =+ _lhsIcat+ -- copy rule (down)+ _hdOidenv =+ _lhsIidenv+ -- copy rule (down)+ _hdOlib =+ _lhsIlib+ -- copy rule (down)+ _tlOcat =+ _lhsIcat+ -- copy rule (down)+ _tlOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tlOlib =+ _lhsIlib+ ( _hdIannotatedTree,_hdIfixedUpIdentifiersTree,_hdInamedType,_hdIoriginalTree) =+ hd_ _hdOcat _hdOidenv _hdOlib + ( _tlIannotatedTree,_tlIfixedUpIdentifiersTree,_tlInamedTypes,_tlIoriginalTree) =+ tl_ _tlOcat _tlOidenv _tlOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOnamedTypes,_lhsOoriginalTree)))+sem_TypeNameList_Nil :: T_TypeNameList +sem_TypeNameList_Nil =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOnamedTypes :: ([Maybe Type])+ _lhsOannotatedTree :: TypeNameList + _lhsOfixedUpIdentifiersTree :: TypeNameList + _lhsOoriginalTree :: TypeNameList + -- "./TypeChecking/Ddl/Drops.ag"(line 38, column 11)+ _lhsOnamedTypes =+ []+ -- self rule+ _annotatedTree =+ []+ -- self rule+ _fixedUpIdentifiersTree =+ []+ -- self rule+ _originalTree =+ []+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOnamedTypes,_lhsOoriginalTree)))+-- VarDef ------------------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + def : (String,Maybe Type)+ fixedUpIdentifiersTree : SELF + originalTree : SELF + alternatives:+ alternative ParamAlias:+ child ann : {Annotation}+ child name : {String}+ child i : {Integer}+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative VarAlias:+ child ann : {Annotation}+ child name : {String}+ child aliased : {String}+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative VarDef:+ child ann : {Annotation}+ child name : {String}+ child typ : TypeName + child value : {Maybe ScalarExpr}+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+data VarDef = ParamAlias (Annotation) (String) (Integer) + | VarAlias (Annotation) (String) (String) + | VarDef (Annotation) (String) (TypeName ) ((Maybe ScalarExpr)) + deriving ( Data,Eq,Show,Typeable)+-- cata+sem_VarDef :: VarDef ->+ T_VarDef +sem_VarDef (ParamAlias _ann _name _i ) =+ (sem_VarDef_ParamAlias _ann _name _i )+sem_VarDef (VarAlias _ann _name _aliased ) =+ (sem_VarDef_VarAlias _ann _name _aliased )+sem_VarDef (VarDef _ann _name _typ _value ) =+ (sem_VarDef_VarDef _ann _name (sem_TypeName _typ ) _value )+-- semantic domain+type T_VarDef = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( VarDef ,((String,Maybe Type)),VarDef ,VarDef )+data Inh_VarDef = Inh_VarDef {cat_Inh_VarDef :: Catalog,idenv_Inh_VarDef :: IDEnv,lib_Inh_VarDef :: LocalBindings}+data Syn_VarDef = Syn_VarDef {annotatedTree_Syn_VarDef :: VarDef ,def_Syn_VarDef :: ((String,Maybe Type)),fixedUpIdentifiersTree_Syn_VarDef :: VarDef ,originalTree_Syn_VarDef :: VarDef }+wrap_VarDef :: T_VarDef ->+ Inh_VarDef ->+ Syn_VarDef +wrap_VarDef sem (Inh_VarDef _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOdef,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_VarDef _lhsOannotatedTree _lhsOdef _lhsOfixedUpIdentifiersTree _lhsOoriginalTree ))+sem_VarDef_ParamAlias :: Annotation ->+ String ->+ Integer ->+ T_VarDef +sem_VarDef_ParamAlias ann_ name_ i_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOdef :: ((String,Maybe Type))+ _lhsOannotatedTree :: VarDef + _lhsOfixedUpIdentifiersTree :: VarDef + _lhsOoriginalTree :: VarDef + -- "./TypeChecking/Plpgsql/Block.ag"(line 14, column 18)+ _lhsOdef =+ (name_, Nothing)+ -- self rule+ _annotatedTree =+ ParamAlias ann_ name_ i_+ -- self rule+ _fixedUpIdentifiersTree =+ ParamAlias ann_ name_ i_+ -- self rule+ _originalTree =+ ParamAlias ann_ name_ i_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOdef,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_VarDef_VarAlias :: Annotation ->+ String ->+ String ->+ T_VarDef +sem_VarDef_VarAlias ann_ name_ aliased_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOdef :: ((String,Maybe Type))+ _lhsOannotatedTree :: VarDef + _lhsOfixedUpIdentifiersTree :: VarDef + _lhsOoriginalTree :: VarDef + -- "./TypeChecking/Plpgsql/Block.ag"(line 13, column 16)+ _lhsOdef =+ (name_, Nothing)+ -- self rule+ _annotatedTree =+ VarAlias ann_ name_ aliased_+ -- self rule+ _fixedUpIdentifiersTree =+ VarAlias ann_ name_ aliased_+ -- self rule+ _originalTree =+ VarAlias ann_ name_ aliased_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOdef,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_VarDef_VarDef :: Annotation ->+ String ->+ T_TypeName ->+ (Maybe ScalarExpr) ->+ T_VarDef +sem_VarDef_VarDef ann_ name_ typ_ value_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOdef :: ((String,Maybe Type))+ _lhsOannotatedTree :: VarDef + _lhsOfixedUpIdentifiersTree :: VarDef + _lhsOoriginalTree :: VarDef + _typOcat :: Catalog+ _typOidenv :: IDEnv+ _typOlib :: LocalBindings+ _typIannotatedTree :: TypeName + _typIfixedUpIdentifiersTree :: TypeName + _typInamedType :: (Maybe Type)+ _typIoriginalTree :: TypeName + -- "./TypeChecking/Plpgsql/Block.ag"(line 10, column 14)+ _lhsOdef =+ (name_, if _typInamedType == Just (Pseudo Record)+ then Just (PgRecord Nothing)+ else _typInamedType)+ -- self rule+ _annotatedTree =+ VarDef ann_ name_ _typIannotatedTree value_+ -- self rule+ _fixedUpIdentifiersTree =+ VarDef ann_ name_ _typIfixedUpIdentifiersTree value_+ -- self rule+ _originalTree =+ VarDef ann_ name_ _typIoriginalTree value_+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _typOcat =+ _lhsIcat+ -- copy rule (down)+ _typOidenv =+ _lhsIidenv+ -- copy rule (down)+ _typOlib =+ _lhsIlib+ ( _typIannotatedTree,_typIfixedUpIdentifiersTree,_typInamedType,_typIoriginalTree) =+ typ_ _typOcat _typOidenv _typOlib + in ( _lhsOannotatedTree,_lhsOdef,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+-- VarDefList --------------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + defs : [(String,Maybe Type)]+ fixedUpIdentifiersTree : SELF + originalTree : SELF + alternatives:+ alternative Cons:+ child hd : VarDef + child tl : VarDefList + visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Nil:+ visit 0:+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type VarDefList = [VarDef ]+-- cata+sem_VarDefList :: VarDefList ->+ T_VarDefList +sem_VarDefList list =+ (Prelude.foldr sem_VarDefList_Cons sem_VarDefList_Nil (Prelude.map sem_VarDef list) )+-- semantic domain+type T_VarDefList = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( VarDefList ,([(String,Maybe Type)]),VarDefList ,VarDefList )+data Inh_VarDefList = Inh_VarDefList {cat_Inh_VarDefList :: Catalog,idenv_Inh_VarDefList :: IDEnv,lib_Inh_VarDefList :: LocalBindings}+data Syn_VarDefList = Syn_VarDefList {annotatedTree_Syn_VarDefList :: VarDefList ,defs_Syn_VarDefList :: ([(String,Maybe Type)]),fixedUpIdentifiersTree_Syn_VarDefList :: VarDefList ,originalTree_Syn_VarDefList :: VarDefList }+wrap_VarDefList :: T_VarDefList ->+ Inh_VarDefList ->+ Syn_VarDefList +wrap_VarDefList sem (Inh_VarDefList _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOdefs,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_VarDefList _lhsOannotatedTree _lhsOdefs _lhsOfixedUpIdentifiersTree _lhsOoriginalTree ))+sem_VarDefList_Cons :: T_VarDef ->+ T_VarDefList ->+ T_VarDefList +sem_VarDefList_Cons hd_ tl_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOdefs :: ([(String,Maybe Type)])+ _lhsOannotatedTree :: VarDefList + _lhsOfixedUpIdentifiersTree :: VarDefList + _lhsOoriginalTree :: VarDefList + _hdOcat :: Catalog+ _hdOidenv :: IDEnv+ _hdOlib :: LocalBindings+ _tlOcat :: Catalog+ _tlOidenv :: IDEnv+ _tlOlib :: LocalBindings+ _hdIannotatedTree :: VarDef + _hdIdef :: ((String,Maybe Type))+ _hdIfixedUpIdentifiersTree :: VarDef + _hdIoriginalTree :: VarDef + _tlIannotatedTree :: VarDefList + _tlIdefs :: ([(String,Maybe Type)])+ _tlIfixedUpIdentifiersTree :: VarDefList + _tlIoriginalTree :: VarDefList + -- "./TypeChecking/Plpgsql/Block.ag"(line 17, column 12)+ _lhsOdefs =+ _hdIdef : _tlIdefs+ -- self rule+ _annotatedTree =+ (:) _hdIannotatedTree _tlIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ (:) _hdIfixedUpIdentifiersTree _tlIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ (:) _hdIoriginalTree _tlIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _hdOcat =+ _lhsIcat+ -- copy rule (down)+ _hdOidenv =+ _lhsIidenv+ -- copy rule (down)+ _hdOlib =+ _lhsIlib+ -- copy rule (down)+ _tlOcat =+ _lhsIcat+ -- copy rule (down)+ _tlOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tlOlib =+ _lhsIlib+ ( _hdIannotatedTree,_hdIdef,_hdIfixedUpIdentifiersTree,_hdIoriginalTree) =+ hd_ _hdOcat _hdOidenv _hdOlib + ( _tlIannotatedTree,_tlIdefs,_tlIfixedUpIdentifiersTree,_tlIoriginalTree) =+ tl_ _tlOcat _tlOidenv _tlOlib + in ( _lhsOannotatedTree,_lhsOdefs,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+sem_VarDefList_Nil :: T_VarDefList +sem_VarDefList_Nil =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOdefs :: ([(String,Maybe Type)])+ _lhsOannotatedTree :: VarDefList + _lhsOfixedUpIdentifiersTree :: VarDefList + _lhsOoriginalTree :: VarDefList + -- "./TypeChecking/Plpgsql/Block.ag"(line 18, column 11)+ _lhsOdefs =+ []+ -- self rule+ _annotatedTree =+ []+ -- self rule+ _fixedUpIdentifiersTree =+ []+ -- self rule+ _originalTree =+ []+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOdefs,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+-- WithQuery ---------------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + catUpdates : [CatalogUpdate]+ fixedUpIdentifiersTree : SELF + originalTree : SELF + alternatives:+ alternative WithQuery:+ child ann : {Annotation}+ child name : {String}+ child colAliases : {Maybe [String]}+ child ex : QueryExpr + visit 0:+ local tpe : _+ local backTree : _+ local attrs : _+ local catUpdates : _+ local statementType : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+data WithQuery = WithQuery (Annotation) (String) ((Maybe [String])) (QueryExpr ) + deriving ( Data,Eq,Show,Typeable)+-- cata+sem_WithQuery :: WithQuery ->+ T_WithQuery +sem_WithQuery (WithQuery _ann _name _colAliases _ex ) =+ (sem_WithQuery_WithQuery _ann _name _colAliases (sem_QueryExpr _ex ) )+-- semantic domain+type T_WithQuery = Catalog ->+ IDEnv ->+ LocalBindings ->+ ( WithQuery ,([CatalogUpdate]),WithQuery ,WithQuery )+data Inh_WithQuery = Inh_WithQuery {cat_Inh_WithQuery :: Catalog,idenv_Inh_WithQuery :: IDEnv,lib_Inh_WithQuery :: LocalBindings}+data Syn_WithQuery = Syn_WithQuery {annotatedTree_Syn_WithQuery :: WithQuery ,catUpdates_Syn_WithQuery :: ([CatalogUpdate]),fixedUpIdentifiersTree_Syn_WithQuery :: WithQuery ,originalTree_Syn_WithQuery :: WithQuery }+wrap_WithQuery :: T_WithQuery ->+ Inh_WithQuery ->+ Syn_WithQuery +wrap_WithQuery sem (Inh_WithQuery _lhsIcat _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree) = sem _lhsIcat _lhsIidenv _lhsIlib + in (Syn_WithQuery _lhsOannotatedTree _lhsOcatUpdates _lhsOfixedUpIdentifiersTree _lhsOoriginalTree ))+sem_WithQuery_WithQuery :: Annotation ->+ String ->+ (Maybe [String]) ->+ T_QueryExpr ->+ T_WithQuery +sem_WithQuery_WithQuery ann_ name_ colAliases_ ex_ =+ (\ _lhsIcat+ _lhsIidenv+ _lhsIlib ->+ (let _exOcsql :: LocalBindings+ _exOexpectedTypes :: ([Maybe Type])+ _lhsOannotatedTree :: WithQuery + _lhsOfixedUpIdentifiersTree :: WithQuery + _lhsOoriginalTree :: WithQuery + _lhsOcatUpdates :: ([CatalogUpdate])+ _exOcat :: Catalog+ _exOidenv :: IDEnv+ _exOlib :: LocalBindings+ _exIannotatedTree :: QueryExpr + _exIcidenv :: IDEnv+ _exIfixedUpIdentifiersTree :: QueryExpr + _exIlibUpdates :: ([LocalBindingsUpdate])+ _exIoriginalTree :: QueryExpr + _exIuType :: (Maybe [(String,Type)])+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 131, column 17)+ _exOcsql =+ emptyBindings+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 272, column 9)+ _tpe =+ Right $ Pseudo Void+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 273, column 9)+ _backTree =+ WithQuery ann_ name_ colAliases_ _exIannotatedTree+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 274, column 9)+ _attrs =+ maybe [] id $ _exIuType+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 275, column 9)+ _catUpdates =+ [CatCreateView name_ _attrs ]+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 276, column 9)+ _statementType =+ Nothing+ -- "./TypeChecking/ParameterizedStatements.ag"(line 182, column 17)+ _exOexpectedTypes =+ []+ -- self rule+ _annotatedTree =+ WithQuery ann_ name_ colAliases_ _exIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ WithQuery ann_ name_ colAliases_ _exIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ WithQuery ann_ name_ colAliases_ _exIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (from local)+ _lhsOcatUpdates =+ _catUpdates+ -- copy rule (down)+ _exOcat =+ _lhsIcat+ -- copy rule (down)+ _exOidenv =+ _lhsIidenv+ -- copy rule (down)+ _exOlib =+ _lhsIlib+ ( _exIannotatedTree,_exIcidenv,_exIfixedUpIdentifiersTree,_exIlibUpdates,_exIoriginalTree,_exIuType) =+ ex_ _exOcat _exOcsql _exOexpectedTypes _exOidenv _exOlib + in ( _lhsOannotatedTree,_lhsOcatUpdates,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree)))+-- WithQueryList -----------------------------------------------+{-+ visit 0:+ inherited attributes:+ cat : Catalog+ catUpdates : [CatalogUpdate]+ idenv : IDEnv+ lib : LocalBindings+ synthesized attributes:+ annotatedTree : SELF + fixedUpIdentifiersTree : SELF + originalTree : SELF + producedCat : Catalog+ alternatives:+ alternative Cons:+ child hd : WithQuery + child tl : WithQueryList + visit 0:+ local newCat : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+ alternative Nil:+ visit 0:+ local newCat : _+ local annotatedTree : _+ local fixedUpIdentifiersTree : _+ local originalTree : _+-}+type WithQueryList = [WithQuery ]+-- cata+sem_WithQueryList :: WithQueryList ->+ T_WithQueryList +sem_WithQueryList list =+ (Prelude.foldr sem_WithQueryList_Cons sem_WithQueryList_Nil (Prelude.map sem_WithQuery list) )+-- semantic domain+type T_WithQueryList = Catalog ->+ ([CatalogUpdate]) ->+ IDEnv ->+ LocalBindings ->+ ( WithQueryList ,WithQueryList ,WithQueryList ,Catalog)+data Inh_WithQueryList = Inh_WithQueryList {cat_Inh_WithQueryList :: Catalog,catUpdates_Inh_WithQueryList :: ([CatalogUpdate]),idenv_Inh_WithQueryList :: IDEnv,lib_Inh_WithQueryList :: LocalBindings}+data Syn_WithQueryList = Syn_WithQueryList {annotatedTree_Syn_WithQueryList :: WithQueryList ,fixedUpIdentifiersTree_Syn_WithQueryList :: WithQueryList ,originalTree_Syn_WithQueryList :: WithQueryList ,producedCat_Syn_WithQueryList :: Catalog}+wrap_WithQueryList :: T_WithQueryList ->+ Inh_WithQueryList ->+ Syn_WithQueryList +wrap_WithQueryList sem (Inh_WithQueryList _lhsIcat _lhsIcatUpdates _lhsIidenv _lhsIlib ) =+ (let ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOproducedCat) = sem _lhsIcat _lhsIcatUpdates _lhsIidenv _lhsIlib + in (Syn_WithQueryList _lhsOannotatedTree _lhsOfixedUpIdentifiersTree _lhsOoriginalTree _lhsOproducedCat ))+sem_WithQueryList_Cons :: T_WithQuery ->+ T_WithQueryList ->+ T_WithQueryList +sem_WithQueryList_Cons hd_ tl_ =+ (\ _lhsIcat+ _lhsIcatUpdates+ _lhsIidenv+ _lhsIlib ->+ (let _hdOcat :: Catalog+ _tlOcat :: Catalog+ _lhsOproducedCat :: Catalog+ _tlOcatUpdates :: ([CatalogUpdate])+ _lhsOannotatedTree :: WithQueryList + _lhsOfixedUpIdentifiersTree :: WithQueryList + _lhsOoriginalTree :: WithQueryList + _hdOidenv :: IDEnv+ _hdOlib :: LocalBindings+ _tlOidenv :: IDEnv+ _tlOlib :: LocalBindings+ _hdIannotatedTree :: WithQuery + _hdIcatUpdates :: ([CatalogUpdate])+ _hdIfixedUpIdentifiersTree :: WithQuery + _hdIoriginalTree :: WithQuery + _tlIannotatedTree :: WithQueryList + _tlIfixedUpIdentifiersTree :: WithQueryList + _tlIoriginalTree :: WithQueryList + _tlIproducedCat :: Catalog+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 256, column 9)+ _newCat =+ fromRight _lhsIcat $ updateCatalog _lhsIcat _lhsIcatUpdates+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 258, column 9)+ _hdOcat =+ _newCat+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 259, column 9)+ _tlOcat =+ _newCat+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 263, column 9)+ _lhsOproducedCat =+ _tlIproducedCat+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 266, column 9)+ _tlOcatUpdates =+ _hdIcatUpdates+ -- self rule+ _annotatedTree =+ (:) _hdIannotatedTree _tlIannotatedTree+ -- self rule+ _fixedUpIdentifiersTree =+ (:) _hdIfixedUpIdentifiersTree _tlIfixedUpIdentifiersTree+ -- self rule+ _originalTree =+ (:) _hdIoriginalTree _tlIoriginalTree+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ -- copy rule (down)+ _hdOidenv =+ _lhsIidenv+ -- copy rule (down)+ _hdOlib =+ _lhsIlib+ -- copy rule (down)+ _tlOidenv =+ _lhsIidenv+ -- copy rule (down)+ _tlOlib =+ _lhsIlib+ ( _hdIannotatedTree,_hdIcatUpdates,_hdIfixedUpIdentifiersTree,_hdIoriginalTree) =+ hd_ _hdOcat _hdOidenv _hdOlib + ( _tlIannotatedTree,_tlIfixedUpIdentifiersTree,_tlIoriginalTree,_tlIproducedCat) =+ tl_ _tlOcat _tlOcatUpdates _tlOidenv _tlOlib + in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOproducedCat)))+sem_WithQueryList_Nil :: T_WithQueryList +sem_WithQueryList_Nil =+ (\ _lhsIcat+ _lhsIcatUpdates+ _lhsIidenv+ _lhsIlib ->+ (let _lhsOproducedCat :: Catalog+ _lhsOannotatedTree :: WithQueryList + _lhsOfixedUpIdentifiersTree :: WithQueryList + _lhsOoriginalTree :: WithQueryList + -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 256, column 9)+ _newCat =+ fromRight _lhsIcat $ updateCatalog _lhsIcat _lhsIcatUpdates+ -- "./TypeChecking/QueryExprs/QueryStatement.ag"(line 268, column 9)+ _lhsOproducedCat =+ _newCat+ -- self rule+ _annotatedTree =+ []+ -- self rule+ _fixedUpIdentifiersTree =+ []+ -- self rule+ _originalTree =+ []+ -- self rule+ _lhsOannotatedTree =+ _annotatedTree+ -- self rule+ _lhsOfixedUpIdentifiersTree =+ _fixedUpIdentifiersTree+ -- self rule+ _lhsOoriginalTree =+ _originalTree+ in ( _lhsOannotatedTree,_lhsOfixedUpIdentifiersTree,_lhsOoriginalTree,_lhsOproducedCat)))
+ src/Database/HsSqlPpp/AstInternals/Catalog/CatalogInternal.lhs view
@@ -0,0 +1,531 @@++This module contains the implementation of the Catalog data types+and functions, and provides the api for the other type checking+modules.++> {-# LANGUAGE DeriveDataTypeable #-}+>+> module Database.HsSqlPpp.AstInternals.Catalog.CatalogInternal+> (+> Catalog+> ,CastContext(..)+> ,CompositeFlavour(..)+> ,relationComposites+> ,CompositeDef+> ,FunctionPrototype+> ,DomainDefinition+> ,FunFlav(..)+> ,emptyCatalog+> ,defaultCatalog+> ,CatalogUpdate(..)+> ,ppCatUpdate+> ,updateCatalog+> ,deconstructCatalog+> -- type checker stuff+> ,catCompositeDef+> ,catCompositeAttrsPair+> ,catCompositeAttrs+> ,catCompositePublicAttrs+> ,catTypeCategory+> ,catPreferredType+> ,catCast+> ,catDomainBaseType+> ,catLookupFns+> ,catTypeExists+> ,catLookupType+> ,OperatorType(..)+> ,getOperatorType+> ,isOperatorName+> -- comparing catalogs+> ,CatalogDiff(..)+> ,compareCatalogs+> ,ppCatDiff+> ) where+>+> import Control.Monad+> import Data.List+> import Data.Data+> -- import Debug.Trace+> import Data.Char+>+> import Database.HsSqlPpp.AstInternals.TypeType+> import Database.HsSqlPpp.Utils.Utils+>+> -- | The main datatype, this holds the catalog and context+> -- information to type check against.+> data Catalog = Catalog+> {catTypeNames :: [(String, Type)]+> ,catDomainDefs :: [DomainDefinition]+> ,catCasts :: [(Type,Type,CastContext)]+> ,catTypeCategories :: [(Type,String,Bool)]+> ,catPrefixOperators :: [FunctionPrototype]+> ,catPostfixOperators :: [FunctionPrototype]+> ,catBinaryOperators :: [FunctionPrototype]+> ,catFunctions :: [FunctionPrototype]+> ,catAggregates :: [FunctionPrototype]+> ,catWindowFunctions :: [FunctionPrototype]+> ,catAttrDefs :: [CompositeDef]+> ,catUpdates :: [CatalogUpdate]}+> deriving Show+>+> -- | Represents an empty catalog. This doesn't contain things+> -- like the \'and\' operator, 'defaultCatalog' contains these.+> emptyCatalog :: Catalog+> emptyCatalog = Catalog [] [] [] [] [] [] [] [] [] [] [] []+>+> -- | Represents what you probably want to use as a starting point if+> -- you are building an catalog from scratch. It contains+> -- information on built in function like things that aren't in the+> -- PostgreSQL catalog, such as greatest, coalesce, keyword operators+> -- like \'and\', etc..+> defaultCatalog :: Catalog+> defaultCatalog =+> emptyCatalog {catTypeNames = pseudoTypes+> ,catBinaryOperators = pe : keywordOperatorTypes+> ,catFunctions = specialFunctionTypes}+> where+> pe = ("=", [Pseudo AnyElement, Pseudo AnyElement], typeBool, False)+>+> -- | Use to note what the flavour of a cast is, i.e. if/when it can+> -- be used implicitly.+> data CastContext = ImplicitCastContext+> | AssignmentCastContext+> | ExplicitCastContext+> deriving (Eq,Show,Ord,Typeable,Data)+>+> -- | Used to distinguish between standalone composite types, and+> -- automatically generated ones, generated from a table or view+> -- respectively.+> data CompositeFlavour = Composite | TableComposite | ViewComposite+> deriving (Eq,Ord,Show)+>+> relationComposites :: [CompositeFlavour]+> relationComposites = [TableComposite,ViewComposite]+>+> -- | Provides the definition of a composite type. The components are+> -- composite (or table or view) name, the flavour of the composite,+> -- the types of the composite attributes, and the types of the+> -- system columns iff the composite represents a table type (the+> -- third and fourth components are always 'CompositeType's).+> type CompositeDef = (String, CompositeFlavour, Type, Type)+>+> -- | The components are: function (or operator) name, argument+> -- types, return type and is variadic.+> type FunctionPrototype = (String, [Type], Type, Bool)+>+> -- | The components are domain type, base type (todo: add check+> -- constraint).+> type DomainDefinition = (Type,Type)+>+> data CatalogUpdate =+> -- | add a new scalar type with the name given, also creates+> -- an array type automatically+> CatCreateScalar Type String Bool+> -- | add a new domain to the catalog+> | CatCreateDomain Type Type+> -- | add a new composite type to the catalog+> | CatCreateComposite String [(String,Type)]+> -- | add a new cast to the catalog+> | CatCreateCast Type Type CastContext+> -- | add a new table to the catalog with the given public and private columns+> -- also creates the composite type to go with this table+> | CatCreateTable String [(String,Type)] [(String,Type)]+> -- | add the view to the catalog, using the column names and types supplied+> | CatCreateView String [(String,Type)]+> -- | add a new function to the catalog+> | CatCreateFunction FunFlav String [Type] Type Bool+> -- | drop a function from the catalog+> | CatDropFunction Bool String [Type]+> deriving (Eq,Ord,Typeable,Data,Show)+>+> -- | attempt to show a readable representation of a 'CatalogUpdate' value+> ppCatUpdate :: CatalogUpdate -> String+> ppCatUpdate (CatCreateScalar t c p) =+> "CatCreateScalar " ++ show t ++ "(" ++ c ++ "," ++ show p ++ ")"+> ppCatUpdate (CatCreateDomain t b) =+> "CatCreateDomain " ++ show t ++ " as " ++ show b+> ppCatUpdate (CatCreateComposite nm flds) =+> "CatCreateComposite " ++ nm ++ showFlds flds+> ppCatUpdate (CatCreateCast s t ctx) =+> "CatCreateCast " ++ show s ++ "->" ++ show t ++ " " ++ show ctx+> ppCatUpdate (CatCreateTable nm flds1 flds2) =+> "CatCreateTable " ++ nm ++ showFlds flds1 ++ showFlds flds2+> ppCatUpdate (CatCreateView nm flds) =+> "CatCreateView " ++ nm ++ showFlds flds+> ppCatUpdate (CatCreateFunction flav nm args ret vdc) =+> "CatCreateFunction " ++ show flav ++ " " ++ nm+> ++ " returns " ++ show ret+> ++ "(" ++ intercalate "," (map show args) ++ ")"+> ++ if vdc then " variadic" else ""+> ppCatUpdate (CatDropFunction _ nm args) =+> "CatDropFunction " ++ nm ++ "(" ++ show args ++ ")"+>+> showFlds :: [(String,Type)] -> String+> showFlds flds = "(\n" ++ sfs flds ++ ")"+> where+> sfs ((nm,t):fs) = " " ++ show nm+> ++ " " ++ show t ++ "\n" ++ sfs fs+> sfs [] = ""+>+> data FunFlav = FunPrefix | FunPostfix | FunBinary+> | FunName | FunAgg | FunWindow+> deriving (Eq,Show,Ord,Typeable,Data)+>+> -- | Applies a list of 'CatalogUpdate's to an 'Catalog' value+> -- to produce a new Catalog value.+> updateCatalog :: Catalog+> -> [CatalogUpdate]+> -> Either [TypeError] Catalog+> updateCatalog cat' eus =+> foldM updateCat' (cat' {catUpdates = catUpdates cat' ++ eus}) eus+> where+> updateCat' cat (CatCreateScalar ty catl pref) = do+> errorWhen (not allowed)+> [BadCatalogUpdate $ "can only add scalar types\+> \this way, got " ++ show ty]+> let ScalarType nm = ty+> return $ addTypeWithArray cat nm ty catl pref+> where+> allowed = case ty of+> ScalarType _ -> True+> _ -> False+>+> updateCat' cat (CatCreateDomain ty baseTy) = do+> errorWhen (not allowed)+> [BadCatalogUpdate $ "can only add domain types\+> \this way, got " ++ show ty]+> errorWhen (not baseAllowed)+> [BadCatalogUpdate $ "can only add domain types\+> \based on scalars, got "+> ++ show baseTy]+> let DomainType nm = ty+> catl <- catTypeCategory cat baseTy+> return (addTypeWithArray cat nm ty catl False) {+> catDomainDefs =+> (ty,baseTy):catDomainDefs cat+> ,catCasts =+> (ty,baseTy,ImplicitCastContext):catCasts cat}+> where+> allowed = case ty of+> DomainType _ -> True+> _ -> False+> baseAllowed = case baseTy of+> ScalarType _ -> True+> _ -> False+> updateCat' cat (CatCreateComposite nm flds) =+> return $ (addTypeWithArray cat nm (NamedCompositeType nm) "C" False) {+> catAttrDefs =+> (nm,Composite,CompositeType flds, CompositeType [])+> : catAttrDefs cat}+>+> updateCat' cat (CatCreateCast src tgt ctx) =+> return $ cat {catCasts = (src,tgt,ctx):catCasts cat}+>+> updateCat' cat (CatCreateTable nm attrs sysAttrs) = do+> checkTypeDoesntExist cat nm (NamedCompositeType nm)+> return $ (addTypeWithArray cat nm+> (NamedCompositeType nm) "C" False) {+> catAttrDefs =+> (nm,TableComposite+> ,CompositeType attrs+> , CompositeType sysAttrs)+> : catAttrDefs cat}+>+> updateCat' cat (CatCreateView nm attrs) = do+> checkTypeDoesntExist cat nm (NamedCompositeType nm)+> return $ (addTypeWithArray cat nm+> (NamedCompositeType nm) "C" False) {+> catAttrDefs =+> (nm,ViewComposite,CompositeType attrs, CompositeType [])+> : catAttrDefs cat}+>+> updateCat' cat (CatCreateFunction f nm args ret vdc) =+> return $ case f of+> FunPrefix -> cat {catPrefixOperators =+> fp : catPrefixOperators cat}+> FunPostfix -> cat {catPostfixOperators =+> fp : catPostfixOperators cat}+> FunBinary -> cat {catBinaryOperators =+> fp : catBinaryOperators cat}+> FunAgg -> cat {catAggregates =+> fp : catAggregates cat}+> FunWindow -> cat {catWindowFunctions =+> fp : catWindowFunctions cat}+> FunName -> cat {catFunctions =+> fp : catFunctions cat}+> where fp = (nm,args,ret,vdc)+>+> updateCat' cat (CatDropFunction _ifexists nm args) = do+> let matches = filter matchingFn (catFunctions cat)+> errorWhen (null matches)+> [BadCatalogUpdate+> $ "couldn't find function to drop "+> ++ show nm ++ "(" ++ show args++")"]+> errorWhen (length matches > 1)+> [BadCatalogUpdate+> $ "multiple matching functions to drop "+> ++ show nm ++ "(" ++ show args++")"]+> return cat {catFunctions = filter (not . matchingFn)+> (catFunctions cat)+> ,catUpdates = filter (not.matchingUpdate)+> (catUpdates cat)}+> where+> matchingFn (nm1,a1,_,_) =+> map toLower nm == map toLower nm1 && args == a1+> matchingUpdate (CatDropFunction _ nm2 a2)+> | map toLower nm2 == map toLower nm+> && a2 == args = True+> matchingUpdate (CatCreateFunction _ nm2 a2 _ _)+> | map toLower nm2 == map toLower nm+> && a2 == args = True+> matchingUpdate _ = False++todo:+look for matching function in list, if not found then error+remove from list, and remove from update list++> addTypeWithArray cat nm ty catl pref =+> cat {catTypeNames =+> ('_':nm,ArrayType ty)+> : (nm,ty)+> : catTypeNames cat+> ,catTypeCategories =+> (ArrayType ty,"A",False)+> : (ty,catl,pref)+> : catTypeCategories cat}+> checkTypeDoesntExist cat nm ty = do+> errorWhen (any (==nm) $ map fst $ catTypeNames cat)+> [TypeAlreadyExists ty]+> errorWhen (any (==ty) $ map snd $ catTypeNames cat)+> [TypeAlreadyExists ty]+> return ()+> {-+> | Takes part an 'Catalog' value to produce a list of 'CatalogUpdate's.+> You can use this to look inside the Catalog data type e.g. if you want to+> examine a catalog. It should be the case that:+> @+> updateCatalog emptyCatalog (deconstructCatalog cat) = cat+> @ -}+> deconstructCatalog :: Catalog -> [CatalogUpdate]+> deconstructCatalog = catUpdates++--------------------------------------------------------------------------------++= type checking stuff++> catCompositeDef :: Catalog -> [CompositeFlavour] -> String+> -> Either [TypeError] CompositeDef+> catCompositeDef cat flvs nm = do+> let c = filter m $ catAttrDefs cat+> errorWhen (null c)+> [UnrecognisedRelation nm]+> case c of+> (_,fl1,r,s):[] -> return (nm,fl1,r,s)+> _ -> Left [InternalError $ "problem getting attributes for: "+> ++ show nm ++ ", " ++ show c]+> where+> m (n,t,_,_) = n == nm && (null flvs || t `elem` flvs)+>+> catCompositeAttrsPair :: Catalog -> [CompositeFlavour] -> String+> -> Either [TypeError] ([(String,Type)],[(String,Type)])+> catCompositeAttrsPair cat flvs ty = do+> (_,_,CompositeType a,CompositeType b) <- catCompositeDef cat flvs ty+> return (a,b)+>+> catCompositeAttrs :: Catalog -> [CompositeFlavour] -> String+> -> Either [TypeError] [(String,Type)]+> catCompositeAttrs cat flvs ty = do+> (a,b) <- catCompositeAttrsPair cat flvs ty+> return $ a ++ b+>+> catCompositePublicAttrs :: Catalog -> [CompositeFlavour] -> String+> -> Either [TypeError] [(String,Type)]+> catCompositePublicAttrs cat flvs ty = do+> (a,_) <- catCompositeAttrsPair cat flvs ty+> return a+>+> catTypeCategory :: Catalog -> Type -> Either [TypeError] String+> catTypeCategory cat ty =+> fmap fst $ catGetCategoryInfo cat ty+>+> catPreferredType :: Catalog -> Type -> Either [TypeError] Bool+> catPreferredType cat ty =+> fmap snd $ catGetCategoryInfo cat ty+>+> catCast :: Catalog -> CastContext -> Type -> Type -> Either [TypeError] Bool+> catCast cat ctx from to = {-trace ("check cast " ++ show from ++ show to) $-}+> case from of+> t@(DomainType _) -> do+> baseType <- catDomainBaseType cat t+> cc <- catCast cat ctx baseType to+> return $ (baseType == to) ||+> (cc ||+> any (== (from, to, ctx)) (catCasts cat))+> _ -> Right $ any (==(from,to,ctx)) (catCasts cat)+>+> catDomainBaseType :: Catalog -> Type -> Either [TypeError] Type+> catDomainBaseType cat ty =+> --check type is domain, check it exists in main list+> case lookup ty (catDomainDefs cat) of+> Nothing -> Left [DomainDefNotFound ty]+> Just t -> Right t+>+> catLookupFns :: Catalog -> String -> [FunctionPrototype]+> catLookupFns cat name =+> filter (\(nm,_,_,_) -> map toLower nm == map toLower name) catGetAllFns+> where+> catGetAllFns =+> concat [catPrefixOperators cat+> ,catPostfixOperators cat+> ,catBinaryOperators cat+> ,catFunctions cat+> ,catAggregates cat+> ,catWindowFunctions cat]++== internal support for type checker fns above++> catGetCategoryInfo :: Catalog -> Type -> Either [TypeError] (String, Bool)+> catGetCategoryInfo cat ty =+> case ty of+> SetOfType _ -> Right ("", False)+> AnonymousRecordType _ -> Right ("", False)+> ArrayType (Pseudo _) -> Right ("A",False)+> Pseudo _ -> Right ("P",False)+> _ -> let l = filter (\(t,_,_) -> ty == t) $ catTypeCategories cat+> in if null l+> then Left [InternalError $ "no type category for " ++ show ty]+> else let (_,c,p):_ =l+> in Right (c,p)+>+> catTypeExists :: Catalog -> Type -> Either [TypeError] Type+> catTypeExists cat t =+> errorWhen (t `notElem` map snd (catTypeNames cat))+> [UnknownTypeError t] >>+> Right t+>+> catLookupType :: Catalog -> String -> Either [TypeError] Type+> catLookupType cat name =+> liftME [UnknownTypeName name] $+> lookup name (catTypeNames cat)+>++================================================================================++= built in stuff++keyword operators, all of these are built in and don't appear in any+postgresql catalog++This is wrong, these need to be separated into prefix, postfix, binary++> keywordOperatorTypes :: [FunctionPrototype]+> keywordOperatorTypes = [+> ("!and", [typeBool, typeBool], typeBool, False)+> ,("!or", [typeBool, typeBool], typeBool, False)+> ,("!like", [ScalarType "text", ScalarType "text"], typeBool, False)+> ,("!like", [ScalarType "char", ScalarType "char"], typeBool, False)+> ,("!like", [ScalarType "varchar", ScalarType "varchar"], typeBool, False)+> ,("!notlike", [ScalarType "text", ScalarType "text"], typeBool, False)+> ,("!notlike", [ScalarType "char", ScalarType "char"], typeBool, False)+> ,("!notlike", [ScalarType "varchar", ScalarType "varchar"], typeBool, False)+> ,("!not", [typeBool], typeBool, False)+> ,("!isnull", [Pseudo AnyElement], typeBool, False)+> ,("!isnotnull", [Pseudo AnyElement], typeBool, False)+> ,("!arrayctor", [ArrayType $ Pseudo AnyElement], Pseudo AnyArray, True)+> ,("!between", [Pseudo AnyElement+> ,Pseudo AnyElement+> ,Pseudo AnyElement], typeBool, False)+> ,("!substring",[ScalarType "text",typeInt,typeInt],ScalarType "text",False)+> ,("!substring",[ScalarType "varchar",typeInt,typeInt],ScalarType "varchar",False)+> ,("!substring",[ScalarType "char",typeInt,typeInt],ScalarType "char",False)+> ,("!arraysub", [Pseudo AnyArray,typeInt], Pseudo AnyElement, False)+> ]+>+> -- these look like functions, but don't appear in the postgresql catalog.+>+> specialFunctionTypes :: [FunctionPrototype]+> specialFunctionTypes = [+> ("coalesce", [ArrayType $ Pseudo AnyElement], Pseudo AnyElement, True)+> ,("nullif", [Pseudo AnyElement, Pseudo AnyElement], Pseudo AnyElement,False)+> ,("greatest", [ArrayType $ Pseudo AnyElement], Pseudo AnyElement,True)+> ,("least", [ArrayType $ Pseudo AnyElement], Pseudo AnyElement,True)+> ]+>+> pseudoTypes :: [(String, Type)]+> pseudoTypes =+> [("any",Pseudo Any)+> ,("anyarray",Pseudo AnyArray)+> ,("anyelement",Pseudo AnyElement)+> ,("anyenum",Pseudo AnyEnum)+> ,("anynonarray",Pseudo AnyNonArray)+> ,("cstring",Pseudo Cstring)+> ,("record",Pseudo Record)+> ,("trigger",Pseudo Trigger)+> ,("void",Pseudo Void)+> ,("_cstring",ArrayType $ Pseudo Cstring)+> ,("_record",ArrayType $ Pseudo Record)+> --,Pseudo Internal+> --,Pseudo LanguageHandler+> --,Pseudo Opaque+> ]++================================================================================++= getOperatorType++used by the pretty printer, not sure this is a very good design++for now, assume that all the overloaded operators that have the+same name are all either binary, prefix or postfix, otherwise the+getoperatortype would need the types of the arguments to determine+the operator type, and the parser would have to be a lot cleverer+although, parsec handles - being unary and binary without breaking+a sweat, so maybe this isn't too difficult?++this is why binary @ operator isn't currently supported++> data OperatorType = BinaryOp | PrefixOp | PostfixOp+> deriving (Eq,Show)+>+> getOperatorType :: Catalog -> String -> Either [TypeError] OperatorType+> getOperatorType cat s =+> case () of+> _ | s `elem` ["!and", "!or","!like","!notlike","."] -> Right BinaryOp+> | s `elem` ["!not"] -> Right PrefixOp+> | s `elem` ["!isnull", "!isnotnull"] -> Right PostfixOp+> | any (\(x,_,_,_) -> x == s) (catBinaryOperators cat) ->+> Right BinaryOp+> | any (\(x,_,_,_) -> x == s || (x=="-" && s=="u-"))+> (catPrefixOperators cat) ->+> Right PrefixOp+> | any (\(x,_,_,_) -> x == s) (catPostfixOperators cat) ->+> Right PostfixOp+> | otherwise ->+> Left [InternalError $ "don't know flavour of operator " ++ s]+>+> isOperatorName :: String -> Bool+> isOperatorName = any (`elem` "+-*/<>=~!@#%^&|`?.")++================================================================================++> -- | items in first catalog and not second, items in second and not first.+> data CatalogDiff = CatalogDiff [CatalogUpdate] [CatalogUpdate]+> deriving Show+>+> -- | find differences between two catalogs+> compareCatalogs :: Catalog -> Catalog -> Catalog -> CatalogDiff+> compareCatalogs base start end =+> let baseCatBits = deconstructCatalog base+> startCatBits = deconstructCatalog start \\ baseCatBits+> endCatBits = deconstructCatalog end \\ baseCatBits+> missing = sort $ endCatBits \\ startCatBits+> extras = sort $ startCatBits \\ endCatBits+> in CatalogDiff missing extras+>+> -- | print a catdiff in a more human readable way than show.+> ppCatDiff :: CatalogDiff -> String+> ppCatDiff (CatalogDiff missing extr) =+> "\nmissing:\n"+> ++ intercalate "\n" (map ppCatUpdate missing)+> ++ "\nextra:\n"+> ++ intercalate "\n" (map ppCatUpdate extr)
+ src/Database/HsSqlPpp/AstInternals/Catalog/DefaultTemplate1Catalog.lhs view
@@ -0,0 +1,13044 @@+++++This file is auto generated, to regenerate run+MUMBLE MUMBLE SOMETHING++from the project root (i.e. where the cabal file is located).++> module Database.HsSqlPpp.AstInternals.Catalog.DefaultTemplate1Catalog+> (defaultTemplate1Catalog) where+>+> import Database.HsSqlPpp.AstInternals.Catalog.CatalogInternal+> import Database.HsSqlPpp.AstInternals.TypeType+>+> defaultTemplate1Catalog :: Catalog+> defaultTemplate1Catalog =+> (\l -> case l of+> Left x -> error $ show x+> Right e -> e) $+> updateCatalog defaultCatalog++ +> [CatCreateScalar (ScalarType "bool") "B" True,+> CatCreateScalar (ScalarType "bytea") "U" False,+> CatCreateScalar (ScalarType "char") "S" False,+> CatCreateScalar (ScalarType "name") "S" False,+> CatCreateScalar (ScalarType "int8") "N" False,+> CatCreateScalar (ScalarType "int2") "N" False,+> CatCreateScalar (ScalarType "int2vector") "A" False,+> CatCreateScalar (ScalarType "int4") "N" False,+> CatCreateScalar (ScalarType "regproc") "N" False,+> CatCreateScalar (ScalarType "text") "S" True,+> CatCreateScalar (ScalarType "oid") "N" True,+> CatCreateScalar (ScalarType "tid") "U" False,+> CatCreateScalar (ScalarType "xid") "U" False,+> CatCreateScalar (ScalarType "cid") "U" False,+> CatCreateScalar (ScalarType "oidvector") "A" False,+> CatCreateScalar (ScalarType "xml") "U" False,+> CatCreateScalar (ScalarType "point") "G" False,+> CatCreateScalar (ScalarType "lseg") "G" False,+> CatCreateScalar (ScalarType "path") "G" False,+> CatCreateScalar (ScalarType "box") "G" False,+> CatCreateScalar (ScalarType "polygon") "G" False,+> CatCreateScalar (ScalarType "line") "G" False,+> CatCreateScalar (ScalarType "float4") "N" False,+> CatCreateScalar (ScalarType "float8") "N" True,+> CatCreateScalar (ScalarType "abstime") "D" False,+> CatCreateScalar (ScalarType "reltime") "T" False,+> CatCreateScalar (ScalarType "tinterval") "T" False,+> CatCreateScalar (ScalarType "circle") "G" False,+> CatCreateScalar (ScalarType "money") "N" False,+> CatCreateScalar (ScalarType "macaddr") "U" False,+> CatCreateScalar (ScalarType "inet") "I" True,+> CatCreateScalar (ScalarType "cidr") "I" False,+> CatCreateScalar (ScalarType "aclitem") "U" False,+> CatCreateScalar (ScalarType "bpchar") "S" False,+> CatCreateScalar (ScalarType "varchar") "S" False,+> CatCreateScalar (ScalarType "date") "D" False,+> CatCreateScalar (ScalarType "time") "D" False,+> CatCreateScalar (ScalarType "timestamp") "D" False,+> CatCreateScalar (ScalarType "timestamptz") "D" True,+> CatCreateScalar (ScalarType "interval") "T" True,+> CatCreateScalar (ScalarType "timetz") "D" False,+> CatCreateScalar (ScalarType "bit") "V" False,+> CatCreateScalar (ScalarType "varbit") "V" True,+> CatCreateScalar (ScalarType "numeric") "N" False,+> CatCreateScalar (ScalarType "refcursor") "U" False,+> CatCreateScalar (ScalarType "regprocedure") "N" False,+> CatCreateScalar (ScalarType "regoper") "N" False,+> CatCreateScalar (ScalarType "regoperator") "N" False,+> CatCreateScalar (ScalarType "regclass") "N" False,+> CatCreateScalar (ScalarType "regtype") "N" False,+> CatCreateScalar (ScalarType "uuid") "U" False,+> CatCreateScalar (ScalarType "tsvector") "U" False,+> CatCreateScalar (ScalarType "gtsvector") "U" False,+> CatCreateScalar (ScalarType "tsquery") "U" False,+> CatCreateScalar (ScalarType "regconfig") "N" False,+> CatCreateScalar (ScalarType "regdictionary") "N" False,+> CatCreateScalar (ScalarType "txid_snapshot") "U" False,+> CatCreateDomain (DomainType "information_schema.cardinal_number")+> (ScalarType "int4"),+> CatCreateDomain (DomainType "information_schema.character_data")+> (ScalarType "varchar"),+> CatCreateDomain (DomainType "information_schema.sql_identifier")+> (ScalarType "varchar"),+> CatCreateDomain (DomainType "information_schema.time_stamp")+> (ScalarType "timestamptz"),+> CatCreateCast (ScalarType "int8") (ScalarType "int2")+> AssignmentCastContext,+> CatCreateCast (ScalarType "int8") (ScalarType "int4")+> AssignmentCastContext,+> CatCreateCast (ScalarType "int8") (ScalarType "float4")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int8") (ScalarType "float8")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int8") (ScalarType "numeric")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int2") (ScalarType "int8")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int2") (ScalarType "int4")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int2") (ScalarType "float4")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int2") (ScalarType "float8")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int2") (ScalarType "numeric")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int4") (ScalarType "int8")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int4") (ScalarType "int2")+> AssignmentCastContext,+> CatCreateCast (ScalarType "int4") (ScalarType "float4")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int4") (ScalarType "float8")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int4") (ScalarType "numeric")+> ImplicitCastContext,+> CatCreateCast (ScalarType "float4") (ScalarType "int8")+> AssignmentCastContext,+> CatCreateCast (ScalarType "float4") (ScalarType "int2")+> AssignmentCastContext,+> CatCreateCast (ScalarType "float4") (ScalarType "int4")+> AssignmentCastContext,+> CatCreateCast (ScalarType "float4") (ScalarType "float8")+> ImplicitCastContext,+> CatCreateCast (ScalarType "float4") (ScalarType "numeric")+> AssignmentCastContext,+> CatCreateCast (ScalarType "float8") (ScalarType "int8")+> AssignmentCastContext,+> CatCreateCast (ScalarType "float8") (ScalarType "int2")+> AssignmentCastContext,+> CatCreateCast (ScalarType "float8") (ScalarType "int4")+> AssignmentCastContext,+> CatCreateCast (ScalarType "float8") (ScalarType "float4")+> AssignmentCastContext,+> CatCreateCast (ScalarType "float8") (ScalarType "numeric")+> AssignmentCastContext,+> CatCreateCast (ScalarType "numeric") (ScalarType "int8")+> AssignmentCastContext,+> CatCreateCast (ScalarType "numeric") (ScalarType "int2")+> AssignmentCastContext,+> CatCreateCast (ScalarType "numeric") (ScalarType "int4")+> AssignmentCastContext,+> CatCreateCast (ScalarType "numeric") (ScalarType "float4")+> ImplicitCastContext,+> CatCreateCast (ScalarType "numeric") (ScalarType "float8")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int4") (ScalarType "bool")+> ExplicitCastContext,+> CatCreateCast (ScalarType "bool") (ScalarType "int4")+> ExplicitCastContext,+> CatCreateCast (ScalarType "int8") (ScalarType "oid")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int2") (ScalarType "oid")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int4") (ScalarType "oid")+> ImplicitCastContext,+> CatCreateCast (ScalarType "oid") (ScalarType "int8")+> AssignmentCastContext,+> CatCreateCast (ScalarType "oid") (ScalarType "int4")+> AssignmentCastContext,+> CatCreateCast (ScalarType "oid") (ScalarType "regproc")+> ImplicitCastContext,+> CatCreateCast (ScalarType "regproc") (ScalarType "oid")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int8") (ScalarType "regproc")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int2") (ScalarType "regproc")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int4") (ScalarType "regproc")+> ImplicitCastContext,+> CatCreateCast (ScalarType "regproc") (ScalarType "int8")+> AssignmentCastContext,+> CatCreateCast (ScalarType "regproc") (ScalarType "int4")+> AssignmentCastContext,+> CatCreateCast (ScalarType "regproc") (ScalarType "regprocedure")+> ImplicitCastContext,+> CatCreateCast (ScalarType "regprocedure") (ScalarType "regproc")+> ImplicitCastContext,+> CatCreateCast (ScalarType "oid") (ScalarType "regprocedure")+> ImplicitCastContext,+> CatCreateCast (ScalarType "regprocedure") (ScalarType "oid")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int8") (ScalarType "regprocedure")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int2") (ScalarType "regprocedure")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int4") (ScalarType "regprocedure")+> ImplicitCastContext,+> CatCreateCast (ScalarType "regprocedure") (ScalarType "int8")+> AssignmentCastContext,+> CatCreateCast (ScalarType "regprocedure") (ScalarType "int4")+> AssignmentCastContext,+> CatCreateCast (ScalarType "oid") (ScalarType "regoper")+> ImplicitCastContext,+> CatCreateCast (ScalarType "regoper") (ScalarType "oid")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int8") (ScalarType "regoper")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int2") (ScalarType "regoper")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int4") (ScalarType "regoper")+> ImplicitCastContext,+> CatCreateCast (ScalarType "regoper") (ScalarType "int8")+> AssignmentCastContext,+> CatCreateCast (ScalarType "regoper") (ScalarType "int4")+> AssignmentCastContext,+> CatCreateCast (ScalarType "regoper") (ScalarType "regoperator")+> ImplicitCastContext,+> CatCreateCast (ScalarType "regoperator") (ScalarType "regoper")+> ImplicitCastContext,+> CatCreateCast (ScalarType "oid") (ScalarType "regoperator")+> ImplicitCastContext,+> CatCreateCast (ScalarType "regoperator") (ScalarType "oid")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int8") (ScalarType "regoperator")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int2") (ScalarType "regoperator")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int4") (ScalarType "regoperator")+> ImplicitCastContext,+> CatCreateCast (ScalarType "regoperator") (ScalarType "int8")+> AssignmentCastContext,+> CatCreateCast (ScalarType "regoperator") (ScalarType "int4")+> AssignmentCastContext,+> CatCreateCast (ScalarType "oid") (ScalarType "regclass")+> ImplicitCastContext,+> CatCreateCast (ScalarType "regclass") (ScalarType "oid")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int8") (ScalarType "regclass")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int2") (ScalarType "regclass")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int4") (ScalarType "regclass")+> ImplicitCastContext,+> CatCreateCast (ScalarType "regclass") (ScalarType "int8")+> AssignmentCastContext,+> CatCreateCast (ScalarType "regclass") (ScalarType "int4")+> AssignmentCastContext,+> CatCreateCast (ScalarType "oid") (ScalarType "regtype")+> ImplicitCastContext,+> CatCreateCast (ScalarType "regtype") (ScalarType "oid")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int8") (ScalarType "regtype")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int2") (ScalarType "regtype")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int4") (ScalarType "regtype")+> ImplicitCastContext,+> CatCreateCast (ScalarType "regtype") (ScalarType "int8")+> AssignmentCastContext,+> CatCreateCast (ScalarType "regtype") (ScalarType "int4")+> AssignmentCastContext,+> CatCreateCast (ScalarType "oid") (ScalarType "regconfig")+> ImplicitCastContext,+> CatCreateCast (ScalarType "regconfig") (ScalarType "oid")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int8") (ScalarType "regconfig")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int2") (ScalarType "regconfig")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int4") (ScalarType "regconfig")+> ImplicitCastContext,+> CatCreateCast (ScalarType "regconfig") (ScalarType "int8")+> AssignmentCastContext,+> CatCreateCast (ScalarType "regconfig") (ScalarType "int4")+> AssignmentCastContext,+> CatCreateCast (ScalarType "oid") (ScalarType "regdictionary")+> ImplicitCastContext,+> CatCreateCast (ScalarType "regdictionary") (ScalarType "oid")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int8") (ScalarType "regdictionary")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int2") (ScalarType "regdictionary")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int4") (ScalarType "regdictionary")+> ImplicitCastContext,+> CatCreateCast (ScalarType "regdictionary") (ScalarType "int8")+> AssignmentCastContext,+> CatCreateCast (ScalarType "regdictionary") (ScalarType "int4")+> AssignmentCastContext,+> CatCreateCast (ScalarType "text") (ScalarType "regclass")+> ImplicitCastContext,+> CatCreateCast (ScalarType "varchar") (ScalarType "regclass")+> ImplicitCastContext,+> CatCreateCast (ScalarType "text") (ScalarType "bpchar")+> ImplicitCastContext,+> CatCreateCast (ScalarType "text") (ScalarType "varchar")+> ImplicitCastContext,+> CatCreateCast (ScalarType "bpchar") (ScalarType "text")+> ImplicitCastContext,+> CatCreateCast (ScalarType "bpchar") (ScalarType "varchar")+> ImplicitCastContext,+> CatCreateCast (ScalarType "varchar") (ScalarType "text")+> ImplicitCastContext,+> CatCreateCast (ScalarType "varchar") (ScalarType "bpchar")+> ImplicitCastContext,+> CatCreateCast (ScalarType "char") (ScalarType "text")+> ImplicitCastContext,+> CatCreateCast (ScalarType "char") (ScalarType "bpchar")+> AssignmentCastContext,+> CatCreateCast (ScalarType "char") (ScalarType "varchar")+> AssignmentCastContext,+> CatCreateCast (ScalarType "name") (ScalarType "text")+> ImplicitCastContext,+> CatCreateCast (ScalarType "name") (ScalarType "bpchar")+> AssignmentCastContext,+> CatCreateCast (ScalarType "name") (ScalarType "varchar")+> AssignmentCastContext,+> CatCreateCast (ScalarType "text") (ScalarType "char")+> AssignmentCastContext,+> CatCreateCast (ScalarType "bpchar") (ScalarType "char")+> AssignmentCastContext,+> CatCreateCast (ScalarType "varchar") (ScalarType "char")+> AssignmentCastContext,+> CatCreateCast (ScalarType "text") (ScalarType "name")+> ImplicitCastContext,+> CatCreateCast (ScalarType "bpchar") (ScalarType "name")+> ImplicitCastContext,+> CatCreateCast (ScalarType "varchar") (ScalarType "name")+> ImplicitCastContext,+> CatCreateCast (ScalarType "char") (ScalarType "int4")+> ExplicitCastContext,+> CatCreateCast (ScalarType "int4") (ScalarType "char")+> ExplicitCastContext,+> CatCreateCast (ScalarType "abstime") (ScalarType "date")+> AssignmentCastContext,+> CatCreateCast (ScalarType "abstime") (ScalarType "time")+> AssignmentCastContext,+> CatCreateCast (ScalarType "abstime") (ScalarType "timestamp")+> ImplicitCastContext,+> CatCreateCast (ScalarType "abstime") (ScalarType "timestamptz")+> ImplicitCastContext,+> CatCreateCast (ScalarType "reltime") (ScalarType "interval")+> ImplicitCastContext,+> CatCreateCast (ScalarType "date") (ScalarType "timestamp")+> ImplicitCastContext,+> CatCreateCast (ScalarType "date") (ScalarType "timestamptz")+> ImplicitCastContext,+> CatCreateCast (ScalarType "time") (ScalarType "interval")+> ImplicitCastContext,+> CatCreateCast (ScalarType "time") (ScalarType "timetz")+> ImplicitCastContext,+> CatCreateCast (ScalarType "timestamp") (ScalarType "abstime")+> AssignmentCastContext,+> CatCreateCast (ScalarType "timestamp") (ScalarType "date")+> AssignmentCastContext,+> CatCreateCast (ScalarType "timestamp") (ScalarType "time")+> AssignmentCastContext,+> CatCreateCast (ScalarType "timestamp") (ScalarType "timestamptz")+> ImplicitCastContext,+> CatCreateCast (ScalarType "timestamptz") (ScalarType "abstime")+> AssignmentCastContext,+> CatCreateCast (ScalarType "timestamptz") (ScalarType "date")+> AssignmentCastContext,+> CatCreateCast (ScalarType "timestamptz") (ScalarType "time")+> AssignmentCastContext,+> CatCreateCast (ScalarType "timestamptz") (ScalarType "timestamp")+> AssignmentCastContext,+> CatCreateCast (ScalarType "timestamptz") (ScalarType "timetz")+> AssignmentCastContext,+> CatCreateCast (ScalarType "interval") (ScalarType "reltime")+> AssignmentCastContext,+> CatCreateCast (ScalarType "interval") (ScalarType "time")+> AssignmentCastContext,+> CatCreateCast (ScalarType "timetz") (ScalarType "time")+> AssignmentCastContext,+> CatCreateCast (ScalarType "int4") (ScalarType "abstime")+> ExplicitCastContext,+> CatCreateCast (ScalarType "abstime") (ScalarType "int4")+> ExplicitCastContext,+> CatCreateCast (ScalarType "int4") (ScalarType "reltime")+> ExplicitCastContext,+> CatCreateCast (ScalarType "reltime") (ScalarType "int4")+> ExplicitCastContext,+> CatCreateCast (ScalarType "lseg") (ScalarType "point")+> ExplicitCastContext,+> CatCreateCast (ScalarType "path") (ScalarType "point")+> ExplicitCastContext,+> CatCreateCast (ScalarType "path") (ScalarType "polygon")+> AssignmentCastContext,+> CatCreateCast (ScalarType "box") (ScalarType "point")+> ExplicitCastContext,+> CatCreateCast (ScalarType "box") (ScalarType "lseg")+> ExplicitCastContext,+> CatCreateCast (ScalarType "box") (ScalarType "polygon")+> AssignmentCastContext,+> CatCreateCast (ScalarType "box") (ScalarType "circle")+> ExplicitCastContext,+> CatCreateCast (ScalarType "polygon") (ScalarType "point")+> ExplicitCastContext,+> CatCreateCast (ScalarType "polygon") (ScalarType "path")+> AssignmentCastContext,+> CatCreateCast (ScalarType "polygon") (ScalarType "box")+> ExplicitCastContext,+> CatCreateCast (ScalarType "polygon") (ScalarType "circle")+> ExplicitCastContext,+> CatCreateCast (ScalarType "circle") (ScalarType "point")+> ExplicitCastContext,+> CatCreateCast (ScalarType "circle") (ScalarType "box")+> ExplicitCastContext,+> CatCreateCast (ScalarType "circle") (ScalarType "polygon")+> ExplicitCastContext,+> CatCreateCast (ScalarType "cidr") (ScalarType "inet")+> ImplicitCastContext,+> CatCreateCast (ScalarType "inet") (ScalarType "cidr")+> AssignmentCastContext,+> CatCreateCast (ScalarType "bit") (ScalarType "varbit")+> ImplicitCastContext,+> CatCreateCast (ScalarType "varbit") (ScalarType "bit")+> ImplicitCastContext,+> CatCreateCast (ScalarType "int8") (ScalarType "bit")+> ExplicitCastContext,+> CatCreateCast (ScalarType "int4") (ScalarType "bit")+> ExplicitCastContext,+> CatCreateCast (ScalarType "bit") (ScalarType "int8")+> ExplicitCastContext,+> CatCreateCast (ScalarType "bit") (ScalarType "int4")+> ExplicitCastContext,+> CatCreateCast (ScalarType "cidr") (ScalarType "text")+> AssignmentCastContext,+> CatCreateCast (ScalarType "inet") (ScalarType "text")+> AssignmentCastContext,+> CatCreateCast (ScalarType "bool") (ScalarType "text")+> AssignmentCastContext,+> CatCreateCast (ScalarType "xml") (ScalarType "text")+> AssignmentCastContext,+> CatCreateCast (ScalarType "text") (ScalarType "xml")+> ExplicitCastContext,+> CatCreateCast (ScalarType "cidr") (ScalarType "varchar")+> AssignmentCastContext,+> CatCreateCast (ScalarType "inet") (ScalarType "varchar")+> AssignmentCastContext,+> CatCreateCast (ScalarType "bool") (ScalarType "varchar")+> AssignmentCastContext,+> CatCreateCast (ScalarType "xml") (ScalarType "varchar")+> AssignmentCastContext,+> CatCreateCast (ScalarType "varchar") (ScalarType "xml")+> ExplicitCastContext,+> CatCreateCast (ScalarType "cidr") (ScalarType "bpchar")+> AssignmentCastContext,+> CatCreateCast (ScalarType "inet") (ScalarType "bpchar")+> AssignmentCastContext,+> CatCreateCast (ScalarType "bool") (ScalarType "bpchar")+> AssignmentCastContext,+> CatCreateCast (ScalarType "xml") (ScalarType "bpchar")+> AssignmentCastContext,+> CatCreateCast (ScalarType "bpchar") (ScalarType "xml")+> ExplicitCastContext,+> CatCreateCast (ScalarType "bpchar") (ScalarType "bpchar")+> ImplicitCastContext,+> CatCreateCast (ScalarType "varchar") (ScalarType "varchar")+> ImplicitCastContext,+> CatCreateCast (ScalarType "time") (ScalarType "time")+> ImplicitCastContext,+> CatCreateCast (ScalarType "timestamp") (ScalarType "timestamp")+> ImplicitCastContext,+> CatCreateCast (ScalarType "timestamptz") (ScalarType "timestamptz")+> ImplicitCastContext,+> CatCreateCast (ScalarType "interval") (ScalarType "interval")+> ImplicitCastContext,+> CatCreateCast (ScalarType "timetz") (ScalarType "timetz")+> ImplicitCastContext,+> CatCreateCast (ScalarType "bit") (ScalarType "bit")+> ImplicitCastContext,+> CatCreateCast (ScalarType "varbit") (ScalarType "varbit")+> ImplicitCastContext,+> CatCreateCast (ScalarType "numeric") (ScalarType "numeric")+> ImplicitCastContext,+> CatCreateFunction FunPrefix "~" [ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunPrefix "~" [ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunPrefix "~" [ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunPrefix "~" [ScalarType "bit"]+> (ScalarType "bit")+> False,+> CatCreateFunction FunPrefix "~" [ScalarType "inet"]+> (ScalarType "inet")+> False,+> CatCreateFunction FunPrefix "||/" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunPrefix "|/" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunPrefix "|" [ScalarType "tinterval"]+> (ScalarType "abstime")+> False,+> CatCreateFunction FunPrefix "@@" [ScalarType "circle"]+> (ScalarType "point")+> False,+> CatCreateFunction FunPrefix "@@" [ScalarType "lseg"]+> (ScalarType "point")+> False,+> CatCreateFunction FunPrefix "@@" [ScalarType "path"]+> (ScalarType "point")+> False,+> CatCreateFunction FunPrefix "@@" [ScalarType "polygon"]+> (ScalarType "point")+> False,+> CatCreateFunction FunPrefix "@@" [ScalarType "box"]+> (ScalarType "point")+> False,+> CatCreateFunction FunPrefix "@-@" [ScalarType "path"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunPrefix "@-@" [ScalarType "lseg"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunPrefix "@" [ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunPrefix "@" [ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunPrefix "@" [ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunPrefix "@" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunPrefix "@" [ScalarType "float4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunPrefix "@" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunPrefix "?|" [ScalarType "line"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunPrefix "?|" [ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunPrefix "?-" [ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunPrefix "?-" [ScalarType "line"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunPrefix "-" [ScalarType "interval"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunPrefix "-" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunPrefix "-" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunPrefix "-" [ScalarType "float4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunPrefix "-" [ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunPrefix "-" [ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunPrefix "-" [ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunPrefix "+" [ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunPrefix "+" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunPrefix "+" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunPrefix "+" [ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunPrefix "+" [ScalarType "float4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunPrefix "+" [ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunPrefix "#" [ScalarType "path"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunPrefix "#" [ScalarType "polygon"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunPrefix "!!" [ScalarType "int8"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunPrefix "!!" [ScalarType "tsquery"]+> (ScalarType "tsquery")+> False,+> CatCreateFunction FunPostfix "!" [ScalarType "int8"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunBinary "~~*"+> [ScalarType "name", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~~*"+> [ScalarType "bpchar", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~~*"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~~"+> [ScalarType "bpchar", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~~"+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~~"+> [ScalarType "name", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~~"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~>~"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~>~"+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~>=~"+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~>=~"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~="+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~="+> [ScalarType "tinterval", ScalarType "tinterval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~="+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~="+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~="+> [ScalarType "point", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~<~"+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~<~"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~<=~"+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~<=~"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~*"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~*"+> [ScalarType "bpchar", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~*"+> [ScalarType "name", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~"+> [ScalarType "bpchar", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~"+> [ArrayType (ScalarType "aclitem"), ScalarType "aclitem"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~"+> [ScalarType "circle", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~"+> [ScalarType "polygon", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~"+> [ScalarType "path", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "~"+> [ScalarType "name", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "||" [Pseudo AnyArray, Pseudo AnyArray]+> (Pseudo AnyArray)+> False,+> CatCreateFunction FunBinary "||"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunBinary "||"+> [ScalarType "varbit", ScalarType "varbit"]+> (ScalarType "varbit")+> False,+> CatCreateFunction FunBinary "||"+> [Pseudo AnyElement, Pseudo AnyArray]+> (Pseudo AnyArray)+> False,+> CatCreateFunction FunBinary "||"+> [ScalarType "tsquery", ScalarType "tsquery"]+> (ScalarType "tsquery")+> False,+> CatCreateFunction FunBinary "||"+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunBinary "||"+> [Pseudo AnyNonArray, ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunBinary "||"+> [ScalarType "tsvector", ScalarType "tsvector"]+> (ScalarType "tsvector")+> False,+> CatCreateFunction FunBinary "||"+> [Pseudo AnyArray, Pseudo AnyElement]+> (Pseudo AnyArray)+> False,+> CatCreateFunction FunBinary "||"+> [ScalarType "text", Pseudo AnyNonArray]+> (ScalarType "text")+> False,+> CatCreateFunction FunBinary "|>>"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "|>>"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "|>>"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "|&>"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "|&>"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "|&>"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "|"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "|"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunBinary "|"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunBinary "|"+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "inet")+> False,+> CatCreateFunction FunBinary "|"+> [ScalarType "bit", ScalarType "bit"]+> (ScalarType "bit")+> False,+> CatCreateFunction FunBinary "^"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunBinary "^"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "@@@"+> [ScalarType "tsquery", ScalarType "tsvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "@@@"+> [ScalarType "tsvector", ScalarType "tsquery"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "@@"+> [ScalarType "text", ScalarType "tsquery"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "@@"+> [ScalarType "tsquery", ScalarType "tsvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "@@"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "@@"+> [ScalarType "tsvector", ScalarType "tsquery"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "@>" [Pseudo AnyArray, Pseudo AnyArray]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "@>"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "@>"+> [ScalarType "tsquery", ScalarType "tsquery"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "@>"+> [ScalarType "polygon", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "@>"+> [ScalarType "path", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "@>"+> [ArrayType (ScalarType "aclitem"), ScalarType "aclitem"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "@>"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "@>"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "@>"+> [ScalarType "circle", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "?||"+> [ScalarType "line", ScalarType "line"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "?||"+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "?|"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "?-|"+> [ScalarType "line", ScalarType "line"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "?-|"+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "?-"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "?#"+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "?#"+> [ScalarType "path", ScalarType "path"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "?#"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "?#"+> [ScalarType "lseg", ScalarType "line"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "?#"+> [ScalarType "line", ScalarType "line"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "?#"+> [ScalarType "lseg", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "?#"+> [ScalarType "line", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">^"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">^"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">>="+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">>"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">>"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">>"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">>"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary ">>"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunBinary ">>"+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunBinary ">>"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">>"+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">>"+> [ScalarType "bit", ScalarType "int4"]+> (ScalarType "bit")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "uuid", ScalarType "uuid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "macaddr", ScalarType "macaddr"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "char", ScalarType "char"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "int2", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">=" [Pseudo AnyEnum, Pseudo AnyEnum]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">=" [Pseudo AnyArray, Pseudo AnyArray]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "timestamp", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "date", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "time", ScalarType "time"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "timetz", ScalarType "timetz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "float4", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "varbit", ScalarType "varbit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "int4", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "name", ScalarType "name"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "tsvector", ScalarType "tsvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "date", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "tsquery", ScalarType "tsquery"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "float8", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "bool", ScalarType "bool"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">=" [Pseudo Record, Pseudo Record]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "timestamptz", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "timestamp", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "timestamptz", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "bit", ScalarType "bit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "timestamp", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "abstime", ScalarType "abstime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "path", ScalarType "path"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "timestamptz", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "oid", ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "tinterval", ScalarType "tinterval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "date", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "tid", ScalarType "tid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "money", ScalarType "money"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "oidvector", ScalarType "oidvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "interval", ScalarType "interval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "reltime", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "int4", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "int8", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">="+> [ScalarType "float4", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "timestamptz", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "macaddr", ScalarType "macaddr"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "int4", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "int8", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "char", ScalarType "char"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">" [Pseudo AnyArray, Pseudo AnyArray]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "int4", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "timestamp", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "interval", ScalarType "interval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">" [Pseudo AnyEnum, Pseudo AnyEnum]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "reltime", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "timestamptz", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "int2", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "tinterval", ScalarType "tinterval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "date", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "timestamp", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "time", ScalarType "time"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "uuid", ScalarType "uuid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "timetz", ScalarType "timetz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "bit", ScalarType "bit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "name", ScalarType "name"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "float4", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "oidvector", ScalarType "oidvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "path", ScalarType "path"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">" [Pseudo Record, Pseudo Record]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "timestamp", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "bool", ScalarType "bool"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "varbit", ScalarType "varbit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "oid", ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "tsvector", ScalarType "tsvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "float8", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "date", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "date", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "timestamptz", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "money", ScalarType "money"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "tsquery", ScalarType "tsquery"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "float4", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "tid", ScalarType "tid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary ">"+> [ScalarType "abstime", ScalarType "abstime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "timestamp", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "int4", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "reltime", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "date", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "oid", ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "interval", ScalarType "interval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "date", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "oidvector", ScalarType "oidvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "float4", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "int8", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "timestamp", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "int2", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "varbit", ScalarType "varbit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "timestamptz", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "timestamp", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "path", ScalarType "path"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "bit", ScalarType "bit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "timestamptz", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "tinterval", ScalarType "tinterval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "money", ScalarType "money"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "tid", ScalarType "tid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "aclitem", ScalarType "aclitem"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "uuid", ScalarType "uuid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "int2vector", ScalarType "int2vector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "=" [Pseudo Record, Pseudo Record]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "cid", ScalarType "cid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "xid", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "=" [Pseudo AnyArray, Pseudo AnyArray]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "macaddr", ScalarType "macaddr"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "line", ScalarType "line"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "=" [Pseudo AnyEnum, Pseudo AnyEnum]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "xid", ScalarType "xid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "tsvector", ScalarType "tsvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "date", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "time", ScalarType "time"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "timetz", ScalarType "timetz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "float4", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "float8", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "int4", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "name", ScalarType "name"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "tsquery", ScalarType "tsquery"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "char", ScalarType "char"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "bool", ScalarType "bool"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "timestamptz", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "="+> [ScalarType "abstime", ScalarType "abstime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<^"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<^"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<@"+> [ScalarType "tsquery", ScalarType "tsquery"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<@" [Pseudo AnyArray, Pseudo AnyArray]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<@"+> [ScalarType "lseg", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<@"+> [ScalarType "lseg", ScalarType "line"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<@"+> [ScalarType "point", ScalarType "line"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<@"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<@"+> [ScalarType "point", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<@"+> [ScalarType "point", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<@"+> [ScalarType "point", ScalarType "path"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<@"+> [ScalarType "point", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<@"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<@"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<@"+> [ScalarType "point", ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<?>"+> [ScalarType "abstime", ScalarType "tinterval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "float4", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>" [Pseudo AnyArray, Pseudo AnyArray]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "timetz", ScalarType "timetz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "reltime", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "int4", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "tsvector", ScalarType "tsvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "interval", ScalarType "interval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "time", ScalarType "time"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "date", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "oidvector", ScalarType "oidvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "int4", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "char", ScalarType "char"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "oid", ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "timestamptz", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "int8", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "date", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "bit", ScalarType "bit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "abstime", ScalarType "abstime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "date", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "tsquery", ScalarType "tsquery"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "name", ScalarType "name"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "tinterval", ScalarType "tinterval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "int2", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "timestamp", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "money", ScalarType "money"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "float8", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>" [Pseudo AnyEnum, Pseudo AnyEnum]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "timestamp", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "timestamptz", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "timestamp", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "uuid", ScalarType "uuid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "varbit", ScalarType "varbit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "tid", ScalarType "tid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "bool", ScalarType "bool"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "float4", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "timestamptz", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>" [Pseudo Record, Pseudo Record]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<>"+> [ScalarType "macaddr", ScalarType "macaddr"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "oidvector", ScalarType "oidvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "oid", ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "reltime", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "tsvector", ScalarType "tsvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<=" [Pseudo AnyEnum, Pseudo AnyEnum]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "float8", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "uuid", ScalarType "uuid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "float4", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "tid", ScalarType "tid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "timetz", ScalarType "timetz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "time", ScalarType "time"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "interval", ScalarType "interval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "date", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<=" [Pseudo AnyArray, Pseudo AnyArray]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "macaddr", ScalarType "macaddr"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "timestamptz", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "timestamp", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "timestamptz", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "money", ScalarType "money"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "bool", ScalarType "bool"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "timestamp", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "tinterval", ScalarType "tinterval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<=" [Pseudo Record, Pseudo Record]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "int4", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "timestamptz", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "date", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "path", ScalarType "path"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "bit", ScalarType "bit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "date", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "tsquery", ScalarType "tsquery"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "int4", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "timestamp", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "varbit", ScalarType "varbit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "name", ScalarType "name"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "int2", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "char", ScalarType "char"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "int8", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "float4", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "abstime", ScalarType "abstime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<="+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<<|"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<<|"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<<|"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<<="+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<<"+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunBinary "<<"+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<<"+> [ScalarType "tinterval", ScalarType "tinterval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<<"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<<"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<<"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<<"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "<<"+> [ScalarType "bit", ScalarType "int4"]+> (ScalarType "bit")+> False,+> CatCreateFunction FunBinary "<<"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunBinary "<<"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<->"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "<->"+> [ScalarType "circle", ScalarType "polygon"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "<->"+> [ScalarType "point", ScalarType "line"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "<->"+> [ScalarType "point", ScalarType "path"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "<->"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "<->"+> [ScalarType "point", ScalarType "circle"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "<->"+> [ScalarType "lseg", ScalarType "box"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "<->"+> [ScalarType "point", ScalarType "lseg"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "<->"+> [ScalarType "lseg", ScalarType "line"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "<->"+> [ScalarType "point", ScalarType "box"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "<->"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "<->"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "<->"+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "<->"+> [ScalarType "line", ScalarType "line"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "<->"+> [ScalarType "path", ScalarType "path"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "<->"+> [ScalarType "line", ScalarType "box"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "<#>"+> [ScalarType "abstime", ScalarType "abstime"]+> (ScalarType "tinterval")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "oidvector", ScalarType "oidvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "money", ScalarType "money"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "float8", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "timestamptz", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<" [Pseudo AnyEnum, Pseudo AnyEnum]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "timestamp", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "tinterval", ScalarType "tinterval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "tsvector", ScalarType "tsvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "varbit", ScalarType "varbit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "int8", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "float4", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "path", ScalarType "path"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "bit", ScalarType "bit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "date", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "bool", ScalarType "bool"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "char", ScalarType "char"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<" [Pseudo Record, Pseudo Record]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "name", ScalarType "name"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "timestamptz", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "interval", ScalarType "interval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "date", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "time", ScalarType "time"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "int2", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<" [Pseudo AnyArray, Pseudo AnyArray]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "macaddr", ScalarType "macaddr"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "abstime", ScalarType "abstime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "tid", ScalarType "tid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "float4", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "timestamptz", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "int4", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "uuid", ScalarType "uuid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "timestamp", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "timestamp", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "timetz", ScalarType "timetz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "oid", ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "date", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "int4", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "reltime", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "<"+> [ScalarType "tsquery", ScalarType "tsquery"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "/"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunBinary "/"+> [ScalarType "int2", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "/"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "/"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunBinary "/"+> [ScalarType "money", ScalarType "float4"]+> (ScalarType "money")+> False,+> CatCreateFunction FunBinary "/"+> [ScalarType "int8", ScalarType "int2"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "/"+> [ScalarType "int4", ScalarType "int2"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunBinary "/"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "point")+> False,+> CatCreateFunction FunBinary "/"+> [ScalarType "circle", ScalarType "point"]+> (ScalarType "circle")+> False,+> CatCreateFunction FunBinary "/"+> [ScalarType "int4", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "/"+> [ScalarType "float8", ScalarType "float4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "/"+> [ScalarType "money", ScalarType "int4"]+> (ScalarType "money")+> False,+> CatCreateFunction FunBinary "/"+> [ScalarType "path", ScalarType "point"]+> (ScalarType "path")+> False,+> CatCreateFunction FunBinary "/"+> [ScalarType "interval", ScalarType "float8"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunBinary "/"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "/"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "/"+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunBinary "/"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunBinary "/"+> [ScalarType "float4", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "/"+> [ScalarType "money", ScalarType "int2"]+> (ScalarType "money")+> False,+> CatCreateFunction FunBinary "/"+> [ScalarType "float4", ScalarType "float4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunBinary "/"+> [ScalarType "money", ScalarType "float8"]+> (ScalarType "money")+> False,+> CatCreateFunction FunBinary "/"+> [ScalarType "box", ScalarType "point"]+> (ScalarType "box")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "interval", ScalarType "interval"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "timestamptz", ScalarType "interval"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "timestamptz", ScalarType "timestamptz"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "circle", ScalarType "point"]+> (ScalarType "circle")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "float8", ScalarType "float4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "float4", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "date", ScalarType "int4"]+> (ScalarType "date")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "date", ScalarType "date"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "date", ScalarType "interval"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunBinary "-"+> [ArrayType (ScalarType "aclitem"), ScalarType "aclitem"]+> (ArrayType (ScalarType "aclitem"))+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "money", ScalarType "money"]+> (ScalarType "money")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "inet", ScalarType "int8"]+> (ScalarType "inet")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "box", ScalarType "point"]+> (ScalarType "box")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "path", ScalarType "point"]+> (ScalarType "path")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "point")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "int2", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "int8", ScalarType "int2"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "int4", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "time", ScalarType "interval"]+> (ScalarType "time")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "timetz", ScalarType "interval"]+> (ScalarType "timetz")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "float4", ScalarType "float4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "abstime", ScalarType "reltime"]+> (ScalarType "abstime")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "int4", ScalarType "int2"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "timestamp", ScalarType "interval"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "time", ScalarType "time"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunBinary "-"+> [ScalarType "timestamp", ScalarType "timestamp"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "interval", ScalarType "interval"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "date", ScalarType "time"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "int4", ScalarType "int2"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "timetz", ScalarType "interval"]+> (ScalarType "timetz")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "time", ScalarType "interval"]+> (ScalarType "time")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "int4", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "timestamp", ScalarType "interval"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "time", ScalarType "date"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "int8", ScalarType "int2"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "date", ScalarType "timetz"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "int2", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "point")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "path", ScalarType "path"]+> (ScalarType "path")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "path", ScalarType "point"]+> (ScalarType "path")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "box", ScalarType "point"]+> (ScalarType "box")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "money", ScalarType "money"]+> (ScalarType "money")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "int8", ScalarType "inet"]+> (ScalarType "inet")+> False,+> CatCreateFunction FunBinary "+"+> [ArrayType (ScalarType "aclitem"), ScalarType "aclitem"]+> (ArrayType (ScalarType "aclitem"))+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "inet", ScalarType "int8"]+> (ScalarType "inet")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "interval", ScalarType "date"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "date", ScalarType "interval"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "timetz", ScalarType "date"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "interval", ScalarType "timetz"]+> (ScalarType "timetz")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "interval", ScalarType "timestamp"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "date", ScalarType "int4"]+> (ScalarType "date")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "interval", ScalarType "timestamptz"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "int4", ScalarType "date"]+> (ScalarType "date")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "float4", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "float8", ScalarType "float4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "float4", ScalarType "float4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "circle", ScalarType "point"]+> (ScalarType "circle")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "timestamptz", ScalarType "interval"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "abstime", ScalarType "reltime"]+> (ScalarType "abstime")+> False,+> CatCreateFunction FunBinary "+"+> [ScalarType "interval", ScalarType "time"]+> (ScalarType "time")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "point")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "path", ScalarType "point"]+> (ScalarType "path")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "box", ScalarType "point"]+> (ScalarType "box")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "money", ScalarType "float4"]+> (ScalarType "money")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "float4", ScalarType "money"]+> (ScalarType "money")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "money", ScalarType "float8"]+> (ScalarType "money")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "money", ScalarType "int4"]+> (ScalarType "money")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "money", ScalarType "int2"]+> (ScalarType "money")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "float8", ScalarType "money"]+> (ScalarType "money")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "int4", ScalarType "money"]+> (ScalarType "money")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "int2", ScalarType "money"]+> (ScalarType "money")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "circle", ScalarType "point"]+> (ScalarType "circle")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "float4", ScalarType "float4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "float8", ScalarType "interval"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "interval", ScalarType "float8"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "int4", ScalarType "int2"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "float4", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "int4", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "int8", ScalarType "int2"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "int2", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "*"+> [ScalarType "float8", ScalarType "float4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunBinary "&>"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "&>"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "&>"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "&<|"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "&<|"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "&<|"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "&<"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "&<"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "&<"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "&&" [Pseudo AnyArray, Pseudo AnyArray]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "&&"+> [ScalarType "tinterval", ScalarType "tinterval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "&&"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "&&"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "&&"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "&&"+> [ScalarType "tsquery", ScalarType "tsquery"]+> (ScalarType "tsquery")+> False,+> CatCreateFunction FunBinary "&"+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "inet")+> False,+> CatCreateFunction FunBinary "&"+> [ScalarType "bit", ScalarType "bit"]+> (ScalarType "bit")+> False,+> CatCreateFunction FunBinary "&"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "&"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunBinary "&"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunBinary "%"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunBinary "%"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunBinary "%"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunBinary "%"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "#>="+> [ScalarType "tinterval", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "#>"+> [ScalarType "tinterval", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "#="+> [ScalarType "tinterval", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "#<>"+> [ScalarType "tinterval", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "#<="+> [ScalarType "tinterval", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "#<"+> [ScalarType "tinterval", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "##"+> [ScalarType "line", ScalarType "lseg"]+> (ScalarType "point")+> False,+> CatCreateFunction FunBinary "##"+> [ScalarType "lseg", ScalarType "line"]+> (ScalarType "point")+> False,+> CatCreateFunction FunBinary "##"+> [ScalarType "point", ScalarType "box"]+> (ScalarType "point")+> False,+> CatCreateFunction FunBinary "##"+> [ScalarType "lseg", ScalarType "box"]+> (ScalarType "point")+> False,+> CatCreateFunction FunBinary "##"+> [ScalarType "line", ScalarType "box"]+> (ScalarType "point")+> False,+> CatCreateFunction FunBinary "##"+> [ScalarType "point", ScalarType "line"]+> (ScalarType "point")+> False,+> CatCreateFunction FunBinary "##"+> [ScalarType "point", ScalarType "lseg"]+> (ScalarType "point")+> False,+> CatCreateFunction FunBinary "##"+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "point")+> False,+> CatCreateFunction FunBinary "#"+> [ScalarType "bit", ScalarType "bit"]+> (ScalarType "bit")+> False,+> CatCreateFunction FunBinary "#"+> [ScalarType "line", ScalarType "line"]+> (ScalarType "point")+> False,+> CatCreateFunction FunBinary "#"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "box")+> False,+> CatCreateFunction FunBinary "#"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunBinary "#"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunBinary "#"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunBinary "#"+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "point")+> False,+> CatCreateFunction FunBinary "!~~*"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "!~~*"+> [ScalarType "bpchar", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "!~~*"+> [ScalarType "name", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "!~~"+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "!~~"+> [ScalarType "bpchar", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "!~~"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "!~~"+> [ScalarType "name", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "!~*"+> [ScalarType "bpchar", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "!~*"+> [ScalarType "name", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "!~*"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "!~"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "!~"+> [ScalarType "name", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunBinary "!~"+> [ScalarType "bpchar", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "RI_FKey_cascade_del" [] (Pseudo Trigger)+> False,+> CatCreateFunction FunName "RI_FKey_cascade_upd" [] (Pseudo Trigger)+> False,+> CatCreateFunction FunName "RI_FKey_check_ins" [] (Pseudo Trigger)+> False,+> CatCreateFunction FunName "RI_FKey_check_upd" [] (Pseudo Trigger)+> False,+> CatCreateFunction FunName "RI_FKey_noaction_del" []+> (Pseudo Trigger)+> False,+> CatCreateFunction FunName "RI_FKey_noaction_upd" []+> (Pseudo Trigger)+> False,+> CatCreateFunction FunName "RI_FKey_restrict_del" []+> (Pseudo Trigger)+> False,+> CatCreateFunction FunName "RI_FKey_restrict_upd" []+> (Pseudo Trigger)+> False,+> CatCreateFunction FunName "RI_FKey_setdefault_del" []+> (Pseudo Trigger)+> False,+> CatCreateFunction FunName "RI_FKey_setdefault_upd" []+> (Pseudo Trigger)+> False,+> CatCreateFunction FunName "RI_FKey_setnull_del" [] (Pseudo Trigger)+> False,+> CatCreateFunction FunName "RI_FKey_setnull_upd" [] (Pseudo Trigger)+> False,+> CatCreateFunction FunName "abbrev" [ScalarType "cidr"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "abbrev" [ScalarType "inet"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "abs" [ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "abs" [ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "abs" [ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "abs" [ScalarType "float4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "abs" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "abs" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "abstime" [ScalarType "timestamp"]+> (ScalarType "abstime")+> False,+> CatCreateFunction FunName "abstime" [ScalarType "timestamptz"]+> (ScalarType "abstime")+> False,+> CatCreateFunction FunName "abstimeeq"+> [ScalarType "abstime", ScalarType "abstime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "abstimege"+> [ScalarType "abstime", ScalarType "abstime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "abstimegt"+> [ScalarType "abstime", ScalarType "abstime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "abstimein" [Pseudo Cstring]+> (ScalarType "abstime")+> False,+> CatCreateFunction FunName "abstimele"+> [ScalarType "abstime", ScalarType "abstime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "abstimelt"+> [ScalarType "abstime", ScalarType "abstime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "abstimene"+> [ScalarType "abstime", ScalarType "abstime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "abstimeout" [ScalarType "abstime"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "abstimerecv" [Pseudo Internal]+> (ScalarType "abstime")+> False,+> CatCreateFunction FunName "abstimesend" [ScalarType "abstime"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "aclcontains"+> [ArrayType (ScalarType "aclitem"), ScalarType "aclitem"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "aclinsert"+> [ArrayType (ScalarType "aclitem"), ScalarType "aclitem"]+> (ArrayType (ScalarType "aclitem"))+> False,+> CatCreateFunction FunName "aclitemeq"+> [ScalarType "aclitem", ScalarType "aclitem"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "aclitemin" [Pseudo Cstring]+> (ScalarType "aclitem")+> False,+> CatCreateFunction FunName "aclitemout" [ScalarType "aclitem"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "aclremove"+> [ArrayType (ScalarType "aclitem"), ScalarType "aclitem"]+> (ArrayType (ScalarType "aclitem"))+> False,+> CatCreateFunction FunName "acos" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "age" [ScalarType "xid"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "age" [ScalarType "timestamp"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "age" [ScalarType "timestamptz"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "age"+> [ScalarType "timestamp", ScalarType "timestamp"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "age"+> [ScalarType "timestamptz", ScalarType "timestamptz"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "any_in" [Pseudo Cstring] (Pseudo Any)+> False,+> CatCreateFunction FunName "any_out" [Pseudo Any] (Pseudo Cstring)+> False,+> CatCreateFunction FunName "anyarray_in" [Pseudo Cstring]+> (Pseudo AnyArray)+> False,+> CatCreateFunction FunName "anyarray_out" [Pseudo AnyArray]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "anyarray_recv" [Pseudo Internal]+> (Pseudo AnyArray)+> False,+> CatCreateFunction FunName "anyarray_send" [Pseudo AnyArray]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "anyelement_in" [Pseudo Cstring]+> (Pseudo AnyElement)+> False,+> CatCreateFunction FunName "anyelement_out" [Pseudo AnyElement]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "anyenum_in" [Pseudo Cstring]+> (Pseudo AnyEnum)+> False,+> CatCreateFunction FunName "anyenum_out" [Pseudo AnyEnum]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "anynonarray_in" [Pseudo Cstring]+> (Pseudo AnyNonArray)+> False,+> CatCreateFunction FunName "anynonarray_out" [Pseudo AnyNonArray]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "anytextcat"+> [Pseudo AnyNonArray, ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "area" [ScalarType "path"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "area" [ScalarType "box"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "area" [ScalarType "circle"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "areajoinsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int2", Pseudo Internal]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "areasel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "array_agg_finalfn" [Pseudo Internal]+> (Pseudo AnyArray)+> False,+> CatCreateFunction FunName "array_agg_transfn"+> [Pseudo Internal, Pseudo AnyElement]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "array_append"+> [Pseudo AnyArray, Pseudo AnyElement]+> (Pseudo AnyArray)+> False,+> CatCreateFunction FunName "array_cat"+> [Pseudo AnyArray, Pseudo AnyArray]+> (Pseudo AnyArray)+> False,+> CatCreateFunction FunName "array_dims" [Pseudo AnyArray]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "array_eq"+> [Pseudo AnyArray, Pseudo AnyArray]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "array_fill"+> [Pseudo AnyElement, ArrayType (ScalarType "int4")]+> (Pseudo AnyArray)+> False,+> CatCreateFunction FunName "array_fill"+> [Pseudo AnyElement, ArrayType (ScalarType "int4"),+> ArrayType (ScalarType "int4")]+> (Pseudo AnyArray)+> False,+> CatCreateFunction FunName "array_ge"+> [Pseudo AnyArray, Pseudo AnyArray]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "array_gt"+> [Pseudo AnyArray, Pseudo AnyArray]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "array_in"+> [Pseudo Cstring, ScalarType "oid", ScalarType "int4"]+> (Pseudo AnyArray)+> False,+> CatCreateFunction FunName "array_larger"+> [Pseudo AnyArray, Pseudo AnyArray]+> (Pseudo AnyArray)+> False,+> CatCreateFunction FunName "array_le"+> [Pseudo AnyArray, Pseudo AnyArray]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "array_length"+> [Pseudo AnyArray, ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "array_lower"+> [Pseudo AnyArray, ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "array_lt"+> [Pseudo AnyArray, Pseudo AnyArray]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "array_ndims" [Pseudo AnyArray]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "array_ne"+> [Pseudo AnyArray, Pseudo AnyArray]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "array_out" [Pseudo AnyArray]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "array_prepend"+> [Pseudo AnyElement, Pseudo AnyArray]+> (Pseudo AnyArray)+> False,+> CatCreateFunction FunName "array_recv"+> [Pseudo Internal, ScalarType "oid", ScalarType "int4"]+> (Pseudo AnyArray)+> False,+> CatCreateFunction FunName "array_send" [Pseudo AnyArray]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "array_smaller"+> [Pseudo AnyArray, Pseudo AnyArray]+> (Pseudo AnyArray)+> False,+> CatCreateFunction FunName "array_to_string"+> [Pseudo AnyArray, ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "array_upper"+> [Pseudo AnyArray, ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "arraycontained"+> [Pseudo AnyArray, Pseudo AnyArray]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "arraycontains"+> [Pseudo AnyArray, Pseudo AnyArray]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "arrayoverlap"+> [Pseudo AnyArray, Pseudo AnyArray]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "ascii" [ScalarType "text"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "ascii_to_mic"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "ascii_to_utf8"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "asin" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "atan" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "atan2"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "big5_to_euc_tw"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "big5_to_mic"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "big5_to_utf8"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "bit"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "bit")+> False,+> CatCreateFunction FunName "bit"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "bit")+> False,+> CatCreateFunction FunName "bit"+> [ScalarType "bit", ScalarType "int4", ScalarType "bool"]+> (ScalarType "bit")+> False,+> CatCreateFunction FunName "bit_in"+> [Pseudo Cstring, ScalarType "oid", ScalarType "int4"]+> (ScalarType "bit")+> False,+> CatCreateFunction FunName "bit_length" [ScalarType "bytea"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "bit_length" [ScalarType "text"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "bit_length" [ScalarType "bit"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "bit_out" [ScalarType "bit"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "bit_recv"+> [Pseudo Internal, ScalarType "oid", ScalarType "int4"]+> (ScalarType "bit")+> False,+> CatCreateFunction FunName "bit_send" [ScalarType "bit"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "bitand"+> [ScalarType "bit", ScalarType "bit"]+> (ScalarType "bit")+> False,+> CatCreateFunction FunName "bitcat"+> [ScalarType "varbit", ScalarType "varbit"]+> (ScalarType "varbit")+> False,+> CatCreateFunction FunName "bitcmp"+> [ScalarType "bit", ScalarType "bit"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "biteq"+> [ScalarType "bit", ScalarType "bit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bitge"+> [ScalarType "bit", ScalarType "bit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bitgt"+> [ScalarType "bit", ScalarType "bit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bitle"+> [ScalarType "bit", ScalarType "bit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bitlt"+> [ScalarType "bit", ScalarType "bit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bitne"+> [ScalarType "bit", ScalarType "bit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bitnot" [ScalarType "bit"]+> (ScalarType "bit")+> False,+> CatCreateFunction FunName "bitor"+> [ScalarType "bit", ScalarType "bit"]+> (ScalarType "bit")+> False,+> CatCreateFunction FunName "bitshiftleft"+> [ScalarType "bit", ScalarType "int4"]+> (ScalarType "bit")+> False,+> CatCreateFunction FunName "bitshiftright"+> [ScalarType "bit", ScalarType "int4"]+> (ScalarType "bit")+> False,+> CatCreateFunction FunName "bittypmodin"+> [ArrayType (Pseudo Cstring)]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "bittypmodout" [ScalarType "int4"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "bitxor"+> [ScalarType "bit", ScalarType "bit"]+> (ScalarType "bit")+> False,+> CatCreateFunction FunName "bool" [ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "booland_statefunc"+> [ScalarType "bool", ScalarType "bool"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "booleq"+> [ScalarType "bool", ScalarType "bool"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "boolge"+> [ScalarType "bool", ScalarType "bool"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "boolgt"+> [ScalarType "bool", ScalarType "bool"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "boolin" [Pseudo Cstring]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "boolle"+> [ScalarType "bool", ScalarType "bool"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "boollt"+> [ScalarType "bool", ScalarType "bool"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "boolne"+> [ScalarType "bool", ScalarType "bool"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "boolor_statefunc"+> [ScalarType "bool", ScalarType "bool"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "boolout" [ScalarType "bool"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "boolrecv" [Pseudo Internal]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "boolsend" [ScalarType "bool"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "box" [ScalarType "polygon"]+> (ScalarType "box")+> False,+> CatCreateFunction FunName "box" [ScalarType "circle"]+> (ScalarType "box")+> False,+> CatCreateFunction FunName "box"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "box")+> False,+> CatCreateFunction FunName "box_above"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "box_above_eq"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "box_add"+> [ScalarType "box", ScalarType "point"]+> (ScalarType "box")+> False,+> CatCreateFunction FunName "box_below"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "box_below_eq"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "box_center" [ScalarType "box"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "box_contain"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "box_contained"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "box_distance"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "box_div"+> [ScalarType "box", ScalarType "point"]+> (ScalarType "box")+> False,+> CatCreateFunction FunName "box_eq"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "box_ge"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "box_gt"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "box_in" [Pseudo Cstring]+> (ScalarType "box")+> False,+> CatCreateFunction FunName "box_intersect"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "box")+> False,+> CatCreateFunction FunName "box_le"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "box_left"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "box_lt"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "box_mul"+> [ScalarType "box", ScalarType "point"]+> (ScalarType "box")+> False,+> CatCreateFunction FunName "box_out" [ScalarType "box"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "box_overabove"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "box_overbelow"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "box_overlap"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "box_overleft"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "box_overright"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "box_recv" [Pseudo Internal]+> (ScalarType "box")+> False,+> CatCreateFunction FunName "box_right"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "box_same"+> [ScalarType "box", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "box_send" [ScalarType "box"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "box_sub"+> [ScalarType "box", ScalarType "point"]+> (ScalarType "box")+> False,+> CatCreateFunction FunName "bpchar" [ScalarType "char"]+> (ScalarType "bpchar")+> False,+> CatCreateFunction FunName "bpchar" [ScalarType "name"]+> (ScalarType "bpchar")+> False,+> CatCreateFunction FunName "bpchar"+> [ScalarType "bpchar", ScalarType "int4", ScalarType "bool"]+> (ScalarType "bpchar")+> False,+> CatCreateFunction FunName "bpchar_larger"+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "bpchar")+> False,+> CatCreateFunction FunName "bpchar_pattern_ge"+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bpchar_pattern_gt"+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bpchar_pattern_le"+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bpchar_pattern_lt"+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bpchar_smaller"+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "bpchar")+> False,+> CatCreateFunction FunName "bpcharcmp"+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "bpchareq"+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bpcharge"+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bpchargt"+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bpchariclike"+> [ScalarType "bpchar", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bpcharicnlike"+> [ScalarType "bpchar", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bpcharicregexeq"+> [ScalarType "bpchar", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bpcharicregexne"+> [ScalarType "bpchar", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bpcharin"+> [Pseudo Cstring, ScalarType "oid", ScalarType "int4"]+> (ScalarType "bpchar")+> False,+> CatCreateFunction FunName "bpcharle"+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bpcharlike"+> [ScalarType "bpchar", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bpcharlt"+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bpcharne"+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bpcharnlike"+> [ScalarType "bpchar", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bpcharout" [ScalarType "bpchar"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "bpcharrecv"+> [Pseudo Internal, ScalarType "oid", ScalarType "int4"]+> (ScalarType "bpchar")+> False,+> CatCreateFunction FunName "bpcharregexeq"+> [ScalarType "bpchar", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bpcharregexne"+> [ScalarType "bpchar", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bpcharsend" [ScalarType "bpchar"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "bpchartypmodin"+> [ArrayType (Pseudo Cstring)]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "bpchartypmodout" [ScalarType "int4"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "broadcast" [ScalarType "inet"]+> (ScalarType "inet")+> False,+> CatCreateFunction FunName "btabstimecmp"+> [ScalarType "abstime", ScalarType "abstime"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btarraycmp"+> [Pseudo AnyArray, Pseudo AnyArray]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btbeginscan"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "btboolcmp"+> [ScalarType "bool", ScalarType "bool"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btbpchar_pattern_cmp"+> [ScalarType "bpchar", ScalarType "bpchar"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btbuild"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "btbulkdelete"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal,+> Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "btcharcmp"+> [ScalarType "char", ScalarType "char"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btcostestimate"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal,+> Pseudo Internal, Pseudo Internal, Pseudo Internal, Pseudo Internal,+> Pseudo Internal]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "btendscan" [Pseudo Internal]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "btfloat48cmp"+> [ScalarType "float4", ScalarType "float8"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btfloat4cmp"+> [ScalarType "float4", ScalarType "float4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btfloat84cmp"+> [ScalarType "float8", ScalarType "float4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btfloat8cmp"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btgetbitmap"+> [Pseudo Internal, Pseudo Internal]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "btgettuple"+> [Pseudo Internal, Pseudo Internal]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "btinsert"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal,+> Pseudo Internal, Pseudo Internal, Pseudo Internal]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "btint24cmp"+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btint28cmp"+> [ScalarType "int2", ScalarType "int8"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btint2cmp"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btint42cmp"+> [ScalarType "int4", ScalarType "int2"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btint48cmp"+> [ScalarType "int4", ScalarType "int8"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btint4cmp"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btint82cmp"+> [ScalarType "int8", ScalarType "int2"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btint84cmp"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btint8cmp"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btmarkpos" [Pseudo Internal]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "btnamecmp"+> [ScalarType "name", ScalarType "name"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btoidcmp"+> [ScalarType "oid", ScalarType "oid"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btoidvectorcmp"+> [ScalarType "oidvector", ScalarType "oidvector"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btoptions"+> [ArrayType (ScalarType "text"), ScalarType "bool"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "btrecordcmp"+> [Pseudo Record, Pseudo Record]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btreltimecmp"+> [ScalarType "reltime", ScalarType "reltime"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btrescan"+> [Pseudo Internal, Pseudo Internal]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "btrestrpos" [Pseudo Internal]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "btrim" [ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "btrim"+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "btrim"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "bttext_pattern_cmp"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "bttextcmp"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "bttidcmp"+> [ScalarType "tid", ScalarType "tid"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "bttintervalcmp"+> [ScalarType "tinterval", ScalarType "tinterval"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "btvacuumcleanup"+> [Pseudo Internal, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "byteacat"+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "byteacmp"+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "byteaeq"+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "byteage"+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "byteagt"+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "byteain" [Pseudo Cstring]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "byteale"+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bytealike"+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "bytealt"+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "byteane"+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "byteanlike"+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "byteaout" [ScalarType "bytea"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "bytearecv" [Pseudo Internal]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "byteasend" [ScalarType "bytea"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "cash_cmp"+> [ScalarType "money", ScalarType "money"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "cash_div_flt4"+> [ScalarType "money", ScalarType "float4"]+> (ScalarType "money")+> False,+> CatCreateFunction FunName "cash_div_flt8"+> [ScalarType "money", ScalarType "float8"]+> (ScalarType "money")+> False,+> CatCreateFunction FunName "cash_div_int2"+> [ScalarType "money", ScalarType "int2"]+> (ScalarType "money")+> False,+> CatCreateFunction FunName "cash_div_int4"+> [ScalarType "money", ScalarType "int4"]+> (ScalarType "money")+> False,+> CatCreateFunction FunName "cash_eq"+> [ScalarType "money", ScalarType "money"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "cash_ge"+> [ScalarType "money", ScalarType "money"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "cash_gt"+> [ScalarType "money", ScalarType "money"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "cash_in" [Pseudo Cstring]+> (ScalarType "money")+> False,+> CatCreateFunction FunName "cash_le"+> [ScalarType "money", ScalarType "money"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "cash_lt"+> [ScalarType "money", ScalarType "money"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "cash_mi"+> [ScalarType "money", ScalarType "money"]+> (ScalarType "money")+> False,+> CatCreateFunction FunName "cash_mul_flt4"+> [ScalarType "money", ScalarType "float4"]+> (ScalarType "money")+> False,+> CatCreateFunction FunName "cash_mul_flt8"+> [ScalarType "money", ScalarType "float8"]+> (ScalarType "money")+> False,+> CatCreateFunction FunName "cash_mul_int2"+> [ScalarType "money", ScalarType "int2"]+> (ScalarType "money")+> False,+> CatCreateFunction FunName "cash_mul_int4"+> [ScalarType "money", ScalarType "int4"]+> (ScalarType "money")+> False,+> CatCreateFunction FunName "cash_ne"+> [ScalarType "money", ScalarType "money"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "cash_out" [ScalarType "money"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "cash_pl"+> [ScalarType "money", ScalarType "money"]+> (ScalarType "money")+> False,+> CatCreateFunction FunName "cash_recv" [Pseudo Internal]+> (ScalarType "money")+> False,+> CatCreateFunction FunName "cash_send" [ScalarType "money"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "cash_words" [ScalarType "money"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "cashlarger"+> [ScalarType "money", ScalarType "money"]+> (ScalarType "money")+> False,+> CatCreateFunction FunName "cashsmaller"+> [ScalarType "money", ScalarType "money"]+> (ScalarType "money")+> False,+> CatCreateFunction FunName "cbrt" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "ceil" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "ceil" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "ceiling" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "ceiling" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "center" [ScalarType "box"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "center" [ScalarType "circle"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "char" [ScalarType "int4"]+> (ScalarType "char")+> False,+> CatCreateFunction FunName "char" [ScalarType "text"]+> (ScalarType "char")+> False,+> CatCreateFunction FunName "char_length" [ScalarType "text"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "char_length" [ScalarType "bpchar"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "character_length" [ScalarType "text"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "character_length" [ScalarType "bpchar"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "chareq"+> [ScalarType "char", ScalarType "char"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "charge"+> [ScalarType "char", ScalarType "char"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "chargt"+> [ScalarType "char", ScalarType "char"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "charin" [Pseudo Cstring]+> (ScalarType "char")+> False,+> CatCreateFunction FunName "charle"+> [ScalarType "char", ScalarType "char"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "charlt"+> [ScalarType "char", ScalarType "char"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "charne"+> [ScalarType "char", ScalarType "char"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "charout" [ScalarType "char"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "charrecv" [Pseudo Internal]+> (ScalarType "char")+> False,+> CatCreateFunction FunName "charsend" [ScalarType "char"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "chr" [ScalarType "int4"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "cideq"+> [ScalarType "cid", ScalarType "cid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "cidin" [Pseudo Cstring]+> (ScalarType "cid")+> False,+> CatCreateFunction FunName "cidout" [ScalarType "cid"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "cidr" [ScalarType "inet"]+> (ScalarType "cidr")+> False,+> CatCreateFunction FunName "cidr_in" [Pseudo Cstring]+> (ScalarType "cidr")+> False,+> CatCreateFunction FunName "cidr_out" [ScalarType "cidr"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "cidr_recv" [Pseudo Internal]+> (ScalarType "cidr")+> False,+> CatCreateFunction FunName "cidr_send" [ScalarType "cidr"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "cidrecv" [Pseudo Internal]+> (ScalarType "cid")+> False,+> CatCreateFunction FunName "cidsend" [ScalarType "cid"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "circle" [ScalarType "box"]+> (ScalarType "circle")+> False,+> CatCreateFunction FunName "circle" [ScalarType "polygon"]+> (ScalarType "circle")+> False,+> CatCreateFunction FunName "circle"+> [ScalarType "point", ScalarType "float8"]+> (ScalarType "circle")+> False,+> CatCreateFunction FunName "circle_above"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "circle_add_pt"+> [ScalarType "circle", ScalarType "point"]+> (ScalarType "circle")+> False,+> CatCreateFunction FunName "circle_below"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "circle_center" [ScalarType "circle"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "circle_contain"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "circle_contain_pt"+> [ScalarType "circle", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "circle_contained"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "circle_distance"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "circle_div_pt"+> [ScalarType "circle", ScalarType "point"]+> (ScalarType "circle")+> False,+> CatCreateFunction FunName "circle_eq"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "circle_ge"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "circle_gt"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "circle_in" [Pseudo Cstring]+> (ScalarType "circle")+> False,+> CatCreateFunction FunName "circle_le"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "circle_left"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "circle_lt"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "circle_mul_pt"+> [ScalarType "circle", ScalarType "point"]+> (ScalarType "circle")+> False,+> CatCreateFunction FunName "circle_ne"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "circle_out" [ScalarType "circle"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "circle_overabove"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "circle_overbelow"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "circle_overlap"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "circle_overleft"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "circle_overright"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "circle_recv" [Pseudo Internal]+> (ScalarType "circle")+> False,+> CatCreateFunction FunName "circle_right"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "circle_same"+> [ScalarType "circle", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "circle_send" [ScalarType "circle"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "circle_sub_pt"+> [ScalarType "circle", ScalarType "point"]+> (ScalarType "circle")+> False,+> CatCreateFunction FunName "clock_timestamp" []+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "close_lb"+> [ScalarType "line", ScalarType "box"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "close_ls"+> [ScalarType "line", ScalarType "lseg"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "close_lseg"+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "close_pb"+> [ScalarType "point", ScalarType "box"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "close_pl"+> [ScalarType "point", ScalarType "line"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "close_ps"+> [ScalarType "point", ScalarType "lseg"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "close_sb"+> [ScalarType "lseg", ScalarType "box"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "close_sl"+> [ScalarType "lseg", ScalarType "line"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "col_description"+> [ScalarType "oid", ScalarType "int4"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "contjoinsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int2", Pseudo Internal]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "contsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "convert"+> [ScalarType "bytea", ScalarType "name", ScalarType "name"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "convert_from"+> [ScalarType "bytea", ScalarType "name"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "convert_to"+> [ScalarType "text", ScalarType "name"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "cos" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "cot" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "cstring_in" [Pseudo Cstring]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "cstring_out" [Pseudo Cstring]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "cstring_recv" [Pseudo Internal]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "cstring_send" [Pseudo Cstring]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "current_database" [] (ScalarType "name")+> False,+> CatCreateFunction FunName "current_query" [] (ScalarType "text")+> False,+> CatCreateFunction FunName "current_schema" [] (ScalarType "name")+> False,+> CatCreateFunction FunName "current_schemas" [ScalarType "bool"]+> (ArrayType (ScalarType "name"))+> False,+> CatCreateFunction FunName "current_setting" [ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "current_user" [] (ScalarType "name")+> False,+> CatCreateFunction FunName "currtid"+> [ScalarType "oid", ScalarType "tid"]+> (ScalarType "tid")+> False,+> CatCreateFunction FunName "currtid2"+> [ScalarType "text", ScalarType "tid"]+> (ScalarType "tid")+> False,+> CatCreateFunction FunName "currval" [ScalarType "regclass"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "cursor_to_xml"+> [ScalarType "refcursor", ScalarType "int4", ScalarType "bool",+> ScalarType "bool", ScalarType "text"]+> (ScalarType "xml")+> False,+> CatCreateFunction FunName "cursor_to_xmlschema"+> [ScalarType "refcursor", ScalarType "bool", ScalarType "bool",+> ScalarType "text"]+> (ScalarType "xml")+> False,+> CatCreateFunction FunName "database_to_xml"+> [ScalarType "bool", ScalarType "bool", ScalarType "text"]+> (ScalarType "xml")+> False,+> CatCreateFunction FunName "database_to_xml_and_xmlschema"+> [ScalarType "bool", ScalarType "bool", ScalarType "text"]+> (ScalarType "xml")+> False,+> CatCreateFunction FunName "database_to_xmlschema"+> [ScalarType "bool", ScalarType "bool", ScalarType "text"]+> (ScalarType "xml")+> False,+> CatCreateFunction FunName "date" [ScalarType "abstime"]+> (ScalarType "date")+> False,+> CatCreateFunction FunName "date" [ScalarType "timestamp"]+> (ScalarType "date")+> False,+> CatCreateFunction FunName "date" [ScalarType "timestamptz"]+> (ScalarType "date")+> False,+> CatCreateFunction FunName "date_cmp"+> [ScalarType "date", ScalarType "date"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "date_cmp_timestamp"+> [ScalarType "date", ScalarType "timestamp"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "date_cmp_timestamptz"+> [ScalarType "date", ScalarType "timestamptz"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "date_eq"+> [ScalarType "date", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "date_eq_timestamp"+> [ScalarType "date", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "date_eq_timestamptz"+> [ScalarType "date", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "date_ge"+> [ScalarType "date", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "date_ge_timestamp"+> [ScalarType "date", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "date_ge_timestamptz"+> [ScalarType "date", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "date_gt"+> [ScalarType "date", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "date_gt_timestamp"+> [ScalarType "date", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "date_gt_timestamptz"+> [ScalarType "date", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "date_in" [Pseudo Cstring]+> (ScalarType "date")+> False,+> CatCreateFunction FunName "date_larger"+> [ScalarType "date", ScalarType "date"]+> (ScalarType "date")+> False,+> CatCreateFunction FunName "date_le"+> [ScalarType "date", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "date_le_timestamp"+> [ScalarType "date", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "date_le_timestamptz"+> [ScalarType "date", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "date_lt"+> [ScalarType "date", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "date_lt_timestamp"+> [ScalarType "date", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "date_lt_timestamptz"+> [ScalarType "date", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "date_mi"+> [ScalarType "date", ScalarType "date"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "date_mi_interval"+> [ScalarType "date", ScalarType "interval"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunName "date_mii"+> [ScalarType "date", ScalarType "int4"]+> (ScalarType "date")+> False,+> CatCreateFunction FunName "date_ne"+> [ScalarType "date", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "date_ne_timestamp"+> [ScalarType "date", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "date_ne_timestamptz"+> [ScalarType "date", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "date_out" [ScalarType "date"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "date_part"+> [ScalarType "text", ScalarType "abstime"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "date_part"+> [ScalarType "text", ScalarType "reltime"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "date_part"+> [ScalarType "text", ScalarType "date"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "date_part"+> [ScalarType "text", ScalarType "time"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "date_part"+> [ScalarType "text", ScalarType "timestamp"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "date_part"+> [ScalarType "text", ScalarType "timestamptz"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "date_part"+> [ScalarType "text", ScalarType "interval"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "date_part"+> [ScalarType "text", ScalarType "timetz"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "date_pl_interval"+> [ScalarType "date", ScalarType "interval"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunName "date_pli"+> [ScalarType "date", ScalarType "int4"]+> (ScalarType "date")+> False,+> CatCreateFunction FunName "date_recv" [Pseudo Internal]+> (ScalarType "date")+> False,+> CatCreateFunction FunName "date_send" [ScalarType "date"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "date_smaller"+> [ScalarType "date", ScalarType "date"]+> (ScalarType "date")+> False,+> CatCreateFunction FunName "date_trunc"+> [ScalarType "text", ScalarType "timestamp"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunName "date_trunc"+> [ScalarType "text", ScalarType "timestamptz"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "date_trunc"+> [ScalarType "text", ScalarType "interval"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "datetime_pl"+> [ScalarType "date", ScalarType "time"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunName "datetimetz_pl"+> [ScalarType "date", ScalarType "timetz"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "dcbrt" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "decode"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "degrees" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "dexp" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "diagonal" [ScalarType "box"]+> (ScalarType "lseg")+> False,+> CatCreateFunction FunName "diameter" [ScalarType "circle"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "dispell_init" [Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "dispell_lexize"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal,+> Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "dist_cpoly"+> [ScalarType "circle", ScalarType "polygon"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "dist_lb"+> [ScalarType "line", ScalarType "box"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "dist_pb"+> [ScalarType "point", ScalarType "box"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "dist_pc"+> [ScalarType "point", ScalarType "circle"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "dist_pl"+> [ScalarType "point", ScalarType "line"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "dist_ppath"+> [ScalarType "point", ScalarType "path"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "dist_ps"+> [ScalarType "point", ScalarType "lseg"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "dist_sb"+> [ScalarType "lseg", ScalarType "box"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "dist_sl"+> [ScalarType "lseg", ScalarType "line"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "div"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "dlog1" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "dlog10" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "domain_in"+> [Pseudo Cstring, ScalarType "oid", ScalarType "int4"]+> (Pseudo Any)+> False,+> CatCreateFunction FunName "domain_recv"+> [Pseudo Internal, ScalarType "oid", ScalarType "int4"]+> (Pseudo Any)+> False,+> CatCreateFunction FunName "dpow"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "dround" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "dsimple_init" [Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "dsimple_lexize"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal,+> Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "dsnowball_init" [Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "dsnowball_lexize"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal,+> Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "dsqrt" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "dsynonym_init" [Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "dsynonym_lexize"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal,+> Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "dtrunc" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "encode"+> [ScalarType "bytea", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "enum_cmp"+> [Pseudo AnyEnum, Pseudo AnyEnum]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "enum_eq"+> [Pseudo AnyEnum, Pseudo AnyEnum]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "enum_first" [Pseudo AnyEnum]+> (Pseudo AnyEnum)+> False,+> CatCreateFunction FunName "enum_ge"+> [Pseudo AnyEnum, Pseudo AnyEnum]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "enum_gt"+> [Pseudo AnyEnum, Pseudo AnyEnum]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "enum_in"+> [Pseudo Cstring, ScalarType "oid"]+> (Pseudo AnyEnum)+> False,+> CatCreateFunction FunName "enum_larger"+> [Pseudo AnyEnum, Pseudo AnyEnum]+> (Pseudo AnyEnum)+> False,+> CatCreateFunction FunName "enum_last" [Pseudo AnyEnum]+> (Pseudo AnyEnum)+> False,+> CatCreateFunction FunName "enum_le"+> [Pseudo AnyEnum, Pseudo AnyEnum]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "enum_lt"+> [Pseudo AnyEnum, Pseudo AnyEnum]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "enum_ne"+> [Pseudo AnyEnum, Pseudo AnyEnum]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "enum_out" [Pseudo AnyEnum]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "enum_range" [Pseudo AnyEnum]+> (Pseudo AnyArray)+> False,+> CatCreateFunction FunName "enum_range"+> [Pseudo AnyEnum, Pseudo AnyEnum]+> (Pseudo AnyArray)+> False,+> CatCreateFunction FunName "enum_recv"+> [Pseudo Cstring, ScalarType "oid"]+> (Pseudo AnyEnum)+> False,+> CatCreateFunction FunName "enum_send" [Pseudo AnyEnum]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "enum_smaller"+> [Pseudo AnyEnum, Pseudo AnyEnum]+> (Pseudo AnyEnum)+> False,+> CatCreateFunction FunName "eqjoinsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int2", Pseudo Internal]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "eqsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "euc_cn_to_mic"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "euc_cn_to_utf8"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "euc_jis_2004_to_shift_jis_2004"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "euc_jis_2004_to_utf8"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "euc_jp_to_mic"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "euc_jp_to_sjis"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "euc_jp_to_utf8"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "euc_kr_to_mic"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "euc_kr_to_utf8"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "euc_tw_to_big5"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "euc_tw_to_mic"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "euc_tw_to_utf8"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "exp" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "exp" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "factorial" [ScalarType "int8"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "family" [ScalarType "inet"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "flatfile_update_trigger" []+> (Pseudo Trigger)+> False,+> CatCreateFunction FunName "float4" [ScalarType "int8"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "float4" [ScalarType "int2"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "float4" [ScalarType "int4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "float4" [ScalarType "float8"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "float4" [ScalarType "numeric"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "float48div"+> [ScalarType "float4", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float48eq"+> [ScalarType "float4", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float48ge"+> [ScalarType "float4", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float48gt"+> [ScalarType "float4", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float48le"+> [ScalarType "float4", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float48lt"+> [ScalarType "float4", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float48mi"+> [ScalarType "float4", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float48mul"+> [ScalarType "float4", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float48ne"+> [ScalarType "float4", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float48pl"+> [ScalarType "float4", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float4_accum"+> [ArrayType (ScalarType "float8"), ScalarType "float4"]+> (ArrayType (ScalarType "float8"))+> False,+> CatCreateFunction FunName "float4abs" [ScalarType "float4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "float4div"+> [ScalarType "float4", ScalarType "float4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "float4eq"+> [ScalarType "float4", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float4ge"+> [ScalarType "float4", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float4gt"+> [ScalarType "float4", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float4in" [Pseudo Cstring]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "float4larger"+> [ScalarType "float4", ScalarType "float4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "float4le"+> [ScalarType "float4", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float4lt"+> [ScalarType "float4", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float4mi"+> [ScalarType "float4", ScalarType "float4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "float4mul"+> [ScalarType "float4", ScalarType "float4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "float4ne"+> [ScalarType "float4", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float4out" [ScalarType "float4"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "float4pl"+> [ScalarType "float4", ScalarType "float4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "float4recv" [Pseudo Internal]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "float4send" [ScalarType "float4"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "float4smaller"+> [ScalarType "float4", ScalarType "float4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "float4um" [ScalarType "float4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "float4up" [ScalarType "float4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "float8" [ScalarType "int8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8" [ScalarType "int2"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8" [ScalarType "int4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8" [ScalarType "float4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8" [ScalarType "numeric"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float84div"+> [ScalarType "float8", ScalarType "float4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float84eq"+> [ScalarType "float8", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float84ge"+> [ScalarType "float8", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float84gt"+> [ScalarType "float8", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float84le"+> [ScalarType "float8", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float84lt"+> [ScalarType "float8", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float84mi"+> [ScalarType "float8", ScalarType "float4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float84mul"+> [ScalarType "float8", ScalarType "float4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float84ne"+> [ScalarType "float8", ScalarType "float4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float84pl"+> [ScalarType "float8", ScalarType "float4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8_accum"+> [ArrayType (ScalarType "float8"), ScalarType "float8"]+> (ArrayType (ScalarType "float8"))+> False,+> CatCreateFunction FunName "float8_avg"+> [ArrayType (ScalarType "float8")]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8_corr"+> [ArrayType (ScalarType "float8")]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8_covar_pop"+> [ArrayType (ScalarType "float8")]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8_covar_samp"+> [ArrayType (ScalarType "float8")]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8_regr_accum"+> [ArrayType (ScalarType "float8"), ScalarType "float8",+> ScalarType "float8"]+> (ArrayType (ScalarType "float8"))+> False,+> CatCreateFunction FunName "float8_regr_avgx"+> [ArrayType (ScalarType "float8")]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8_regr_avgy"+> [ArrayType (ScalarType "float8")]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8_regr_intercept"+> [ArrayType (ScalarType "float8")]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8_regr_r2"+> [ArrayType (ScalarType "float8")]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8_regr_slope"+> [ArrayType (ScalarType "float8")]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8_regr_sxx"+> [ArrayType (ScalarType "float8")]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8_regr_sxy"+> [ArrayType (ScalarType "float8")]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8_regr_syy"+> [ArrayType (ScalarType "float8")]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8_stddev_pop"+> [ArrayType (ScalarType "float8")]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8_stddev_samp"+> [ArrayType (ScalarType "float8")]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8_var_pop"+> [ArrayType (ScalarType "float8")]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8_var_samp"+> [ArrayType (ScalarType "float8")]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8abs" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8div"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8eq"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float8ge"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float8gt"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float8in" [Pseudo Cstring]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8larger"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8le"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float8lt"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float8mi"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8mul"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8ne"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "float8out" [ScalarType "float8"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "float8pl"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8recv" [Pseudo Internal]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8send" [ScalarType "float8"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "float8smaller"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8um" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "float8up" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "floor" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "floor" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "flt4_mul_cash"+> [ScalarType "float4", ScalarType "money"]+> (ScalarType "money")+> False,+> CatCreateFunction FunName "flt8_mul_cash"+> [ScalarType "float8", ScalarType "money"]+> (ScalarType "money")+> False,+> CatCreateFunction FunName "fmgr_c_validator" [ScalarType "oid"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "fmgr_internal_validator"+> [ScalarType "oid"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "fmgr_sql_validator" [ScalarType "oid"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "format_type"+> [ScalarType "oid", ScalarType "int4"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "gb18030_to_utf8"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "gbk_to_utf8"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "generate_series"+> [ScalarType "int8", ScalarType "int8"]+> (SetOfType (ScalarType "int8"))+> False,+> CatCreateFunction FunName "generate_series"+> [ScalarType "int4", ScalarType "int4"]+> (SetOfType (ScalarType "int4"))+> False,+> CatCreateFunction FunName "generate_series"+> [ScalarType "int8", ScalarType "int8", ScalarType "int8"]+> (SetOfType (ScalarType "int8"))+> False,+> CatCreateFunction FunName "generate_series"+> [ScalarType "int4", ScalarType "int4", ScalarType "int4"]+> (SetOfType (ScalarType "int4"))+> False,+> CatCreateFunction FunName "generate_series"+> [ScalarType "timestamp", ScalarType "timestamp",+> ScalarType "interval"]+> (SetOfType (ScalarType "timestamp"))+> False,+> CatCreateFunction FunName "generate_series"+> [ScalarType "timestamptz", ScalarType "timestamptz",+> ScalarType "interval"]+> (SetOfType (ScalarType "timestamptz"))+> False,+> CatCreateFunction FunName "generate_subscripts"+> [Pseudo AnyArray, ScalarType "int4"]+> (SetOfType (ScalarType "int4"))+> False,+> CatCreateFunction FunName "generate_subscripts"+> [Pseudo AnyArray, ScalarType "int4", ScalarType "bool"]+> (SetOfType (ScalarType "int4"))+> False,+> CatCreateFunction FunName "get_bit"+> [ScalarType "bytea", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "get_byte"+> [ScalarType "bytea", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "get_current_ts_config" []+> (ScalarType "regconfig")+> False,+> CatCreateFunction FunName "getdatabaseencoding" []+> (ScalarType "name")+> False,+> CatCreateFunction FunName "getpgusername" [] (ScalarType "name")+> False,+> CatCreateFunction FunName "gin_cmp_prefix"+> [ScalarType "text", ScalarType "text", ScalarType "int2",+> Pseudo Internal]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "gin_cmp_tslexeme"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "gin_extract_tsquery"+> [ScalarType "tsquery", Pseudo Internal, ScalarType "int2",+> Pseudo Internal, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gin_extract_tsvector"+> [ScalarType "tsvector", Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gin_tsquery_consistent"+> [Pseudo Internal, ScalarType "int2", ScalarType "tsquery",+> ScalarType "int4", Pseudo Internal, Pseudo Internal]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "ginarrayconsistent"+> [Pseudo Internal, ScalarType "int2", Pseudo AnyArray,+> ScalarType "int4", Pseudo Internal, Pseudo Internal]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "ginarrayextract"+> [Pseudo AnyArray, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "ginbeginscan"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "ginbuild"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "ginbulkdelete"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal,+> Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gincostestimate"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal,+> Pseudo Internal, Pseudo Internal, Pseudo Internal, Pseudo Internal,+> Pseudo Internal]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "ginendscan" [Pseudo Internal]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "gingetbitmap"+> [Pseudo Internal, Pseudo Internal]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "gininsert"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal,+> Pseudo Internal, Pseudo Internal, Pseudo Internal]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "ginmarkpos" [Pseudo Internal]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "ginoptions"+> [ArrayType (ScalarType "text"), ScalarType "bool"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "ginqueryarrayextract"+> [Pseudo AnyArray, Pseudo Internal, ScalarType "int2",+> Pseudo Internal, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "ginrescan"+> [Pseudo Internal, Pseudo Internal]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "ginrestrpos" [Pseudo Internal]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "ginvacuumcleanup"+> [Pseudo Internal, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gist_box_compress" [Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gist_box_consistent"+> [Pseudo Internal, ScalarType "box", ScalarType "int4",+> ScalarType "oid", Pseudo Internal]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "gist_box_decompress" [Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gist_box_penalty"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gist_box_picksplit"+> [Pseudo Internal, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gist_box_same"+> [ScalarType "box", ScalarType "box", Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gist_box_union"+> [Pseudo Internal, Pseudo Internal]+> (ScalarType "box")+> False,+> CatCreateFunction FunName "gist_circle_compress" [Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gist_circle_consistent"+> [Pseudo Internal, ScalarType "circle", ScalarType "int4",+> ScalarType "oid", Pseudo Internal]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "gist_poly_compress" [Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gist_poly_consistent"+> [Pseudo Internal, ScalarType "polygon", ScalarType "int4",+> ScalarType "oid", Pseudo Internal]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "gistbeginscan"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gistbuild"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gistbulkdelete"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal,+> Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gistcostestimate"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal,+> Pseudo Internal, Pseudo Internal, Pseudo Internal, Pseudo Internal,+> Pseudo Internal]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "gistendscan" [Pseudo Internal]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "gistgetbitmap"+> [Pseudo Internal, Pseudo Internal]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "gistgettuple"+> [Pseudo Internal, Pseudo Internal]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "gistinsert"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal,+> Pseudo Internal, Pseudo Internal, Pseudo Internal]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "gistmarkpos" [Pseudo Internal]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "gistoptions"+> [ArrayType (ScalarType "text"), ScalarType "bool"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "gistrescan"+> [Pseudo Internal, Pseudo Internal]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "gistrestrpos" [Pseudo Internal]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "gistvacuumcleanup"+> [Pseudo Internal, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gtsquery_compress" [Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gtsquery_consistent"+> [Pseudo Internal, Pseudo Internal, ScalarType "int4",+> ScalarType "oid", Pseudo Internal]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "gtsquery_decompress" [Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gtsquery_penalty"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gtsquery_picksplit"+> [Pseudo Internal, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gtsquery_same"+> [ScalarType "int8", ScalarType "int8", Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gtsquery_union"+> [Pseudo Internal, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gtsvector_compress" [Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gtsvector_consistent"+> [Pseudo Internal, ScalarType "gtsvector", ScalarType "int4",+> ScalarType "oid", Pseudo Internal]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "gtsvector_decompress" [Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gtsvector_penalty"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gtsvector_picksplit"+> [Pseudo Internal, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gtsvector_same"+> [ScalarType "gtsvector", ScalarType "gtsvector", Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gtsvector_union"+> [Pseudo Internal, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "gtsvectorin" [Pseudo Cstring]+> (ScalarType "gtsvector")+> False,+> CatCreateFunction FunName "gtsvectorout" [ScalarType "gtsvector"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "has_any_column_privilege"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_any_column_privilege"+> [ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_any_column_privilege"+> [ScalarType "name", ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_any_column_privilege"+> [ScalarType "name", ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_any_column_privilege"+> [ScalarType "oid", ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_any_column_privilege"+> [ScalarType "oid", ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_column_privilege"+> [ScalarType "text", ScalarType "int2", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_column_privilege"+> [ScalarType "text", ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_column_privilege"+> [ScalarType "oid", ScalarType "int2", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_column_privilege"+> [ScalarType "oid", ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_column_privilege"+> [ScalarType "name", ScalarType "text", ScalarType "int2",+> ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_column_privilege"+> [ScalarType "name", ScalarType "text", ScalarType "text",+> ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_column_privilege"+> [ScalarType "name", ScalarType "oid", ScalarType "int2",+> ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_column_privilege"+> [ScalarType "name", ScalarType "oid", ScalarType "text",+> ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_column_privilege"+> [ScalarType "oid", ScalarType "text", ScalarType "int2",+> ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_column_privilege"+> [ScalarType "oid", ScalarType "text", ScalarType "text",+> ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_column_privilege"+> [ScalarType "oid", ScalarType "oid", ScalarType "int2",+> ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_column_privilege"+> [ScalarType "oid", ScalarType "oid", ScalarType "text",+> ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_database_privilege"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_database_privilege"+> [ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_database_privilege"+> [ScalarType "name", ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_database_privilege"+> [ScalarType "name", ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_database_privilege"+> [ScalarType "oid", ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_database_privilege"+> [ScalarType "oid", ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_foreign_data_wrapper_privilege"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_foreign_data_wrapper_privilege"+> [ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_foreign_data_wrapper_privilege"+> [ScalarType "name", ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_foreign_data_wrapper_privilege"+> [ScalarType "name", ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_foreign_data_wrapper_privilege"+> [ScalarType "oid", ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_foreign_data_wrapper_privilege"+> [ScalarType "oid", ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_function_privilege"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_function_privilege"+> [ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_function_privilege"+> [ScalarType "name", ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_function_privilege"+> [ScalarType "name", ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_function_privilege"+> [ScalarType "oid", ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_function_privilege"+> [ScalarType "oid", ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_language_privilege"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_language_privilege"+> [ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_language_privilege"+> [ScalarType "name", ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_language_privilege"+> [ScalarType "name", ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_language_privilege"+> [ScalarType "oid", ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_language_privilege"+> [ScalarType "oid", ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_schema_privilege"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_schema_privilege"+> [ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_schema_privilege"+> [ScalarType "name", ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_schema_privilege"+> [ScalarType "name", ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_schema_privilege"+> [ScalarType "oid", ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_schema_privilege"+> [ScalarType "oid", ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_server_privilege"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_server_privilege"+> [ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_server_privilege"+> [ScalarType "name", ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_server_privilege"+> [ScalarType "name", ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_server_privilege"+> [ScalarType "oid", ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_server_privilege"+> [ScalarType "oid", ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_table_privilege"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_table_privilege"+> [ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_table_privilege"+> [ScalarType "name", ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_table_privilege"+> [ScalarType "name", ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_table_privilege"+> [ScalarType "oid", ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_table_privilege"+> [ScalarType "oid", ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_tablespace_privilege"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_tablespace_privilege"+> [ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_tablespace_privilege"+> [ScalarType "name", ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_tablespace_privilege"+> [ScalarType "name", ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_tablespace_privilege"+> [ScalarType "oid", ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "has_tablespace_privilege"+> [ScalarType "oid", ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "hash_aclitem" [ScalarType "aclitem"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "hash_numeric" [ScalarType "numeric"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "hashbeginscan"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "hashbpchar" [ScalarType "bpchar"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "hashbuild"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "hashbulkdelete"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal,+> Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "hashchar" [ScalarType "char"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "hashcostestimate"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal,+> Pseudo Internal, Pseudo Internal, Pseudo Internal, Pseudo Internal,+> Pseudo Internal]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "hashendscan" [Pseudo Internal]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "hashenum" [Pseudo AnyEnum]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "hashfloat4" [ScalarType "float4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "hashfloat8" [ScalarType "float8"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "hashgetbitmap"+> [Pseudo Internal, Pseudo Internal]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "hashgettuple"+> [Pseudo Internal, Pseudo Internal]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "hashinet" [ScalarType "inet"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "hashinsert"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal,+> Pseudo Internal, Pseudo Internal, Pseudo Internal]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "hashint2" [ScalarType "int2"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "hashint2vector"+> [ScalarType "int2vector"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "hashint4" [ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "hashint8" [ScalarType "int8"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "hashmacaddr" [ScalarType "macaddr"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "hashmarkpos" [Pseudo Internal]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "hashname" [ScalarType "name"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "hashoid" [ScalarType "oid"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "hashoidvector" [ScalarType "oidvector"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "hashoptions"+> [ArrayType (ScalarType "text"), ScalarType "bool"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "hashrescan"+> [Pseudo Internal, Pseudo Internal]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "hashrestrpos" [Pseudo Internal]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "hashtext" [ScalarType "text"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "hashvacuumcleanup"+> [Pseudo Internal, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "hashvarlena" [Pseudo Internal]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "height" [ScalarType "box"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "host" [ScalarType "inet"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "hostmask" [ScalarType "inet"]+> (ScalarType "inet")+> False,+> CatCreateFunction FunName "iclikejoinsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int2", Pseudo Internal]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "iclikesel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "icnlikejoinsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int2", Pseudo Internal]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "icnlikesel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "icregexeqjoinsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int2", Pseudo Internal]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "icregexeqsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "icregexnejoinsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int2", Pseudo Internal]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "icregexnesel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "inet_client_addr" [] (ScalarType "inet")+> False,+> CatCreateFunction FunName "inet_client_port" [] (ScalarType "int4")+> False,+> CatCreateFunction FunName "inet_in" [Pseudo Cstring]+> (ScalarType "inet")+> False,+> CatCreateFunction FunName "inet_out" [ScalarType "inet"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "inet_recv" [Pseudo Internal]+> (ScalarType "inet")+> False,+> CatCreateFunction FunName "inet_send" [ScalarType "inet"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "inet_server_addr" [] (ScalarType "inet")+> False,+> CatCreateFunction FunName "inet_server_port" [] (ScalarType "int4")+> False,+> CatCreateFunction FunName "inetand"+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "inet")+> False,+> CatCreateFunction FunName "inetmi"+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "inetmi_int8"+> [ScalarType "inet", ScalarType "int8"]+> (ScalarType "inet")+> False,+> CatCreateFunction FunName "inetnot" [ScalarType "inet"]+> (ScalarType "inet")+> False,+> CatCreateFunction FunName "inetor"+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "inet")+> False,+> CatCreateFunction FunName "inetpl"+> [ScalarType "inet", ScalarType "int8"]+> (ScalarType "inet")+> False,+> CatCreateFunction FunName "initcap" [ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "int2" [ScalarType "int8"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "int2" [ScalarType "int4"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "int2" [ScalarType "float4"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "int2" [ScalarType "float8"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "int2" [ScalarType "numeric"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "int24div"+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int24eq"+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int24ge"+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int24gt"+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int24le"+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int24lt"+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int24mi"+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int24mul"+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int24ne"+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int24pl"+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int28div"+> [ScalarType "int2", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int28eq"+> [ScalarType "int2", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int28ge"+> [ScalarType "int2", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int28gt"+> [ScalarType "int2", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int28le"+> [ScalarType "int2", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int28lt"+> [ScalarType "int2", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int28mi"+> [ScalarType "int2", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int28mul"+> [ScalarType "int2", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int28ne"+> [ScalarType "int2", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int28pl"+> [ScalarType "int2", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int2_accum"+> [ArrayType (ScalarType "numeric"), ScalarType "int2"]+> (ArrayType (ScalarType "numeric"))+> False,+> CatCreateFunction FunName "int2_avg_accum"+> [ArrayType (ScalarType "int8"), ScalarType "int2"]+> (ArrayType (ScalarType "int8"))+> False,+> CatCreateFunction FunName "int2_mul_cash"+> [ScalarType "int2", ScalarType "money"]+> (ScalarType "money")+> False,+> CatCreateFunction FunName "int2_sum"+> [ScalarType "int8", ScalarType "int2"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int2abs" [ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "int2and"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "int2div"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "int2eq"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int2ge"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int2gt"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int2in" [Pseudo Cstring]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "int2larger"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "int2le"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int2lt"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int2mi"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "int2mod"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "int2mul"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "int2ne"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int2not" [ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "int2or"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "int2out" [ScalarType "int2"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "int2pl"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "int2recv" [Pseudo Internal]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "int2send" [ScalarType "int2"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "int2shl"+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "int2shr"+> [ScalarType "int2", ScalarType "int4"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "int2smaller"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "int2um" [ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "int2up" [ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "int2vectoreq"+> [ScalarType "int2vector", ScalarType "int2vector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int2vectorin" [Pseudo Cstring]+> (ScalarType "int2vector")+> False,+> CatCreateFunction FunName "int2vectorout" [ScalarType "int2vector"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "int2vectorrecv" [Pseudo Internal]+> (ScalarType "int2vector")+> False,+> CatCreateFunction FunName "int2vectorsend"+> [ScalarType "int2vector"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "int2xor"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "int4" [ScalarType "bool"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4" [ScalarType "char"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4" [ScalarType "int8"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4" [ScalarType "int2"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4" [ScalarType "float4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4" [ScalarType "float8"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4" [ScalarType "bit"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4" [ScalarType "numeric"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int42div"+> [ScalarType "int4", ScalarType "int2"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int42eq"+> [ScalarType "int4", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int42ge"+> [ScalarType "int4", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int42gt"+> [ScalarType "int4", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int42le"+> [ScalarType "int4", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int42lt"+> [ScalarType "int4", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int42mi"+> [ScalarType "int4", ScalarType "int2"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int42mul"+> [ScalarType "int4", ScalarType "int2"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int42ne"+> [ScalarType "int4", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int42pl"+> [ScalarType "int4", ScalarType "int2"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int48div"+> [ScalarType "int4", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int48eq"+> [ScalarType "int4", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int48ge"+> [ScalarType "int4", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int48gt"+> [ScalarType "int4", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int48le"+> [ScalarType "int4", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int48lt"+> [ScalarType "int4", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int48mi"+> [ScalarType "int4", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int48mul"+> [ScalarType "int4", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int48ne"+> [ScalarType "int4", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int48pl"+> [ScalarType "int4", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int4_accum"+> [ArrayType (ScalarType "numeric"), ScalarType "int4"]+> (ArrayType (ScalarType "numeric"))+> False,+> CatCreateFunction FunName "int4_avg_accum"+> [ArrayType (ScalarType "int8"), ScalarType "int4"]+> (ArrayType (ScalarType "int8"))+> False,+> CatCreateFunction FunName "int4_mul_cash"+> [ScalarType "int4", ScalarType "money"]+> (ScalarType "money")+> False,+> CatCreateFunction FunName "int4_sum"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int4abs" [ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4and"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4div"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4eq"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int4ge"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int4gt"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int4in" [Pseudo Cstring]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4inc" [ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4larger"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4le"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int4lt"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int4mi"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4mod"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4mul"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4ne"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int4not" [ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4or"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4out" [ScalarType "int4"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "int4pl"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4recv" [Pseudo Internal]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4send" [ScalarType "int4"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "int4shl"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4shr"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4smaller"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4um" [ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4up" [ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int4xor"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "int8" [ScalarType "int2"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8" [ScalarType "int4"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8" [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8" [ScalarType "float4"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8" [ScalarType "float8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8" [ScalarType "bit"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8" [ScalarType "numeric"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int82div"+> [ScalarType "int8", ScalarType "int2"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int82eq"+> [ScalarType "int8", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int82ge"+> [ScalarType "int8", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int82gt"+> [ScalarType "int8", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int82le"+> [ScalarType "int8", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int82lt"+> [ScalarType "int8", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int82mi"+> [ScalarType "int8", ScalarType "int2"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int82mul"+> [ScalarType "int8", ScalarType "int2"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int82ne"+> [ScalarType "int8", ScalarType "int2"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int82pl"+> [ScalarType "int8", ScalarType "int2"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int84div"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int84eq"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int84ge"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int84gt"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int84le"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int84lt"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int84mi"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int84mul"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int84ne"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int84pl"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8_accum"+> [ArrayType (ScalarType "numeric"), ScalarType "int8"]+> (ArrayType (ScalarType "numeric"))+> False,+> CatCreateFunction FunName "int8_avg"+> [ArrayType (ScalarType "int8")]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "int8_avg_accum"+> [ArrayType (ScalarType "numeric"), ScalarType "int8"]+> (ArrayType (ScalarType "numeric"))+> False,+> CatCreateFunction FunName "int8_sum"+> [ScalarType "numeric", ScalarType "int8"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "int8abs" [ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8and"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8div"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8eq"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int8ge"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int8gt"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int8in" [Pseudo Cstring]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8inc" [ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8inc_any"+> [ScalarType "int8", Pseudo Any]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8inc_float8_float8"+> [ScalarType "int8", ScalarType "float8", ScalarType "float8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8larger"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8le"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int8lt"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int8mi"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8mod"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8mul"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8ne"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "int8not" [ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8or"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8out" [ScalarType "int8"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "int8pl"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8pl_inet"+> [ScalarType "int8", ScalarType "inet"]+> (ScalarType "inet")+> False,+> CatCreateFunction FunName "int8recv" [Pseudo Internal]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8send" [ScalarType "int8"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "int8shl"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8shr"+> [ScalarType "int8", ScalarType "int4"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8smaller"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8um" [ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8up" [ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "int8xor"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "integer_pl_date"+> [ScalarType "int4", ScalarType "date"]+> (ScalarType "date")+> False,+> CatCreateFunction FunName "inter_lb"+> [ScalarType "line", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "inter_sb"+> [ScalarType "lseg", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "inter_sl"+> [ScalarType "lseg", ScalarType "line"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "internal_in" [Pseudo Cstring]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "internal_out" [Pseudo Internal]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "interval" [ScalarType "reltime"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "interval" [ScalarType "time"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "interval"+> [ScalarType "interval", ScalarType "int4"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "interval_accum"+> [ArrayType (ScalarType "interval"), ScalarType "interval"]+> (ArrayType (ScalarType "interval"))+> False,+> CatCreateFunction FunName "interval_avg"+> [ArrayType (ScalarType "interval")]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "interval_cmp"+> [ScalarType "interval", ScalarType "interval"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "interval_div"+> [ScalarType "interval", ScalarType "float8"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "interval_eq"+> [ScalarType "interval", ScalarType "interval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "interval_ge"+> [ScalarType "interval", ScalarType "interval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "interval_gt"+> [ScalarType "interval", ScalarType "interval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "interval_hash" [ScalarType "interval"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "interval_in"+> [Pseudo Cstring, ScalarType "oid", ScalarType "int4"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "interval_larger"+> [ScalarType "interval", ScalarType "interval"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "interval_le"+> [ScalarType "interval", ScalarType "interval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "interval_lt"+> [ScalarType "interval", ScalarType "interval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "interval_mi"+> [ScalarType "interval", ScalarType "interval"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "interval_mul"+> [ScalarType "interval", ScalarType "float8"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "interval_ne"+> [ScalarType "interval", ScalarType "interval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "interval_out" [ScalarType "interval"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "interval_pl"+> [ScalarType "interval", ScalarType "interval"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "interval_pl_date"+> [ScalarType "interval", ScalarType "date"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunName "interval_pl_time"+> [ScalarType "interval", ScalarType "time"]+> (ScalarType "time")+> False,+> CatCreateFunction FunName "interval_pl_timestamp"+> [ScalarType "interval", ScalarType "timestamp"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunName "interval_pl_timestamptz"+> [ScalarType "interval", ScalarType "timestamptz"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "interval_pl_timetz"+> [ScalarType "interval", ScalarType "timetz"]+> (ScalarType "timetz")+> False,+> CatCreateFunction FunName "interval_recv"+> [Pseudo Internal, ScalarType "oid", ScalarType "int4"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "interval_send" [ScalarType "interval"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "interval_smaller"+> [ScalarType "interval", ScalarType "interval"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "interval_um" [ScalarType "interval"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "intervaltypmodin"+> [ArrayType (Pseudo Cstring)]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "intervaltypmodout" [ScalarType "int4"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "intinterval"+> [ScalarType "abstime", ScalarType "tinterval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "isclosed" [ScalarType "path"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "isfinite" [ScalarType "abstime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "isfinite" [ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "isfinite" [ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "isfinite" [ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "isfinite" [ScalarType "interval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "ishorizontal" [ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "ishorizontal" [ScalarType "line"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "ishorizontal"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "iso8859_1_to_utf8"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "iso8859_to_utf8"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "iso_to_koi8r"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "iso_to_mic"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "iso_to_win1251"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "iso_to_win866"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "isopen" [ScalarType "path"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "isparallel"+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "isparallel"+> [ScalarType "line", ScalarType "line"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "isperp"+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "isperp"+> [ScalarType "line", ScalarType "line"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "isvertical" [ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "isvertical" [ScalarType "line"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "isvertical"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "johab_to_utf8"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "justify_days" [ScalarType "interval"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "justify_hours" [ScalarType "interval"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "justify_interval"+> [ScalarType "interval"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "koi8r_to_iso"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "koi8r_to_mic"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "koi8r_to_utf8"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "koi8r_to_win1251"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "koi8r_to_win866"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "koi8u_to_utf8"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "language_handler_in" [Pseudo Cstring]+> (Pseudo LanguageHandler)+> False,+> CatCreateFunction FunName "language_handler_out"+> [Pseudo LanguageHandler]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "lastval" [] (ScalarType "int8") False,+> CatCreateFunction FunName "latin1_to_mic"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "latin2_to_mic"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "latin2_to_win1250"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "latin3_to_mic"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "latin4_to_mic"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "length" [ScalarType "bytea"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "length" [ScalarType "text"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "length" [ScalarType "lseg"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "length" [ScalarType "path"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "length" [ScalarType "bpchar"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "length" [ScalarType "bit"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "length" [ScalarType "tsvector"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "length"+> [ScalarType "bytea", ScalarType "name"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "like"+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "like"+> [ScalarType "name", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "like"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "like_escape"+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "like_escape"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "likejoinsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int2", Pseudo Internal]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "likesel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "line"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "line")+> False,+> CatCreateFunction FunName "line_distance"+> [ScalarType "line", ScalarType "line"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "line_eq"+> [ScalarType "line", ScalarType "line"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "line_horizontal" [ScalarType "line"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "line_in" [Pseudo Cstring]+> (ScalarType "line")+> False,+> CatCreateFunction FunName "line_interpt"+> [ScalarType "line", ScalarType "line"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "line_intersect"+> [ScalarType "line", ScalarType "line"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "line_out" [ScalarType "line"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "line_parallel"+> [ScalarType "line", ScalarType "line"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "line_perp"+> [ScalarType "line", ScalarType "line"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "line_recv" [Pseudo Internal]+> (ScalarType "line")+> False,+> CatCreateFunction FunName "line_send" [ScalarType "line"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "line_vertical" [ScalarType "line"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "ln" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "ln" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "lo_close" [ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "lo_creat" [ScalarType "int4"]+> (ScalarType "oid")+> False,+> CatCreateFunction FunName "lo_create" [ScalarType "oid"]+> (ScalarType "oid")+> False,+> CatCreateFunction FunName "lo_export"+> [ScalarType "oid", ScalarType "text"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "lo_import" [ScalarType "text"]+> (ScalarType "oid")+> False,+> CatCreateFunction FunName "lo_import"+> [ScalarType "text", ScalarType "oid"]+> (ScalarType "oid")+> False,+> CatCreateFunction FunName "lo_lseek"+> [ScalarType "int4", ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "lo_open"+> [ScalarType "oid", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "lo_tell" [ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "lo_truncate"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "lo_unlink" [ScalarType "oid"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "log" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "log" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "log"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "loread"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "lower" [ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "lowrite"+> [ScalarType "int4", ScalarType "bytea"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "lpad"+> [ScalarType "text", ScalarType "int4"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "lpad"+> [ScalarType "text", ScalarType "int4", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "lseg" [ScalarType "box"]+> (ScalarType "lseg")+> False,+> CatCreateFunction FunName "lseg"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "lseg")+> False,+> CatCreateFunction FunName "lseg_center" [ScalarType "lseg"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "lseg_distance"+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "lseg_eq"+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "lseg_ge"+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "lseg_gt"+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "lseg_horizontal" [ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "lseg_in" [Pseudo Cstring]+> (ScalarType "lseg")+> False,+> CatCreateFunction FunName "lseg_interpt"+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "lseg_intersect"+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "lseg_le"+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "lseg_length" [ScalarType "lseg"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "lseg_lt"+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "lseg_ne"+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "lseg_out" [ScalarType "lseg"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "lseg_parallel"+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "lseg_perp"+> [ScalarType "lseg", ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "lseg_recv" [Pseudo Internal]+> (ScalarType "lseg")+> False,+> CatCreateFunction FunName "lseg_send" [ScalarType "lseg"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "lseg_vertical" [ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "ltrim" [ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "ltrim"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "macaddr_cmp"+> [ScalarType "macaddr", ScalarType "macaddr"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "macaddr_eq"+> [ScalarType "macaddr", ScalarType "macaddr"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "macaddr_ge"+> [ScalarType "macaddr", ScalarType "macaddr"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "macaddr_gt"+> [ScalarType "macaddr", ScalarType "macaddr"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "macaddr_in" [Pseudo Cstring]+> (ScalarType "macaddr")+> False,+> CatCreateFunction FunName "macaddr_le"+> [ScalarType "macaddr", ScalarType "macaddr"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "macaddr_lt"+> [ScalarType "macaddr", ScalarType "macaddr"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "macaddr_ne"+> [ScalarType "macaddr", ScalarType "macaddr"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "macaddr_out" [ScalarType "macaddr"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "macaddr_recv" [Pseudo Internal]+> (ScalarType "macaddr")+> False,+> CatCreateFunction FunName "macaddr_send" [ScalarType "macaddr"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "makeaclitem"+> [ScalarType "oid", ScalarType "oid", ScalarType "text",+> ScalarType "bool"]+> (ScalarType "aclitem")+> False,+> CatCreateFunction FunName "masklen" [ScalarType "inet"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "md5" [ScalarType "bytea"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "md5" [ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "mic_to_ascii"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "mic_to_big5"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "mic_to_euc_cn"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "mic_to_euc_jp"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "mic_to_euc_kr"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "mic_to_euc_tw"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "mic_to_iso"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "mic_to_koi8r"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "mic_to_latin1"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "mic_to_latin2"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "mic_to_latin3"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "mic_to_latin4"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "mic_to_sjis"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "mic_to_win1250"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "mic_to_win1251"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "mic_to_win866"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "mktinterval"+> [ScalarType "abstime", ScalarType "abstime"]+> (ScalarType "tinterval")+> False,+> CatCreateFunction FunName "mod"+> [ScalarType "int8", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "mod"+> [ScalarType "int2", ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunName "mod"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "mod"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "mul_d_interval"+> [ScalarType "float8", ScalarType "interval"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "name" [ScalarType "text"]+> (ScalarType "name")+> False,+> CatCreateFunction FunName "name" [ScalarType "bpchar"]+> (ScalarType "name")+> False,+> CatCreateFunction FunName "name" [ScalarType "varchar"]+> (ScalarType "name")+> False,+> CatCreateFunction FunName "nameeq"+> [ScalarType "name", ScalarType "name"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "namege"+> [ScalarType "name", ScalarType "name"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "namegt"+> [ScalarType "name", ScalarType "name"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "nameiclike"+> [ScalarType "name", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "nameicnlike"+> [ScalarType "name", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "nameicregexeq"+> [ScalarType "name", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "nameicregexne"+> [ScalarType "name", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "namein" [Pseudo Cstring]+> (ScalarType "name")+> False,+> CatCreateFunction FunName "namele"+> [ScalarType "name", ScalarType "name"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "namelike"+> [ScalarType "name", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "namelt"+> [ScalarType "name", ScalarType "name"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "namene"+> [ScalarType "name", ScalarType "name"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "namenlike"+> [ScalarType "name", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "nameout" [ScalarType "name"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "namerecv" [Pseudo Internal]+> (ScalarType "name")+> False,+> CatCreateFunction FunName "nameregexeq"+> [ScalarType "name", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "nameregexne"+> [ScalarType "name", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "namesend" [ScalarType "name"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "neqjoinsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int2", Pseudo Internal]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "neqsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "netmask" [ScalarType "inet"]+> (ScalarType "inet")+> False,+> CatCreateFunction FunName "network" [ScalarType "inet"]+> (ScalarType "cidr")+> False,+> CatCreateFunction FunName "network_cmp"+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "network_eq"+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "network_ge"+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "network_gt"+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "network_le"+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "network_lt"+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "network_ne"+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "network_sub"+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "network_subeq"+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "network_sup"+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "network_supeq"+> [ScalarType "inet", ScalarType "inet"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "nextval" [ScalarType "regclass"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "nlikejoinsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int2", Pseudo Internal]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "nlikesel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "notlike"+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "notlike"+> [ScalarType "name", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "notlike"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "now" [] (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "npoints" [ScalarType "path"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "npoints" [ScalarType "polygon"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "numeric" [ScalarType "int8"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric" [ScalarType "int2"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric" [ScalarType "int4"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric" [ScalarType "float4"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric" [ScalarType "float8"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric"+> [ScalarType "numeric", ScalarType "int4"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_abs" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_accum"+> [ArrayType (ScalarType "numeric"), ScalarType "numeric"]+> (ArrayType (ScalarType "numeric"))+> False,+> CatCreateFunction FunName "numeric_add"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_avg"+> [ArrayType (ScalarType "numeric")]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_avg_accum"+> [ArrayType (ScalarType "numeric"), ScalarType "numeric"]+> (ArrayType (ScalarType "numeric"))+> False,+> CatCreateFunction FunName "numeric_cmp"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "numeric_div"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_div_trunc"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_eq"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "numeric_exp" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_fac" [ScalarType "int8"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_ge"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "numeric_gt"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "numeric_in"+> [Pseudo Cstring, ScalarType "oid", ScalarType "int4"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_inc" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_larger"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_le"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "numeric_ln" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_log"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_lt"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "numeric_mod"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_mul"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_ne"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "numeric_out" [ScalarType "numeric"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "numeric_power"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_recv"+> [Pseudo Internal, ScalarType "oid", ScalarType "int4"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_send" [ScalarType "numeric"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "numeric_smaller"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_sqrt" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_stddev_pop"+> [ArrayType (ScalarType "numeric")]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_stddev_samp"+> [ArrayType (ScalarType "numeric")]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_sub"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_uminus" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_uplus" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_var_pop"+> [ArrayType (ScalarType "numeric")]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numeric_var_samp"+> [ArrayType (ScalarType "numeric")]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "numerictypmodin"+> [ArrayType (Pseudo Cstring)]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "numerictypmodout" [ScalarType "int4"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "numnode" [ScalarType "tsquery"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "obj_description" [ScalarType "oid"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "obj_description"+> [ScalarType "oid", ScalarType "name"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "octet_length" [ScalarType "bytea"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "octet_length" [ScalarType "text"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "octet_length" [ScalarType "bpchar"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "octet_length" [ScalarType "bit"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "oid" [ScalarType "int8"]+> (ScalarType "oid")+> False,+> CatCreateFunction FunName "oideq"+> [ScalarType "oid", ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "oidge"+> [ScalarType "oid", ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "oidgt"+> [ScalarType "oid", ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "oidin" [Pseudo Cstring]+> (ScalarType "oid")+> False,+> CatCreateFunction FunName "oidlarger"+> [ScalarType "oid", ScalarType "oid"]+> (ScalarType "oid")+> False,+> CatCreateFunction FunName "oidle"+> [ScalarType "oid", ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "oidlt"+> [ScalarType "oid", ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "oidne"+> [ScalarType "oid", ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "oidout" [ScalarType "oid"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "oidrecv" [Pseudo Internal]+> (ScalarType "oid")+> False,+> CatCreateFunction FunName "oidsend" [ScalarType "oid"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "oidsmaller"+> [ScalarType "oid", ScalarType "oid"]+> (ScalarType "oid")+> False,+> CatCreateFunction FunName "oidvectoreq"+> [ScalarType "oidvector", ScalarType "oidvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "oidvectorge"+> [ScalarType "oidvector", ScalarType "oidvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "oidvectorgt"+> [ScalarType "oidvector", ScalarType "oidvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "oidvectorin" [Pseudo Cstring]+> (ScalarType "oidvector")+> False,+> CatCreateFunction FunName "oidvectorle"+> [ScalarType "oidvector", ScalarType "oidvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "oidvectorlt"+> [ScalarType "oidvector", ScalarType "oidvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "oidvectorne"+> [ScalarType "oidvector", ScalarType "oidvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "oidvectorout" [ScalarType "oidvector"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "oidvectorrecv" [Pseudo Internal]+> (ScalarType "oidvector")+> False,+> CatCreateFunction FunName "oidvectorsend" [ScalarType "oidvector"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "oidvectortypes" [ScalarType "oidvector"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "on_pb"+> [ScalarType "point", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "on_pl"+> [ScalarType "point", ScalarType "line"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "on_ppath"+> [ScalarType "point", ScalarType "path"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "on_ps"+> [ScalarType "point", ScalarType "lseg"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "on_sb"+> [ScalarType "lseg", ScalarType "box"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "on_sl"+> [ScalarType "lseg", ScalarType "line"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "opaque_in" [Pseudo Cstring]+> (Pseudo Opaque)+> False,+> CatCreateFunction FunName "opaque_out" [Pseudo Opaque]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "overlaps"+> [ScalarType "time", ScalarType "time", ScalarType "time",+> ScalarType "time"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "overlaps"+> [ScalarType "time", ScalarType "time", ScalarType "time",+> ScalarType "interval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "overlaps"+> [ScalarType "time", ScalarType "interval", ScalarType "time",+> ScalarType "time"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "overlaps"+> [ScalarType "time", ScalarType "interval", ScalarType "time",+> ScalarType "interval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "overlaps"+> [ScalarType "timestamp", ScalarType "timestamp",+> ScalarType "timestamp", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "overlaps"+> [ScalarType "timestamp", ScalarType "timestamp",+> ScalarType "timestamp", ScalarType "interval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "overlaps"+> [ScalarType "timestamp", ScalarType "interval",+> ScalarType "timestamp", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "overlaps"+> [ScalarType "timestamp", ScalarType "interval",+> ScalarType "timestamp", ScalarType "interval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "overlaps"+> [ScalarType "timestamptz", ScalarType "timestamptz",+> ScalarType "timestamptz", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "overlaps"+> [ScalarType "timestamptz", ScalarType "timestamptz",+> ScalarType "timestamptz", ScalarType "interval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "overlaps"+> [ScalarType "timestamptz", ScalarType "interval",+> ScalarType "timestamptz", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "overlaps"+> [ScalarType "timestamptz", ScalarType "interval",+> ScalarType "timestamptz", ScalarType "interval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "overlaps"+> [ScalarType "timetz", ScalarType "timetz", ScalarType "timetz",+> ScalarType "timetz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "overlay"+> [ScalarType "text", ScalarType "text", ScalarType "int4"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "overlay"+> [ScalarType "text", ScalarType "text", ScalarType "int4",+> ScalarType "int4"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "path" [ScalarType "polygon"]+> (ScalarType "path")+> False,+> CatCreateFunction FunName "path_add"+> [ScalarType "path", ScalarType "path"]+> (ScalarType "path")+> False,+> CatCreateFunction FunName "path_add_pt"+> [ScalarType "path", ScalarType "point"]+> (ScalarType "path")+> False,+> CatCreateFunction FunName "path_center" [ScalarType "path"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "path_contain_pt"+> [ScalarType "path", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "path_distance"+> [ScalarType "path", ScalarType "path"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "path_div_pt"+> [ScalarType "path", ScalarType "point"]+> (ScalarType "path")+> False,+> CatCreateFunction FunName "path_in" [Pseudo Cstring]+> (ScalarType "path")+> False,+> CatCreateFunction FunName "path_inter"+> [ScalarType "path", ScalarType "path"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "path_length" [ScalarType "path"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "path_mul_pt"+> [ScalarType "path", ScalarType "point"]+> (ScalarType "path")+> False,+> CatCreateFunction FunName "path_n_eq"+> [ScalarType "path", ScalarType "path"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "path_n_ge"+> [ScalarType "path", ScalarType "path"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "path_n_gt"+> [ScalarType "path", ScalarType "path"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "path_n_le"+> [ScalarType "path", ScalarType "path"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "path_n_lt"+> [ScalarType "path", ScalarType "path"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "path_npoints" [ScalarType "path"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "path_out" [ScalarType "path"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "path_recv" [Pseudo Internal]+> (ScalarType "path")+> False,+> CatCreateFunction FunName "path_send" [ScalarType "path"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "path_sub_pt"+> [ScalarType "path", ScalarType "point"]+> (ScalarType "path")+> False,+> CatCreateFunction FunName "pclose" [ScalarType "path"]+> (ScalarType "path")+> False,+> CatCreateFunction FunName "pg_advisory_lock" [ScalarType "int8"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "pg_advisory_lock"+> [ScalarType "int4", ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "pg_advisory_lock_shared"+> [ScalarType "int8"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "pg_advisory_lock_shared"+> [ScalarType "int4", ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "pg_advisory_unlock" [ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_advisory_unlock"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_advisory_unlock_all" [] (Pseudo Void)+> False,+> CatCreateFunction FunName "pg_advisory_unlock_shared"+> [ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_advisory_unlock_shared"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_backend_pid" [] (ScalarType "int4")+> False,+> CatCreateFunction FunName "pg_cancel_backend" [ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_char_to_encoding" [ScalarType "name"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "pg_client_encoding" []+> (ScalarType "name")+> False,+> CatCreateFunction FunName "pg_column_size" [Pseudo Any]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "pg_conf_load_time" []+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "pg_conversion_is_visible"+> [ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_current_xlog_insert_location" []+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_current_xlog_location" []+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_cursor" []+> (SetOfType (Pseudo Record))+> False,+> CatCreateFunction FunName "pg_database_size" [ScalarType "name"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_database_size" [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_encoding_to_char" [ScalarType "int4"]+> (ScalarType "name")+> False,+> CatCreateFunction FunName "pg_function_is_visible"+> [ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_get_constraintdef" [ScalarType "oid"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_get_constraintdef"+> [ScalarType "oid", ScalarType "bool"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_get_expr"+> [ScalarType "text", ScalarType "oid"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_get_expr"+> [ScalarType "text", ScalarType "oid", ScalarType "bool"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_get_function_arguments"+> [ScalarType "oid"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_get_function_identity_arguments"+> [ScalarType "oid"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_get_function_result"+> [ScalarType "oid"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_get_functiondef" [ScalarType "oid"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_get_indexdef" [ScalarType "oid"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_get_indexdef"+> [ScalarType "oid", ScalarType "int4", ScalarType "bool"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_get_keywords" []+> (SetOfType (Pseudo Record))+> False,+> CatCreateFunction FunName "pg_get_ruledef" [ScalarType "oid"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_get_ruledef"+> [ScalarType "oid", ScalarType "bool"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_get_serial_sequence"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_get_triggerdef" [ScalarType "oid"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_get_userbyid" [ScalarType "oid"]+> (ScalarType "name")+> False,+> CatCreateFunction FunName "pg_get_viewdef" [ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_get_viewdef" [ScalarType "oid"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_get_viewdef"+> [ScalarType "text", ScalarType "bool"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_get_viewdef"+> [ScalarType "oid", ScalarType "bool"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_has_role"+> [ScalarType "name", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_has_role"+> [ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_has_role"+> [ScalarType "name", ScalarType "name", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_has_role"+> [ScalarType "name", ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_has_role"+> [ScalarType "oid", ScalarType "name", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_has_role"+> [ScalarType "oid", ScalarType "oid", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_is_other_temp_schema"+> [ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_lock_status" []+> (SetOfType (Pseudo Record))+> False,+> CatCreateFunction FunName "pg_ls_dir" [ScalarType "text"]+> (SetOfType (ScalarType "text"))+> False,+> CatCreateFunction FunName "pg_my_temp_schema" [] (ScalarType "oid")+> False,+> CatCreateFunction FunName "pg_opclass_is_visible"+> [ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_operator_is_visible"+> [ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_options_to_table"+> [ArrayType (ScalarType "text")]+> (SetOfType (Pseudo Record))+> False,+> CatCreateFunction FunName "pg_postmaster_start_time" []+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "pg_prepared_statement" []+> (SetOfType (Pseudo Record))+> False,+> CatCreateFunction FunName "pg_prepared_xact" []+> (SetOfType (Pseudo Record))+> False,+> CatCreateFunction FunName "pg_read_file"+> [ScalarType "text", ScalarType "int8", ScalarType "int8"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_relation_size"+> [ScalarType "regclass"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_relation_size"+> [ScalarType "regclass", ScalarType "text"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_reload_conf" [] (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_rotate_logfile" []+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_show_all_settings" []+> (SetOfType (Pseudo Record))+> False,+> CatCreateFunction FunName "pg_size_pretty" [ScalarType "int8"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_sleep" [ScalarType "float8"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "pg_start_backup"+> [ScalarType "text", ScalarType "bool"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_stat_clear_snapshot" [] (Pseudo Void)+> False,+> CatCreateFunction FunName "pg_stat_file" [ScalarType "text"]+> (Pseudo Record)+> False,+> CatCreateFunction FunName "pg_stat_get_activity"+> [ScalarType "int4"]+> (SetOfType (Pseudo Record))+> False,+> CatCreateFunction FunName "pg_stat_get_backend_activity"+> [ScalarType "int4"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_stat_get_backend_activity_start"+> [ScalarType "int4"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "pg_stat_get_backend_client_addr"+> [ScalarType "int4"]+> (ScalarType "inet")+> False,+> CatCreateFunction FunName "pg_stat_get_backend_client_port"+> [ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "pg_stat_get_backend_dbid"+> [ScalarType "int4"]+> (ScalarType "oid")+> False,+> CatCreateFunction FunName "pg_stat_get_backend_idset" []+> (SetOfType (ScalarType "int4"))+> False,+> CatCreateFunction FunName "pg_stat_get_backend_pid"+> [ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "pg_stat_get_backend_start"+> [ScalarType "int4"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "pg_stat_get_backend_userid"+> [ScalarType "int4"]+> (ScalarType "oid")+> False,+> CatCreateFunction FunName "pg_stat_get_backend_waiting"+> [ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_stat_get_backend_xact_start"+> [ScalarType "int4"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName+> "pg_stat_get_bgwriter_buf_written_checkpoints"+> []+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_bgwriter_buf_written_clean"+> []+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_bgwriter_maxwritten_clean"+> []+> (ScalarType "int8")+> False,+> CatCreateFunction FunName+> "pg_stat_get_bgwriter_requested_checkpoints"+> []+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_bgwriter_timed_checkpoints"+> []+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_blocks_fetched"+> [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_blocks_hit"+> [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_buf_alloc" []+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_buf_written_backend" []+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_db_blocks_fetched"+> [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_db_blocks_hit"+> [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_db_numbackends"+> [ScalarType "oid"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "pg_stat_get_db_tuples_deleted"+> [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_db_tuples_fetched"+> [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_db_tuples_inserted"+> [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_db_tuples_returned"+> [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_db_tuples_updated"+> [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_db_xact_commit"+> [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_db_xact_rollback"+> [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_dead_tuples"+> [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_function_calls"+> [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_function_self_time"+> [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_function_time"+> [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_last_analyze_time"+> [ScalarType "oid"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "pg_stat_get_last_autoanalyze_time"+> [ScalarType "oid"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "pg_stat_get_last_autovacuum_time"+> [ScalarType "oid"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "pg_stat_get_last_vacuum_time"+> [ScalarType "oid"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "pg_stat_get_live_tuples"+> [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_numscans" [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_tuples_deleted"+> [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_tuples_fetched"+> [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_tuples_hot_updated"+> [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_tuples_inserted"+> [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_tuples_returned"+> [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_get_tuples_updated"+> [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_stat_reset" [] (Pseudo Void) False,+> CatCreateFunction FunName "pg_stop_backup" [] (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_switch_xlog" [] (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_table_is_visible" [ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_tablespace_databases"+> [ScalarType "oid"]+> (SetOfType (ScalarType "oid"))+> False,+> CatCreateFunction FunName "pg_tablespace_size" [ScalarType "name"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_tablespace_size" [ScalarType "oid"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_terminate_backend"+> [ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_timezone_abbrevs" []+> (SetOfType (Pseudo Record))+> False,+> CatCreateFunction FunName "pg_timezone_names" []+> (SetOfType (Pseudo Record))+> False,+> CatCreateFunction FunName "pg_total_relation_size"+> [ScalarType "regclass"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "pg_try_advisory_lock"+> [ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_try_advisory_lock"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_try_advisory_lock_shared"+> [ScalarType "int8"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_try_advisory_lock_shared"+> [ScalarType "int4", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_ts_config_is_visible"+> [ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_ts_dict_is_visible"+> [ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_ts_parser_is_visible"+> [ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_ts_template_is_visible"+> [ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_type_is_visible" [ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pg_typeof" [Pseudo Any]+> (ScalarType "regtype")+> False,+> CatCreateFunction FunName "pg_xlogfile_name" [ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "pg_xlogfile_name_offset"+> [ScalarType "text"]+> (Pseudo Record)+> False,+> CatCreateFunction FunName "pi" [] (ScalarType "float8") False,+> CatCreateFunction FunName "plainto_tsquery" [ScalarType "text"]+> (ScalarType "tsquery")+> False,+> CatCreateFunction FunName "plainto_tsquery"+> [ScalarType "regconfig", ScalarType "text"]+> (ScalarType "tsquery")+> False,+> CatCreateFunction FunName "point" [ScalarType "lseg"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "point" [ScalarType "path"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "point" [ScalarType "box"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "point" [ScalarType "polygon"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "point" [ScalarType "circle"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "point"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "point_above"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "point_add"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "point_below"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "point_distance"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "point_div"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "point_eq"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "point_horiz"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "point_in" [Pseudo Cstring]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "point_left"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "point_mul"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "point_ne"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "point_out" [ScalarType "point"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "point_recv" [Pseudo Internal]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "point_right"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "point_send" [ScalarType "point"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "point_sub"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "point_vert"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "poly_above"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "poly_below"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "poly_center" [ScalarType "polygon"]+> (ScalarType "point")+> False,+> CatCreateFunction FunName "poly_contain"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "poly_contain_pt"+> [ScalarType "polygon", ScalarType "point"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "poly_contained"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "poly_distance"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "poly_in" [Pseudo Cstring]+> (ScalarType "polygon")+> False,+> CatCreateFunction FunName "poly_left"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "poly_npoints" [ScalarType "polygon"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "poly_out" [ScalarType "polygon"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "poly_overabove"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "poly_overbelow"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "poly_overlap"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "poly_overleft"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "poly_overright"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "poly_recv" [Pseudo Internal]+> (ScalarType "polygon")+> False,+> CatCreateFunction FunName "poly_right"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "poly_same"+> [ScalarType "polygon", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "poly_send" [ScalarType "polygon"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "polygon" [ScalarType "path"]+> (ScalarType "polygon")+> False,+> CatCreateFunction FunName "polygon" [ScalarType "box"]+> (ScalarType "polygon")+> False,+> CatCreateFunction FunName "polygon" [ScalarType "circle"]+> (ScalarType "polygon")+> False,+> CatCreateFunction FunName "polygon"+> [ScalarType "int4", ScalarType "circle"]+> (ScalarType "polygon")+> False,+> CatCreateFunction FunName "popen" [ScalarType "path"]+> (ScalarType "path")+> False,+> CatCreateFunction FunName "position"+> [ScalarType "bytea", ScalarType "bytea"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "position"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "position"+> [ScalarType "bit", ScalarType "bit"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "positionjoinsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int2", Pseudo Internal]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "positionsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "postgresql_fdw_validator"+> [ArrayType (ScalarType "text"), ScalarType "oid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pow"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "pow"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "power"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "power"+> [ScalarType "numeric", ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "prsd_end" [Pseudo Internal]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "prsd_headline"+> [Pseudo Internal, Pseudo Internal, ScalarType "tsquery"]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "prsd_lextype" [Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "prsd_nexttoken"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "prsd_start"+> [Pseudo Internal, ScalarType "int4"]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "pt_contained_circle"+> [ScalarType "point", ScalarType "circle"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "pt_contained_poly"+> [ScalarType "point", ScalarType "polygon"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "query_to_xml"+> [ScalarType "text", ScalarType "bool", ScalarType "bool",+> ScalarType "text"]+> (ScalarType "xml")+> False,+> CatCreateFunction FunName "query_to_xml_and_xmlschema"+> [ScalarType "text", ScalarType "bool", ScalarType "bool",+> ScalarType "text"]+> (ScalarType "xml")+> False,+> CatCreateFunction FunName "query_to_xmlschema"+> [ScalarType "text", ScalarType "bool", ScalarType "bool",+> ScalarType "text"]+> (ScalarType "xml")+> False,+> CatCreateFunction FunName "querytree" [ScalarType "tsquery"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "quote_ident" [ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "quote_literal" [ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "quote_literal" [Pseudo AnyElement]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "quote_nullable" [ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "quote_nullable" [Pseudo AnyElement]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "radians" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "radius" [ScalarType "circle"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "random" [] (ScalarType "float8") False,+> CatCreateFunction FunName "record_eq"+> [Pseudo Record, Pseudo Record]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "record_ge"+> [Pseudo Record, Pseudo Record]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "record_gt"+> [Pseudo Record, Pseudo Record]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "record_in"+> [Pseudo Cstring, ScalarType "oid", ScalarType "int4"]+> (Pseudo Record)+> False,+> CatCreateFunction FunName "record_le"+> [Pseudo Record, Pseudo Record]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "record_lt"+> [Pseudo Record, Pseudo Record]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "record_ne"+> [Pseudo Record, Pseudo Record]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "record_out" [Pseudo Record]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "record_recv"+> [Pseudo Internal, ScalarType "oid", ScalarType "int4"]+> (Pseudo Record)+> False,+> CatCreateFunction FunName "record_send" [Pseudo Record]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "regclass" [ScalarType "text"]+> (ScalarType "regclass")+> False,+> CatCreateFunction FunName "regclassin" [Pseudo Cstring]+> (ScalarType "regclass")+> False,+> CatCreateFunction FunName "regclassout" [ScalarType "regclass"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "regclassrecv" [Pseudo Internal]+> (ScalarType "regclass")+> False,+> CatCreateFunction FunName "regclasssend" [ScalarType "regclass"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "regconfigin" [Pseudo Cstring]+> (ScalarType "regconfig")+> False,+> CatCreateFunction FunName "regconfigout" [ScalarType "regconfig"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "regconfigrecv" [Pseudo Internal]+> (ScalarType "regconfig")+> False,+> CatCreateFunction FunName "regconfigsend" [ScalarType "regconfig"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "regdictionaryin" [Pseudo Cstring]+> (ScalarType "regdictionary")+> False,+> CatCreateFunction FunName "regdictionaryout"+> [ScalarType "regdictionary"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "regdictionaryrecv" [Pseudo Internal]+> (ScalarType "regdictionary")+> False,+> CatCreateFunction FunName "regdictionarysend"+> [ScalarType "regdictionary"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "regexeqjoinsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int2", Pseudo Internal]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "regexeqsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "regexnejoinsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int2", Pseudo Internal]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "regexnesel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "regexp_matches"+> [ScalarType "text", ScalarType "text"]+> (SetOfType (ArrayType (ScalarType "text")))+> False,+> CatCreateFunction FunName "regexp_matches"+> [ScalarType "text", ScalarType "text", ScalarType "text"]+> (SetOfType (ArrayType (ScalarType "text")))+> False,+> CatCreateFunction FunName "regexp_replace"+> [ScalarType "text", ScalarType "text", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "regexp_replace"+> [ScalarType "text", ScalarType "text", ScalarType "text",+> ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "regexp_split_to_array"+> [ScalarType "text", ScalarType "text"]+> (ArrayType (ScalarType "text"))+> False,+> CatCreateFunction FunName "regexp_split_to_array"+> [ScalarType "text", ScalarType "text", ScalarType "text"]+> (ArrayType (ScalarType "text"))+> False,+> CatCreateFunction FunName "regexp_split_to_table"+> [ScalarType "text", ScalarType "text"]+> (SetOfType (ScalarType "text"))+> False,+> CatCreateFunction FunName "regexp_split_to_table"+> [ScalarType "text", ScalarType "text", ScalarType "text"]+> (SetOfType (ScalarType "text"))+> False,+> CatCreateFunction FunName "regoperatorin" [Pseudo Cstring]+> (ScalarType "regoperator")+> False,+> CatCreateFunction FunName "regoperatorout"+> [ScalarType "regoperator"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "regoperatorrecv" [Pseudo Internal]+> (ScalarType "regoperator")+> False,+> CatCreateFunction FunName "regoperatorsend"+> [ScalarType "regoperator"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "regoperin" [Pseudo Cstring]+> (ScalarType "regoper")+> False,+> CatCreateFunction FunName "regoperout" [ScalarType "regoper"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "regoperrecv" [Pseudo Internal]+> (ScalarType "regoper")+> False,+> CatCreateFunction FunName "regopersend" [ScalarType "regoper"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "regprocedurein" [Pseudo Cstring]+> (ScalarType "regprocedure")+> False,+> CatCreateFunction FunName "regprocedureout"+> [ScalarType "regprocedure"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "regprocedurerecv" [Pseudo Internal]+> (ScalarType "regprocedure")+> False,+> CatCreateFunction FunName "regproceduresend"+> [ScalarType "regprocedure"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "regprocin" [Pseudo Cstring]+> (ScalarType "regproc")+> False,+> CatCreateFunction FunName "regprocout" [ScalarType "regproc"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "regprocrecv" [Pseudo Internal]+> (ScalarType "regproc")+> False,+> CatCreateFunction FunName "regprocsend" [ScalarType "regproc"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "regtypein" [Pseudo Cstring]+> (ScalarType "regtype")+> False,+> CatCreateFunction FunName "regtypeout" [ScalarType "regtype"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "regtyperecv" [Pseudo Internal]+> (ScalarType "regtype")+> False,+> CatCreateFunction FunName "regtypesend" [ScalarType "regtype"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "reltime" [ScalarType "interval"]+> (ScalarType "reltime")+> False,+> CatCreateFunction FunName "reltimeeq"+> [ScalarType "reltime", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "reltimege"+> [ScalarType "reltime", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "reltimegt"+> [ScalarType "reltime", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "reltimein" [Pseudo Cstring]+> (ScalarType "reltime")+> False,+> CatCreateFunction FunName "reltimele"+> [ScalarType "reltime", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "reltimelt"+> [ScalarType "reltime", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "reltimene"+> [ScalarType "reltime", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "reltimeout" [ScalarType "reltime"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "reltimerecv" [Pseudo Internal]+> (ScalarType "reltime")+> False,+> CatCreateFunction FunName "reltimesend" [ScalarType "reltime"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "repeat"+> [ScalarType "text", ScalarType "int4"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "replace"+> [ScalarType "text", ScalarType "text", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "round" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "round" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "round"+> [ScalarType "numeric", ScalarType "int4"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "rpad"+> [ScalarType "text", ScalarType "int4"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "rpad"+> [ScalarType "text", ScalarType "int4", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "rtrim" [ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "rtrim"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "scalargtjoinsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int2", Pseudo Internal]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "scalargtsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "scalarltjoinsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int2", Pseudo Internal]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "scalarltsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "schema_to_xml"+> [ScalarType "name", ScalarType "bool", ScalarType "bool",+> ScalarType "text"]+> (ScalarType "xml")+> False,+> CatCreateFunction FunName "schema_to_xml_and_xmlschema"+> [ScalarType "name", ScalarType "bool", ScalarType "bool",+> ScalarType "text"]+> (ScalarType "xml")+> False,+> CatCreateFunction FunName "schema_to_xmlschema"+> [ScalarType "name", ScalarType "bool", ScalarType "bool",+> ScalarType "text"]+> (ScalarType "xml")+> False,+> CatCreateFunction FunName "session_user" [] (ScalarType "name")+> False,+> CatCreateFunction FunName "set_bit"+> [ScalarType "bytea", ScalarType "int4", ScalarType "int4"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "set_byte"+> [ScalarType "bytea", ScalarType "int4", ScalarType "int4"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "set_config"+> [ScalarType "text", ScalarType "text", ScalarType "bool"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "set_masklen"+> [ScalarType "cidr", ScalarType "int4"]+> (ScalarType "cidr")+> False,+> CatCreateFunction FunName "set_masklen"+> [ScalarType "inet", ScalarType "int4"]+> (ScalarType "inet")+> False,+> CatCreateFunction FunName "setseed" [ScalarType "float8"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "setval"+> [ScalarType "regclass", ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "setval"+> [ScalarType "regclass", ScalarType "int8", ScalarType "bool"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "setweight"+> [ScalarType "tsvector", ScalarType "char"]+> (ScalarType "tsvector")+> False,+> CatCreateFunction FunName "shell_in" [Pseudo Cstring]+> (Pseudo Opaque)+> False,+> CatCreateFunction FunName "shell_out" [Pseudo Opaque]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "shift_jis_2004_to_euc_jis_2004"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "shift_jis_2004_to_utf8"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "shobj_description"+> [ScalarType "oid", ScalarType "name"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "sign" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "sign" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "similar_escape"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "sin" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "sjis_to_euc_jp"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "sjis_to_mic"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "sjis_to_utf8"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "slope"+> [ScalarType "point", ScalarType "point"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "smgreq"+> [ScalarType "smgr", ScalarType "smgr"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "smgrin" [Pseudo Cstring]+> (ScalarType "smgr")+> False,+> CatCreateFunction FunName "smgrne"+> [ScalarType "smgr", ScalarType "smgr"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "smgrout" [ScalarType "smgr"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "split_part"+> [ScalarType "text", ScalarType "text", ScalarType "int4"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "sqrt" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "sqrt" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "statement_timestamp" []+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "string_to_array"+> [ScalarType "text", ScalarType "text"]+> (ArrayType (ScalarType "text"))+> False,+> CatCreateFunction FunName "strip" [ScalarType "tsvector"]+> (ScalarType "tsvector")+> False,+> CatCreateFunction FunName "strpos"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "substr"+> [ScalarType "bytea", ScalarType "int4"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "substr"+> [ScalarType "text", ScalarType "int4"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "substr"+> [ScalarType "bytea", ScalarType "int4", ScalarType "int4"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "substr"+> [ScalarType "text", ScalarType "int4", ScalarType "int4"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "substring"+> [ScalarType "bytea", ScalarType "int4"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "substring"+> [ScalarType "text", ScalarType "int4"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "substring"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "substring"+> [ScalarType "bit", ScalarType "int4"]+> (ScalarType "bit")+> False,+> CatCreateFunction FunName "substring"+> [ScalarType "bytea", ScalarType "int4", ScalarType "int4"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "substring"+> [ScalarType "text", ScalarType "int4", ScalarType "int4"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "substring"+> [ScalarType "text", ScalarType "text", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "substring"+> [ScalarType "bit", ScalarType "int4", ScalarType "int4"]+> (ScalarType "bit")+> False,+> CatCreateFunction FunName "suppress_redundant_updates_trigger" []+> (Pseudo Trigger)+> False,+> CatCreateFunction FunName "table_to_xml"+> [ScalarType "regclass", ScalarType "bool", ScalarType "bool",+> ScalarType "text"]+> (ScalarType "xml")+> False,+> CatCreateFunction FunName "table_to_xml_and_xmlschema"+> [ScalarType "regclass", ScalarType "bool", ScalarType "bool",+> ScalarType "text"]+> (ScalarType "xml")+> False,+> CatCreateFunction FunName "table_to_xmlschema"+> [ScalarType "regclass", ScalarType "bool", ScalarType "bool",+> ScalarType "text"]+> (ScalarType "xml")+> False,+> CatCreateFunction FunName "tan" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "text" [ScalarType "bool"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "text" [ScalarType "char"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "text" [ScalarType "name"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "text" [ScalarType "xml"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "text" [ScalarType "inet"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "text" [ScalarType "bpchar"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "text_ge"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "text_gt"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "text_larger"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "text_le"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "text_lt"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "text_pattern_ge"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "text_pattern_gt"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "text_pattern_le"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "text_pattern_lt"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "text_smaller"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "textanycat"+> [ScalarType "text", Pseudo AnyNonArray]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "textcat"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "texteq"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "texticlike"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "texticnlike"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "texticregexeq"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "texticregexne"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "textin" [Pseudo Cstring]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "textlen" [ScalarType "text"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "textlike"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "textne"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "textnlike"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "textout" [ScalarType "text"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "textrecv" [Pseudo Internal]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "textregexeq"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "textregexne"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "textsend" [ScalarType "text"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "thesaurus_init" [Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "thesaurus_lexize"+> [Pseudo Internal, Pseudo Internal, Pseudo Internal,+> Pseudo Internal]+> (Pseudo Internal)+> False,+> CatCreateFunction FunName "tideq"+> [ScalarType "tid", ScalarType "tid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tidge"+> [ScalarType "tid", ScalarType "tid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tidgt"+> [ScalarType "tid", ScalarType "tid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tidin" [Pseudo Cstring]+> (ScalarType "tid")+> False,+> CatCreateFunction FunName "tidlarger"+> [ScalarType "tid", ScalarType "tid"]+> (ScalarType "tid")+> False,+> CatCreateFunction FunName "tidle"+> [ScalarType "tid", ScalarType "tid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tidlt"+> [ScalarType "tid", ScalarType "tid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tidne"+> [ScalarType "tid", ScalarType "tid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tidout" [ScalarType "tid"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "tidrecv" [Pseudo Internal]+> (ScalarType "tid")+> False,+> CatCreateFunction FunName "tidsend" [ScalarType "tid"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "tidsmaller"+> [ScalarType "tid", ScalarType "tid"]+> (ScalarType "tid")+> False,+> CatCreateFunction FunName "time" [ScalarType "abstime"]+> (ScalarType "time")+> False,+> CatCreateFunction FunName "time" [ScalarType "timestamp"]+> (ScalarType "time")+> False,+> CatCreateFunction FunName "time" [ScalarType "timestamptz"]+> (ScalarType "time")+> False,+> CatCreateFunction FunName "time" [ScalarType "interval"]+> (ScalarType "time")+> False,+> CatCreateFunction FunName "time" [ScalarType "timetz"]+> (ScalarType "time")+> False,+> CatCreateFunction FunName "time"+> [ScalarType "time", ScalarType "int4"]+> (ScalarType "time")+> False,+> CatCreateFunction FunName "time_cmp"+> [ScalarType "time", ScalarType "time"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "time_eq"+> [ScalarType "time", ScalarType "time"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "time_ge"+> [ScalarType "time", ScalarType "time"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "time_gt"+> [ScalarType "time", ScalarType "time"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "time_hash" [ScalarType "time"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "time_in"+> [Pseudo Cstring, ScalarType "oid", ScalarType "int4"]+> (ScalarType "time")+> False,+> CatCreateFunction FunName "time_larger"+> [ScalarType "time", ScalarType "time"]+> (ScalarType "time")+> False,+> CatCreateFunction FunName "time_le"+> [ScalarType "time", ScalarType "time"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "time_lt"+> [ScalarType "time", ScalarType "time"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "time_mi_interval"+> [ScalarType "time", ScalarType "interval"]+> (ScalarType "time")+> False,+> CatCreateFunction FunName "time_mi_time"+> [ScalarType "time", ScalarType "time"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "time_ne"+> [ScalarType "time", ScalarType "time"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "time_out" [ScalarType "time"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "time_pl_interval"+> [ScalarType "time", ScalarType "interval"]+> (ScalarType "time")+> False,+> CatCreateFunction FunName "time_recv"+> [Pseudo Internal, ScalarType "oid", ScalarType "int4"]+> (ScalarType "time")+> False,+> CatCreateFunction FunName "time_send" [ScalarType "time"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "time_smaller"+> [ScalarType "time", ScalarType "time"]+> (ScalarType "time")+> False,+> CatCreateFunction FunName "timedate_pl"+> [ScalarType "time", ScalarType "date"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunName "timemi"+> [ScalarType "abstime", ScalarType "reltime"]+> (ScalarType "abstime")+> False,+> CatCreateFunction FunName "timenow" [] (ScalarType "abstime")+> False,+> CatCreateFunction FunName "timeofday" [] (ScalarType "text") False,+> CatCreateFunction FunName "timepl"+> [ScalarType "abstime", ScalarType "reltime"]+> (ScalarType "abstime")+> False,+> CatCreateFunction FunName "timestamp" [ScalarType "abstime"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunName "timestamp" [ScalarType "date"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunName "timestamp" [ScalarType "timestamptz"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunName "timestamp"+> [ScalarType "date", ScalarType "time"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunName "timestamp"+> [ScalarType "timestamp", ScalarType "int4"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunName "timestamp_cmp"+> [ScalarType "timestamp", ScalarType "timestamp"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "timestamp_cmp_date"+> [ScalarType "timestamp", ScalarType "date"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "timestamp_cmp_timestamptz"+> [ScalarType "timestamp", ScalarType "timestamptz"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "timestamp_eq"+> [ScalarType "timestamp", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamp_eq_date"+> [ScalarType "timestamp", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamp_eq_timestamptz"+> [ScalarType "timestamp", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamp_ge"+> [ScalarType "timestamp", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamp_ge_date"+> [ScalarType "timestamp", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamp_ge_timestamptz"+> [ScalarType "timestamp", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamp_gt"+> [ScalarType "timestamp", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamp_gt_date"+> [ScalarType "timestamp", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamp_gt_timestamptz"+> [ScalarType "timestamp", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamp_hash" [ScalarType "timestamp"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "timestamp_in"+> [Pseudo Cstring, ScalarType "oid", ScalarType "int4"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunName "timestamp_larger"+> [ScalarType "timestamp", ScalarType "timestamp"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunName "timestamp_le"+> [ScalarType "timestamp", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamp_le_date"+> [ScalarType "timestamp", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamp_le_timestamptz"+> [ScalarType "timestamp", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamp_lt"+> [ScalarType "timestamp", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamp_lt_date"+> [ScalarType "timestamp", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamp_lt_timestamptz"+> [ScalarType "timestamp", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamp_mi"+> [ScalarType "timestamp", ScalarType "timestamp"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "timestamp_mi_interval"+> [ScalarType "timestamp", ScalarType "interval"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunName "timestamp_ne"+> [ScalarType "timestamp", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamp_ne_date"+> [ScalarType "timestamp", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamp_ne_timestamptz"+> [ScalarType "timestamp", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamp_out" [ScalarType "timestamp"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "timestamp_pl_interval"+> [ScalarType "timestamp", ScalarType "interval"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunName "timestamp_recv"+> [Pseudo Internal, ScalarType "oid", ScalarType "int4"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunName "timestamp_send" [ScalarType "timestamp"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "timestamp_smaller"+> [ScalarType "timestamp", ScalarType "timestamp"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunName "timestamptypmodin"+> [ArrayType (Pseudo Cstring)]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "timestamptypmodout" [ScalarType "int4"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "timestamptz" [ScalarType "abstime"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "timestamptz" [ScalarType "date"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "timestamptz" [ScalarType "timestamp"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "timestamptz"+> [ScalarType "date", ScalarType "time"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "timestamptz"+> [ScalarType "date", ScalarType "timetz"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "timestamptz"+> [ScalarType "timestamptz", ScalarType "int4"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "timestamptz_cmp"+> [ScalarType "timestamptz", ScalarType "timestamptz"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "timestamptz_cmp_date"+> [ScalarType "timestamptz", ScalarType "date"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "timestamptz_cmp_timestamp"+> [ScalarType "timestamptz", ScalarType "timestamp"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "timestamptz_eq"+> [ScalarType "timestamptz", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamptz_eq_date"+> [ScalarType "timestamptz", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamptz_eq_timestamp"+> [ScalarType "timestamptz", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamptz_ge"+> [ScalarType "timestamptz", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamptz_ge_date"+> [ScalarType "timestamptz", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamptz_ge_timestamp"+> [ScalarType "timestamptz", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamptz_gt"+> [ScalarType "timestamptz", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamptz_gt_date"+> [ScalarType "timestamptz", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamptz_gt_timestamp"+> [ScalarType "timestamptz", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamptz_in"+> [Pseudo Cstring, ScalarType "oid", ScalarType "int4"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "timestamptz_larger"+> [ScalarType "timestamptz", ScalarType "timestamptz"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "timestamptz_le"+> [ScalarType "timestamptz", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamptz_le_date"+> [ScalarType "timestamptz", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamptz_le_timestamp"+> [ScalarType "timestamptz", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamptz_lt"+> [ScalarType "timestamptz", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamptz_lt_date"+> [ScalarType "timestamptz", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamptz_lt_timestamp"+> [ScalarType "timestamptz", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamptz_mi"+> [ScalarType "timestamptz", ScalarType "timestamptz"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunName "timestamptz_mi_interval"+> [ScalarType "timestamptz", ScalarType "interval"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "timestamptz_ne"+> [ScalarType "timestamptz", ScalarType "timestamptz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamptz_ne_date"+> [ScalarType "timestamptz", ScalarType "date"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamptz_ne_timestamp"+> [ScalarType "timestamptz", ScalarType "timestamp"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timestamptz_out"+> [ScalarType "timestamptz"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "timestamptz_pl_interval"+> [ScalarType "timestamptz", ScalarType "interval"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "timestamptz_recv"+> [Pseudo Internal, ScalarType "oid", ScalarType "int4"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "timestamptz_send"+> [ScalarType "timestamptz"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "timestamptz_smaller"+> [ScalarType "timestamptz", ScalarType "timestamptz"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "timestamptztypmodin"+> [ArrayType (Pseudo Cstring)]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "timestamptztypmodout"+> [ScalarType "int4"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "timetypmodin"+> [ArrayType (Pseudo Cstring)]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "timetypmodout" [ScalarType "int4"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "timetz" [ScalarType "time"]+> (ScalarType "timetz")+> False,+> CatCreateFunction FunName "timetz" [ScalarType "timestamptz"]+> (ScalarType "timetz")+> False,+> CatCreateFunction FunName "timetz"+> [ScalarType "timetz", ScalarType "int4"]+> (ScalarType "timetz")+> False,+> CatCreateFunction FunName "timetz_cmp"+> [ScalarType "timetz", ScalarType "timetz"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "timetz_eq"+> [ScalarType "timetz", ScalarType "timetz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timetz_ge"+> [ScalarType "timetz", ScalarType "timetz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timetz_gt"+> [ScalarType "timetz", ScalarType "timetz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timetz_hash" [ScalarType "timetz"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "timetz_in"+> [Pseudo Cstring, ScalarType "oid", ScalarType "int4"]+> (ScalarType "timetz")+> False,+> CatCreateFunction FunName "timetz_larger"+> [ScalarType "timetz", ScalarType "timetz"]+> (ScalarType "timetz")+> False,+> CatCreateFunction FunName "timetz_le"+> [ScalarType "timetz", ScalarType "timetz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timetz_lt"+> [ScalarType "timetz", ScalarType "timetz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timetz_mi_interval"+> [ScalarType "timetz", ScalarType "interval"]+> (ScalarType "timetz")+> False,+> CatCreateFunction FunName "timetz_ne"+> [ScalarType "timetz", ScalarType "timetz"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "timetz_out" [ScalarType "timetz"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "timetz_pl_interval"+> [ScalarType "timetz", ScalarType "interval"]+> (ScalarType "timetz")+> False,+> CatCreateFunction FunName "timetz_recv"+> [Pseudo Internal, ScalarType "oid", ScalarType "int4"]+> (ScalarType "timetz")+> False,+> CatCreateFunction FunName "timetz_send" [ScalarType "timetz"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "timetz_smaller"+> [ScalarType "timetz", ScalarType "timetz"]+> (ScalarType "timetz")+> False,+> CatCreateFunction FunName "timetzdate_pl"+> [ScalarType "timetz", ScalarType "date"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "timetztypmodin"+> [ArrayType (Pseudo Cstring)]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "timetztypmodout" [ScalarType "int4"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "timezone"+> [ScalarType "text", ScalarType "timestamp"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "timezone"+> [ScalarType "text", ScalarType "timestamptz"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunName "timezone"+> [ScalarType "text", ScalarType "timetz"]+> (ScalarType "timetz")+> False,+> CatCreateFunction FunName "timezone"+> [ScalarType "interval", ScalarType "timestamp"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "timezone"+> [ScalarType "interval", ScalarType "timestamptz"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunName "timezone"+> [ScalarType "interval", ScalarType "timetz"]+> (ScalarType "timetz")+> False,+> CatCreateFunction FunName "tinterval"+> [ScalarType "abstime", ScalarType "abstime"]+> (ScalarType "tinterval")+> False,+> CatCreateFunction FunName "tintervalct"+> [ScalarType "tinterval", ScalarType "tinterval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tintervalend" [ScalarType "tinterval"]+> (ScalarType "abstime")+> False,+> CatCreateFunction FunName "tintervaleq"+> [ScalarType "tinterval", ScalarType "tinterval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tintervalge"+> [ScalarType "tinterval", ScalarType "tinterval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tintervalgt"+> [ScalarType "tinterval", ScalarType "tinterval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tintervalin" [Pseudo Cstring]+> (ScalarType "tinterval")+> False,+> CatCreateFunction FunName "tintervalle"+> [ScalarType "tinterval", ScalarType "tinterval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tintervalleneq"+> [ScalarType "tinterval", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tintervallenge"+> [ScalarType "tinterval", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tintervallengt"+> [ScalarType "tinterval", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tintervallenle"+> [ScalarType "tinterval", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tintervallenlt"+> [ScalarType "tinterval", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tintervallenne"+> [ScalarType "tinterval", ScalarType "reltime"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tintervallt"+> [ScalarType "tinterval", ScalarType "tinterval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tintervalne"+> [ScalarType "tinterval", ScalarType "tinterval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tintervalout" [ScalarType "tinterval"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "tintervalov"+> [ScalarType "tinterval", ScalarType "tinterval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tintervalrecv" [Pseudo Internal]+> (ScalarType "tinterval")+> False,+> CatCreateFunction FunName "tintervalrel" [ScalarType "tinterval"]+> (ScalarType "reltime")+> False,+> CatCreateFunction FunName "tintervalsame"+> [ScalarType "tinterval", ScalarType "tinterval"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tintervalsend" [ScalarType "tinterval"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "tintervalstart" [ScalarType "tinterval"]+> (ScalarType "abstime")+> False,+> CatCreateFunction FunName "to_ascii" [ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "to_ascii"+> [ScalarType "text", ScalarType "name"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "to_ascii"+> [ScalarType "text", ScalarType "int4"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "to_char"+> [ScalarType "int8", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "to_char"+> [ScalarType "int4", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "to_char"+> [ScalarType "float4", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "to_char"+> [ScalarType "float8", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "to_char"+> [ScalarType "timestamp", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "to_char"+> [ScalarType "timestamptz", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "to_char"+> [ScalarType "interval", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "to_char"+> [ScalarType "numeric", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "to_date"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "date")+> False,+> CatCreateFunction FunName "to_hex" [ScalarType "int8"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "to_hex" [ScalarType "int4"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "to_number"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "to_timestamp" [ScalarType "float8"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "to_timestamp"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "to_tsquery" [ScalarType "text"]+> (ScalarType "tsquery")+> False,+> CatCreateFunction FunName "to_tsquery"+> [ScalarType "regconfig", ScalarType "text"]+> (ScalarType "tsquery")+> False,+> CatCreateFunction FunName "to_tsvector" [ScalarType "text"]+> (ScalarType "tsvector")+> False,+> CatCreateFunction FunName "to_tsvector"+> [ScalarType "regconfig", ScalarType "text"]+> (ScalarType "tsvector")+> False,+> CatCreateFunction FunName "transaction_timestamp" []+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunName "translate"+> [ScalarType "text", ScalarType "text", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "trigger_in" [Pseudo Cstring]+> (Pseudo Trigger)+> False,+> CatCreateFunction FunName "trigger_out" [Pseudo Trigger]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "trunc" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "trunc" [ScalarType "macaddr"]+> (ScalarType "macaddr")+> False,+> CatCreateFunction FunName "trunc" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "trunc"+> [ScalarType "numeric", ScalarType "int4"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunName "ts_debug" [ScalarType "text"]+> (SetOfType (Pseudo Record))+> False,+> CatCreateFunction FunName "ts_debug"+> [ScalarType "regconfig", ScalarType "text"]+> (SetOfType (Pseudo Record))+> False,+> CatCreateFunction FunName "ts_headline"+> [ScalarType "text", ScalarType "tsquery"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "ts_headline"+> [ScalarType "text", ScalarType "tsquery", ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "ts_headline"+> [ScalarType "regconfig", ScalarType "text", ScalarType "tsquery"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "ts_headline"+> [ScalarType "regconfig", ScalarType "text", ScalarType "tsquery",+> ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "ts_lexize"+> [ScalarType "regdictionary", ScalarType "text"]+> (ArrayType (ScalarType "text"))+> False,+> CatCreateFunction FunName "ts_match_qv"+> [ScalarType "tsquery", ScalarType "tsvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "ts_match_tq"+> [ScalarType "text", ScalarType "tsquery"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "ts_match_tt"+> [ScalarType "text", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "ts_match_vq"+> [ScalarType "tsvector", ScalarType "tsquery"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "ts_parse"+> [ScalarType "text", ScalarType "text"]+> (SetOfType (Pseudo Record))+> False,+> CatCreateFunction FunName "ts_parse"+> [ScalarType "oid", ScalarType "text"]+> (SetOfType (Pseudo Record))+> False,+> CatCreateFunction FunName "ts_rank"+> [ScalarType "tsvector", ScalarType "tsquery"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "ts_rank"+> [ArrayType (ScalarType "float4"), ScalarType "tsvector",+> ScalarType "tsquery"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "ts_rank"+> [ScalarType "tsvector", ScalarType "tsquery", ScalarType "int4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "ts_rank"+> [ArrayType (ScalarType "float4"), ScalarType "tsvector",+> ScalarType "tsquery", ScalarType "int4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "ts_rank_cd"+> [ScalarType "tsvector", ScalarType "tsquery"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "ts_rank_cd"+> [ArrayType (ScalarType "float4"), ScalarType "tsvector",+> ScalarType "tsquery"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "ts_rank_cd"+> [ScalarType "tsvector", ScalarType "tsquery", ScalarType "int4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "ts_rank_cd"+> [ArrayType (ScalarType "float4"), ScalarType "tsvector",+> ScalarType "tsquery", ScalarType "int4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunName "ts_rewrite"+> [ScalarType "tsquery", ScalarType "text"]+> (ScalarType "tsquery")+> False,+> CatCreateFunction FunName "ts_rewrite"+> [ScalarType "tsquery", ScalarType "tsquery", ScalarType "tsquery"]+> (ScalarType "tsquery")+> False,+> CatCreateFunction FunName "ts_stat" [ScalarType "text"]+> (SetOfType (Pseudo Record))+> False,+> CatCreateFunction FunName "ts_stat"+> [ScalarType "text", ScalarType "text"]+> (SetOfType (Pseudo Record))+> False,+> CatCreateFunction FunName "ts_token_type" [ScalarType "text"]+> (SetOfType (Pseudo Record))+> False,+> CatCreateFunction FunName "ts_token_type" [ScalarType "oid"]+> (SetOfType (Pseudo Record))+> False,+> CatCreateFunction FunName "ts_typanalyze" [Pseudo Internal]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tsmatchjoinsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int2", Pseudo Internal]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "tsmatchsel"+> [Pseudo Internal, ScalarType "oid", Pseudo Internal,+> ScalarType "int4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "tsq_mcontained"+> [ScalarType "tsquery", ScalarType "tsquery"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tsq_mcontains"+> [ScalarType "tsquery", ScalarType "tsquery"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tsquery_and"+> [ScalarType "tsquery", ScalarType "tsquery"]+> (ScalarType "tsquery")+> False,+> CatCreateFunction FunName "tsquery_cmp"+> [ScalarType "tsquery", ScalarType "tsquery"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "tsquery_eq"+> [ScalarType "tsquery", ScalarType "tsquery"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tsquery_ge"+> [ScalarType "tsquery", ScalarType "tsquery"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tsquery_gt"+> [ScalarType "tsquery", ScalarType "tsquery"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tsquery_le"+> [ScalarType "tsquery", ScalarType "tsquery"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tsquery_lt"+> [ScalarType "tsquery", ScalarType "tsquery"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tsquery_ne"+> [ScalarType "tsquery", ScalarType "tsquery"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tsquery_not" [ScalarType "tsquery"]+> (ScalarType "tsquery")+> False,+> CatCreateFunction FunName "tsquery_or"+> [ScalarType "tsquery", ScalarType "tsquery"]+> (ScalarType "tsquery")+> False,+> CatCreateFunction FunName "tsqueryin" [Pseudo Cstring]+> (ScalarType "tsquery")+> False,+> CatCreateFunction FunName "tsqueryout" [ScalarType "tsquery"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "tsqueryrecv" [Pseudo Internal]+> (ScalarType "tsquery")+> False,+> CatCreateFunction FunName "tsquerysend" [ScalarType "tsquery"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "tsvector_cmp"+> [ScalarType "tsvector", ScalarType "tsvector"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "tsvector_concat"+> [ScalarType "tsvector", ScalarType "tsvector"]+> (ScalarType "tsvector")+> False,+> CatCreateFunction FunName "tsvector_eq"+> [ScalarType "tsvector", ScalarType "tsvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tsvector_ge"+> [ScalarType "tsvector", ScalarType "tsvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tsvector_gt"+> [ScalarType "tsvector", ScalarType "tsvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tsvector_le"+> [ScalarType "tsvector", ScalarType "tsvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tsvector_lt"+> [ScalarType "tsvector", ScalarType "tsvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tsvector_ne"+> [ScalarType "tsvector", ScalarType "tsvector"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "tsvector_update_trigger" []+> (Pseudo Trigger)+> False,+> CatCreateFunction FunName "tsvector_update_trigger_column" []+> (Pseudo Trigger)+> False,+> CatCreateFunction FunName "tsvectorin" [Pseudo Cstring]+> (ScalarType "tsvector")+> False,+> CatCreateFunction FunName "tsvectorout" [ScalarType "tsvector"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "tsvectorrecv" [Pseudo Internal]+> (ScalarType "tsvector")+> False,+> CatCreateFunction FunName "tsvectorsend" [ScalarType "tsvector"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "txid_current" [] (ScalarType "int8")+> False,+> CatCreateFunction FunName "txid_current_snapshot" []+> (ScalarType "txid_snapshot")+> False,+> CatCreateFunction FunName "txid_snapshot_in" [Pseudo Cstring]+> (ScalarType "txid_snapshot")+> False,+> CatCreateFunction FunName "txid_snapshot_out"+> [ScalarType "txid_snapshot"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "txid_snapshot_recv" [Pseudo Internal]+> (ScalarType "txid_snapshot")+> False,+> CatCreateFunction FunName "txid_snapshot_send"+> [ScalarType "txid_snapshot"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "txid_snapshot_xip"+> [ScalarType "txid_snapshot"]+> (SetOfType (ScalarType "int8"))+> False,+> CatCreateFunction FunName "txid_snapshot_xmax"+> [ScalarType "txid_snapshot"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "txid_snapshot_xmin"+> [ScalarType "txid_snapshot"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunName "txid_visible_in_snapshot"+> [ScalarType "int8", ScalarType "txid_snapshot"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "uhc_to_utf8"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "unknownin" [Pseudo Cstring]+> (ScalarType "unknown")+> False,+> CatCreateFunction FunName "unknownout" [ScalarType "unknown"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "unknownrecv" [Pseudo Internal]+> (ScalarType "unknown")+> False,+> CatCreateFunction FunName "unknownsend" [ScalarType "unknown"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "unnest" [Pseudo AnyArray]+> (SetOfType (Pseudo AnyElement))+> False,+> CatCreateFunction FunName "upper" [ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunName "utf8_to_ascii"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "utf8_to_big5"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "utf8_to_euc_cn"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "utf8_to_euc_jis_2004"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "utf8_to_euc_jp"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "utf8_to_euc_kr"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "utf8_to_euc_tw"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "utf8_to_gb18030"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "utf8_to_gbk"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "utf8_to_iso8859"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "utf8_to_iso8859_1"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "utf8_to_johab"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "utf8_to_koi8r"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "utf8_to_koi8u"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "utf8_to_shift_jis_2004"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "utf8_to_sjis"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "utf8_to_uhc"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "utf8_to_win"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "uuid_cmp"+> [ScalarType "uuid", ScalarType "uuid"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "uuid_eq"+> [ScalarType "uuid", ScalarType "uuid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "uuid_ge"+> [ScalarType "uuid", ScalarType "uuid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "uuid_gt"+> [ScalarType "uuid", ScalarType "uuid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "uuid_hash" [ScalarType "uuid"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "uuid_in" [Pseudo Cstring]+> (ScalarType "uuid")+> False,+> CatCreateFunction FunName "uuid_le"+> [ScalarType "uuid", ScalarType "uuid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "uuid_lt"+> [ScalarType "uuid", ScalarType "uuid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "uuid_ne"+> [ScalarType "uuid", ScalarType "uuid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "uuid_out" [ScalarType "uuid"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "uuid_recv" [Pseudo Internal]+> (ScalarType "uuid")+> False,+> CatCreateFunction FunName "uuid_send" [ScalarType "uuid"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "varbit"+> [ScalarType "varbit", ScalarType "int4", ScalarType "bool"]+> (ScalarType "varbit")+> False,+> CatCreateFunction FunName "varbit_in"+> [Pseudo Cstring, ScalarType "oid", ScalarType "int4"]+> (ScalarType "varbit")+> False,+> CatCreateFunction FunName "varbit_out" [ScalarType "varbit"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "varbit_recv"+> [Pseudo Internal, ScalarType "oid", ScalarType "int4"]+> (ScalarType "varbit")+> False,+> CatCreateFunction FunName "varbit_send" [ScalarType "varbit"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "varbitcmp"+> [ScalarType "varbit", ScalarType "varbit"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "varbiteq"+> [ScalarType "varbit", ScalarType "varbit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "varbitge"+> [ScalarType "varbit", ScalarType "varbit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "varbitgt"+> [ScalarType "varbit", ScalarType "varbit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "varbitle"+> [ScalarType "varbit", ScalarType "varbit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "varbitlt"+> [ScalarType "varbit", ScalarType "varbit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "varbitne"+> [ScalarType "varbit", ScalarType "varbit"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "varbittypmodin"+> [ArrayType (Pseudo Cstring)]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "varbittypmodout" [ScalarType "int4"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "varchar" [ScalarType "name"]+> (ScalarType "varchar")+> False,+> CatCreateFunction FunName "varchar"+> [ScalarType "varchar", ScalarType "int4", ScalarType "bool"]+> (ScalarType "varchar")+> False,+> CatCreateFunction FunName "varcharin"+> [Pseudo Cstring, ScalarType "oid", ScalarType "int4"]+> (ScalarType "varchar")+> False,+> CatCreateFunction FunName "varcharout" [ScalarType "varchar"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "varcharrecv"+> [Pseudo Internal, ScalarType "oid", ScalarType "int4"]+> (ScalarType "varchar")+> False,+> CatCreateFunction FunName "varcharsend" [ScalarType "varchar"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "varchartypmodin"+> [ArrayType (Pseudo Cstring)]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "varchartypmodout" [ScalarType "int4"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "version" [] (ScalarType "text") False,+> CatCreateFunction FunName "void_in" [Pseudo Cstring] (Pseudo Void)+> False,+> CatCreateFunction FunName "void_out" [Pseudo Void] (Pseudo Cstring)+> False,+> CatCreateFunction FunName "width" [ScalarType "box"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunName "width_bucket"+> [ScalarType "float8", ScalarType "float8", ScalarType "float8",+> ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "width_bucket"+> [ScalarType "numeric", ScalarType "numeric", ScalarType "numeric",+> ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunName "win1250_to_latin2"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "win1250_to_mic"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "win1251_to_iso"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "win1251_to_koi8r"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "win1251_to_mic"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "win1251_to_win866"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "win866_to_iso"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "win866_to_koi8r"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "win866_to_mic"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "win866_to_win1251"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "win_to_utf8"+> [ScalarType "int4", ScalarType "int4", Pseudo Cstring,+> Pseudo Internal, ScalarType "int4"]+> (Pseudo Void)+> False,+> CatCreateFunction FunName "xideq"+> [ScalarType "xid", ScalarType "xid"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "xideqint4"+> [ScalarType "xid", ScalarType "int4"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "xidin" [Pseudo Cstring]+> (ScalarType "xid")+> False,+> CatCreateFunction FunName "xidout" [ScalarType "xid"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "xidrecv" [Pseudo Internal]+> (ScalarType "xid")+> False,+> CatCreateFunction FunName "xidsend" [ScalarType "xid"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "xml" [ScalarType "text"]+> (ScalarType "xml")+> False,+> CatCreateFunction FunName "xml_in" [Pseudo Cstring]+> (ScalarType "xml")+> False,+> CatCreateFunction FunName "xml_out" [ScalarType "xml"]+> (Pseudo Cstring)+> False,+> CatCreateFunction FunName "xml_recv" [Pseudo Internal]+> (ScalarType "xml")+> False,+> CatCreateFunction FunName "xml_send" [ScalarType "xml"]+> (ScalarType "bytea")+> False,+> CatCreateFunction FunName "xmlcomment" [ScalarType "text"]+> (ScalarType "xml")+> False,+> CatCreateFunction FunName "xmlconcat2"+> [ScalarType "xml", ScalarType "xml"]+> (ScalarType "xml")+> False,+> CatCreateFunction FunName "xmlvalidate"+> [ScalarType "xml", ScalarType "text"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunName "xpath"+> [ScalarType "text", ScalarType "xml"]+> (ArrayType (ScalarType "xml"))+> False,+> CatCreateFunction FunName "xpath"+> [ScalarType "text", ScalarType "xml",+> ArrayType (ScalarType "text")]+> (ArrayType (ScalarType "xml"))+> False,+> CatCreateFunction FunAgg "array_agg" [Pseudo AnyElement]+> (Pseudo AnyArray)+> False,+> CatCreateFunction FunAgg "avg" [ScalarType "int8"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "avg" [ScalarType "int2"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "avg" [ScalarType "int4"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "avg" [ScalarType "float4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "avg" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "avg" [ScalarType "interval"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunAgg "avg" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "bit_and" [ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunAgg "bit_and" [ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunAgg "bit_and" [ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunAgg "bit_and" [ScalarType "bit"]+> (ScalarType "bit")+> False,+> CatCreateFunction FunAgg "bit_or" [ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunAgg "bit_or" [ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunAgg "bit_or" [ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunAgg "bit_or" [ScalarType "bit"]+> (ScalarType "bit")+> False,+> CatCreateFunction FunAgg "bool_and" [ScalarType "bool"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunAgg "bool_or" [ScalarType "bool"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunAgg "corr"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "count" [] (ScalarType "int8") False,+> CatCreateFunction FunAgg "count" [Pseudo Any] (ScalarType "int8")+> False,+> CatCreateFunction FunAgg "covar_pop"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "covar_samp"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "every" [ScalarType "bool"]+> (ScalarType "bool")+> False,+> CatCreateFunction FunAgg "max" [ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunAgg "max" [ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunAgg "max" [ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunAgg "max" [ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunAgg "max" [ScalarType "oid"]+> (ScalarType "oid")+> False,+> CatCreateFunction FunAgg "max" [ScalarType "tid"]+> (ScalarType "tid")+> False,+> CatCreateFunction FunAgg "max" [ScalarType "float4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunAgg "max" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "max" [ScalarType "abstime"]+> (ScalarType "abstime")+> False,+> CatCreateFunction FunAgg "max" [ScalarType "money"]+> (ScalarType "money")+> False,+> CatCreateFunction FunAgg "max" [ScalarType "bpchar"]+> (ScalarType "bpchar")+> False,+> CatCreateFunction FunAgg "max" [ScalarType "date"]+> (ScalarType "date")+> False,+> CatCreateFunction FunAgg "max" [ScalarType "time"]+> (ScalarType "time")+> False,+> CatCreateFunction FunAgg "max" [ScalarType "timestamp"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunAgg "max" [ScalarType "timestamptz"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunAgg "max" [ScalarType "interval"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunAgg "max" [ScalarType "timetz"]+> (ScalarType "timetz")+> False,+> CatCreateFunction FunAgg "max" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "max" [Pseudo AnyArray] (Pseudo AnyArray)+> False,+> CatCreateFunction FunAgg "max" [Pseudo AnyEnum] (Pseudo AnyEnum)+> False,+> CatCreateFunction FunAgg "min" [ScalarType "int8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunAgg "min" [ScalarType "int2"]+> (ScalarType "int2")+> False,+> CatCreateFunction FunAgg "min" [ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunAgg "min" [ScalarType "text"]+> (ScalarType "text")+> False,+> CatCreateFunction FunAgg "min" [ScalarType "oid"]+> (ScalarType "oid")+> False,+> CatCreateFunction FunAgg "min" [ScalarType "tid"]+> (ScalarType "tid")+> False,+> CatCreateFunction FunAgg "min" [ScalarType "float4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunAgg "min" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "min" [ScalarType "abstime"]+> (ScalarType "abstime")+> False,+> CatCreateFunction FunAgg "min" [ScalarType "money"]+> (ScalarType "money")+> False,+> CatCreateFunction FunAgg "min" [ScalarType "bpchar"]+> (ScalarType "bpchar")+> False,+> CatCreateFunction FunAgg "min" [ScalarType "date"]+> (ScalarType "date")+> False,+> CatCreateFunction FunAgg "min" [ScalarType "time"]+> (ScalarType "time")+> False,+> CatCreateFunction FunAgg "min" [ScalarType "timestamp"]+> (ScalarType "timestamp")+> False,+> CatCreateFunction FunAgg "min" [ScalarType "timestamptz"]+> (ScalarType "timestamptz")+> False,+> CatCreateFunction FunAgg "min" [ScalarType "interval"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunAgg "min" [ScalarType "timetz"]+> (ScalarType "timetz")+> False,+> CatCreateFunction FunAgg "min" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "min" [Pseudo AnyArray] (Pseudo AnyArray)+> False,+> CatCreateFunction FunAgg "min" [Pseudo AnyEnum] (Pseudo AnyEnum)+> False,+> CatCreateFunction FunAgg "regr_avgx"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "regr_avgy"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "regr_count"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunAgg "regr_intercept"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "regr_r2"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "regr_slope"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "regr_sxx"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "regr_sxy"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "regr_syy"+> [ScalarType "float8", ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "stddev" [ScalarType "int8"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "stddev" [ScalarType "int2"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "stddev" [ScalarType "int4"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "stddev" [ScalarType "float4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "stddev" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "stddev" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "stddev_pop" [ScalarType "int8"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "stddev_pop" [ScalarType "int2"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "stddev_pop" [ScalarType "int4"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "stddev_pop" [ScalarType "float4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "stddev_pop" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "stddev_pop" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "stddev_samp" [ScalarType "int8"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "stddev_samp" [ScalarType "int2"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "stddev_samp" [ScalarType "int4"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "stddev_samp" [ScalarType "float4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "stddev_samp" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "stddev_samp" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "sum" [ScalarType "int8"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "sum" [ScalarType "int2"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunAgg "sum" [ScalarType "int4"]+> (ScalarType "int8")+> False,+> CatCreateFunction FunAgg "sum" [ScalarType "float4"]+> (ScalarType "float4")+> False,+> CatCreateFunction FunAgg "sum" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "sum" [ScalarType "money"]+> (ScalarType "money")+> False,+> CatCreateFunction FunAgg "sum" [ScalarType "interval"]+> (ScalarType "interval")+> False,+> CatCreateFunction FunAgg "sum" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "var_pop" [ScalarType "int8"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "var_pop" [ScalarType "int2"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "var_pop" [ScalarType "int4"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "var_pop" [ScalarType "float4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "var_pop" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "var_pop" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "var_samp" [ScalarType "int8"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "var_samp" [ScalarType "int2"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "var_samp" [ScalarType "int4"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "var_samp" [ScalarType "float4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "var_samp" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "var_samp" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "variance" [ScalarType "int8"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "variance" [ScalarType "int2"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "variance" [ScalarType "int4"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "variance" [ScalarType "float4"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "variance" [ScalarType "float8"]+> (ScalarType "float8")+> False,+> CatCreateFunction FunAgg "variance" [ScalarType "numeric"]+> (ScalarType "numeric")+> False,+> CatCreateFunction FunAgg "xmlagg" [ScalarType "xml"]+> (ScalarType "xml")+> False,+> CatCreateFunction FunWindow "cume_dist" [] (ScalarType "float8")+> False,+> CatCreateFunction FunWindow "dense_rank" [] (ScalarType "int8")+> False,+> CatCreateFunction FunWindow "first_value" [Pseudo AnyElement]+> (Pseudo AnyElement)+> False,+> CatCreateFunction FunWindow "lag" [Pseudo AnyElement]+> (Pseudo AnyElement)+> False,+> CatCreateFunction FunWindow "lag"+> [Pseudo AnyElement, ScalarType "int4"]+> (Pseudo AnyElement)+> False,+> CatCreateFunction FunWindow "lag"+> [Pseudo AnyElement, ScalarType "int4", Pseudo AnyElement]+> (Pseudo AnyElement)+> False,+> CatCreateFunction FunWindow "last_value" [Pseudo AnyElement]+> (Pseudo AnyElement)+> False,+> CatCreateFunction FunWindow "lead" [Pseudo AnyElement]+> (Pseudo AnyElement)+> False,+> CatCreateFunction FunWindow "lead"+> [Pseudo AnyElement, ScalarType "int4"]+> (Pseudo AnyElement)+> False,+> CatCreateFunction FunWindow "lead"+> [Pseudo AnyElement, ScalarType "int4", Pseudo AnyElement]+> (Pseudo AnyElement)+> False,+> CatCreateFunction FunWindow "nth_value"+> [Pseudo AnyElement, ScalarType "int4"]+> (Pseudo AnyElement)+> False,+> CatCreateFunction FunWindow "ntile" [ScalarType "int4"]+> (ScalarType "int4")+> False,+> CatCreateFunction FunWindow "percent_rank" [] (ScalarType "float8")+> False,+> CatCreateFunction FunWindow "rank" [] (ScalarType "int8") False,+> CatCreateFunction FunWindow "row_number" [] (ScalarType "int8")+> False,+> CatCreateTable "pg_aggregate"+> [("aggfnoid", ScalarType "regproc"),+> ("aggtransfn", ScalarType "regproc"),+> ("aggfinalfn", ScalarType "regproc"),+> ("aggsortop", ScalarType "oid"),+> ("aggtranstype", ScalarType "oid"),+> ("agginitval", ScalarType "text")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("ctid", ScalarType "tid")],+> CatCreateTable "pg_am"+> [("amname", ScalarType "name"),+> ("amstrategies", ScalarType "int2"),+> ("amsupport", ScalarType "int2"),+> ("amcanorder", ScalarType "bool"),+> ("amcanbackward", ScalarType "bool"),+> ("amcanunique", ScalarType "bool"),+> ("amcanmulticol", ScalarType "bool"),+> ("amoptionalkey", ScalarType "bool"),+> ("amindexnulls", ScalarType "bool"),+> ("amsearchnulls", ScalarType "bool"),+> ("amstorage", ScalarType "bool"),+> ("amclusterable", ScalarType "bool"),+> ("amkeytype", ScalarType "oid"),+> ("aminsert", ScalarType "regproc"),+> ("ambeginscan", ScalarType "regproc"),+> ("amgettuple", ScalarType "regproc"),+> ("amgetbitmap", ScalarType "regproc"),+> ("amrescan", ScalarType "regproc"),+> ("amendscan", ScalarType "regproc"),+> ("ammarkpos", ScalarType "regproc"),+> ("amrestrpos", ScalarType "regproc"),+> ("ambuild", ScalarType "regproc"),+> ("ambulkdelete", ScalarType "regproc"),+> ("amvacuumcleanup", ScalarType "regproc"),+> ("amcostestimate", ScalarType "regproc"),+> ("amoptions", ScalarType "regproc")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_amop"+> [("amopfamily", ScalarType "oid"),+> ("amoplefttype", ScalarType "oid"),+> ("amoprighttype", ScalarType "oid"),+> ("amopstrategy", ScalarType "int2"), ("amopopr", ScalarType "oid"),+> ("amopmethod", ScalarType "oid")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_amproc"+> [("amprocfamily", ScalarType "oid"),+> ("amproclefttype", ScalarType "oid"),+> ("amprocrighttype", ScalarType "oid"),+> ("amprocnum", ScalarType "int2"), ("amproc", ScalarType "regproc")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_attrdef"+> [("adrelid", ScalarType "oid"), ("adnum", ScalarType "int2"),+> ("adbin", ScalarType "text"), ("adsrc", ScalarType "text")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_attribute"+> [("attrelid", ScalarType "oid"), ("attname", ScalarType "name"),+> ("atttypid", ScalarType "oid"),+> ("attstattarget", ScalarType "int4"),+> ("attlen", ScalarType "int2"), ("attnum", ScalarType "int2"),+> ("attndims", ScalarType "int4"),+> ("attcacheoff", ScalarType "int4"),+> ("atttypmod", ScalarType "int4"), ("attbyval", ScalarType "bool"),+> ("attstorage", ScalarType "char"), ("attalign", ScalarType "char"),+> ("attnotnull", ScalarType "bool"),+> ("atthasdef", ScalarType "bool"),+> ("attisdropped", ScalarType "bool"),+> ("attislocal", ScalarType "bool"),+> ("attinhcount", ScalarType "int4"),+> ("attacl", ArrayType (ScalarType "aclitem"))]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("ctid", ScalarType "tid")],+> CatCreateTable "pg_auth_members"+> [("roleid", ScalarType "oid"), ("member", ScalarType "oid"),+> ("grantor", ScalarType "oid"), ("admin_option", ScalarType "bool")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("ctid", ScalarType "tid")],+> CatCreateTable "pg_authid"+> [("rolname", ScalarType "name"), ("rolsuper", ScalarType "bool"),+> ("rolinherit", ScalarType "bool"),+> ("rolcreaterole", ScalarType "bool"),+> ("rolcreatedb", ScalarType "bool"),+> ("rolcatupdate", ScalarType "bool"),+> ("rolcanlogin", ScalarType "bool"),+> ("rolconnlimit", ScalarType "int4"),+> ("rolpassword", ScalarType "text"),+> ("rolvaliduntil", ScalarType "timestamptz"),+> ("rolconfig", ArrayType (ScalarType "text"))]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_cast"+> [("castsource", ScalarType "oid"),+> ("casttarget", ScalarType "oid"), ("castfunc", ScalarType "oid"),+> ("castcontext", ScalarType "char"),+> ("castmethod", ScalarType "char")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_class"+> [("relname", ScalarType "name"),+> ("relnamespace", ScalarType "oid"), ("reltype", ScalarType "oid"),+> ("relowner", ScalarType "oid"), ("relam", ScalarType "oid"),+> ("relfilenode", ScalarType "oid"),+> ("reltablespace", ScalarType "oid"),+> ("relpages", ScalarType "int4"),+> ("reltuples", ScalarType "float4"),+> ("reltoastrelid", ScalarType "oid"),+> ("reltoastidxid", ScalarType "oid"),+> ("relhasindex", ScalarType "bool"),+> ("relisshared", ScalarType "bool"),+> ("relistemp", ScalarType "bool"), ("relkind", ScalarType "char"),+> ("relnatts", ScalarType "int2"), ("relchecks", ScalarType "int2"),+> ("relhasoids", ScalarType "bool"),+> ("relhaspkey", ScalarType "bool"),+> ("relhasrules", ScalarType "bool"),+> ("relhastriggers", ScalarType "bool"),+> ("relhassubclass", ScalarType "bool"),+> ("relfrozenxid", ScalarType "xid"),+> ("relacl", ArrayType (ScalarType "aclitem")),+> ("reloptions", ArrayType (ScalarType "text"))]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_constraint"+> [("conname", ScalarType "name"),+> ("connamespace", ScalarType "oid"), ("contype", ScalarType "char"),+> ("condeferrable", ScalarType "bool"),+> ("condeferred", ScalarType "bool"), ("conrelid", ScalarType "oid"),+> ("contypid", ScalarType "oid"), ("confrelid", ScalarType "oid"),+> ("confupdtype", ScalarType "char"),+> ("confdeltype", ScalarType "char"),+> ("confmatchtype", ScalarType "char"),+> ("conislocal", ScalarType "bool"),+> ("coninhcount", ScalarType "int4"),+> ("conkey", ArrayType (ScalarType "int2")),+> ("confkey", ArrayType (ScalarType "int2")),+> ("conpfeqop", ArrayType (ScalarType "oid")),+> ("conppeqop", ArrayType (ScalarType "oid")),+> ("conffeqop", ArrayType (ScalarType "oid")),+> ("conbin", ScalarType "text"), ("consrc", ScalarType "text")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_conversion"+> [("conname", ScalarType "name"),+> ("connamespace", ScalarType "oid"), ("conowner", ScalarType "oid"),+> ("conforencoding", ScalarType "int4"),+> ("contoencoding", ScalarType "int4"),+> ("conproc", ScalarType "regproc"),+> ("condefault", ScalarType "bool")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_database"+> [("datname", ScalarType "name"), ("datdba", ScalarType "oid"),+> ("encoding", ScalarType "int4"), ("datcollate", ScalarType "name"),+> ("datctype", ScalarType "name"),+> ("datistemplate", ScalarType "bool"),+> ("datallowconn", ScalarType "bool"),+> ("datconnlimit", ScalarType "int4"),+> ("datlastsysoid", ScalarType "oid"),+> ("datfrozenxid", ScalarType "xid"),+> ("dattablespace", ScalarType "oid"),+> ("datconfig", ArrayType (ScalarType "text")),+> ("datacl", ArrayType (ScalarType "aclitem"))]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_depend"+> [("classid", ScalarType "oid"), ("objid", ScalarType "oid"),+> ("objsubid", ScalarType "int4"), ("refclassid", ScalarType "oid"),+> ("refobjid", ScalarType "oid"), ("refobjsubid", ScalarType "int4"),+> ("deptype", ScalarType "char")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("ctid", ScalarType "tid")],+> CatCreateTable "pg_description"+> [("objoid", ScalarType "oid"), ("classoid", ScalarType "oid"),+> ("objsubid", ScalarType "int4"),+> ("description", ScalarType "text")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("ctid", ScalarType "tid")],+> CatCreateTable "pg_enum"+> [("enumtypid", ScalarType "oid"), ("enumlabel", ScalarType "name")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_foreign_data_wrapper"+> [("fdwname", ScalarType "name"), ("fdwowner", ScalarType "oid"),+> ("fdwvalidator", ScalarType "oid"),+> ("fdwacl", ArrayType (ScalarType "aclitem")),+> ("fdwoptions", ArrayType (ScalarType "text"))]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_foreign_server"+> [("srvname", ScalarType "name"), ("srvowner", ScalarType "oid"),+> ("srvfdw", ScalarType "oid"), ("srvtype", ScalarType "text"),+> ("srvversion", ScalarType "text"),+> ("srvacl", ArrayType (ScalarType "aclitem")),+> ("srvoptions", ArrayType (ScalarType "text"))]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_index"+> [("indexrelid", ScalarType "oid"), ("indrelid", ScalarType "oid"),+> ("indnatts", ScalarType "int2"),+> ("indisunique", ScalarType "bool"),+> ("indisprimary", ScalarType "bool"),+> ("indisclustered", ScalarType "bool"),+> ("indisvalid", ScalarType "bool"),+> ("indcheckxmin", ScalarType "bool"),+> ("indisready", ScalarType "bool"),+> ("indkey", ScalarType "int2vector"),+> ("indclass", ScalarType "oidvector"),+> ("indoption", ScalarType "int2vector"),+> ("indexprs", ScalarType "text"), ("indpred", ScalarType "text")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("ctid", ScalarType "tid")],+> CatCreateTable "pg_inherits"+> [("inhrelid", ScalarType "oid"), ("inhparent", ScalarType "oid"),+> ("inhseqno", ScalarType "int4")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("ctid", ScalarType "tid")],+> CatCreateTable "pg_language"+> [("lanname", ScalarType "name"), ("lanowner", ScalarType "oid"),+> ("lanispl", ScalarType "bool"),+> ("lanpltrusted", ScalarType "bool"),+> ("lanplcallfoid", ScalarType "oid"),+> ("lanvalidator", ScalarType "oid"),+> ("lanacl", ArrayType (ScalarType "aclitem"))]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_largeobject"+> [("loid", ScalarType "oid"), ("pageno", ScalarType "int4"),+> ("data", ScalarType "bytea")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("ctid", ScalarType "tid")],+> CatCreateTable "pg_listener"+> [("relname", ScalarType "name"),+> ("listenerpid", ScalarType "int4"),+> ("notification", ScalarType "int4")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("ctid", ScalarType "tid")],+> CatCreateTable "pg_namespace"+> [("nspname", ScalarType "name"), ("nspowner", ScalarType "oid"),+> ("nspacl", ArrayType (ScalarType "aclitem"))]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_opclass"+> [("opcmethod", ScalarType "oid"), ("opcname", ScalarType "name"),+> ("opcnamespace", ScalarType "oid"), ("opcowner", ScalarType "oid"),+> ("opcfamily", ScalarType "oid"), ("opcintype", ScalarType "oid"),+> ("opcdefault", ScalarType "bool"),+> ("opckeytype", ScalarType "oid")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_operator"+> [("oprname", ScalarType "name"),+> ("oprnamespace", ScalarType "oid"), ("oprowner", ScalarType "oid"),+> ("oprkind", ScalarType "char"), ("oprcanmerge", ScalarType "bool"),+> ("oprcanhash", ScalarType "bool"), ("oprleft", ScalarType "oid"),+> ("oprright", ScalarType "oid"), ("oprresult", ScalarType "oid"),+> ("oprcom", ScalarType "oid"), ("oprnegate", ScalarType "oid"),+> ("oprcode", ScalarType "regproc"),+> ("oprrest", ScalarType "regproc"),+> ("oprjoin", ScalarType "regproc")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_opfamily"+> [("opfmethod", ScalarType "oid"), ("opfname", ScalarType "name"),+> ("opfnamespace", ScalarType "oid"), ("opfowner", ScalarType "oid")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_pltemplate"+> [("tmplname", ScalarType "name"),+> ("tmpltrusted", ScalarType "bool"),+> ("tmpldbacreate", ScalarType "bool"),+> ("tmplhandler", ScalarType "text"),+> ("tmplvalidator", ScalarType "text"),+> ("tmpllibrary", ScalarType "text"),+> ("tmplacl", ArrayType (ScalarType "aclitem"))]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("ctid", ScalarType "tid")],+> CatCreateTable "pg_proc"+> [("proname", ScalarType "name"),+> ("pronamespace", ScalarType "oid"), ("proowner", ScalarType "oid"),+> ("prolang", ScalarType "oid"), ("procost", ScalarType "float4"),+> ("prorows", ScalarType "float4"),+> ("provariadic", ScalarType "oid"), ("proisagg", ScalarType "bool"),+> ("proiswindow", ScalarType "bool"),+> ("prosecdef", ScalarType "bool"),+> ("proisstrict", ScalarType "bool"),+> ("proretset", ScalarType "bool"),+> ("provolatile", ScalarType "char"),+> ("pronargs", ScalarType "int2"),+> ("pronargdefaults", ScalarType "int2"),+> ("prorettype", ScalarType "oid"),+> ("proargtypes", ScalarType "oidvector"),+> ("proallargtypes", ArrayType (ScalarType "oid")),+> ("proargmodes", ArrayType (ScalarType "char")),+> ("proargnames", ArrayType (ScalarType "text")),+> ("proargdefaults", ScalarType "text"),+> ("prosrc", ScalarType "text"), ("probin", ScalarType "bytea"),+> ("proconfig", ArrayType (ScalarType "text")),+> ("proacl", ArrayType (ScalarType "aclitem"))]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_rewrite"+> [("rulename", ScalarType "name"), ("ev_class", ScalarType "oid"),+> ("ev_attr", ScalarType "int2"), ("ev_type", ScalarType "char"),+> ("ev_enabled", ScalarType "char"),+> ("is_instead", ScalarType "bool"), ("ev_qual", ScalarType "text"),+> ("ev_action", ScalarType "text")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_shdepend"+> [("dbid", ScalarType "oid"), ("classid", ScalarType "oid"),+> ("objid", ScalarType "oid"), ("objsubid", ScalarType "int4"),+> ("refclassid", ScalarType "oid"), ("refobjid", ScalarType "oid"),+> ("deptype", ScalarType "char")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("ctid", ScalarType "tid")],+> CatCreateTable "pg_shdescription"+> [("objoid", ScalarType "oid"), ("classoid", ScalarType "oid"),+> ("description", ScalarType "text")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("ctid", ScalarType "tid")],+> CatCreateTable "pg_statistic"+> [("starelid", ScalarType "oid"), ("staattnum", ScalarType "int2"),+> ("stanullfrac", ScalarType "float4"),+> ("stawidth", ScalarType "int4"),+> ("stadistinct", ScalarType "float4"),+> ("stakind1", ScalarType "int2"), ("stakind2", ScalarType "int2"),+> ("stakind3", ScalarType "int2"), ("stakind4", ScalarType "int2"),+> ("staop1", ScalarType "oid"), ("staop2", ScalarType "oid"),+> ("staop3", ScalarType "oid"), ("staop4", ScalarType "oid"),+> ("stanumbers1", ArrayType (ScalarType "float4")),+> ("stanumbers2", ArrayType (ScalarType "float4")),+> ("stanumbers3", ArrayType (ScalarType "float4")),+> ("stanumbers4", ArrayType (ScalarType "float4")),+> ("stavalues1", Pseudo AnyArray), ("stavalues2", Pseudo AnyArray),+> ("stavalues3", Pseudo AnyArray), ("stavalues4", Pseudo AnyArray)]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("ctid", ScalarType "tid")],+> CatCreateTable "pg_tablespace"+> [("spcname", ScalarType "name"), ("spcowner", ScalarType "oid"),+> ("spclocation", ScalarType "text"),+> ("spcacl", ArrayType (ScalarType "aclitem"))]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_trigger"+> [("tgrelid", ScalarType "oid"), ("tgname", ScalarType "name"),+> ("tgfoid", ScalarType "oid"), ("tgtype", ScalarType "int2"),+> ("tgenabled", ScalarType "char"),+> ("tgisconstraint", ScalarType "bool"),+> ("tgconstrname", ScalarType "name"),+> ("tgconstrrelid", ScalarType "oid"),+> ("tgconstraint", ScalarType "oid"),+> ("tgdeferrable", ScalarType "bool"),+> ("tginitdeferred", ScalarType "bool"),+> ("tgnargs", ScalarType "int2"),+> ("tgattr", ScalarType "int2vector"),+> ("tgargs", ScalarType "bytea")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_ts_config"+> [("cfgname", ScalarType "name"),+> ("cfgnamespace", ScalarType "oid"), ("cfgowner", ScalarType "oid"),+> ("cfgparser", ScalarType "oid")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_ts_config_map"+> [("mapcfg", ScalarType "oid"), ("maptokentype", ScalarType "int4"),+> ("mapseqno", ScalarType "int4"), ("mapdict", ScalarType "oid")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("ctid", ScalarType "tid")],+> CatCreateTable "pg_ts_dict"+> [("dictname", ScalarType "name"),+> ("dictnamespace", ScalarType "oid"),+> ("dictowner", ScalarType "oid"),+> ("dicttemplate", ScalarType "oid"),+> ("dictinitoption", ScalarType "text")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_ts_parser"+> [("prsname", ScalarType "name"),+> ("prsnamespace", ScalarType "oid"),+> ("prsstart", ScalarType "regproc"),+> ("prstoken", ScalarType "regproc"),+> ("prsend", ScalarType "regproc"),+> ("prsheadline", ScalarType "regproc"),+> ("prslextype", ScalarType "regproc")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_ts_template"+> [("tmplname", ScalarType "name"),+> ("tmplnamespace", ScalarType "oid"),+> ("tmplinit", ScalarType "regproc"),+> ("tmpllexize", ScalarType "regproc")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_type"+> [("typname", ScalarType "name"),+> ("typnamespace", ScalarType "oid"), ("typowner", ScalarType "oid"),+> ("typlen", ScalarType "int2"), ("typbyval", ScalarType "bool"),+> ("typtype", ScalarType "char"), ("typcategory", ScalarType "char"),+> ("typispreferred", ScalarType "bool"),+> ("typisdefined", ScalarType "bool"),+> ("typdelim", ScalarType "char"), ("typrelid", ScalarType "oid"),+> ("typelem", ScalarType "oid"), ("typarray", ScalarType "oid"),+> ("typinput", ScalarType "regproc"),+> ("typoutput", ScalarType "regproc"),+> ("typreceive", ScalarType "regproc"),+> ("typsend", ScalarType "regproc"),+> ("typmodin", ScalarType "regproc"),+> ("typmodout", ScalarType "regproc"),+> ("typanalyze", ScalarType "regproc"),+> ("typalign", ScalarType "char"), ("typstorage", ScalarType "char"),+> ("typnotnull", ScalarType "bool"),+> ("typbasetype", ScalarType "oid"),+> ("typtypmod", ScalarType "int4"), ("typndims", ScalarType "int4"),+> ("typdefaultbin", ScalarType "text"),+> ("typdefault", ScalarType "text")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "pg_user_mapping"+> [("umuser", ScalarType "oid"), ("umserver", ScalarType "oid"),+> ("umoptions", ArrayType (ScalarType "text"))]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("oid", ScalarType "oid"),+> ("ctid", ScalarType "tid")],+> CatCreateTable "information_schema.sql_features"+> [("feature_id", DomainType "information_schema.character_data"),+> ("feature_name", DomainType "information_schema.character_data"),+> ("sub_feature_id", DomainType "information_schema.character_data"),+> ("sub_feature_name",+> DomainType "information_schema.character_data"),+> ("is_supported", DomainType "information_schema.character_data"),+> ("is_verified_by", DomainType "information_schema.character_data"),+> ("comments", DomainType "information_schema.character_data")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("ctid", ScalarType "tid")],+> CatCreateTable "information_schema.sql_implementation_info"+> [("implementation_info_id",+> DomainType "information_schema.character_data"),+> ("implementation_info_name",+> DomainType "information_schema.character_data"),+> ("integer_value", DomainType "information_schema.cardinal_number"),+> ("character_value",+> DomainType "information_schema.character_data"),+> ("comments", DomainType "information_schema.character_data")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("ctid", ScalarType "tid")],+> CatCreateTable "information_schema.sql_languages"+> [("sql_language_source",+> DomainType "information_schema.character_data"),+> ("sql_language_year",+> DomainType "information_schema.character_data"),+> ("sql_language_conformance",+> DomainType "information_schema.character_data"),+> ("sql_language_integrity",+> DomainType "information_schema.character_data"),+> ("sql_language_implementation",+> DomainType "information_schema.character_data"),+> ("sql_language_binding_style",+> DomainType "information_schema.character_data"),+> ("sql_language_programming_language",+> DomainType "information_schema.character_data")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("ctid", ScalarType "tid")],+> CatCreateTable "information_schema.sql_packages"+> [("feature_id", DomainType "information_schema.character_data"),+> ("feature_name", DomainType "information_schema.character_data"),+> ("is_supported", DomainType "information_schema.character_data"),+> ("is_verified_by", DomainType "information_schema.character_data"),+> ("comments", DomainType "information_schema.character_data")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("ctid", ScalarType "tid")],+> CatCreateTable "information_schema.sql_parts"+> [("feature_id", DomainType "information_schema.character_data"),+> ("feature_name", DomainType "information_schema.character_data"),+> ("is_supported", DomainType "information_schema.character_data"),+> ("is_verified_by", DomainType "information_schema.character_data"),+> ("comments", DomainType "information_schema.character_data")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("ctid", ScalarType "tid")],+> CatCreateTable "information_schema.sql_sizing"+> [("sizing_id", DomainType "information_schema.cardinal_number"),+> ("sizing_name", DomainType "information_schema.character_data"),+> ("supported_value",+> DomainType "information_schema.cardinal_number"),+> ("comments", DomainType "information_schema.character_data")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("ctid", ScalarType "tid")],+> CatCreateTable "information_schema.sql_sizing_profiles"+> [("sizing_id", DomainType "information_schema.cardinal_number"),+> ("sizing_name", DomainType "information_schema.character_data"),+> ("profile_id", DomainType "information_schema.character_data"),+> ("required_value",+> DomainType "information_schema.cardinal_number"),+> ("comments", DomainType "information_schema.character_data")]+> [("tableoid", ScalarType "oid"), ("cmax", ScalarType "cid"),+> ("xmax", ScalarType "xid"), ("cmin", ScalarType "cid"),+> ("xmin", ScalarType "xid"), ("ctid", ScalarType "tid")],+> CatCreateView "information_schema._pg_foreign_data_wrappers"+> [("oid", ScalarType "oid"), ("fdwowner", ScalarType "oid"),+> ("fdwoptions", ArrayType (ScalarType "text")),+> ("foreign_data_wrapper_catalog",+> DomainType "information_schema.sql_identifier"),+> ("foreign_data_wrapper_name",+> DomainType "information_schema.sql_identifier"),+> ("authorization_identifier",+> DomainType "information_schema.sql_identifier"),+> ("foreign_data_wrapper_language",+> DomainType "information_schema.character_data")],+> CatCreateView "information_schema._pg_foreign_servers"+> [("oid", ScalarType "oid"),+> ("srvoptions", ArrayType (ScalarType "text")),+> ("foreign_server_catalog",+> DomainType "information_schema.sql_identifier"),+> ("foreign_server_name",+> DomainType "information_schema.sql_identifier"),+> ("foreign_data_wrapper_catalog",+> DomainType "information_schema.sql_identifier"),+> ("foreign_data_wrapper_name",+> DomainType "information_schema.sql_identifier"),+> ("foreign_server_type",+> DomainType "information_schema.character_data"),+> ("foreign_server_version",+> DomainType "information_schema.character_data"),+> ("authorization_identifier",+> DomainType "information_schema.sql_identifier")],+> CatCreateView "information_schema._pg_user_mappings"+> [("oid", ScalarType "oid"),+> ("umoptions", ArrayType (ScalarType "text")),+> ("umuser", ScalarType "oid"),+> ("authorization_identifier",+> DomainType "information_schema.sql_identifier"),+> ("foreign_server_catalog",+> DomainType "information_schema.sql_identifier"),+> ("foreign_server_name",+> DomainType "information_schema.sql_identifier"),+> ("srvowner", DomainType "information_schema.sql_identifier")],+> CatCreateView+> "information_schema.administrable_role_authorizations"+> [("grantee", DomainType "information_schema.sql_identifier"),+> ("role_name", DomainType "information_schema.sql_identifier"),+> ("is_grantable", DomainType "information_schema.character_data")],+> CatCreateView "information_schema.applicable_roles"+> [("grantee", DomainType "information_schema.sql_identifier"),+> ("role_name", DomainType "information_schema.sql_identifier"),+> ("is_grantable", DomainType "information_schema.character_data")],+> CatCreateView "information_schema.attributes"+> [("udt_catalog", DomainType "information_schema.sql_identifier"),+> ("udt_schema", DomainType "information_schema.sql_identifier"),+> ("udt_name", DomainType "information_schema.sql_identifier"),+> ("attribute_name", DomainType "information_schema.sql_identifier"),+> ("ordinal_position",+> DomainType "information_schema.cardinal_number"),+> ("attribute_default",+> DomainType "information_schema.character_data"),+> ("is_nullable", DomainType "information_schema.character_data"),+> ("data_type", DomainType "information_schema.character_data"),+> ("character_maximum_length",+> DomainType "information_schema.cardinal_number"),+> ("character_octet_length",+> DomainType "information_schema.cardinal_number"),+> ("character_set_catalog",+> DomainType "information_schema.sql_identifier"),+> ("character_set_schema",+> DomainType "information_schema.sql_identifier"),+> ("character_set_name",+> DomainType "information_schema.sql_identifier"),+> ("collation_catalog",+> DomainType "information_schema.sql_identifier"),+> ("collation_schema",+> DomainType "information_schema.sql_identifier"),+> ("collation_name", DomainType "information_schema.sql_identifier"),+> ("numeric_precision",+> DomainType "information_schema.cardinal_number"),+> ("numeric_precision_radix",+> DomainType "information_schema.cardinal_number"),+> ("numeric_scale", DomainType "information_schema.cardinal_number"),+> ("datetime_precision",+> DomainType "information_schema.cardinal_number"),+> ("interval_type", DomainType "information_schema.character_data"),+> ("interval_precision",+> DomainType "information_schema.character_data"),+> ("attribute_udt_catalog",+> DomainType "information_schema.sql_identifier"),+> ("attribute_udt_schema",+> DomainType "information_schema.sql_identifier"),+> ("attribute_udt_name",+> DomainType "information_schema.sql_identifier"),+> ("scope_catalog", DomainType "information_schema.sql_identifier"),+> ("scope_schema", DomainType "information_schema.sql_identifier"),+> ("scope_name", DomainType "information_schema.sql_identifier"),+> ("maximum_cardinality",+> DomainType "information_schema.cardinal_number"),+> ("dtd_identifier", DomainType "information_schema.sql_identifier"),+> ("is_derived_reference_attribute",+> DomainType "information_schema.character_data")],+> CatCreateView "information_schema.check_constraint_routine_usage"+> [("constraint_catalog",+> DomainType "information_schema.sql_identifier"),+> ("constraint_schema",+> DomainType "information_schema.sql_identifier"),+> ("constraint_name",+> DomainType "information_schema.sql_identifier"),+> ("specific_catalog",+> DomainType "information_schema.sql_identifier"),+> ("specific_schema",+> DomainType "information_schema.sql_identifier"),+> ("specific_name", DomainType "information_schema.sql_identifier")],+> CatCreateView "information_schema.check_constraints"+> [("constraint_catalog",+> DomainType "information_schema.sql_identifier"),+> ("constraint_schema",+> DomainType "information_schema.sql_identifier"),+> ("constraint_name",+> DomainType "information_schema.sql_identifier"),+> ("check_clause", DomainType "information_schema.character_data")],+> CatCreateView "information_schema.column_domain_usage"+> [("domain_catalog",+> DomainType "information_schema.sql_identifier"),+> ("domain_schema", DomainType "information_schema.sql_identifier"),+> ("domain_name", DomainType "information_schema.sql_identifier"),+> ("table_catalog", DomainType "information_schema.sql_identifier"),+> ("table_schema", DomainType "information_schema.sql_identifier"),+> ("table_name", DomainType "information_schema.sql_identifier"),+> ("column_name", DomainType "information_schema.sql_identifier")],+> CatCreateView "information_schema.column_privileges"+> [("grantor", DomainType "information_schema.sql_identifier"),+> ("grantee", DomainType "information_schema.sql_identifier"),+> ("table_catalog", DomainType "information_schema.sql_identifier"),+> ("table_schema", DomainType "information_schema.sql_identifier"),+> ("table_name", DomainType "information_schema.sql_identifier"),+> ("column_name", DomainType "information_schema.sql_identifier"),+> ("privilege_type", DomainType "information_schema.character_data"),+> ("is_grantable", DomainType "information_schema.character_data")],+> CatCreateView "information_schema.column_udt_usage"+> [("udt_catalog", DomainType "information_schema.sql_identifier"),+> ("udt_schema", DomainType "information_schema.sql_identifier"),+> ("udt_name", DomainType "information_schema.sql_identifier"),+> ("table_catalog", DomainType "information_schema.sql_identifier"),+> ("table_schema", DomainType "information_schema.sql_identifier"),+> ("table_name", DomainType "information_schema.sql_identifier"),+> ("column_name", DomainType "information_schema.sql_identifier")],+> CatCreateView "information_schema.columns"+> [("table_catalog", DomainType "information_schema.sql_identifier"),+> ("table_schema", DomainType "information_schema.sql_identifier"),+> ("table_name", DomainType "information_schema.sql_identifier"),+> ("column_name", DomainType "information_schema.sql_identifier"),+> ("ordinal_position",+> DomainType "information_schema.cardinal_number"),+> ("column_default", DomainType "information_schema.character_data"),+> ("is_nullable", DomainType "information_schema.character_data"),+> ("data_type", DomainType "information_schema.character_data"),+> ("character_maximum_length",+> DomainType "information_schema.cardinal_number"),+> ("character_octet_length",+> DomainType "information_schema.cardinal_number"),+> ("numeric_precision",+> DomainType "information_schema.cardinal_number"),+> ("numeric_precision_radix",+> DomainType "information_schema.cardinal_number"),+> ("numeric_scale", DomainType "information_schema.cardinal_number"),+> ("datetime_precision",+> DomainType "information_schema.cardinal_number"),+> ("interval_type", DomainType "information_schema.character_data"),+> ("interval_precision",+> DomainType "information_schema.character_data"),+> ("character_set_catalog",+> DomainType "information_schema.sql_identifier"),+> ("character_set_schema",+> DomainType "information_schema.sql_identifier"),+> ("character_set_name",+> DomainType "information_schema.sql_identifier"),+> ("collation_catalog",+> DomainType "information_schema.sql_identifier"),+> ("collation_schema",+> DomainType "information_schema.sql_identifier"),+> ("collation_name", DomainType "information_schema.sql_identifier"),+> ("domain_catalog", DomainType "information_schema.sql_identifier"),+> ("domain_schema", DomainType "information_schema.sql_identifier"),+> ("domain_name", DomainType "information_schema.sql_identifier"),+> ("udt_catalog", DomainType "information_schema.sql_identifier"),+> ("udt_schema", DomainType "information_schema.sql_identifier"),+> ("udt_name", DomainType "information_schema.sql_identifier"),+> ("scope_catalog", DomainType "information_schema.sql_identifier"),+> ("scope_schema", DomainType "information_schema.sql_identifier"),+> ("scope_name", DomainType "information_schema.sql_identifier"),+> ("maximum_cardinality",+> DomainType "information_schema.cardinal_number"),+> ("dtd_identifier", DomainType "information_schema.sql_identifier"),+> ("is_self_referencing",+> DomainType "information_schema.character_data"),+> ("is_identity", DomainType "information_schema.character_data"),+> ("identity_generation",+> DomainType "information_schema.character_data"),+> ("identity_start", DomainType "information_schema.character_data"),+> ("identity_increment",+> DomainType "information_schema.character_data"),+> ("identity_maximum",+> DomainType "information_schema.character_data"),+> ("identity_minimum",+> DomainType "information_schema.character_data"),+> ("identity_cycle", DomainType "information_schema.character_data"),+> ("is_generated", DomainType "information_schema.character_data"),+> ("generation_expression",+> DomainType "information_schema.character_data"),+> ("is_updatable", DomainType "information_schema.character_data")],+> CatCreateView "information_schema.constraint_column_usage"+> [("table_catalog", DomainType "information_schema.sql_identifier"),+> ("table_schema", DomainType "information_schema.sql_identifier"),+> ("table_name", DomainType "information_schema.sql_identifier"),+> ("column_name", DomainType "information_schema.sql_identifier"),+> ("constraint_catalog",+> DomainType "information_schema.sql_identifier"),+> ("constraint_schema",+> DomainType "information_schema.sql_identifier"),+> ("constraint_name",+> DomainType "information_schema.sql_identifier")],+> CatCreateView "information_schema.constraint_table_usage"+> [("table_catalog", DomainType "information_schema.sql_identifier"),+> ("table_schema", DomainType "information_schema.sql_identifier"),+> ("table_name", DomainType "information_schema.sql_identifier"),+> ("constraint_catalog",+> DomainType "information_schema.sql_identifier"),+> ("constraint_schema",+> DomainType "information_schema.sql_identifier"),+> ("constraint_name",+> DomainType "information_schema.sql_identifier")],+> CatCreateView "information_schema.data_type_privileges"+> [("object_catalog",+> DomainType "information_schema.sql_identifier"),+> ("object_schema", DomainType "information_schema.sql_identifier"),+> ("object_name", DomainType "information_schema.sql_identifier"),+> ("object_type", DomainType "information_schema.character_data"),+> ("dtd_identifier",+> DomainType "information_schema.sql_identifier")],+> CatCreateView "information_schema.domain_constraints"+> [("constraint_catalog",+> DomainType "information_schema.sql_identifier"),+> ("constraint_schema",+> DomainType "information_schema.sql_identifier"),+> ("constraint_name",+> DomainType "information_schema.sql_identifier"),+> ("domain_catalog", DomainType "information_schema.sql_identifier"),+> ("domain_schema", DomainType "information_schema.sql_identifier"),+> ("domain_name", DomainType "information_schema.sql_identifier"),+> ("is_deferrable", DomainType "information_schema.character_data"),+> ("initially_deferred",+> DomainType "information_schema.character_data")],+> CatCreateView "information_schema.domain_udt_usage"+> [("udt_catalog", DomainType "information_schema.sql_identifier"),+> ("udt_schema", DomainType "information_schema.sql_identifier"),+> ("udt_name", DomainType "information_schema.sql_identifier"),+> ("domain_catalog", DomainType "information_schema.sql_identifier"),+> ("domain_schema", DomainType "information_schema.sql_identifier"),+> ("domain_name", DomainType "information_schema.sql_identifier")],+> CatCreateView "information_schema.domains"+> [("domain_catalog",+> DomainType "information_schema.sql_identifier"),+> ("domain_schema", DomainType "information_schema.sql_identifier"),+> ("domain_name", DomainType "information_schema.sql_identifier"),+> ("data_type", DomainType "information_schema.character_data"),+> ("character_maximum_length",+> DomainType "information_schema.cardinal_number"),+> ("character_octet_length",+> DomainType "information_schema.cardinal_number"),+> ("character_set_catalog",+> DomainType "information_schema.sql_identifier"),+> ("character_set_schema",+> DomainType "information_schema.sql_identifier"),+> ("character_set_name",+> DomainType "information_schema.sql_identifier"),+> ("collation_catalog",+> DomainType "information_schema.sql_identifier"),+> ("collation_schema",+> DomainType "information_schema.sql_identifier"),+> ("collation_name", DomainType "information_schema.sql_identifier"),+> ("numeric_precision",+> DomainType "information_schema.cardinal_number"),+> ("numeric_precision_radix",+> DomainType "information_schema.cardinal_number"),+> ("numeric_scale", DomainType "information_schema.cardinal_number"),+> ("datetime_precision",+> DomainType "information_schema.cardinal_number"),+> ("interval_type", DomainType "information_schema.character_data"),+> ("interval_precision",+> DomainType "information_schema.character_data"),+> ("domain_default", DomainType "information_schema.character_data"),+> ("udt_catalog", DomainType "information_schema.sql_identifier"),+> ("udt_schema", DomainType "information_schema.sql_identifier"),+> ("udt_name", DomainType "information_schema.sql_identifier"),+> ("scope_catalog", DomainType "information_schema.sql_identifier"),+> ("scope_schema", DomainType "information_schema.sql_identifier"),+> ("scope_name", DomainType "information_schema.sql_identifier"),+> ("maximum_cardinality",+> DomainType "information_schema.cardinal_number"),+> ("dtd_identifier",+> DomainType "information_schema.sql_identifier")],+> CatCreateView "information_schema.element_types"+> [("object_catalog",+> DomainType "information_schema.sql_identifier"),+> ("object_schema", DomainType "information_schema.sql_identifier"),+> ("object_name", DomainType "information_schema.sql_identifier"),+> ("object_type", DomainType "information_schema.character_data"),+> ("collection_type_identifier",+> DomainType "information_schema.sql_identifier"),+> ("data_type", DomainType "information_schema.character_data"),+> ("character_maximum_length",+> DomainType "information_schema.cardinal_number"),+> ("character_octet_length",+> DomainType "information_schema.cardinal_number"),+> ("character_set_catalog",+> DomainType "information_schema.sql_identifier"),+> ("character_set_schema",+> DomainType "information_schema.sql_identifier"),+> ("character_set_name",+> DomainType "information_schema.sql_identifier"),+> ("collation_catalog",+> DomainType "information_schema.sql_identifier"),+> ("collation_schema",+> DomainType "information_schema.sql_identifier"),+> ("collation_name", DomainType "information_schema.sql_identifier"),+> ("numeric_precision",+> DomainType "information_schema.cardinal_number"),+> ("numeric_precision_radix",+> DomainType "information_schema.cardinal_number"),+> ("numeric_scale", DomainType "information_schema.cardinal_number"),+> ("datetime_precision",+> DomainType "information_schema.cardinal_number"),+> ("interval_type", DomainType "information_schema.character_data"),+> ("interval_precision",+> DomainType "information_schema.character_data"),+> ("domain_default", DomainType "information_schema.character_data"),+> ("udt_catalog", DomainType "information_schema.sql_identifier"),+> ("udt_schema", DomainType "information_schema.sql_identifier"),+> ("udt_name", DomainType "information_schema.sql_identifier"),+> ("scope_catalog", DomainType "information_schema.sql_identifier"),+> ("scope_schema", DomainType "information_schema.sql_identifier"),+> ("scope_name", DomainType "information_schema.sql_identifier"),+> ("maximum_cardinality",+> DomainType "information_schema.cardinal_number"),+> ("dtd_identifier",+> DomainType "information_schema.sql_identifier")],+> CatCreateView "information_schema.enabled_roles"+> [("role_name", DomainType "information_schema.sql_identifier")],+> CatCreateView "information_schema.foreign_data_wrapper_options"+> [("foreign_data_wrapper_catalog",+> DomainType "information_schema.sql_identifier"),+> ("foreign_data_wrapper_name",+> DomainType "information_schema.sql_identifier"),+> ("option_name", DomainType "information_schema.sql_identifier"),+> ("option_value", DomainType "information_schema.character_data")],+> CatCreateView "information_schema.foreign_data_wrappers"+> [("foreign_data_wrapper_catalog",+> DomainType "information_schema.sql_identifier"),+> ("foreign_data_wrapper_name",+> DomainType "information_schema.sql_identifier"),+> ("authorization_identifier",+> DomainType "information_schema.sql_identifier"),+> ("library_name", DomainType "information_schema.character_data"),+> ("foreign_data_wrapper_language",+> DomainType "information_schema.character_data")],+> CatCreateView "information_schema.foreign_server_options"+> [("foreign_server_catalog",+> DomainType "information_schema.sql_identifier"),+> ("foreign_server_name",+> DomainType "information_schema.sql_identifier"),+> ("option_name", DomainType "information_schema.sql_identifier"),+> ("option_value", DomainType "information_schema.character_data")],+> CatCreateView "information_schema.foreign_servers"+> [("foreign_server_catalog",+> DomainType "information_schema.sql_identifier"),+> ("foreign_server_name",+> DomainType "information_schema.sql_identifier"),+> ("foreign_data_wrapper_catalog",+> DomainType "information_schema.sql_identifier"),+> ("foreign_data_wrapper_name",+> DomainType "information_schema.sql_identifier"),+> ("foreign_server_type",+> DomainType "information_schema.character_data"),+> ("foreign_server_version",+> DomainType "information_schema.character_data"),+> ("authorization_identifier",+> DomainType "information_schema.sql_identifier")],+> CatCreateView "information_schema.information_schema_catalog_name"+> [("catalog_name", DomainType "information_schema.sql_identifier")],+> CatCreateView "information_schema.key_column_usage"+> [("constraint_catalog",+> DomainType "information_schema.sql_identifier"),+> ("constraint_schema",+> DomainType "information_schema.sql_identifier"),+> ("constraint_name",+> DomainType "information_schema.sql_identifier"),+> ("table_catalog", DomainType "information_schema.sql_identifier"),+> ("table_schema", DomainType "information_schema.sql_identifier"),+> ("table_name", DomainType "information_schema.sql_identifier"),+> ("column_name", DomainType "information_schema.sql_identifier"),+> ("ordinal_position",+> DomainType "information_schema.cardinal_number"),+> ("position_in_unique_constraint",+> DomainType "information_schema.cardinal_number")],+> CatCreateView "information_schema.parameters"+> [("specific_catalog",+> DomainType "information_schema.sql_identifier"),+> ("specific_schema",+> DomainType "information_schema.sql_identifier"),+> ("specific_name", DomainType "information_schema.sql_identifier"),+> ("ordinal_position",+> DomainType "information_schema.cardinal_number"),+> ("parameter_mode", DomainType "information_schema.character_data"),+> ("is_result", DomainType "information_schema.character_data"),+> ("as_locator", DomainType "information_schema.character_data"),+> ("parameter_name", DomainType "information_schema.sql_identifier"),+> ("data_type", DomainType "information_schema.character_data"),+> ("character_maximum_length",+> DomainType "information_schema.cardinal_number"),+> ("character_octet_length",+> DomainType "information_schema.cardinal_number"),+> ("character_set_catalog",+> DomainType "information_schema.sql_identifier"),+> ("character_set_schema",+> DomainType "information_schema.sql_identifier"),+> ("character_set_name",+> DomainType "information_schema.sql_identifier"),+> ("collation_catalog",+> DomainType "information_schema.sql_identifier"),+> ("collation_schema",+> DomainType "information_schema.sql_identifier"),+> ("collation_name", DomainType "information_schema.sql_identifier"),+> ("numeric_precision",+> DomainType "information_schema.cardinal_number"),+> ("numeric_precision_radix",+> DomainType "information_schema.cardinal_number"),+> ("numeric_scale", DomainType "information_schema.cardinal_number"),+> ("datetime_precision",+> DomainType "information_schema.cardinal_number"),+> ("interval_type", DomainType "information_schema.character_data"),+> ("interval_precision",+> DomainType "information_schema.character_data"),+> ("udt_catalog", DomainType "information_schema.sql_identifier"),+> ("udt_schema", DomainType "information_schema.sql_identifier"),+> ("udt_name", DomainType "information_schema.sql_identifier"),+> ("scope_catalog", DomainType "information_schema.sql_identifier"),+> ("scope_schema", DomainType "information_schema.sql_identifier"),+> ("scope_name", DomainType "information_schema.sql_identifier"),+> ("maximum_cardinality",+> DomainType "information_schema.cardinal_number"),+> ("dtd_identifier",+> DomainType "information_schema.sql_identifier")],+> CatCreateView "pg_cursors"+> [("name", ScalarType "text"), ("statement", ScalarType "text"),+> ("is_holdable", ScalarType "bool"),+> ("is_binary", ScalarType "bool"),+> ("is_scrollable", ScalarType "bool"),+> ("creation_time", ScalarType "timestamptz")],+> CatCreateView "pg_group"+> [("groname", ScalarType "name"), ("grosysid", ScalarType "oid"),+> ("grolist", ArrayType (ScalarType "oid"))],+> CatCreateView "pg_indexes"+> [("schemaname", ScalarType "name"),+> ("tablename", ScalarType "name"), ("indexname", ScalarType "name"),+> ("tablespace", ScalarType "name"),+> ("indexdef", ScalarType "text")],+> CatCreateView "pg_locks"+> [("locktype", ScalarType "text"), ("database", ScalarType "oid"),+> ("relation", ScalarType "oid"), ("page", ScalarType "int4"),+> ("tuple", ScalarType "int2"), ("virtualxid", ScalarType "text"),+> ("transactionid", ScalarType "xid"), ("classid", ScalarType "oid"),+> ("objid", ScalarType "oid"), ("objsubid", ScalarType "int2"),+> ("virtualtransaction", ScalarType "text"),+> ("pid", ScalarType "int4"), ("mode", ScalarType "text"),+> ("granted", ScalarType "bool")],+> CatCreateView "pg_prepared_statements"+> [("name", ScalarType "text"), ("statement", ScalarType "text"),+> ("prepare_time", ScalarType "timestamptz"),+> ("parameter_types", ArrayType (ScalarType "regtype")),+> ("from_sql", ScalarType "bool")],+> CatCreateView "pg_prepared_xacts"+> [("transaction", ScalarType "xid"), ("gid", ScalarType "text"),+> ("prepared", ScalarType "timestamptz"),+> ("owner", ScalarType "name"), ("database", ScalarType "name")],+> CatCreateView "pg_roles"+> [("rolname", ScalarType "name"), ("rolsuper", ScalarType "bool"),+> ("rolinherit", ScalarType "bool"),+> ("rolcreaterole", ScalarType "bool"),+> ("rolcreatedb", ScalarType "bool"),+> ("rolcatupdate", ScalarType "bool"),+> ("rolcanlogin", ScalarType "bool"),+> ("rolconnlimit", ScalarType "int4"),+> ("rolpassword", ScalarType "text"),+> ("rolvaliduntil", ScalarType "timestamptz"),+> ("rolconfig", ArrayType (ScalarType "text")),+> ("oid", ScalarType "oid")],+> CatCreateView "pg_rules"+> [("schemaname", ScalarType "name"),+> ("tablename", ScalarType "name"), ("rulename", ScalarType "name"),+> ("definition", ScalarType "text")],+> CatCreateView "pg_settings"+> [("name", ScalarType "text"), ("setting", ScalarType "text"),+> ("unit", ScalarType "text"), ("category", ScalarType "text"),+> ("short_desc", ScalarType "text"),+> ("extra_desc", ScalarType "text"), ("context", ScalarType "text"),+> ("vartype", ScalarType "text"), ("source", ScalarType "text"),+> ("min_val", ScalarType "text"), ("max_val", ScalarType "text"),+> ("enumvals", ArrayType (ScalarType "text")),+> ("boot_val", ScalarType "text"), ("reset_val", ScalarType "text"),+> ("sourcefile", ScalarType "text"),+> ("sourceline", ScalarType "int4")],+> CatCreateView "pg_shadow"+> [("usename", ScalarType "name"), ("usesysid", ScalarType "oid"),+> ("usecreatedb", ScalarType "bool"),+> ("usesuper", ScalarType "bool"), ("usecatupd", ScalarType "bool"),+> ("passwd", ScalarType "text"), ("valuntil", ScalarType "abstime"),+> ("useconfig", ArrayType (ScalarType "text"))],+> CatCreateView "pg_stat_activity"+> [("datid", ScalarType "oid"), ("datname", ScalarType "name"),+> ("procpid", ScalarType "int4"), ("usesysid", ScalarType "oid"),+> ("usename", ScalarType "name"),+> ("current_query", ScalarType "text"),+> ("waiting", ScalarType "bool"),+> ("xact_start", ScalarType "timestamptz"),+> ("query_start", ScalarType "timestamptz"),+> ("backend_start", ScalarType "timestamptz"),+> ("client_addr", ScalarType "inet"),+> ("client_port", ScalarType "int4")],+> CatCreateView "pg_stat_all_indexes"+> [("relid", ScalarType "oid"), ("indexrelid", ScalarType "oid"),+> ("schemaname", ScalarType "name"), ("relname", ScalarType "name"),+> ("indexrelname", ScalarType "name"),+> ("idx_scan", ScalarType "int8"),+> ("idx_tup_read", ScalarType "int8"),+> ("idx_tup_fetch", ScalarType "int8")],+> CatCreateView "pg_stat_all_tables"+> [("relid", ScalarType "oid"), ("schemaname", ScalarType "name"),+> ("relname", ScalarType "name"), ("seq_scan", ScalarType "int8"),+> ("seq_tup_read", ScalarType "int8"),+> ("idx_scan", ScalarType "int8"),+> ("idx_tup_fetch", ScalarType "int8"),+> ("n_tup_ins", ScalarType "int8"), ("n_tup_upd", ScalarType "int8"),+> ("n_tup_del", ScalarType "int8"),+> ("n_tup_hot_upd", ScalarType "int8"),+> ("n_live_tup", ScalarType "int8"),+> ("n_dead_tup", ScalarType "int8"),+> ("last_vacuum", ScalarType "timestamptz"),+> ("last_autovacuum", ScalarType "timestamptz"),+> ("last_analyze", ScalarType "timestamptz"),+> ("last_autoanalyze", ScalarType "timestamptz")],+> CatCreateView "pg_stat_bgwriter"+> [("checkpoints_timed", ScalarType "int8"),+> ("checkpoints_req", ScalarType "int8"),+> ("buffers_checkpoint", ScalarType "int8"),+> ("buffers_clean", ScalarType "int8"),+> ("maxwritten_clean", ScalarType "int8"),+> ("buffers_backend", ScalarType "int8"),+> ("buffers_alloc", ScalarType "int8")],+> CatCreateView "pg_stat_database"+> [("datid", ScalarType "oid"), ("datname", ScalarType "name"),+> ("numbackends", ScalarType "int4"),+> ("xact_commit", ScalarType "int8"),+> ("xact_rollback", ScalarType "int8"),+> ("blks_read", ScalarType "int8"), ("blks_hit", ScalarType "int8"),+> ("tup_returned", ScalarType "int8"),+> ("tup_fetched", ScalarType "int8"),+> ("tup_inserted", ScalarType "int8"),+> ("tup_updated", ScalarType "int8"),+> ("tup_deleted", ScalarType "int8")],+> CatCreateView "pg_stat_sys_indexes"+> [("relid", ScalarType "oid"), ("indexrelid", ScalarType "oid"),+> ("schemaname", ScalarType "name"), ("relname", ScalarType "name"),+> ("indexrelname", ScalarType "name"),+> ("idx_scan", ScalarType "int8"),+> ("idx_tup_read", ScalarType "int8"),+> ("idx_tup_fetch", ScalarType "int8")],+> CatCreateView "pg_stat_sys_tables"+> [("relid", ScalarType "oid"), ("schemaname", ScalarType "name"),+> ("relname", ScalarType "name"), ("seq_scan", ScalarType "int8"),+> ("seq_tup_read", ScalarType "int8"),+> ("idx_scan", ScalarType "int8"),+> ("idx_tup_fetch", ScalarType "int8"),+> ("n_tup_ins", ScalarType "int8"), ("n_tup_upd", ScalarType "int8"),+> ("n_tup_del", ScalarType "int8"),+> ("n_tup_hot_upd", ScalarType "int8"),+> ("n_live_tup", ScalarType "int8"),+> ("n_dead_tup", ScalarType "int8"),+> ("last_vacuum", ScalarType "timestamptz"),+> ("last_autovacuum", ScalarType "timestamptz"),+> ("last_analyze", ScalarType "timestamptz"),+> ("last_autoanalyze", ScalarType "timestamptz")],+> CatCreateView "pg_stat_user_functions"+> [("funcid", ScalarType "oid"), ("schemaname", ScalarType "name"),+> ("funcname", ScalarType "name"), ("calls", ScalarType "int8"),+> ("total_time", ScalarType "int8"),+> ("self_time", ScalarType "int8")],+> CatCreateView "pg_stat_user_indexes"+> [("relid", ScalarType "oid"), ("indexrelid", ScalarType "oid"),+> ("schemaname", ScalarType "name"), ("relname", ScalarType "name"),+> ("indexrelname", ScalarType "name"),+> ("idx_scan", ScalarType "int8"),+> ("idx_tup_read", ScalarType "int8"),+> ("idx_tup_fetch", ScalarType "int8")],+> CatCreateView "pg_stat_user_tables"+> [("relid", ScalarType "oid"), ("schemaname", ScalarType "name"),+> ("relname", ScalarType "name"), ("seq_scan", ScalarType "int8"),+> ("seq_tup_read", ScalarType "int8"),+> ("idx_scan", ScalarType "int8"),+> ("idx_tup_fetch", ScalarType "int8"),+> ("n_tup_ins", ScalarType "int8"), ("n_tup_upd", ScalarType "int8"),+> ("n_tup_del", ScalarType "int8"),+> ("n_tup_hot_upd", ScalarType "int8"),+> ("n_live_tup", ScalarType "int8"),+> ("n_dead_tup", ScalarType "int8"),+> ("last_vacuum", ScalarType "timestamptz"),+> ("last_autovacuum", ScalarType "timestamptz"),+> ("last_analyze", ScalarType "timestamptz"),+> ("last_autoanalyze", ScalarType "timestamptz")],+> CatCreateView "pg_statio_all_indexes"+> [("relid", ScalarType "oid"), ("indexrelid", ScalarType "oid"),+> ("schemaname", ScalarType "name"), ("relname", ScalarType "name"),+> ("indexrelname", ScalarType "name"),+> ("idx_blks_read", ScalarType "int8"),+> ("idx_blks_hit", ScalarType "int8")],+> CatCreateView "pg_statio_all_sequences"+> [("relid", ScalarType "oid"), ("schemaname", ScalarType "name"),+> ("relname", ScalarType "name"), ("blks_read", ScalarType "int8"),+> ("blks_hit", ScalarType "int8")],+> CatCreateView "pg_statio_all_tables"+> [("relid", ScalarType "oid"), ("schemaname", ScalarType "name"),+> ("relname", ScalarType "name"),+> ("heap_blks_read", ScalarType "int8"),+> ("heap_blks_hit", ScalarType "int8"),+> ("idx_blks_read", ScalarType "int8"),+> ("idx_blks_hit", ScalarType "int8"),+> ("toast_blks_read", ScalarType "int8"),+> ("toast_blks_hit", ScalarType "int8"),+> ("tidx_blks_read", ScalarType "int8"),+> ("tidx_blks_hit", ScalarType "int8")],+> CatCreateView "pg_statio_sys_indexes"+> [("relid", ScalarType "oid"), ("indexrelid", ScalarType "oid"),+> ("schemaname", ScalarType "name"), ("relname", ScalarType "name"),+> ("indexrelname", ScalarType "name"),+> ("idx_blks_read", ScalarType "int8"),+> ("idx_blks_hit", ScalarType "int8")],+> CatCreateView "pg_statio_sys_sequences"+> [("relid", ScalarType "oid"), ("schemaname", ScalarType "name"),+> ("relname", ScalarType "name"), ("blks_read", ScalarType "int8"),+> ("blks_hit", ScalarType "int8")],+> CatCreateView "pg_statio_sys_tables"+> [("relid", ScalarType "oid"), ("schemaname", ScalarType "name"),+> ("relname", ScalarType "name"),+> ("heap_blks_read", ScalarType "int8"),+> ("heap_blks_hit", ScalarType "int8"),+> ("idx_blks_read", ScalarType "int8"),+> ("idx_blks_hit", ScalarType "int8"),+> ("toast_blks_read", ScalarType "int8"),+> ("toast_blks_hit", ScalarType "int8"),+> ("tidx_blks_read", ScalarType "int8"),+> ("tidx_blks_hit", ScalarType "int8")],+> CatCreateView "pg_statio_user_indexes"+> [("relid", ScalarType "oid"), ("indexrelid", ScalarType "oid"),+> ("schemaname", ScalarType "name"), ("relname", ScalarType "name"),+> ("indexrelname", ScalarType "name"),+> ("idx_blks_read", ScalarType "int8"),+> ("idx_blks_hit", ScalarType "int8")],+> CatCreateView "pg_statio_user_sequences"+> [("relid", ScalarType "oid"), ("schemaname", ScalarType "name"),+> ("relname", ScalarType "name"), ("blks_read", ScalarType "int8"),+> ("blks_hit", ScalarType "int8")],+> CatCreateView "pg_statio_user_tables"+> [("relid", ScalarType "oid"), ("schemaname", ScalarType "name"),+> ("relname", ScalarType "name"),+> ("heap_blks_read", ScalarType "int8"),+> ("heap_blks_hit", ScalarType "int8"),+> ("idx_blks_read", ScalarType "int8"),+> ("idx_blks_hit", ScalarType "int8"),+> ("toast_blks_read", ScalarType "int8"),+> ("toast_blks_hit", ScalarType "int8"),+> ("tidx_blks_read", ScalarType "int8"),+> ("tidx_blks_hit", ScalarType "int8")],+> CatCreateView "pg_stats"+> [("schemaname", ScalarType "name"),+> ("tablename", ScalarType "name"), ("attname", ScalarType "name"),+> ("null_frac", ScalarType "float4"),+> ("avg_width", ScalarType "int4"),+> ("n_distinct", ScalarType "float4"),+> ("most_common_vals", Pseudo AnyArray),+> ("most_common_freqs", ArrayType (ScalarType "float4")),+> ("histogram_bounds", Pseudo AnyArray),+> ("correlation", ScalarType "float4")],+> CatCreateView "pg_tables"+> [("schemaname", ScalarType "name"),+> ("tablename", ScalarType "name"),+> ("tableowner", ScalarType "name"),+> ("tablespace", ScalarType "name"),+> ("hasindexes", ScalarType "bool"), ("hasrules", ScalarType "bool"),+> ("hastriggers", ScalarType "bool")],+> CatCreateView "pg_timezone_abbrevs"+> [("abbrev", ScalarType "text"),+> ("utc_offset", ScalarType "interval"),+> ("is_dst", ScalarType "bool")],+> CatCreateView "pg_timezone_names"+> [("name", ScalarType "text"), ("abbrev", ScalarType "text"),+> ("utc_offset", ScalarType "interval"),+> ("is_dst", ScalarType "bool")],+> CatCreateView "pg_user"+> [("usename", ScalarType "name"), ("usesysid", ScalarType "oid"),+> ("usecreatedb", ScalarType "bool"),+> ("usesuper", ScalarType "bool"), ("usecatupd", ScalarType "bool"),+> ("passwd", ScalarType "text"), ("valuntil", ScalarType "abstime"),+> ("useconfig", ArrayType (ScalarType "text"))],+> CatCreateView "pg_user_mappings"+> [("umid", ScalarType "oid"), ("srvid", ScalarType "oid"),+> ("srvname", ScalarType "name"), ("umuser", ScalarType "oid"),+> ("usename", ScalarType "name"),+> ("umoptions", ArrayType (ScalarType "text"))],+> CatCreateView "pg_views"+> [("schemaname", ScalarType "name"),+> ("viewname", ScalarType "name"), ("viewowner", ScalarType "name"),+> ("definition", ScalarType "text")],+> CatCreateView "information_schema.referential_constraints"+> [("constraint_catalog",+> DomainType "information_schema.sql_identifier"),+> ("constraint_schema",+> DomainType "information_schema.sql_identifier"),+> ("constraint_name",+> DomainType "information_schema.sql_identifier"),+> ("unique_constraint_catalog",+> DomainType "information_schema.sql_identifier"),+> ("unique_constraint_schema",+> DomainType "information_schema.sql_identifier"),+> ("unique_constraint_name",+> DomainType "information_schema.sql_identifier"),+> ("match_option", DomainType "information_schema.character_data"),+> ("update_rule", DomainType "information_schema.character_data"),+> ("delete_rule", DomainType "information_schema.character_data")],+> CatCreateView "information_schema.role_column_grants"+> [("grantor", DomainType "information_schema.sql_identifier"),+> ("grantee", DomainType "information_schema.sql_identifier"),+> ("table_catalog", DomainType "information_schema.sql_identifier"),+> ("table_schema", DomainType "information_schema.sql_identifier"),+> ("table_name", DomainType "information_schema.sql_identifier"),+> ("column_name", DomainType "information_schema.sql_identifier"),+> ("privilege_type", DomainType "information_schema.character_data"),+> ("is_grantable", DomainType "information_schema.character_data")],+> CatCreateView "information_schema.role_routine_grants"+> [("grantor", DomainType "information_schema.sql_identifier"),+> ("grantee", DomainType "information_schema.sql_identifier"),+> ("specific_catalog",+> DomainType "information_schema.sql_identifier"),+> ("specific_schema",+> DomainType "information_schema.sql_identifier"),+> ("specific_name", DomainType "information_schema.sql_identifier"),+> ("routine_catalog",+> DomainType "information_schema.sql_identifier"),+> ("routine_schema", DomainType "information_schema.sql_identifier"),+> ("routine_name", DomainType "information_schema.sql_identifier"),+> ("privilege_type", DomainType "information_schema.character_data"),+> ("is_grantable", DomainType "information_schema.character_data")],+> CatCreateView "information_schema.role_table_grants"+> [("grantor", DomainType "information_schema.sql_identifier"),+> ("grantee", DomainType "information_schema.sql_identifier"),+> ("table_catalog", DomainType "information_schema.sql_identifier"),+> ("table_schema", DomainType "information_schema.sql_identifier"),+> ("table_name", DomainType "information_schema.sql_identifier"),+> ("privilege_type", DomainType "information_schema.character_data"),+> ("is_grantable", DomainType "information_schema.character_data"),+> ("with_hierarchy",+> DomainType "information_schema.character_data")],+> CatCreateView "information_schema.role_usage_grants"+> [("grantor", DomainType "information_schema.sql_identifier"),+> ("grantee", DomainType "information_schema.sql_identifier"),+> ("object_catalog", DomainType "information_schema.sql_identifier"),+> ("object_schema", DomainType "information_schema.sql_identifier"),+> ("object_name", DomainType "information_schema.sql_identifier"),+> ("object_type", DomainType "information_schema.character_data"),+> ("privilege_type", DomainType "information_schema.character_data"),+> ("is_grantable", DomainType "information_schema.character_data")],+> CatCreateView "information_schema.routine_privileges"+> [("grantor", DomainType "information_schema.sql_identifier"),+> ("grantee", DomainType "information_schema.sql_identifier"),+> ("specific_catalog",+> DomainType "information_schema.sql_identifier"),+> ("specific_schema",+> DomainType "information_schema.sql_identifier"),+> ("specific_name", DomainType "information_schema.sql_identifier"),+> ("routine_catalog",+> DomainType "information_schema.sql_identifier"),+> ("routine_schema", DomainType "information_schema.sql_identifier"),+> ("routine_name", DomainType "information_schema.sql_identifier"),+> ("privilege_type", DomainType "information_schema.character_data"),+> ("is_grantable", DomainType "information_schema.character_data")],+> CatCreateView "information_schema.routines"+> [("specific_catalog",+> DomainType "information_schema.sql_identifier"),+> ("specific_schema",+> DomainType "information_schema.sql_identifier"),+> ("specific_name", DomainType "information_schema.sql_identifier"),+> ("routine_catalog",+> DomainType "information_schema.sql_identifier"),+> ("routine_schema", DomainType "information_schema.sql_identifier"),+> ("routine_name", DomainType "information_schema.sql_identifier"),+> ("routine_type", DomainType "information_schema.character_data"),+> ("module_catalog", DomainType "information_schema.sql_identifier"),+> ("module_schema", DomainType "information_schema.sql_identifier"),+> ("module_name", DomainType "information_schema.sql_identifier"),+> ("udt_catalog", DomainType "information_schema.sql_identifier"),+> ("udt_schema", DomainType "information_schema.sql_identifier"),+> ("udt_name", DomainType "information_schema.sql_identifier"),+> ("data_type", DomainType "information_schema.character_data"),+> ("character_maximum_length",+> DomainType "information_schema.cardinal_number"),+> ("character_octet_length",+> DomainType "information_schema.cardinal_number"),+> ("character_set_catalog",+> DomainType "information_schema.sql_identifier"),+> ("character_set_schema",+> DomainType "information_schema.sql_identifier"),+> ("character_set_name",+> DomainType "information_schema.sql_identifier"),+> ("collation_catalog",+> DomainType "information_schema.sql_identifier"),+> ("collation_schema",+> DomainType "information_schema.sql_identifier"),+> ("collation_name", DomainType "information_schema.sql_identifier"),+> ("numeric_precision",+> DomainType "information_schema.cardinal_number"),+> ("numeric_precision_radix",+> DomainType "information_schema.cardinal_number"),+> ("numeric_scale", DomainType "information_schema.cardinal_number"),+> ("datetime_precision",+> DomainType "information_schema.cardinal_number"),+> ("interval_type", DomainType "information_schema.character_data"),+> ("interval_precision",+> DomainType "information_schema.character_data"),+> ("type_udt_catalog",+> DomainType "information_schema.sql_identifier"),+> ("type_udt_schema",+> DomainType "information_schema.sql_identifier"),+> ("type_udt_name", DomainType "information_schema.sql_identifier"),+> ("scope_catalog", DomainType "information_schema.sql_identifier"),+> ("scope_schema", DomainType "information_schema.sql_identifier"),+> ("scope_name", DomainType "information_schema.sql_identifier"),+> ("maximum_cardinality",+> DomainType "information_schema.cardinal_number"),+> ("dtd_identifier", DomainType "information_schema.sql_identifier"),+> ("routine_body", DomainType "information_schema.character_data"),+> ("routine_definition",+> DomainType "information_schema.character_data"),+> ("external_name", DomainType "information_schema.character_data"),+> ("external_language",+> DomainType "information_schema.character_data"),+> ("parameter_style",+> DomainType "information_schema.character_data"),+> ("is_deterministic",+> DomainType "information_schema.character_data"),+> ("sql_data_access",+> DomainType "information_schema.character_data"),+> ("is_null_call", DomainType "information_schema.character_data"),+> ("sql_path", DomainType "information_schema.character_data"),+> ("schema_level_routine",+> DomainType "information_schema.character_data"),+> ("max_dynamic_result_sets",+> DomainType "information_schema.cardinal_number"),+> ("is_user_defined_cast",+> DomainType "information_schema.character_data"),+> ("is_implicitly_invocable",+> DomainType "information_schema.character_data"),+> ("security_type", DomainType "information_schema.character_data"),+> ("to_sql_specific_catalog",+> DomainType "information_schema.sql_identifier"),+> ("to_sql_specific_schema",+> DomainType "information_schema.sql_identifier"),+> ("to_sql_specific_name",+> DomainType "information_schema.sql_identifier"),+> ("as_locator", DomainType "information_schema.character_data"),+> ("created", DomainType "information_schema.time_stamp"),+> ("last_altered", DomainType "information_schema.time_stamp"),+> ("new_savepoint_level",+> DomainType "information_schema.character_data"),+> ("is_udt_dependent",+> DomainType "information_schema.character_data"),+> ("result_cast_from_data_type",+> DomainType "information_schema.character_data"),+> ("result_cast_as_locator",+> DomainType "information_schema.character_data"),+> ("result_cast_char_max_length",+> DomainType "information_schema.cardinal_number"),+> ("result_cast_char_octet_length",+> DomainType "information_schema.cardinal_number"),+> ("result_cast_char_set_catalog",+> DomainType "information_schema.sql_identifier"),+> ("result_cast_char_set_schema",+> DomainType "information_schema.sql_identifier"),+> ("result_cast_character_set_name",+> DomainType "information_schema.sql_identifier"),+> ("result_cast_collation_catalog",+> DomainType "information_schema.sql_identifier"),+> ("result_cast_collation_schema",+> DomainType "information_schema.sql_identifier"),+> ("result_cast_collation_name",+> DomainType "information_schema.sql_identifier"),+> ("result_cast_numeric_precision",+> DomainType "information_schema.cardinal_number"),+> ("result_cast_numeric_precision_radix",+> DomainType "information_schema.cardinal_number"),+> ("result_cast_numeric_scale",+> DomainType "information_schema.cardinal_number"),+> ("result_cast_datetime_precision",+> DomainType "information_schema.cardinal_number"),+> ("result_cast_interval_type",+> DomainType "information_schema.character_data"),+> ("result_cast_interval_precision",+> DomainType "information_schema.character_data"),+> ("result_cast_type_udt_catalog",+> DomainType "information_schema.sql_identifier"),+> ("result_cast_type_udt_schema",+> DomainType "information_schema.sql_identifier"),+> ("result_cast_type_udt_name",+> DomainType "information_schema.sql_identifier"),+> ("result_cast_scope_catalog",+> DomainType "information_schema.sql_identifier"),+> ("result_cast_scope_schema",+> DomainType "information_schema.sql_identifier"),+> ("result_cast_scope_name",+> DomainType "information_schema.sql_identifier"),+> ("result_cast_maximum_cardinality",+> DomainType "information_schema.cardinal_number"),+> ("result_cast_dtd_identifier",+> DomainType "information_schema.sql_identifier")],+> CatCreateView "information_schema.schemata"+> [("catalog_name", DomainType "information_schema.sql_identifier"),+> ("schema_name", DomainType "information_schema.sql_identifier"),+> ("schema_owner", DomainType "information_schema.sql_identifier"),+> ("default_character_set_catalog",+> DomainType "information_schema.sql_identifier"),+> ("default_character_set_schema",+> DomainType "information_schema.sql_identifier"),+> ("default_character_set_name",+> DomainType "information_schema.sql_identifier"),+> ("sql_path", DomainType "information_schema.character_data")],+> CatCreateView "information_schema.sequences"+> [("sequence_catalog",+> DomainType "information_schema.sql_identifier"),+> ("sequence_schema",+> DomainType "information_schema.sql_identifier"),+> ("sequence_name", DomainType "information_schema.sql_identifier"),+> ("data_type", DomainType "information_schema.character_data"),+> ("numeric_precision",+> DomainType "information_schema.cardinal_number"),+> ("numeric_precision_radix",+> DomainType "information_schema.cardinal_number"),+> ("numeric_scale", DomainType "information_schema.cardinal_number"),+> ("maximum_value", DomainType "information_schema.cardinal_number"),+> ("minimum_value", DomainType "information_schema.cardinal_number"),+> ("increment", DomainType "information_schema.cardinal_number"),+> ("cycle_option", DomainType "information_schema.character_data")],+> CatCreateView "information_schema.table_constraints"+> [("constraint_catalog",+> DomainType "information_schema.sql_identifier"),+> ("constraint_schema",+> DomainType "information_schema.sql_identifier"),+> ("constraint_name",+> DomainType "information_schema.sql_identifier"),+> ("table_catalog", DomainType "information_schema.sql_identifier"),+> ("table_schema", DomainType "information_schema.sql_identifier"),+> ("table_name", DomainType "information_schema.sql_identifier"),+> ("constraint_type",+> DomainType "information_schema.character_data"),+> ("is_deferrable", DomainType "information_schema.character_data"),+> ("initially_deferred",+> DomainType "information_schema.character_data")],+> CatCreateView "information_schema.table_privileges"+> [("grantor", DomainType "information_schema.sql_identifier"),+> ("grantee", DomainType "information_schema.sql_identifier"),+> ("table_catalog", DomainType "information_schema.sql_identifier"),+> ("table_schema", DomainType "information_schema.sql_identifier"),+> ("table_name", DomainType "information_schema.sql_identifier"),+> ("privilege_type", DomainType "information_schema.character_data"),+> ("is_grantable", DomainType "information_schema.character_data"),+> ("with_hierarchy",+> DomainType "information_schema.character_data")],+> CatCreateView "information_schema.tables"+> [("table_catalog", DomainType "information_schema.sql_identifier"),+> ("table_schema", DomainType "information_schema.sql_identifier"),+> ("table_name", DomainType "information_schema.sql_identifier"),+> ("table_type", DomainType "information_schema.character_data"),+> ("self_referencing_column_name",+> DomainType "information_schema.sql_identifier"),+> ("reference_generation",+> DomainType "information_schema.character_data"),+> ("user_defined_type_catalog",+> DomainType "information_schema.sql_identifier"),+> ("user_defined_type_schema",+> DomainType "information_schema.sql_identifier"),+> ("user_defined_type_name",+> DomainType "information_schema.sql_identifier"),+> ("is_insertable_into",+> DomainType "information_schema.character_data"),+> ("is_typed", DomainType "information_schema.character_data"),+> ("commit_action", DomainType "information_schema.character_data")],+> CatCreateView "information_schema.triggered_update_columns"+> [("trigger_catalog",+> DomainType "information_schema.sql_identifier"),+> ("trigger_schema", DomainType "information_schema.sql_identifier"),+> ("trigger_name", DomainType "information_schema.sql_identifier"),+> ("event_object_catalog",+> DomainType "information_schema.sql_identifier"),+> ("event_object_schema",+> DomainType "information_schema.sql_identifier"),+> ("event_object_table",+> DomainType "information_schema.sql_identifier"),+> ("event_object_column",+> DomainType "information_schema.sql_identifier")],+> CatCreateView "information_schema.triggers"+> [("trigger_catalog",+> DomainType "information_schema.sql_identifier"),+> ("trigger_schema", DomainType "information_schema.sql_identifier"),+> ("trigger_name", DomainType "information_schema.sql_identifier"),+> ("event_manipulation",+> DomainType "information_schema.character_data"),+> ("event_object_catalog",+> DomainType "information_schema.sql_identifier"),+> ("event_object_schema",+> DomainType "information_schema.sql_identifier"),+> ("event_object_table",+> DomainType "information_schema.sql_identifier"),+> ("action_order", DomainType "information_schema.cardinal_number"),+> ("action_condition",+> DomainType "information_schema.character_data"),+> ("action_statement",+> DomainType "information_schema.character_data"),+> ("action_orientation",+> DomainType "information_schema.character_data"),+> ("condition_timing",+> DomainType "information_schema.character_data"),+> ("condition_reference_old_table",+> DomainType "information_schema.sql_identifier"),+> ("condition_reference_new_table",+> DomainType "information_schema.sql_identifier"),+> ("condition_reference_old_row",+> DomainType "information_schema.sql_identifier"),+> ("condition_reference_new_row",+> DomainType "information_schema.sql_identifier"),+> ("created", DomainType "information_schema.time_stamp")],+> CatCreateView "information_schema.usage_privileges"+> [("grantor", DomainType "information_schema.sql_identifier"),+> ("grantee", DomainType "information_schema.sql_identifier"),+> ("object_catalog", DomainType "information_schema.sql_identifier"),+> ("object_schema", DomainType "information_schema.sql_identifier"),+> ("object_name", DomainType "information_schema.sql_identifier"),+> ("object_type", DomainType "information_schema.character_data"),+> ("privilege_type", DomainType "information_schema.character_data"),+> ("is_grantable", DomainType "information_schema.character_data")],+> CatCreateView "information_schema.user_mapping_options"+> [("authorization_identifier",+> DomainType "information_schema.sql_identifier"),+> ("foreign_server_catalog",+> DomainType "information_schema.sql_identifier"),+> ("foreign_server_name",+> DomainType "information_schema.sql_identifier"),+> ("option_name", DomainType "information_schema.sql_identifier"),+> ("option_value", DomainType "information_schema.character_data")],+> CatCreateView "information_schema.user_mappings"+> [("authorization_identifier",+> DomainType "information_schema.sql_identifier"),+> ("foreign_server_catalog",+> DomainType "information_schema.sql_identifier"),+> ("foreign_server_name",+> DomainType "information_schema.sql_identifier")],+> CatCreateView "information_schema.view_column_usage"+> [("view_catalog", DomainType "information_schema.sql_identifier"),+> ("view_schema", DomainType "information_schema.sql_identifier"),+> ("view_name", DomainType "information_schema.sql_identifier"),+> ("table_catalog", DomainType "information_schema.sql_identifier"),+> ("table_schema", DomainType "information_schema.sql_identifier"),+> ("table_name", DomainType "information_schema.sql_identifier"),+> ("column_name", DomainType "information_schema.sql_identifier")],+> CatCreateView "information_schema.view_routine_usage"+> [("table_catalog", DomainType "information_schema.sql_identifier"),+> ("table_schema", DomainType "information_schema.sql_identifier"),+> ("table_name", DomainType "information_schema.sql_identifier"),+> ("specific_catalog",+> DomainType "information_schema.sql_identifier"),+> ("specific_schema",+> DomainType "information_schema.sql_identifier"),+> ("specific_name", DomainType "information_schema.sql_identifier")],+> CatCreateView "information_schema.view_table_usage"+> [("view_catalog", DomainType "information_schema.sql_identifier"),+> ("view_schema", DomainType "information_schema.sql_identifier"),+> ("view_name", DomainType "information_schema.sql_identifier"),+> ("table_catalog", DomainType "information_schema.sql_identifier"),+> ("table_schema", DomainType "information_schema.sql_identifier"),+> ("table_name", DomainType "information_schema.sql_identifier")],+> CatCreateView "information_schema.views"+> [("table_catalog", DomainType "information_schema.sql_identifier"),+> ("table_schema", DomainType "information_schema.sql_identifier"),+> ("table_name", DomainType "information_schema.sql_identifier"),+> ("view_definition",+> DomainType "information_schema.character_data"),+> ("check_option", DomainType "information_schema.character_data"),+> ("is_updatable", DomainType "information_schema.character_data"),+> ("is_insertable_into",+> DomainType "information_schema.character_data")]]+
+ src/Database/HsSqlPpp/AstInternals/TypeChecking/ErrorUtils.lhs view
@@ -0,0 +1,30 @@++This file contains a bunch of small low level utilities to help with+type checking.++> module Database.HsSqlPpp.AstInternals.TypeChecking.ErrorUtils+> where+>+> import Database.HsSqlPpp.AstInternals.TypeType+> import Debug.Trace++> type E a = Either [TypeError] a+> type Et = E Type+>+> lmt :: Maybe a -> E a+> lmt = maybe (Left []) Right+>+> tes :: E a -> [TypeError]+> tes = either id (const [])+>+> etmt :: E a -> Maybe a+> etmt = either (const Nothing) Just+>++> liftList :: [(a,Maybe b)] -> Maybe [(a,b)]+> liftList is = sequence $ flip map is $ \(a,b) -> case b of+> Just b' -> Just (a,b')+> Nothing -> Nothing++> showIt :: Show a => String -> a -> a+> showIt m a = trace (m ++ " " ++ show a) a
+ src/Database/HsSqlPpp/AstInternals/TypeChecking/LocalBindings.lhs view
@@ -0,0 +1,20 @@++Forwarder for the interface to LocalBindingsInternal used by the rest+of the system.++> module Database.HsSqlPpp.AstInternals.TypeChecking.LocalBindings+> (+> LocalBindingsUpdate(..)+> ,LocalBindings+> ,emptyBindings+> ,lbUpdate+> ,lbLookupID+> ,lbLookupIDInType+> ,ppLocalBindings+> ,createLocalBindings+> ,getUnqualifiedBindings+> ,joinBindings+> ,lookupLocalBinding+> ) where+>+> import Database.HsSqlPpp.AstInternals.TypeChecking.LocalBindingsInternal
+ src/Database/HsSqlPpp/AstInternals/TypeChecking/LocalBindingsInternal.lhs view
@@ -0,0 +1,740 @@++This module contains the code to manage local identifier bindings+during the type checking process. This is used for e.g. looking up the+types of parameter and variable references in plpgsql functions, and+for looking up the types of identifiers in select expressions.++This module exposes the internals of the localbindings datatype for+testing.++The lookups to support are a single identifier, or to give a star+expansion.+++Some notes on lookups+all lookups are case insensitive+start by searching the head of the lookup update list and working down+the code here handles resolving the types of join columns when they+are not the same, and the update routine returns error if the join columns are not compatible+the code here handles expanding record types so that the components can be looked up++The local bindings is arranged as a stack. To append to this stack,+you use the LocalBindingsUpdate type. This is designed to be as easy as+possible for clients to use, so as much logic as possible is pushed+into the innards of this module, in particular most of the logic for+working with joins is in here.++The basic idea of the stack is at each level, there is a list of+qualified and unqualified names and types, to look up individual+ids. Some of the lookups map to ambiguous identifier errors. Also at+each level is a list of star expansions, one for each correlation name+in scope, and one for an unqualified star.++> {-# LANGUAGE ScopedTypeVariables,TupleSections #-}+>+> module Database.HsSqlPpp.AstInternals.TypeChecking.LocalBindingsInternal+> (+> LocalBindingsUpdate(..)+> ,LocalBindings(..)+> ,Source+> ,FullId+> ,SimpleId+> ,IDLookup+> -- ,StarExpand+> ,LocalBindingsLookup(..)+> ,emptyBindings+> ,lbUpdate+> -- ,lbExpandStar+> ,lbLookupID+> ,lbLookupIDInType+> --,lbUpdateDot+> ,ppLocalBindings+> ,ppLbls+> ,createLocalBindings+> ,getUnqualifiedBindings+> ,joinBindings+> ,lookupLocalBinding+> ) where+>+> --import Control.Monad as M+> --import Control.Applicative+> --import Debug.Trace+> import Data.List+> --import Data.Maybe+> import Data.Char+> --import Data.Either+> --import qualified Data.Map as M+>+> import Database.HsSqlPpp.AstInternals.TypeType+> --import Database.HsSqlPpp.Utils.Utils+> import Database.HsSqlPpp.AstInternals.Catalog.CatalogInternal+> --import Database.HsSqlPpp.AstInternals.TypeChecking.TypeConversion+> import Database.HsSqlPpp.AstInternals.TypeChecking.ErrorUtils+>++++> data LocalBindings = LocalBindingsError+> | LocalBindings [((String,String),Maybe Type)]++> createLocalBindings :: Maybe [(String,[(String,Maybe Type)])] -> LocalBindings+> createLocalBindings i =+> maybe LocalBindingsError mb i+> where+> mb b = LocalBindings+> $ flip concatMap b $ \(qn,cs) -> flip map cs $ \(c,t) -> ((qn,c), t)++> getUnqualifiedBindings :: LocalBindings -> [(String,Maybe Type)]+> getUnqualifiedBindings (LocalBindings ls) =+> map unwrap ls+> where+> unwrap ((_,n),t) = (n,t)+> getUnqualifiedBindings LocalBindingsError = []++> joinBindings :: LocalBindings -> LocalBindings -> LocalBindings+> joinBindings (LocalBindings a) (LocalBindings b) = LocalBindings $ a ++ b+> joinBindings LocalBindingsError _ = LocalBindingsError+> joinBindings _ LocalBindingsError = LocalBindingsError++> lookupLocalBinding :: LocalBindings -> String -> String -> E (Maybe Type)+> lookupLocalBinding LocalBindingsError _ _ = Right Nothing+> lookupLocalBinding (LocalBindings lb) q i =+> case lookup (q,i) lb of+> Just t -> Right t+> Nothing -> if (q == "") || any (==q) (map (fst . fst) lb)+> then Left [UnrecognisedIdentifier i]+> else Left [UnrecognisedCorrelationName q]+++++++++++++++++++++---------------------------------------------++++The data type to represent a set of local bindings in scope. The list+of updates used to create the local bindings is saved for debugging/+information.++> {-data LocalBindings = LocalBindings [LocalBindingsUpdate]+> [LocalBindingsLookup]+> deriving Show-}++Each layer of the local bindings stack is+a map from (correlation name, id name) to source,correlation name, id+name, type tuple, or a type error, used e.g. to represent ambigious+ids, etc.;+and a map from correlation name to a list of these tuples to handle+star expansions.++Missing correlation names are represented by an empty string for the+correlation name.++> type Source = String+>+> type FullId = (Source,[String],Type) -- source,fully qualified name components,type+> type SimpleId = (String,Type)+> type IDLookup = ([String], E FullId)+> --type StarExpand = E [FullId] --the order of the [FullId] part is important+>+> data LocalBindingsLookup = LocalBindingsLookup [IDLookup]+> deriving (Eq,Show)++This is the local bindings update that users of this module use.++> data LocalBindingsUpdate = LBIds {source :: Source+> ,correlationName :: Maybe String+> ,lbids :: [SimpleId]}+> | LBTref {source :: Source+> ,talias :: String+> ,lbids :: [SimpleId]+> ,lbsysids :: [SimpleId]}+> | LBJoinTref {source :: Source+> ,jtref1 :: LocalBindingsUpdate+> ,jtref2 :: LocalBindingsUpdate+> ,joinIds :: Either () [String] -- left () represents natural join+> -- right [] represents no join ids+> ,jalias :: Maybe String}+> deriving Show+>+> emptyBindings :: LocalBindings+> emptyBindings = LocalBindings [] -- undefined --LocalBindings [] []++================================================================================++> ppLocalBindings :: LocalBindings -> String+> ppLocalBindings = error "ppLocalBindings" -- (LocalBindings lbus lbls) =+> -- "LocalBindings\n" ++ doList show lbus ++ doList ppLbls lbls-}+>+> ppLbls :: LocalBindingsLookup -> String+> ppLbls = error "ppLbls" {- (LocalBindingsLookup is) =+> "LocalBindingsLookup\n" ++ doList show is -}+>+> --doList :: (a -> String) -> [a] -> String+> --doList m l = "[\n" ++ intercalate "\n," (map m l) ++ "\n]\n"++================================================================================++> lbUpdate :: Catalog -> LocalBindingsUpdate -> LocalBindings -> E LocalBindings+> lbUpdate _ _ lb = return lb {- cat u1 (LocalBindings us s) = do+> ids <- updateStuff cat u1+> return $ LocalBindings (u1 : us) (LocalBindingsLookup ids : s)-}++++> --updateStuff :: Catalog -> LocalBindingsUpdate -> E [IDLookup]++> --updateStuff _ _ = error "updateStuff"++LBIds doesn't support any star expansion, and doesn't support+accessing the whole set of ids as a composite via cn++> {-updateStuff _ (LBIds src cn ids) =+> return (unQuals ++ quals)+> where+> unQuals = map (\(n,t) -> ([n], Right (src,maybe [n] (: [n]) cn, t))) ids+> quals = maybe [] (\cn' -> map (\(n,t) -> ([cn',n], Right (src,[cn',n], t))) ids) cn++tref - used for a non join table reference, supports accessing public+fields under the alias name as a composite, and also supports system+id lookups. The star expansions are all the non system ids qualified and unqualified++> updateStuff _ (LBTref src al ids sids) =+> -- comp has to come after unquals because an unqualified reference which could refer+> -- to a column or the composite resolves as the column+> return (unQuals ++ quals ++ [comp])+> -- ,[("",Right pids),(al,Right pids)])+> where+> allIds = ids ++ sids+> unQuals = map (\(n,t) -> ([n], Right (src,[al,n], t))) allIds+> quals = map (\(n,t) -> ([al,n], Right (src,[al,n], t))) allIds+> comp = ([al], Right (src, [al], CompositeType ids))+> pids = map (\(n,t) -> (src,[al,n],t)) ids+++LBJoinTref {source :: Source+ ,jtref1 :: LocalBindingsUpdate+ ,jtref2 :: LocalBindingsUpdate+ ,joinIds :: Either () [String] -- left () represents natural join+ -- right [] represents no join ids+ ,jalias :: Maybe String}++> {-updateStuff cat (LBJoinTref _src u1 u2 jnames' _al) = do++How to get the lbs for a join:++First get the info for the two sub trefs:++> ids1 <- updateStuff cat u1+> ids2 <- updateStuff cat u2++split these apart so we have the unqualified lookups and star expands+separately++> let (uids1,qids1) = splitLkps ids1+> (uids2,qids2) = splitLkps ids2++We need some information: the names and types of the join ids, and the+names of any remaining ambiguous identifiers:++> let jnames :: [String]+> jnames = case jnames' of+> Right ns -> ns+> Left () -> intersect (map fst uids1)+> (map fst uids2)+> --todo: resolve these properly+> let jids = flip map jnames $ \i -> (i,fromJust $ lookup [i] ids1)+++First: get the names of the join ids: this is the explicit list in the+case of a using join, or the commonly named fields in a natural+join. We get the commonly named fields from the unqualified star+expansions so we don't include system attributes in a natural join.++Then check: make sure explicit join id list is in both trefs, and+resolve the types of the join ids.++If there is no alias:++work out the lookups: the qualified lookups stay the same (doesn't+properly deal with the same correlation names coming from 2 trefs at+the moment).++get the list of duplicate ids: uses the same code as getting the+natural join id list, - there will be none if this is a natural+join. Otherwise, get the list of common ids and remove any using ids+from this list. TODO?: system attributes can't be referenced through a+join unqualified?++The unqualified lookups: start with the join ids and types, then add+all the ids from each subtref except the ones which match the+duplicate ids. Add these dups which now lookup to left ambiguous+reference.++work out the star expansion: the qualified star expansions stay the+same++for the unqualified star expansion: similar to lookups. Start with the+join ids, but then add all the non join ids from each table - so we+might have more than one column with the same name.++If there is an alias:++do the same as above for the unqualified ids/starexpand, add these+again under the given alias, and don't pass through qualified lookups+or star expands.+++> {-let plainIds1 = pl ids1+> plainIds2 = pl ids2+> let jnames :: [String]+> jnames = case jids of+> Right ns -> ns+> Left () -> intersect (map fst plainIds1) (map fst plainIds2)+> -- make the lookups+> isJ :: IDLookup -> Bool+> isJ (ii,_) = case ii of+> [i] | i `elem` jnames -> True+> _ -> False+> nj :: [IDLookup] -> [IDLookup]+> nj = filter (not . isJ)+> joinLkps = filter isJ ids1+> nonJoinLkps1 = nj ids1+> nonJoinLkps2 = nj ids2-}+> {-let jids1 :: [(String,E FullId)]+> jids1 = flip map jnames $ \i -> (i,fromJust $ lookup i ids1)+> rj :: [(String,E FullId)] -> [(String,E FullId)]+> rj = filter $ \e -> fst e `notElem` jnames+> ids :: [(String,E FullId)]+> ids = jids1 ++ rj ids1 ++ rj ids2-}+> --make the star expansion+> --se1' <- se1+> --se2' <- se2+> {-let (us1',qs1) = splitSe se1'+> (us2',qs2) = splitSe se2'+> us1 <- us1'+> us2 <- us2'-}+> {- rj1 :: [FullId] -> [FullId]+> rj1 = filter $ \(_,n,_t) -> last n `notElem` jnames+> se = map snd jids1 ++ map return (rj1 se1) ++ map return (rj1 se2)+> return (ids, sequence se)-}+> --let x = joinLkps ++ nonJoinLkps1 ++ nonJoinLkps2+> --trace ("join stuff: " ++ doList show x) $ return ()+> return (ids1 ++ ids1, se1 ++ se2) --(joinLkps ++ nonJoinLkps1 ++ nonJoinLkps2, ("", Right (us1 ++ us2)) : qs1 ++ qs2)+> where+> {-splitSe :: [(String,StarExpand)] -> (StarExpand,[(String,StarExpand)])+> splitSe se = (uq, nuq)+> where+> uq = maybe [] snd $ find isUq se+> nuq = filter (not . isUq) se+> isUq (Right (a,_)) = a == ""-}+> splitLkps :: [([String], E FullId)]+> -> ([(String, E FullId)],[([String], E FullId)])+> splitLkps = partitionEithers . (map $ \x -> case x of+> ([n],t) -> Left (n,t)+> z -> Right z)-} -}++================================================================================++> {-lbExpandStar :: LocalBindings -> String -> E [FullId]+> lbExpandStar (LocalBindings _ (LocalBindingsLookup _ x : _)) c =+> maybe (case c of+> "" -> Left [BadStarExpand]+> y -> Left [UnrecognisedCorrelationName y])+> id $ lookup c x+> lbExpandStar _ _ = Left [BadStarExpand]-}++================================================================================++> lbLookupID :: LocalBindings -> [String] -> E FullId+> lbLookupID = error "lbLookupID" {-(LocalBindings _ lbl) i =+> let ls :: [[([String],E FullId)]]+> ls = map getLbIdl lbl+> in lkp1 ls $ map mtl i+> where+> lkp1 :: [[IDLookup]] -> [String] -> E FullId+> lkp1 (l:ls) i1 = fromMaybe (lkp1 ls i1) (lookup i1 l)+> lkp1 [] _ = if corMatch+> then Left [UnrecognisedIdentifier (intercalate "." i)]+> else Left [UnrecognisedCorrelationName (head i)]+> getLbIdl (LocalBindingsLookup x ) = x+> corMatch = case i of+> [q,_] -> q `elem` cors+> _ -> True+> cors :: [String]+> cors = let ls = map getLbIdl lbl+> in catMaybes $ concatMap (map getQ) ls+> getQ :: ([String], E FullId) -> Maybe String+> getQ ([q,_], _) = Just q+> getQ _ = Nothing -}+++> lbLookupIDInType :: Catalog -> LocalBindings -> Type -> String -> E FullId+> lbLookupIDInType = error "lbLookupIDInType" {-cat _ ty i = do+> t <- lmt $ getNamedCompositeTypes ty+> maybe (Left [UnrecognisedIdentifier i]) (fmap Right ("",[i],)) $ lookup i t+> where+> getNamedCompositeTypes :: Type -> Maybe [(String,Type)]+> getNamedCompositeTypes (NamedCompositeType n) =+> Just $ either (const []) id $ catCompositePublicAttrs cat [] n+> getNamedCompositeTypes (CompositeType t) = Just t+> getNamedCompositeTypes (PgRecord (Just t)) = getNamedCompositeTypes t+> getNamedCompositeTypes _ = Nothing -}++================================================================================++ > lbUpdateDot :: Catalog -> String -> LocalBindings -> E LocalBindings+ > lbUpdateDot cat i lb = do+ > (_,_,c) <- lbLookupID lb i+ > f <- lmt $ expandComposite cat True c+ > lbUpdate cat (LBIds "dot qual" Nothing f) emptyBindings++> {-f <- lmt $ expandComposite cat True c+> let u1 = (LBIds "dot qual" Nothing f)+> (ids,_) <- updateStuff cat u1+> pf <- lmt $ expandComposite cat False c+> let se = Right $ map (\(n,t) -> ("dot qual", [i,n], t)) pf+> return $ LocalBindings [u1] [LocalBindingsLookup ids se]-}++(Source, [String], Type)'+ against inferred type `(String, Type)'++ > expandComposite :: Catalog -> Bool -> Type -> Maybe [(String,Type)]+ > expandComposite cat b (SetOfType t) = expandComposite cat b t+ > expandComposite cat b (PgRecord (Just t)) = expandComposite cat b t+ > expandComposite _ _ (CompositeType fs) = Just fs+ > expandComposite cat b (NamedCompositeType n) = etmt $ (if b+ > then catCompositeAttrs+ > else catCompositePublicAttrs) cat [] n+ > expandComposite _ _ _ = Nothing+++================================================================================++> --mtl :: String -> String+> --mtl = map toLower+++++++------------------------------------------------------------+++++++++++++++++++++++++++++++++wrapper for the proper lookupid function, this is for backwards+compatibility with the old lookup code++> {-lbLookupID :: LocalBindings+> -> String -- identifier name+> -> E Type+> lbLookupID lb ci = let (cor,i) = splitIdentifier ci+> in fmap extractType $ lbLookupID1 lb cor i+> where+> extractType (_,_,_,t) = t+> splitIdentifier s = let (a,b) = span (/= '.') s+> in if b == ""+> then ("", a)+> else (a,tail b)+>+> lbLookupID1 :: LocalBindings+> -> String -- correlation name+> -> String -- identifier name+> -> E FullId -- type error or source, corr, type+> lbLookupID1 (LocalBindings _ lkps) cor' i' =+> --trace ("lookup: " ++ showID cor' i'+> -- ++ "in " ++ concatMap ppLbls lkps) $+> -- hack for triggers+> case cor of+> "new" | isTrigRec -> Right ("", "new", i, UnknownType)+> "old" | isTrigRec -> Right ("", "old", i, UnknownType)+> _ -> lkId lkps+> where+> isTrigRec = case lbLookupID1 (LocalBindings undefined lkps) "" cor of+> Right (_,_,_,Pseudo TriggerRecord) -> True+> _ -> False+> cor = mtl cor'+> i = mtl i'+> lkId ((LocalBindingsLookup idmap _):ls) =+> case lookup (cor,i) idmap of+> Just s -> s+> Nothing -> if cor /= "" && any ((==cor) . fst . fst) idmap+> then Left [UnrecognisedIdentifier $ showID cor i']+> else lkId ls+> lkId [] = if cor' == "" --todo: need to throw unrecognised identifier, if the correlation name isn't "", a id isn't found, and there are other ids with that correlation name+> then Left [UnrecognisedIdentifier $ showID cor i']+> else Left [UnrecognisedCorrelationName cor']++================================================================================++wrapped for the proper expand star routine, for compatibility with the+old implementation of local bindings++> lbExpandStar :: LocalBindings -> String -> E [SimpleId]+> lbExpandStar lb cor =+> fmap stripAll $ lbExpandStar1 lb cor+> where+> strip (_,_,n,t) = (n,t)+> stripAll = map strip+>+> lbExpandStar1 :: LocalBindings -> String -> E [FullId]+> lbExpandStar1 (LocalBindings _ lkps) cor' =+> exSt lkps+> where+> cor = mtl cor'+> exSt ((LocalBindingsLookup _ lst):ls) =+> case lookup cor lst of+> Just s -> s+> Nothing -> exSt ls+> exSt [] = Left [UnrecognisedCorrelationName cor]++================================================================================++This is where constructing the local bindings lookup stacks is done++> lbUpdate :: Catalog -> LocalBindingsUpdate -> LocalBindings -> E LocalBindings+> lbUpdate cat lbu' (LocalBindings lbus lkps) = do+> lbl <- makeStack cat lbu+> lbl1 <- expandComposites cat lbl+> --trace ("update: " ++ ppLbls lbl1) $ return ()+> return $ LocalBindings (lbu':lbus) (lbl1:lkps)+> where+> lbu = lowerise lbu'+> -- make correlation names and id names case insensitive+> -- by making them all lowercase+> lowerise (LBIds src ids) =+> LBIds src (mtll ids)+> lowerise (LBJoinIds t1 t2 ji a) =+> LBJoinIds (lowerise t1) (lowerise t2) (fmap mtll1 ji) (mtl a)+> lowerise (LBParallel lbu1 lbu2) =+> LBParallel (lowerise lbu1) (lowerise lbu2)+> mtll = map (\(n,t) -> (mtl n, t))+> mtll1 = map (\l -> mtl l)+>+> makeStack :: Catalog -> LocalBindingsUpdate -> E LocalBindingsLookup+> makeStack _ (LBIds src ids) =+> Right $ LocalBindingsLookup doIds doStar+> where+> doIds :: [((String,String)+> ,E FullId)]+> doIds = -- add unqualified if cor isn't empty string+> map (makeLookup "")+> (case cor of+> "" -> []+> _ -> map addDetails ids ++ map addDetails iids)+> ++ map (makeLookup cor) (map addDetails ids ++ map addDetails iids)+> where+> makeLookup c1 (s,_,n,t)= ((c1,n), Right (s,cor,n,t))+> doStar :: [(String, E [FullId])]+> doStar = case cor of+> "" -> []+> _ -> [("",Right $ map addDetails ids)]+> ++ [(cor,Right $ map addDetails ids)]+> addDetails (n,t) = (src,cor,n,t)+>+> makeStack cat (LBJoinIds t1 t2 jns a) = do+> --first get the stacks from t1 and t2+> --combine the elements of these filtering out the join ids+> --+> (LocalBindingsLookup i1 s1) <- makeStack cat t1+> (LocalBindingsLookup i2 s2) <- makeStack cat t2+> -- get the names and types of the join columns+> let jns' = case jns of+> Left () -> -- natural join, so we have to work out the names+> -- by looking at the common attributes+> -- we do this by getting the star expansion+> -- with no correlation name, and then finding+> -- the ids which appear in both lists+> -- (so this ignores internal ids)+> let ic1 :: [FullId]+> ic1 = fromRight [] $ maybe (Right []) id $ lookup "" s1+> ic2 = fromRight [] $ maybe (Right []) id $ lookup "" s2+> third (_,_,n,_) = n+> ii1 :: [String]+> ii1 = map third ic1+> ii2 = map third ic2+> in intersect ii1 ii2+> Right x -> x+> -- first prepare for the id lookups+> -- remove the join ids from the id lookups+> isJid ((_,n),_) = (n `elem` jns')+> removeJids = filter (not . isJid)+> i1' = removeJids i1+> i2' = removeJids i2+> jids <- M.sequence $ joinIDTypes i1 i2 jns'+> {-trace ("joinids: " ++ show jids+> ++ "\ni1 " ++ show i1+> ++ "\ni2 " ++ show i2+> ++ "\ni1' " ++ show i1'+> ++ "\ni2' " ++ show i2'+> ) $ return ()-}+> let jidsLk :: [IDLookup]+> jidsLk = if null i1 || null i2+> then [] --error?+> else let (_,Right (sc1,c1,_,_)) = head i1+> (_,Right (sc2,c2,_,_)) = head i2+> in flip concatMap jids $ \(n,t) -> [(("",n), Right (sc1,c1,n,t))+> ,((c1,n), Right (sc1,c1,n,t))+> ,((c2,n), Right (sc2,c2,n,t))+> ]+> --jidsF :: [FullId]+> --jidsF = rights $ map snd jidsLk+> newIdLookups = (jidsLk ++ (combineAddAmbiguousErrors i1' i2'))+> -- now do the star expansions+> -- for each correlation name, remove any ids which match a join id+> -- then prepend the join ids to that list+> se = combineStarExpansions s1 s2 -- don't know if this is quite right+> removeJids1 :: StarLookup -> StarLookup+> removeJids1 (k,ids) = (k, fmap (filter (\(_,_,n,_) -> n `notElem` jns')) ids)+> prependJids :: StarLookup -> StarLookup+> prependJids (c, lkps) = case lkps of+> Left _ -> (c,lkps)+> Right r | null r -> (c,lkps)+> Right r -> let (s,c1,_,_) = head r+> ids = map (\(n,t) -> (s,c1,n,t)) jids+> in (c, fmap (ids++) lkps)+> newStarExpansion = map (prependJids . removeJids1) se+> -- if we have an alias then we just want unqualified ids, then+> -- the same ids with a t3 alias for both ids and star expansion+> -- with all the correlation names replaced with the alias+> if a == ""+> then return $ LocalBindingsLookup newIdLookups newStarExpansion+> else return $ LocalBindingsLookup (aliasIds newIdLookups) (aliasExps newStarExpansion)+> where+> aliasIds :: [IDLookup] -> [IDLookup]+> aliasIds lkps = let trimmed = filter (\((c,_),_) -> c == "") lkps+> aliased = map (\(c,i) -> (c, fmap replaceCName i)) trimmed+> in aliased ++ map (\((_,n),i) -> ((a,n),i)) aliased+> aliasExps :: [StarLookup] -> [StarLookup]+> aliasExps lkps = let is = fromMaybe (error "localbindingsinternal.makestack : fromJust") $+> lookup "" lkps+> aliased = fmap (map replaceCName) is+> in [("",aliased), (a, aliased)]+> replaceCName (s,_,n,t) = (s,a,n,t)+> joinIDTypes :: [IDLookup] -> [IDLookup] -> [String] -> [E (String,Type)]+> joinIDTypes i1 i2 = map (joinIDType i1 i2)+> joinIDType :: [IDLookup] -> [IDLookup] -> String -> E (String,Type)+> joinIDType i1 i2 s = do+> (_,_,_,ty1) <- fromMaybe (Left [MissingJoinAttribute]) $+> lookup ("",s) i1+> (_,_,_,ty2) <- fromMaybe (Left [MissingJoinAttribute]) $+> lookup ("",s) i2+> ty <- resolveResultSetType cat [ty1,ty2]+> return (s,ty)+>+> makeStack cat (LBParallel u1 u2) = do+> -- get the two stacks,+> -- for any keys that appear in both respective lookups, replace with ambigious error+> -- and concatenate the lot+> (LocalBindingsLookup i1 s1) <- makeStack cat u1+> (LocalBindingsLookup i2 s2) <- makeStack cat u2+> return $ LocalBindingsLookup (combineAddAmbiguousErrors i1 i2) $ combineStarExpansions s1 s2+>+> combineStarExpansions :: [StarLookup] -> [StarLookup] -> [StarLookup]+> combineStarExpansions s1 s2 =+> let p :: [(String, [(String, E [FullId])])]+> p = npartition fst (s1 ++ s2)+> in flip map p $ \(a,b) -> (a,concat <$> M.sequence (map snd b))+>+> combineAddAmbiguousErrors :: [IDLookup] -> [IDLookup] -> [IDLookup]+> combineAddAmbiguousErrors i1 i2 =+> let commonIds = intersect (map fst i1) (map fst i2)+> removeCommonIds = filter (\a -> fst a `notElem` commonIds)+> fi1 = removeCommonIds i1+> fi2 = removeCommonIds i2+> errors = map (\(c,n) -> ((c,n),Left [AmbiguousIdentifier $ showID c n])) commonIds+> in fi1 ++ fi2 ++ errors++===============================================================================++> mtl :: String -> String+> mtl = map toLower+>+> showID :: String -> String -> String+> showID cor i = if cor == "" then i else cor ++ "." ++ i++================================================================================++expand composites++slightly dodgy - run through all the unqualified ids in the idlookups, and if any+have a composite type, add each element of that composite under the+correlation name of the idlookup itself, and add a star expansion for+that name also. This pretends that using a correlation name, composite+name and id name as a three part id isn't possible++> expandComposites :: Catalog -> LocalBindingsLookup -> E LocalBindingsLookup+> expandComposites cat (LocalBindingsLookup idlkp stlkp) = do+> let unqids = filter (\((a,_),_) -> a == "") idlkp+> strip = map snd unqids+> getComposites = filter (\(_,_,_,t) -> isCt t) $ rights strip+> comps <- mapM compExp getComposites+> let sts = map toStarLookup comps+> Right (LocalBindingsLookup (idlkp ++ (concat comps)) (stlkp ++ sts))+> where+> isCt (SetOfType t) = isCompositeType t+> isCt t = isCompositeType t+> getCompFields :: Type -> E [(String,Type)]+> getCompFields (SetOfType t) = getCompFields t+> getCompFields (PgRecord Nothing) = Right []+> getCompFields (PgRecord (Just t)) = getCompFields t+> getCompFields (CompositeType f) = return f+> getCompFields (NamedCompositeType s) = catCompositePublicAttrs cat [] s+> getCompFields (AnonymousRecordType _) = Right [] -- ??+> getCompFields _ = Right []+> compExp :: FullId -> E [IDLookup]+> compExp (s,_,n,t) = do+> f <- getCompFields t+> return $ flip map f $ \(n1,t1) -> ((n,n1),Right (s,n,n1,t1))+> toStarLookup :: [IDLookup] -> StarLookup+> toStarLookup ids =+> let fids::[FullId]+> fids = rights $ map snd ids+> (_,c,_,_) = if null fids then (undefined,"ERROR",undefined,undefined) else head fids+> in (c,Right fids)-}
+ src/Database/HsSqlPpp/AstInternals/TypeChecking/TypeConversion.lhs view
@@ -0,0 +1,668 @@+++This file contains the functions for resolving types and+function/operator resolution. See the pg manual chapter 10:++http://www.postgresql.org/docs/8.4/interactive/typeconv.html++This code is really spaghettified.++findCallMatch - pass in a name and a list of arguments, and it returns+the matching function. (pg manual 10.2,10.3)++resolveResultSetType - pass in a set of types, and it tries to find+the common type they can all be cast to. (pg manual 10.5)++checkAssignmentValid - pass in source type and target type, returns+ typelist[] if ok, otherwise error, pg manual 10.4+ Value Storage++> {-# LANGUAGE PatternGuards #-}+> module Database.HsSqlPpp.AstInternals.TypeChecking.TypeConversion (+> findCallMatch+> ,resolveResultSetType+> ,checkAssignmentValid+> ,checkAssignmentsValid+> ) where+>+> import Data.Maybe+> import Data.List+> import Data.Either+> --import Debug.Trace+> import Data.Char+>+> import Database.HsSqlPpp.AstInternals.TypeType+> import Database.HsSqlPpp.AstInternals.Catalog.CatalogInternal+> import Database.HsSqlPpp.Utils.Utils++ > traceIt :: Show a => String -> a -> a+ > traceIt s t = trace (s ++ ": " ++ show t) t++= findCallMatch++~~~~++findCallMatch - partially implements the type conversion rules for+finding an operator or function match given a name and list of+arguments with partial or fully specified types++TODO:, qualifiers+namespaces+function style casts not in catalog+variadic args+default args+domains -> base type+what about aggregates and window functions?++Algo:++cands = all fns with matching names+ and same number of args++if exact match on types in this list, use it+ (if binary operator being matched, and one arg is typed and one is+ unknown, also match an operator by assuming the unknown is the same+ as the typed arg)++best match part:++filter cands with args which don't exactly match input args, and input+args cannot be converted by an implicit cast. unknowns count as+matching anything+if one left: use it++filter for preferred types:++for each cand, count each arg at each position which needs conversion,+and the cand type is a preferred type at that position.+if there are cands with count>0, keep only cands with the max count,+if one return it+if there are no cands with count>0, keep them all++check unknowns:+if any input args are unknown, and any cand accepts string at that+position, fix that arg's category as string, otherwise if all cands+accept same category at that position, fix that input args as that+category.+if we still have unknowns, then fail++discard cands which don't match the new input arg/category list++for each categorised input arg, if any cand accepts preferred type at+that position, get rid of cands which don't accept preferred type at+that position++if one left: use+else fail++polymorphic matching:+want to create a set of matches to insert into the cast pairs list+so:++find all matches on name, num args and have polymorphic parameters++for each one, check the polymorphic categories - eliminate fns that+have params in wrong category - array, non array, enum.+work out the base types for the polymorphic args at each spot based on+the args passed - so each arg is unchanged except arrays which have+the array part stripped off++now we have a list of types to match against the polymorphic params,+use resolveResultSetType to see if we can produce a match, if so,+create a new prototype which is the same as the polymorphic function+but with this matching arg swapped in, work out the casts and add it+into cand cast pairs, after exact match has been run.+++findCallMatch is a bit of a mess++todos:++rewrite this to try to make it a bit clearer++find some way to draw a data flow diagram of the code easily++add a logging facility so the function can explain what has happened+at each state, so you can provide a detailed explanation e.g. if the+code can't find an operator match to see what it has tried to match+against.++~~~~++> type ProtArgCast = (FunctionPrototype, [ArgCastFlavour])++> {-+> between, greatest and least are treated as syntactic sugar so we+> delegate the function lookups to the <=/>= operators.+> the row comparison should be more general than this, since it supports+> any operator satisfying some properties+> -}+> findCallMatch :: Catalog -> String -> [Type] -> Either [TypeError] FunctionPrototype+> findCallMatch cat fnName' argsType =+> --trace ("typecheckfncall " ++ fnName' ++ show argsType) $+> --dependsOnRTpe argsType $+> case fnName of+> "count" -> -- not quite sure how this is suppose to work,+> -- the counts in the pg catalog accept either+> -- no args, or one arg of type any, but you can call+> -- count with multiple arguments?+> return ("count", argsType, typeBigInt, False)+> "!between" | as@[_,_,_] <- argsType -> do+> -- not sure if this is correct - use the result set resolution+> -- to make the argument types compatible+> -- then just check there is a >=, <= returning a pair+> -- of somethings which can be anded+> t <- resolveResultSetType cat as+> f1 <- lookupReturnType ">=" [t,t]+> f2 <- lookupReturnType "<=" [t,t]+> _ <- lookupFn "!and" [f1,f2]+> return ("!between", [t,t,t], typeBool, False)+> "greatest" -> do+> (_,a,t,x) <- lookupFn fnName argsType+> _ <- lookupFn ">=" [t,t]+> return ("greatest",a,t,x)+> "least" -> do+> (_,a,t,x) <- lookupFn fnName argsType+> _ <- lookupFn "<=" [t,t]+> return ("greatest",a,t,x)+> "!rowctor" -> return ("!rowCtor", argsType, AnonymousRecordType argsType, False)+> -- special case the row comparison ops+> -- this needs to be fixed: we want to match+> -- any implicit casts to functions on composite types+> -- first, then we can use the anonymous record type on+> -- any composite+> "." | [_,b] <- argsType -> Right (".", argsType, b, False)+> _ | fnName `elem` ["=", "<>", "<=", ">=", "<", ">"]+> && length argsType == 2+> && all isCompositeOrSetOfCompositeType argsType,+> Just a1 <- matchCompTypes argsType ->+> -- && compositesCompatible cat (head argsType) (head $ tail argsType) ->+> return (fnName, a1, typeBool, False)+> --checked for all special cases, so run general case now+> s -> lookupFn s argsType+> where+> lookupReturnType :: String -> [Type] -> Either [TypeError] Type+> lookupReturnType s1 args = fmap (\(_,_,r,_) -> r) $ lookupFn s1 args+> lookupFn :: String -> [Type] -> Either [TypeError] FunctionPrototype+> lookupFn s1 = findCallMatch1 cat+> (if s1 == "u-" then "-" else s1)+> fnName = map toLower fnName'+> -- help the type inference for rowCtors. pretty unfinished. If we compare+> -- two compatible row constructors, then replace any unknown types with the+> -- pair type+> matchCompTypes :: [Type] -> Maybe [Type]+> matchCompTypes [a@(AnonymousRecordType as),b@(AnonymousRecordType bs)] =+> if not (compositesCompatible cat a b)+> then Nothing+> else let (nt1,nt2) = unzip $ map (\(t,t1) -> case (t,t1) of+> (UnknownType, u) -> (u,u)+> (u, UnknownType) -> (u,u)+> _ -> (t,t1)) $ zip as bs+> in Just [AnonymousRecordType nt1,AnonymousRecordType nt2]+> matchCompTypes [a,b] =+> if not (compositesCompatible cat a b)+> then Nothing+> else Just [a,b]+> matchCompTypes _ = Nothing+++>+> findCallMatch1 :: Catalog -> String -> [Type] -> Either [TypeError] FunctionPrototype+> findCallMatch1 cat f inArgs =+> returnIfOnne [+> exactMatch+> ,binOp1UnknownMatch+> ,polymorpicExactMatches+> ,reachable+> ,mostExactMatches+> ,filteredForPreferred+> ,unknownMatchesByCat]+> [NoMatchingOperator f inArgs]+> where+> -- basic lists which roughly mirror algo+> -- get the possibly matching candidates+> initialCandList :: [FunctionPrototype]+> initialCandList = filter (\(_,candArgs,_,_) ->+> length candArgs == length inArgs) $+> map expandVariadic $ catLookupFns cat f+>+> expandVariadic fp@(fn,a,r,v) =+> if v+> then case last a of+> ArrayType t -> (fn, na,r,v)+> where na = init a ++ replicate (length inArgs - length a + 1) t+> _ -> fp --should be error+> else fp+>+> -- record what casts are needed for each candidate+> castPairs :: [[ArgCastFlavour]]+> castPairs = map (listCastPairs . getFnArgs) initialCandList+>+> candCastPairs :: [ProtArgCast]+> candCastPairs = {-traceIt "candCastPairs" $-} zip initialCandList castPairs+>+> -- see if we have an exact match+> exactMatch :: [ProtArgCast]+> exactMatch = filterCandCastPairs (all (==ExactMatch)) candCastPairs+>+> -- implement the one known, one unknown resolution for binary operators+> binOp1UnknownMatch :: [ProtArgCast]+> binOp1UnknownMatch = getBinOp1UnknownMatch candCastPairs+>+> --collect possible polymorphic matches+> polymorphicMatches :: [ProtArgCast]+> polymorphicMatches = filterPolymorphics candCastPairs+>+> polymorpicExactMatches :: [ProtArgCast]+> polymorpicExactMatches = filterCandCastPairs (all (==ExactMatch)) polymorphicMatches+>+> -- eliminate candidates for which the inargs cannot be casted to+> reachable :: [ProtArgCast]+> reachable = mergePolys (filterCandCastPairs (none (==CannotCast)) candCastPairs)+> polymorphicMatches+>+> mostExactMatches :: [ProtArgCast]+> mostExactMatches =+> let inArgsBase = map (replaceWithBase cat) inArgs+> exactCounts :: [Int]+> exactCounts =+> map ((length+> . filter (\(a1,a2) -> a1==replaceWithBase cat a2)+> . zip inArgsBase)+> . (\((_,a,_,_),_) -> a)) reachable+> pairs = zip reachable exactCounts+> maxm = maximum exactCounts+> in case () of+> _ | null reachable -> []+> | maxm > 0 -> map fst $ filter (\(_,b) -> b == maxm) pairs+> | otherwise -> []+>+> -- keep the cands with the most casts to preferred types+> preferredTypesCounts = countPreferredTypeCasts reachable+> keepCounts = maximum preferredTypesCounts+> itemCountPairs :: [(ProtArgCast,Int)]+> itemCountPairs = zip reachable preferredTypesCounts+> filteredForPreferred :: [ProtArgCast]+> filteredForPreferred = map fst $ filter (\(_,i) -> i == keepCounts) itemCountPairs+>+> -- collect the inArg type categories to do unknown inArg resolution+> argCats :: [Either () String]+> argCats = getCastCategoriesForUnknowns filteredForPreferred+> unknownMatchesByCat :: [ProtArgCast]+> unknownMatchesByCat = getCandCatMatches filteredForPreferred argCats+>+> -------------+>+> listCastPairs :: [Type] -> [ArgCastFlavour]+> listCastPairs l = listCastPairs' inArgs l+> where+> listCastPairs' :: [Type] -> [Type] -> [ArgCastFlavour]+> listCastPairs' (ia:ias) (ca:cas) =+> (case () of+> _ | ia == ca -> ExactMatch+> | castableFromTo cat ImplicitCastContext ia ca ->+> if forceRight (catPreferredType cat ca)+> then ImplicitToPreferred+> else ImplicitToNonPreferred+> | otherwise -> CannotCast+> ) : listCastPairs' ias cas+> listCastPairs' [] [] = []+> listCastPairs' _ _ = error "internal error: mismatched num args in implicit cast algorithm"+>+>+> getBinOp1UnknownMatch :: [ProtArgCast] -> [ProtArgCast]+> getBinOp1UnknownMatch cands =+> if not (isOperatorName f &&+> length inArgs == 2 &&+> count (==UnknownType) inArgs == 1)+> then []+> else let newInArgs =+> replicate 2 (if head inArgs == UnknownType+> then inArgs !! 1+> else head inArgs)+> in filter (\((_,a,_,_),_) -> a == newInArgs) cands+>+> filterPolymorphics :: [ProtArgCast] -> [ProtArgCast]+> filterPolymorphics cl =+> let ms :: [ProtArgCast]+> ms = filter canMatch polys+> polyTypes :: [Maybe Type]+> polyTypes = map resolvePolyType ms+> polyTypePairs :: [(Maybe Type, ProtArgCast)]+> polyTypePairs = zip polyTypes ms+> keepPolyTypePairs :: [(Type, ProtArgCast)]+> keepPolyTypePairs =+> mapMaybe (\(t,p) -> case t of+> Nothing -> Nothing+> Just t' -> Just (t',p))+> polyTypePairs+> finalRows = map (\(t,p) -> instantiatePolyType p t)+> keepPolyTypePairs+> --create the new cast lists+> cps :: [[ArgCastFlavour]]+> cps = map (listCastPairs . getFnArgs . fst) finalRows+> in zip (map fst finalRows) cps+> where+> polys :: [ProtArgCast]+> polys = filter (\((_,a,_,_),_) -> any (`elem`+> -- bit hacky+> [Pseudo Any+> ,Pseudo AnyArray+> ,Pseudo AnyElement+> ,Pseudo AnyEnum+> ,Pseudo AnyNonArray]) a) cl+> canMatch :: ProtArgCast -> Bool+> canMatch pac =+> let ((_,fnArgs,_,_),_) = pac+> in canMatch' inArgs fnArgs+> where+> canMatch' [] [] = True+> canMatch' (ia:ias) (pa:pas) =+> case pa of+> Pseudo Any -> nextMatch+> Pseudo AnyArray -> isArrayType ia && nextMatch+> Pseudo AnyElement -> nextMatch+> Pseudo AnyEnum -> False+> Pseudo AnyNonArray -> if isArrayType ia+> then False+> else nextMatch+> _ -> True+> where+> nextMatch = canMatch' ias pas+> canMatch' _ _ = error "internal error: mismatched lists in canMatch'"+> resolvePolyType :: ProtArgCast -> Maybe Type+> resolvePolyType ((_,fnArgs,_,_),_) =+> {-trace ("\nresolving " ++ show fnArgs ++ " against " ++ show inArgs ++ "\n") $-}+> let argPairs = zip inArgs fnArgs+> typeList :: [Type]+> typeList = catMaybes $ flip map argPairs+> $ \(ia,fa) -> case fa of+> Pseudo Any -> if isArrayType ia+> then eitherToMaybe $ unwrapArray ia+> else Just ia+> Pseudo AnyArray -> eitherToMaybe $ unwrapArray ia+> Pseudo AnyElement -> if isArrayType ia+> then eitherToMaybe $ unwrapArray ia+> else Just ia+> Pseudo AnyEnum -> Nothing+> Pseudo AnyNonArray -> Just ia+> _ -> Nothing+> in {-trace ("\nresolve types: " ++ show typeList ++ "\n") $-}+> case resolveResultSetType cat typeList of+> Left _ -> Nothing+> Right t -> Just t+> instantiatePolyType :: ProtArgCast -> Type -> ProtArgCast+> instantiatePolyType pac t =+> let ((fn,a,r,v),_) = pac+> instArgs = swapPolys t a+> p1 = (fn, instArgs, swapPoly t r,v)+> in let x = (p1,listCastPairs instArgs)+> in {-trace ("\nfixed:" ++ show x ++ "\n")-} x+> where+> swapPolys :: Type -> [Type] -> [Type]+> swapPolys = map . swapPoly+> swapPoly :: Type -> Type -> Type+> swapPoly pit at =+> case at of+> Pseudo Any -> if isArrayType at+> then ArrayType pit+> else pit+> Pseudo AnyArray -> ArrayType pit+> Pseudo AnyElement -> if isArrayType at+> then ArrayType pit+> else pit+> Pseudo AnyEnum -> pit+> Pseudo AnyNonArray -> pit+> SetOfType (Pseudo AnyElement) -> if isArrayType at+> then SetOfType (ArrayType pit)+> else SetOfType pit+> _ -> at+> --merge in the instantiated poly functions, with a twist:+> -- if we already have the exact same set of args in the non poly list+> -- as a poly, then don't include that poly+> mergePolys :: [ProtArgCast] -> [ProtArgCast] -> [ProtArgCast]+> mergePolys orig polys =+> let origArgs = map (\((_,a,_,_),_) -> a) orig+> filteredPolys = filter (\((_,a,_,_),_) -> a `notElem` origArgs) polys+> in orig ++ filteredPolys+>+> countPreferredTypeCasts :: [ProtArgCast] -> [Int]+> countPreferredTypeCasts =+> map (\(_,cp) -> count (==ImplicitToPreferred) cp)+>+> -- Left () is used for inArgs which aren't unknown,+> -- and for unknowns which we don't have a+> -- unique category+> -- Right s -> s is the single letter category at+> -- that position+> getCastCategoriesForUnknowns :: [ProtArgCast] -> [Either () String]+> getCastCategoriesForUnknowns cands =+> filterArgN 0+> where+> candArgLists :: [[Type]]+> candArgLists = map (\((_,a,_,_), _) -> a) cands+> filterArgN :: Int -> [Either () String]+> filterArgN n =+> if n == length inArgs+> then []+> else let targType = inArgs !! n+> in ((if targType /= UnknownType+> then Left ()+> else getCandsCatAt n) : filterArgN (n+1))+> where+> getCandsCatAt :: Int -> Either () String+> getCandsCatAt n' =+> let typesAtN = map (!!n') candArgLists+> catsAtN = map (forceRight . catTypeCategory cat) typesAtN+> in case () of+> --if any are string choose string+> _ | any (== "S") catsAtN -> Right "S"+> -- if all are same cat choose that+> | all (== head catsAtN) catsAtN -> Right $ head catsAtN+> -- otherwise no match, this will be+> -- picked up as complete failure to match+> -- later on+> | otherwise -> Left ()+>+> getCandCatMatches :: [ProtArgCast] -> [Either () String] -> [ProtArgCast]+> getCandCatMatches candsA cats = getMatches candsA 0+> where+> getMatches :: [ProtArgCast] -> Int -> [ProtArgCast]+> getMatches cands n =+> case () of+> _ | n == length inArgs -> cands+> | (inArgs !! n) /= UnknownType -> getMatches cands (n + 1)+> | otherwise ->+> let catMatches :: [ProtArgCast]+> catMatches = filter (\c -> Right (getCatForArgN n c) ==+> (cats !! n)) cands+> prefMatches :: [ProtArgCast]+> prefMatches = filter (forceRight . catPreferredType cat .+> getTypeForArgN n) catMatches+> keepMatches :: [ProtArgCast]+> keepMatches = if length prefMatches > 0+> then prefMatches+> else catMatches+> in getMatches keepMatches (n + 1)+> getTypeForArgN :: Int -> ProtArgCast -> Type+> getTypeForArgN n ((_,a,_,_),_) = a !! n+> getCatForArgN :: Int -> ProtArgCast -> String+> getCatForArgN n = forceRight . catTypeCategory cat . getTypeForArgN n+>+> -- utils+> -- filter a candidate/cast flavours pair by a predicate on each+> -- individual cast flavour+> filterCandCastPairs :: ([ArgCastFlavour] -> Bool)+> -> [ProtArgCast]+> -> [ProtArgCast]+> filterCandCastPairs predi = filter (\(_,cp) -> predi cp)+>+> getFnArgs :: FunctionPrototype -> [Type]+> getFnArgs (_,a,_,_) = a+> returnIfOnne [] e = Left e+> returnIfOnne (l:ls) e = if length l == 1+> then Right $ getHeadFn l+> else returnIfOnne ls e+>+> getHeadFn :: [ProtArgCast] -> FunctionPrototype+> getHeadFn l = let ((hdFn, _):_) = l+> in hdFn+> none p = not . any p+> count p = length . filter p+>+> data ArgCastFlavour = ExactMatch+> | CannotCast+> | ImplicitToPreferred+> | ImplicitToNonPreferred+> deriving (Eq,Show)+>++~~~~+resolveResultSetType -+partially implement the typing of results sets where the types aren't+all the same and not unknown+used in union,except,intersect columns, case, array ctor, values, greatest and least++algo:+if all inputs are same and not unknown -> that type+replace domains with base types+if all inputs are unknown then text+if the non unknown types aren't all in same category then fail+choose first input type that is a preferred type if there is one+choose last non unknown type that has implicit casts from all preceding inputs+check all can convert to selected type else fail++code is not as much of a mess as findCallMatch+~~~~++> resolveResultSetType :: Catalog -> [Type] -> Either [TypeError] Type+> resolveResultSetType cat inArgs = do+> errorWhen (null inArgs) [TypelessEmptyArray]+> returnWhen allSameType (head inArgs) $ do+> returnWhen allSameBaseType (head inArgsBase) $ do+> --returnWhen allUnknown (UnknownType) $ do+> errorWhen (not allSameCat) [IncompatibleTypeSet inArgs]+> returnWhen (isJust targetType &&+> allConvertibleToFrom (fromMaybe (error "TypeConversion.resolveresultsettype 1: fromJust") targetType) inArgs)+> (fromMaybe (error "TypeConversion.resolveresultsettype 2: fromJust") targetType) $ do+> Left [IncompatibleTypeSet inArgs]+> where+> allSameType = all (== head inArgs) inArgs -- &&+> --head inArgs /= UnknownType+> allSameBaseType = all (== head inArgsBase) inArgsBase &&+> head inArgsBase /= UnknownType+> inArgsBase = map (replaceWithBase cat) inArgs+> --allUnknown = all (==UnknownType) inArgsBase+> allSameCat = let firstCat = catTypeCategory cat (head knownTypes)+> in all (\t -> catTypeCategory cat t == firstCat)+> knownTypes+> targetType = case catMaybes [firstPreferred, lastAllConvertibleTo] of+> [] -> Nothing+> (x:_) -> Just x+> firstPreferred = find (forceRight . catPreferredType cat) knownTypes+> lastAllConvertibleTo = firstAllConvertibleTo (reverse knownTypes)+> firstAllConvertibleTo (x:xs) = if allConvertibleToFrom x xs+> then Just x+> else firstAllConvertibleTo xs+> firstAllConvertibleTo [] = Nothing+> knownTypes = filter (/=UnknownType) inArgsBase+> allConvertibleToFrom = all . flip (castableFromTo cat ImplicitCastContext)++todo:+cast empty array, where else can an empty array work?++================================================================================++= checkAssignmentValue++> checkAssignmentValid :: Catalog -> Type -> Type -> Either [TypeError] ()+> checkAssignmentValid cat from to =+> if castableFromTo cat AssignmentCastContext from to+> then Right ()+> else Left [IncompatibleTypes to from]+>+> compositesCompatible :: Catalog -> Type -> Type -> Bool+> compositesCompatible cat =+> castableFromTo cat ImplicitCastContext++> checkAssignmentsValid :: Catalog -> [Type] -> [Type] -> Either [TypeError] ()+> checkAssignmentsValid cat from to = do+> -- special case for assigning to composite+> let f = case to of+> [t] | isCompositeType t -> [AnonymousRecordType from]+> _ -> from+> errorWhen (length f /= length to)+> [WrongNumberOfColumns]+> let ls = concat $ lefts $ zipWith (checkAssignmentValid cat) f to+> errorWhen (not (null ls)) ls+++================================================================================++= castable function++wrapper around the catalog to add a bunch of extra valid casts++> castableFromTo :: Catalog -> CastContext -> Type -> Type -> Bool+> castableFromTo cat cc from to =+> --trace ("check cast " ++ show from ++ "->" ++ show to) $+> -- put this here to avoid having to write it everywhere else+> from == to+> -- unknown can be implicitly cast to anything (is this completely true?)+> || from == UnknownType+> --hack?+> || to == UnknownType+> -- check base types of domains+> || ((isDomainType from || isDomainType to)+> && castableFromTo cat cc (replaceWithBase cat from)+> (replaceWithBase cat to))+> -- check the casts listed in the catalog+> || forceRight (catCast cat cc from to)+> -- implicitcast => assignment cast+> || (cc == AssignmentCastContext+> && forceRight (catCast cat ImplicitCastContext from to))+> -- can assign composite to record+> || (cc == AssignmentCastContext+> && isCompOrSetoOfComp from+> && case to of+> PgRecord _ -> True+> _ -> False)+> -- check unboxing: wrapped single attribute+> || recurseTransFrom (unboxedSingleType from)+> || recurseTransTo (unboxedSingleType to)+> -- check unboxing: wrapped composite+> || recurseTransFrom (unboxedSetOfType from)+> || recurseTransTo (unboxedSetOfType to)+> -- check composites compatible by comparing attribute types+> || case (getCompositeTypes from+> ,getCompositeTypes to) of+> -- zip almost does the right thing here, needs a bit of tweaking+> (Just ft, Just tt) | length ft == length tt -> all (uncurry $ castableFromTo cat cc) $ zip ft tt+> _ -> False+> where+>+> getCompositeTypes (NamedCompositeType n) =+> Just $ map snd $ fromRight [] $ catCompositePublicAttrs cat [] n+> getCompositeTypes (CompositeType t) = Just $ map snd t+> getCompositeTypes (AnonymousRecordType t) = Just t+> getCompositeTypes (PgRecord Nothing) = Nothing+> getCompositeTypes (PgRecord (Just t)) = getCompositeTypes t+> getCompositeTypes _ = Nothing+>+> isCompOrSetoOfComp (SetOfType c) = isCompositeType c+> isCompOrSetoOfComp c = isCompositeType c+>+> unboxedSingleType (SetOfType (CompositeType [(_,t)])) = Just t+> unboxedSingleType (PgRecord (Just t)) = unboxedSingleType t+> unboxedSingleType _ = Nothing+>+> unboxedSetOfType (SetOfType a) = Just a+> unboxedSetOfType (PgRecord (Just t)) = unboxedSetOfType t+> unboxedSetOfType _ = Nothing+>+> recurseTransFrom = maybe False (flip (castableFromTo cat cc) to)+> recurseTransTo = maybe False (castableFromTo cat cc from)+>+> replaceWithBase :: Catalog -> Type -> Type+> replaceWithBase cat t@(DomainType _) = forceRight $ catDomainBaseType cat t+> replaceWithBase _ t = t
+ src/Database/HsSqlPpp/AstInternals/TypeChecking/Utils.lhs view
@@ -0,0 +1,127 @@++For extra utility functions to help with asts++> module Database.HsSqlPpp.AstInternals.TypeChecking.Utils+> (addExplicitCasts+> ,canonicalizeTypeNames) where++> import Data.Data+> import Database.HsSqlPpp.AstInternals.AstInternal+> import Data.Generics.PlateData+> import Database.HsSqlPpp.AstInternals.AstAnnotation+> import Database.HsSqlPpp.AstInternals.TypeType+> import Control.Monad++++> -- | Run through a typechecked tree and add in explicit casts where+> -- implicit casts are used to typecheck. Does function and operator+> -- calls, case result expressions, and string, integer and float+> -- literals at the moment, todo: union, array, greatest, least+> addExplicitCasts :: Data a => a -> a+> addExplicitCasts =+> refix . tr . canonicalizeTypeNames+> where+> tr = transformBi $ \x -> case x of+> FunCall a f as | Just p <- getProtoATys a+> , Just ats <- getTys as+> , p /= ats+> -> FunCall a f $ zipWith3 addCastIfNeeded p ats as+> Case a cs els | (Just f) <- doCase a cs els -> f+> CaseSimple a v cs els | (Just f) <- doCaseSimple a v cs els -> f+> i@(NumberLit a _) | Just t <- infType a -> castToT t i+> i@(StringLit a _) | Just t <- infType a -> castToT t i+> x1 -> x1+> -- need to put the type annotation in the created cast to allow+> -- adding explicit casts to continue up the tree+> castToT t e = Cast ea {atype = Just t,infType = Just t} e $ typeName 1 t+> getProtoATys :: Annotation -> Maybe [Type]+> getProtoATys a = let p = fnProt a+> in flip fmap p $ \(_,t,_,_) -> t+> getTys :: [ScalarExpr] -> Maybe [Type]+> getTys = mapM $ atype . getAnnotation+> addCastIfNeeded :: Type -> Type -> ScalarExpr -> ScalarExpr+> addCastIfNeeded nt ot e =+> if ot == nt+> then e+> else Cast ea e $ typeName 2 nt+> -- not sure how to avoid inserting a cast for a literal which is+> -- already being cast when using transformBi, so run through and+> -- remove the suplerfluous casts in a second sweep+> -- spot them when there is a cast of a cast of a literal+> -- and the type of the inner cast is the same as the type of the literal+> -- not sure if this pass can cause other problems+> refix = transformBi $ \x -> case x of+> Cast ca (Cast _ l t) t1 | isLiteral l+> , Just lt <- infType $ getAnnotation l+> , t == typeName 3 lt+> -> Cast ca l t1+> x1 -> x1+> isLiteral (NumberLit _ _) = True+> isLiteral (StringLit _ _) = True+> isLiteral _ = False+++> typeName :: Int -> Type -> TypeName+> typeName _ (ScalarType t) = SimpleTypeName ea t+> typeName i e = error $ "don't know how to convert " ++ show e ++ " to typename " ++ show i++> ea :: Annotation+> ea = emptyAnnotation++> doCase :: Annotation -> [([ScalarExpr],ScalarExpr)] -> Maybe ScalarExpr -> Maybe ScalarExpr+> doCase a whths els = do+> (whths',els') <- doCaseStuff a whths els+> return $ Case a whths' els'++> doCaseSimple :: Annotation -> ScalarExpr -> [([ScalarExpr],ScalarExpr)] -> Maybe ScalarExpr -> Maybe ScalarExpr+> doCaseSimple a v whths els = do+> (whths',els') <- doCaseStuff a whths els+> return $ CaseSimple a v whths' els'++> doCaseStuff :: Annotation -> [([ScalarExpr],ScalarExpr)] -> Maybe ScalarExpr -> Maybe ([([ScalarExpr],ScalarExpr)],Maybe ScalarExpr)+> doCaseStuff a whths els = do+> --trace (show $ atype a) $ return ()+> expectedType <- atype a+> --trace (show $ map (atype . getAnnotation . snd) whths) $ return ()+> thenTypes <- mapM (atype . getAnnotation . snd) whths+> --trace (show els) $ return ()+> thenAndElseTypes <- case els of+> Nothing -> return thenTypes+> Just els' -> fmap (:thenTypes) $ atype $ getAnnotation els'+> --trace ("checking cast: " ++ show expectedType ++ " " ++ show thenAndElseTypes)+> when (all (==expectedType) thenAndElseTypes) Nothing+> return (map (fixWhTh expectedType) whths+> ,castElse expectedType)+> where+> castElse et = case els of+> Nothing -> Nothing+> Just els' | Just t' <- atype $ getAnnotation els+> , t' /= et+> -> Just (Cast ea els' $ typeName 4 et)+> | otherwise -> els+> fixWhTh :: Type -> ([ScalarExpr],ScalarExpr) -> ([ScalarExpr],ScalarExpr)+> fixWhTh et (whs,th) | Just t' <- atype $ getAnnotation th+> , t' /= et = (whs, Cast ea th $ typeName 5 et)+> | otherwise = (whs,th)++> -- bit crap, this function is called canonicalizeTypeNames+> -- and it uses a function called canonicalizeTypeName++> -- | Convert all the typenames in the ast to canonical form+> -- e.g. int -> int4+> canonicalizeTypeNames :: Data a => a -> a+> canonicalizeTypeNames = fixTypes . fixTypeNames+> where+> fixTypes =+> transformBi $ \x -> case x of+> ScalarType t -> ScalarType $ ct t+> x1 -> x1+> fixTypeNames =+> transformBi $ \x -> case x of+> SimpleTypeName a t -> SimpleTypeName a $ ct t+> PrecTypeName a t i -> PrecTypeName a (ct t) i+> Prec2TypeName a t i0 i1 -> Prec2TypeName a (ct t) i0 i1+> x1 -> x1+> ct = canonicalizeTypeName+
+ src/Database/HsSqlPpp/AstInternals/TypeType.lhs view
@@ -0,0 +1,421 @@++This file contains the data type Type. It is kept separate so we can+compile the types and function information from the database+separately to AstInternal.ag.++Types overview:++Regular types: scalarType, arrayType, composite type, domaintype+we can use these anywhere.++~~~~+semi first class types: row, unknownstringlit (called unknown in pg) -+these can be used in some places, but not others, in particular an+expression can have this type or select can have a row with these+type, but a view can't have a column with this type (so a select can+be valid on it's own but not as a view. Not sure if Row types can be+variables, unknownstringlit definitely can't. (Update, seems a view+can have a column with type unknown.)++pseudo types - mirror pg pseudo types+Internal, LanguageHandler, Opaque probably won't ever be properly supported+Not sure exactly what Any is, can't use it in functions like the other any types?+ - update: seems that Any is like AnyElement, but multiple Anys don't+ have to have the same type.+AnyElement, AnyArray, AnyEnum, AnyNonArray - used to implement polymorphic functions,+ can only be used in these functions as params, return type (and local vars?).+Cstring - treated as variant of text?+record -dynamically typed, depends where it is used, i think is used+for type inference in function return types (so you don't have to+write the correct type, the compiler fills it in), and as a dynamically+typed variable in functions, where it can take any composite typed+value.+void is used for functions which return nothing+trigger is a tag to say a function is used in triggers, used as a+return type only+typecheckfailed is used to represent the type of anything which the code+is currently unable to type check, this usage should disappear at some+point, and then it will only represent code which doesn't type check+because of a mistake.++The Type type identifies the type of a node, but doesn't necessarily+describe the type.++Typing relational valued expressions:+use SetOfType combined with composite type for now, see if it works+out. If not, will have to add another type.+~~~~++> {-# LANGUAGE FlexibleInstances,DeriveDataTypeable #-}+>+> module Database.HsSqlPpp.AstInternals.TypeType where+>+> import Control.Monad.Trans.Error+> --import Control.Monad.Error+>+> import Data.Data+> import Data.Generics.PlateData+> import Data.Char++> data Type = ScalarType String+> | ArrayType Type+> | SetOfType Type+> --three variations, choose better name for rowctor+> --refer to composite type in catalog+> | NamedCompositeType String+> --refer to composite type either in catalog or one generated on fly+> | CompositeType [(String,Type)]+> --refer to anonymous composite type: the fields have no names+> --these three types are equality and assign compatible if the fields+> --are ignoring the names, so the fields have to be in the same order.+> | AnonymousRecordType [Type] -- was rowctor+> | PgRecord (Maybe Type) -- can only hold namedcomposite, composite or anonymousrecord+> | DomainType String+> | EnumType String+> | Pseudo PseudoType+> | UnknownType -- represents a string literal+> -- token whose type isn't yet+> -- determined+> deriving (Eq,Show,Ord,Typeable,Data)+>+> data PseudoType = Any+> | AnyArray+> | AnyElement+> | AnyEnum+> | AnyNonArray+> | Cstring+> | Record+> | TriggerRecord+> | Trigger+> | Void+> | Internal+> | LanguageHandler+> | Opaque+> deriving (Eq,Show,Ord,Typeable,Data)++this list will need reviewing, probably refactor to a completely+different set of infos, also will want to add more information to+these, and to provide a way of converting into a user friendly+string. It is intended for this code to produce highly useful errors+later on down the line.++> -- mostly expected,got+> data TypeError = WrongTypes Type [Type]+> | UnknownTypeError Type+> | UnknownTypeName String+> | NoMatchingOperator String [Type]+> | TypelessEmptyArray+> | IncompatibleTypeSet [Type]+> | IncompatibleTypes Type Type+> | ValuesListsMustBeSameLength+> | NoRowsGivenForValues+> | UnrecognisedIdentifier String+> | UnrecognisedRelation String+> | UnrecognisedCorrelationName String+> | BadStarExpand+> | AmbiguousIdentifier String+> | ContextError String+> | MissingJoinAttribute+> | ExpressionMustBeBool+> | WrongNumberOfColumns+> | ExpectedDomainType Type+> | DomainDefNotFound Type+> | BadCatalogUpdate String+> | TypeAlreadyExists Type+> | AnyAllError String+> | InternalError String+> | FromToTypesNotSame Type Type+> | WrongNumberOfAliasCols Int Int+> --shoved in to humour the Either Monad+> | MiscError String+> deriving (Eq,Show,Ord,Typeable,Data)+>++ > instance Error ([TypeError]) where+ > noMsg = [MiscError "Unknown error"]+ > strMsg str = [MiscError str]++> instance ErrorList TypeError where+> listMsg s = [MiscError s]+++=== canonical type name support++Introduce some aliases to protect client code if/when the ast+canonical names are changed:++> typeSmallInt,typeBigInt,typeInt,typeNumeric,typeFloat4,+> typeFloat8,typeVarChar,typeChar,typeBool,typeDate,+> typeInterval :: Type+> typeSmallInt = ScalarType "int2"+> typeBigInt = ScalarType "int8"+> typeInt = ScalarType "int4"+> typeNumeric = ScalarType "numeric"+> typeFloat4 = ScalarType "float4"+> typeFloat8 = ScalarType "float8"+> typeVarChar = ScalarType "varchar"+> typeChar = ScalarType "char"+> typeBool = ScalarType "bool"+> typeDate = ScalarType "date"+> typeInterval = ScalarType "interval"++this converts the name of a type to its canonical name:+try to follow the names that pg uses in a dump+this converts the name of a type to its canonical name:+try to follow the names that pg uses in a dump++> canonicalizeTypeName :: String -> String+> canonicalizeTypeName s' =+> case () of+> _ | s `elem` smallIntNames -> "int2"+> | s `elem` intNames -> "int4"+> | s `elem` bigIntNames -> "int8"+> | s `elem` numericNames -> "numeric"+> | s `elem` float4Names -> "float4"+> | s `elem` float8Names -> "float8"+> | s `elem` varcharNames -> "varchar"+> | s `elem` charNames -> "char"+> | s `elem` boolNames -> "bool"+> | otherwise -> s+> where+> smallIntNames = ["int2", "smallint"]+> intNames = ["int4", "integer", "int", "serial"]+> bigIntNames = ["int8", "bigint"]+> numericNames = ["numeric", "decimal"]+> float4Names = ["real", "float4"]+> float8Names = ["double precision", "float"]+> varcharNames = ["character varying", "varchar"]+> charNames = ["character", "char"]+> boolNames = ["boolean", "bool"]+> s = map toLower s'+>+> canonicalizeTypes :: Data a => a -> a+> canonicalizeTypes =+> transformBi $ \x ->+> case x of+> ScalarType s -> ScalarType $ canonicalizeTypeName s+> x1 -> x1++random notes on pg types:++~~~~++== domains:+the point of domains is you can't put constraints on types, but you+can wrap a type up in a domain and put a constraint on it there.++== literals/selectors++source strings are parsed as unknown type: they can be implicitly cast+to almost any type in the right context.++rows ctors can also be implicitly cast to any composite type matching+the elements (now sure how exactly are they matched? - number of+elements, type compatibility of elements, just by context?).++string literals are not checked for valid syntax currently, but this+will probably change so we can type check string literals statically.+Postgres defers all checking to runtime, because it has to cope with+custom data types. This code will allow adding a grammar checker for+each type so you can optionally check the string lits statically.++== notes on type checking types++=== basic type checking+Currently can lookup type names against a default template1 list of+types, or against the current list in a database (which is read before+processing and sql code).++todo: collect type names from current source file to check against+A lot of the infrastructure to do this is already in place. We also+need to do this for all other definitions, etc.++=== Type aliases++Some types in postgresql have multiple names. I think this is+hardcoded in the pg parser.++For the canonical name in this code, we use the name given in the+postgresql pg_type catalog relvar.++TODO: Change the ast canonical names: where there is a choice, prefer+the sql standard name, where there are multiple sql standard names,+choose the most concise or common one, so the ast will use different+canonical names to postgresql.++planned ast canonical names:+numbers:+int2, int4/integer, int8 -> smallint, int, bigint+numeric, decimal -> numeric+float(1) to float(24), real -> float(24)+float, float(25) to float(53), double precision -> float+serial, serial4 -> int+bigserial, serial8 -> bigint+character varying(n), varchar(n)-> varchar(n)+character(n), char(n) -> char(n)++TODO:++what about PrecTypeName? - need to fix the ast and parser (found out+these are called type modifiers in pg)++also, what can setof be applied to - don't know if it can apply to an+array or setof type++array types have to match an exact array type in the catalog, so we+can't create an arbitrary array of any type. Not sure if this is+handled quite correctly in this code.++~~~~++--------------------------------------------------------------------------------++utilities for working with Types++These may indicate that the haskell type system isn't being used very well.++> isArrayType :: Type -> Bool+> isArrayType (ArrayType _) = True+> isArrayType _ = False+>+> isDomainType :: Type -> Bool+> isDomainType (DomainType _) = True+> isDomainType _ = False+>+> isCompositeType :: Type -> Bool+> isCompositeType (CompositeType _) = True+> isCompositeType (NamedCompositeType _) = True+> isCompositeType (AnonymousRecordType _) = True+> isCompositeType (PgRecord _) = True+> isCompositeType _ = False+>+> isCompositeOrSetOfCompositeType :: Type -> Bool+> isCompositeOrSetOfCompositeType (SetOfType a) = isCompositeType a+> isCompositeOrSetOfCompositeType a = isCompositeType a+>+> unwrapArray :: Type -> Either [TypeError] Type+> unwrapArray (ArrayType t) = Right t+> unwrapArray x = Left [InternalError $ "can't get types from non array " ++ show x]+>+> unwrapSetOfWhenComposite :: Type -> Either [TypeError] Type+> unwrapSetOfWhenComposite (SetOfType a@(CompositeType _)) = Right a+> unwrapSetOfWhenComposite x = Left [InternalError $ "tried to unwrapSetOfWhenComposite on " ++ show x]+>+> unwrapSetOfComposite :: Type -> Either [TypeError] [(String,Type)]+> unwrapSetOfComposite (SetOfType (CompositeType a)) = Right a+> unwrapSetOfComposite x = Left [InternalError $ "tried to unwrapSetOfComposite on " ++ show x]+>+> unwrapSetOf :: Type -> Either [TypeError] Type+> unwrapSetOf (SetOfType a) = Right a+> unwrapSetOf x = Left [InternalError $ "tried to unwrapSetOf on " ++ show x]+>+> unwrapComposite :: Type -> Either [TypeError] [(String,Type)]+> unwrapComposite (CompositeType a) = Right a+> unwrapComposite x = Left [InternalError $ "cannot unwrapComposite on " ++ show x]+>+> consComposite :: (String,Type) -> Type -> Either [TypeError] Type+> consComposite l (CompositeType a) = Right $ CompositeType (l:a)+> consComposite a b = Left [InternalError $ "called consComposite on " ++ show (a,b)]+>+> unwrapRowCtor :: Type -> Either [TypeError] [Type]+> unwrapRowCtor (AnonymousRecordType a) = Right a+> unwrapRowCtor x = Left [InternalError $ "cannot unwrapRowCtor on " ++ show x]++--------------------------------------------------------------------------------++~~~~+new plan for types:++The type annotations attached to nodes will be either typecheckfailed 'type'+this will allow chaining type check failed more robustly. Type errors don't change.++the sql type type will be changed so we can track the different+contexts where different sql types can be used, split to use different+sets of types so we can use the haskell type system to enforce these+contexts.++rename type to sqltype, too confusing otherwise+new set of sqltypes: (these aren't in one haskell type anymore)+scalar type - corresponds to sqltypes in pg which aren't one of the+ other types (no easy way to define this)+array type+setof type : can be applied to scalar, domain, ... but not all types+composite types are changed:+namedcomposite string+composite [(string,type)] -> what types can appear in the attribute list?+anonymousrecord [type] -> what types can appear here? -> this+represents a row expression type, which can be returned in select+expressions (but not as a column in a view), and is used in other places+domaintype : what types are allowable as the base type?+pseudo types: these are used for arguments and return values for function prototypes only+any*, record - just means pg infers the return type which will be a composite type (namedcomposite, composite or anonymousrecord), trigger: just a tag, void: just a tag, any*: polymorphic functions, ignore cstring, internal, language handler and opaque.+issue: a variable declaration can be a polymorphic type in a polymorphic function, but we can't use the other pseudo types so need to split these+a variable declared as type record IS NOT the same thing as the pseudo record type, I've finally worked out.+so our plpgsqlrecordtype is plpgsqlrecordtype (Nothing|one of the three composite types)++typechecking polymorphic functions: will have to relax the type+checking to some degree. want to check against each usage of the+polymorphic function in the source, so substitute in the actual types+and check the function.++contexts:+function prototypes: args and return type+function calls: args and return+variable declaration in plpgsql+attribute in a select expression+attribute in a view (less permissive than a select expression), also create table as?+attribute in a table, type (is this the same list as for composite and anonymous records? - can nest anonymous records)+base type for domain+cast expression+insert: targetatts are same set of types as attributes in a table+update: targets can be attr types or anonymous records of attr types for rowset style assign (x,y) = selectexp+assignment statement: type on left same set as type in a for, types in select into, etc?+return statement+return query statement+expressions in a raise statement+expressions in execute, anything else?+types used inside select expression checking:+ selectlist, trefs, groupby, orderby, limit, offset, where, having+expressions:+what can an identifiers type be?+what can the type of an Expression node be?+ scalar: integerlit,floatlit+ stringlit: what can an unknown resolve to (not quite everything)+ booleanlit: scalar+ nulllit: same as stringlit?+ positionalarg: any type that a function arg can have+ cast: any type you can cast to+ identifier: ?+ case, casesimple: any type in the rhs expressions, what are these?+ exists: scalar+ funcall: any type a function return type can have+ inpredicate: scalar+ windowfn: ?+ liftoperator: booleans only?++problem: can't get types using gettypeannotation function and support+different valid combinations of types+++new notes+type contexts - these all have different possible types+function return type+function parameter type+OLD & NEW+declared variable+attribute in create table+attribute create type+column in select expression+column in view+column in insert+item in set in update: includes row type with contained types restricted+placeholder+id lookups in local bindings+typenames??++create list of each type for each context+create wrapper types which convert from other types to either+ typeerror type for bad type for context++~~~~+
+ src/Database/HsSqlPpp/Catalog.lhs view
@@ -0,0 +1,59 @@++Forward the public part of CatalogInternal.++> {- | This module contains the database catalog data types and helper+> functions.+>+> The catalog data type serves the following purposes:+>+> * Contains all the catalog information needed to type check against+> an existing database.+>+> * A copy of the catalog information from a default template1+> database is included - 'defaultTemplate1Catalog'.+>+> * It is used internally to keep track of updates to the catalog+> whilst running an annotation process (e.g. so that a select can+> type check against a create table given in the same source). It+> is also used to track other identifier types, such as attribute+> references in select expressions, and argument and variable+> types inside create function statements.+>+> You can see what kind of stuff is contained in the Catalog type+> by looking at the 'CatalogUpdate' type.+>+> -}+>+> module Database.HsSqlPpp.Catalog+> (+> -- * Data types+> Catalog+> -- ** Updates+> ,CatalogUpdate(..)+> ,ppCatUpdate+> -- ** bits and pieces+> ,CastContext(..)+> ,CompositeFlavour(..)+> ,CompositeDef+> ,FunctionPrototype+> ,DomainDefinition+> ,FunFlav(..)+> -- * Catalog values+> ,emptyCatalog+> ,defaultCatalog+> ,defaultTemplate1Catalog+> -- * Catalog comparison+> ,CatalogDiff(..)+> ,compareCatalogs+> ,ppCatDiff+> -- * Functions+> ,updateCatalog+> ,deconstructCatalog+> -- * operator utils+> ,OperatorType(..)+> ,getOperatorType+> ,isOperatorName+> ) where+>+> import Database.HsSqlPpp.AstInternals.Catalog.CatalogInternal+> import Database.HsSqlPpp.AstInternals.Catalog.DefaultTemplate1Catalog
+ src/Database/HsSqlPpp/Parser.lhs view
@@ -0,0 +1,19 @@++Forward the public part of ParserInternal++> -- | Functions to parse SQL.+> module Database.HsSqlPpp.Parser (+> -- * Main+> parseStatements+> ,parseStatementsWithPosition+> ,parseStatementsFromFile+> ,parseQueryExpr+> ,parseSqlServerQueryExpr+> -- * Testing+> ,parseScalarExpr+> ,parsePlpgsql+> -- * errors+> ,ParseErrorExtra(..)+> )+> where+> import Database.HsSqlPpp.Parsing.ParserInternal
+ src/Database/HsSqlPpp/Parsing/Lexer.lhs view
@@ -0,0 +1,347 @@++This file contains the lexer for sql source text.++Lexicon:++~~~~+string+identifier or keyword+symbols - operators and ;,()[]+positional arg+int+float+copy payload (used to lex copy from stdin data)+~~~~++> module Database.HsSqlPpp.Parsing.Lexer (+> Token+> ,Tok(..)+> ,lexSqlFile+> ,lexSqlText+> ,lexSqlTextWithPosition+> ,identifierString+> ,LexState+> ) where+> import Text.Parsec hiding(many, optional, (<|>))+> import qualified Text.Parsec.Token as P+> import Text.Parsec.Language+> --import Text.Parsec.String+> import Text.Parsec.Pos+>+> import Control.Applicative+> import Control.Monad.Identity++> import Data.Maybe+>+> import Database.HsSqlPpp.Parsing.ParseErrors+> import Database.HsSqlPpp.Utils.Utils+> -- import Database.HsSqlPpp.Ast.Name++================================================================================++= data types++> type Token = (SourcePos, Tok)+>+> data Tok = StringTok String String --delim, value (delim will one of+> --', $$, $[stuff]$++> | IdStringTok String -- either a identifier component (without .) or a *++> | SymbolTok String -- operators, and ()[],;: and also .+> -- '*' is currently always lexed as an id+> -- rather than an operator+> -- this gets fixed in the parsing stage++> | PositionalArgTok Integer -- used for $1, etc.++Use a numbertok with a string to parse numbers. This is mainly so that+numeric constants can be parsed accurately - if they are parsed to+floats in the ast then converted back to numeric, then the accuracy+can be lost (e.g. something like "0.2" parsing to 0.199999999 float.++> | NumberTok String++> | CopyPayloadTok String -- support copy from stdin; with inline data+> deriving (Eq,Show)+>+> type LexState = [Tok]+> type Parser = ParsecT String LexState Identity+>+> lexSqlFile :: FilePath -> IO (Either ParseErrorExtra [Token])+> lexSqlFile f = do+> te <- readFile f+> let x = runParser sqlTokens [] f te+> return $ toParseErrorExtra x Nothing te+>+> lexSqlText :: String -> String -> Either ParseErrorExtra [Token]+> lexSqlText f s = toParseErrorExtra (runParser sqlTokens [] f s) Nothing s+>+> lexSqlTextWithPosition :: String -> Int -> Int -> String+> -> Either ParseErrorExtra [Token]+> lexSqlTextWithPosition f l c s =+> toParseErrorExtra (runParser (do+> setPosition (newPos f l c)+> sqlTokens) [] f s) (Just (l,c)) s++================================================================================++= lexers++lexer for tokens, contains a hack for copy from stdin with inline+table data.++> sqlTokens :: Parser [Token]+> sqlTokens =+> setState [] >>+> whiteSpace >>+> many sqlToken <* eof++Lexer for an individual token.++Could lex lazily and when the lexer reads a copy from stdin statement,+it switches lexers to lex the inline table data, then switches+back. Don't know how to do this in parsec, or even if it is possible,+so as a work around, we use the state to trap if we've just seen 'from+stdin;', if so, we read the copy payload as one big token, otherwise+we read a normal token.++> sqlToken :: Parser Token+> sqlToken = do+> sp <- getPosition+> sta <- getState+> t <- if sta == [ft,st,mt]+> then copyPayload+> else try sqlNumber+> <|> try sqlString+> <|> try idString+> <|> try positionalArg+> <|> try sqlSymbol+> updateState $ \stt ->+> case () of+> _ | stt == [] && t == ft -> [ft]+> | stt == [ft] && t == st -> [ft,st]+> | stt == [ft,st] && t == mt -> [ft,st,mt]+> | otherwise -> []+>+> return (sp,t)+> where+> ft = IdStringTok "from"+> st = IdStringTok "stdin"+> mt = SymbolTok ";"++== specialized token parsers++> sqlString :: Parser Tok+> sqlString = stringQuotes <|> stringLD+> where+> --parse a string delimited by single quotes+> stringQuotes = StringTok "\'" <$> stringPar+> stringPar = optional (char 'E') *> char '\''+> *> readQuoteEscape <* whiteSpace+> --(readquoteescape reads the trailing ')++have to read two consecutive single quotes as a quote character+instead of the end of the string, probably an easier way to do this++other escapes (e.g. \n \t) are left unprocessed++> readQuoteEscape = do+> x <- anyChar+> if x == '\''+> then try ((x:) <$> (char '\'' *> readQuoteEscape))+> <|> return ""+> else (x:) <$> readQuoteEscape++parse a dollar quoted string++> stringLD = do+> -- cope with $$ as well as $[identifier]$+> tag <- try (char '$' *> ((char '$' *> return "")+> <|> (identifierString <* char '$')))+> s <- lexeme $ manyTill anyChar+> (try $ char '$' <* string tag <* char '$')+> return $ StringTok ("$" ++ tag ++ "$") s+>+> idString :: Parser Tok+> idString = IdStringTok <$> identifierString+>+> positionalArg :: Parser Tok+> positionalArg = char '$' >> PositionalArgTok <$> integer+++Lexing symbols:++~~~~+approach 1:+try to keep multi symbol operators as single lexical items+(e.g. "==", "~=="++approach 2:+make each character a separate element+e.g. == lexes to ['=', '=']+then the parser sorts this out++Sort of using approach 1 at the moment, see below++== notes on symbols in pg operators+pg symbols can be made from:++=_*/<>=~!@#%^&|`?++no --, /* in symbols++can't end in + or - unless contains+~!@#%^&|?++Most of this isn't relevant for the current lexer.++== sql symbols for this lexer:++sql symbol is one of+()[],; - single character++-*/<>=~!@#%^&|`? string - one or more of these, parsed until hit char+which isn't one of these (including whitespace). This will parse some+standard sql expressions wrongly at the moment, work around is to add+whitespace e.g. i think 3*-4 is valid sql, should lex as '3' '*' '-'+'4', but will currently lex as '3' '*-' '4'. This is planned to be+fixed in the parser.+.. := :: : - other special cases+A single * will lex as an identifier rather than a symbol, the parser+deals with this.++~~~~++> sqlSymbol :: Parser Tok+> sqlSymbol =+> SymbolTok <$> lexeme (choice [+> replicate 1 <$> oneOf "()[],;"+> ,try $ string ".."+> ,string "."+> ,try $ string "::"+> ,try $ string ":="+> ,string ":"+> ,try $ string "$(" -- antiquote standard splice+> ,try $ string "$s(" -- antiquote string splice+> ,string "$i(" -- antiquote identifier splice+> ,many1 (oneOf "+-*/<>=~!@#%^&|`?")+> ])+>++parse a number:+digits+digits.[digits][e[+-]digits]+[digits].digits[e[+-]digits]+digitse[+-]digits++I'm sure the implementation can be simpler than this++> sqlNumber :: Parser Tok+> sqlNumber = NumberTok <$> lexeme (+> choice [do+> -- starts with digits+> d <- digits+> suff <- choice [-- complete fractional part+> try fracPart+> ,-- dot followed by optional exp+> do+> _ <- char '.'+> e <- optionMaybe expn+> return $ concat $ catMaybes+> [Just "."+> ,e]+> ,--no dot then expn+> expn+> -- just an integer+> ,return ""+> ]+> return $ d ++ suff+> ,fracPart+> ])+> where+> fracPart = do+> _ <- char '.'+> d <- digits+> e <- optionMaybe expn+> return $ concat $ catMaybes+> [Just "."+> ,Just d+> ,e]+> expn = do+> _ <- char 'e'+> s <- optionMaybe (char '+' <|> char '-')+> d <- digits+> return $ concat $ catMaybes [Just "e"+> ,fmap (:[]) s+> ,Just d]+> digits = many1 digit++================================================================================++additional parser bits and pieces++include dots, * in all identifier strings during lexing. This parser+is also used for keywords, so identifiers and keywords aren't+distinguished until during proper parsing, and * and qualifiers aren't+really examined until type checking++> identifierString :: Parser String+> identifierString = lexeme $ choice [+> "*" <$ symbol "*"+> ,nonStarPart]+> where+> nonStarPart = idpart <|> (char '"' *> many (noneOf "\"") <* char '"')+> where idpart = (letter <|> char '_') <:> secondOnwards+> secondOnwards = many (alphaNum <|> char '_')++parse the block of inline data for a copy from stdin, ends with \. on+its own on a line++> copyPayload :: Parser Tok+> copyPayload = CopyPayloadTok <$> lexeme (getLinesTillMatches "\\.\n")+> where+> getLinesTillMatches s = do+> x <- getALine+> if x == s+> then return ""+> else (x++) <$> getLinesTillMatches s+> getALine = (++"\n") <$> manyTill anyChar (try newline)+>++================================================================================++= parsec pass throughs++> symbol :: String -> Parser String+> symbol = P.symbol lexer+>++> integer :: Parser Integer+> integer = lexeme $ P.integer lexer++> whiteSpace :: Parser ()+> whiteSpace = P.whiteSpace lexer+>+> lexeme :: Parser a -> Parser a+> lexeme = P.lexeme lexer++this lexer isn't really used as much as it could be, probably some of+the fields are not used at all (like identifier and operator stuff)++> lexer :: P.GenTokenParser String LexState Identity+> lexer = P.makeTokenParser (emptyDef {+> P.commentStart = "/*"+> ,P.commentEnd = "*/"+> ,P.commentLine = "--"+> ,P.nestedComments = False+> ,P.identStart = letter <|> char '_'+> ,P.identLetter = alphaNum <|> oneOf "_"+> ,P.opStart = P.opLetter emptyDef+> ,P.opLetter = oneOf opLetters+> ,P.reservedOpNames= []+> ,P.reservedNames = []+> ,P.caseSensitive = False+> })+>+> opLetters :: String+> opLetters = ".:^*/%+-<>=|!"
+ src/Database/HsSqlPpp/Parsing/ParseErrors.lhs view
@@ -0,0 +1,76 @@++convert error messages to show source text fragment with little hat,+plus output error location in emacs friendly format.++>+> module Database.HsSqlPpp.Parsing.ParseErrors+> (toParseErrorExtra+> ,ParseErrorExtra(..)) where+>+> import Text.Parsec+> import Control.Monad.Error+>+> showPE :: ParseError -> Maybe (Int,Int) -> String -> String+> showPE pe sp src = show pe ++ "\n" ++ pePosToEmacs pe+> ++ "\n" ++ peToContext pe sp src+>+> pePosToEmacs :: ParseError -> String+> pePosToEmacs pe = let p = errorPos pe+> f = sourceName p+> l = sourceLine p+> c = sourceColumn p+> in f ++ ":" ++ show l ++ ":" ++ show c ++ ":"+>+> peToContext :: ParseError -> Maybe (Int,Int) -> String -> String+> peToContext pe sp src =+> let ls = lines src+> line = safeGet ls(lineNo - 1)+> prelines = map (safeGet ls) [(lineNo - 5) .. (lineNo - 2)]+> postlines = map (safeGet ls) [lineNo .. (lineNo + 5)]+> caretLine = replicate (colNo - 1) ' ' ++ "^"+> errorHighlightText = prelines+> ++ [line, caretLine, "ERROR HERE"]+> ++ postlines+> in "\nContext:\n"+> ++ unlines (trimLines errorHighlightText) ++ "\n"+> where+> safeGet a i = if i < 0 || i >= length a+> then ""+> else a !! i+> trimLines = trimStartLines . reverse . trimStartLines . reverse+> trimStartLines = dropWhile (=="")+> pos = errorPos pe+> lineNo = sourceLine pos - adjLine+> colNo = sourceColumn pos+> adjLine = case sp of+> Just (l, _) -> l - 1+> Nothing -> 0+>+> -- | Simple wrapper to allow showing the source context of a ParseError+> data ParseErrorExtra =+> ParseErrorExtra {+> -- | wrapped error+> parseErrorError :: ParseError+> -- | source position+> -- adjustment to get the+> -- context bit in error+> -- messages right - this is+> -- the same as what is passed+> -- into parseSqlWithPosition+> ,parseErrorPosition :: Maybe (Int, Int)+> -- | sql source+> ,parseErrorSqlSource :: String+> }+>+> instance Show ParseErrorExtra where+> show (ParseErrorExtra pe sp src) = showPE pe sp src+>+> instance Error ParseErrorExtra where+> noMsg = ParseErrorExtra (error "instance Error ParseErrorExtra") Nothing "unknown"+> strMsg = ParseErrorExtra (error "instance Error ParseErrorExtra") Nothing+>+> toParseErrorExtra :: Either ParseError b -> Maybe (Int,Int) -> String+> -> Either ParseErrorExtra b+> toParseErrorExtra a sp src = case a of+> Left pe -> Left $ ParseErrorExtra pe sp src+> Right x -> Right x
+ src/Database/HsSqlPpp/Parsing/ParserInternal.lhs view
@@ -0,0 +1,1968 @@++The main file for parsing sql, uses parsec. Not sure if parsec is the+right choice, but it seems to do the job pretty well at the moment.++> {-# LANGUAGE RankNTypes,FlexibleContexts #-}+>+> -- | Functions to parse SQL.+> module Database.HsSqlPpp.Parsing.ParserInternal+> (-- * Main+> parseStatements+> ,parseStatementsWithPosition+> ,parseStatementsFromFile+> ,parseQueryExpr+> ,parseSqlServerQueryExpr+> -- * Testing+> ,parseScalarExpr+> ,parsePlpgsql+> -- * errors+> ,ParseErrorExtra(..)+> -- * quasiquotation support+> ,parseAntiSql+> ,parseAntiPlpgsql+> ,parseAntiScalarExpr+> -- other helpers for internal use+> ,tableAttribute+> ,keyword+> ,parens+> ,symbol+> ,idString+> ,commaSep1+> ,commaSep+> ) where+>+> import Text.Parsec hiding(many, optional, (<|>), string, label)+> import Text.Parsec.Expr+> import Text.Parsec.String+> import Text.Parsec.Perm+>+> import Control.Applicative+> import Control.Monad.Identity+>+> import Data.Maybe+> import Data.Char+>+> import Data.Generics.PlateData+> import Data.Data hiding (Prefix,Infix)+>+> import Database.HsSqlPpp.Parsing.Lexer+> import Database.HsSqlPpp.Parsing.ParseErrors+> import Database.HsSqlPpp.AstInternals.AstAnti+> --import Database.HsSqlPpp.Ast+> import qualified Database.HsSqlPpp.Ast as A+> import Database.HsSqlPpp.Annotation as A+> import Database.HsSqlPpp.Utils.Utils+> import Database.HsSqlPpp.Catalog+> --import Debug.Trace++--------------------------------------------------------------------------------++Top level parsing functions+===========================++To support antiquotation, the following approach is used:++* makeantinodes processes the generated astinternal.hs, and extracts+ the ast node types.+* it modifies these to add anti ctors to the appropriate types,+ creates a set of trivial conversion functions to convert between anti+ nodes and regular nodes, and this is written to astanti.hs.+* astanti then contains exactly the same set of ast nodes as+ astinternal, but with a few additions to support antiquotes.+* this parsing code parses to the antinodes, then converts to regular+ nodes for the public api, and returns antinodes for the sql+ quasiquoter to use.+* todo: add a flag so that if we are not parsing for the quasiquoter,+ any splice syntax is rejected as a parse error.++> parseStatements :: String -- ^ filename to use in errors+> -> String -- ^ a string containing the sql to parse+> -> Either ParseErrorExtra [A.Statement]+> parseStatements f s =+> deAS $ parseIt l sqlStatements f Nothing s startState+> where l = lexSqlText f s+>+> parseStatementsWithPosition :: FilePath -- ^ filename to use in errors+> -> Int -- ^ adjust line number in errors by adding this+> -> Int -- ^ adjust column in errors by adding this+> -> String -- ^ a string containing the sql to parse+> -> Either ParseErrorExtra [A.Statement]+> parseStatementsWithPosition f l c s = deAS $ parseAntiSql f l c s+>+> parseStatementsFromFile :: FilePath -- ^ file name of file containing sql+> -> IO (Either ParseErrorExtra [A.Statement])+> parseStatementsFromFile fn = do+> sc <- readFile fn+> x <- lexSqlFile fn+> return $ deAS $ parseIt x sqlStatements fn Nothing sc startState+>++> parseQueryExpr :: String -- ^ filename to use in errors+> -> String -- ^ a string containing the sql to parse+> -> Either ParseErrorExtra A.QueryExpr+> parseQueryExpr f s =+> deQE $ parseIt l pqe f Nothing s startState+> where+> l = lexSqlText f s+> pqe :: SParser QueryExpr+> pqe = do+> (QueryStatement _ q) <- queryStatement+> _ <- optional (symbol ";")+> eof+> return q++> -- | Hacky wrapper to parse a query statement in the form:+> -- | select expr;+> -- | optionally 'set rowcount N'+> -- | GO+> parseSqlServerQueryExpr :: String -- ^ filename to use in errors+> -> String -- ^ a string containing the sql to parse+> -> Either ParseErrorExtra A.QueryExpr+> parseSqlServerQueryExpr f s =+> deQE $ parseIt l pqe f Nothing s startState+> where+> l = lexSqlText f s+> pqe :: SParser QueryExpr+> pqe = do+> (QueryStatement _ q) <- queryStatement+> _ <- optional $ symbol ";"+> rc <- tryOptionMaybe rowcount+> keyword "go"+> eof+> return $ case rc of+> Nothing -> q+> Just (-1) -> q+> Just n -> updateLimit n q+> rowcount = --trace "try set" $+> keyword "set"+> *> keyword "rowcount"+> *> choice [+> symbol "-" *> (((* (-1)) . fromInteger) <$> integer)+> ,integer]+> updateLimit n (Select a di sl tr wh gb hv ob _l o) =+> Select a di sl tr wh gb hv ob (Just $ NumberLit emptyAnnotation (show n)) o+> updateLimit _ x = error $ "query style not supported for sql server style: " ++ show x+++> -- | Parse expression fragment, used for testing purposes+> parseScalarExpr :: String -- ^ filename for error messages+> -> String -- ^ sql string containing a single expression,+> -- with no trailing ';'+> -> Either ParseErrorExtra A.ScalarExpr+> parseScalarExpr f s =+> deAE $ parseIt l (expr <* eof) f Nothing s startState+> where l = lexSqlText f s+>+> -- | Parse plpgsql statements, used for testing purposes -+> -- this can be used to parse a list of plpgsql statements which+> -- aren't contained in a create function.+> -- (The produced ast won't pass a type check.)+> parsePlpgsql :: String+> -> String+> -> Either ParseErrorExtra [A.Statement]+> parsePlpgsql f s =+> deAS $ parseIt l p f Nothing s startState+> where+> l = lexSqlText f s+> p = many plPgsqlStatement <* eof+>+> parseAntiSql :: FilePath+> -> Int+> -> Int+> -> String+> -> Either ParseErrorExtra [Statement]+> parseAntiSql f l c s =+> parseIt lx sqlStatements f ps s startState+> where+> lx = lexSqlTextWithPosition f l c s+> ps = Just (l,c)+>+> parseAntiPlpgsql :: String+> -> Int+> -> Int+> -> String+> -> Either ParseErrorExtra [Statement]+> parseAntiPlpgsql f l c s =+> parseIt lx p f ps s startState+> where+> lx = lexSqlText f s+> p = many plPgsqlStatement <* eof+> ps = Just (l,c)+>+> parseAntiScalarExpr :: String+> -> Int+> -> Int+> -> String+> -> Either ParseErrorExtra ScalarExpr+> parseAntiScalarExpr f l c s =+> parseIt lx p f ps s startState+> where+> lx = lexSqlText f s+> p = expr <* eof+> ps = Just (l,c)+>+> --utility function to do error handling in one place+> parseIt :: forall t s u b.(Stream s Identity t, Data b) =>+> Either ParseErrorExtra s+> -> Parsec s u b+> -> SourceName+> -> Maybe (Int,Int)+> -> String+> -> u+> -> Either ParseErrorExtra b+> parseIt lexed parser fn sp src ss =+> case lexed of+> Left er -> Left er+> Right toks -> let r1 = runParser parser ss fn toks+> in case toParseErrorExtra r1 sp src of+> Left er -> Left er+> Right t -> Right $ fixupTree t+>+> deAE :: Either ParseErrorExtra ScalarExpr+> -> Either ParseErrorExtra A.ScalarExpr+> deAE x = case x of+> Left e -> Left e+> Right ex -> Right $ convertScalarExpr ex+> deAS :: Either ParseErrorExtra [Statement]+> -> Either ParseErrorExtra [A.Statement]+> deAS x = case x of+> Left e -> Left e+> Right ex -> Right $ convertStatements ex++> deQE :: Either ParseErrorExtra QueryExpr+> -> Either ParseErrorExtra A.QueryExpr+> deQE x = case x of+> Left e -> Left e+> Right ex -> Right $ queryExpr ex+++--------------------------------------------------------------------------------++> type SParser = GenParser Token ParseState++Parsing top level statements+============================++> sqlStatements :: SParser [Statement]+> sqlStatements = many (sqlStatement True) <* eof+>+> sqlStatement :: Bool -> SParser Statement+> sqlStatement reqSemi =+> (choice [+> antiStatement+> ,queryStatement+> ,insert+> ,update+> ,delete+> ,truncateSt+> ,copy+> ,set+> ,notify+> ,keyword "create" *>+> choice [+> createTable+> ,createSequence+> ,createType+> ,createFunction+> ,createView+> ,createDomain+> ,createLanguage+> ,createTrigger]+> ,keyword "alter" *>+> choice [+> alterSequence+> ,alterTable]+> ,keyword "drop" *>+> choice [+> dropSomething+> ,dropFunction]]+> <* (if reqSemi+> then symbol ";" >> return ()+> else optional (symbol ";") >> return ()))+> <|> copyData++--------------------------------------------------------------------------------++statement flavour parsers+=========================++top level/sql statements first++select+------++select parser, parses things starting with the keyword 'select'++supports plpgsql 'select into' only for the variants which look like+'select into ([targets]) [columnNames] from ...+or+'select [columnNames] into ([targets]) from ...+This should be changed so it can only parse an into clause when+expecting a plpgsql statement.++recurses to support parsing excepts, unions, etc.+this recursion needs refactoring cos it's a mess++> queryStatement :: SParser Statement+> queryStatement = QueryStatement <$> pos <*> pQueryExpr+>+> into :: SParser (Statement -> Statement)+> into = do+> p <- pos <* keyword "into"+> st <- option False (True <$ keyword "strict")+> is <- commaSep1 qName+> return $ \s -> Into p st is s++> intoQueryStatement :: SParser Statement+> intoQueryStatement = do+> p <- pos+> (i,q) <- pQueryExprX True+> return $ i $ QueryStatement p q++> pQueryExpr :: SParser QueryExpr+> pQueryExpr = snd <$> pQueryExprX False++> pQueryExprX :: Bool -> SParser (Statement -> Statement, QueryExpr)+> pQueryExprX allowInto = (id,) <$>+> (with <|>+> buildExpressionParser combTable selFactor)+> where+> selFactor = try (parens pQueryExpr) <|> selQuerySpec <|> values+> with = WithQueryExpr <$> (pos <* keyword "with")+> <*> commaSep1 withQuery+> <*> pQueryExpr+> withQuery = WithQuery <$> pos+> <*> idString+> <*> tryOptionMaybe (parens $ commaSep idString)+> <*> (keyword "as" *> parens pQueryExpr)+> combTable = [map (\(c,p) -> Infix (CombineQueryExpr+> <$> pos+> <*> (c <$ p)) AssocLeft)+> [(Except, keyword "except")+> ,(Intersect, keyword "intersect")+> ,(UnionAll, try (keyword "union" *> keyword "all"))+> ,(Union, keyword "union")]]+> selQuerySpec = do+> p <- pos <* keyword "select"+> d <- option Dupes (Distinct <$ keyword "distinct")+> -- todo: work out how to make this work properly - need to return+> -- the into+> (sl,_intoBit) <- if allowInto+> then permute ((,)+> <$$> try selectList+> <|?> (Nothing, Just <$> into))+> else (,Nothing) <$> selectList+> Select p d sl+> <$> option [] from+> <*> optionMaybe whereClause+> <*> option [] groupBy+> <*> optionMaybe having+> <*> option [] orderBy+> <*> optionMaybe limit+> <*> optionMaybe offset+> from = keyword "from" *> commaSep1 tableRef+> groupBy = keyword "group" *> keyword "by"+> *> commaSep1 expr+> having = keyword "having" *> expr+> orderBy = keyword "order" *> keyword "by"+> *> commaSep1 oneOrder+> oneOrder = (,) <$> expr+> <*> option Asc (choice [+> Asc <$ keyword "asc"+> ,Desc <$ keyword "desc"])+> limit = keyword "limit" *> expr+> offset = keyword "offset" *> expr+> values = Values <$> (pos <* keyword "values")+> <*> commaSep1 (parens $ commaSep1 expr)+++table refs+have to cope with:+a simple tableref i.e just a name+an aliased table ref e.g. select a.b from tbl as a+a sub select e.g. select a from (select b from c)+ - these are handled in nonJoinTref+then we combine by seeing if there is a join looking prefix++> tableRef :: SParser TableRef+> tableRef =+> trefTerm >>= maybeParseAnotherJoin+> where+> maybeParseAnotherJoin tr1 =+> choice [+> do+> p2 <- pos+> (nat,jt) <- joinKw+> JoinTref p2 tr1 nat jt+> <$> trefTerm+> <*> onExpr+> <*> palias+> >>= maybeParseAnotherJoin+> ,return tr1]+> trefTerm = nonJoinTref+> <|> try (parens tableRef)+> nonJoinTref = try $ optParens $ do+> p2 <- pos+> choice [+> SubTref p2+> <$> parens pQueryExpr+> <*> palias+> ,FunTref p2+> <$> try (identifier >>= functionCallSuffix)+> <*> palias+> ,Tref p2+> <$> nkwidn+> <*> palias]+> joinKw :: SParser (Natural, JoinType)+> joinKw = do+> --look for the join flavour first+> n <- option Unnatural (Natural <$ keyword "natural")+> jt <- choice [+> LeftOuter <$ try (keyword "left"+> *> optional (keyword "outer"))+> ,RightOuter <$ try (keyword "right"+> *> optional (keyword "outer"))+> ,FullOuter <$ try (keyword "full"+> *> optional (keyword "outer"))+> ,Cross <$ keyword "cross"+> ,Inner <$ optional (keyword "inner")]+> --recurse back to tref to read the table+> keyword "join"+> return (n,jt)+> onExpr = choice [+> Just <$> (JoinOn <$> pos <*> (keyword "on" *> expr))+> ,Just <$> (JoinUsing <$> pos+> <*> (keyword "using" *> columnNameList))+> ,return Nothing]+> palias = do+> p <- pos+> option (NoAlias p)+> (optionalSuffix+> (TableAlias p) (optional (keyword "as") *> nkwid)+> (FullAlias p) () (parens $ commaSep1 idString))+> badNames = ["as"+> ,"where"+> ,"except"+> ,"union"+> ,"intersect"+> ,"loop"+> ,"inner"+> ,"on"+> ,"left"+> ,"right"+> ,"full"+> ,"cross"+> ,"join"+> ,"natural"+> ,"order"+> ,"group"+> ,"limit"+> ,"using"+> ,"from"]+> nkwidn = do+> i <- dqi+> case i of+> SQIdentifier _ [n] | n `elem` badNames+> -> fail "not keyword"+> _ -> return i+> nkwid = try $ do+> x <- idString+> --avoid all these keywords as aliases since they can+> --appear immediately following a tableref as the next+> --part of the statement, if we don't do this then lots+> --of things don't parse. Seems a bit inelegant but+> --works for the tests and the test sql files don't know+> --if these should be allowed as aliases without "" or+> --[]+> -- TODO find out what the correct behaviour here is.+> if map toLower x `elem` badNames+> then fail "not keyword"+> else return x+>+> optParens :: SParser a+> -> SParser a+> optParens p = try (parens p) <|> p++insert, update and delete+-------------------------++insert statement: supports option column name list,+multiple rows to insert and insert from select statements++> insert :: SParser Statement+> insert = Insert+> <$> pos <* keyword "insert" <* keyword "into"+> <*> dqi+> <*> option [] (try columnNameList)+> <*> pQueryExpr+> <*> tryOptionMaybe returning+>+> update :: SParser Statement+> update = Update+> <$> pos <* keyword "update"+> <*> dqi+> <*> (keyword "set" *> commaSep1 setClause)+> <*> option [] (keyword "from" *> commaSep1 tableRef)+> <*> tryOptionMaybe whereClause+> <*> tryOptionMaybe returning+> where+> setClause =+> choice [do+> p <- pos+> l <- parens (commaSep1 idString)+> symbol "="+> r <- parens (commaSep1 expr)+> return $ FunCall p "=" [FunCall p "!rowctor" $ map (Identifier p) l+> ,FunCall p "!rowctor" r]+> ,do+> p <- pos+> l <- idString+> symbol "="+> r <- expr+> return $ FunCall p "=" [Identifier p l,r]]++> delete :: SParser Statement+> delete = Delete+> <$> pos <* keyword "delete" <* keyword "from"+> <*> dqi+> <*> option [] (keyword "using" *> commaSep1 tableRef)+> <*> tryOptionMaybe whereClause+> <*> tryOptionMaybe returning+>++other dml-type stuff+--------------------++> truncateSt :: SParser Statement+> truncateSt =+> Truncate+> <$> pos <* keyword "truncate" <* optional (keyword "table")+> <*> commaSep1 idString+> <*> option ContinueIdentity (choice [+> ContinueIdentity <$ (keyword "continue"+> <* keyword "identity")+> ,RestartIdentity <$ (keyword "restart"+> <* keyword "identity")])+> <*> cascade+>+> copy :: SParser Statement+> copy = do+> p <- pos+> keyword "copy"+> tableName <- idString+> cols <- option [] (parens $ commaSep1 idString)+> keyword "from"+> src <- choice [+> CopyFilename <$> extrStr <$> stringLit+> ,Stdin <$ keyword "stdin"]+> return $ Copy p tableName cols src+>+> copyData :: SParser Statement+> copyData = CopyData <$> pos <*> mytoken (\tok ->+> case tok of+> CopyPayloadTok n -> Just n+> _ -> Nothing)+>++--------------------------------------------------------------------------------++misc+====++> set :: SParser Statement+> set = Set <$> pos+> <*> (keyword "set" *> idString)+> <*> ((keyword "to" <|> symbol "=") *>+> commaSep1 sv)+> where+> sv = choice [+> SetStr <$> pos <*> stringN+> ,SetId <$> pos <*> idString+> ,SetNum <$> pos <*> (try (fromInteger <$> integer)+> <|> (read <$> numString))]+>+> notify :: SParser Statement+> notify = Notify <$> pos+> <*> (keyword "notify" *> idString)++--------------------------------------------------------------------------------++ddl+===++> createTable :: SParser Statement+> createTable = do+> p <- pos+> keyword "table"+> tname <- idString+> choice [+> CreateTableAs p tname <$> (keyword "as" *> pQueryExpr)+> ,uncurry (CreateTable p tname) <$> readAttsAndCons]+> where+> --parse our unordered list of attribute defs or constraints, for+> --each line want to try the constraint parser first, then the+> --attribute parser, so we need the swap to feed them in the+> --right order into createtable+> readAttsAndCons = parens (swap <$> multiPerm+> (try tableConstraint)+> tableAttribute+> (symbol ","))+> where swap (a,b) = (b,a)+>+> tableAttribute :: SParser AttributeDef+> tableAttribute = AttributeDef+> <$> pos+> <*> idString+> <*> typeName+> <*> tryOptionMaybe (keyword "default" *> expr)+> <*> many rowConstraint+> where+> rowConstraint = do+> p <- pos+> cn <- option "" (keyword "constraint" *> idString)+> choice [+> RowUniqueConstraint p cn <$ keyword "unique"+> ,RowPrimaryKeyConstraint p cn <$ keyword "primary" <* keyword "key"+> ,RowCheckConstraint p cn <$> (keyword "check" *> parens expr)+> ,NullConstraint p cn <$ keyword "null"+> ,NotNullConstraint p cn <$ (keyword "not" <* keyword "null")+> ,RowReferenceConstraint p cn+> <$> (keyword "references" *> idString)+> <*> option Nothing (try $ parens $ Just <$> idString)+> <*> onDelete+> <*> onUpdate+> ]+++>+> onDelete,onUpdate :: SParser Cascade+> onDelete = onSomething "delete"+> onUpdate = onSomething "update"+>+> onSomething :: String -> SParser Cascade+> onSomething k = option Restrict $ try $ keyword "on"+> *> keyword k *> cascade+>+> tableConstraint :: SParser Constraint+> tableConstraint = do+> p <- pos+> cn <- option "" (keyword "constraint" *> option "" conName)+> choice [+> UniqueConstraint p cn+> <$> try (keyword "unique" *> optParens columnNameList)+> ,PrimaryKeyConstraint p cn+> <$> try (keyword "primary" *> keyword "key"+> *> choice [+> (:[]) <$> idString+> ,parens (commaSep1 idString)])+> ,CheckConstraint p cn+> <$>try (keyword "check" *> parens expr)+> ,ReferenceConstraint p cn+> <$> try (keyword "foreign" *> keyword "key"+> *> parens (commaSep1 idString))+> <*> (keyword "references" *> idString)+> <*> option [] (parens $ commaSep1 idString)+> <*> onUpdate+> <*> onDelete]+> where+> conName = try $ do+> x <- idString+> if map toLower x `elem` [+> "unique"+> ,"primary"+> ,"check"+> ,"foreign"+> ,"references"]+> then fail "not keyword"+> else return x+>+> alterTable :: SParser Statement+> alterTable = AlterTable <$> (pos <* keyword "table"+> <* optional (keyword "only"))+> <*> idString+> <*> many1 action+> where action = choice [+> AlterColumnDefault+> <$> (pos <* keyword "alter" <* keyword "column")+> <*> idString+> <*> (keyword "set" *> keyword "default" *> expr)+> ,AddConstraint+> <$> (pos <* keyword "add")+> <*> tableConstraint]+>+> createType :: SParser Statement+> createType = CreateType+> <$> pos <* keyword "type"+> <*> idString+> <*> (keyword "as" *> parens (commaSep1 typeAtt))+> where+> typeAtt = TypeAttDef <$> pos <*> idString <*> typeName+>+> createSequence :: SParser Statement+> createSequence = do+> p <- pos+> keyword "sequence"+> nm <- idString+> (stw, incr, mx, mn, c) <-+> permute ((,,,,) <$?> (1,startWith)+> <|?> (1,increment)+> <|?> ((2::Integer) ^ (63::Integer) - 1, maxi)+> <|?> (1, mini)+> <|?> (1, cache))+> return $ CreateSequence p nm incr mn mx stw c+> where+> startWith = keyword "start" *> optional (keyword "with") *> integer+> increment = keyword "increment" *> optional (keyword "by") *> integer+> maxi = (2::Integer) ^ (63::Integer) - 1+> <$ try (keyword "no" <* keyword "maxvalue")+> mini = 1 <$ try (keyword "no" <* keyword "minvalue")+> cache = keyword "cache" *> integer+>+> alterSequence :: SParser Statement+> alterSequence = AlterSequence <$> pos+> <*> (keyword "sequence" *> idString)+> <*> (keyword "owned"+> *> keyword "by"+> *> dqi)++create function, support sql functions and plpgsql functions. Parses+the body in both cases and provides a statement list for the body+rather than just a string.++> createFunction :: SParser Statement+> createFunction = do+> p <- pos+> rep <- choice [NoReplace <$ keyword "function"+> ,Replace <$ mapM_ keyword ["or", "replace", "function"]+> ]+> fnName <- idString+> params <- parens $ commaSep param+> retType <- keyword "returns" *> typeName+> ((bodypos,body), lang,vol) <-+> permute ((,,) <$$> parseAs+> <||> readLang+> <|?> (Volatile,pVol))+> case parseBody lang body bodypos of+> Left er -> fail er+> Right b ->+> return $ CreateFunction p fnName params retType rep lang b vol+> where+> parseAs = do+> keyword "as"+> bodypos <- toMySp <$> getPosition+> body <- stringLit+> return (bodypos,body)+> pVol = matchAKeyword [("volatile", Volatile)+> ,("stable", Stable)+> ,("immutable", Immutable)]+> readLang = keyword "language" *> matchAKeyword [("plpgsql", Plpgsql)+> ,("sql",Sql)]+> parseBody :: Language -> ScalarExpr -> MySourcePos+> -> Either String FnBody+> parseBody lang body (fileName,line,col) =+> case parseIt+> (lexSqlTextWithPosition fileName line col (extrStr body))+> (functionBody lang)+> fileName+> (Just (line,col))+> (extrStr body)+> () of+> Left er@(ParseErrorExtra _ _ _) -> Left $ show er+> Right body' -> Right body'+> -- sql function is just a list of statements, the last one+> -- has the trailing semicolon optional+> functionBody Sql = do+> p <- pos+> a <- many (try $ sqlStatement True)+> -- this makes my head hurt, should probably write out+> -- more longhand+> SqlFnBody p <$> option a ((\b -> a++[b]) <$> sqlStatement False)+> -- plpgsql function has an optional declare section, plus+> -- the statements are enclosed in begin ... end; (semi colon+> -- after end is optional)+> functionBody Plpgsql =+> PlpgsqlFnBody <$> pos <*> do+> p <- pos+> l <- label+> block p l <* optional (symbol ";") <* eof++params to a function++> param :: SParser ParamDef+> param = choice [+> try (ParamDef <$> pos <*> idString <*> typeName)+> ,ParamDefTp <$> pos <*> typeName]++variable declarations in a plpgsql function++> varDef :: SParser VarDef+> varDef = do+> p <- pos+> a <- idString+> choice [do+> keyword "alias"+> keyword "for"+> choice [+> VarAlias p a <$> idString+> ,ParamAlias p a <$> liftPositionalArgTok]+> ,VarDef p a+> <$> typeName+> <*> tryOptionMaybe ((symbol ":=" <|> symbol "=")*> expr)+> ]+> <* symbol ";"+>+> createView :: SParser Statement+> createView = CreateView+> <$> pos <* keyword "view"+> <*> idString+> <*> tryOptionMaybe (parens $ commaSep idString)+> <*> (keyword "as" *> pQueryExpr)++>+> createDomain :: SParser Statement+> createDomain = CreateDomain+> <$> pos <* keyword "domain"+> <*> idString+> <*> (tryOptionMaybe (keyword "as") *> typeName)+> <*> option "" (keyword "constraint" *> idString)+> <*> tryOptionMaybe (keyword "check" *> parens expr)+>+> dropSomething :: SParser Statement+> dropSomething = do+> p <- pos+> x <- try (choice [+> Domain <$ keyword "domain"+> ,Type <$ keyword "type"+> ,Table <$ keyword "table"+> ,View <$ keyword "view"+> ])+> (i,e,r) <- parseDrop idString+> return $ DropSomething p x i e r+>+> dropFunction :: SParser Statement+> dropFunction = do+> p <- pos+> keyword "function"+> (i,e,r) <- parseDrop pFun+> return $ DropFunction p i e r+> where+> pFun = (,) <$> idString+> <*> parens (commaSep typeName)+>+> parseDrop :: SParser a+> -> SParser (IfExists, [a], Cascade)+> parseDrop p = (,,)+> <$> ifExists+> <*> commaSep1 p+> <*> cascade+> where+> ifExists = option Require+> (try $ IfExists <$ (keyword "if"+> *> keyword "exists"))+>+> createLanguage :: SParser Statement+> createLanguage =+> CreateLanguage <$> pos+> <*> (optional (keyword "procedural") *>+> keyword "language" *>+> idString)+>+> createTrigger :: SParser Statement+> createTrigger =+> CreateTrigger <$> pos+> <*> (keyword "trigger" *> idString)+> <*> twhen+> <*> tevents+> <*> (keyword "on" *> idString)+> <*> tfiring+> <*> (keyword "execute" *> keyword "procedure"+> *> idString)+> <*> parens (commaSep expr)+> where+> twhen = choice [TriggerBefore <$ keyword "before"+> ,TriggerAfter <$ keyword "after"]+> tevents :: SParser [TriggerEvent]+> tevents = sepBy1 (choice [+> AntiTriggerEvent <$> splice+> ,TInsert <$ keyword "insert"+> ,TUpdate <$ keyword "update"+> ,TDelete <$ keyword "delete"]) (keyword "or")+> tfiring = option EachStatement+> (keyword "for" *> optional (keyword "each") *>+> choice [+> EachRow <$ keyword "row"+> ,EachStatement <$ keyword "statement"])++anti statement+--------------++> antiStatement :: SParser Statement+> antiStatement = AntiStatement <$> splice++--------------------------------------------------------------------------------++component parsers for sql statements+====================================++> whereClause :: SParser ScalarExpr+> whereClause = keyword "where" *> expr++selectlist and selectitem: the bit between select and from+check for into either before the whole list of select columns+or after the whole list++> selectList :: SParser SelectList+> selectList = SelectList <$> pos+> <*> itemList+> {-pos >>= \p ->+> choice [+> --flip (SelectList p) <$> readInto <*> itemList+> SelectList p <$> itemList] -- <*> option [] readInto]-}+> where+> --readInto = keyword "into" *> commaSep1 qName+> itemList = commaSep1 selectItem+> selectItem = pos >>= \p ->+> optionalSuffix+> (SelExp p) expr+> (SelectItem p) () (keyword "as" *> idString)+>+> returning :: SParser SelectList+> returning = keyword "returning" *> selectList+>+> columnNameList :: SParser [String]+> columnNameList = parens $ commaSep1 idString+>+> typeName :: SParser TypeName+> typeName =+> choice [+> SetOfTypeName <$> pos <*> (keyword "setof" *> typeName)+> ,otherTypeName]+> where+> otherTypeName = do+> p <- pos+> s <- map toLower <$> pTypeNameString+> choice [try (Prec2TypeName p s+> <$> (symbol "(" *> integer)+> <*> (symbol "," *> integer <* symbol ")"))+> ,PrecTypeName p s <$> parens integer+> ,arrayTypeName p s+> ,return $ SimpleTypeName p s]+> arrayTypeName p s = ArrayTypeName p (SimpleTypeName p s)+> <$ symbol "[" <* symbol "]"+> --todo: add special cases for the other type names with spaces in them+> pTypeNameString = ("double precision" <$ try (keyword "double"+> <* keyword "precision"))+> <|> idString+>+> cascade :: SParser Cascade+> cascade = option Restrict (choice [+> Restrict <$ keyword "restrict"+> ,Cascade <$ keyword "cascade"])++--------------------------------------------------------------------------------++plpgsql statements+==================++> plPgsqlStatement :: SParser Statement+> plPgsqlStatement =+> choice [+> -- modified sql statements+> choice [+> try intoQueryStatement+> ,choice [insert+> ,update+> ,delete] >>= intoSuffix+> ] <* symbol ";"+> -- regular sql statements+> ,sqlStatement True+> -- regular plpgsql statements+> ,choice [+> continue+> ,execute >>= intoSuffix+> ,caseStatement+> ,assignment+> ,ifStatement+> ,returnSt+> ,raise+> ,perform+> ,labelPrefixed+> ,nullStatement+> ,exitStatement]+> <* symbol ";"+> ]+> where+> intoSuffix e =+> option e (try $ do+> i <- into+> return $ i e)+> labelPrefixed = do+> p <- pos+> l <- label+> choice [block p l+> ,forStatement p l+> ,whileStatement p l+> ,loopStatement p l]++> label :: SParser (Maybe String)+> label = optional (symbol "<<" *> idString <* symbol ">>")+>+> block :: Annotation -> Maybe String -> SParser Statement+> block p l = Block p l+> <$> option [] declarePart+> <*> statementPart+> where+> statementPart = keyword "begin"+> *> many plPgsqlStatement+> <* keyword "end"+> declarePart = keyword "declare"+> *> manyTill (try varDef) (lookAhead $ keyword "begin")+>+>+> nullStatement :: SParser Statement+> nullStatement = NullStatement <$> (pos <* keyword "null")+>+> exitStatement :: SParser Statement+> exitStatement = ExitStatement <$> (pos <* keyword "exit")+> <*> optional idString+>+>+> continue :: SParser Statement+> continue = ContinueStatement <$> (pos <* keyword "continue")+> <*> optional idString+>+> perform :: SParser Statement+> perform = Perform <$> (pos <* keyword "perform") <*> expr+>+> execute :: SParser Statement+> execute = Execute <$> (pos <* keyword "execute")+> <*> expr+> {-pos >>= \p -> >>+> optionalSuffix+> (Execute p) expr+> (ExecuteInto p) () readInto+> where+> readInto = keyword "into" *> commaSep1 idString-}+>+> assignment :: SParser Statement+> assignment = Assignment+> <$> pos+> -- put the := in the first try to attempt to get a+> -- better error if the code looks like malformed+> -- assignment statement+> <*> try (qName <* (symbol ":=" <|> symbol "="))+> <*> expr+>+> returnSt :: SParser Statement+> returnSt = pos >>= \p -> keyword "return" >>+> choice [+> ReturnNext p <$> (keyword "next" *> expr)+> ,ReturnQuery p <$> (keyword "query" *> pQueryExpr)+> ,Return p <$> tryOptionMaybe expr]+>+> raise :: SParser Statement+> raise = pos >>= \p -> keyword "raise" >>+> Raise p+> <$> raiseType+> <*> (extrStr <$> stringLit)+> <*> option [] (symbol "," *> commaSep1 expr)+> where+> raiseType = matchAKeyword [("notice", RNotice)+> ,("exception", RException)+> ,("error", RError)]+>+> forStatement :: Annotation -> Maybe String -> SParser Statement+> forStatement p l = do+> keyword "for"+> start <- qName+> keyword "in"+> choice [ForQueryStatement p l start+> <$> try pQueryExpr <*> theRest+> ,ForIntegerStatement p l start+> <$> expr+> <*> (symbol ".." *> expr)+> <*> theRest]+> where+> theRest = keyword "loop" *> many plPgsqlStatement+> <* keyword "end" <* keyword "loop"+>+> whileStatement :: Annotation -> Maybe String -> SParser Statement+> whileStatement p l = WhileStatement p l+> <$> (keyword "while" *> expr <* keyword "loop")+> <*> many plPgsqlStatement <* keyword "end" <* keyword "loop"+> loopStatement :: Annotation -> Maybe String -> SParser Statement+> loopStatement p l = LoopStatement p l+> <$> (keyword "loop" *> many plPgsqlStatement <* keyword "end" <* keyword "loop")+>++>+> ifStatement :: SParser Statement+> ifStatement = If+> <$> (pos <* keyword "if")+> <*> (ifPart <:> elseifParts)+> <*> (elsePart <* endIf)+> where+> ifPart = expr <.> (thn *> many plPgsqlStatement)+> elseifParts = many ((elseif *> expr) <.> (thn *> many plPgsqlStatement))+> elsePart = option [] (keyword "else" *> many plPgsqlStatement)+> endIf = keyword "end" <* keyword "if"+> thn = keyword "then"+> elseif = keyword "elseif" <|> keyword "elsif"+> --might as well throw this in as well after all that+> -- can't do <,> unfortunately, so use <.> instead+> (<.>) a b = (,) <$> a <*> b+>+> caseStatement :: SParser Statement+> caseStatement = do+> p <- pos+> keyword "case"+> choice [try (CaseStatementSimple p+> <$> expr+> <*> many whenSt+> <*> option [] (keyword "else" *> many plPgsqlStatement)+> <* keyword "end" <* keyword "case")+> ,CaseStatement p+> <$> many whenSt+> <*> option [] (keyword "else" *> many plPgsqlStatement)+> <* keyword "end" <* keyword "case"]+> where+> whenSt = keyword "when" >>+> (,) <$> commaSep1 expr+> <*> (keyword "then" *> many plPgsqlStatement)++--------------------------------------------------------------------------------++expressions+===========++This is the bit that makes it the most obvious that I don't really+know haskell, parsing theory or parsec ... robbed a parsing example+from haskell-cafe and mainly just kept changing it until it seemed to+work++> expr :: SParser ScalarExpr+> expr = buildExpressionParser table factor+> <?> "expression"+>+> factor :: SParser ScalarExpr+> factor =++First job is to take care of forms which start like a vanilla+expression, and then add a suffix on++> fct >>= tryExprSuffix+> where+> tryExprSuffix e =+> option e (choice (map (\f -> f e)+> [inPredicateSuffix+> ,functionCallSuffix+> ,windowFnSuffix+> ,castSuffix+> ,betweenSuffix+> ,arraySubSuffix+> ,qualIdSuffix])+> >>= tryExprSuffix)+> fct = choice [++order these so the ones which can be valid prefixes of others appear+further down the list (used to be a lot more important when there+wasn't a separate lexer), probably want to refactor this to use the+optionalsuffix parsers to improve speed.++One little speed optimisation, to help with pretty printed code which+can contain a lot of parens - check for nested ((+This little addition speeds up ./ParseFile.lhs sqltestfiles/system.sql+on my system from ~4 minutes to ~4 seconds (most of the 4s is probably+compilation overhead).++> --try (lookAhead (symbol "(" >> symbol "(")) >> parens expr++start with the factors which start with parens - eliminate scalar+subqueries since they're easy to distinguish from the others then do in+predicate before row constructor, since an in predicate can start with+a row constructor looking thing, then finally vanilla parens++> --,+> scalarSubQuery+> ,try rowCtor+> ,parens expr++try a few random things which can't start a different expression++> ,positionalArg+> ,placeholder+> ,stringLit+> ,numberLit++put the factors which start with keywords before the ones which start+with a function, so we don't try an parse a keyword as a function name++> ,caseScalarExpr+> ,exists+> ,booleanLit+> ,nullLit+> ,arrayLit+> ,castKeyword+> ,substring+> ,extract++now do identifiers, functions, and window functions (each is a prefix+to the next one)++want to allow splices in e.g. function calls: $(fnname)(). To do this,+don't want to parse anti expression above, but need to parse these+following suffixes starting with a splice, but if there is no suffix,+want to parse as an antiexpression rather than an antiidentifier++> ,try $ do+> i <- antiIdentifier+> choice [inPredicateSuffix i+> ,threadOptionalSuffix (functionCallSuffix i)+> windowFnSuffix]++> ,antiScalarExpr+> ,antiIdentifier1+> ,try interval+> ,try typedStringLit+> ,identifier+> ]++operator table+--------------++proper hacky, but sort of does the job+the 'missing' notes refer to pg operators which aren't yet supported,+or supported in a different way (e.g. cast uses the type name parser+for one of it's argument, not the expression parser - I don't know if+there is a better way of doing this but there usually is in parsec)++pg's operator table is on this page:+http://www.postgresql.org/docs/8.4/interactive/sql-syntax-lexical.html#SQL-SYNTAX-OPERATORS++will probably need something more custom to handle full range of sql+syntactical novelty, in particular the precedence rules mix these+operators up with irregular syntax operators, you can create new+operators during parsing, and some operators are prefix/postfix or+binary depending on the types of their operands (how do you parse+something like this?)++The full list of operators from a standard template1 database should+be used here.++> tableAB :: Bool -> [[Operator [Token] ParseState Identity ScalarExpr]]+> tableAB isB = [[{-binary "." AssocLeft-}]+> --[binary "::" (BinOpCall Cast) AssocLeft]+> --missing [] for array element select+> ,[prefix "-" "u-"]+> ,[binary "^" AssocLeft]+> ,[binary "*" AssocLeft+> ,idHackBinary "*" AssocLeft+> ,binary "/" AssocLeft+> ,binary "%" AssocLeft]+> ,[binary "+" AssocLeft+> ,binary "-" AssocLeft]+> --should be is isnull and notnull+> ,[postfixks ["is", "not", "null"] "!isnotnull"+> ,postfixks ["is", "null"] "!isnull"]+> --other operators all added in this list according to the pg docs:+> ,[binary "<->" AssocNone+> ,binary "<=" AssocRight+> ,binary ">=" AssocRight+> ,binary "||" AssocLeft+> ,prefix "@" "@"+> ]+> --in should be here, but is treated as a factor instead+> --between+> --overlaps+> ,[binaryk "like" "!like" AssocNone+> ,binaryks ["not","like"] "!notlike" AssocNone+> ,binarycust (symbol "!=") "<>" AssocNone]+> --(also ilike similar)+> ,[binary "<" AssocNone+> ,binary ">" AssocNone]+> ,[binary "=" AssocRight+> ,binary "<>" AssocNone]+> ,[notNot+> ,prefixk "not" "!not"+> ]+> ,let x = [binaryk "or" "!or" AssocLeft]+> in if isB+> then x+> else binaryk "and" "!and" AssocLeft : x+> ]+> where+> binary s = binarycust (symbol s) s+> -- '*' is lexed as an id token rather than a symbol token, so+> -- work around here+> idHackBinary s = binarycust (keyword s) s+> binaryk = binarycust . keyword+> binaryks = binarycust . mapM_ keyword+> prefix = unaryCust Prefix . symbol+> prefixk = unaryCust Prefix . keyword+> postfixks = unaryCust Postfix . mapM_ keyword+> binarycust opParse t =+> Infix $ try $ do+> f <- FunCall <$> pos <*> (t <$ opParse)+> return (\l m -> f [l,m])+> unaryCust ctor opParse t =+> ctor $ try $ do+> f <- FunCall <$> pos <*> (t <$ opParse)+> return (\l -> f [l])+> -- hack - haven't worked out why parsec buildexpression parser won't+> -- parse something like "not not EXPR" without parens so hack here+> notNot =+> Prefix (try $ do+> p1 <- pos+> keyword "not"+> p2 <- pos+> keyword "not"+> return (\l -> FunCall p1 "!not"+> [FunCall p2 "!not" [l]]))++From postgresql src/backend/parser/gram.y++~~~~~++ * We have two expression types: a_expr is the unrestricted kind, and+ * b_expr is a subset that must be used in some places to avoid shift/reduce+ * conflicts. For example, we can't do BETWEEN as "BETWEEN a_expr AND a_expr"+ * because that use of AND conflicts with AND as a boolean operator. So,+ * b_expr is used in BETWEEN and we remove boolean keywords from b_expr.+ *+ * Note that '(' a_expr ')' is a b_expr, so an unrestricted expression can+ * always be used by surrounding it with parens.++~~~~~++> table :: [[Operator [Token] ParseState Identity ScalarExpr]]+> table = tableAB False++> tableB :: [[Operator [Token] ParseState Identity ScalarExpr]]+> tableB = tableAB True++use the same factors++> b_expr :: SParser ScalarExpr+> b_expr = buildExpressionParser tableB factor+> <?> "expression"+>++factor parsers+--------------++I think the lookahead is used in an attempt to help the error messages.++> scalarSubQuery :: SParser ScalarExpr+> scalarSubQuery = try (symbol "(" *> lookAhead (keyword "select"+> <|> keyword "with")) >>+> ScalarSubQuery+> <$> pos+> <*> pQueryExpr <* symbol ")"++in predicate - an identifier or row constructor followed by 'in'+then a list of expressions or a subselect++> inPredicateSuffix :: ScalarExpr -> SParser ScalarExpr+> inPredicateSuffix e = try $+> InPredicate+> <$> pos+> <*> return e+> <*> option True (False <$ keyword "not")+> <*> (keyword "in" *> parens ((InQueryExpr <$> pos <*> pQueryExpr)+> <|>+> (InList <$> pos <*> commaSep1 expr)))++row ctor: one of++* row ()+* row (expr)+* row (expr, expr1, ...)+* (expr, expr2,...) [implicit (no row keyword) version, at least two elements+ must be present]++* (expr) parses to just expr rather than row(expr)+* and () is a syntax error.++> rowCtor :: SParser ScalarExpr+> rowCtor = FunCall+> <$> pos+> <*> return "!rowctor"+> <*> choice [+> keyword "row" *> parens (commaSep expr)+> ,parens $ commaSep2 expr]+>+> numberLit :: SParser ScalarExpr+> numberLit = NumberLit <$> pos <*> numString+>++> integer :: SParser Integer+> integer = do+> l <- numString+> guard (all (`elem` digChars) l)+> return $ read l+> where+> digChars = concatMap show [(0::Int)..9]++ > integerLit :: SParser ScalarExpr+ > integerLit = do+ > p <- pos+ > (IntegerLit p) <$> integer++ IntegerLit <$> pos <*> integer++>+> caseScalarExpr :: SParser ScalarExpr+> caseScalarExpr = do+> p <- pos+> keyword "case"+> choice [+> try $ CaseSimple p <$> expr+> <*> many whenParse+> <*> tryOptionMaybe (keyword "else" *> expr)+> <* keyword "end"+> ,Case p <$> many whenParse+> <*> tryOptionMaybe (keyword "else" *> expr)+> <* keyword "end"]+> where+> whenParse = (,) <$> (keyword "when" *> commaSep1 expr)+> <*> (keyword "then" *> expr)+>+> exists :: SParser ScalarExpr+> exists = Exists <$> pos <* keyword "exists" <*> parens pQueryExpr+>++> booleanLit :: SParser ScalarExpr+> booleanLit = BooleanLit <$> pos <*> (True <$ keyword "true"+> <|> False <$ keyword "false")++>+> nullLit :: SParser ScalarExpr+> nullLit = NullLit <$> pos <* keyword "null"+>+> arrayLit :: SParser ScalarExpr+> arrayLit = FunCall <$> pos <* keyword "array"+> <*> return "!arrayctor"+> <*> squares (commaSep expr)+>+> arraySubSuffix :: ScalarExpr -> SParser ScalarExpr+> arraySubSuffix e = case e of+> Identifier _ "array" -> fail "can't use array as \+> \identifier name"+> _ -> FunCall <$> pos+> <*> return "!arraysub"+> <*> ((e:) <$> squares (commaSep1 expr))+>+> windowFnSuffix :: ScalarExpr -> SParser ScalarExpr+> windowFnSuffix e = WindowFn <$> pos <*> return e+> <*> (keyword "over"+> *> (symbol "(" *> option [] partitionBy))+> <*> option [] orderBy1+> <*> option Asc (try $ choice [+> Asc <$ keyword "asc"+> ,Desc <$ keyword "desc"])+> <*> frm+> <* symbol ")"+> where+> orderBy1 = keyword "order" *> keyword "by" *> commaSep1 expr+> partitionBy = keyword "partition" *> keyword "by" *> commaSep1 expr+> frm = option FrameUnboundedPreceding $ choice+> $ map (\(a,b) -> a <$ try (ks b)) [+> (FrameUnboundedPreceding, ["range","unbounded","preceding"])+> ,(FrameUnboundedPreceding, ["range"+> ,"between"+> ,"unbounded"+> ,"preceding"+> ,"and"+> ,"current"+> ,"row"])+> ,(FrameUnboundedFull, ["range"+> ,"between"+> ,"unbounded"+> ,"preceding"+> ,"and"+> ,"unbounded"+> ,"following"])+> ,(FrameUnboundedFull, ["rows"+> ,"between"+> ,"unbounded"+> ,"preceding"+> ,"and"+> ,"unbounded"+> ,"following"])+> ,(FrameRowsUnboundedPreceding, ["rows","unbounded","preceding"])+> ,(FrameRowsUnboundedPreceding, ["rows"+> ,"between"+> ,"unbounded"+> ,"preceding"+> ,"and"+> ,"current"+> ,"row"])]+> ks = mapM keyword+>+> betweenSuffix :: ScalarExpr -> SParser ScalarExpr+> betweenSuffix a = do+> p <- pos+> keyword "between"+> b <- b_expr --dodgyParseElement+> keyword "and"+> c <- b_expr -- dodgyParseElement+> return $ FunCall p "!between" [a,b,c]+> --can't use the full expression parser at this time+> --because of a conflict between the operator 'and' and+> --the 'and' part of a between+> --where+> -- dodgyParseElement = factor+++> functionCallSuffix :: ScalarExpr -> SParser ScalarExpr+> functionCallSuffix (Identifier _ fnName) =+> pos >>= \p -> FunCall p fnName+> <$> parens (optional (keyword "all"+> <|> keyword "distinct")+> *> commaSep expr)+> functionCallSuffix s =+> fail $ "cannot make functioncall from " ++ show s+>+> castKeyword :: SParser ScalarExpr+> castKeyword = Cast+> <$> pos <* keyword "cast" <* symbol "("+> <*> expr+> <*> (keyword "as" *> typeName <* symbol ")")+>+> castSuffix :: ScalarExpr -> SParser ScalarExpr+> castSuffix ex = pos >>= \p -> Cast p ex <$> (symbol "::" *> typeName)++> typedStringLit :: SParser ScalarExpr+> typedStringLit = TypedStringLit+> <$> pos+> <*> typeName+> <*> (extrStr <$> stringLit)++> extract :: SParser ScalarExpr+> extract = try $ do+> p <- pos+> _ <- keyword "extract"+> _ <- symbol "("+> f <- extractField+> _ <- keyword "from"+> e <- expr+> _ <- symbol ")"+> return $ Extract p f e+> where+> extractField =+> choice [ExtractCentury <$ keyword "century"+> ,ExtractDay <$ keyword "day"+> ,ExtractDecade <$ keyword "decade"+> ,ExtractDow <$ keyword "dow"+> ,ExtractDoy <$ keyword "doy"+> ,ExtractEpoch <$ keyword "epoch"+> ,ExtractHour <$ keyword "hour"+> ,ExtractIsodow <$ keyword "isodow"+> ,ExtractIsoyear <$ keyword "isoyear"+> ,ExtractMicroseconds <$ keyword "microseconds"+> ,ExtractMillennium <$ keyword "millennium"+> ,ExtractMilliseconds <$ keyword "milliseconds"+> ,ExtractMinute <$ keyword "minute"+> ,ExtractMonth <$ keyword "month"+> ,ExtractQuarter <$ keyword "quarter"+> ,ExtractSecond <$ keyword "second"+> ,ExtractTimezone <$ keyword "timezone"+> ,ExtractTimezoneHour <$ keyword "timezone_hour"+> ,ExtractTimezoneMinute <$ keyword "timezone_minute"+> ,ExtractWeek <$ keyword "week"+> ,ExtractYear <$ keyword "year"]++> interval :: SParser ScalarExpr+> interval = Interval+> <$> pos+> <*> (keyword "interval" *> (extrStr <$> stringLit))+> <*> intervalField+> <*> tryOptionMaybe (parens (fromInteger <$> integer))+> where+> intervalField =+> choice [IntervalYear <$ keyword "year"+> ,IntervalMonth <$ keyword "month"+> ,IntervalDay <$ keyword "day"+> ,IntervalHour <$ keyword "hour"+> ,IntervalMinute <$ keyword "minut"+> ,IntervalSecond <$ keyword "second"+> {-,IntervalYearToMonth <$ keyword "day"+> ,IntervalDayToHour <$ keyword "day"+> ,IntervalDayToMinute <$ keyword "day"+> ,IntervalDayToSecond <$ keyword "day"+> ,IntervalHourToMinute <$ keyword "day"+> ,IntervalHourToSecond <$ keyword "day"+> ,IntervalMinuteToSecond <$ keyword "day"-}]+>+> substring :: SParser ScalarExpr+> substring = do+> p <- pos+> keyword "substring"+> symbol "("+> a <- expr+> keyword "from"+> b <- expr+> keyword "for"+> c <- expr+> symbol ")"+> return $ FunCall p "!substring" [a,b,c]+>+> identifier :: SParser ScalarExpr+> identifier = Identifier <$> pos <*> (idString <|> splice)+>+> qualIdSuffix :: ScalarExpr -> SParser ScalarExpr+> qualIdSuffix ex = pos >>= \p -> QIdentifier p ex <$> (symbol "." *> idString)++> antiIdentifier :: SParser ScalarExpr+> antiIdentifier = Identifier <$> pos <*> spliceD++> antiIdentifier1 :: SParser ScalarExpr+> antiIdentifier1 = Identifier <$> pos <*> ssplice+> where+> ssplice = (\s -> "$i(" ++ s ++ ")") <$>+> (symbol "$i(" *> idString <* symbol ")")++qualified names are parsed using "." as an operator so they become+FunCall nodes. But we don't want to parse any expression when we are+expecting a qualified name only, so create a specialized parser just+for that++> qName :: SParser ScalarExpr+> qName = do+> i <- identifier+> choice [do+> p <- pos+> symbol "."+> i1 <- idString+> return $ QIdentifier p i i1 --FunCall p "." [i,i1]+> ,return i]++> dqi :: SParser SQIdentifier+> dqi = do+> p <- pos+> i <- idString+> choice [do+> is <- suffix+> return $ SQIdentifier p (i:is)+> ,return $ SQIdentifier p [i]+> ]+> where+> suffix = do+> symbol "."+> i1 <- idString+> choice [do+> is <- suffix+> return (i1:is)+> ,return [i1]+> ]+++--------------------------------------------------------------------------------++Utility parsers+===============++tokeny things+-------------++keyword has to not be immediately followed by letters or numbers+(symbols and whitespace are ok) so we know that we aren't reading an+identifier which happens to start with a complete keyword++> keyword :: String -> SParser ()+> keyword k = mytoken (\tok ->+> case tok of+> IdStringTok i | lcase k == lcase i -> Just ()+> _ -> Nothing)+> where+> lcase = map toLower+>+> idString :: SParser String+> idString =+> choice [(\l -> "$(" ++ l ++ ")")+> <$> (symbol "$(" *> idString <* symbol ")")+> ,ids+> ]+> where+> ids = mytoken (\tok -> case tok of+> IdStringTok "not" -> Nothing+> IdStringTok i -> Just i+> _ -> Nothing)+>+> spliceD :: SParser String+> spliceD = (\x -> "$(" ++ x ++ ")") <$> splice+>+> splice :: SParser String+> splice = symbol "$(" *> idString <* symbol ")"+>+> symbol :: String -> SParser ()+> symbol c = mytoken (\tok -> case tok of+> SymbolTok s | c==s -> Just ()+> _ -> Nothing)+>+> {-integer :: SParser Integer+> integer = mytoken (\tok -> case tok of+> IntegerTok n -> Just n+> _ -> Nothing)-}+>+> liftPositionalArgTok :: SParser Integer+> liftPositionalArgTok =+> mytoken (\tok -> case tok of+> PositionalArgTok n -> Just n+> _ -> Nothing)++> positionalArg :: SParser ScalarExpr+> positionalArg = PositionalArg <$> pos <*> liftPositionalArgTok+>+> antiScalarExpr :: SParser ScalarExpr+> antiScalarExpr = AntiScalarExpr <$> splice+>+> placeholder :: SParser ScalarExpr+> placeholder = (Placeholder <$> pos) <* symbol "?"+>+> numString :: SParser String+> numString = mytoken (\tok -> case tok of+> NumberTok n -> Just n+> _ -> Nothing)++>+> liftStringTok :: SParser String+> liftStringTok = mytoken (\tok ->+> case tok of+> StringTok _ s -> Just s+> _ -> Nothing)++> stringLit :: SParser ScalarExpr+> stringLit = (StringLit <$> pos <*> liftStringTok)+> <|>+> (StringLit <$> pos <*> ssplice)+> where+> ssplice = (\s -> "$s(" ++ s ++ ")") <$>+> (symbol "$s(" *> idString <* symbol ")")+>+> stringN :: SParser String+> stringN = mytoken (\tok ->+> case tok of+> StringTok _ s -> Just s+> _ -> Nothing)++> extrStr :: ScalarExpr -> String+> extrStr (StringLit _ s) = s+> extrStr x =+> error $ "internal error: extrStr not supported for this type " ++ show x++== combinatory things++> parens :: SParser a+> -> SParser a+> parens = between (symbol "(") (symbol ")")+>+> squares :: SParser a+> -> SParser a+> squares = between (symbol "[") (symbol "]")+>+> tryOptionMaybe :: (Stream s m t) =>+> ParsecT s u m a -> ParsecT s u m (Maybe a)+> tryOptionMaybe p = try (optionMaybe p) <|> return Nothing+>+> commaSep2 :: SParser a+> -> SParser [a]+> commaSep2 p = sepBy2 p (symbol ",")+>+> sepBy2 :: (Stream s m t) =>+> ParsecT s u m a -> ParsecT s u m b -> ParsecT s u m [a]+> sepBy2 p sep = (p <* sep) <:> sepBy1 p sep+>+> commaSep :: SParser a+> -> SParser [a]+> commaSep p = sepBy p (symbol ",")+>+> commaSep1 :: SParser a+> -> SParser [a]+> commaSep1 p = sepBy1 p (symbol ",")++pass a list of pairs of strings and values+try each pair k,v in turn,+if keyword k matches then return v+doesn't really add a lot of value++> matchAKeyword :: [(String, a)] -> SParser a+> matchAKeyword [] = fail "no matches"+> matchAKeyword ((k,v):kvs) = v <$ keyword k <|> matchAKeyword kvs++parseOptionalSuffix++parse the start of something -> parseResultA,+then parse an optional suffix -> parseResultB+if this second parser succeeds, return fn2 parseResultA parseResultB+else return fn1 parseResultA++e.g.+parsing an identifier in a select list can be+fieldName+or+fieldName as alias+so we can pass+* IdentifierCtor+* identifier (returns aval)+* AliasedIdentifierCtor+* () - looks like a place holder, probably a crap idea+* parser for (as b) (returns bval)+as the args, which I like to ident like:+parseOptionalSuffix+ IdentifierCtor identifierParser+ AliasedIdentifierCtor () asAliasParser+and we get either+* IdentifierCtor identifierValue+or+* AliasedIdentifierCtor identifierValue aliasValue+as the result depending on whether the asAliasParser+succeeds or not.++probably this concept already exists under a better name in parsing+theory++> optionalSuffix :: (Stream s m t2) =>+> (t1 -> b)+> -> ParsecT s u m t1+> -> (t1 -> a -> b)+> -> ()+> -> ParsecT s u m a+> -> ParsecT s u m b+> optionalSuffix c1 p1 c2 _ p2 = do+> x <- p1+> option (c1 x) (c2 x <$> try p2)++threadOptionalSuffix++parse the start of something -> parseResultA,+then parse an optional suffix, passing parseResultA+ to this parser -> parseResultB+return parseResultB is it succeeds, else return parseResultA++sort of like a suffix operator parser where the suffixisable part+is parsed, then if the suffix is there it wraps the suffixisable+part in an enclosing tree node.++parser1 -> tree1+(parser2 tree1) -> maybe tree2+tree2 isnothing ? tree1 : tree2++> threadOptionalSuffix :: ParsecT [tok] st Identity a+> -> (a -> GenParser tok st a)+> -> ParsecT [tok] st Identity a+> threadOptionalSuffix p1 p2 = do+> x <- p1+> option x (try $ p2 x)++I'm pretty sure this is some standard monad operation but I don't know+what. It's a bit like the maybe monad but when you get nothing it+returns the previous result instead of nothing+- if you take the parsing specific stuff out you get:++p1 :: (Monad m) =>+ m b -> (b -> m (Maybe b)) -> m b+p1 = do+ x <- p1+ y <- p2 x+ case y of+ Nothing -> return x+ Just z -> return z+=====++like thread optional suffix, but we pass a list of suffixes in, not+much of a shorthand++> {- threadOptionalSuffixes :: ParsecT [tok] st Identity a+> -> [a -> GenParser tok st a]+> -> ParsecT [tok] st Identity a+> threadOptionalSuffixes p1 p2s = do+> x <- p1+> option x (try $ choice (map (\l -> l x) p2s))-}++couldn't work how to to perms so just did this hack instead+e.g.+a1,a2,b1,b2,a2,b3,b4 parses to ([a1,a2,a3],[b1,b2,b3,b4])++> multiPerm :: (Stream s m t) =>+> ParsecT s u m a1+> -> ParsecT s u m a+> -> ParsecT s u m sep+> -> ParsecT s u m ([a1], [a])+>+> multiPerm p1 p2 sep = do+> (r1, r2) <- unzip <$> sepBy1 parseAorB sep+> return (catMaybes r1, catMaybes r2)+> where+> parseAorB = choice [+> (\x -> (Just x,Nothing)) <$> p1+> ,(\y -> (Nothing, Just y)) <$> p2]++== position stuff++simple wrapper for parsec source positions, probably not really useful++> type MySourcePos = (String,Int,Int)+>+> toMySp :: SourcePos -> MySourcePos+> toMySp sp = (sourceName sp,sourceLine sp,sourceColumn sp)++parser combinator to return the current position as an ast annotation++> pos :: SParser Annotation+> pos =+> (\a -> emptyAnnotation {asrc=Just a}) <$> toMySp <$> getPosition++== lexer stuff++> mytoken :: (Tok -> Maybe a) -> SParser a+> mytoken test+> = token showToken posToken testToken+> where+> showToken (_,tok) = show tok+> posToken (posi,_) = posi+> testToken (_,tok) = test tok++--------------------------------------------------------------------------------++= fixup tree++this is where some generics code is used to transform the parse trees+to alter the nodes used where it's too difficult to do whilst+parsing. The only item at the moment that needs this treatment is the+any/some/all construct which looks like this:+expr operator [any|some|all] (expr)++This gets parsed as+funcall operator [expr1,funcall [any|some|all] [expr2,...]]+and we want to transform it to+liftoperator operator any|some|all [expr1, expr2,...]+not doing anything if the funcall name isn't any,some,all+any other checks are left to the type checking stage+(e.g. there can only be one expression in the expr2 part, and it must+be an array or subselect, etc)++> fixupTree :: Data a => a -> a+> fixupTree =+> transformBi $ \x ->+> case x of+> FunCall an op (expr1:FunCall _ nm expr2s:expr3s)+> | isOperatorName op+> && map toLower nm `elem` ["any", "some", "all"]+> -> LiftOperator an op flav (expr1:expr2s ++ expr3s)+> where flav = case map toLower nm of+> "any" -> LiftAny+> "some" -> LiftAny+> "all" -> LiftAll+> z -> error $ "internal error in parsing \+> \lift transform: " ++ z+> x1 -> x1++--------------------------------------------------------------------------------++Parse state not currently used. Use these placeholders to add some.++> type ParseState = ()+>+> startState :: ()+> startState = ()
+ src/Database/HsSqlPpp/Pretty.lhs view
@@ -0,0 +1,897 @@+++> {- | Functions to convert sql asts to valid SQL source code. Includes+> a function - 'printSqlAnn' - to output the annotations from a tree+> in comments in the outputted SQL source.+>+> Produces sort of readable code, but mainly just written to produce+> reparsable text. Could do with some work to make the outputted text+> layout better.+> -}+> {-# LANGUAGE PatternGuards #-}+> module Database.HsSqlPpp.Pretty (+> --convert a sql ast to text+> printStatements+> ,printStatementsAnn+> ,printQueryExpr+> --convert a single expression parse node to text+> ,printScalarExpr+> ,printQueryExprNice+> )+> where+>+> import Text.PrettyPrint+> import Data.Char+> --import Data.List+> import Data.Maybe+>+> import Database.HsSqlPpp.Ast+> import Database.HsSqlPpp.Annotation+> import Database.HsSqlPpp.Catalog+> import Database.HsSqlPpp.Utils.Utils++--------------------------------------------------------------------------------++Public functions++> -- | convert an ast back to valid SQL source, it's also almost human readable.+> printStatements :: StatementList -> String+> printStatements = printStatementsAnn (const "")+>+> -- | convert the ast back to valid source, and convert any annotations to+> -- text using the function provided and interpolate the output of+> -- this function(inside comments) with the SQL source.+> printStatementsAnn :: (Annotation -> String) -> StatementList -> String+> printStatementsAnn f ast = render $ vcat (map (convStatement False True f) ast) <> text "\n"+>++> printQueryExpr :: QueryExpr -> String+> printQueryExpr ast = render (convQueryExpr False True True ast <> statementEnd True)++> -- | Testing function, pretty print an expression+> printScalarExpr :: ScalarExpr -> String+> printScalarExpr = render . convExp False+++> -- | Try harder to make the output human readable, not necessary correct+> -- sql output at the moment+> printQueryExprNice :: QueryExpr -> String+> printQueryExprNice ast = render (convQueryExpr True True True ast <> statementEnd True)+++-------------------------------------------------------------------------------++Conversion routines - convert Sql asts into Docs++> -- Statements+>+> convStatement :: Bool -> Bool -> (Annotation -> String) -> Statement -> Doc+>+> -- selects+>+> convStatement nice se ca (QueryStatement ann s) =+> convPa ca ann <+>+> convQueryExpr nice True True s <> statementEnd se+>+> --dml+>+> convStatement nice se pa (Insert ann tb atts idata rt) =+> convPa pa ann <+>+> text "insert into" <+> convDqi tb+> <+> ifNotEmpty (parens . sepCsvMap text) atts+> $+$ convQueryExpr nice True True idata+> $+$ convReturning nice rt+> <> statementEnd se+>+> convStatement nice se ca (Update ann tb scs fr wh rt) =+> convPa ca ann <+>+> text "update" <+> convDqi tb <+> text "set"+> <+> sepCsvMap (convSet nice) scs+> <+> ifNotEmpty (\_ -> text "from" <+> sepCsvMap (convTref nice) fr) fr+> <+> convWhere nice wh+> $+$ convReturning nice rt <> statementEnd se+>+> convStatement nice se ca (Delete ann tbl us wh rt) =+> convPa ca ann <+>+> text "delete from" <+> convDqi tbl+> <+> ifNotEmpty (\_ -> text "using" <+> sepCsvMap (convTref nice) us) us+> <+> convWhere nice wh+> $+$ convReturning nice rt+> <> statementEnd se+>+> convStatement _nice se ca (Truncate ann names ri casc) =+> convPa ca ann <+>+> text "truncate"+> <+> sepCsvMap text names+> <+> text (case ri of+> RestartIdentity -> "restart identity"+> ContinueIdentity -> "continue identity")+> <+> convCasc casc+> <> statementEnd se+>+> -- ddl+>+> convStatement nice se ca (CreateTable ann tbl atts cns) =+> convPa ca ann <+>+> text "create table"+> <+> text tbl <+> lparen+> $+$ nest 2 (vcat (csv (map convAttDef atts ++ map (convCon nice) cns)))+> $+$ rparen <> statementEnd se+> where+> convAttDef (AttributeDef _ n t def cons) =+> text n <+> convTypeName t+> <+> maybeConv (\e -> text "default" <+> convExp nice e) def+> <+> hsep (map cCons cons)+> cCons (NullConstraint _ cn) =+> mname cn <+> text "null"+> cCons (NotNullConstraint _ cn) =+> mname cn <+> text "not null"+> cCons (RowCheckConstraint _ cn ew) =+> mname cn <+> text "check" <+> parens (convExp nice ew)+> cCons (RowUniqueConstraint _ cn) =+> mname cn <+> text "unique"+> cCons (RowPrimaryKeyConstraint _ cn) =+> mname cn <+> text "primary key"+> cCons (RowReferenceConstraint _ cn tb att ondel onupd) =+> mname cn <+> text "references" <+> text tb+> <+> maybeConv (parens . text) att+> <+> text "on delete" <+> convCasc ondel+> <+> text "on update" <+> convCasc onupd+>+> convStatement nice se ca (AlterTable ann name act) =+> convPa ca ann <+>+> text "alter table" <+> text name+> <+> hcatCsvMap convAct act <> statementEnd se+> where+> convAct (AlterColumnDefault _ nm def) =+> text "alter column" <+> text nm+> <+> text "set default" <+> convExp nice def+> convAct (AddConstraint _ con) =+> text "add " <+> convCon nice con+>+> convStatement _nice se ca (CreateSequence ann nm incr _ _ start cache) =+> convPa ca ann <+>+> text "create sequence" <+> text nm <+>+> text "increment" <+> text (show incr) <+>+> text "no minvalue" <+>+> text "no maxvalue" <+>+> text "start" <+> text (show start) <+>+> text "cache" <+> text (show cache) <> statementEnd se+>+> convStatement _nice se ca (AlterSequence ann nm o) =+> convPa ca ann <+>+> text "alter sequence" <+> text nm+> <+> text "owned by" <+> convDqi o <> statementEnd se+>+> convStatement nice se ca (CreateTableAs ann t sel) =+> convPa ca ann <+>+> text "create table"+> <+> text t <+> text "as"+> $+$ convQueryExpr nice True True sel+> <> statementEnd se+>+> convStatement nice se ca (CreateFunction ann name args retType rep lang body vol) =+> convPa ca ann <+>+> text ("create " ++ (case rep of+> Replace -> "or replace "+> _ -> "") ++ "function")+> <+> text name+> <+> parens (sepCsvMap convParamDef args)+> <+> text "returns" <+> convTypeName retType <+> text "as" <+> text "$$"+> $+$ convFnBody body+> $+$ text "$$" <+> text "language"+> <+> text (case lang of+> Sql -> "sql"+> Plpgsql -> "plpgsql")+> <+> text (case vol of+> Volatile -> "volatile"+> Stable -> "stable"+> Immutable -> "immutable")+> <> statementEnd se+> where+> convFnBody (SqlFnBody ann1 sts) =+> convPa ca ann1 <+>+> convNestedStatements nice ca sts+> convFnBody (PlpgsqlFnBody ann1 blk) =+> convPa ca ann1 <+>+> convStatement nice True ca blk+> convParamDef (ParamDef _ n t) = text n <+> convTypeName t+> convParamDef (ParamDefTp _ t) = convTypeName t+>+> convStatement nice se ca (Block ann lb decls sts) =+> convPa ca ann <+>+> convLabel lb <>+> ifNotEmpty (\l -> text "declare"+> $+$ nest 2 (vcat $ map convVarDef l)) decls+> $+$ text "begin"+> $+$ convNestedStatements nice ca sts+> $+$ text "end" <> statementEnd se+> where+> convVarDef (VarDef _ n t v) =+> text n <+> convTypeName t+> <+> maybeConv (\x -> text ":=" <+> convExp nice x) v <> semi+> convVarDef (VarAlias _ n n1) =+> text n <+> text "alias for" <+> text n1 <> semi+> convVarDef (ParamAlias _ n p) =+> text n <+> text "alias for $" <> text (show p) <> semi+>+>+> convStatement nice se ca (CreateView ann name cols sel) =+> convPa ca ann <+>+> text "create view" <+> text name+> <> case cols of+> Nothing -> empty+> Just cs -> parens (sepCsvMap text cs)+> <+> text "as"+> $+$ nest 2 (convQueryExpr nice True True sel) <> statementEnd se+>+> convStatement nice se ca (CreateDomain ann name tp n ex) =+> convPa ca ann <+>+> text "create domain" <+> text name <+> text "as"+> <+> convTypeName tp <+> cname <+> checkExp ex <> statementEnd se+> where+> checkExp = maybeConv (\e -> text "check" <+> parens (convExp nice e))+> cname = if n == ""+> then empty+> else text "constraint" <+> text n+>+> convStatement _nice se ca (DropFunction ann ifExists fns casc) =+> convPa ca ann <+>+> text "drop function"+> <+> convIfExists ifExists+> <+> sepCsvMap doFunction fns+> <+> convCasc casc+> <> statementEnd se+> where+> doFunction (name,types) =+> text name <> parens (sepCsvMap convTypeName types)+>+> convStatement _nice se ca (DropSomething ann dropType ifExists names casc) =+> convPa ca ann <+>+> text "drop"+> <+> text (case dropType of+> Table -> "table"+> View -> "view"+> Domain -> "domain"+> Type -> "type")+> <+> convIfExists ifExists+> <+> sepCsvMap text names+> <+> convCasc casc+> <> statementEnd se+>+> convStatement _nice se ca (CreateType ann name atts) =+> convPa ca ann <+>+> text "create type" <+> text name <+> text "as" <+> lparen+> $+$ nest 2 (vcat (csv+> (map (\(TypeAttDef _ n t) -> text n <+> convTypeName t) atts)))+> $+$ rparen <> statementEnd se+>+> convStatement _nice se ca (CreateLanguage ann name) =+> convPa ca ann <+>+> text "create language" <+> text name <> statementEnd se+>+> convStatement nice se ca (CreateTrigger ann name wh events tbl firing fnName fnArgs) =+> convPa ca ann <+>+> text "create trigger" <+> text name+> <+> text (case wh of+> TriggerBefore -> "before"+> TriggerAfter -> "after")+> <+> evs+> <+> text "on" <+> text tbl+> <+> text "for" <+> text (case firing of+> EachRow -> "row"+> EachStatement -> "statement")+> <+> text "execute procedure" <+> text fnName+> <> parens (sepCsvMap (convExp nice) fnArgs) <> statementEnd se+> where+> evs = sep $ punctuate (text " or ") $ map+> (text . (\e -> case e of+> TInsert -> "insert"+> TUpdate -> "update"+> TDelete -> "delete")) events+>+> -- plpgsql+>+> convStatement _nice se ca (NullStatement ann) =+> convPa ca ann <+> text "null" <> statementEnd se+> convStatement _nice se ca (ExitStatement ann lb) =+> convPa ca ann <+> text "exit"+> <+> maybe empty text lb <> statementEnd se+>++> convStatement _ _se _ca (Into _ann _str _into (QueryStatement _annq _s)) = error "no select into"++> convStatement nice se ca (Into ann str into st) =+> convPa ca ann <+>+> convStatement nice False ca st+> <+> text "into"+> <> (if str+> then empty <+> text "strict"+> else empty)+> <+> sepCsvMap (convExp nice) into+> <> statementEnd se+> --fixme, should be insert,update,delete,execute++> convStatement nice se ca (Assignment ann name val) =+> convPa ca ann <+>+> convExp nice name <+> text ":=" <+> convExp nice val <> statementEnd se+>+> convStatement nice se ca (Return ann ex) =+> convPa ca ann <+>+> text "return" <+> maybeConv (convExp nice) ex <> statementEnd se+>+> convStatement nice se ca (ReturnNext ann ex) =+> convPa ca ann <+>+> text "return" <+> text "next" <+> convExp nice ex <> statementEnd se+>+> convStatement nice se ca (ReturnQuery ann sel) =+> convPa ca ann <+>+> text "return" <+> text "query"+> <+> convQueryExpr nice True True sel <> statementEnd se+>+> convStatement nice se ca (Raise ann rt st exps) =+> convPa ca ann <+>+> text "raise"+> <+> case rt of+> RNotice -> text "notice"+> RException -> text "exception"+> RError -> text "error"+> <+> convExp nice (StringLit emptyAnnotation st)+> <> ifNotEmpty (\e -> comma <+> csvExp nice e) exps+> <> statementEnd se+>+> convStatement nice se ca (ForQueryStatement ann lb i sel stmts) =+> convPa ca ann <+>+> convLabel lb <>+> text "for" <+> convExp nice i <+> text "in"+> <+> convQueryExpr nice True True sel <+> text "loop"+> $+$ convNestedStatements nice ca stmts+> $+$ text "end loop" <> statementEnd se+>+> convStatement nice se ca (ForIntegerStatement ann lb var st en stmts) =+> convPa ca ann <+>+> convLabel lb <>+> text "for" <+> convExp nice var <+> text "in"+> <+> convExp nice st <+> text ".." <+> convExp nice en <+> text "loop"+> $+$ convNestedStatements nice ca stmts+> $+$ text "end loop" <> statementEnd se+>+> convStatement nice se ca (WhileStatement ann lb ex stmts) =+> convPa ca ann <+>+> convLabel lb <>+> text "while" <+> convExp nice ex <+> text "loop"+> $+$ convNestedStatements nice ca stmts+> $+$ text "end loop" <> statementEnd se+> convStatement nice se ca (LoopStatement ann lb stmts) =+> convPa ca ann <+>+> convLabel lb <>+> text "loop"+> $+$ convNestedStatements nice ca stmts+> $+$ text "end loop" <> statementEnd se+>+> convStatement _nice se ca (ContinueStatement ann lb) =+> convPa ca ann <+> text "continue"+> <+> maybe empty text lb <> statementEnd se+> convStatement nice se ca (Perform ann f@(FunCall _ _ _)) =+> convPa ca ann <+>+> text "perform" <+> convExp nice f <> statementEnd se+> convStatement _ _ _ (Perform _ x) =+> error $ "internal error: convStatement not supported for " ++ show x+>+> convStatement _nice se ca (Copy ann tb cols src) =+> convPa ca ann <+>+> text "copy" <+> text tb+> <+> ifNotEmpty (parens . sepCsvMap text) cols+> <+> text "from"+> <+> case src of+> CopyFilename s -> quotes $ text s <> statementEnd se+> Stdin -> text "stdin" <> text ";"+>+> convStatement _ _ ca (CopyData ann s) =+> convPa ca ann <+>+> text s <> text "\\." <> newline+>+> convStatement nice se ca (If ann conds els) =+> convPa ca ann <+>+> text "if" <+> convCond (head conds)+> $+$ vcat (map (\c -> text "elseif" <+> convCond c) $ tail conds)+> $+$ ifNotEmpty (\e -> text "else" $+$ convNestedStatements nice ca e) els+> $+$ text "end if" <> statementEnd se+> where+> convCond (ex, sts) = convExp nice ex <+> text "then"+> $+$ convNestedStatements nice ca sts+> convStatement nice se ca (Execute ann s) =+> convPa ca ann <+>+> text "execute" <+> convExp nice s <> statementEnd se+>+>+> convStatement nice se ca (CaseStatementSimple ann c conds els) =+> convPa ca ann <+>+> text "case" <+> convExp nice c+> $+$ nest 2 (+> vcat (map (uncurry convWhenSt) conds)+> $+$ convElseSt els+> ) $+$ text "end case" <> statementEnd se+> where+> convWhenSt ex sts = text "when" <+> sepCsvMap (convExp nice) ex+> <+> text "then" $+$ convNestedStatements nice ca sts+> convElseSt = ifNotEmpty (\s -> text "else"+> $+$ convNestedStatements nice ca s)+> convStatement nice se ca (CaseStatement ann conds els) =+> convPa ca ann <+>+> text "case"+> $+$ nest 2 (+> vcat (map (uncurry convWhenSt) conds)+> $+$ convElseSt els+> ) $+$ text "end case" <> statementEnd se+> where+> convWhenSt ex sts = text "when" <+> sepCsvMap (convExp nice) ex+> <+> text "then" $+$ convNestedStatements nice ca sts+> convElseSt = ifNotEmpty (\s -> text "else"+> $+$ convNestedStatements nice ca s)++>+> -- misc+>+> convStatement _nice se _ (Set _ n vs) =+> text "set" <+> text n <+> text "="+> <+> sepCsvMap (text . dv) vs <> statementEnd se+> where+> dv (SetStr _ s) = "'" ++ s ++ "'"+> dv (SetId _ i) = i+> dv (SetNum _ nm) = show nm+>+> convStatement _nice se _ (Notify _ n) =+> text "notify" <+> text n <> statementEnd se+>+> statementEnd :: Bool -> Doc+> statementEnd b = if b+> then semi <> newline+> else empty++-------------------------------------------------------------------------------++Statement components++> -- selects+>+> convQueryExpr :: Bool -> Bool -> Bool -> QueryExpr -> Doc+> convQueryExpr nice writeSelect _ (Select _ dis l tb wh grp hav+> order lim off) =+> (text (if writeSelect then "select" else "")+> <+> (case dis of+> Dupes -> empty+> Distinct -> text "distinct"))+> $+$ nest 2 (vcat $ catMaybes+> [Just $ nest 2 $ convSelList nice l+> ,Just $ if null tb+> then empty+> else text "from" $+$ nest 2 (sepCsvMap (convTref nice) tb)+> ,Just $ convWhere nice wh+> ,case grp of+> [] -> Nothing+> g -> Just $ text "group by" $+$ nest 2 (sepCsvMap (convExp nice) g)+> ,flip fmap hav $ \h -> text "having" $+$ nest 2 (convExp nice h)+> ,case order of+> [] -> Nothing+> o -> Just $ text "order by"+> $+$ nest 2 (sepCsvMap (\(oe,od) -> convExp nice oe+> <+> convDir od) o)+> ,flip fmap lim $ \lm -> text "limit" <+> convExp nice lm+> ,flip fmap off $ \offs -> text "offset" <+> convExp nice offs+> ])+>+> convQueryExpr nice writeSelect topLev (CombineQueryExpr _ tp s1 s2) =+> let p = convQueryExpr nice writeSelect False s1+> $+$ (case tp of+> Except -> text "except"+> Union -> text "union"+> UnionAll -> text "union" <+> text "all"+> Intersect -> text "intersect")+> $+$ convQueryExpr nice True False s2+> in if topLev then p else parens p+> convQueryExpr nice _ _ (Values _ expss) =+> text "values" $$ nest 2 (vcat $ csv $ map (parens . csvExp nice) expss)+> convQueryExpr nice _ _ (WithQueryExpr _ wqs ex) =+> text "with" $$ nest 2 (vcat $ csv $ map pwq wqs)+> $+$ convQueryExpr nice True False ex+> where+> pwq (WithQuery _ nm cs ex1) =+> text nm <> case cs of+> Nothing -> empty+> Just cs' -> parens $ sepCsvMap text cs'+> <+> text "as"+> <+> parens (convQueryExpr nice True False ex1)+>+> convTref :: Bool -> TableRef -> Doc+> convTref nice (Tref _ f@(SQIdentifier _ t) (TableAlias _ ta))+> | nice, last t == ta = convDqi f+> -- slightly bad hack:+> convTref nice (Tref _ f@(SQIdentifier _ t) (FullAlias _ ta _))+> | nice, last t == ta = convDqi f++> convTref nice (Tref _ f a) = convDqi f <+> convTrefAlias nice a+> convTref nice (JoinTref _ t1 nat jt t2 ex a) =+> parens (convTref nice t1+> $+$ (case nat of+> Natural -> text "natural"+> Unnatural -> empty)+> <+> text (case jt of+> Inner -> "inner"+> Cross -> "cross"+> LeftOuter -> "left outer"+> RightOuter -> "right outer"+> FullOuter -> "full outer")+> <+> text "join"+> <+> convTref nice t2+> <+> maybeConv (nest 2 . convJoinScalarExpr) ex+> <+> convTrefAlias nice a)+> where+> convJoinScalarExpr (JoinOn _ e) = text "on" <+> convExp nice e+> convJoinScalarExpr (JoinUsing _ ids) =+> text "using" <+> parens (sepCsvMap text ids)+>+> convTref nice (SubTref _ sub alias) =+> parens (convQueryExpr nice True True sub)+> <+> text "as" <+> convTrefAlias nice alias+> convTref nice (FunTref _ f@(FunCall _ _ _) a) = convExp nice f <+> convTrefAlias nice a+> convTref _nice (FunTref _ x _) =+> error $ "internal error: node not supported in function tref: "+> ++ show x+>+> convTrefAlias :: Bool -> TableAlias -> Doc+> convTrefAlias _ (NoAlias _) = empty+> convTrefAlias _ (TableAlias _ t) = text t+> -- hack this out for now. When the type checking is fixed, can try+> -- to eliminate unneeded aliases?+> convTrefAlias nice (FullAlias _ t s) =+> text t <> (if nice+> then empty+> else parens (sepCsvMap text s))++> convDir :: Direction -> Doc+> convDir d = text $ case d of+> Asc -> "asc"+> Desc -> "desc"+>+> convWhere :: Bool -> Maybe ScalarExpr -> Doc+> convWhere nice (Just ex) = text "where" $+$ nest 2 (convExp nice ex)+> convWhere _ Nothing = empty+>+> convSelList :: Bool -> SelectList -> Doc+> convSelList nice (SelectList _ ex) =+> sepCsvMap convSelItem ex+> -- <+> ifNotEmpty (\i -> text "into" <+> hcatCsvMap convExp i) into+> where+> -- try to avoid printing alias if not necessary+> convSelItem (SelectItem _ ex1@(QIdentifier _ _ i) nm) | nice, i == nm = convExpSl nice ex1+> convSelItem (SelectItem _ ex1@(Identifier _ i) nm) | nice, i == nm = convExpSl nice ex1+> convSelItem (SelectItem _ ex1 nm) = convExpSl nice ex1 <+> text "as" <+> text nm+> convSelItem (SelExp _ e) = convExpSl nice e+>+> convCasc :: Cascade -> Doc+> convCasc casc = text $ case casc of+> Cascade -> "cascade"+> Restrict -> "restrict"+>+> convDqi :: SQIdentifier -> Doc+> convDqi (SQIdentifier _ is) = hcat $ punctuate (text ".") $ map text is++> -- ddl+>+> convCon :: Bool -> Constraint -> Doc+> convCon _nice (UniqueConstraint _ n c) =+> mname n <+> text "unique"+> <+> parens (sepCsvMap text c)+> convCon _nice (PrimaryKeyConstraint _ n p) =+> mname n <+>+> text "primary key"+> <+> parens (sepCsvMap text p)+> convCon nice (CheckConstraint _ n c) =+> mname n <+> text "check" <+> parens (convExp nice c)+> convCon _nice (ReferenceConstraint _ n at tb rat ondel onupd) =+> mname n <+>+> text "foreign key" <+> parens (sepCsvMap text at)+> <+> text "references" <+> text tb+> <+> ifNotEmpty (parens . sepCsvMap text) rat+> <+> text "on update" <+> convCasc onupd+> <+> text "on delete" <+> convCasc ondel+>+> mname :: String -> Doc+> mname n = if n == ""+> then empty+> else text "constraint" <+> text n+>+> convReturning :: Bool -> Maybe SelectList -> Doc+> convReturning nice l = case l of+> Nothing -> empty+> Just ls -> nest 2 (text "returning" <+> convSelList nice ls)+>+> convIfExists :: IfExists -> Doc+> convIfExists i = case i of+> Require -> empty+> IfExists -> text "if exists"+>+> -- plpgsql+>+> convNestedStatements :: Bool -> (Annotation -> String) -> StatementList -> Doc+> convNestedStatements nice pa = nest 2 . vcat . map (convStatement nice True pa)+>+> convTypeName :: TypeName -> Doc+> convTypeName (SimpleTypeName _ s) = text s+> convTypeName (PrecTypeName _ s i) = text s <> parens(integer i)+> convTypeName (Prec2TypeName _ s i i1) = text s <> parens (sepCsv [integer i, integer i1])+> convTypeName (ArrayTypeName _ t) = convTypeName t <> text "[]"+> convTypeName (SetOfTypeName _ t) = text "setof" <+> convTypeName t+>+> -- expressions+>+> convExp :: Bool -> ScalarExpr -> Doc+> convExp _ (Identifier _ i) =+> if quotesNeeded+> then text $ "\"" ++ i ++ "\""+> else text i+> where+> --needs some work - quotes needed if contains invalid unquoted+> --chars, or maybe if matches keyword or similar+> quotesNeeded = case i of+> x:_ | not (isLetter x || x `elem` "_*") -> True+> _ | all okChar i -> False+> | otherwise -> True+> where+> okChar x =isAlphaNum x || x `elem` "*_."+> convExp nice (QIdentifier a i1@(Identifier _ _) i) = convExp nice i1 <> text "." <> convExp nice (Identifier a i)+> convExp nice (QIdentifier a e i) = parens (convExp nice e) <> text "." <> convExp nice (Identifier a i)++> --convExp (PIdentifier _ i) = parens $ convExp i+> convExp _ (NumberLit _ n) = text n+> convExp _ (StringLit _ s) = -- needs some thought about using $$?+> text "'" <> text replaceQuotes <> text "'"+> where+> replaceQuotes = replace "'" "''" s {-if tag == "'"+> then replace "'" "''" s+> else s-}+>+> convExp nice (FunCall _ n es) =+> --check for special operators+> case n of+> "!and" | nice, [a,b] <- es -> doLeftAnds a b+> "!arrayctor" -> text "array" <> brackets (csvExp nice es)+> "!between" -> convExp nice (head es) <+> text "between"+> <+> parens (convExp nice (es !! 1))+> <+> text "and"+> <+> parens (convExp nice (es !! 2))+> "!substring" -> text "substring"+> <> parens (convExp nice (head es)+> <+> text "from" <+> convExp nice (es !! 1)+> <+> text "for" <+> convExp nice (es !! 2))+> "!arraysub" -> case es of+> (Identifier _ i : es1) -> text i+> <> brackets (csvExp nice es1)+> _ -> parens (convExp nice (head es))+> <> brackets (csvExp nice (tail es))+> "!rowctor" -> text "row" <> parens (sepCsvMap (convExp nice) es)+> "." -- special case to avoid ws around '.'. Don't know if this is important+> -- or just cosmetic+> | [a,b] <- es -> convExp nice a <> text "." <> convExp nice b+> _ | isOperatorName n ->+> case forceRight (getOperatorType defaultTemplate1Catalog n) of+> BinaryOp ->+> let e1d = convExp nice (head es)+> opd = text $ filterKeyword n+> e2d = convExp nice (es !! 1)+> in parens (if n `elem` ["!and", "!or"]+> then vcat [e1d, opd <+> e2d]+> else e1d <+> opd <+> e2d)+> PrefixOp -> parens (text (if n == "u-"+> then "-"+> else filterKeyword n)+> <+> parens (convExp nice (head es)))+> PostfixOp -> parens (convExp nice (head es)+> <+> text (filterKeyword n))+> | otherwise -> text n <> parens (csvExp nice es)+> where+> filterKeyword t = case t of+> "!and" -> "and"+> "!or" -> "or"+> "!not" -> "not"+> "!isnull" -> "is null"+> "!isnotnull" -> "is not null"+> "!like" -> "like"+> "!notlike" -> "not like"+> x -> x+> -- try to write a series of ands in a vertical line with slightly less parens+> doLeftAnds a b = let as = and' a+> in vcat ((convExp nice (head as)+> : map (\x -> text "and" <+> convExp nice x) (tail as))+> ++ [text "and" <+> convExp nice b])+> and' a = case a of+> FunCall _ "!and" [x,y] -> and' x ++ and' y+> _ -> [a]+>+> convExp _ (BooleanLit _ b) = bool b+> convExp nice (InPredicate _ att t lst) =+> convExp nice att <+> (if not t then text "not" else empty) <+> text "in"+> <+> parens (case lst of+> InList _ expr -> csvExp nice expr+> InQueryExpr _ sel -> convQueryExpr nice True True sel)+> convExp nice (LiftOperator _ op flav args) =+> convExp nice (head args) <+> text op+> <+> text (case flav of+> LiftAny -> "any"+> LiftAll -> "all")+> <+> parens (convExp nice $ head $ tail args)+> convExp nice (ScalarSubQuery _ s) = parens (convQueryExpr nice True True s)+> convExp _ (NullLit _) = text "null"+> convExp nice (WindowFn _ fn part order asc frm) =+> convExp nice fn <+> text "over"+> <+> parens (if hp || ho+> then (if hp+> then text "partition by" <+> csvExp nice part+> else empty)+> <+> (if ho+> then text "order by" <+> csvExp nice order+> <+> convDir asc+> else empty)+> <+> convFrm+> else empty)+> where+> hp = not (null part)+> ho = not (null order)+> convFrm = case frm of+> FrameUnboundedPreceding -> text "range unbounded preceding"+> FrameUnboundedFull -> text "range between unbounded \+> \preceding and unbounded following"+> FrameRowsUnboundedPreceding -> text "rows unbounded preceding"+>+> convExp nice (Case _ whens els) =+> text "case"+> $+$ nest 2 (vcat (map convWhen whens)+> $+$ maybeConv (\e -> text "else" <+> convExp nice e) els)+> $+$ text "end"+> where+> convWhen (ex1, ex2) =+> text "when" <+> sepCsvMap (convExp nice) ex1+> <+> text "then" <+> convExp nice ex2+>+> convExp nice (CaseSimple _ val whens els) =+> text "case" <+> convExp nice val+> $+$ nest 2 (vcat (map convWhen whens)+> $+$ maybeConv (\e -> text "else" <+> convExp nice e) els)+> $+$ text "end"+> where+> convWhen (ex1, ex2) =+> text "when" <+> sepCsvMap (convExp nice) ex1+> <+> text "then" <+> convExp nice ex2+>+> convExp _ (PositionalArg _ a) = text "$" <> integer a+> convExp _ (Placeholder _) = text "?"+> convExp nice (Exists _ s) =+> text "exists" <+> parens (convQueryExpr nice True True s)+> convExp nice (Cast _ ex t) = text "cast" <> parens (convExp nice ex+> <+> text "as"+> <+> convTypeName t)+> convExp nice (TypedStringLit a t s) =+> convTypeName t <+> convExp nice (StringLit a s)+> convExp nice (Interval a v f p) =+> text "interval" <+> convExp nice (StringLit a v)+> <+> convIntervalField <+> convPrec+> where+> convIntervalField =+> text $ case f of+> IntervalYear -> "year"+> IntervalMonth -> "month"+> IntervalDay -> "day"+> IntervalHour -> "hour"+> IntervalMinute -> "minute"+> IntervalSecond -> "second"+> IntervalYearToMonth -> "year to month"+> IntervalDayToHour -> "day to hour"+> IntervalDayToMinute -> "day to minute"+> IntervalDayToSecond -> "day to second"+> IntervalHourToMinute -> "hour to minute"+> IntervalHourToSecond -> "hour to second"+> IntervalMinuteToSecond -> "minute to second"+> convPrec = case p of+> Nothing -> empty+> Just i -> parens (int i)+> convExp nice (Extract _ f e) =+> text "extract"+> <> parens (text convField <+> text "from" <+> convExp nice e)+> where+> convField =+> case f of+> ExtractCentury -> "century"+> ExtractDay -> "day"+> ExtractDecade -> "decade"+> ExtractDow -> "dow"+> ExtractDoy -> "doy"+> ExtractEpoch -> "epoch"+> ExtractHour -> "hour"+> ExtractIsodow -> "isodow"+> ExtractIsoyear -> "isoyear"+> ExtractMicroseconds -> "microseconds"+> ExtractMillennium -> "millennium"+> ExtractMilliseconds -> "milliseconds"+> ExtractMinute -> "minute"+> ExtractMonth -> "month"+> ExtractQuarter -> "quarter"+> ExtractSecond -> "second"+> ExtractTimezone -> "timezone"+> ExtractTimezoneHour -> "timezone_hour"+> ExtractTimezoneMinute -> "timezone_minute"+> ExtractWeek -> "week"+> ExtractYear -> "year"+++> convExpSl :: Bool -> ScalarExpr -> Doc+> convExpSl nice (FunCall _ "." es) | [a@(Identifier _ _), b] <- es =+> parens (convExpSl nice a) <> text "." <> convExpSl nice b+> convExpSl nice x = convExp nice x++>+> convSet :: Bool -> ScalarExpr -> Doc+> convSet nice (FunCall _ "=" [Identifier _ a, e]) =+> text a <+> text "=" <+> convExp nice e+> convSet nice (FunCall _ "=" [a, b]) | (FunCall _ "!rowctor" is1) <- a+> ,(FunCall _ "!rowctor" is2) <- b =+> rsNoRow is1 <+> text "=" <+> rsNoRow is2+> where+> rsNoRow is = parens (sepCsvMap (convExp nice) is)+> convSet _ a = error $ "bad expression in set in update: " ++ show a+>+> --utils+>+> -- convert a list of expressions to horizontal csv+>+> csvExp :: Bool -> [ScalarExpr] -> Doc+> csvExp nice = hcatCsvMap (convExp nice)+>+> maybeConv :: (t -> Doc) -> Maybe t -> Doc+> maybeConv f c =+> case c of+> Nothing -> empty+> Just a -> f a+>+> csv :: [Doc] -> [Doc]+> csv = punctuate comma+>+> hcatCsv :: [Doc] -> Doc+> hcatCsv = hcat . csv++> sepCsv :: [Doc] -> Doc+> sepCsv = sep . csv+>+> ifNotEmpty :: ([a] -> Doc) -> [a] -> Doc+> ifNotEmpty c l = if null l then empty else c l+>+> hcatCsvMap :: (a -> Doc) -> [a] -> Doc+> hcatCsvMap ex = hcatCsv . map ex++> sepCsvMap :: (a -> Doc) -> [a] -> Doc+> sepCsvMap ex = sepCsv . map ex++++> --vcatCsvMap :: (a -> Doc) -> [a] -> Doc+> --vcatCsvMap ex = vcat . csv . map ex++>+> bool :: Bool -> Doc+> bool b = if b then text "true" else text "false"+>+> newline :: Doc+> newline = text "\n"+>+> convPa :: (Annotation -> String) -> Annotation -> Doc+> convPa ca a = let s = ca a+> in if s == ""+> then empty+> else text "/*\n" <+> text s+> <+> text "*/\n"++> convLabel :: Maybe String -> Doc+> convLabel =+> maybe empty (\l -> text "<<"+> <+> text l+> <+> text ">>" <> text "\n")
+ src/Database/HsSqlPpp/TypeChecker.lhs view
@@ -0,0 +1,45 @@++This is the public module for the type checking functionality.++> {- | Contains the data types and functions for annotating+> an ast and working with annotated trees, including the+> representations of SQL data types.+>+> Annotations:+>+> * are attached to most of the ast node data types, but not quite all of them;+>+> * types annotations are attached to most nodes during type checking;+>+> * type errors are attached to the lowest down node that the type+> error is detected at;+>+> * nodes who fail the type check or whose type depends on a node with+> a type error are given the type 'TypeCheckFailed';+>+> * each statement has an additional 'StatementInfo' annotation attached to it;+>+> * the parser fills in the source position annotation in every+> annotatable ast node.+>+> -}+> module Database.HsSqlPpp.TypeChecker+> (+> -- * typechecking/ annotation functions+> typeCheckStatements+> ,typeCheckParameterizedStatement+> ,typeCheckQueryExpr+> ,typeCheckScalarExpr+> ,fixUpIdentifiers+> ,fixUpIdentifiersQE+> ,fixUpIdentifiersSE+> ,addExplicitCasts+> ,canonicalizeTypeNames+> -- * Annotated tree utils+> ,getStatementAnnotations+> ) where+>+> import Database.HsSqlPpp.AstInternals.AstInternal+> import Database.HsSqlPpp.AstInternals.TypeChecking.Utils+> --import Database.HsSqlPpp.AstInternals.AstAnnotation+> import Database.HsSqlPpp.AstInternals.AnnotationUtils
+ src/Database/HsSqlPpp/Types.lhs view
@@ -0,0 +1,25 @@++This is the public module to the SQL data types, mainly from TypeType.++> {- | Contains the SQL data types, type errors, and a few supporting+> functions.+> -}+>+> module Database.HsSqlPpp.Types+> (+> -- * SQL types+> Type (..)+> ,PseudoType (..)+> -- * type aliases+> -- | aliases for all the sql types with multiple names+> -- these give you the canonical names+> ,typeSmallInt,typeBigInt,typeInt,typeNumeric,typeFloat4+> ,typeFloat8,typeVarChar,typeChar,typeBool,typeDate+> ,typeInterval+> ,canonicalizeTypeName+> ,canonicalizeTypes+> -- * Type errors+> ,TypeError (..)+> ) where+>+> import Database.HsSqlPpp.AstInternals.TypeType
+ src/Database/HsSqlPpp/Utils/Utils.lhs view
@@ -0,0 +1,166 @@++This file contains some generic utility stuff++> {-# LANGUAGE FlexibleContexts #-}+>+> module Database.HsSqlPpp.Utils.Utils where+>+> import Data.List+> import Data.Either+> import Data.Char+> import Control.Arrow+> import Control.Monad.Error+> import Control.Applicative++used to mix regular function composition and >>= in monads, so the+order of application stays the same instead of going backwards when+(.) is used++> infixl 9 |>+> (|>) :: (a -> b) -> (b -> c) -> a -> c+> (|>) = flip (.)+>+> errorWhen :: (Error a) => Bool -> a -> Either a ()+> errorWhen cond = when cond . Left+>+> returnWhen :: (Monad m) => Bool -> a -> m a -> m a+> returnWhen c t t1 = if c then return t else t1+>+> liftME :: a -> Maybe b -> Either a b+> liftME d m = case m of+> Nothing -> Left d+> Just b -> Right b+>+> both :: (a->b) -> (a,a) -> (b,b)+> both fn = fn *** fn+>+> (<:>) :: (Applicative f) =>+> f a -> f [a] -> f [a]+> (<:>) a b = (:) <$> a <*> b+>++> eitherToMaybe :: Either a b -> Maybe b+> eitherToMaybe (Left _) = Nothing+> eitherToMaybe (Right b) = Just b+>+> fromRight :: b -> Either a b -> b+> fromRight b (Left _) = b+> fromRight _ (Right r) = r+>+> fromLeft :: a -> Either a b -> a+> fromLeft _ (Left l) = l+> fromLeft a (Right _) = a+>+> mapEither :: (a->c) -> (b->d) -> Either a b -> Either c d+> mapEither l _ (Left a) = Left $ l a+> mapEither _ r (Right b) = Right $ r b+>+> mapRight :: (b -> c) -> Either a b -> Either a c+> mapRight = mapEither id+>+> mapLeft :: (a -> c) -> Either a b -> Either c b+> mapLeft l = mapEither l id+>+> isRight :: Either a b -> Bool+> isRight (Right _) = True+> isRight (Left _) = False+>+> leftToEmpty :: (r -> [a]) -> Either l r -> [a]+> leftToEmpty = either (const [])+>+> replace :: (Eq a) => [a] -> [a] -> [a] -> [a]+> replace _ _ [] = []+> replace old new xs@(y:ys) =+> case stripPrefix old xs of+> Nothing -> y : replace old new ys+> Just ys' -> new ++ replace old new ys'+>+> split :: Char -> String -> [String]+> split _ "" = []+> split c s = let (l, s') = break (== c) s+> in l : case s' of+> [] -> []+> (_:s'') -> split c s''+>+> liftThrows :: (MonadError t m) => Either t a -> m a+> liftThrows (Left err) = throwError err+> liftThrows (Right val) = return val+>+> -- run in errort monad, throw error as io error+>+> wrapET :: (Show e, Monad m) => ErrorT e m a -> m a+> wrapET c = runErrorT c >>= \x ->+> case x of+> Left er -> error $ show er+> Right l -> return l+>+> wrapETs :: (Monad m) => ErrorT String m a -> m a+> wrapETs c = runErrorT c >>= \x ->+> case x of+> Left er -> error er+> Right l -> return l+>+> -- error utility - convert either to ErrorT String+>+> tsl :: (MonadError String m, Show t) => Either t a -> m a+> tsl x = case x of+> Left s -> throwError $ show s+> Right b -> return b+>+> listEither :: [Either a b] -> Either [a] [b]+> listEither es = let (l,r) = partitionEithers es+> in if null l+> then Right r+> else Left l+>+> forceRight :: Show e => Either e a -> a+> forceRight (Left x) = error $ show x+> forceRight (Right x) = x+>+>+> npartition :: Eq b => (a -> b) -> [a] -> [(b,[a])]+> npartition keyf l =+> np [] l+> where+> np acc =+> foldl (\ acc p -> insertWith (++) (keyf p) [p] acc) acc+>+> insertWith :: Eq k => (a -> a -> a) -> k -> a -> [(k,a)] -> [(k,a)]+> insertWith ac k v m =+> case lookup k m of+> Nothing -> m ++ [(k,v)]+> Just v' -> let nv = ac v' v+> in map (\p@(k1,_) -> if k1 == k+> then (k1,nv)+> else p) m+++This should preserve order, so in the result, the keys (k in+[(k,[a],[b])]) are ordered by their first appearance in as, then bs,+and the values are ordered the matches in the same order as they+appear in the two lists ([a] and [b] in [(k,[a],[b])])++> joinLists :: Eq k => (a -> k) -> (b -> k)+> -> [a] -> [b] -> [(k,[a],[b])]+> joinLists ka kb as bs =+> let -- arrange the two lists by key+> kasps = npartition ka as+> kbsps = npartition kb bs+> -- get the list of keys+> ks = nub $ map fst kasps ++ map fst kbsps+> -- put together the two lists by key+> in flip map ks $ \k ->+> (k, getem k kasps, getem k kbsps)+> where+> getem :: Eq k => k -> [(k,[a])] -> [a]+> getem k = concatMap snd . filter ((==k) . fst)++> trim :: String -> String+> trim = f . f+> where f = reverse . dropWhile isSpace++> concatLefts :: [Either [a] b] -> Either [a] ()+> concatLefts s = let l = concat $ lefts s+> in if null l+> then Right ()+> else Left l