hssqlppp 0.0.4 → 0.0.5
raw patch · 20 files changed
+5873/−29 lines, 20 filesnew-component:exe:HsSqlPppTests
Files
- Database/HsSqlPpp/Ast.ag +676/−0
- Database/HsSqlPpp/AstCheckTests.lhs +654/−0
- Database/HsSqlPpp/AstUtils.lhs +396/−0
- Database/HsSqlPpp/DBAccess.lhs +57/−0
- Database/HsSqlPpp/DatabaseLoader.lhs +202/−0
- Database/HsSqlPpp/DatabaseLoaderTests.lhs +34/−0
- Database/HsSqlPpp/DefaultScope.hs +5/−0
- Database/HsSqlPpp/DefaultScopeEmpty.hs +47/−0
- Database/HsSqlPpp/Lexer.lhs +290/−0
- Database/HsSqlPpp/ParseErrors.lhs +49/−0
- Database/HsSqlPpp/ParserTests.lhs +1121/−0
- Database/HsSqlPpp/Scope.lhs +135/−0
- Database/HsSqlPpp/ScopeReader.lhs +230/−0
- Database/HsSqlPpp/TypeChecking.ag +1091/−0
- Database/HsSqlPpp/TypeCheckingH.lhs +158/−0
- Database/HsSqlPpp/TypeConversion.lhs +513/−0
- Database/HsSqlPpp/TypeType.lhs +149/−0
- HsSqlPppTests.lhs +20/−0
- Tests.lhs +0/−20
- hssqlppp.cabal +46/−9
+ Database/HsSqlPpp/Ast.ag view
@@ -0,0 +1,676 @@+{-+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 pretty printer.++= compiling++use++uuagc -dcfws Ast.ag++to generate a new Ast.hs from this file++(install uuagc with+cabal install uuagc+)++-}++MODULE {Database.HsSqlPpp.Ast}+{+ -- exports+ MySourcePos++ --ast nodes+ ,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 (..)+ ,OperatorType (..)+ ,getOperatorType+ ,InList (..)+ ,StatementList+ --checking stuff+ ,Message (..)+ ,MessageStuff (..)+ --types+ ,Type (..)+ ,PseudoType (..)+ ,TypeErrorInfo (..)+ ,StatementInfo (..)+ --scope+ ,Scope(..)+ ,defaultScope+ ,emptyScope+ --fns+ ,checkAst+ ,getExpressionType+ ,getStatementsType+ ,getStatementsTypeScope+ ,getStatementsInfo+ ,getStatementsInfoScope+ ,resetSps+ ,resetSp+ ,resetSp'+ ,resetSps'+ ,nsp+ --forward some defs+ ,typeSmallInt+ ,typeBigInt+ ,typeInt+ ,typeNumeric+ ,typeFloat4+ ,typeFloat8+ ,typeVarChar+ ,typeChar+ ,typeBool++}+{+import Data.Maybe+import Data.List+import Debug.Trace+import Control.Monad.Error+import Control.Arrow++import Database.HsSqlPpp.TypeType+import Database.HsSqlPpp.AstUtils+import Database.HsSqlPpp.TypeConversion+import Database.HsSqlPpp.TypeCheckingH+import Database.HsSqlPpp.Scope+import Database.HsSqlPpp.DefaultScope+}++{-+================================================================================++SQL top level statements++everything is chucked in here: dml, ddl, plpgsql statements++-}++DATA Statement++--queries++ | SelectStatement ex:SelectExpression++-- dml++ --table targetcolumns insertdata(values or select statement) returning+ | Insert table : String+ targetCols : StringList+ insData : SelectExpression+ returning : (Maybe SelectList)+ --tablename setitems where returning+ | Update table : String+ assigns : SetClauseList+ whr : Where+ returning : (Maybe SelectList)+ --tablename, where, returning+ | Delete table : String+ whr : Where+ returning : (Maybe SelectList)+ --tablename column names, from+ | Copy table : String+ targetCols : StringList+ source : CopySource+ --represents inline data for copy statement+ | CopyData insData : String+ | Truncate tables: StringList+ restartIdentity : RestartIdentity+ cascade : Cascade++-- ddl++ | CreateTable name : String+ atts : AttributeDefList+ cons : ConstraintList+ | CreateTableAs name : String+ expr : SelectExpression+ | CreateView name : String+ expr : SelectExpression+ | CreateType name : String+ atts : TypeAttributeDefList+ -- language name args rettype bodyquoteused body vol+ | CreateFunction lang : Language+ name : String+ params : ParamDefList+ rettype : TypeName+ bodyQuote : String+ body : FnBody+ vol : Volatility+ -- name type checkexpression+ | CreateDomain name : String+ typ : TypeName+ check : (Maybe Expression)+ -- ifexists (name,argtypes)* cascadeorrestrict+ | DropFunction ifE : IfExists+ sigs : StringStringListPairList+ cascade : Cascade+ -- ifexists names cascadeorrestrict+ | DropSomething dropType : DropType+ ifE : IfExists+ names : StringList+ cascade : Cascade+ | Assignment target : String+ value : Expression+ | Return value : (Maybe Expression)+ | ReturnNext expr : Expression+ | ReturnQuery sel : SelectExpression+ | Raise level : RaiseType+ message : String+ args : ExpressionList+ | NullStatement+ | Perform expr : Expression+ | Execute expr : Expression+ | ExecuteInto expr : Expression+ targets : StringList+ | ForSelectStatement var : String+ sel : SelectExpression+ sts : StatementList+ | ForIntegerStatement var : String+ from : Expression+ to : Expression+ sts : StatementList+ | WhileStatement expr : Expression+ sts : StatementList+ | ContinueStatement+ --variable, list of when parts, else part+ | CaseStatement val : Expression+ cases : ExpressionListStatementListPairList+ els : StatementList+ --list is+ --first if (condition, statements):elseifs(condition, statements)+ --last bit is else statements+ | If cases : ExpressionStatementListPairList+ els : StatementList++-- =============================================================================++--Statement components++-- maybe this should be called relation valued expression?+DATA SelectExpression+ | Select selDistinct : Distinct+ selSelectList : SelectList+ selTref : MTableRef+ selWhere : Where+ selGroupBy : ExpressionList+ selHaving : (Maybe Expression)+ selOrderBy : ExpressionList+ selDir : Direction+ selLimit : (Maybe Expression)+ selOffset : (Maybe Expression)+ | CombineSelect ctype : CombineType+ sel1 : SelectExpression+ sel2 : SelectExpression+ | Values vll:ExpressionListList++TYPE MTableRef = MAYBE TableRef+TYPE Where = MAYBE Expression++DATA FnBody | SqlFnBody sts : StatementList+ | PlpgsqlFnBody VarDefList sts : StatementList++DATA SetClause | SetClause att:String val:Expression+ | RowSetClause atts:StringList vals:ExpressionList++DATA TableRef | Tref tbl:String+ | TrefAlias tbl : String+ alias : String+ | JoinedTref tbl : TableRef+ nat : Natural+ joinType : JoinType+ tbl1 : TableRef+ onExpr : OnExpr+ | SubTref sel : SelectExpression alias : String+ | TrefFun fn:Expression+ | TrefFunAlias fn:Expression alias:String++TYPE OnExpr = MAYBE JoinExpression++DATA JoinExpression | JoinOn Expression | JoinUsing StringList++DATA JoinType | Inner | LeftOuter| RightOuter | FullOuter | Cross++-- select columns, into columns++DATA SelectList | SelectList items:SelectItemList StringList++DATA SelectItem | SelExp ex:Expression+ | SelectItem ex:Expression name:String++DATA CopySource | CopyFilename String | Stdin++--name type default null constraint++DATA AttributeDef | AttributeDef name : String+ typ : TypeName+ check : (Maybe Expression)+ cons : RowConstraintList++--Constraints which appear attached to an individual field++DATA RowConstraint | NullConstraint+ | NotNullConstraint+ | RowCheckConstraint Expression+ | RowUniqueConstraint+ | RowPrimaryKeyConstraint+ | RowReferenceConstraint table : String+ att : (Maybe String)+ onUpdate : Cascade+ onDelete : Cascade++--constraints which appear on a separate row in the create table++DATA Constraint | UniqueConstraint StringList+ | PrimaryKeyConstraint StringList+ | CheckConstraint Expression+ -- sourcecols targettable targetcols ondelete onupdate+ | ReferenceConstraint atts : StringList+ table : String+ tableAtts : StringList+ onUpdate : Cascade+ onDelete : Cascade++DATA TypeAttributeDef | TypeAttDef name : String+ typ : TypeName++DATA ParamDef | ParamDef name:String typ:TypeName+ | ParamDefTp typ:TypeName++DATA VarDef | VarDef 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 tn:String+ | PrecTypeName tn:String prec:Integer+ | ArrayTypeName typ:TypeName+ | SetOfTypeName 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 Integer+ | FloatLit Double+ | StringLit quote : String+ value : String+ | NullLit+ | BooleanLit Bool+ | PositionalArg Integer+ | Cast expr:Expression tn:TypeName+ | Identifier i:String+ | Case cases : CaseExpressionListExpressionPairList+ els : MaybeExpression+ | CaseSimple value : Expression+ cases : CaseExpressionListExpressionPairList+ els : MaybeExpression+ | Exists sel : SelectExpression+ | FunCall funName:String args:ExpressionList+ | InPredicate expr:Expression i:Bool list:InList+ -- windowfn selectitem partitionby orderby orderbyasc?+ | WindowFn fn : Expression+ partitionBy : ExpressionList+ orderBy : ExpressionList+ dir : Direction+ | ScalarSubQuery sel : SelectExpression++TYPE MaybeExpression = MAYBE Expression++{-++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.++-}++++DATA InList | InList exprs : ExpressionList+ | InSelect sel : SelectExpression++-- 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 StringStringListPair = (String,StringList)+TYPE StringStringListPairList = [StringStringListPair]+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]++{-++slightly hacky, add the source positions only in statement lists this+includes top level statements, and statements inside createfunction,+and nested inside if, while, case statements, and the like, but+unfortunately not select expressions inside other+expressions/statements, so we get particularly crap source positions+for big select statements.++Was done like this for expediency.++This will be changed back to StatementList = [Statement] when all the+nodes have sourcepositioning information added to them, doing which+has been put off for no good reason.++-}++TYPE SourcePosStatement = (MySourcePos, Statement)+TYPE StatementList = [SourcePosStatement]++++-- 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+ ExpressionList ExpressionListList StringList SetClauseList+ AttributeDefList ConstraintList TypeAttributeDefList+ ParamDefList StringStringListPair StringStringListPairList+ StatementList ExpressionListStatementListPair+ ExpressionListStatementListPairList ExpressionStatementListPair+ ExpressionStatementListPairList VarDefList SelectItemList+ RowConstraintList CaseExpressionListExpressionPair+ CaseExpressionListExpressionPairList CaseExpressionList+ SourcePosStatement MTableRef TableRef OnExpr Where+++SET NonListNodes = Statement SelectExpression FnBody SetClause TableRef+ JoinExpression JoinType+ SelectItem CopySource AttributeDef RowConstraint+ Constraint TypeAttributeDef ParamDef VarDef RaiseType+ CombineType Volatility Language TypeName DropType Cascade+ Direction Distinct Natural IfExists RestartIdentity+ Expression InList MaybeExpression+ StringStringListPair ExpressionListStatementListPair+ ExpressionStatementListPair+ SourcePosStatement MTableRef OnExpr Where+++SET ListNodes = SelectList ExpressionList ExpressionListList StringList+ SetClauseList+ AttributeDefList ConstraintList TypeAttributeDefList+ ParamDefList StringStringListPairList+ StatementList+ ExpressionListStatementListPairList+ ExpressionStatementListPairList VarDefList SelectItemList+ RowConstraintList+ CaseExpressionListExpressionPairList CaseExpressionList+ CaseExpressionListExpressionPair++DERIVING AllNodes: Show,Eq++INCLUDE "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+++================================================================================++= checkAst++test function to run on asts, returns a list of errors, warnings, etc.+bit stale++-}+{+checkAst :: StatementList -> [Message]+checkAst sts = let t = sem_Root (Root sts)+ in (messages_Syn_Root (wrap_Root t Inh_Root {scope_Inh_Root = defaultScope}))+{-+================================================================================++= Types++These are the utility functions which clients use to typecheck sql.++-}++getExpressionType :: Scope -> Expression -> Type+getExpressionType scope ex =+ let t = sem_ExpressionRoot (ExpressionRoot ex)+ in (nodeType_Syn_ExpressionRoot+ (wrap_ExpressionRoot t Inh_ExpressionRoot {scope_Inh_ExpressionRoot = combineScopes defaultScope scope}))+++getStatementsType :: StatementList -> [Type]+getStatementsType = getStatementsTypeScope emptyScope++getStatementsTypeScope :: Scope -> StatementList -> [Type]+getStatementsTypeScope scope st =+ let t = sem_Root (Root st)+ ta = wrap_Root t Inh_Root {scope_Inh_Root = combineScopes defaultScope scope}+ tl = nodeType_Syn_Root ta+ in (unwrapTypeList tl)++getStatementsInfo :: StatementList -> [StatementInfo]+getStatementsInfo = getStatementsInfoScope emptyScope++getStatementsInfoScope :: Scope -> StatementList -> [StatementInfo]+getStatementsInfoScope scope st =+ let t = sem_Root (Root st)+ ta = wrap_Root t Inh_Root {scope_Inh_Root = combineScopes defaultScope scope}+ t2 = statementInfo_Syn_Root ta+ in t2+++--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.++resetSps :: [Statement] -> [Statement]+resetSps = map resetSp++resetSp :: Statement -> Statement+resetSp (CreateFunction l n p r bq b v) = CreateFunction l n p r bq+ (case b of+ SqlFnBody stss -> SqlFnBody (map resetSp' stss)+ PlpgsqlFnBody vd stss -> PlpgsqlFnBody vd (map resetSp' stss))+ v+resetSp (ForSelectStatement v s stss) = ForSelectStatement v s (map resetSp' stss)+resetSp (ForIntegerStatement v f t stss) = ForIntegerStatement v f t (map resetSp' stss)+resetSp (CaseStatement v cs els) = CaseStatement v (map (second (map resetSp')) cs) (map resetSp' els)+resetSp (If cs els) = If (map (second (map resetSp')) cs) (map resetSp' els)+resetSp a = a++resetSp' :: SourcePosStatement -> SourcePosStatement+resetSp' (_,st) = (nsp,resetSp st)++resetSps' :: StatementList -> StatementList+resetSps' = map resetSp'++nsp :: MySourcePos+nsp = ("", 0,0)+}++{-++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.++Would like to turn this back into regular Haskell file, maybe could+use AspectAG instead of uuagc to make this happen?+++-}
+ Database/HsSqlPpp/AstCheckTests.lhs view
@@ -0,0 +1,654 @@+#!/usr/bin/env runghc++Copyright 2009 Jake Wheat++Set of tests to check the type checking code++> module Database.HsSqlPpp.AstCheckTests (astCheckTests, parseAndGetType) where++> import Test.HUnit+> import Test.Framework+> import Test.Framework.Providers.HUnit+> import Data.Char+> import Control.Arrow++> import Database.HsSqlPpp.Ast+> import Database.HsSqlPpp.Parser+> import Database.HsSqlPpp.Scope+> import Database.HsSqlPpp.TypeType++> astCheckTests :: Test.Framework.Test+> astCheckTests = testGroup "astCheckTests" [+> testGroup "test test"+> (mapAttr [+> p "select 1;" []+> ])+> ,testGroup "loop tests"+> (mapAttr [+> p "create function cont_test1() returns void as $$\n\+> \declare\n\+> \ r record;\n\+> \begin\n\+> \ for r in select a from b loop\n\+> \ null;\n\+> \ continue;\n\+> \ end loop;\n\+> \end;\n\+> \$$ language plpgsql volatile;\n" []+> ,p "create function cont_test2() returns void as $$\n\+> \begin\n\+> \ continue;\n\+> \end;\n\+> \$$ language plpgsql volatile;\n" [Error ("",3,5) ContinueNotInLoop]+> ])++> ,testGroup "basic literal types"+> (mapExprType [+> p "1" typeInt+> ,p "1.0" typeNumeric+> ,p "'test'" UnknownStringLit+> ,p "true" typeBool+> ,p "array[1,2,3]" (ArrayType typeInt)+> ,p "array['a','b']" (ArrayType (ScalarType "text"))+> ,p "array[1,'b']" (ArrayType typeInt)+> ,p "array[1,true]" (TypeError ("",0,0)+> (IncompatibleTypeSet [typeInt,typeBool]))+> ])++> ,testGroup "some expressions"+> (mapExprType [+> p "1=1" typeBool+> ,p "1=true" (TypeError ("",0,0)+> (NoMatchingOperator "=" [typeInt,typeBool]))+> ,p "substring('aqbc' from 2 for 2)" (ScalarType "text")++> ,p "substring(3 from 2 for 2)" (TypeError ("",0,0)+> (NoMatchingOperator "!substring"+> [ScalarType "int4"+> ,ScalarType "int4"+> ,ScalarType "int4"]))+> ,p "substring('aqbc' from 2 for true)" (TypeError ("",0,0)+> (NoMatchingOperator "!substring"+> [UnknownStringLit+> ,ScalarType "int4"+> ,ScalarType "bool"]))++> ,p "3 between 2 and 4" typeBool+> ,p "3 between true and 4" (TypeError ("",0,0)+> (NoMatchingOperator ">="+> [typeInt+> ,typeBool]))++> ,p "array[1,2,3][2]" typeInt+> ,p "array['a','b'][1]" (ScalarType "text")++ > ,p "array['a','b'][true]" (TypeError ("",0,0)+ > (WrongType+ > typeInt+ > UnknownStringLit))++> ,p "not true" typeBool+> ,p "not 1" (TypeError ("",0,0)+> (NoMatchingOperator "!not" [typeInt]))++> ,p "@ 3" typeInt+> ,p "@ true" (TypeError ("",0,0)+> (NoMatchingOperator "@" [ScalarType "bool"]))++> ,p "-3" typeInt+> ,p "-'a'" (TypeError ("",0,0)+> (NoMatchingOperator "-" [UnknownStringLit]))++> ,p "4-3" typeInt++> --,p "1 is null" typeBool+> --,p "1 is not null" typeBool++> ,p "1+1" typeInt+> ,p "1+1" typeInt+> ,p "31*511" typeInt+> ,p "5/2" typeInt+> ,p "2^10" typeFloat8+> ,p "17%5" typeInt++> ,p "3 and 4" (TypeError ("",0,0)+> (NoMatchingOperator "!and" [typeInt,typeInt]))++> ,p "True and False" typeBool+> ,p "false or true" typeBool++> ,p "lower('TEST')" (ScalarType "text")+> ,p "lower(1)" (TypeError nsp (NoMatchingOperator "lower" [typeInt]))+> ])++> ,testGroup "special functions"+> (mapExprType [+> p "coalesce(null,1,2,null)" typeInt+> ,p "coalesce('3',1,2,null)" typeInt+> ,p "coalesce('3',1,true,null)"+> (TypeError ("",0,0)+> (IncompatibleTypeSet [UnknownStringLit+> ,ScalarType "int4"+> ,ScalarType "bool"+> ,UnknownStringLit]))+> ,p "nullif('hello','hello')" (ScalarType "text")+> ,p "nullif(3,4)" typeInt+> ,p "nullif(true,3)"+> (TypeError ("",0,0)+> (NoMatchingOperator "nullif" [ScalarType "bool"+> ,ScalarType "int4"]))+> ,p "greatest(3,5,6,4,3)" typeInt+> ,p "least(3,5,6,4,3)" typeInt+> ,p "least(5,true)"+> (TypeError nsp (IncompatibleTypeSet [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++> ,testGroup "some expressions"+> (mapExprType [+> p "3 + '4'" typeInt+> ,p "3.0 + '4'" typeNumeric+> ,p "'3' + '4'" (TypeError ("",0,0)+> (NoMatchingOperator "+" [UnknownStringLit+> ,UnknownStringLit]))+> ])+>++> ,testGroup "expressions and scope"+> (mapExprScopeType [+> t "a" (makeScope [("test", [("a", typeInt)])]) typeInt+> ,t "b" (makeScope [("test", [("a", typeInt)])])+> (TypeError nsp (UnrecognisedIdentifier "b"))+> ])++> ,testGroup "random expressions"+> (mapExprType [+> p "exists (select 1 from pg_type)" typeBool+> ,p "exists (select testit from pg_type)"+> (TypeError nsp (UnrecognisedIdentifier "testit"))+> ])++rows different lengths+rows match types pairwise, same and different types+rows implicit cast from unknown+rows don't match types+++> ,testGroup "row comparison expressions"+> (mapExprType [+> p "row(1)" (RowCtor [typeInt])+> ,p "row(1,2)" (RowCtor [typeInt,typeInt])+> ,p "row('t1','t2')" (RowCtor [UnknownStringLit,UnknownStringLit])+> ,p "row(true,1,'t3')" (RowCtor [typeBool, typeInt,UnknownStringLit])+> ,p "(true,1,'t3',75.3)" (RowCtor [typeBool,typeInt+> ,UnknownStringLit,typeNumeric])+> ,p "row(1) = row(2)" typeBool+> ,p "row(1,2) = row(2,1)" typeBool+> ,p "(1,2) = (2,1)" typeBool+> ,p "(1,2,3) = (2,1)" (TypeError nsp ValuesListsMustBeSameLength)+> ,p "('1',2) = (2,'1')" typeBool+> ,p "(1,true) = (2,1)" (TypeError nsp (IncompatibleTypeSet [ScalarType "bool",ScalarType "int4"]))+> ,p "(1,2) <> (2,1)" typeBool+> ,p "(1,2) >= (2,1)" typeBool+> ,p "(1,2) <= (2,1)" typeBool+> ,p "(1,2) > (2,1)" typeBool+> ,p "(1,2) < (2,1)" typeBool+> ])++++> ,testGroup "case expressions"+> (mapExprType [+> p "case\n\+> \ when true then 1\n\+> \end" typeInt+> ,p "case\n\+> \ when 1=2 then 'stuff'\n\+> \ when 2=3 then 'blah'\n\+> \ else 'test'\n\+> \end" (ScalarType "text")+> ,p "case\n\+> \ when 1=2 then 'stuff'\n\+> \ when true=3 then 'blah'\n\+> \ else 'test'\n\+> \end" (TypeError ("",0,0)+> (NoMatchingOperator "=" [typeBool,typeInt]))+> ,p "case\n\+> \ when 1=2 then true\n\+> \ when 2=3 then false\n\+> \ else 1\n\+> \end" (TypeError ("",0,0)+> (IncompatibleTypeSet [typeBool+> ,typeBool+> ,typeInt]))+> ,p "case\n\+> \ when 1=2 then false\n\+> \ when 2=3 then 1\n\+> \ else true\n\+> \end" (TypeError ("",0,0)+> (IncompatibleTypeSet [typeBool+> ,typeInt+> ,typeBool]))++> ,p "case 1 when 2 then 3 else 4 end" typeInt+> ,p "case 1 when true then 3 else 4 end"+> (TypeError ("",0,0) (IncompatibleTypeSet [ScalarType "int4"+> ,ScalarType "bool"]))+> ,p "case 1 when 2 then true else false end" typeBool+> ,p "case 1 when 2 then 3 else false end"+> (TypeError ("",0,0) (IncompatibleTypeSet [ScalarType "int4"+> ,ScalarType "bool"]))++> ])++> ,testGroup "polymorphic functions"+> (mapExprType [+> p "array_append(ARRAY[1,2], 3)"+> (ArrayType typeInt)+> ,p "array_append(ARRAY['a','b'], 'c')"+> (ArrayType $ ScalarType "text")+> ,p "array_append(ARRAY['a'::int,'b'], 'c')"+> (ArrayType typeInt)+> ])++todo:++++> ,testGroup "cast expressions"+> (mapExprType [+> p "cast ('1' as integer)"+> typeInt+> ,p "cast ('1' as baz)"+> (TypeError nsp (UnknownTypeName "baz"))+> ,p "array[]"+> (TypeError nsp TypelessEmptyArray)+> --todo: figure out how to do this+> --,p "array[] :: text[]"+> -- (ArrayType (ScalarType "text"))++> ])+++> ,testGroup "simple selects"+> (mapStatementType [+> p "select 1;" [SetOfType $ UnnamedCompositeType [("?column?", typeInt)]]+> ,p "select 1 as a;" [SetOfType $ UnnamedCompositeType [("a", typeInt)]]+> ,p "select 1,2;" [SetOfType $ UnnamedCompositeType [("?column?", typeInt)+> ,("?column?", typeInt)]]+> ,p "select 1 as a, 2 as b;" [SetOfType $ UnnamedCompositeType [("a", typeInt)+> ,("b", typeInt)]]+> ,p "select 1+2 as a, 'a' || 'b';" [SetOfType $+> UnnamedCompositeType [("a", typeInt)+> ,("?column?", ScalarType "text")]]+> ,p "values (1,2);" [SetOfType $+> UnnamedCompositeType+> [("column1", typeInt)+> ,("column2", typeInt)]]+> ,p "values (1,2),('3', '4');" [SetOfType $+> UnnamedCompositeType+> [("column1", typeInt)+> ,("column2", typeInt)]]+> ,p "values (1,2),('a', true);" [TypeError ("",1,1)+> (IncompatibleTypeSet [typeInt+> ,typeBool])]+> ,p "values ('3', '4'),(1,2);" [SetOfType $+> UnnamedCompositeType+> [("column1", typeInt)+> ,("column2", typeInt)]]+> ,p "values ('a', true),(1,2);" [TypeError ("",1,1)+> (IncompatibleTypeSet [typeBool+> ,typeInt])]+> ,p "values ('a'::text, '2'::int2),('1','2');" [SetOfType $+> UnnamedCompositeType+> [("column1", ScalarType "text")+> ,("column2", typeSmallInt)]]+> ,p "values (1,2,3),(1,2);" [TypeError ("",1,1) ValuesListsMustBeSameLength]+> ])++> ,testGroup "simple combine selects"+> (mapStatementType [+> p "select 1,2 union select '3', '4';" [SetOfType $+> UnnamedCompositeType+> [("?column?", typeInt)+> ,("?column?", typeInt)]]+> ,p "select 1,2 intersect select 'a', true;" [TypeError ("",1,1)+> (IncompatibleTypeSet [typeInt+> ,typeBool])]+> ,p "select '3', '4' except select 1,2;" [SetOfType $+> UnnamedCompositeType+> [("?column?", typeInt)+> ,("?column?", typeInt)]]+> ,p "select 'a', true union select 1,2;" [TypeError ("",1,1)+> (IncompatibleTypeSet [typeBool+> ,typeInt])]+> ,p "select 'a'::text, '2'::int2 intersect select '1','2';" [SetOfType $+> UnnamedCompositeType+> [("text", ScalarType "text")+> ,("int2", typeSmallInt)]]+> ,p "select 1,2,3 except select 1,2;" [TypeError ("",1,1) ValuesListsMustBeSameLength]+> ,p "select '3' as a, '4' as b except select 1,2;" [SetOfType $+> UnnamedCompositeType+> [("a", typeInt)+> ,("b", typeInt)]]+> ])+++> ,testGroup "simple selects from"+> (mapStatementType [+> p "select a from (select 1 as a, 2 as b) x;"+> [SetOfType $ UnnamedCompositeType [("a", typeInt)]]+> ,p "select b from (select 1 as a, 2 as b) x;"+> [SetOfType $ UnnamedCompositeType [("b", typeInt)]]+> ,p "select c from (select 1 as a, 2 as b) x;"+> [TypeError ("",1,1) (UnrecognisedIdentifier "c")]+> ,p "select typlen from pg_type;"+> [SetOfType $ UnnamedCompositeType [("typlen", typeSmallInt)]]+> ,p "select oid from pg_type;"+> [SetOfType $ UnnamedCompositeType [("oid", ScalarType "oid")]]+> ,p "select p.oid from pg_type p;"+> [SetOfType $ UnnamedCompositeType [("oid", ScalarType "oid")]]+> ,p "select typlen from nope;"+> [TypeError ("",1,1) (UnrecognisedRelation "nope")]+> ,p "select generate_series from generate_series(1,7);"+> [SetOfType $ UnnamedCompositeType [("generate_series", typeInt)]]++check aliasing++> ,p "select generate_series.generate_series from generate_series(1,7);"+> [SetOfType $ UnnamedCompositeType [("generate_series", typeInt)]]+> ,p "select g from generate_series(1,7) g;"+> [SetOfType $ UnnamedCompositeType [("g", typeInt)]]+> ,p "select g.g from generate_series(1,7) g;"+> [SetOfType $ UnnamedCompositeType [("g", typeInt)]]+> ,p "select generate_series.g from generate_series(1,7) g;"+> [TypeError ("",1,1) (UnrecognisedCorrelationName "generate_series")]+> ,p "select g.generate_series from generate_series(1,7) g;"+> [TypeError ("",1,1) (UnrecognisedIdentifier "g.generate_series")]+++> ,p "select * from pg_attrdef;"+> [SetOfType $ UnnamedCompositeType+> [("adrelid",ScalarType "oid")+> ,("adnum",ScalarType "int2")+> ,("adbin",ScalarType "text")+> ,("adsrc",ScalarType "text")]]+> ,p "select abs from abs(3);"+> [SetOfType $ UnnamedCompositeType [("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);+> ])+++> ,testGroup "simple selects from 2"+> (mapStatementTypeScope [+>+> t "select a,b from testfunc();"+> (let fn = ("testfunc", [], SetOfType $ CompositeType "testType")+> in emptyScope {scopeFunctions = [fn]+> ,scopeAllFns = [fn]+> ,scopeAttrDefs =+> [("testType"+> ,Composite+> ,UnnamedCompositeType+> [("a", ScalarType "text")+> ,("b", typeInt)+> ,("c", typeInt)])]})+> [SetOfType $ UnnamedCompositeType+> [("a",ScalarType "text"),("b",ScalarType "int4")]]++> ,t "select testfunc();"+> (let fn = ("testfunc", [], Pseudo Void)+> in emptyScope {scopeFunctions = [fn]+> ,scopeAllFns = [fn]+> ,scopeAttrDefs =+> []})+> [Pseudo Void]++> ])++> ,testGroup "simple join selects"+> (mapStatementType [+> p "select * from (select 1 as a, 2 as b) a\n\+> \ cross join (select true as c, 4.5 as d) b;"+> [SetOfType $ UnnamedCompositeType [("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;"+> [SetOfType $ UnnamedCompositeType [("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);"+> [SetOfType $ UnnamedCompositeType [("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;"+> [SetOfType $ UnnamedCompositeType [("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;"+> [SetOfType $ UnnamedCompositeType [("a", typeInt)+> ,("b", typeInt)+> ,("d", typeNumeric)]]+> ,p "select * from (select 1 as a, 2 as b) a\n\+> \ natural inner join (select true as a, 4.5 as d) b;"+> [TypeError ("",1,1) (IncompatibleTypeSet [ScalarType "int4"+> ,ScalarType "bool"])]+> ])++> ,testGroup "simple scalar identifier qualification"+> (mapStatementType [+> p "select a.* from \n\+> \(select 1 as a, 2 as b) a \n\+> \cross join (select 3 as c, 4 as d) b;"+> [SetOfType $ UnnamedCompositeType [("a", typeInt)+> ,("b", typeInt)]]+> ,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;"+> [SetOfType $ UnnamedCompositeType [("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;"+> [SetOfType $ UnnamedCompositeType [("a", typeInt)+> ,("a", typeInt)]]++> ,p "select pg_attrdef.adsrc from pg_attrdef;"+> [SetOfType $ UnnamedCompositeType [("adsrc", ScalarType "text")]]++> ,p "select a.adsrc from pg_attrdef a;"+> [SetOfType $ UnnamedCompositeType [("adsrc", ScalarType "text")]]++> ,p "select pg_attrdef.adsrc from pg_attrdef a;"+> [TypeError ("",1,1) (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;"+> [SetOfType $ UnnamedCompositeType [("a", typeInt)]]++select g.fn from fn() g+++> ])++> ,testGroup "aggregates"+> (mapStatementType [+> p "select max(prorettype::int) from pg_proc;"+> [SetOfType $ UnnamedCompositeType [("max", typeInt)]]+> ])++> ,testGroup "simple wheres"+> (mapStatementType [+> p "select 1 from pg_type where true;"+> [SetOfType $ UnnamedCompositeType [("?column?", typeInt)]]+> ,p "select 1 from pg_type where 1;"+> [TypeError ("",1,1) ExpressionMustBeBool]+> ,p "select typname from pg_type where typbyval;"+> [SetOfType $ UnnamedCompositeType [("typname", ScalarType "name")]]+> ,p "select typname from pg_type where typtype = 'b';"+> [SetOfType $ UnnamedCompositeType [("typname", ScalarType "name")]]+> ,p "select typname from pg_type where what = 'b';"+> [TypeError ("",1,1) (UnrecognisedIdentifier "what")]+> ])++> ,testGroup "subqueries"+> (mapStatementType [+> 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'));"+> [SetOfType $ UnnamedCompositeType [("relvar_name",ScalarType "name")]]+> ,p "select relname from pg_class where relkind in ('r', 'v');"+> [SetOfType $ UnnamedCompositeType [("relname",ScalarType "name")]]+> ,p "select * from generate_series(1,7) g\n\+> \where g not in (select * from generate_series(3,5));"+> [SetOfType (UnnamedCompositeType [("g",ScalarType "int4")])]+> ])++insert++> ,testGroup "insert"+> (mapStatementInfo [+> p "insert into nope (a,b) values (c,d);"+> [DefaultStatementInfo (TypeError ("",1,1) (UnrecognisedRelation "nope"))]+> ,p "insert into pg_attrdef (adrelid,adnum,adbin,adsrc)\n\+> \values (1,2, 'a', 'b');"+> [InsertInfo "pg_attrdef"+> (UnnamedCompositeType [("adrelid",ScalarType "oid")+> ,("adnum",ScalarType "int2")+> ,("adbin",ScalarType "text")+> ,("adsrc",ScalarType "text")])]+> ,p "insert into pg_attrdef\n\+> \values (1,2, 'a', 'b');"+> [InsertInfo "pg_attrdef"+> (UnnamedCompositeType [("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');"+> [DefaultStatementInfo (TypeError ("",1,1) (UnrecognisedIdentifier "hello"))]+> ,p "insert into pg_attrdef (adrelid,adnum,adbin,adsrc)\n\+> \values (1,true, 'a', 'b');"+> [DefaultStatementInfo (TypeError ("",1,1) (IncompatibleTypes (ScalarType "int2") (ScalarType "bool")))]+> ,p "insert into pg_attrdef (adrelid,adnum,adbin,adsrc)\n\+> \values (1,true, 'a', 'b','c');"+> [DefaultStatementInfo (TypeError ("",1,1) WrongNumberOfColumns)]++> ])++> ,testGroup "update"+> (mapStatementInfo [+> p "update nope set a = 1;"+> [DefaultStatementInfo (TypeError ("",1,1) (UnrecognisedRelation "nope"))]+> ,p "update pg_attrdef set adsrc = '' where 1;"+> [DefaultStatementInfo (TypeError ("",1,1) ExpressionMustBeBool)]+> ,p "update pg_attrdef set (adbin,adsrc) = ('a','b','c');"+> [DefaultStatementInfo (TypeError ("",1,1) WrongNumberOfColumns)]+> ,p "update pg_attrdef set (adrelid,adsrc) = (true,'b');"+> [DefaultStatementInfo (TypeError ("",1,1) (IncompatibleTypes (ScalarType "oid") typeBool))]+> ,p "update pg_attrdef set (shmadrelid,adsrc) = ('a','b');"+> [DefaultStatementInfo (TypeError ("",1,1) (UnrecognisedIdentifier "shmadrelid"))]+> ,p "update pg_attrdef set adsrc='';"+> [UpdateInfo "pg_attrdef" (UnnamedCompositeType [("adsrc",ScalarType "text")])]+> ,p "update pg_attrdef set adsrc='' where 1=2;"+> [UpdateInfo "pg_attrdef" (UnnamedCompositeType [("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'));"+> [UpdateInfo "pg_attrdef" (UnnamedCompositeType [("adbin",ScalarType "text"),("adsrc",ScalarType "text")])]+> ])++> ,testGroup "delete"+> (mapStatementInfo [+> p "delete from nope;"+> [DefaultStatementInfo (TypeError ("",1,1) (UnrecognisedRelation "nope"))]+> ,p "delete from pg_attrdef where 1=2;"+> [DeleteInfo "pg_attrdef"]+> ,p "delete from pg_attrdef where 1;"+> [DefaultStatementInfo (TypeError ("",1,1) ExpressionMustBeBool)]+> ])++> ]+> where+> mapAttr = map $ uncurry checkAttrs+> p a b = (a,b)+> t a b c = (a,b,c)+> mapExprType = map $ uncurry $ checkExpressionType emptyScope+> mapStatementType = map $ uncurry checkStatementType+> mapStatementInfo = map $ uncurry checkStatementInfo+> mapExprScopeType = map (\(a,b,c) -> checkExpressionType b a c)+> makeScope l = scopeReplaceIds defaultScope (map (second (\a->(a,[]))) l) []+> mapStatementTypeScope = map (\(a,b,c) -> checkStatementTypeScope b a c)++> checkAttrs :: String -> [Message] -> Test.Framework.Test+> checkAttrs src msgs = testCase ("check " ++ src) $ do+> let ast = case parseSql src of+> Left er -> error $ show er+> Right l -> l+> msgs1 = checkAst ast+> assertEqual ("check " ++ src) msgs msgs1++> checkExpressionType :: Scope -> String -> Type -> Test.Framework.Test+> checkExpressionType scope src typ = testCase ("typecheck " ++ src) $+> assertEqual ("typecheck " ++ src) typ (parseAndGetExpressionType scope src)++> checkStatementType :: String -> [Type] -> Test.Framework.Test+> checkStatementType src typ = testCase ("typecheck " ++ src) $+> assertEqual ("typecheck " ++ src) typ (parseAndGetType src)++> checkStatementTypeScope :: Scope -> String -> [Type] -> Test.Framework.Test+> checkStatementTypeScope scope src typ = testCase ("typecheck " ++ src) $+> assertEqual ("typecheck " ++ src) typ (parseAndGetTypeScope scope src)++> checkStatementInfo :: String -> [StatementInfo] -> Test.Framework.Test+> checkStatementInfo src typ = testCase ("typecheck " ++ src) $+> assertEqual ("typecheck " ++ src) typ (parseAndGetInfo src)++> parseAndGetInfo :: String -> [StatementInfo]+> parseAndGetInfo src =+> let ast = case parseSql src of+> Left er -> error $ show er+> Right l -> l+> in getStatementsInfo ast+++> parseAndGetType :: String -> [Type]+> parseAndGetType src =+> let ast = case parseSql src of+> Left er -> error $ show er+> Right l -> l+> in getStatementsType ast++> parseAndGetTypeScope :: Scope -> String -> [Type]+> parseAndGetTypeScope scope src =+> let ast = case parseSql src of+> Left er -> error $ show er+> Right l -> l+> in getStatementsTypeScope scope ast+++> parseAndGetExpressionType :: Scope -> String -> Type+> parseAndGetExpressionType scope src =+> let ast = case parseExpression src of+> Left er -> error $ show er+> Right l -> l+> in getExpressionType scope ast
+ Database/HsSqlPpp/AstUtils.lhs view
@@ -0,0 +1,396 @@+Copyright 2009 Jake Wheat++This file contains a bunch of small low level utilities to help with+type checking.++random implementation note:+If you see one of these: TypeList [] - and don't get it - is used to+represent a variety of different things, like node type checked ok+when the node doesn't produce a type but can produce a type error,+etc.. This is just a hack that will be changed soon.++> module Database.HsSqlPpp.AstUtils where++> import Data.Maybe+> import Data.List+> import Control.Monad.Error++> import Database.HsSqlPpp.TypeType+> import Database.HsSqlPpp.Scope+> import Database.HsSqlPpp.DefaultScope++================================================================================++= 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++this is why binary @ operator isn't currently supported++> data OperatorType = BinaryOp | PrefixOp | PostfixOp+> deriving (Eq,Show)++> getOperatorType :: String -> OperatorType+> getOperatorType s = case () of+> _ | any (\(x,_,_) -> x == s) (scopeBinaryOperators defaultScope) ->+> BinaryOp+> | any (\(x,_,_) -> x == s ||+> (x=="-" && s=="u-"))+> (scopePrefixOperators defaultScope) ->+> PrefixOp+> | any (\(x,_,_) -> x == s) (scopePostfixOperators defaultScope) ->+> PostfixOp+> | s `elem` ["!and", "!or","!like"] -> BinaryOp+> | s `elem` ["!not"] -> PrefixOp+> | s `elem` ["!isNull", "!isNotNull"] -> PostfixOp+> | otherwise ->+> error $ "don't know flavour of operator " ++ s++================================================================================++= type checking utils++The way most of the error handling works is all type errors live as+types and get returned as types, instead of e.g. using exceptions or+Either. All the type checking routines for each node should be in the+following form, or equivalent:++1. Take the node types of the sub nodes (e.g. the args for a function+invocation).++2. Check each type for a type error, pass any errors on as the type for+this node - so type errors filter up to the top level statements in+this way.++3. Check each type for unknown - this represents some type checking+which hasn't been coded. All the type calculations give up completely+when they come across an unknown type and just propagate unknown.++4a. If the node has no nodeType rule, it uses the default one which+just propagates the types of its subnodes. This sometimes results in+them having an uncannily accurate type, and sometimes a really weird+type, rather than returning unknown.++4b. If the node has a nodeType rule, calculate the actual type we want+for this node using the subnode types which we've already checked for+unknowns and errors. Any new type errors become this node's type, or+otherwise it is set to the calculated type.++Using laziness, in code this usually looks something like++thisNodeType = checkErrors [@subnodea.nodeType+ ,@subnodeb.nodetype] calcThisNodeType+where+ calcThisNodeType = some code referring to @subnodea.nodeType+ and @subnodeb.nodetype++The checkErrors function, and its auxiliary unkErr, does the error and+unknown propagation.++Once the annotations are done properly, type errors won't need to rise+up the tree like this.++== checkErrors++runs through the types in the first list looking for type errors or+unknowns, if it finds any, return them, else return the second+argument. See unkErr below for exactly how it finds errors and+unknowns. It will only return errors from the first type containing+errors, which might need looking at when the focus is on good error+messages.++> checkErrors :: [Type] -> Type -> Type+> checkErrors (t:ts) r = case unkErr t of+> Just e -> e+> Nothing -> checkErrors ts r+> checkErrors [] r = r++takes a type and returns any type errors, or if no errors, unknowns,+returns nothing if it doesn't find any type errors or unknowns. Looks+at the immediate type, or inside the first level if passed a type+list or unnamedcompositetype.++> unkErr :: Type -> Maybe Type+> unkErr t =+> case t of+> a@(TypeError _ _) -> Just a+> UnknownType -> Just UnknownType+> TypeList l -> doTypeList l+> UnnamedCompositeType c -> doTypeList (map snd c)+> _ -> Nothing+> where+> -- run through the type list, if there are any errors, collect+> -- them all into a list+> -- otherwise, if there are any unknowns, then the type is+> -- unknown+> -- otherwise, return nothing+> doTypeList ts =+> let unks = filter (\u -> case u of+> UnknownType -> True+> _ -> False) ts+> errs = filter (\u -> case u of+> TypeError _ _ -> True+> _ -> False) ts+> in case () of+> _ | length errs > 0 ->+> Just $ case () of+> _ | length errs == 1 -> head errs+> | otherwise -> TypeList errs+> | length unks > 0 -> Just UnknownType+> | otherwise -> Nothing++================================================================================++= basic types++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.++=== 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++> 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"]+> bigIntNames = ["int8", "bigint"]+> numericNames = ["numeric", "decimal"]+> float4Names = ["real", "float4"]+> float8Names = ["double precision", "float"]+> varcharNames = ["character varying", "varchar"]+> charNames = ["character", "char"]+> boolNames = ["boolean", "bool"]++> checkTypeExists :: Scope -> MySourcePos -> Type -> Type+> checkTypeExists scope sp t =+> if t `elem` scopeTypes scope+> then TypeList [] -- this works with the checkErrors function+> else TypeError sp (UnknownTypeError t)++> lookupTypeByName :: Scope -> MySourcePos -> String -> Type+> lookupTypeByName scope sp name =+> case lookup name (scopeTypeNames scope) of+> Just t -> t+> Nothing -> TypeError sp (UnknownTypeName name)+++================================================================================++Internal errors++TODO: work out monad transformers and try to use these. Want to throw+an internal error when a programming error is detected (instead of+e.g. letting the haskell runtime throw a pattern match failure), then+catch it in the top level type check routines in ast.ag, convert it to+a regular either style error, all without dropping into IO.++This isn't used at the moment.++> data TInternalError = TInternalError String+> deriving (Eq, Ord, Show)++> instance Error TInternalError where+> noMsg = TInternalError "oh noes!"+> strMsg = TInternalError++================================================================================++types for the keyword operators, for use in findCallMatch. Not sure+where these should live but probably not here.++> keywordOperatorTypes :: [(String,[Type],Type)]+> keywordOperatorTypes = [+> ("!and", [typeBool, typeBool], typeBool)+> ,("!or", [typeBool, typeBool], typeBool)+> ,("!like", [ScalarType "text", ScalarType "text"], typeBool)+> ,("!not", [typeBool], typeBool)+> ,("!isNull", [Pseudo AnyElement], typeBool)+> ,("!isNotNull", [Pseudo AnyElement], typeBool)+> ,("!arrayCtor", [Pseudo AnyElement], Pseudo AnyArray) -- not quite right,+> -- needs variadic support+> -- currently works via a special case+> -- in the type checking code+> ,("!between", [Pseudo AnyElement+> ,Pseudo AnyElement+> ,Pseudo AnyElement], Pseudo AnyElement)+> ,("!substring", [ScalarType "text",typeInt,typeInt], ScalarType "text")+> ,("!arraySub", [Pseudo AnyArray,typeInt], Pseudo AnyElement)+> ]++special functions, stuck in here at random also++> specialFunctionTypes :: [(String,[Type],Type)]+> specialFunctionTypes = [+> ("coalesce", [Pseudo AnyElement],+> Pseudo AnyElement) -- needs variadic support to be correct,+> -- uses special case in type checking+> -- currently+> ,("nullif", [Pseudo AnyElement, Pseudo AnyElement], Pseudo AnyElement)+> ,("greatest", [Pseudo AnyElement], Pseudo AnyElement) --variadic, blah+> ,("least", [Pseudo AnyElement], Pseudo AnyElement) --also+> ]+++================================================================================++utilities for working with Types++> isArrayType :: Type -> Bool+> isArrayType (ArrayType _) = True+> isArrayType _ = False++> unwrapTypeList :: Type -> [Type]+> unwrapTypeList (TypeList ts) = ts+> unwrapTypeList x = error $ "internal error: can't get types from list " ++ show x++> unwrapArray :: Type -> Type+> unwrapArray (ArrayType t) = t+> unwrapArray x = error $ "internal error: can't get types from non array " ++ show x++> unwrapSetOfComposite :: Type -> Type+> unwrapSetOfComposite (SetOfType a@(UnnamedCompositeType _)) = a+> unwrapSetOfComposite x = error $ "internal error: tried to unwrapSetOfComposite on " ++ show x++> unwrapSetOf :: Type -> Type+> unwrapSetOf (SetOfType a) = a+> unwrapSetOf x = error $ "internal error: tried to unwrapSetOf on " ++ show x++> unwrapComposite :: Type -> [(String,Type)]+> unwrapComposite (UnnamedCompositeType a) = a+> unwrapComposite x = error $ "internal error: cannot unwrapComposite on " ++ show x++> consComposite :: (String,Type) -> Type -> Type+> consComposite l (UnnamedCompositeType a) =+> UnnamedCompositeType (l:a)+> consComposite a b = error $ "internal error: called consComposite on " ++ show (a,b)++> unwrapRowCtor :: Type -> [Type]+> unwrapRowCtor (RowCtor a) = a+> unwrapRowCtor x = error $ "internal error: cannot unwrapRowCtor on " ++ show x++================================================================================++message stuff, used by the continue in loop checking, will be+repurposed once the type checking is complete and lint-style checking+is introduced.++> data Message = Error MySourcePos MessageStuff+> | Warning MySourcePos MessageStuff+> | Notice MySourcePos MessageStuff+> deriving (Eq)+>+> data MessageStuff = ContinueNotInLoop+> | CustomMessage String+> deriving (Eq,Show)+>+> instance Show Message where+> show = showMessage+>+> showMessage :: Message -> String+> showMessage m = case m of+> Error sp s -> showit "Error" sp s+> Warning sp s -> showit "Warning" sp s+> Notice sp s -> showit "Notice" sp s+> where+> showit lev (fn,l,c) s = lev ++ "\n" ++ fn ++ ":"+> ++ show l ++ ":" ++ show c ++ ":\n"+> ++ show s ++ "\n"+>
+ Database/HsSqlPpp/DBAccess.lhs view
@@ -0,0 +1,57 @@+Copyright 2009 Jake Wheat++This file contains a few (almost pointlessly) lightweight wrappers+around hdbc for running commands and queries.++> module Database.HsSqlPpp.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 {-args-} = do+> run conn query [] {- $ map toSql args-}+> 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 [] -- $ map sToSql args+> 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/DatabaseLoader.lhs view
@@ -0,0 +1,202 @@+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 start adding token+position information to the ast, Then when error (and notice, etc.)+messages come back from the database when loading the sql, can show+the pretty printed sql with the error pos highlighted, as well as+providing the original position from the sql file.++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 massive mess.++> module Database.HsSqlPpp.DatabaseLoader where++> import System.IO+> import System.Directory+> import Control.Monad+> import Control.Exception+> import Text.Regex.Posix+> import Data.List+> import Data.Maybe++> import Database.HsSqlPpp.PrettyPrinter+> import Database.HsSqlPpp.Ast+> import Database.HsSqlPpp.DBAccess++> loadIntoDatabase :: String -> String -> StatementList -> IO ()+> loadIntoDatabase dbName fn ast =+> withConn ("dbname=" ++ dbName) $ \conn -> do+> loadPlpgsqlIntoDatabase conn+> mapM_ (\st ->+> loadStatement conn st+> >> putStr ".") (filterStatements ast)+> where+> loadStatement conn (srcp, st) = case st of+> Skipit -> return ()+> VanillaStatement vs ->+> handleError fn srcp vs (runSqlCommand conn+> (printSql [(srcp,vs)]))+> CopyStdin a b -> runCopy conn a b srcp+> --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 (\((xsrcp, x),(_,y)) ->+> case (x,y) of+> (a@(Copy _ _ Stdin), b@(CopyData _)) -> (xsrcp,CopyStdin a b)+> (CopyData _, _) -> (xsrcp, Skipit)+> (vs,_) -> (xsrcp, VanillaStatement vs))+> statementWithNextStatement+> where+> statementWithNextStatement =+> zip sts (tail sts ++ [(("",0,0), NullStatement)])+> runCopy conn a b srcp = case (a,b) of+> (Copy tb cl Stdin, CopyData s) ->+> withTemporaryFile (\tfn -> do+> writeFile tfn s+> tfn1 <- canonicalizePath tfn+> loadStatement conn+> (srcp, 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 Database.HsSqlPpp.Ast.Statement Database.HsSqlPpp.Ast.Statement+> | Skipit+> | VanillaStatement Database.HsSqlPpp.Ast.Statement++================================================================================++= 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+instantion 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) -> Database.HsSqlPpp.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/DatabaseLoaderTests.lhs view
@@ -0,0 +1,34 @@+#!/usr/bin/env runghc++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.DatabaseLoaderTests (databaseLoaderTests) where++> import Test.HUnit+> import Test.Framework+> import Test.Framework.Providers.HUnit+> import Database.HsSqlPpp.DatabaseLoader++> databaseLoaderTests :: Test.Framework.Test+> 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/DefaultScope.hs view
@@ -0,0 +1,5 @@+module Database.HsSqlPpp.DefaultScope where+import Database.HsSqlPpp.TypeType+import Database.HsSqlPpp.Scope+defaultScope :: Scope+defaultScope = Scope {scopeTypes = [ArrayType (ScalarType "abstime"),ScalarType "abstime",ArrayType (ScalarType "aclitem"),ScalarType "aclitem",Pseudo Any,Pseudo AnyArray,Pseudo AnyElement,Pseudo AnyEnum,Pseudo AnyNonArray,ArrayType (ScalarType "bit"),ScalarType "bit",ArrayType (ScalarType "bool"),ScalarType "bool",ArrayType (ScalarType "box"),ScalarType "box",ArrayType (ScalarType "bpchar"),ScalarType "bpchar",ArrayType (ScalarType "bytea"),ScalarType "bytea",ArrayType (ScalarType "char"),ScalarType "char",ArrayType (ScalarType "cid"),ScalarType "cid",ArrayType (ScalarType "cidr"),ScalarType "cidr",ArrayType (ScalarType "circle"),ScalarType "circle",ArrayType (Pseudo Cstring),Pseudo Cstring,ArrayType (ScalarType "date"),ScalarType "date",ArrayType (ScalarType "float4"),ScalarType "float4",ArrayType (ScalarType "float8"),ScalarType "float8",ArrayType (ScalarType "gtsvector"),ScalarType "gtsvector",ArrayType (ScalarType "inet"),ScalarType "inet",ArrayType (ScalarType "int2"),ScalarType "int2",ArrayType (ScalarType "int2vector"),ScalarType "int2vector",ArrayType (ScalarType "int4"),ScalarType "int4",ArrayType (ScalarType "int8"),ScalarType "int8",Pseudo Internal,ArrayType (ScalarType "interval"),ScalarType "interval",Pseudo LanguageHandler,ArrayType (ScalarType "line"),ScalarType "line",ArrayType (ScalarType "lseg"),ScalarType "lseg",ArrayType (ScalarType "macaddr"),ScalarType "macaddr",ArrayType (ScalarType "money"),ScalarType "money",ArrayType (ScalarType "name"),ScalarType "name",ArrayType (ScalarType "numeric"),ScalarType "numeric",ArrayType (ScalarType "oid"),ScalarType "oid",ArrayType (ScalarType "oidvector"),ScalarType "oidvector",Pseudo Opaque,ArrayType (ScalarType "path"),ScalarType "path",CompositeType "pg_aggregate",CompositeType "pg_am",CompositeType "pg_amop",CompositeType "pg_amproc",CompositeType "pg_attrdef",CompositeType "pg_attribute",CompositeType "pg_auth_members",CompositeType "pg_authid",CompositeType "pg_cast",CompositeType "pg_class",CompositeType "pg_constraint",CompositeType "pg_conversion",CompositeType "pg_cursors",CompositeType "pg_database",CompositeType "pg_depend",CompositeType "pg_description",CompositeType "pg_enum",CompositeType "pg_foreign_data_wrapper",CompositeType "pg_foreign_server",CompositeType "pg_group",CompositeType "pg_index",CompositeType "pg_indexes",CompositeType "pg_inherits",CompositeType "pg_language",CompositeType "pg_largeobject",CompositeType "pg_listener",CompositeType "pg_locks",CompositeType "pg_namespace",CompositeType "pg_opclass",CompositeType "pg_operator",CompositeType "pg_opfamily",CompositeType "pg_pltemplate",CompositeType "pg_prepared_statements",CompositeType "pg_prepared_xacts",CompositeType "pg_proc",CompositeType "pg_rewrite",CompositeType "pg_roles",CompositeType "pg_rules",CompositeType "pg_settings",CompositeType "pg_shadow",CompositeType "pg_shdepend",CompositeType "pg_shdescription",CompositeType "pg_stat_activity",CompositeType "pg_stat_all_indexes",CompositeType "pg_stat_all_tables",CompositeType "pg_stat_bgwriter",CompositeType "pg_stat_database",CompositeType "pg_stat_sys_indexes",CompositeType "pg_stat_sys_tables",CompositeType "pg_stat_user_functions",CompositeType "pg_stat_user_indexes",CompositeType "pg_stat_user_tables",CompositeType "pg_statio_all_indexes",CompositeType "pg_statio_all_sequences",CompositeType "pg_statio_all_tables",CompositeType "pg_statio_sys_indexes",CompositeType "pg_statio_sys_sequences",CompositeType "pg_statio_sys_tables",CompositeType "pg_statio_user_indexes",CompositeType "pg_statio_user_sequences",CompositeType "pg_statio_user_tables",CompositeType "pg_statistic",CompositeType "pg_stats",CompositeType "pg_tables",CompositeType "pg_tablespace",CompositeType "pg_timezone_abbrevs",CompositeType "pg_timezone_names",CompositeType "pg_trigger",CompositeType "pg_ts_config",CompositeType "pg_ts_config_map",CompositeType "pg_ts_dict",CompositeType "pg_ts_parser",CompositeType "pg_ts_template",CompositeType "pg_type",CompositeType "pg_user",CompositeType "pg_user_mapping",CompositeType "pg_user_mappings",CompositeType "pg_views",ArrayType (ScalarType "point"),ScalarType "point",ArrayType (ScalarType "polygon"),ScalarType "polygon",ArrayType (Pseudo Record),Pseudo Record,ArrayType (ScalarType "refcursor"),ScalarType "refcursor",ArrayType (ScalarType "regclass"),ScalarType "regclass",ArrayType (ScalarType "regconfig"),ScalarType "regconfig",ArrayType (ScalarType "regdictionary"),ScalarType "regdictionary",ArrayType (ScalarType "regoper"),ScalarType "regoper",ArrayType (ScalarType "regoperator"),ScalarType "regoperator",ArrayType (ScalarType "regproc"),ScalarType "regproc",ArrayType (ScalarType "regprocedure"),ScalarType "regprocedure",ArrayType (ScalarType "regtype"),ScalarType "regtype",ArrayType (ScalarType "reltime"),ScalarType "reltime",ScalarType "smgr",ArrayType (ScalarType "text"),ScalarType "text",ArrayType (ScalarType "tid"),ScalarType "tid",ArrayType (ScalarType "time"),ScalarType "time",ArrayType (ScalarType "timestamp"),ScalarType "timestamp",ArrayType (ScalarType "timestamptz"),ScalarType "timestamptz",ArrayType (ScalarType "timetz"),ScalarType "timetz",ArrayType (ScalarType "tinterval"),ScalarType "tinterval",Pseudo Trigger,ArrayType (ScalarType "tsquery"),ScalarType "tsquery",ArrayType (ScalarType "tsvector"),ScalarType "tsvector",ArrayType (ScalarType "txid_snapshot"),ScalarType "txid_snapshot",ScalarType "unknown",ArrayType (ScalarType "uuid"),ScalarType "uuid",ArrayType (ScalarType "varbit"),ScalarType "varbit",ArrayType (ScalarType "varchar"),ScalarType "varchar",Pseudo Void,ArrayType (ScalarType "xid"),ScalarType "xid",ArrayType (ScalarType "xml"),ScalarType "xml"], scopeTypeNames = [("_abstime",ArrayType (ScalarType "abstime")),("abstime",ScalarType "abstime"),("_aclitem",ArrayType (ScalarType "aclitem")),("aclitem",ScalarType "aclitem"),("any",Pseudo Any),("anyarray",Pseudo AnyArray),("anyelement",Pseudo AnyElement),("anyenum",Pseudo AnyEnum),("anynonarray",Pseudo AnyNonArray),("_bit",ArrayType (ScalarType "bit")),("bit",ScalarType "bit"),("_bool",ArrayType (ScalarType "bool")),("bool",ScalarType "bool"),("_box",ArrayType (ScalarType "box")),("box",ScalarType "box"),("_bpchar",ArrayType (ScalarType "bpchar")),("bpchar",ScalarType "bpchar"),("_bytea",ArrayType (ScalarType "bytea")),("bytea",ScalarType "bytea"),("_char",ArrayType (ScalarType "char")),("char",ScalarType "char"),("_cid",ArrayType (ScalarType "cid")),("cid",ScalarType "cid"),("_cidr",ArrayType (ScalarType "cidr")),("cidr",ScalarType "cidr"),("_circle",ArrayType (ScalarType "circle")),("circle",ScalarType "circle"),("_cstring",ArrayType (Pseudo Cstring)),("cstring",Pseudo Cstring),("_date",ArrayType (ScalarType "date")),("date",ScalarType "date"),("_float4",ArrayType (ScalarType "float4")),("float4",ScalarType "float4"),("_float8",ArrayType (ScalarType "float8")),("float8",ScalarType "float8"),("_gtsvector",ArrayType (ScalarType "gtsvector")),("gtsvector",ScalarType "gtsvector"),("_inet",ArrayType (ScalarType "inet")),("inet",ScalarType "inet"),("_int2",ArrayType (ScalarType "int2")),("int2",ScalarType "int2"),("_int2vector",ArrayType (ScalarType "int2vector")),("int2vector",ScalarType "int2vector"),("_int4",ArrayType (ScalarType "int4")),("int4",ScalarType "int4"),("_int8",ArrayType (ScalarType "int8")),("int8",ScalarType "int8"),("internal",Pseudo Internal),("_interval",ArrayType (ScalarType "interval")),("interval",ScalarType "interval"),("language_handler",Pseudo LanguageHandler),("_line",ArrayType (ScalarType "line")),("line",ScalarType "line"),("_lseg",ArrayType (ScalarType "lseg")),("lseg",ScalarType "lseg"),("_macaddr",ArrayType (ScalarType "macaddr")),("macaddr",ScalarType "macaddr"),("_money",ArrayType (ScalarType "money")),("money",ScalarType "money"),("_name",ArrayType (ScalarType "name")),("name",ScalarType "name"),("_numeric",ArrayType (ScalarType "numeric")),("numeric",ScalarType "numeric"),("_oid",ArrayType (ScalarType "oid")),("oid",ScalarType "oid"),("_oidvector",ArrayType (ScalarType "oidvector")),("oidvector",ScalarType "oidvector"),("opaque",Pseudo Opaque),("_path",ArrayType (ScalarType "path")),("path",ScalarType "path"),("pg_aggregate",CompositeType "pg_aggregate"),("pg_am",CompositeType "pg_am"),("pg_amop",CompositeType "pg_amop"),("pg_amproc",CompositeType "pg_amproc"),("pg_attrdef",CompositeType "pg_attrdef"),("pg_attribute",CompositeType "pg_attribute"),("pg_auth_members",CompositeType "pg_auth_members"),("pg_authid",CompositeType "pg_authid"),("pg_cast",CompositeType "pg_cast"),("pg_class",CompositeType "pg_class"),("pg_constraint",CompositeType "pg_constraint"),("pg_conversion",CompositeType "pg_conversion"),("pg_cursors",CompositeType "pg_cursors"),("pg_database",CompositeType "pg_database"),("pg_depend",CompositeType "pg_depend"),("pg_description",CompositeType "pg_description"),("pg_enum",CompositeType "pg_enum"),("pg_foreign_data_wrapper",CompositeType "pg_foreign_data_wrapper"),("pg_foreign_server",CompositeType "pg_foreign_server"),("pg_group",CompositeType "pg_group"),("pg_index",CompositeType "pg_index"),("pg_indexes",CompositeType "pg_indexes"),("pg_inherits",CompositeType "pg_inherits"),("pg_language",CompositeType "pg_language"),("pg_largeobject",CompositeType "pg_largeobject"),("pg_listener",CompositeType "pg_listener"),("pg_locks",CompositeType "pg_locks"),("pg_namespace",CompositeType "pg_namespace"),("pg_opclass",CompositeType "pg_opclass"),("pg_operator",CompositeType "pg_operator"),("pg_opfamily",CompositeType "pg_opfamily"),("pg_pltemplate",CompositeType "pg_pltemplate"),("pg_prepared_statements",CompositeType "pg_prepared_statements"),("pg_prepared_xacts",CompositeType "pg_prepared_xacts"),("pg_proc",CompositeType "pg_proc"),("pg_rewrite",CompositeType "pg_rewrite"),("pg_roles",CompositeType "pg_roles"),("pg_rules",CompositeType "pg_rules"),("pg_settings",CompositeType "pg_settings"),("pg_shadow",CompositeType "pg_shadow"),("pg_shdepend",CompositeType "pg_shdepend"),("pg_shdescription",CompositeType "pg_shdescription"),("pg_stat_activity",CompositeType "pg_stat_activity"),("pg_stat_all_indexes",CompositeType "pg_stat_all_indexes"),("pg_stat_all_tables",CompositeType "pg_stat_all_tables"),("pg_stat_bgwriter",CompositeType "pg_stat_bgwriter"),("pg_stat_database",CompositeType "pg_stat_database"),("pg_stat_sys_indexes",CompositeType "pg_stat_sys_indexes"),("pg_stat_sys_tables",CompositeType "pg_stat_sys_tables"),("pg_stat_user_functions",CompositeType "pg_stat_user_functions"),("pg_stat_user_indexes",CompositeType "pg_stat_user_indexes"),("pg_stat_user_tables",CompositeType "pg_stat_user_tables"),("pg_statio_all_indexes",CompositeType "pg_statio_all_indexes"),("pg_statio_all_sequences",CompositeType "pg_statio_all_sequences"),("pg_statio_all_tables",CompositeType "pg_statio_all_tables"),("pg_statio_sys_indexes",CompositeType "pg_statio_sys_indexes"),("pg_statio_sys_sequences",CompositeType "pg_statio_sys_sequences"),("pg_statio_sys_tables",CompositeType "pg_statio_sys_tables"),("pg_statio_user_indexes",CompositeType "pg_statio_user_indexes"),("pg_statio_user_sequences",CompositeType "pg_statio_user_sequences"),("pg_statio_user_tables",CompositeType "pg_statio_user_tables"),("pg_statistic",CompositeType "pg_statistic"),("pg_stats",CompositeType "pg_stats"),("pg_tables",CompositeType "pg_tables"),("pg_tablespace",CompositeType "pg_tablespace"),("pg_timezone_abbrevs",CompositeType "pg_timezone_abbrevs"),("pg_timezone_names",CompositeType "pg_timezone_names"),("pg_trigger",CompositeType "pg_trigger"),("pg_ts_config",CompositeType "pg_ts_config"),("pg_ts_config_map",CompositeType "pg_ts_config_map"),("pg_ts_dict",CompositeType "pg_ts_dict"),("pg_ts_parser",CompositeType "pg_ts_parser"),("pg_ts_template",CompositeType "pg_ts_template"),("pg_type",CompositeType "pg_type"),("pg_user",CompositeType "pg_user"),("pg_user_mapping",CompositeType "pg_user_mapping"),("pg_user_mappings",CompositeType "pg_user_mappings"),("pg_views",CompositeType "pg_views"),("_point",ArrayType (ScalarType "point")),("point",ScalarType "point"),("_polygon",ArrayType (ScalarType "polygon")),("polygon",ScalarType "polygon"),("_record",ArrayType (Pseudo Record)),("record",Pseudo Record),("_refcursor",ArrayType (ScalarType "refcursor")),("refcursor",ScalarType "refcursor"),("_regclass",ArrayType (ScalarType "regclass")),("regclass",ScalarType "regclass"),("_regconfig",ArrayType (ScalarType "regconfig")),("regconfig",ScalarType "regconfig"),("_regdictionary",ArrayType (ScalarType "regdictionary")),("regdictionary",ScalarType "regdictionary"),("_regoper",ArrayType (ScalarType "regoper")),("regoper",ScalarType "regoper"),("_regoperator",ArrayType (ScalarType "regoperator")),("regoperator",ScalarType "regoperator"),("_regproc",ArrayType (ScalarType "regproc")),("regproc",ScalarType "regproc"),("_regprocedure",ArrayType (ScalarType "regprocedure")),("regprocedure",ScalarType "regprocedure"),("_regtype",ArrayType (ScalarType "regtype")),("regtype",ScalarType "regtype"),("_reltime",ArrayType (ScalarType "reltime")),("reltime",ScalarType "reltime"),("smgr",ScalarType "smgr"),("_text",ArrayType (ScalarType "text")),("text",ScalarType "text"),("_tid",ArrayType (ScalarType "tid")),("tid",ScalarType "tid"),("_time",ArrayType (ScalarType "time")),("time",ScalarType "time"),("_timestamp",ArrayType (ScalarType "timestamp")),("timestamp",ScalarType "timestamp"),("_timestamptz",ArrayType (ScalarType "timestamptz")),("timestamptz",ScalarType "timestamptz"),("_timetz",ArrayType (ScalarType "timetz")),("timetz",ScalarType "timetz"),("_tinterval",ArrayType (ScalarType "tinterval")),("tinterval",ScalarType "tinterval"),("trigger",Pseudo Trigger),("_tsquery",ArrayType (ScalarType "tsquery")),("tsquery",ScalarType "tsquery"),("_tsvector",ArrayType (ScalarType "tsvector")),("tsvector",ScalarType "tsvector"),("_txid_snapshot",ArrayType (ScalarType "txid_snapshot")),("txid_snapshot",ScalarType "txid_snapshot"),("unknown",ScalarType "unknown"),("_uuid",ArrayType (ScalarType "uuid")),("uuid",ScalarType "uuid"),("_varbit",ArrayType (ScalarType "varbit")),("varbit",ScalarType "varbit"),("_varchar",ArrayType (ScalarType "varchar")),("varchar",ScalarType "varchar"),("void",Pseudo Void),("_xid",ArrayType (ScalarType "xid")),("xid",ScalarType "xid"),("_xml",ArrayType (ScalarType "xml")),("xml",ScalarType "xml")], scopeDomainDefs = [], scopeCasts = [(ScalarType "int8",ScalarType "int2",AssignmentCastContext),(ScalarType "int8",ScalarType "int4",AssignmentCastContext),(ScalarType "int8",ScalarType "float4",ImplicitCastContext),(ScalarType "int8",ScalarType "float8",ImplicitCastContext),(ScalarType "int8",ScalarType "numeric",ImplicitCastContext),(ScalarType "int2",ScalarType "int8",ImplicitCastContext),(ScalarType "int2",ScalarType "int4",ImplicitCastContext),(ScalarType "int2",ScalarType "float4",ImplicitCastContext),(ScalarType "int2",ScalarType "float8",ImplicitCastContext),(ScalarType "int2",ScalarType "numeric",ImplicitCastContext),(ScalarType "int4",ScalarType "int8",ImplicitCastContext),(ScalarType "int4",ScalarType "int2",AssignmentCastContext),(ScalarType "int4",ScalarType "float4",ImplicitCastContext),(ScalarType "int4",ScalarType "float8",ImplicitCastContext),(ScalarType "int4",ScalarType "numeric",ImplicitCastContext),(ScalarType "float4",ScalarType "int8",AssignmentCastContext),(ScalarType "float4",ScalarType "int2",AssignmentCastContext),(ScalarType "float4",ScalarType "int4",AssignmentCastContext),(ScalarType "float4",ScalarType "float8",ImplicitCastContext),(ScalarType "float4",ScalarType "numeric",AssignmentCastContext),(ScalarType "float8",ScalarType "int8",AssignmentCastContext),(ScalarType "float8",ScalarType "int2",AssignmentCastContext),(ScalarType "float8",ScalarType "int4",AssignmentCastContext),(ScalarType "float8",ScalarType "float4",AssignmentCastContext),(ScalarType "float8",ScalarType "numeric",AssignmentCastContext),(ScalarType "numeric",ScalarType "int8",AssignmentCastContext),(ScalarType "numeric",ScalarType "int2",AssignmentCastContext),(ScalarType "numeric",ScalarType "int4",AssignmentCastContext),(ScalarType "numeric",ScalarType "float4",ImplicitCastContext),(ScalarType "numeric",ScalarType "float8",ImplicitCastContext),(ScalarType "int4",ScalarType "bool",ExplicitCastContext),(ScalarType "bool",ScalarType "int4",ExplicitCastContext),(ScalarType "int8",ScalarType "oid",ImplicitCastContext),(ScalarType "int2",ScalarType "oid",ImplicitCastContext),(ScalarType "int4",ScalarType "oid",ImplicitCastContext),(ScalarType "oid",ScalarType "int8",AssignmentCastContext),(ScalarType "oid",ScalarType "int4",AssignmentCastContext),(ScalarType "oid",ScalarType "regproc",ImplicitCastContext),(ScalarType "regproc",ScalarType "oid",ImplicitCastContext),(ScalarType "int8",ScalarType "regproc",ImplicitCastContext),(ScalarType "int2",ScalarType "regproc",ImplicitCastContext),(ScalarType "int4",ScalarType "regproc",ImplicitCastContext),(ScalarType "regproc",ScalarType "int8",AssignmentCastContext),(ScalarType "regproc",ScalarType "int4",AssignmentCastContext),(ScalarType "regproc",ScalarType "regprocedure",ImplicitCastContext),(ScalarType "regprocedure",ScalarType "regproc",ImplicitCastContext),(ScalarType "oid",ScalarType "regprocedure",ImplicitCastContext),(ScalarType "regprocedure",ScalarType "oid",ImplicitCastContext),(ScalarType "int8",ScalarType "regprocedure",ImplicitCastContext),(ScalarType "int2",ScalarType "regprocedure",ImplicitCastContext),(ScalarType "int4",ScalarType "regprocedure",ImplicitCastContext),(ScalarType "regprocedure",ScalarType "int8",AssignmentCastContext),(ScalarType "regprocedure",ScalarType "int4",AssignmentCastContext),(ScalarType "oid",ScalarType "regoper",ImplicitCastContext),(ScalarType "regoper",ScalarType "oid",ImplicitCastContext),(ScalarType "int8",ScalarType "regoper",ImplicitCastContext),(ScalarType "int2",ScalarType "regoper",ImplicitCastContext),(ScalarType "int4",ScalarType "regoper",ImplicitCastContext),(ScalarType "regoper",ScalarType "int8",AssignmentCastContext),(ScalarType "regoper",ScalarType "int4",AssignmentCastContext),(ScalarType "regoper",ScalarType "regoperator",ImplicitCastContext),(ScalarType "regoperator",ScalarType "regoper",ImplicitCastContext),(ScalarType "oid",ScalarType "regoperator",ImplicitCastContext),(ScalarType "regoperator",ScalarType "oid",ImplicitCastContext),(ScalarType "int8",ScalarType "regoperator",ImplicitCastContext),(ScalarType "int2",ScalarType "regoperator",ImplicitCastContext),(ScalarType "int4",ScalarType "regoperator",ImplicitCastContext),(ScalarType "regoperator",ScalarType "int8",AssignmentCastContext),(ScalarType "regoperator",ScalarType "int4",AssignmentCastContext),(ScalarType "oid",ScalarType "regclass",ImplicitCastContext),(ScalarType "regclass",ScalarType "oid",ImplicitCastContext),(ScalarType "int8",ScalarType "regclass",ImplicitCastContext),(ScalarType "int2",ScalarType "regclass",ImplicitCastContext),(ScalarType "int4",ScalarType "regclass",ImplicitCastContext),(ScalarType "regclass",ScalarType "int8",AssignmentCastContext),(ScalarType "regclass",ScalarType "int4",AssignmentCastContext),(ScalarType "oid",ScalarType "regtype",ImplicitCastContext),(ScalarType "regtype",ScalarType "oid",ImplicitCastContext),(ScalarType "int8",ScalarType "regtype",ImplicitCastContext),(ScalarType "int2",ScalarType "regtype",ImplicitCastContext),(ScalarType "int4",ScalarType "regtype",ImplicitCastContext),(ScalarType "regtype",ScalarType "int8",AssignmentCastContext),(ScalarType "regtype",ScalarType "int4",AssignmentCastContext),(ScalarType "oid",ScalarType "regconfig",ImplicitCastContext),(ScalarType "regconfig",ScalarType "oid",ImplicitCastContext),(ScalarType "int8",ScalarType "regconfig",ImplicitCastContext),(ScalarType "int2",ScalarType "regconfig",ImplicitCastContext),(ScalarType "int4",ScalarType "regconfig",ImplicitCastContext),(ScalarType "regconfig",ScalarType "int8",AssignmentCastContext),(ScalarType "regconfig",ScalarType "int4",AssignmentCastContext),(ScalarType "oid",ScalarType "regdictionary",ImplicitCastContext),(ScalarType "regdictionary",ScalarType "oid",ImplicitCastContext),(ScalarType "int8",ScalarType "regdictionary",ImplicitCastContext),(ScalarType "int2",ScalarType "regdictionary",ImplicitCastContext),(ScalarType "int4",ScalarType "regdictionary",ImplicitCastContext),(ScalarType "regdictionary",ScalarType "int8",AssignmentCastContext),(ScalarType "regdictionary",ScalarType "int4",AssignmentCastContext),(ScalarType "text",ScalarType "regclass",ImplicitCastContext),(ScalarType "varchar",ScalarType "regclass",ImplicitCastContext),(ScalarType "text",ScalarType "bpchar",ImplicitCastContext),(ScalarType "text",ScalarType "varchar",ImplicitCastContext),(ScalarType "bpchar",ScalarType "text",ImplicitCastContext),(ScalarType "bpchar",ScalarType "varchar",ImplicitCastContext),(ScalarType "varchar",ScalarType "text",ImplicitCastContext),(ScalarType "varchar",ScalarType "bpchar",ImplicitCastContext),(ScalarType "char",ScalarType "text",ImplicitCastContext),(ScalarType "char",ScalarType "bpchar",AssignmentCastContext),(ScalarType "char",ScalarType "varchar",AssignmentCastContext),(ScalarType "name",ScalarType "text",ImplicitCastContext),(ScalarType "name",ScalarType "bpchar",AssignmentCastContext),(ScalarType "name",ScalarType "varchar",AssignmentCastContext),(ScalarType "text",ScalarType "char",AssignmentCastContext),(ScalarType "bpchar",ScalarType "char",AssignmentCastContext),(ScalarType "varchar",ScalarType "char",AssignmentCastContext),(ScalarType "text",ScalarType "name",ImplicitCastContext),(ScalarType "bpchar",ScalarType "name",ImplicitCastContext),(ScalarType "varchar",ScalarType "name",ImplicitCastContext),(ScalarType "char",ScalarType "int4",ExplicitCastContext),(ScalarType "int4",ScalarType "char",ExplicitCastContext),(ScalarType "abstime",ScalarType "date",AssignmentCastContext),(ScalarType "abstime",ScalarType "time",AssignmentCastContext),(ScalarType "abstime",ScalarType "timestamp",ImplicitCastContext),(ScalarType "abstime",ScalarType "timestamptz",ImplicitCastContext),(ScalarType "reltime",ScalarType "interval",ImplicitCastContext),(ScalarType "date",ScalarType "timestamp",ImplicitCastContext),(ScalarType "date",ScalarType "timestamptz",ImplicitCastContext),(ScalarType "time",ScalarType "interval",ImplicitCastContext),(ScalarType "time",ScalarType "timetz",ImplicitCastContext),(ScalarType "timestamp",ScalarType "abstime",AssignmentCastContext),(ScalarType "timestamp",ScalarType "date",AssignmentCastContext),(ScalarType "timestamp",ScalarType "time",AssignmentCastContext),(ScalarType "timestamp",ScalarType "timestamptz",ImplicitCastContext),(ScalarType "timestamptz",ScalarType "abstime",AssignmentCastContext),(ScalarType "timestamptz",ScalarType "date",AssignmentCastContext),(ScalarType "timestamptz",ScalarType "time",AssignmentCastContext),(ScalarType "timestamptz",ScalarType "timestamp",AssignmentCastContext),(ScalarType "timestamptz",ScalarType "timetz",AssignmentCastContext),(ScalarType "interval",ScalarType "reltime",AssignmentCastContext),(ScalarType "interval",ScalarType "time",AssignmentCastContext),(ScalarType "timetz",ScalarType "time",AssignmentCastContext),(ScalarType "int4",ScalarType "abstime",ExplicitCastContext),(ScalarType "abstime",ScalarType "int4",ExplicitCastContext),(ScalarType "int4",ScalarType "reltime",ExplicitCastContext),(ScalarType "reltime",ScalarType "int4",ExplicitCastContext),(ScalarType "lseg",ScalarType "point",ExplicitCastContext),(ScalarType "path",ScalarType "point",ExplicitCastContext),(ScalarType "path",ScalarType "polygon",AssignmentCastContext),(ScalarType "box",ScalarType "point",ExplicitCastContext),(ScalarType "box",ScalarType "lseg",ExplicitCastContext),(ScalarType "box",ScalarType "polygon",AssignmentCastContext),(ScalarType "box",ScalarType "circle",ExplicitCastContext),(ScalarType "polygon",ScalarType "point",ExplicitCastContext),(ScalarType "polygon",ScalarType "path",AssignmentCastContext),(ScalarType "polygon",ScalarType "box",ExplicitCastContext),(ScalarType "polygon",ScalarType "circle",ExplicitCastContext),(ScalarType "circle",ScalarType "point",ExplicitCastContext),(ScalarType "circle",ScalarType "box",ExplicitCastContext),(ScalarType "circle",ScalarType "polygon",ExplicitCastContext),(ScalarType "cidr",ScalarType "inet",ImplicitCastContext),(ScalarType "inet",ScalarType "cidr",AssignmentCastContext),(ScalarType "bit",ScalarType "varbit",ImplicitCastContext),(ScalarType "varbit",ScalarType "bit",ImplicitCastContext),(ScalarType "int8",ScalarType "bit",ExplicitCastContext),(ScalarType "int4",ScalarType "bit",ExplicitCastContext),(ScalarType "bit",ScalarType "int8",ExplicitCastContext),(ScalarType "bit",ScalarType "int4",ExplicitCastContext),(ScalarType "cidr",ScalarType "text",AssignmentCastContext),(ScalarType "inet",ScalarType "text",AssignmentCastContext),(ScalarType "bool",ScalarType "text",AssignmentCastContext),(ScalarType "xml",ScalarType "text",AssignmentCastContext),(ScalarType "text",ScalarType "xml",ExplicitCastContext),(ScalarType "cidr",ScalarType "varchar",AssignmentCastContext),(ScalarType "inet",ScalarType "varchar",AssignmentCastContext),(ScalarType "bool",ScalarType "varchar",AssignmentCastContext),(ScalarType "xml",ScalarType "varchar",AssignmentCastContext),(ScalarType "varchar",ScalarType "xml",ExplicitCastContext),(ScalarType "cidr",ScalarType "bpchar",AssignmentCastContext),(ScalarType "inet",ScalarType "bpchar",AssignmentCastContext),(ScalarType "bool",ScalarType "bpchar",AssignmentCastContext),(ScalarType "xml",ScalarType "bpchar",AssignmentCastContext),(ScalarType "bpchar",ScalarType "xml",ExplicitCastContext),(ScalarType "bpchar",ScalarType "bpchar",ImplicitCastContext),(ScalarType "varchar",ScalarType "varchar",ImplicitCastContext),(ScalarType "time",ScalarType "time",ImplicitCastContext),(ScalarType "timestamp",ScalarType "timestamp",ImplicitCastContext),(ScalarType "timestamptz",ScalarType "timestamptz",ImplicitCastContext),(ScalarType "interval",ScalarType "interval",ImplicitCastContext),(ScalarType "timetz",ScalarType "timetz",ImplicitCastContext),(ScalarType "bit",ScalarType "bit",ImplicitCastContext),(ScalarType "varbit",ScalarType "varbit",ImplicitCastContext),(ScalarType "numeric",ScalarType "numeric",ImplicitCastContext)], scopeTypeCategories = [(ScalarType "bool","B",True),(ScalarType "bytea","U",False),(ScalarType "char","S",False),(ScalarType "name","S",False),(ScalarType "int8","N",False),(ScalarType "int2","N",False),(ScalarType "int2vector","A",False),(ScalarType "int4","N",False),(ScalarType "regproc","N",False),(ScalarType "text","S",True),(ScalarType "oid","N",True),(ScalarType "tid","U",False),(ScalarType "xid","U",False),(ScalarType "cid","U",False),(ScalarType "oidvector","A",False),(CompositeType "pg_type","C",False),(CompositeType "pg_attribute","C",False),(CompositeType "pg_proc","C",False),(CompositeType "pg_class","C",False),(ScalarType "xml","U",False),(ArrayType (ScalarType "xml"),"A",False),(ScalarType "smgr","U",False),(ScalarType "point","G",False),(ScalarType "lseg","G",False),(ScalarType "path","G",False),(ScalarType "box","G",False),(ScalarType "polygon","G",False),(ScalarType "line","G",False),(ArrayType (ScalarType "line"),"A",False),(ScalarType "float4","N",False),(ScalarType "float8","N",True),(ScalarType "abstime","D",False),(ScalarType "reltime","T",False),(ScalarType "tinterval","T",False),(ScalarType "unknown","X",False),(ScalarType "circle","G",False),(ArrayType (ScalarType "circle"),"A",False),(ScalarType "money","N",False),(ArrayType (ScalarType "money"),"A",False),(ScalarType "macaddr","U",False),(ScalarType "inet","I",True),(ScalarType "cidr","I",False),(ArrayType (ScalarType "bool"),"A",False),(ArrayType (ScalarType "bytea"),"A",False),(ArrayType (ScalarType "char"),"A",False),(ArrayType (ScalarType "name"),"A",False),(ArrayType (ScalarType "int2"),"A",False),(ArrayType (ScalarType "int2vector"),"A",False),(ArrayType (ScalarType "int4"),"A",False),(ArrayType (ScalarType "regproc"),"A",False),(ArrayType (ScalarType "text"),"A",False),(ArrayType (ScalarType "oid"),"A",False),(ArrayType (ScalarType "tid"),"A",False),(ArrayType (ScalarType "xid"),"A",False),(ArrayType (ScalarType "cid"),"A",False),(ArrayType (ScalarType "oidvector"),"A",False),(ArrayType (ScalarType "bpchar"),"A",False),(ArrayType (ScalarType "varchar"),"A",False),(ArrayType (ScalarType "int8"),"A",False),(ArrayType (ScalarType "point"),"A",False),(ArrayType (ScalarType "lseg"),"A",False),(ArrayType (ScalarType "path"),"A",False),(ArrayType (ScalarType "box"),"A",False),(ArrayType (ScalarType "float4"),"A",False),(ArrayType (ScalarType "float8"),"A",False),(ArrayType (ScalarType "abstime"),"A",False),(ArrayType (ScalarType "reltime"),"A",False),(ArrayType (ScalarType "tinterval"),"A",False),(ArrayType (ScalarType "polygon"),"A",False),(ScalarType "aclitem","U",False),(ArrayType (ScalarType "aclitem"),"A",False),(ArrayType (ScalarType "macaddr"),"A",False),(ArrayType (ScalarType "inet"),"A",False),(ArrayType (ScalarType "cidr"),"A",False),(ArrayType (Pseudo Cstring),"A",False),(ScalarType "bpchar","S",False),(ScalarType "varchar","S",False),(ScalarType "date","D",False),(ScalarType "time","D",False),(ScalarType "timestamp","D",False),(ArrayType (ScalarType "timestamp"),"A",False),(ArrayType (ScalarType "date"),"A",False),(ArrayType (ScalarType "time"),"A",False),(ScalarType "timestamptz","D",True),(ArrayType (ScalarType "timestamptz"),"A",False),(ScalarType "interval","T",True),(ArrayType (ScalarType "interval"),"A",False),(ArrayType (ScalarType "numeric"),"A",False),(ScalarType "timetz","D",False),(ArrayType (ScalarType "timetz"),"A",False),(ScalarType "bit","V",False),(ArrayType (ScalarType "bit"),"A",False),(ScalarType "varbit","V",True),(ArrayType (ScalarType "varbit"),"A",False),(ScalarType "numeric","N",False),(ScalarType "refcursor","U",False),(ArrayType (ScalarType "refcursor"),"A",False),(ScalarType "regprocedure","N",False),(ScalarType "regoper","N",False),(ScalarType "regoperator","N",False),(ScalarType "regclass","N",False),(ScalarType "regtype","N",False),(ArrayType (ScalarType "regprocedure"),"A",False),(ArrayType (ScalarType "regoper"),"A",False),(ArrayType (ScalarType "regoperator"),"A",False),(ArrayType (ScalarType "regclass"),"A",False),(ArrayType (ScalarType "regtype"),"A",False),(ScalarType "uuid","U",False),(ArrayType (ScalarType "uuid"),"A",False),(ScalarType "tsvector","U",False),(ScalarType "gtsvector","U",False),(ScalarType "tsquery","U",False),(ScalarType "regconfig","N",False),(ScalarType "regdictionary","N",False),(ArrayType (ScalarType "tsvector"),"A",False),(ArrayType (ScalarType "gtsvector"),"A",False),(ArrayType (ScalarType "tsquery"),"A",False),(ArrayType (ScalarType "regconfig"),"A",False),(ArrayType (ScalarType "regdictionary"),"A",False),(ScalarType "txid_snapshot","U",False),(ArrayType (ScalarType "txid_snapshot"),"A",False),(Pseudo Record,"P",False),(ArrayType (Pseudo Record),"P",False),(Pseudo Cstring,"P",False),(Pseudo Any,"P",False),(Pseudo AnyArray,"P",False),(Pseudo Void,"P",False),(Pseudo Trigger,"P",False),(Pseudo LanguageHandler,"P",False),(Pseudo Internal,"P",False),(Pseudo Opaque,"P",False),(Pseudo AnyElement,"P",False),(Pseudo AnyNonArray,"P",False),(Pseudo AnyEnum,"P",False),(CompositeType "pg_attrdef","C",False),(CompositeType "pg_constraint","C",False),(CompositeType "pg_inherits","C",False),(CompositeType "pg_index","C",False),(CompositeType "pg_operator","C",False),(CompositeType "pg_opfamily","C",False),(CompositeType "pg_opclass","C",False),(CompositeType "pg_am","C",False),(CompositeType "pg_amop","C",False),(CompositeType "pg_amproc","C",False),(CompositeType "pg_language","C",False),(CompositeType "pg_largeobject","C",False),(CompositeType "pg_aggregate","C",False),(CompositeType "pg_statistic","C",False),(CompositeType "pg_rewrite","C",False),(CompositeType "pg_trigger","C",False),(CompositeType "pg_listener","C",False),(CompositeType "pg_description","C",False),(CompositeType "pg_cast","C",False),(CompositeType "pg_enum","C",False),(CompositeType "pg_namespace","C",False),(CompositeType "pg_conversion","C",False),(CompositeType "pg_depend","C",False),(CompositeType "pg_database","C",False),(CompositeType "pg_tablespace","C",False),(CompositeType "pg_pltemplate","C",False),(CompositeType "pg_authid","C",False),(CompositeType "pg_auth_members","C",False),(CompositeType "pg_shdepend","C",False),(CompositeType "pg_shdescription","C",False),(CompositeType "pg_ts_config","C",False),(CompositeType "pg_ts_config_map","C",False),(CompositeType "pg_ts_dict","C",False),(CompositeType "pg_ts_parser","C",False),(CompositeType "pg_ts_template","C",False),(CompositeType "pg_foreign_data_wrapper","C",False),(CompositeType "pg_foreign_server","C",False),(CompositeType "pg_user_mapping","C",False),(CompositeType "pg_roles","C",False),(CompositeType "pg_shadow","C",False),(CompositeType "pg_group","C",False),(CompositeType "pg_user","C",False),(CompositeType "pg_rules","C",False),(CompositeType "pg_views","C",False),(CompositeType "pg_tables","C",False),(CompositeType "pg_indexes","C",False),(CompositeType "pg_stats","C",False),(CompositeType "pg_locks","C",False),(CompositeType "pg_cursors","C",False),(CompositeType "pg_prepared_xacts","C",False),(CompositeType "pg_prepared_statements","C",False),(CompositeType "pg_settings","C",False),(CompositeType "pg_timezone_abbrevs","C",False),(CompositeType "pg_timezone_names","C",False),(CompositeType "pg_stat_all_tables","C",False),(CompositeType "pg_stat_sys_tables","C",False),(CompositeType "pg_stat_user_tables","C",False),(CompositeType "pg_statio_all_tables","C",False),(CompositeType "pg_statio_sys_tables","C",False),(CompositeType "pg_statio_user_tables","C",False),(CompositeType "pg_stat_all_indexes","C",False),(CompositeType "pg_stat_sys_indexes","C",False),(CompositeType "pg_stat_user_indexes","C",False),(CompositeType "pg_statio_all_indexes","C",False),(CompositeType "pg_statio_sys_indexes","C",False),(CompositeType "pg_statio_user_indexes","C",False),(CompositeType "pg_statio_all_sequences","C",False),(CompositeType "pg_statio_sys_sequences","C",False),(CompositeType "pg_statio_user_sequences","C",False),(CompositeType "pg_stat_activity","C",False),(CompositeType "pg_stat_database","C",False),(CompositeType "pg_stat_user_functions","C",False),(CompositeType "pg_stat_bgwriter","C",False),(CompositeType "pg_user_mappings","C",False)], scopePrefixOperators = [("~",[ScalarType "int8"],ScalarType "int8"),("~",[ScalarType "int4"],ScalarType "int4"),("~",[ScalarType "int2"],ScalarType "int2"),("~",[ScalarType "bit"],ScalarType "bit"),("~",[ScalarType "inet"],ScalarType "inet"),("||/",[ScalarType "float8"],ScalarType "float8"),("|/",[ScalarType "float8"],ScalarType "float8"),("|",[ScalarType "tinterval"],ScalarType "abstime"),("@@",[ScalarType "circle"],ScalarType "point"),("@@",[ScalarType "lseg"],ScalarType "point"),("@@",[ScalarType "path"],ScalarType "point"),("@@",[ScalarType "polygon"],ScalarType "point"),("@@",[ScalarType "box"],ScalarType "point"),("@-@",[ScalarType "path"],ScalarType "float8"),("@-@",[ScalarType "lseg"],ScalarType "float8"),("@",[ScalarType "int8"],ScalarType "int8"),("@",[ScalarType "int4"],ScalarType "int4"),("@",[ScalarType "int2"],ScalarType "int2"),("@",[ScalarType "float8"],ScalarType "float8"),("@",[ScalarType "float4"],ScalarType "float4"),("@",[ScalarType "numeric"],ScalarType "numeric"),("?|",[ScalarType "line"],ScalarType "bool"),("?|",[ScalarType "lseg"],ScalarType "bool"),("?-",[ScalarType "lseg"],ScalarType "bool"),("?-",[ScalarType "line"],ScalarType "bool"),("-",[ScalarType "interval"],ScalarType "interval"),("-",[ScalarType "numeric"],ScalarType "numeric"),("-",[ScalarType "float8"],ScalarType "float8"),("-",[ScalarType "float4"],ScalarType "float4"),("-",[ScalarType "int2"],ScalarType "int2"),("-",[ScalarType "int4"],ScalarType "int4"),("-",[ScalarType "int8"],ScalarType "int8"),("+",[ScalarType "int2"],ScalarType "int2"),("+",[ScalarType "float8"],ScalarType "float8"),("+",[ScalarType "numeric"],ScalarType "numeric"),("+",[ScalarType "int8"],ScalarType "int8"),("+",[ScalarType "float4"],ScalarType "float4"),("+",[ScalarType "int4"],ScalarType "int4"),("#",[ScalarType "path"],ScalarType "int4"),("#",[ScalarType "polygon"],ScalarType "int4"),("!!",[ScalarType "int8"],ScalarType "numeric"),("!!",[ScalarType "tsquery"],ScalarType "tsquery")], scopePostfixOperators = [("!",[ScalarType "int8"],ScalarType "numeric")], scopeBinaryOperators = [("~~*",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("~~*",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("~~*",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("~~",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("~~",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("~~",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("~~",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("~>~",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("~>~",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("~>=~",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("~>=~",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("~=",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("~=",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("~=",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("~=",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("~=",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("~<~",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("~<~",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("~<=~",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("~<=~",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("~*",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("~*",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("~*",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("~",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("~",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("~",[ArrayType (ScalarType "aclitem"),ScalarType "aclitem"],ScalarType "bool"),("~",[ScalarType "circle",ScalarType "point"],ScalarType "bool"),("~",[ScalarType "polygon",ScalarType "point"],ScalarType "bool"),("~",[ScalarType "path",ScalarType "point"],ScalarType "bool"),("~",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("~",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("~",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("~",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("||",[Pseudo AnyArray,Pseudo AnyArray],Pseudo AnyArray),("||",[ScalarType "text",ScalarType "text"],ScalarType "text"),("||",[ScalarType "varbit",ScalarType "varbit"],ScalarType "varbit"),("||",[Pseudo AnyElement,Pseudo AnyArray],Pseudo AnyArray),("||",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "tsquery"),("||",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bytea"),("||",[Pseudo AnyNonArray,ScalarType "text"],ScalarType "text"),("||",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "tsvector"),("||",[Pseudo AnyArray,Pseudo AnyElement],Pseudo AnyArray),("||",[ScalarType "text",Pseudo AnyNonArray],ScalarType "text"),("|>>",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("|>>",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("|>>",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("|&>",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("|&>",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("|&>",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("|",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("|",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("|",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("|",[ScalarType "inet",ScalarType "inet"],ScalarType "inet"),("|",[ScalarType "bit",ScalarType "bit"],ScalarType "bit"),("^",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("^",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("@@@",[ScalarType "tsquery",ScalarType "tsvector"],ScalarType "bool"),("@@@",[ScalarType "tsvector",ScalarType "tsquery"],ScalarType "bool"),("@@",[ScalarType "text",ScalarType "tsquery"],ScalarType "bool"),("@@",[ScalarType "tsquery",ScalarType "tsvector"],ScalarType "bool"),("@@",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("@@",[ScalarType "tsvector",ScalarType "tsquery"],ScalarType "bool"),("@>",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("@>",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("@>",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("@>",[ScalarType "polygon",ScalarType "point"],ScalarType "bool"),("@>",[ScalarType "path",ScalarType "point"],ScalarType "bool"),("@>",[ArrayType (ScalarType "aclitem"),ScalarType "aclitem"],ScalarType "bool"),("@>",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("@>",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("@>",[ScalarType "circle",ScalarType "point"],ScalarType "bool"),("?||",[ScalarType "line",ScalarType "line"],ScalarType "bool"),("?||",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("?|",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("?-|",[ScalarType "line",ScalarType "line"],ScalarType "bool"),("?-|",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("?-",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("?#",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("?#",[ScalarType "path",ScalarType "path"],ScalarType "bool"),("?#",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("?#",[ScalarType "lseg",ScalarType "line"],ScalarType "bool"),("?#",[ScalarType "line",ScalarType "line"],ScalarType "bool"),("?#",[ScalarType "lseg",ScalarType "box"],ScalarType "bool"),("?#",[ScalarType "line",ScalarType "box"],ScalarType "bool"),(">^",[ScalarType "point",ScalarType "point"],ScalarType "bool"),(">^",[ScalarType "box",ScalarType "box"],ScalarType "bool"),(">>=",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),(">>",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),(">>",[ScalarType "box",ScalarType "box"],ScalarType "bool"),(">>",[ScalarType "point",ScalarType "point"],ScalarType "bool"),(">>",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),(">>",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),(">>",[ScalarType "int2",ScalarType "int4"],ScalarType "int2"),(">>",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),(">>",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),(">>",[ScalarType "bit",ScalarType "int4"],ScalarType "bit"),(">=",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),(">=",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),(">=",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),(">=",[ScalarType "char",ScalarType "char"],ScalarType "bool"),(">=",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),(">=",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),(">=",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),(">=",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),(">=",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),(">=",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),(">=",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),(">=",[ScalarType "date",ScalarType "date"],ScalarType "bool"),(">=",[ScalarType "time",ScalarType "time"],ScalarType "bool"),(">=",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),(">=",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),(">=",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),(">=",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),(">=",[ScalarType "name",ScalarType "name"],ScalarType "bool"),(">=",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),(">=",[ScalarType "text",ScalarType "text"],ScalarType "bool"),(">=",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),(">=",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),(">=",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),(">=",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),(">=",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),(">=",[Pseudo Record,Pseudo Record],ScalarType "bool"),(">=",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),(">=",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),(">=",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),(">=",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),(">=",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),(">=",[ScalarType "box",ScalarType "box"],ScalarType "bool"),(">=",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),(">=",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),(">=",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),(">=",[ScalarType "path",ScalarType "path"],ScalarType "bool"),(">=",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),(">=",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),(">=",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),(">=",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),(">=",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),(">=",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),(">=",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),(">=",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),(">=",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),(">=",[ScalarType "money",ScalarType "money"],ScalarType "bool"),(">=",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),(">=",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),(">=",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),(">=",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),(">=",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),(">=",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),(">=",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),(">",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),(">",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),(">",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),(">",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),(">",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),(">",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),(">",[ScalarType "char",ScalarType "char"],ScalarType "bool"),(">",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),(">",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),(">",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),(">",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),(">",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),(">",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),(">",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),(">",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),(">",[ScalarType "box",ScalarType "box"],ScalarType "bool"),(">",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),(">",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),(">",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),(">",[ScalarType "date",ScalarType "date"],ScalarType "bool"),(">",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),(">",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),(">",[ScalarType "time",ScalarType "time"],ScalarType "bool"),(">",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),(">",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),(">",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),(">",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),(">",[ScalarType "name",ScalarType "name"],ScalarType "bool"),(">",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),(">",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),(">",[ScalarType "path",ScalarType "path"],ScalarType "bool"),(">",[Pseudo Record,Pseudo Record],ScalarType "bool"),(">",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),(">",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),(">",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),(">",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),(">",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),(">",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),(">",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),(">",[ScalarType "text",ScalarType "text"],ScalarType "bool"),(">",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),(">",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),(">",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),(">",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),(">",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),(">",[ScalarType "money",ScalarType "money"],ScalarType "bool"),(">",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),(">",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),(">",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),(">",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),(">",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),(">",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),(">",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),("=",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("=",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),("=",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),("=",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("=",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),("=",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),("=",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),("=",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),("=",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),("=",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),("=",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),("=",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),("=",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),("=",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),("=",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),("=",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),("=",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("=",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),("=",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),("=",[ScalarType "path",ScalarType "path"],ScalarType "bool"),("=",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),("=",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),("=",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),("=",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),("=",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("=",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),("=",[ScalarType "money",ScalarType "money"],ScalarType "bool"),("=",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),("=",[ScalarType "aclitem",ScalarType "aclitem"],ScalarType "bool"),("=",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),("=",[ScalarType "int2vector",ScalarType "int2vector"],ScalarType "bool"),("=",[Pseudo Record,Pseudo Record],ScalarType "bool"),("=",[ScalarType "cid",ScalarType "cid"],ScalarType "bool"),("=",[ScalarType "xid",ScalarType "int4"],ScalarType "bool"),("=",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("=",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("=",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("=",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),("=",[ScalarType "line",ScalarType "line"],ScalarType "bool"),("=",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),("=",[ScalarType "xid",ScalarType "xid"],ScalarType "bool"),("=",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("=",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),("=",[ScalarType "date",ScalarType "date"],ScalarType "bool"),("=",[ScalarType "time",ScalarType "time"],ScalarType "bool"),("=",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),("=",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),("=",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),("=",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),("=",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("=",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("=",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),("=",[ScalarType "name",ScalarType "name"],ScalarType "bool"),("=",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("=",[ScalarType "char",ScalarType "char"],ScalarType "bool"),("=",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("=",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("=",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("=",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),("<^",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("<^",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("<@",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("<@",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("<@",[ScalarType "lseg",ScalarType "box"],ScalarType "bool"),("<@",[ScalarType "lseg",ScalarType "line"],ScalarType "bool"),("<@",[ScalarType "point",ScalarType "line"],ScalarType "bool"),("<@",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("<@",[ScalarType "point",ScalarType "circle"],ScalarType "bool"),("<@",[ScalarType "point",ScalarType "polygon"],ScalarType "bool"),("<@",[ScalarType "point",ScalarType "path"],ScalarType "bool"),("<@",[ScalarType "point",ScalarType "box"],ScalarType "bool"),("<@",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("<@",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("<@",[ScalarType "point",ScalarType "lseg"],ScalarType "bool"),("<?>",[ScalarType "abstime",ScalarType "tinterval"],ScalarType "bool"),("<>",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),("<>",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("<>",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),("<>",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),("<>",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),("<>",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),("<>",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),("<>",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),("<>",[ScalarType "time",ScalarType "time"],ScalarType "bool"),("<>",[ScalarType "date",ScalarType "date"],ScalarType "bool"),("<>",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),("<>",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),("<>",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("<>",[ScalarType "char",ScalarType "char"],ScalarType "bool"),("<>",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),("<>",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("<>",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),("<>",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("<>",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("<>",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("<>",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),("<>",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),("<>",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),("<>",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),("<>",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),("<>",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("<>",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),("<>",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),("<>",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("<>",[ScalarType "name",ScalarType "name"],ScalarType "bool"),("<>",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),("<>",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("<>",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),("<>",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),("<>",[ScalarType "money",ScalarType "money"],ScalarType "bool"),("<>",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),("<>",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),("<>",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("<>",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("<>",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),("<>",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),("<>",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),("<>",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),("<>",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),("<>",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("<>",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),("<>",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("<>",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),("<>",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),("<>",[Pseudo Record,Pseudo Record],ScalarType "bool"),("<>",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("<>",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),("<=",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),("<=",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),("<=",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),("<=",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),("<=",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),("<=",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),("<=",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),("<=",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),("<=",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),("<=",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),("<=",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),("<=",[ScalarType "time",ScalarType "time"],ScalarType "bool"),("<=",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),("<=",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),("<=",[ScalarType "date",ScalarType "date"],ScalarType "bool"),("<=",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("<=",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("<=",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),("<=",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("<=",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("<=",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),("<=",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),("<=",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),("<=",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("<=",[ScalarType "money",ScalarType "money"],ScalarType "bool"),("<=",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("<=",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),("<=",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("<=",[Pseudo Record,Pseudo Record],ScalarType "bool"),("<=",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),("<=",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),("<=",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("<=",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),("<=",[ScalarType "path",ScalarType "path"],ScalarType "bool"),("<=",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),("<=",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),("<=",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("<=",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),("<=",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("<=",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("<=",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),("<=",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),("<=",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("<=",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),("<=",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("<=",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),("<=",[ScalarType "name",ScalarType "name"],ScalarType "bool"),("<=",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),("<=",[ScalarType "char",ScalarType "char"],ScalarType "bool"),("<=",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),("<=",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),("<=",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),("<=",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("<<|",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("<<|",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("<<|",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("<<=",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("<<",[ScalarType "int2",ScalarType "int4"],ScalarType "int2"),("<<",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("<<",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("<<",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("<<",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("<<",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("<<",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("<<",[ScalarType "bit",ScalarType "int4"],ScalarType "bit"),("<<",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("<<",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("<->",[ScalarType "point",ScalarType "point"],ScalarType "float8"),("<->",[ScalarType "circle",ScalarType "polygon"],ScalarType "float8"),("<->",[ScalarType "point",ScalarType "line"],ScalarType "float8"),("<->",[ScalarType "point",ScalarType "path"],ScalarType "float8"),("<->",[ScalarType "circle",ScalarType "circle"],ScalarType "float8"),("<->",[ScalarType "point",ScalarType "circle"],ScalarType "float8"),("<->",[ScalarType "lseg",ScalarType "box"],ScalarType "float8"),("<->",[ScalarType "point",ScalarType "lseg"],ScalarType "float8"),("<->",[ScalarType "lseg",ScalarType "line"],ScalarType "float8"),("<->",[ScalarType "point",ScalarType "box"],ScalarType "float8"),("<->",[ScalarType "box",ScalarType "box"],ScalarType "float8"),("<->",[ScalarType "polygon",ScalarType "polygon"],ScalarType "float8"),("<->",[ScalarType "lseg",ScalarType "lseg"],ScalarType "float8"),("<->",[ScalarType "line",ScalarType "line"],ScalarType "float8"),("<->",[ScalarType "path",ScalarType "path"],ScalarType "float8"),("<->",[ScalarType "line",ScalarType "box"],ScalarType "float8"),("<#>",[ScalarType "abstime",ScalarType "abstime"],ScalarType "tinterval"),("<",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),("<",[ScalarType "money",ScalarType "money"],ScalarType "bool"),("<",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),("<",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),("<",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),("<",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),("<",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("<",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),("<",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("<",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),("<",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),("<",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),("<",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),("<",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("<",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("<",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),("<",[ScalarType "path",ScalarType "path"],ScalarType "bool"),("<",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),("<",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),("<",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("<",[ScalarType "char",ScalarType "char"],ScalarType "bool"),("<",[Pseudo Record,Pseudo Record],ScalarType "bool"),("<",[ScalarType "name",ScalarType "name"],ScalarType "bool"),("<",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("<",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),("<",[ScalarType "date",ScalarType "date"],ScalarType "bool"),("<",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),("<",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("<",[ScalarType "time",ScalarType "time"],ScalarType "bool"),("<",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),("<",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),("<",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("<",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("<",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),("<",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),("<",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),("<",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("<",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),("<",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("<",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),("<",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),("<",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),("<",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),("<",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("<",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),("<",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("<",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),("<",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),("<",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),("<",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),("<",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),("<",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),("<",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("/",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("/",[ScalarType "int2",ScalarType "int8"],ScalarType "int8"),("/",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("/",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("/",[ScalarType "money",ScalarType "float4"],ScalarType "money"),("/",[ScalarType "int8",ScalarType "int2"],ScalarType "int8"),("/",[ScalarType "int4",ScalarType "int2"],ScalarType "int4"),("/",[ScalarType "point",ScalarType "point"],ScalarType "point"),("/",[ScalarType "circle",ScalarType "point"],ScalarType "circle"),("/",[ScalarType "int4",ScalarType "int8"],ScalarType "int8"),("/",[ScalarType "float8",ScalarType "float4"],ScalarType "float8"),("/",[ScalarType "money",ScalarType "int4"],ScalarType "money"),("/",[ScalarType "path",ScalarType "point"],ScalarType "path"),("/",[ScalarType "interval",ScalarType "float8"],ScalarType "interval"),("/",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("/",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("/",[ScalarType "int2",ScalarType "int4"],ScalarType "int4"),("/",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("/",[ScalarType "float4",ScalarType "float8"],ScalarType "float8"),("/",[ScalarType "money",ScalarType "int2"],ScalarType "money"),("/",[ScalarType "float4",ScalarType "float4"],ScalarType "float4"),("/",[ScalarType "money",ScalarType "float8"],ScalarType "money"),("/",[ScalarType "box",ScalarType "point"],ScalarType "box"),("-",[ScalarType "interval",ScalarType "interval"],ScalarType "interval"),("-",[ScalarType "timestamptz",ScalarType "interval"],ScalarType "timestamptz"),("-",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "interval"),("-",[ScalarType "circle",ScalarType "point"],ScalarType "circle"),("-",[ScalarType "float8",ScalarType "float4"],ScalarType "float8"),("-",[ScalarType "float4",ScalarType "float8"],ScalarType "float8"),("-",[ScalarType "date",ScalarType "int4"],ScalarType "date"),("-",[ScalarType "date",ScalarType "date"],ScalarType "int4"),("-",[ScalarType "date",ScalarType "interval"],ScalarType "timestamp"),("-",[ArrayType (ScalarType "aclitem"),ScalarType "aclitem"],ArrayType (ScalarType "aclitem")),("-",[ScalarType "money",ScalarType "money"],ScalarType "money"),("-",[ScalarType "inet",ScalarType "int8"],ScalarType "inet"),("-",[ScalarType "inet",ScalarType "inet"],ScalarType "int8"),("-",[ScalarType "box",ScalarType "point"],ScalarType "box"),("-",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("-",[ScalarType "path",ScalarType "point"],ScalarType "path"),("-",[ScalarType "point",ScalarType "point"],ScalarType "point"),("-",[ScalarType "int2",ScalarType "int8"],ScalarType "int8"),("-",[ScalarType "int8",ScalarType "int2"],ScalarType "int8"),("-",[ScalarType "int4",ScalarType "int8"],ScalarType "int8"),("-",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("-",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("-",[ScalarType "time",ScalarType "interval"],ScalarType "time"),("-",[ScalarType "timetz",ScalarType "interval"],ScalarType "timetz"),("-",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("-",[ScalarType "float4",ScalarType "float4"],ScalarType "float4"),("-",[ScalarType "abstime",ScalarType "reltime"],ScalarType "abstime"),("-",[ScalarType "int4",ScalarType "int2"],ScalarType "int4"),("-",[ScalarType "int2",ScalarType "int4"],ScalarType "int4"),("-",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("-",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("-",[ScalarType "timestamp",ScalarType "interval"],ScalarType "timestamp"),("-",[ScalarType "time",ScalarType "time"],ScalarType "interval"),("-",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "interval"),("+",[ScalarType "interval",ScalarType "interval"],ScalarType "interval"),("+",[ScalarType "date",ScalarType "time"],ScalarType "timestamp"),("+",[ScalarType "int4",ScalarType "int2"],ScalarType "int4"),("+",[ScalarType "int2",ScalarType "int4"],ScalarType "int4"),("+",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("+",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("+",[ScalarType "timetz",ScalarType "interval"],ScalarType "timetz"),("+",[ScalarType "time",ScalarType "interval"],ScalarType "time"),("+",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("+",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("+",[ScalarType "int4",ScalarType "int8"],ScalarType "int8"),("+",[ScalarType "timestamp",ScalarType "interval"],ScalarType "timestamp"),("+",[ScalarType "time",ScalarType "date"],ScalarType "timestamp"),("+",[ScalarType "int8",ScalarType "int2"],ScalarType "int8"),("+",[ScalarType "date",ScalarType "timetz"],ScalarType "timestamptz"),("+",[ScalarType "int2",ScalarType "int8"],ScalarType "int8"),("+",[ScalarType "point",ScalarType "point"],ScalarType "point"),("+",[ScalarType "path",ScalarType "path"],ScalarType "path"),("+",[ScalarType "path",ScalarType "point"],ScalarType "path"),("+",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("+",[ScalarType "box",ScalarType "point"],ScalarType "box"),("+",[ScalarType "money",ScalarType "money"],ScalarType "money"),("+",[ScalarType "int8",ScalarType "inet"],ScalarType "inet"),("+",[ArrayType (ScalarType "aclitem"),ScalarType "aclitem"],ArrayType (ScalarType "aclitem")),("+",[ScalarType "inet",ScalarType "int8"],ScalarType "inet"),("+",[ScalarType "interval",ScalarType "date"],ScalarType "timestamp"),("+",[ScalarType "date",ScalarType "interval"],ScalarType "timestamp"),("+",[ScalarType "timetz",ScalarType "date"],ScalarType "timestamptz"),("+",[ScalarType "interval",ScalarType "timetz"],ScalarType "timetz"),("+",[ScalarType "interval",ScalarType "timestamp"],ScalarType "timestamp"),("+",[ScalarType "date",ScalarType "int4"],ScalarType "date"),("+",[ScalarType "interval",ScalarType "timestamptz"],ScalarType "timestamptz"),("+",[ScalarType "int4",ScalarType "date"],ScalarType "date"),("+",[ScalarType "float4",ScalarType "float8"],ScalarType "float8"),("+",[ScalarType "float8",ScalarType "float4"],ScalarType "float8"),("+",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("+",[ScalarType "float4",ScalarType "float4"],ScalarType "float4"),("+",[ScalarType "circle",ScalarType "point"],ScalarType "circle"),("+",[ScalarType "timestamptz",ScalarType "interval"],ScalarType "timestamptz"),("+",[ScalarType "abstime",ScalarType "reltime"],ScalarType "abstime"),("+",[ScalarType "interval",ScalarType "time"],ScalarType "time"),("*",[ScalarType "point",ScalarType "point"],ScalarType "point"),("*",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("*",[ScalarType "path",ScalarType "point"],ScalarType "path"),("*",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("*",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("*",[ScalarType "box",ScalarType "point"],ScalarType "box"),("*",[ScalarType "money",ScalarType "float4"],ScalarType "money"),("*",[ScalarType "float4",ScalarType "money"],ScalarType "money"),("*",[ScalarType "money",ScalarType "float8"],ScalarType "money"),("*",[ScalarType "money",ScalarType "int4"],ScalarType "money"),("*",[ScalarType "money",ScalarType "int2"],ScalarType "money"),("*",[ScalarType "float8",ScalarType "money"],ScalarType "money"),("*",[ScalarType "int4",ScalarType "money"],ScalarType "money"),("*",[ScalarType "int2",ScalarType "money"],ScalarType "money"),("*",[ScalarType "circle",ScalarType "point"],ScalarType "circle"),("*",[ScalarType "float4",ScalarType "float4"],ScalarType "float4"),("*",[ScalarType "float8",ScalarType "interval"],ScalarType "interval"),("*",[ScalarType "interval",ScalarType "float8"],ScalarType "interval"),("*",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("*",[ScalarType "int4",ScalarType "int2"],ScalarType "int4"),("*",[ScalarType "int2",ScalarType "int4"],ScalarType "int4"),("*",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("*",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("*",[ScalarType "float4",ScalarType "float8"],ScalarType "float8"),("*",[ScalarType "int4",ScalarType "int8"],ScalarType "int8"),("*",[ScalarType "int8",ScalarType "int2"],ScalarType "int8"),("*",[ScalarType "int2",ScalarType "int8"],ScalarType "int8"),("*",[ScalarType "float8",ScalarType "float4"],ScalarType "float8"),("&>",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("&>",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("&>",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("&<|",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("&<|",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("&<|",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("&<",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("&<",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("&<",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("&&",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("&&",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("&&",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("&&",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("&&",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("&&",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "tsquery"),("&",[ScalarType "inet",ScalarType "inet"],ScalarType "inet"),("&",[ScalarType "bit",ScalarType "bit"],ScalarType "bit"),("&",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("&",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("&",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("%",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("%",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("%",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("%",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("#>=",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("#>",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("#=",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("#<>",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("#<=",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("#<",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("##",[ScalarType "line",ScalarType "lseg"],ScalarType "point"),("##",[ScalarType "lseg",ScalarType "line"],ScalarType "point"),("##",[ScalarType "point",ScalarType "box"],ScalarType "point"),("##",[ScalarType "lseg",ScalarType "box"],ScalarType "point"),("##",[ScalarType "line",ScalarType "box"],ScalarType "point"),("##",[ScalarType "point",ScalarType "line"],ScalarType "point"),("##",[ScalarType "point",ScalarType "lseg"],ScalarType "point"),("##",[ScalarType "lseg",ScalarType "lseg"],ScalarType "point"),("#",[ScalarType "bit",ScalarType "bit"],ScalarType "bit"),("#",[ScalarType "line",ScalarType "line"],ScalarType "point"),("#",[ScalarType "box",ScalarType "box"],ScalarType "box"),("#",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("#",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("#",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("#",[ScalarType "lseg",ScalarType "lseg"],ScalarType "point"),("!~~*",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("!~~*",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("!~~*",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("!~~",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("!~~",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("!~~",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("!~~",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("!~*",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("!~*",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("!~*",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("!~",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("!~",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("!~",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool")], scopeFunctions = [("RI_FKey_cascade_del",[],Pseudo Trigger),("RI_FKey_cascade_upd",[],Pseudo Trigger),("RI_FKey_check_ins",[],Pseudo Trigger),("RI_FKey_check_upd",[],Pseudo Trigger),("RI_FKey_noaction_del",[],Pseudo Trigger),("RI_FKey_noaction_upd",[],Pseudo Trigger),("RI_FKey_restrict_del",[],Pseudo Trigger),("RI_FKey_restrict_upd",[],Pseudo Trigger),("RI_FKey_setdefault_del",[],Pseudo Trigger),("RI_FKey_setdefault_upd",[],Pseudo Trigger),("RI_FKey_setnull_del",[],Pseudo Trigger),("RI_FKey_setnull_upd",[],Pseudo Trigger),("abbrev",[ScalarType "cidr"],ScalarType "text"),("abbrev",[ScalarType "inet"],ScalarType "text"),("abs",[ScalarType "int8"],ScalarType "int8"),("abs",[ScalarType "int2"],ScalarType "int2"),("abs",[ScalarType "int4"],ScalarType "int4"),("abs",[ScalarType "float4"],ScalarType "float4"),("abs",[ScalarType "float8"],ScalarType "float8"),("abs",[ScalarType "numeric"],ScalarType "numeric"),("abstime",[ScalarType "timestamp"],ScalarType "abstime"),("abstime",[ScalarType "timestamptz"],ScalarType "abstime"),("abstimeeq",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),("abstimege",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),("abstimegt",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),("abstimein",[Pseudo Cstring],ScalarType "abstime"),("abstimele",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),("abstimelt",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),("abstimene",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),("abstimeout",[ScalarType "abstime"],Pseudo Cstring),("abstimerecv",[Pseudo Internal],ScalarType "abstime"),("abstimesend",[ScalarType "abstime"],ScalarType "bytea"),("aclcontains",[ArrayType (ScalarType "aclitem"),ScalarType "aclitem"],ScalarType "bool"),("aclinsert",[ArrayType (ScalarType "aclitem"),ScalarType "aclitem"],ArrayType (ScalarType "aclitem")),("aclitemeq",[ScalarType "aclitem",ScalarType "aclitem"],ScalarType "bool"),("aclitemin",[Pseudo Cstring],ScalarType "aclitem"),("aclitemout",[ScalarType "aclitem"],Pseudo Cstring),("aclremove",[ArrayType (ScalarType "aclitem"),ScalarType "aclitem"],ArrayType (ScalarType "aclitem")),("acos",[ScalarType "float8"],ScalarType "float8"),("age",[ScalarType "xid"],ScalarType "int4"),("age",[ScalarType "timestamp"],ScalarType "interval"),("age",[ScalarType "timestamptz"],ScalarType "interval"),("age",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "interval"),("age",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "interval"),("any_in",[Pseudo Cstring],Pseudo Any),("any_out",[Pseudo Any],Pseudo Cstring),("anyarray_in",[Pseudo Cstring],Pseudo AnyArray),("anyarray_out",[Pseudo AnyArray],Pseudo Cstring),("anyarray_recv",[Pseudo Internal],Pseudo AnyArray),("anyarray_send",[Pseudo AnyArray],ScalarType "bytea"),("anyelement_in",[Pseudo Cstring],Pseudo AnyElement),("anyelement_out",[Pseudo AnyElement],Pseudo Cstring),("anyenum_in",[Pseudo Cstring],Pseudo AnyEnum),("anyenum_out",[Pseudo AnyEnum],Pseudo Cstring),("anynonarray_in",[Pseudo Cstring],Pseudo AnyNonArray),("anynonarray_out",[Pseudo AnyNonArray],Pseudo Cstring),("anytextcat",[Pseudo AnyNonArray,ScalarType "text"],ScalarType "text"),("area",[ScalarType "path"],ScalarType "float8"),("area",[ScalarType "box"],ScalarType "float8"),("area",[ScalarType "circle"],ScalarType "float8"),("areajoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("areasel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("array_agg_finalfn",[Pseudo Internal],Pseudo AnyArray),("array_agg_transfn",[Pseudo Internal,Pseudo AnyElement],Pseudo Internal),("array_append",[Pseudo AnyArray,Pseudo AnyElement],Pseudo AnyArray),("array_cat",[Pseudo AnyArray,Pseudo AnyArray],Pseudo AnyArray),("array_dims",[Pseudo AnyArray],ScalarType "text"),("array_eq",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("array_fill",[Pseudo AnyElement,ArrayType (ScalarType "int4")],Pseudo AnyArray),("array_fill",[Pseudo AnyElement,ArrayType (ScalarType "int4"),ArrayType (ScalarType "int4")],Pseudo AnyArray),("array_ge",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("array_gt",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("array_in",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],Pseudo AnyArray),("array_larger",[Pseudo AnyArray,Pseudo AnyArray],Pseudo AnyArray),("array_le",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("array_length",[Pseudo AnyArray,ScalarType "int4"],ScalarType "int4"),("array_lower",[Pseudo AnyArray,ScalarType "int4"],ScalarType "int4"),("array_lt",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("array_ndims",[Pseudo AnyArray],ScalarType "int4"),("array_ne",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("array_out",[Pseudo AnyArray],Pseudo Cstring),("array_prepend",[Pseudo AnyElement,Pseudo AnyArray],Pseudo AnyArray),("array_recv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],Pseudo AnyArray),("array_send",[Pseudo AnyArray],ScalarType "bytea"),("array_smaller",[Pseudo AnyArray,Pseudo AnyArray],Pseudo AnyArray),("array_to_string",[Pseudo AnyArray,ScalarType "text"],ScalarType "text"),("array_upper",[Pseudo AnyArray,ScalarType "int4"],ScalarType "int4"),("arraycontained",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("arraycontains",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("arrayoverlap",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("ascii",[ScalarType "text"],ScalarType "int4"),("ascii_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("ascii_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("asin",[ScalarType "float8"],ScalarType "float8"),("atan",[ScalarType "float8"],ScalarType "float8"),("atan2",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("big5_to_euc_tw",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("big5_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("big5_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("bit",[ScalarType "int8",ScalarType "int4"],ScalarType "bit"),("bit",[ScalarType "int4",ScalarType "int4"],ScalarType "bit"),("bit",[ScalarType "bit",ScalarType "int4",ScalarType "bool"],ScalarType "bit"),("bit_in",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],ScalarType "bit"),("bit_length",[ScalarType "bytea"],ScalarType "int4"),("bit_length",[ScalarType "text"],ScalarType "int4"),("bit_length",[ScalarType "bit"],ScalarType "int4"),("bit_out",[ScalarType "bit"],Pseudo Cstring),("bit_recv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],ScalarType "bit"),("bit_send",[ScalarType "bit"],ScalarType "bytea"),("bitand",[ScalarType "bit",ScalarType "bit"],ScalarType "bit"),("bitcat",[ScalarType "varbit",ScalarType "varbit"],ScalarType "varbit"),("bitcmp",[ScalarType "bit",ScalarType "bit"],ScalarType "int4"),("biteq",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),("bitge",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),("bitgt",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),("bitle",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),("bitlt",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),("bitne",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),("bitnot",[ScalarType "bit"],ScalarType "bit"),("bitor",[ScalarType "bit",ScalarType "bit"],ScalarType "bit"),("bitshiftleft",[ScalarType "bit",ScalarType "int4"],ScalarType "bit"),("bitshiftright",[ScalarType "bit",ScalarType "int4"],ScalarType "bit"),("bittypmodin",[ArrayType (Pseudo Cstring)],ScalarType "int4"),("bittypmodout",[ScalarType "int4"],Pseudo Cstring),("bitxor",[ScalarType "bit",ScalarType "bit"],ScalarType "bit"),("bool",[ScalarType "int4"],ScalarType "bool"),("booland_statefunc",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("booleq",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("boolge",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("boolgt",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("boolin",[Pseudo Cstring],ScalarType "bool"),("boolle",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("boollt",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("boolne",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("boolor_statefunc",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("boolout",[ScalarType "bool"],Pseudo Cstring),("boolrecv",[Pseudo Internal],ScalarType "bool"),("boolsend",[ScalarType "bool"],ScalarType "bytea"),("box",[ScalarType "polygon"],ScalarType "box"),("box",[ScalarType "circle"],ScalarType "box"),("box",[ScalarType "point",ScalarType "point"],ScalarType "box"),("box_above",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_above_eq",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_add",[ScalarType "box",ScalarType "point"],ScalarType "box"),("box_below",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_below_eq",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_center",[ScalarType "box"],ScalarType "point"),("box_contain",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_contained",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_distance",[ScalarType "box",ScalarType "box"],ScalarType "float8"),("box_div",[ScalarType "box",ScalarType "point"],ScalarType "box"),("box_eq",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_ge",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_gt",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_in",[Pseudo Cstring],ScalarType "box"),("box_intersect",[ScalarType "box",ScalarType "box"],ScalarType "box"),("box_le",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_left",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_lt",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_mul",[ScalarType "box",ScalarType "point"],ScalarType "box"),("box_out",[ScalarType "box"],Pseudo Cstring),("box_overabove",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_overbelow",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_overlap",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_overleft",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_overright",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_recv",[Pseudo Internal],ScalarType "box"),("box_right",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_same",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_send",[ScalarType "box"],ScalarType "bytea"),("box_sub",[ScalarType "box",ScalarType "point"],ScalarType "box"),("bpchar",[ScalarType "char"],ScalarType "bpchar"),("bpchar",[ScalarType "name"],ScalarType "bpchar"),("bpchar",[ScalarType "bpchar",ScalarType "int4",ScalarType "bool"],ScalarType "bpchar"),("bpchar_larger",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bpchar"),("bpchar_pattern_ge",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("bpchar_pattern_gt",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("bpchar_pattern_le",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("bpchar_pattern_lt",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("bpchar_smaller",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bpchar"),("bpcharcmp",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "int4"),("bpchareq",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("bpcharge",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("bpchargt",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("bpchariclike",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("bpcharicnlike",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("bpcharicregexeq",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("bpcharicregexne",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("bpcharin",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],ScalarType "bpchar"),("bpcharle",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("bpcharlike",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("bpcharlt",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("bpcharne",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("bpcharnlike",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("bpcharout",[ScalarType "bpchar"],Pseudo Cstring),("bpcharrecv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],ScalarType "bpchar"),("bpcharregexeq",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("bpcharregexne",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("bpcharsend",[ScalarType "bpchar"],ScalarType "bytea"),("bpchartypmodin",[ArrayType (Pseudo Cstring)],ScalarType "int4"),("bpchartypmodout",[ScalarType "int4"],Pseudo Cstring),("broadcast",[ScalarType "inet"],ScalarType "inet"),("btabstimecmp",[ScalarType "abstime",ScalarType "abstime"],ScalarType "int4"),("btarraycmp",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "int4"),("btbeginscan",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("btboolcmp",[ScalarType "bool",ScalarType "bool"],ScalarType "int4"),("btbpchar_pattern_cmp",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "int4"),("btbuild",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("btbulkdelete",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("btcharcmp",[ScalarType "char",ScalarType "char"],ScalarType "int4"),("btcostestimate",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Void),("btendscan",[Pseudo Internal],Pseudo Void),("btfloat48cmp",[ScalarType "float4",ScalarType "float8"],ScalarType "int4"),("btfloat4cmp",[ScalarType "float4",ScalarType "float4"],ScalarType "int4"),("btfloat84cmp",[ScalarType "float8",ScalarType "float4"],ScalarType "int4"),("btfloat8cmp",[ScalarType "float8",ScalarType "float8"],ScalarType "int4"),("btgetbitmap",[Pseudo Internal,Pseudo Internal],ScalarType "int8"),("btgettuple",[Pseudo Internal,Pseudo Internal],ScalarType "bool"),("btinsert",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],ScalarType "bool"),("btint24cmp",[ScalarType "int2",ScalarType "int4"],ScalarType "int4"),("btint28cmp",[ScalarType "int2",ScalarType "int8"],ScalarType "int4"),("btint2cmp",[ScalarType "int2",ScalarType "int2"],ScalarType "int4"),("btint42cmp",[ScalarType "int4",ScalarType "int2"],ScalarType "int4"),("btint48cmp",[ScalarType "int4",ScalarType "int8"],ScalarType "int4"),("btint4cmp",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("btint82cmp",[ScalarType "int8",ScalarType "int2"],ScalarType "int4"),("btint84cmp",[ScalarType "int8",ScalarType "int4"],ScalarType "int4"),("btint8cmp",[ScalarType "int8",ScalarType "int8"],ScalarType "int4"),("btmarkpos",[Pseudo Internal],Pseudo Void),("btnamecmp",[ScalarType "name",ScalarType "name"],ScalarType "int4"),("btoidcmp",[ScalarType "oid",ScalarType "oid"],ScalarType "int4"),("btoidvectorcmp",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "int4"),("btoptions",[ArrayType (ScalarType "text"),ScalarType "bool"],ScalarType "bytea"),("btrecordcmp",[Pseudo Record,Pseudo Record],ScalarType "int4"),("btreltimecmp",[ScalarType "reltime",ScalarType "reltime"],ScalarType "int4"),("btrescan",[Pseudo Internal,Pseudo Internal],Pseudo Void),("btrestrpos",[Pseudo Internal],Pseudo Void),("btrim",[ScalarType "text"],ScalarType "text"),("btrim",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bytea"),("btrim",[ScalarType "text",ScalarType "text"],ScalarType "text"),("bttext_pattern_cmp",[ScalarType "text",ScalarType "text"],ScalarType "int4"),("bttextcmp",[ScalarType "text",ScalarType "text"],ScalarType "int4"),("bttidcmp",[ScalarType "tid",ScalarType "tid"],ScalarType "int4"),("bttintervalcmp",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "int4"),("btvacuumcleanup",[Pseudo Internal,Pseudo Internal],Pseudo Internal),("byteacat",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bytea"),("byteacmp",[ScalarType "bytea",ScalarType "bytea"],ScalarType "int4"),("byteaeq",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("byteage",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("byteagt",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("byteain",[Pseudo Cstring],ScalarType "bytea"),("byteale",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("bytealike",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("bytealt",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("byteane",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("byteanlike",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("byteaout",[ScalarType "bytea"],Pseudo Cstring),("bytearecv",[Pseudo Internal],ScalarType "bytea"),("byteasend",[ScalarType "bytea"],ScalarType "bytea"),("cash_cmp",[ScalarType "money",ScalarType "money"],ScalarType "int4"),("cash_div_flt4",[ScalarType "money",ScalarType "float4"],ScalarType "money"),("cash_div_flt8",[ScalarType "money",ScalarType "float8"],ScalarType "money"),("cash_div_int2",[ScalarType "money",ScalarType "int2"],ScalarType "money"),("cash_div_int4",[ScalarType "money",ScalarType "int4"],ScalarType "money"),("cash_eq",[ScalarType "money",ScalarType "money"],ScalarType "bool"),("cash_ge",[ScalarType "money",ScalarType "money"],ScalarType "bool"),("cash_gt",[ScalarType "money",ScalarType "money"],ScalarType "bool"),("cash_in",[Pseudo Cstring],ScalarType "money"),("cash_le",[ScalarType "money",ScalarType "money"],ScalarType "bool"),("cash_lt",[ScalarType "money",ScalarType "money"],ScalarType "bool"),("cash_mi",[ScalarType "money",ScalarType "money"],ScalarType "money"),("cash_mul_flt4",[ScalarType "money",ScalarType "float4"],ScalarType "money"),("cash_mul_flt8",[ScalarType "money",ScalarType "float8"],ScalarType "money"),("cash_mul_int2",[ScalarType "money",ScalarType "int2"],ScalarType "money"),("cash_mul_int4",[ScalarType "money",ScalarType "int4"],ScalarType "money"),("cash_ne",[ScalarType "money",ScalarType "money"],ScalarType "bool"),("cash_out",[ScalarType "money"],Pseudo Cstring),("cash_pl",[ScalarType "money",ScalarType "money"],ScalarType "money"),("cash_recv",[Pseudo Internal],ScalarType "money"),("cash_send",[ScalarType "money"],ScalarType "bytea"),("cash_words",[ScalarType "money"],ScalarType "text"),("cashlarger",[ScalarType "money",ScalarType "money"],ScalarType "money"),("cashsmaller",[ScalarType "money",ScalarType "money"],ScalarType "money"),("cbrt",[ScalarType "float8"],ScalarType "float8"),("ceil",[ScalarType "float8"],ScalarType "float8"),("ceil",[ScalarType "numeric"],ScalarType "numeric"),("ceiling",[ScalarType "float8"],ScalarType "float8"),("ceiling",[ScalarType "numeric"],ScalarType "numeric"),("center",[ScalarType "box"],ScalarType "point"),("center",[ScalarType "circle"],ScalarType "point"),("char",[ScalarType "int4"],ScalarType "char"),("char",[ScalarType "text"],ScalarType "char"),("char_length",[ScalarType "text"],ScalarType "int4"),("char_length",[ScalarType "bpchar"],ScalarType "int4"),("character_length",[ScalarType "text"],ScalarType "int4"),("character_length",[ScalarType "bpchar"],ScalarType "int4"),("chareq",[ScalarType "char",ScalarType "char"],ScalarType "bool"),("charge",[ScalarType "char",ScalarType "char"],ScalarType "bool"),("chargt",[ScalarType "char",ScalarType "char"],ScalarType "bool"),("charin",[Pseudo Cstring],ScalarType "char"),("charle",[ScalarType "char",ScalarType "char"],ScalarType "bool"),("charlt",[ScalarType "char",ScalarType "char"],ScalarType "bool"),("charne",[ScalarType "char",ScalarType "char"],ScalarType "bool"),("charout",[ScalarType "char"],Pseudo Cstring),("charrecv",[Pseudo Internal],ScalarType "char"),("charsend",[ScalarType "char"],ScalarType "bytea"),("chr",[ScalarType "int4"],ScalarType "text"),("cideq",[ScalarType "cid",ScalarType "cid"],ScalarType "bool"),("cidin",[Pseudo Cstring],ScalarType "cid"),("cidout",[ScalarType "cid"],Pseudo Cstring),("cidr",[ScalarType "inet"],ScalarType "cidr"),("cidr_in",[Pseudo Cstring],ScalarType "cidr"),("cidr_out",[ScalarType "cidr"],Pseudo Cstring),("cidr_recv",[Pseudo Internal],ScalarType "cidr"),("cidr_send",[ScalarType "cidr"],ScalarType "bytea"),("cidrecv",[Pseudo Internal],ScalarType "cid"),("cidsend",[ScalarType "cid"],ScalarType "bytea"),("circle",[ScalarType "box"],ScalarType "circle"),("circle",[ScalarType "polygon"],ScalarType "circle"),("circle",[ScalarType "point",ScalarType "float8"],ScalarType "circle"),("circle_above",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_add_pt",[ScalarType "circle",ScalarType "point"],ScalarType "circle"),("circle_below",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_center",[ScalarType "circle"],ScalarType "point"),("circle_contain",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_contain_pt",[ScalarType "circle",ScalarType "point"],ScalarType "bool"),("circle_contained",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_distance",[ScalarType "circle",ScalarType "circle"],ScalarType "float8"),("circle_div_pt",[ScalarType "circle",ScalarType "point"],ScalarType "circle"),("circle_eq",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_ge",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_gt",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_in",[Pseudo Cstring],ScalarType "circle"),("circle_le",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_left",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_lt",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_mul_pt",[ScalarType "circle",ScalarType "point"],ScalarType "circle"),("circle_ne",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_out",[ScalarType "circle"],Pseudo Cstring),("circle_overabove",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_overbelow",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_overlap",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_overleft",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_overright",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_recv",[Pseudo Internal],ScalarType "circle"),("circle_right",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_same",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_send",[ScalarType "circle"],ScalarType "bytea"),("circle_sub_pt",[ScalarType "circle",ScalarType "point"],ScalarType "circle"),("clock_timestamp",[],ScalarType "timestamptz"),("close_lb",[ScalarType "line",ScalarType "box"],ScalarType "point"),("close_ls",[ScalarType "line",ScalarType "lseg"],ScalarType "point"),("close_lseg",[ScalarType "lseg",ScalarType "lseg"],ScalarType "point"),("close_pb",[ScalarType "point",ScalarType "box"],ScalarType "point"),("close_pl",[ScalarType "point",ScalarType "line"],ScalarType "point"),("close_ps",[ScalarType "point",ScalarType "lseg"],ScalarType "point"),("close_sb",[ScalarType "lseg",ScalarType "box"],ScalarType "point"),("close_sl",[ScalarType "lseg",ScalarType "line"],ScalarType "point"),("col_description",[ScalarType "oid",ScalarType "int4"],ScalarType "text"),("contjoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("contsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("convert",[ScalarType "bytea",ScalarType "name",ScalarType "name"],ScalarType "bytea"),("convert_from",[ScalarType "bytea",ScalarType "name"],ScalarType "text"),("convert_to",[ScalarType "text",ScalarType "name"],ScalarType "bytea"),("cos",[ScalarType "float8"],ScalarType "float8"),("cot",[ScalarType "float8"],ScalarType "float8"),("cstring_in",[Pseudo Cstring],Pseudo Cstring),("cstring_out",[Pseudo Cstring],Pseudo Cstring),("cstring_recv",[Pseudo Internal],Pseudo Cstring),("cstring_send",[Pseudo Cstring],ScalarType "bytea"),("current_database",[],ScalarType "name"),("current_query",[],ScalarType "text"),("current_schema",[],ScalarType "name"),("current_schemas",[ScalarType "bool"],ArrayType (ScalarType "name")),("current_setting",[ScalarType "text"],ScalarType "text"),("current_user",[],ScalarType "name"),("currtid",[ScalarType "oid",ScalarType "tid"],ScalarType "tid"),("currtid2",[ScalarType "text",ScalarType "tid"],ScalarType "tid"),("currval",[ScalarType "regclass"],ScalarType "int8"),("cursor_to_xml",[ScalarType "refcursor",ScalarType "int4",ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("cursor_to_xmlschema",[ScalarType "refcursor",ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("database_to_xml",[ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("database_to_xml_and_xmlschema",[ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("database_to_xmlschema",[ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("date",[ScalarType "abstime"],ScalarType "date"),("date",[ScalarType "timestamp"],ScalarType "date"),("date",[ScalarType "timestamptz"],ScalarType "date"),("date_cmp",[ScalarType "date",ScalarType "date"],ScalarType "int4"),("date_cmp_timestamp",[ScalarType "date",ScalarType "timestamp"],ScalarType "int4"),("date_cmp_timestamptz",[ScalarType "date",ScalarType "timestamptz"],ScalarType "int4"),("date_eq",[ScalarType "date",ScalarType "date"],ScalarType "bool"),("date_eq_timestamp",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),("date_eq_timestamptz",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),("date_ge",[ScalarType "date",ScalarType "date"],ScalarType "bool"),("date_ge_timestamp",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),("date_ge_timestamptz",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),("date_gt",[ScalarType "date",ScalarType "date"],ScalarType "bool"),("date_gt_timestamp",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),("date_gt_timestamptz",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),("date_in",[Pseudo Cstring],ScalarType "date"),("date_larger",[ScalarType "date",ScalarType "date"],ScalarType "date"),("date_le",[ScalarType "date",ScalarType "date"],ScalarType "bool"),("date_le_timestamp",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),("date_le_timestamptz",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),("date_lt",[ScalarType "date",ScalarType "date"],ScalarType "bool"),("date_lt_timestamp",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),("date_lt_timestamptz",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),("date_mi",[ScalarType "date",ScalarType "date"],ScalarType "int4"),("date_mi_interval",[ScalarType "date",ScalarType "interval"],ScalarType "timestamp"),("date_mii",[ScalarType "date",ScalarType "int4"],ScalarType "date"),("date_ne",[ScalarType "date",ScalarType "date"],ScalarType "bool"),("date_ne_timestamp",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),("date_ne_timestamptz",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),("date_out",[ScalarType "date"],Pseudo Cstring),("date_part",[ScalarType "text",ScalarType "abstime"],ScalarType "float8"),("date_part",[ScalarType "text",ScalarType "reltime"],ScalarType "float8"),("date_part",[ScalarType "text",ScalarType "date"],ScalarType "float8"),("date_part",[ScalarType "text",ScalarType "time"],ScalarType "float8"),("date_part",[ScalarType "text",ScalarType "timestamp"],ScalarType "float8"),("date_part",[ScalarType "text",ScalarType "timestamptz"],ScalarType "float8"),("date_part",[ScalarType "text",ScalarType "interval"],ScalarType "float8"),("date_part",[ScalarType "text",ScalarType "timetz"],ScalarType "float8"),("date_pl_interval",[ScalarType "date",ScalarType "interval"],ScalarType "timestamp"),("date_pli",[ScalarType "date",ScalarType "int4"],ScalarType "date"),("date_recv",[Pseudo Internal],ScalarType "date"),("date_send",[ScalarType "date"],ScalarType "bytea"),("date_smaller",[ScalarType "date",ScalarType "date"],ScalarType "date"),("date_trunc",[ScalarType "text",ScalarType "timestamp"],ScalarType "timestamp"),("date_trunc",[ScalarType "text",ScalarType "timestamptz"],ScalarType "timestamptz"),("date_trunc",[ScalarType "text",ScalarType "interval"],ScalarType "interval"),("datetime_pl",[ScalarType "date",ScalarType "time"],ScalarType "timestamp"),("datetimetz_pl",[ScalarType "date",ScalarType "timetz"],ScalarType "timestamptz"),("dcbrt",[ScalarType "float8"],ScalarType "float8"),("decode",[ScalarType "text",ScalarType "text"],ScalarType "bytea"),("degrees",[ScalarType "float8"],ScalarType "float8"),("dexp",[ScalarType "float8"],ScalarType "float8"),("diagonal",[ScalarType "box"],ScalarType "lseg"),("diameter",[ScalarType "circle"],ScalarType "float8"),("dispell_init",[Pseudo Internal],Pseudo Internal),("dispell_lexize",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("dist_cpoly",[ScalarType "circle",ScalarType "polygon"],ScalarType "float8"),("dist_lb",[ScalarType "line",ScalarType "box"],ScalarType "float8"),("dist_pb",[ScalarType "point",ScalarType "box"],ScalarType "float8"),("dist_pc",[ScalarType "point",ScalarType "circle"],ScalarType "float8"),("dist_pl",[ScalarType "point",ScalarType "line"],ScalarType "float8"),("dist_ppath",[ScalarType "point",ScalarType "path"],ScalarType "float8"),("dist_ps",[ScalarType "point",ScalarType "lseg"],ScalarType "float8"),("dist_sb",[ScalarType "lseg",ScalarType "box"],ScalarType "float8"),("dist_sl",[ScalarType "lseg",ScalarType "line"],ScalarType "float8"),("div",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("dlog1",[ScalarType "float8"],ScalarType "float8"),("dlog10",[ScalarType "float8"],ScalarType "float8"),("domain_in",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],Pseudo Any),("domain_recv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],Pseudo Any),("dpow",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("dround",[ScalarType "float8"],ScalarType "float8"),("dsimple_init",[Pseudo Internal],Pseudo Internal),("dsimple_lexize",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("dsnowball_init",[Pseudo Internal],Pseudo Internal),("dsnowball_lexize",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("dsqrt",[ScalarType "float8"],ScalarType "float8"),("dsynonym_init",[Pseudo Internal],Pseudo Internal),("dsynonym_lexize",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("dtrunc",[ScalarType "float8"],ScalarType "float8"),("encode",[ScalarType "bytea",ScalarType "text"],ScalarType "text"),("enum_cmp",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "int4"),("enum_eq",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),("enum_first",[Pseudo AnyEnum],Pseudo AnyEnum),("enum_ge",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),("enum_gt",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),("enum_in",[Pseudo Cstring,ScalarType "oid"],Pseudo AnyEnum),("enum_larger",[Pseudo AnyEnum,Pseudo AnyEnum],Pseudo AnyEnum),("enum_last",[Pseudo AnyEnum],Pseudo AnyEnum),("enum_le",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),("enum_lt",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),("enum_ne",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),("enum_out",[Pseudo AnyEnum],Pseudo Cstring),("enum_range",[Pseudo AnyEnum],Pseudo AnyArray),("enum_range",[Pseudo AnyEnum,Pseudo AnyEnum],Pseudo AnyArray),("enum_recv",[Pseudo Cstring,ScalarType "oid"],Pseudo AnyEnum),("enum_send",[Pseudo AnyEnum],ScalarType "bytea"),("enum_smaller",[Pseudo AnyEnum,Pseudo AnyEnum],Pseudo AnyEnum),("eqjoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("eqsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("euc_cn_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("euc_cn_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("euc_jis_2004_to_shift_jis_2004",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("euc_jis_2004_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("euc_jp_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("euc_jp_to_sjis",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("euc_jp_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("euc_kr_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("euc_kr_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("euc_tw_to_big5",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("euc_tw_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("euc_tw_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("exp",[ScalarType "float8"],ScalarType "float8"),("exp",[ScalarType "numeric"],ScalarType "numeric"),("factorial",[ScalarType "int8"],ScalarType "numeric"),("family",[ScalarType "inet"],ScalarType "int4"),("flatfile_update_trigger",[],Pseudo Trigger),("float4",[ScalarType "int8"],ScalarType "float4"),("float4",[ScalarType "int2"],ScalarType "float4"),("float4",[ScalarType "int4"],ScalarType "float4"),("float4",[ScalarType "float8"],ScalarType "float4"),("float4",[ScalarType "numeric"],ScalarType "float4"),("float48div",[ScalarType "float4",ScalarType "float8"],ScalarType "float8"),("float48eq",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),("float48ge",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),("float48gt",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),("float48le",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),("float48lt",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),("float48mi",[ScalarType "float4",ScalarType "float8"],ScalarType "float8"),("float48mul",[ScalarType "float4",ScalarType "float8"],ScalarType "float8"),("float48ne",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),("float48pl",[ScalarType "float4",ScalarType "float8"],ScalarType "float8"),("float4_accum",[ArrayType (ScalarType "float8"),ScalarType "float4"],ArrayType (ScalarType "float8")),("float4abs",[ScalarType "float4"],ScalarType "float4"),("float4div",[ScalarType "float4",ScalarType "float4"],ScalarType "float4"),("float4eq",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),("float4ge",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),("float4gt",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),("float4in",[Pseudo Cstring],ScalarType "float4"),("float4larger",[ScalarType "float4",ScalarType "float4"],ScalarType "float4"),("float4le",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),("float4lt",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),("float4mi",[ScalarType "float4",ScalarType "float4"],ScalarType "float4"),("float4mul",[ScalarType "float4",ScalarType "float4"],ScalarType "float4"),("float4ne",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),("float4out",[ScalarType "float4"],Pseudo Cstring),("float4pl",[ScalarType "float4",ScalarType "float4"],ScalarType "float4"),("float4recv",[Pseudo Internal],ScalarType "float4"),("float4send",[ScalarType "float4"],ScalarType "bytea"),("float4smaller",[ScalarType "float4",ScalarType "float4"],ScalarType "float4"),("float4um",[ScalarType "float4"],ScalarType "float4"),("float4up",[ScalarType "float4"],ScalarType "float4"),("float8",[ScalarType "int8"],ScalarType "float8"),("float8",[ScalarType "int2"],ScalarType "float8"),("float8",[ScalarType "int4"],ScalarType "float8"),("float8",[ScalarType "float4"],ScalarType "float8"),("float8",[ScalarType "numeric"],ScalarType "float8"),("float84div",[ScalarType "float8",ScalarType "float4"],ScalarType "float8"),("float84eq",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),("float84ge",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),("float84gt",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),("float84le",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),("float84lt",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),("float84mi",[ScalarType "float8",ScalarType "float4"],ScalarType "float8"),("float84mul",[ScalarType "float8",ScalarType "float4"],ScalarType "float8"),("float84ne",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),("float84pl",[ScalarType "float8",ScalarType "float4"],ScalarType "float8"),("float8_accum",[ArrayType (ScalarType "float8"),ScalarType "float8"],ArrayType (ScalarType "float8")),("float8_avg",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_corr",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_covar_pop",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_covar_samp",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_regr_accum",[ArrayType (ScalarType "float8"),ScalarType "float8",ScalarType "float8"],ArrayType (ScalarType "float8")),("float8_regr_avgx",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_regr_avgy",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_regr_intercept",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_regr_r2",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_regr_slope",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_regr_sxx",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_regr_sxy",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_regr_syy",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_stddev_pop",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_stddev_samp",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_var_pop",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_var_samp",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8abs",[ScalarType "float8"],ScalarType "float8"),("float8div",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("float8eq",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),("float8ge",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),("float8gt",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),("float8in",[Pseudo Cstring],ScalarType "float8"),("float8larger",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("float8le",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),("float8lt",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),("float8mi",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("float8mul",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("float8ne",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),("float8out",[ScalarType "float8"],Pseudo Cstring),("float8pl",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("float8recv",[Pseudo Internal],ScalarType "float8"),("float8send",[ScalarType "float8"],ScalarType "bytea"),("float8smaller",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("float8um",[ScalarType "float8"],ScalarType "float8"),("float8up",[ScalarType "float8"],ScalarType "float8"),("floor",[ScalarType "float8"],ScalarType "float8"),("floor",[ScalarType "numeric"],ScalarType "numeric"),("flt4_mul_cash",[ScalarType "float4",ScalarType "money"],ScalarType "money"),("flt8_mul_cash",[ScalarType "float8",ScalarType "money"],ScalarType "money"),("fmgr_c_validator",[ScalarType "oid"],Pseudo Void),("fmgr_internal_validator",[ScalarType "oid"],Pseudo Void),("fmgr_sql_validator",[ScalarType "oid"],Pseudo Void),("format_type",[ScalarType "oid",ScalarType "int4"],ScalarType "text"),("gb18030_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("gbk_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("generate_series",[ScalarType "int8",ScalarType "int8"],SetOfType (ScalarType "int8")),("generate_series",[ScalarType "int4",ScalarType "int4"],SetOfType (ScalarType "int4")),("generate_series",[ScalarType "int8",ScalarType "int8",ScalarType "int8"],SetOfType (ScalarType "int8")),("generate_series",[ScalarType "int4",ScalarType "int4",ScalarType "int4"],SetOfType (ScalarType "int4")),("generate_series",[ScalarType "timestamp",ScalarType "timestamp",ScalarType "interval"],SetOfType (ScalarType "timestamp")),("generate_series",[ScalarType "timestamptz",ScalarType "timestamptz",ScalarType "interval"],SetOfType (ScalarType "timestamptz")),("generate_subscripts",[Pseudo AnyArray,ScalarType "int4"],SetOfType (ScalarType "int4")),("generate_subscripts",[Pseudo AnyArray,ScalarType "int4",ScalarType "bool"],SetOfType (ScalarType "int4")),("get_bit",[ScalarType "bytea",ScalarType "int4"],ScalarType "int4"),("get_byte",[ScalarType "bytea",ScalarType "int4"],ScalarType "int4"),("get_current_ts_config",[],ScalarType "regconfig"),("getdatabaseencoding",[],ScalarType "name"),("getpgusername",[],ScalarType "name"),("gin_cmp_prefix",[ScalarType "text",ScalarType "text",ScalarType "int2",Pseudo Internal],ScalarType "int4"),("gin_cmp_tslexeme",[ScalarType "text",ScalarType "text"],ScalarType "int4"),("gin_extract_tsquery",[ScalarType "tsquery",Pseudo Internal,ScalarType "int2",Pseudo Internal,Pseudo Internal],Pseudo Internal),("gin_extract_tsvector",[ScalarType "tsvector",Pseudo Internal],Pseudo Internal),("gin_tsquery_consistent",[Pseudo Internal,ScalarType "int2",ScalarType "tsquery",ScalarType "int4",Pseudo Internal,Pseudo Internal],ScalarType "bool"),("ginarrayconsistent",[Pseudo Internal,ScalarType "int2",Pseudo AnyArray,ScalarType "int4",Pseudo Internal,Pseudo Internal],ScalarType "bool"),("ginarrayextract",[Pseudo AnyArray,Pseudo Internal],Pseudo Internal),("ginbeginscan",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("ginbuild",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("ginbulkdelete",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("gincostestimate",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Void),("ginendscan",[Pseudo Internal],Pseudo Void),("gingetbitmap",[Pseudo Internal,Pseudo Internal],ScalarType "int8"),("gininsert",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],ScalarType "bool"),("ginmarkpos",[Pseudo Internal],Pseudo Void),("ginoptions",[ArrayType (ScalarType "text"),ScalarType "bool"],ScalarType "bytea"),("ginqueryarrayextract",[Pseudo AnyArray,Pseudo Internal,ScalarType "int2",Pseudo Internal,Pseudo Internal],Pseudo Internal),("ginrescan",[Pseudo Internal,Pseudo Internal],Pseudo Void),("ginrestrpos",[Pseudo Internal],Pseudo Void),("ginvacuumcleanup",[Pseudo Internal,Pseudo Internal],Pseudo Internal),("gist_box_compress",[Pseudo Internal],Pseudo Internal),("gist_box_consistent",[Pseudo Internal,ScalarType "box",ScalarType "int4",ScalarType "oid",Pseudo Internal],ScalarType "bool"),("gist_box_decompress",[Pseudo Internal],Pseudo Internal),("gist_box_penalty",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("gist_box_picksplit",[Pseudo Internal,Pseudo Internal],Pseudo Internal),("gist_box_same",[ScalarType "box",ScalarType "box",Pseudo Internal],Pseudo Internal),("gist_box_union",[Pseudo Internal,Pseudo Internal],ScalarType "box"),("gist_circle_compress",[Pseudo Internal],Pseudo Internal),("gist_circle_consistent",[Pseudo Internal,ScalarType "circle",ScalarType "int4",ScalarType "oid",Pseudo Internal],ScalarType "bool"),("gist_poly_compress",[Pseudo Internal],Pseudo Internal),("gist_poly_consistent",[Pseudo Internal,ScalarType "polygon",ScalarType "int4",ScalarType "oid",Pseudo Internal],ScalarType "bool"),("gistbeginscan",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("gistbuild",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("gistbulkdelete",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("gistcostestimate",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Void),("gistendscan",[Pseudo Internal],Pseudo Void),("gistgetbitmap",[Pseudo Internal,Pseudo Internal],ScalarType "int8"),("gistgettuple",[Pseudo Internal,Pseudo Internal],ScalarType "bool"),("gistinsert",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],ScalarType "bool"),("gistmarkpos",[Pseudo Internal],Pseudo Void),("gistoptions",[ArrayType (ScalarType "text"),ScalarType "bool"],ScalarType "bytea"),("gistrescan",[Pseudo Internal,Pseudo Internal],Pseudo Void),("gistrestrpos",[Pseudo Internal],Pseudo Void),("gistvacuumcleanup",[Pseudo Internal,Pseudo Internal],Pseudo Internal),("gtsquery_compress",[Pseudo Internal],Pseudo Internal),("gtsquery_consistent",[Pseudo Internal,Pseudo Internal,ScalarType "int4",ScalarType "oid",Pseudo Internal],ScalarType "bool"),("gtsquery_decompress",[Pseudo Internal],Pseudo Internal),("gtsquery_penalty",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("gtsquery_picksplit",[Pseudo Internal,Pseudo Internal],Pseudo Internal),("gtsquery_same",[ScalarType "int8",ScalarType "int8",Pseudo Internal],Pseudo Internal),("gtsquery_union",[Pseudo Internal,Pseudo Internal],Pseudo Internal),("gtsvector_compress",[Pseudo Internal],Pseudo Internal),("gtsvector_consistent",[Pseudo Internal,ScalarType "gtsvector",ScalarType "int4",ScalarType "oid",Pseudo Internal],ScalarType "bool"),("gtsvector_decompress",[Pseudo Internal],Pseudo Internal),("gtsvector_penalty",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("gtsvector_picksplit",[Pseudo Internal,Pseudo Internal],Pseudo Internal),("gtsvector_same",[ScalarType "gtsvector",ScalarType "gtsvector",Pseudo Internal],Pseudo Internal),("gtsvector_union",[Pseudo Internal,Pseudo Internal],Pseudo Internal),("gtsvectorin",[Pseudo Cstring],ScalarType "gtsvector"),("gtsvectorout",[ScalarType "gtsvector"],Pseudo Cstring),("has_any_column_privilege",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_any_column_privilege",[ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_any_column_privilege",[ScalarType "name",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_any_column_privilege",[ScalarType "name",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_any_column_privilege",[ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_any_column_privilege",[ScalarType "oid",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "text",ScalarType "int2",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "text",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "oid",ScalarType "int2",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "name",ScalarType "text",ScalarType "int2",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "name",ScalarType "text",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "name",ScalarType "oid",ScalarType "int2",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "name",ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "oid",ScalarType "text",ScalarType "int2",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "oid",ScalarType "text",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "oid",ScalarType "oid",ScalarType "int2",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "oid",ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_database_privilege",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_database_privilege",[ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_database_privilege",[ScalarType "name",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_database_privilege",[ScalarType "name",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_database_privilege",[ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_database_privilege",[ScalarType "oid",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_foreign_data_wrapper_privilege",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_foreign_data_wrapper_privilege",[ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_foreign_data_wrapper_privilege",[ScalarType "name",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_foreign_data_wrapper_privilege",[ScalarType "name",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_foreign_data_wrapper_privilege",[ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_foreign_data_wrapper_privilege",[ScalarType "oid",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_function_privilege",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_function_privilege",[ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_function_privilege",[ScalarType "name",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_function_privilege",[ScalarType "name",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_function_privilege",[ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_function_privilege",[ScalarType "oid",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_language_privilege",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_language_privilege",[ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_language_privilege",[ScalarType "name",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_language_privilege",[ScalarType "name",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_language_privilege",[ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_language_privilege",[ScalarType "oid",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_schema_privilege",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_schema_privilege",[ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_schema_privilege",[ScalarType "name",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_schema_privilege",[ScalarType "name",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_schema_privilege",[ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_schema_privilege",[ScalarType "oid",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_server_privilege",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_server_privilege",[ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_server_privilege",[ScalarType "name",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_server_privilege",[ScalarType "name",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_server_privilege",[ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_server_privilege",[ScalarType "oid",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_table_privilege",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_table_privilege",[ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_table_privilege",[ScalarType "name",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_table_privilege",[ScalarType "name",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_table_privilege",[ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_table_privilege",[ScalarType "oid",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_tablespace_privilege",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_tablespace_privilege",[ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_tablespace_privilege",[ScalarType "name",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_tablespace_privilege",[ScalarType "name",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_tablespace_privilege",[ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_tablespace_privilege",[ScalarType "oid",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("hash_aclitem",[ScalarType "aclitem"],ScalarType "int4"),("hash_numeric",[ScalarType "numeric"],ScalarType "int4"),("hashbeginscan",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("hashbpchar",[ScalarType "bpchar"],ScalarType "int4"),("hashbuild",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("hashbulkdelete",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("hashchar",[ScalarType "char"],ScalarType "int4"),("hashcostestimate",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Void),("hashendscan",[Pseudo Internal],Pseudo Void),("hashenum",[Pseudo AnyEnum],ScalarType "int4"),("hashfloat4",[ScalarType "float4"],ScalarType "int4"),("hashfloat8",[ScalarType "float8"],ScalarType "int4"),("hashgetbitmap",[Pseudo Internal,Pseudo Internal],ScalarType "int8"),("hashgettuple",[Pseudo Internal,Pseudo Internal],ScalarType "bool"),("hashinet",[ScalarType "inet"],ScalarType "int4"),("hashinsert",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],ScalarType "bool"),("hashint2",[ScalarType "int2"],ScalarType "int4"),("hashint2vector",[ScalarType "int2vector"],ScalarType "int4"),("hashint4",[ScalarType "int4"],ScalarType "int4"),("hashint8",[ScalarType "int8"],ScalarType "int4"),("hashmacaddr",[ScalarType "macaddr"],ScalarType "int4"),("hashmarkpos",[Pseudo Internal],Pseudo Void),("hashname",[ScalarType "name"],ScalarType "int4"),("hashoid",[ScalarType "oid"],ScalarType "int4"),("hashoidvector",[ScalarType "oidvector"],ScalarType "int4"),("hashoptions",[ArrayType (ScalarType "text"),ScalarType "bool"],ScalarType "bytea"),("hashrescan",[Pseudo Internal,Pseudo Internal],Pseudo Void),("hashrestrpos",[Pseudo Internal],Pseudo Void),("hashtext",[ScalarType "text"],ScalarType "int4"),("hashvacuumcleanup",[Pseudo Internal,Pseudo Internal],Pseudo Internal),("hashvarlena",[Pseudo Internal],ScalarType "int4"),("height",[ScalarType "box"],ScalarType "float8"),("host",[ScalarType "inet"],ScalarType "text"),("hostmask",[ScalarType "inet"],ScalarType "inet"),("iclikejoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("iclikesel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("icnlikejoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("icnlikesel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("icregexeqjoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("icregexeqsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("icregexnejoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("icregexnesel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("inet_client_addr",[],ScalarType "inet"),("inet_client_port",[],ScalarType "int4"),("inet_in",[Pseudo Cstring],ScalarType "inet"),("inet_out",[ScalarType "inet"],Pseudo Cstring),("inet_recv",[Pseudo Internal],ScalarType "inet"),("inet_send",[ScalarType "inet"],ScalarType "bytea"),("inet_server_addr",[],ScalarType "inet"),("inet_server_port",[],ScalarType "int4"),("inetand",[ScalarType "inet",ScalarType "inet"],ScalarType "inet"),("inetmi",[ScalarType "inet",ScalarType "inet"],ScalarType "int8"),("inetmi_int8",[ScalarType "inet",ScalarType "int8"],ScalarType "inet"),("inetnot",[ScalarType "inet"],ScalarType "inet"),("inetor",[ScalarType "inet",ScalarType "inet"],ScalarType "inet"),("inetpl",[ScalarType "inet",ScalarType "int8"],ScalarType "inet"),("initcap",[ScalarType "text"],ScalarType "text"),("int2",[ScalarType "int8"],ScalarType "int2"),("int2",[ScalarType "int4"],ScalarType "int2"),("int2",[ScalarType "float4"],ScalarType "int2"),("int2",[ScalarType "float8"],ScalarType "int2"),("int2",[ScalarType "numeric"],ScalarType "int2"),("int24div",[ScalarType "int2",ScalarType "int4"],ScalarType "int4"),("int24eq",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),("int24ge",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),("int24gt",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),("int24le",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),("int24lt",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),("int24mi",[ScalarType "int2",ScalarType "int4"],ScalarType "int4"),("int24mul",[ScalarType "int2",ScalarType "int4"],ScalarType "int4"),("int24ne",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),("int24pl",[ScalarType "int2",ScalarType "int4"],ScalarType "int4"),("int28div",[ScalarType "int2",ScalarType "int8"],ScalarType "int8"),("int28eq",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),("int28ge",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),("int28gt",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),("int28le",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),("int28lt",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),("int28mi",[ScalarType "int2",ScalarType "int8"],ScalarType "int8"),("int28mul",[ScalarType "int2",ScalarType "int8"],ScalarType "int8"),("int28ne",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),("int28pl",[ScalarType "int2",ScalarType "int8"],ScalarType "int8"),("int2_accum",[ArrayType (ScalarType "numeric"),ScalarType "int2"],ArrayType (ScalarType "numeric")),("int2_avg_accum",[ArrayType (ScalarType "int8"),ScalarType "int2"],ArrayType (ScalarType "int8")),("int2_mul_cash",[ScalarType "int2",ScalarType "money"],ScalarType "money"),("int2_sum",[ScalarType "int8",ScalarType "int2"],ScalarType "int8"),("int2abs",[ScalarType "int2"],ScalarType "int2"),("int2and",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("int2div",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("int2eq",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),("int2ge",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),("int2gt",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),("int2in",[Pseudo Cstring],ScalarType "int2"),("int2larger",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("int2le",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),("int2lt",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),("int2mi",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("int2mod",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("int2mul",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("int2ne",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),("int2not",[ScalarType "int2"],ScalarType "int2"),("int2or",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("int2out",[ScalarType "int2"],Pseudo Cstring),("int2pl",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("int2recv",[Pseudo Internal],ScalarType "int2"),("int2send",[ScalarType "int2"],ScalarType "bytea"),("int2shl",[ScalarType "int2",ScalarType "int4"],ScalarType "int2"),("int2shr",[ScalarType "int2",ScalarType "int4"],ScalarType "int2"),("int2smaller",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("int2um",[ScalarType "int2"],ScalarType "int2"),("int2up",[ScalarType "int2"],ScalarType "int2"),("int2vectoreq",[ScalarType "int2vector",ScalarType "int2vector"],ScalarType "bool"),("int2vectorin",[Pseudo Cstring],ScalarType "int2vector"),("int2vectorout",[ScalarType "int2vector"],Pseudo Cstring),("int2vectorrecv",[Pseudo Internal],ScalarType "int2vector"),("int2vectorsend",[ScalarType "int2vector"],ScalarType "bytea"),("int2xor",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("int4",[ScalarType "bool"],ScalarType "int4"),("int4",[ScalarType "char"],ScalarType "int4"),("int4",[ScalarType "int8"],ScalarType "int4"),("int4",[ScalarType "int2"],ScalarType "int4"),("int4",[ScalarType "float4"],ScalarType "int4"),("int4",[ScalarType "float8"],ScalarType "int4"),("int4",[ScalarType "bit"],ScalarType "int4"),("int4",[ScalarType "numeric"],ScalarType "int4"),("int42div",[ScalarType "int4",ScalarType "int2"],ScalarType "int4"),("int42eq",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),("int42ge",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),("int42gt",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),("int42le",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),("int42lt",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),("int42mi",[ScalarType "int4",ScalarType "int2"],ScalarType "int4"),("int42mul",[ScalarType "int4",ScalarType "int2"],ScalarType "int4"),("int42ne",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),("int42pl",[ScalarType "int4",ScalarType "int2"],ScalarType "int4"),("int48div",[ScalarType "int4",ScalarType "int8"],ScalarType "int8"),("int48eq",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),("int48ge",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),("int48gt",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),("int48le",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),("int48lt",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),("int48mi",[ScalarType "int4",ScalarType "int8"],ScalarType "int8"),("int48mul",[ScalarType "int4",ScalarType "int8"],ScalarType "int8"),("int48ne",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),("int48pl",[ScalarType "int4",ScalarType "int8"],ScalarType "int8"),("int4_accum",[ArrayType (ScalarType "numeric"),ScalarType "int4"],ArrayType (ScalarType "numeric")),("int4_avg_accum",[ArrayType (ScalarType "int8"),ScalarType "int4"],ArrayType (ScalarType "int8")),("int4_mul_cash",[ScalarType "int4",ScalarType "money"],ScalarType "money"),("int4_sum",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("int4abs",[ScalarType "int4"],ScalarType "int4"),("int4and",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int4div",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int4eq",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("int4ge",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("int4gt",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("int4in",[Pseudo Cstring],ScalarType "int4"),("int4inc",[ScalarType "int4"],ScalarType "int4"),("int4larger",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int4le",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("int4lt",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("int4mi",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int4mod",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int4mul",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int4ne",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("int4not",[ScalarType "int4"],ScalarType "int4"),("int4or",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int4out",[ScalarType "int4"],Pseudo Cstring),("int4pl",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int4recv",[Pseudo Internal],ScalarType "int4"),("int4send",[ScalarType "int4"],ScalarType "bytea"),("int4shl",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int4shr",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int4smaller",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int4um",[ScalarType "int4"],ScalarType "int4"),("int4up",[ScalarType "int4"],ScalarType "int4"),("int4xor",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int8",[ScalarType "int2"],ScalarType "int8"),("int8",[ScalarType "int4"],ScalarType "int8"),("int8",[ScalarType "oid"],ScalarType "int8"),("int8",[ScalarType "float4"],ScalarType "int8"),("int8",[ScalarType "float8"],ScalarType "int8"),("int8",[ScalarType "bit"],ScalarType "int8"),("int8",[ScalarType "numeric"],ScalarType "int8"),("int82div",[ScalarType "int8",ScalarType "int2"],ScalarType "int8"),("int82eq",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),("int82ge",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),("int82gt",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),("int82le",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),("int82lt",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),("int82mi",[ScalarType "int8",ScalarType "int2"],ScalarType "int8"),("int82mul",[ScalarType "int8",ScalarType "int2"],ScalarType "int8"),("int82ne",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),("int82pl",[ScalarType "int8",ScalarType "int2"],ScalarType "int8"),("int84div",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("int84eq",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),("int84ge",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),("int84gt",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),("int84le",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),("int84lt",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),("int84mi",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("int84mul",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("int84ne",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),("int84pl",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("int8_accum",[ArrayType (ScalarType "numeric"),ScalarType "int8"],ArrayType (ScalarType "numeric")),("int8_avg",[ArrayType (ScalarType "int8")],ScalarType "numeric"),("int8_avg_accum",[ArrayType (ScalarType "numeric"),ScalarType "int8"],ArrayType (ScalarType "numeric")),("int8_sum",[ScalarType "numeric",ScalarType "int8"],ScalarType "numeric"),("int8abs",[ScalarType "int8"],ScalarType "int8"),("int8and",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("int8div",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("int8eq",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),("int8ge",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),("int8gt",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),("int8in",[Pseudo Cstring],ScalarType "int8"),("int8inc",[ScalarType "int8"],ScalarType "int8"),("int8inc_any",[ScalarType "int8",Pseudo Any],ScalarType "int8"),("int8inc_float8_float8",[ScalarType "int8",ScalarType "float8",ScalarType "float8"],ScalarType "int8"),("int8larger",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("int8le",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),("int8lt",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),("int8mi",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("int8mod",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("int8mul",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("int8ne",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),("int8not",[ScalarType "int8"],ScalarType "int8"),("int8or",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("int8out",[ScalarType "int8"],Pseudo Cstring),("int8pl",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("int8pl_inet",[ScalarType "int8",ScalarType "inet"],ScalarType "inet"),("int8recv",[Pseudo Internal],ScalarType "int8"),("int8send",[ScalarType "int8"],ScalarType "bytea"),("int8shl",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("int8shr",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("int8smaller",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("int8um",[ScalarType "int8"],ScalarType "int8"),("int8up",[ScalarType "int8"],ScalarType "int8"),("int8xor",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("integer_pl_date",[ScalarType "int4",ScalarType "date"],ScalarType "date"),("inter_lb",[ScalarType "line",ScalarType "box"],ScalarType "bool"),("inter_sb",[ScalarType "lseg",ScalarType "box"],ScalarType "bool"),("inter_sl",[ScalarType "lseg",ScalarType "line"],ScalarType "bool"),("internal_in",[Pseudo Cstring],Pseudo Internal),("internal_out",[Pseudo Internal],Pseudo Cstring),("interval",[ScalarType "reltime"],ScalarType "interval"),("interval",[ScalarType "time"],ScalarType "interval"),("interval",[ScalarType "interval",ScalarType "int4"],ScalarType "interval"),("interval_accum",[ArrayType (ScalarType "interval"),ScalarType "interval"],ArrayType (ScalarType "interval")),("interval_avg",[ArrayType (ScalarType "interval")],ScalarType "interval"),("interval_cmp",[ScalarType "interval",ScalarType "interval"],ScalarType "int4"),("interval_div",[ScalarType "interval",ScalarType "float8"],ScalarType "interval"),("interval_eq",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),("interval_ge",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),("interval_gt",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),("interval_hash",[ScalarType "interval"],ScalarType "int4"),("interval_in",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],ScalarType "interval"),("interval_larger",[ScalarType "interval",ScalarType "interval"],ScalarType "interval"),("interval_le",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),("interval_lt",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),("interval_mi",[ScalarType "interval",ScalarType "interval"],ScalarType "interval"),("interval_mul",[ScalarType "interval",ScalarType "float8"],ScalarType "interval"),("interval_ne",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),("interval_out",[ScalarType "interval"],Pseudo Cstring),("interval_pl",[ScalarType "interval",ScalarType "interval"],ScalarType "interval"),("interval_pl_date",[ScalarType "interval",ScalarType "date"],ScalarType "timestamp"),("interval_pl_time",[ScalarType "interval",ScalarType "time"],ScalarType "time"),("interval_pl_timestamp",[ScalarType "interval",ScalarType "timestamp"],ScalarType "timestamp"),("interval_pl_timestamptz",[ScalarType "interval",ScalarType "timestamptz"],ScalarType "timestamptz"),("interval_pl_timetz",[ScalarType "interval",ScalarType "timetz"],ScalarType "timetz"),("interval_recv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],ScalarType "interval"),("interval_send",[ScalarType "interval"],ScalarType "bytea"),("interval_smaller",[ScalarType "interval",ScalarType "interval"],ScalarType "interval"),("interval_um",[ScalarType "interval"],ScalarType "interval"),("intervaltypmodin",[ArrayType (Pseudo Cstring)],ScalarType "int4"),("intervaltypmodout",[ScalarType "int4"],Pseudo Cstring),("intinterval",[ScalarType "abstime",ScalarType "tinterval"],ScalarType "bool"),("isclosed",[ScalarType "path"],ScalarType "bool"),("isfinite",[ScalarType "abstime"],ScalarType "bool"),("isfinite",[ScalarType "date"],ScalarType "bool"),("isfinite",[ScalarType "timestamp"],ScalarType "bool"),("isfinite",[ScalarType "timestamptz"],ScalarType "bool"),("isfinite",[ScalarType "interval"],ScalarType "bool"),("ishorizontal",[ScalarType "lseg"],ScalarType "bool"),("ishorizontal",[ScalarType "line"],ScalarType "bool"),("ishorizontal",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("iso8859_1_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("iso8859_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("iso_to_koi8r",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("iso_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("iso_to_win1251",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("iso_to_win866",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("isopen",[ScalarType "path"],ScalarType "bool"),("isparallel",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("isparallel",[ScalarType "line",ScalarType "line"],ScalarType "bool"),("isperp",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("isperp",[ScalarType "line",ScalarType "line"],ScalarType "bool"),("isvertical",[ScalarType "lseg"],ScalarType "bool"),("isvertical",[ScalarType "line"],ScalarType "bool"),("isvertical",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("johab_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("justify_days",[ScalarType "interval"],ScalarType "interval"),("justify_hours",[ScalarType "interval"],ScalarType "interval"),("justify_interval",[ScalarType "interval"],ScalarType "interval"),("koi8r_to_iso",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("koi8r_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("koi8r_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("koi8r_to_win1251",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("koi8r_to_win866",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("koi8u_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("language_handler_in",[Pseudo Cstring],Pseudo LanguageHandler),("language_handler_out",[Pseudo LanguageHandler],Pseudo Cstring),("lastval",[],ScalarType "int8"),("latin1_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("latin2_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("latin2_to_win1250",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("latin3_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("latin4_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("length",[ScalarType "bytea"],ScalarType "int4"),("length",[ScalarType "text"],ScalarType "int4"),("length",[ScalarType "lseg"],ScalarType "float8"),("length",[ScalarType "path"],ScalarType "float8"),("length",[ScalarType "bpchar"],ScalarType "int4"),("length",[ScalarType "bit"],ScalarType "int4"),("length",[ScalarType "tsvector"],ScalarType "int4"),("length",[ScalarType "bytea",ScalarType "name"],ScalarType "int4"),("like",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("like",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("like",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("like_escape",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bytea"),("like_escape",[ScalarType "text",ScalarType "text"],ScalarType "text"),("likejoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("likesel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("line",[ScalarType "point",ScalarType "point"],ScalarType "line"),("line_distance",[ScalarType "line",ScalarType "line"],ScalarType "float8"),("line_eq",[ScalarType "line",ScalarType "line"],ScalarType "bool"),("line_horizontal",[ScalarType "line"],ScalarType "bool"),("line_in",[Pseudo Cstring],ScalarType "line"),("line_interpt",[ScalarType "line",ScalarType "line"],ScalarType "point"),("line_intersect",[ScalarType "line",ScalarType "line"],ScalarType "bool"),("line_out",[ScalarType "line"],Pseudo Cstring),("line_parallel",[ScalarType "line",ScalarType "line"],ScalarType "bool"),("line_perp",[ScalarType "line",ScalarType "line"],ScalarType "bool"),("line_recv",[Pseudo Internal],ScalarType "line"),("line_send",[ScalarType "line"],ScalarType "bytea"),("line_vertical",[ScalarType "line"],ScalarType "bool"),("ln",[ScalarType "float8"],ScalarType "float8"),("ln",[ScalarType "numeric"],ScalarType "numeric"),("lo_close",[ScalarType "int4"],ScalarType "int4"),("lo_creat",[ScalarType "int4"],ScalarType "oid"),("lo_create",[ScalarType "oid"],ScalarType "oid"),("lo_export",[ScalarType "oid",ScalarType "text"],ScalarType "int4"),("lo_import",[ScalarType "text"],ScalarType "oid"),("lo_import",[ScalarType "text",ScalarType "oid"],ScalarType "oid"),("lo_lseek",[ScalarType "int4",ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("lo_open",[ScalarType "oid",ScalarType "int4"],ScalarType "int4"),("lo_tell",[ScalarType "int4"],ScalarType "int4"),("lo_truncate",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("lo_unlink",[ScalarType "oid"],ScalarType "int4"),("log",[ScalarType "float8"],ScalarType "float8"),("log",[ScalarType "numeric"],ScalarType "numeric"),("log",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("loread",[ScalarType "int4",ScalarType "int4"],ScalarType "bytea"),("lower",[ScalarType "text"],ScalarType "text"),("lowrite",[ScalarType "int4",ScalarType "bytea"],ScalarType "int4"),("lpad",[ScalarType "text",ScalarType "int4"],ScalarType "text"),("lpad",[ScalarType "text",ScalarType "int4",ScalarType "text"],ScalarType "text"),("lseg",[ScalarType "box"],ScalarType "lseg"),("lseg",[ScalarType "point",ScalarType "point"],ScalarType "lseg"),("lseg_center",[ScalarType "lseg"],ScalarType "point"),("lseg_distance",[ScalarType "lseg",ScalarType "lseg"],ScalarType "float8"),("lseg_eq",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("lseg_ge",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("lseg_gt",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("lseg_horizontal",[ScalarType "lseg"],ScalarType "bool"),("lseg_in",[Pseudo Cstring],ScalarType "lseg"),("lseg_interpt",[ScalarType "lseg",ScalarType "lseg"],ScalarType "point"),("lseg_intersect",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("lseg_le",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("lseg_length",[ScalarType "lseg"],ScalarType "float8"),("lseg_lt",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("lseg_ne",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("lseg_out",[ScalarType "lseg"],Pseudo Cstring),("lseg_parallel",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("lseg_perp",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("lseg_recv",[Pseudo Internal],ScalarType "lseg"),("lseg_send",[ScalarType "lseg"],ScalarType "bytea"),("lseg_vertical",[ScalarType "lseg"],ScalarType "bool"),("ltrim",[ScalarType "text"],ScalarType "text"),("ltrim",[ScalarType "text",ScalarType "text"],ScalarType "text"),("macaddr_cmp",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "int4"),("macaddr_eq",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),("macaddr_ge",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),("macaddr_gt",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),("macaddr_in",[Pseudo Cstring],ScalarType "macaddr"),("macaddr_le",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),("macaddr_lt",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),("macaddr_ne",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),("macaddr_out",[ScalarType "macaddr"],Pseudo Cstring),("macaddr_recv",[Pseudo Internal],ScalarType "macaddr"),("macaddr_send",[ScalarType "macaddr"],ScalarType "bytea"),("makeaclitem",[ScalarType "oid",ScalarType "oid",ScalarType "text",ScalarType "bool"],ScalarType "aclitem"),("masklen",[ScalarType "inet"],ScalarType "int4"),("md5",[ScalarType "bytea"],ScalarType "text"),("md5",[ScalarType "text"],ScalarType "text"),("mic_to_ascii",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_big5",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_euc_cn",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_euc_jp",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_euc_kr",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_euc_tw",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_iso",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_koi8r",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_latin1",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_latin2",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_latin3",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_latin4",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_sjis",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_win1250",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_win1251",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_win866",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mktinterval",[ScalarType "abstime",ScalarType "abstime"],ScalarType "tinterval"),("mod",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("mod",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("mod",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("mod",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("mul_d_interval",[ScalarType "float8",ScalarType "interval"],ScalarType "interval"),("name",[ScalarType "text"],ScalarType "name"),("name",[ScalarType "bpchar"],ScalarType "name"),("name",[ScalarType "varchar"],ScalarType "name"),("nameeq",[ScalarType "name",ScalarType "name"],ScalarType "bool"),("namege",[ScalarType "name",ScalarType "name"],ScalarType "bool"),("namegt",[ScalarType "name",ScalarType "name"],ScalarType "bool"),("nameiclike",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("nameicnlike",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("nameicregexeq",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("nameicregexne",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("namein",[Pseudo Cstring],ScalarType "name"),("namele",[ScalarType "name",ScalarType "name"],ScalarType "bool"),("namelike",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("namelt",[ScalarType "name",ScalarType "name"],ScalarType "bool"),("namene",[ScalarType "name",ScalarType "name"],ScalarType "bool"),("namenlike",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("nameout",[ScalarType "name"],Pseudo Cstring),("namerecv",[Pseudo Internal],ScalarType "name"),("nameregexeq",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("nameregexne",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("namesend",[ScalarType "name"],ScalarType "bytea"),("neqjoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("neqsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("netmask",[ScalarType "inet"],ScalarType "inet"),("network",[ScalarType "inet"],ScalarType "cidr"),("network_cmp",[ScalarType "inet",ScalarType "inet"],ScalarType "int4"),("network_eq",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("network_ge",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("network_gt",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("network_le",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("network_lt",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("network_ne",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("network_sub",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("network_subeq",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("network_sup",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("network_supeq",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("nextval",[ScalarType "regclass"],ScalarType "int8"),("nlikejoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("nlikesel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("notlike",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("notlike",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("notlike",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("now",[],ScalarType "timestamptz"),("npoints",[ScalarType "path"],ScalarType "int4"),("npoints",[ScalarType "polygon"],ScalarType "int4"),("numeric",[ScalarType "int8"],ScalarType "numeric"),("numeric",[ScalarType "int2"],ScalarType "numeric"),("numeric",[ScalarType "int4"],ScalarType "numeric"),("numeric",[ScalarType "float4"],ScalarType "numeric"),("numeric",[ScalarType "float8"],ScalarType "numeric"),("numeric",[ScalarType "numeric",ScalarType "int4"],ScalarType "numeric"),("numeric_abs",[ScalarType "numeric"],ScalarType "numeric"),("numeric_accum",[ArrayType (ScalarType "numeric"),ScalarType "numeric"],ArrayType (ScalarType "numeric")),("numeric_add",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("numeric_avg",[ArrayType (ScalarType "numeric")],ScalarType "numeric"),("numeric_avg_accum",[ArrayType (ScalarType "numeric"),ScalarType "numeric"],ArrayType (ScalarType "numeric")),("numeric_cmp",[ScalarType "numeric",ScalarType "numeric"],ScalarType "int4"),("numeric_div",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("numeric_div_trunc",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("numeric_eq",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),("numeric_exp",[ScalarType "numeric"],ScalarType "numeric"),("numeric_fac",[ScalarType "int8"],ScalarType "numeric"),("numeric_ge",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),("numeric_gt",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),("numeric_in",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],ScalarType "numeric"),("numeric_inc",[ScalarType "numeric"],ScalarType "numeric"),("numeric_larger",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("numeric_le",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),("numeric_ln",[ScalarType "numeric"],ScalarType "numeric"),("numeric_log",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("numeric_lt",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),("numeric_mod",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("numeric_mul",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("numeric_ne",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),("numeric_out",[ScalarType "numeric"],Pseudo Cstring),("numeric_power",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("numeric_recv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],ScalarType "numeric"),("numeric_send",[ScalarType "numeric"],ScalarType "bytea"),("numeric_smaller",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("numeric_sqrt",[ScalarType "numeric"],ScalarType "numeric"),("numeric_stddev_pop",[ArrayType (ScalarType "numeric")],ScalarType "numeric"),("numeric_stddev_samp",[ArrayType (ScalarType "numeric")],ScalarType "numeric"),("numeric_sub",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("numeric_uminus",[ScalarType "numeric"],ScalarType "numeric"),("numeric_uplus",[ScalarType "numeric"],ScalarType "numeric"),("numeric_var_pop",[ArrayType (ScalarType "numeric")],ScalarType "numeric"),("numeric_var_samp",[ArrayType (ScalarType "numeric")],ScalarType "numeric"),("numerictypmodin",[ArrayType (Pseudo Cstring)],ScalarType "int4"),("numerictypmodout",[ScalarType "int4"],Pseudo Cstring),("numnode",[ScalarType "tsquery"],ScalarType "int4"),("obj_description",[ScalarType "oid"],ScalarType "text"),("obj_description",[ScalarType "oid",ScalarType "name"],ScalarType "text"),("octet_length",[ScalarType "bytea"],ScalarType "int4"),("octet_length",[ScalarType "text"],ScalarType "int4"),("octet_length",[ScalarType "bpchar"],ScalarType "int4"),("octet_length",[ScalarType "bit"],ScalarType "int4"),("oid",[ScalarType "int8"],ScalarType "oid"),("oideq",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),("oidge",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),("oidgt",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),("oidin",[Pseudo Cstring],ScalarType "oid"),("oidlarger",[ScalarType "oid",ScalarType "oid"],ScalarType "oid"),("oidle",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),("oidlt",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),("oidne",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),("oidout",[ScalarType "oid"],Pseudo Cstring),("oidrecv",[Pseudo Internal],ScalarType "oid"),("oidsend",[ScalarType "oid"],ScalarType "bytea"),("oidsmaller",[ScalarType "oid",ScalarType "oid"],ScalarType "oid"),("oidvectoreq",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),("oidvectorge",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),("oidvectorgt",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),("oidvectorin",[Pseudo Cstring],ScalarType "oidvector"),("oidvectorle",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),("oidvectorlt",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),("oidvectorne",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),("oidvectorout",[ScalarType "oidvector"],Pseudo Cstring),("oidvectorrecv",[Pseudo Internal],ScalarType "oidvector"),("oidvectorsend",[ScalarType "oidvector"],ScalarType "bytea"),("oidvectortypes",[ScalarType "oidvector"],ScalarType "text"),("on_pb",[ScalarType "point",ScalarType "box"],ScalarType "bool"),("on_pl",[ScalarType "point",ScalarType "line"],ScalarType "bool"),("on_ppath",[ScalarType "point",ScalarType "path"],ScalarType "bool"),("on_ps",[ScalarType "point",ScalarType "lseg"],ScalarType "bool"),("on_sb",[ScalarType "lseg",ScalarType "box"],ScalarType "bool"),("on_sl",[ScalarType "lseg",ScalarType "line"],ScalarType "bool"),("opaque_in",[Pseudo Cstring],Pseudo Opaque),("opaque_out",[Pseudo Opaque],Pseudo Cstring),("overlaps",[ScalarType "time",ScalarType "time",ScalarType "time",ScalarType "time"],ScalarType "bool"),("overlaps",[ScalarType "time",ScalarType "time",ScalarType "time",ScalarType "interval"],ScalarType "bool"),("overlaps",[ScalarType "time",ScalarType "interval",ScalarType "time",ScalarType "time"],ScalarType "bool"),("overlaps",[ScalarType "time",ScalarType "interval",ScalarType "time",ScalarType "interval"],ScalarType "bool"),("overlaps",[ScalarType "timestamp",ScalarType "timestamp",ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("overlaps",[ScalarType "timestamp",ScalarType "timestamp",ScalarType "timestamp",ScalarType "interval"],ScalarType "bool"),("overlaps",[ScalarType "timestamp",ScalarType "interval",ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("overlaps",[ScalarType "timestamp",ScalarType "interval",ScalarType "timestamp",ScalarType "interval"],ScalarType "bool"),("overlaps",[ScalarType "timestamptz",ScalarType "timestamptz",ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("overlaps",[ScalarType "timestamptz",ScalarType "timestamptz",ScalarType "timestamptz",ScalarType "interval"],ScalarType "bool"),("overlaps",[ScalarType "timestamptz",ScalarType "interval",ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("overlaps",[ScalarType "timestamptz",ScalarType "interval",ScalarType "timestamptz",ScalarType "interval"],ScalarType "bool"),("overlaps",[ScalarType "timetz",ScalarType "timetz",ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),("overlay",[ScalarType "text",ScalarType "text",ScalarType "int4"],ScalarType "text"),("overlay",[ScalarType "text",ScalarType "text",ScalarType "int4",ScalarType "int4"],ScalarType "text"),("path",[ScalarType "polygon"],ScalarType "path"),("path_add",[ScalarType "path",ScalarType "path"],ScalarType "path"),("path_add_pt",[ScalarType "path",ScalarType "point"],ScalarType "path"),("path_center",[ScalarType "path"],ScalarType "point"),("path_contain_pt",[ScalarType "path",ScalarType "point"],ScalarType "bool"),("path_distance",[ScalarType "path",ScalarType "path"],ScalarType "float8"),("path_div_pt",[ScalarType "path",ScalarType "point"],ScalarType "path"),("path_in",[Pseudo Cstring],ScalarType "path"),("path_inter",[ScalarType "path",ScalarType "path"],ScalarType "bool"),("path_length",[ScalarType "path"],ScalarType "float8"),("path_mul_pt",[ScalarType "path",ScalarType "point"],ScalarType "path"),("path_n_eq",[ScalarType "path",ScalarType "path"],ScalarType "bool"),("path_n_ge",[ScalarType "path",ScalarType "path"],ScalarType "bool"),("path_n_gt",[ScalarType "path",ScalarType "path"],ScalarType "bool"),("path_n_le",[ScalarType "path",ScalarType "path"],ScalarType "bool"),("path_n_lt",[ScalarType "path",ScalarType "path"],ScalarType "bool"),("path_npoints",[ScalarType "path"],ScalarType "int4"),("path_out",[ScalarType "path"],Pseudo Cstring),("path_recv",[Pseudo Internal],ScalarType "path"),("path_send",[ScalarType "path"],ScalarType "bytea"),("path_sub_pt",[ScalarType "path",ScalarType "point"],ScalarType "path"),("pclose",[ScalarType "path"],ScalarType "path"),("pg_advisory_lock",[ScalarType "int8"],Pseudo Void),("pg_advisory_lock",[ScalarType "int4",ScalarType "int4"],Pseudo Void),("pg_advisory_lock_shared",[ScalarType "int8"],Pseudo Void),("pg_advisory_lock_shared",[ScalarType "int4",ScalarType "int4"],Pseudo Void),("pg_advisory_unlock",[ScalarType "int8"],ScalarType "bool"),("pg_advisory_unlock",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("pg_advisory_unlock_all",[],Pseudo Void),("pg_advisory_unlock_shared",[ScalarType "int8"],ScalarType "bool"),("pg_advisory_unlock_shared",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("pg_backend_pid",[],ScalarType "int4"),("pg_cancel_backend",[ScalarType "int4"],ScalarType "bool"),("pg_char_to_encoding",[ScalarType "name"],ScalarType "int4"),("pg_client_encoding",[],ScalarType "name"),("pg_column_size",[Pseudo Any],ScalarType "int4"),("pg_conf_load_time",[],ScalarType "timestamptz"),("pg_conversion_is_visible",[ScalarType "oid"],ScalarType "bool"),("pg_current_xlog_insert_location",[],ScalarType "text"),("pg_current_xlog_location",[],ScalarType "text"),("pg_cursor",[],SetOfType (Pseudo Record)),("pg_database_size",[ScalarType "name"],ScalarType "int8"),("pg_database_size",[ScalarType "oid"],ScalarType "int8"),("pg_encoding_to_char",[ScalarType "int4"],ScalarType "name"),("pg_function_is_visible",[ScalarType "oid"],ScalarType "bool"),("pg_get_constraintdef",[ScalarType "oid"],ScalarType "text"),("pg_get_constraintdef",[ScalarType "oid",ScalarType "bool"],ScalarType "text"),("pg_get_expr",[ScalarType "text",ScalarType "oid"],ScalarType "text"),("pg_get_expr",[ScalarType "text",ScalarType "oid",ScalarType "bool"],ScalarType "text"),("pg_get_function_arguments",[ScalarType "oid"],ScalarType "text"),("pg_get_function_identity_arguments",[ScalarType "oid"],ScalarType "text"),("pg_get_function_result",[ScalarType "oid"],ScalarType "text"),("pg_get_functiondef",[ScalarType "oid"],ScalarType "text"),("pg_get_indexdef",[ScalarType "oid"],ScalarType "text"),("pg_get_indexdef",[ScalarType "oid",ScalarType "int4",ScalarType "bool"],ScalarType "text"),("pg_get_keywords",[],SetOfType (Pseudo Record)),("pg_get_ruledef",[ScalarType "oid"],ScalarType "text"),("pg_get_ruledef",[ScalarType "oid",ScalarType "bool"],ScalarType "text"),("pg_get_serial_sequence",[ScalarType "text",ScalarType "text"],ScalarType "text"),("pg_get_triggerdef",[ScalarType "oid"],ScalarType "text"),("pg_get_userbyid",[ScalarType "oid"],ScalarType "name"),("pg_get_viewdef",[ScalarType "text"],ScalarType "text"),("pg_get_viewdef",[ScalarType "oid"],ScalarType "text"),("pg_get_viewdef",[ScalarType "text",ScalarType "bool"],ScalarType "text"),("pg_get_viewdef",[ScalarType "oid",ScalarType "bool"],ScalarType "text"),("pg_has_role",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("pg_has_role",[ScalarType "oid",ScalarType "text"],ScalarType "bool"),("pg_has_role",[ScalarType "name",ScalarType "name",ScalarType "text"],ScalarType "bool"),("pg_has_role",[ScalarType "name",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("pg_has_role",[ScalarType "oid",ScalarType "name",ScalarType "text"],ScalarType "bool"),("pg_has_role",[ScalarType "oid",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("pg_is_other_temp_schema",[ScalarType "oid"],ScalarType "bool"),("pg_lock_status",[],SetOfType (Pseudo Record)),("pg_ls_dir",[ScalarType "text"],SetOfType (ScalarType "text")),("pg_my_temp_schema",[],ScalarType "oid"),("pg_opclass_is_visible",[ScalarType "oid"],ScalarType "bool"),("pg_operator_is_visible",[ScalarType "oid"],ScalarType "bool"),("pg_options_to_table",[ArrayType (ScalarType "text")],SetOfType (Pseudo Record)),("pg_postmaster_start_time",[],ScalarType "timestamptz"),("pg_prepared_statement",[],SetOfType (Pseudo Record)),("pg_prepared_xact",[],SetOfType (Pseudo Record)),("pg_read_file",[ScalarType "text",ScalarType "int8",ScalarType "int8"],ScalarType "text"),("pg_relation_size",[ScalarType "regclass"],ScalarType "int8"),("pg_relation_size",[ScalarType "regclass",ScalarType "text"],ScalarType "int8"),("pg_reload_conf",[],ScalarType "bool"),("pg_rotate_logfile",[],ScalarType "bool"),("pg_show_all_settings",[],SetOfType (Pseudo Record)),("pg_size_pretty",[ScalarType "int8"],ScalarType "text"),("pg_sleep",[ScalarType "float8"],Pseudo Void),("pg_start_backup",[ScalarType "text",ScalarType "bool"],ScalarType "text"),("pg_stat_clear_snapshot",[],Pseudo Void),("pg_stat_file",[ScalarType "text"],Pseudo Record),("pg_stat_get_activity",[ScalarType "int4"],SetOfType (Pseudo Record)),("pg_stat_get_backend_activity",[ScalarType "int4"],ScalarType "text"),("pg_stat_get_backend_activity_start",[ScalarType "int4"],ScalarType "timestamptz"),("pg_stat_get_backend_client_addr",[ScalarType "int4"],ScalarType "inet"),("pg_stat_get_backend_client_port",[ScalarType "int4"],ScalarType "int4"),("pg_stat_get_backend_dbid",[ScalarType "int4"],ScalarType "oid"),("pg_stat_get_backend_idset",[],SetOfType (ScalarType "int4")),("pg_stat_get_backend_pid",[ScalarType "int4"],ScalarType "int4"),("pg_stat_get_backend_start",[ScalarType "int4"],ScalarType "timestamptz"),("pg_stat_get_backend_userid",[ScalarType "int4"],ScalarType "oid"),("pg_stat_get_backend_waiting",[ScalarType "int4"],ScalarType "bool"),("pg_stat_get_backend_xact_start",[ScalarType "int4"],ScalarType "timestamptz"),("pg_stat_get_bgwriter_buf_written_checkpoints",[],ScalarType "int8"),("pg_stat_get_bgwriter_buf_written_clean",[],ScalarType "int8"),("pg_stat_get_bgwriter_maxwritten_clean",[],ScalarType "int8"),("pg_stat_get_bgwriter_requested_checkpoints",[],ScalarType "int8"),("pg_stat_get_bgwriter_timed_checkpoints",[],ScalarType "int8"),("pg_stat_get_blocks_fetched",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_blocks_hit",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_buf_alloc",[],ScalarType "int8"),("pg_stat_get_buf_written_backend",[],ScalarType "int8"),("pg_stat_get_db_blocks_fetched",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_db_blocks_hit",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_db_numbackends",[ScalarType "oid"],ScalarType "int4"),("pg_stat_get_db_tuples_deleted",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_db_tuples_fetched",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_db_tuples_inserted",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_db_tuples_returned",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_db_tuples_updated",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_db_xact_commit",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_db_xact_rollback",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_dead_tuples",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_function_calls",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_function_self_time",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_function_time",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_last_analyze_time",[ScalarType "oid"],ScalarType "timestamptz"),("pg_stat_get_last_autoanalyze_time",[ScalarType "oid"],ScalarType "timestamptz"),("pg_stat_get_last_autovacuum_time",[ScalarType "oid"],ScalarType "timestamptz"),("pg_stat_get_last_vacuum_time",[ScalarType "oid"],ScalarType "timestamptz"),("pg_stat_get_live_tuples",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_numscans",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_tuples_deleted",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_tuples_fetched",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_tuples_hot_updated",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_tuples_inserted",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_tuples_returned",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_tuples_updated",[ScalarType "oid"],ScalarType "int8"),("pg_stat_reset",[],Pseudo Void),("pg_stop_backup",[],ScalarType "text"),("pg_switch_xlog",[],ScalarType "text"),("pg_table_is_visible",[ScalarType "oid"],ScalarType "bool"),("pg_tablespace_databases",[ScalarType "oid"],SetOfType (ScalarType "oid")),("pg_tablespace_size",[ScalarType "name"],ScalarType "int8"),("pg_tablespace_size",[ScalarType "oid"],ScalarType "int8"),("pg_terminate_backend",[ScalarType "int4"],ScalarType "bool"),("pg_timezone_abbrevs",[],SetOfType (Pseudo Record)),("pg_timezone_names",[],SetOfType (Pseudo Record)),("pg_total_relation_size",[ScalarType "regclass"],ScalarType "int8"),("pg_try_advisory_lock",[ScalarType "int8"],ScalarType "bool"),("pg_try_advisory_lock",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("pg_try_advisory_lock_shared",[ScalarType "int8"],ScalarType "bool"),("pg_try_advisory_lock_shared",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("pg_ts_config_is_visible",[ScalarType "oid"],ScalarType "bool"),("pg_ts_dict_is_visible",[ScalarType "oid"],ScalarType "bool"),("pg_ts_parser_is_visible",[ScalarType "oid"],ScalarType "bool"),("pg_ts_template_is_visible",[ScalarType "oid"],ScalarType "bool"),("pg_type_is_visible",[ScalarType "oid"],ScalarType "bool"),("pg_typeof",[Pseudo Any],ScalarType "regtype"),("pg_xlogfile_name",[ScalarType "text"],ScalarType "text"),("pg_xlogfile_name_offset",[ScalarType "text"],Pseudo Record),("pi",[],ScalarType "float8"),("plainto_tsquery",[ScalarType "text"],ScalarType "tsquery"),("plainto_tsquery",[ScalarType "regconfig",ScalarType "text"],ScalarType "tsquery"),("point",[ScalarType "lseg"],ScalarType "point"),("point",[ScalarType "path"],ScalarType "point"),("point",[ScalarType "box"],ScalarType "point"),("point",[ScalarType "polygon"],ScalarType "point"),("point",[ScalarType "circle"],ScalarType "point"),("point",[ScalarType "float8",ScalarType "float8"],ScalarType "point"),("point_above",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("point_add",[ScalarType "point",ScalarType "point"],ScalarType "point"),("point_below",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("point_distance",[ScalarType "point",ScalarType "point"],ScalarType "float8"),("point_div",[ScalarType "point",ScalarType "point"],ScalarType "point"),("point_eq",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("point_horiz",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("point_in",[Pseudo Cstring],ScalarType "point"),("point_left",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("point_mul",[ScalarType "point",ScalarType "point"],ScalarType "point"),("point_ne",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("point_out",[ScalarType "point"],Pseudo Cstring),("point_recv",[Pseudo Internal],ScalarType "point"),("point_right",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("point_send",[ScalarType "point"],ScalarType "bytea"),("point_sub",[ScalarType "point",ScalarType "point"],ScalarType "point"),("point_vert",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("poly_above",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_below",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_center",[ScalarType "polygon"],ScalarType "point"),("poly_contain",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_contain_pt",[ScalarType "polygon",ScalarType "point"],ScalarType "bool"),("poly_contained",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_distance",[ScalarType "polygon",ScalarType "polygon"],ScalarType "float8"),("poly_in",[Pseudo Cstring],ScalarType "polygon"),("poly_left",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_npoints",[ScalarType "polygon"],ScalarType "int4"),("poly_out",[ScalarType "polygon"],Pseudo Cstring),("poly_overabove",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_overbelow",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_overlap",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_overleft",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_overright",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_recv",[Pseudo Internal],ScalarType "polygon"),("poly_right",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_same",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_send",[ScalarType "polygon"],ScalarType "bytea"),("polygon",[ScalarType "path"],ScalarType "polygon"),("polygon",[ScalarType "box"],ScalarType "polygon"),("polygon",[ScalarType "circle"],ScalarType "polygon"),("polygon",[ScalarType "int4",ScalarType "circle"],ScalarType "polygon"),("popen",[ScalarType "path"],ScalarType "path"),("position",[ScalarType "bytea",ScalarType "bytea"],ScalarType "int4"),("position",[ScalarType "text",ScalarType "text"],ScalarType "int4"),("position",[ScalarType "bit",ScalarType "bit"],ScalarType "int4"),("positionjoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("positionsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("postgresql_fdw_validator",[ArrayType (ScalarType "text"),ScalarType "oid"],ScalarType "bool"),("pow",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("pow",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("power",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("power",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("prsd_end",[Pseudo Internal],Pseudo Void),("prsd_headline",[Pseudo Internal,Pseudo Internal,ScalarType "tsquery"],Pseudo Internal),("prsd_lextype",[Pseudo Internal],Pseudo Internal),("prsd_nexttoken",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("prsd_start",[Pseudo Internal,ScalarType "int4"],Pseudo Internal),("pt_contained_circle",[ScalarType "point",ScalarType "circle"],ScalarType "bool"),("pt_contained_poly",[ScalarType "point",ScalarType "polygon"],ScalarType "bool"),("query_to_xml",[ScalarType "text",ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("query_to_xml_and_xmlschema",[ScalarType "text",ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("query_to_xmlschema",[ScalarType "text",ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("querytree",[ScalarType "tsquery"],ScalarType "text"),("quote_ident",[ScalarType "text"],ScalarType "text"),("quote_literal",[ScalarType "text"],ScalarType "text"),("quote_literal",[Pseudo AnyElement],ScalarType "text"),("quote_nullable",[ScalarType "text"],ScalarType "text"),("quote_nullable",[Pseudo AnyElement],ScalarType "text"),("radians",[ScalarType "float8"],ScalarType "float8"),("radius",[ScalarType "circle"],ScalarType "float8"),("random",[],ScalarType "float8"),("record_eq",[Pseudo Record,Pseudo Record],ScalarType "bool"),("record_ge",[Pseudo Record,Pseudo Record],ScalarType "bool"),("record_gt",[Pseudo Record,Pseudo Record],ScalarType "bool"),("record_in",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],Pseudo Record),("record_le",[Pseudo Record,Pseudo Record],ScalarType "bool"),("record_lt",[Pseudo Record,Pseudo Record],ScalarType "bool"),("record_ne",[Pseudo Record,Pseudo Record],ScalarType "bool"),("record_out",[Pseudo Record],Pseudo Cstring),("record_recv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],Pseudo Record),("record_send",[Pseudo Record],ScalarType "bytea"),("regclass",[ScalarType "text"],ScalarType "regclass"),("regclassin",[Pseudo Cstring],ScalarType "regclass"),("regclassout",[ScalarType "regclass"],Pseudo Cstring),("regclassrecv",[Pseudo Internal],ScalarType "regclass"),("regclasssend",[ScalarType "regclass"],ScalarType "bytea"),("regconfigin",[Pseudo Cstring],ScalarType "regconfig"),("regconfigout",[ScalarType "regconfig"],Pseudo Cstring),("regconfigrecv",[Pseudo Internal],ScalarType "regconfig"),("regconfigsend",[ScalarType "regconfig"],ScalarType "bytea"),("regdictionaryin",[Pseudo Cstring],ScalarType "regdictionary"),("regdictionaryout",[ScalarType "regdictionary"],Pseudo Cstring),("regdictionaryrecv",[Pseudo Internal],ScalarType "regdictionary"),("regdictionarysend",[ScalarType "regdictionary"],ScalarType "bytea"),("regexeqjoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("regexeqsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("regexnejoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("regexnesel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("regexp_matches",[ScalarType "text",ScalarType "text"],SetOfType (ArrayType (ScalarType "text"))),("regexp_matches",[ScalarType "text",ScalarType "text",ScalarType "text"],SetOfType (ArrayType (ScalarType "text"))),("regexp_replace",[ScalarType "text",ScalarType "text",ScalarType "text"],ScalarType "text"),("regexp_replace",[ScalarType "text",ScalarType "text",ScalarType "text",ScalarType "text"],ScalarType "text"),("regexp_split_to_array",[ScalarType "text",ScalarType "text"],ArrayType (ScalarType "text")),("regexp_split_to_array",[ScalarType "text",ScalarType "text",ScalarType "text"],ArrayType (ScalarType "text")),("regexp_split_to_table",[ScalarType "text",ScalarType "text"],SetOfType (ScalarType "text")),("regexp_split_to_table",[ScalarType "text",ScalarType "text",ScalarType "text"],SetOfType (ScalarType "text")),("regoperatorin",[Pseudo Cstring],ScalarType "regoperator"),("regoperatorout",[ScalarType "regoperator"],Pseudo Cstring),("regoperatorrecv",[Pseudo Internal],ScalarType "regoperator"),("regoperatorsend",[ScalarType "regoperator"],ScalarType "bytea"),("regoperin",[Pseudo Cstring],ScalarType "regoper"),("regoperout",[ScalarType "regoper"],Pseudo Cstring),("regoperrecv",[Pseudo Internal],ScalarType "regoper"),("regopersend",[ScalarType "regoper"],ScalarType "bytea"),("regprocedurein",[Pseudo Cstring],ScalarType "regprocedure"),("regprocedureout",[ScalarType "regprocedure"],Pseudo Cstring),("regprocedurerecv",[Pseudo Internal],ScalarType "regprocedure"),("regproceduresend",[ScalarType "regprocedure"],ScalarType "bytea"),("regprocin",[Pseudo Cstring],ScalarType "regproc"),("regprocout",[ScalarType "regproc"],Pseudo Cstring),("regprocrecv",[Pseudo Internal],ScalarType "regproc"),("regprocsend",[ScalarType "regproc"],ScalarType "bytea"),("regtypein",[Pseudo Cstring],ScalarType "regtype"),("regtypeout",[ScalarType "regtype"],Pseudo Cstring),("regtyperecv",[Pseudo Internal],ScalarType "regtype"),("regtypesend",[ScalarType "regtype"],ScalarType "bytea"),("reltime",[ScalarType "interval"],ScalarType "reltime"),("reltimeeq",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),("reltimege",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),("reltimegt",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),("reltimein",[Pseudo Cstring],ScalarType "reltime"),("reltimele",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),("reltimelt",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),("reltimene",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),("reltimeout",[ScalarType "reltime"],Pseudo Cstring),("reltimerecv",[Pseudo Internal],ScalarType "reltime"),("reltimesend",[ScalarType "reltime"],ScalarType "bytea"),("repeat",[ScalarType "text",ScalarType "int4"],ScalarType "text"),("replace",[ScalarType "text",ScalarType "text",ScalarType "text"],ScalarType "text"),("round",[ScalarType "float8"],ScalarType "float8"),("round",[ScalarType "numeric"],ScalarType "numeric"),("round",[ScalarType "numeric",ScalarType "int4"],ScalarType "numeric"),("rpad",[ScalarType "text",ScalarType "int4"],ScalarType "text"),("rpad",[ScalarType "text",ScalarType "int4",ScalarType "text"],ScalarType "text"),("rtrim",[ScalarType "text"],ScalarType "text"),("rtrim",[ScalarType "text",ScalarType "text"],ScalarType "text"),("scalargtjoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("scalargtsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("scalarltjoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("scalarltsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("schema_to_xml",[ScalarType "name",ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("schema_to_xml_and_xmlschema",[ScalarType "name",ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("schema_to_xmlschema",[ScalarType "name",ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("session_user",[],ScalarType "name"),("set_bit",[ScalarType "bytea",ScalarType "int4",ScalarType "int4"],ScalarType "bytea"),("set_byte",[ScalarType "bytea",ScalarType "int4",ScalarType "int4"],ScalarType "bytea"),("set_config",[ScalarType "text",ScalarType "text",ScalarType "bool"],ScalarType "text"),("set_masklen",[ScalarType "cidr",ScalarType "int4"],ScalarType "cidr"),("set_masklen",[ScalarType "inet",ScalarType "int4"],ScalarType "inet"),("setseed",[ScalarType "float8"],Pseudo Void),("setval",[ScalarType "regclass",ScalarType "int8"],ScalarType "int8"),("setval",[ScalarType "regclass",ScalarType "int8",ScalarType "bool"],ScalarType "int8"),("setweight",[ScalarType "tsvector",ScalarType "char"],ScalarType "tsvector"),("shell_in",[Pseudo Cstring],Pseudo Opaque),("shell_out",[Pseudo Opaque],Pseudo Cstring),("shift_jis_2004_to_euc_jis_2004",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("shift_jis_2004_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("shobj_description",[ScalarType "oid",ScalarType "name"],ScalarType "text"),("sign",[ScalarType "float8"],ScalarType "float8"),("sign",[ScalarType "numeric"],ScalarType "numeric"),("similar_escape",[ScalarType "text",ScalarType "text"],ScalarType "text"),("sin",[ScalarType "float8"],ScalarType "float8"),("sjis_to_euc_jp",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("sjis_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("sjis_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("slope",[ScalarType "point",ScalarType "point"],ScalarType "float8"),("smgreq",[ScalarType "smgr",ScalarType "smgr"],ScalarType "bool"),("smgrin",[Pseudo Cstring],ScalarType "smgr"),("smgrne",[ScalarType "smgr",ScalarType "smgr"],ScalarType "bool"),("smgrout",[ScalarType "smgr"],Pseudo Cstring),("split_part",[ScalarType "text",ScalarType "text",ScalarType "int4"],ScalarType "text"),("sqrt",[ScalarType "float8"],ScalarType "float8"),("sqrt",[ScalarType "numeric"],ScalarType "numeric"),("statement_timestamp",[],ScalarType "timestamptz"),("string_to_array",[ScalarType "text",ScalarType "text"],ArrayType (ScalarType "text")),("strip",[ScalarType "tsvector"],ScalarType "tsvector"),("strpos",[ScalarType "text",ScalarType "text"],ScalarType "int4"),("substr",[ScalarType "bytea",ScalarType "int4"],ScalarType "bytea"),("substr",[ScalarType "text",ScalarType "int4"],ScalarType "text"),("substr",[ScalarType "bytea",ScalarType "int4",ScalarType "int4"],ScalarType "bytea"),("substr",[ScalarType "text",ScalarType "int4",ScalarType "int4"],ScalarType "text"),("substring",[ScalarType "bytea",ScalarType "int4"],ScalarType "bytea"),("substring",[ScalarType "text",ScalarType "int4"],ScalarType "text"),("substring",[ScalarType "text",ScalarType "text"],ScalarType "text"),("substring",[ScalarType "bit",ScalarType "int4"],ScalarType "bit"),("substring",[ScalarType "bytea",ScalarType "int4",ScalarType "int4"],ScalarType "bytea"),("substring",[ScalarType "text",ScalarType "int4",ScalarType "int4"],ScalarType "text"),("substring",[ScalarType "text",ScalarType "text",ScalarType "text"],ScalarType "text"),("substring",[ScalarType "bit",ScalarType "int4",ScalarType "int4"],ScalarType "bit"),("suppress_redundant_updates_trigger",[],Pseudo Trigger),("table_to_xml",[ScalarType "regclass",ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("table_to_xml_and_xmlschema",[ScalarType "regclass",ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("table_to_xmlschema",[ScalarType "regclass",ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("tan",[ScalarType "float8"],ScalarType "float8"),("text",[ScalarType "bool"],ScalarType "text"),("text",[ScalarType "char"],ScalarType "text"),("text",[ScalarType "name"],ScalarType "text"),("text",[ScalarType "xml"],ScalarType "text"),("text",[ScalarType "inet"],ScalarType "text"),("text",[ScalarType "bpchar"],ScalarType "text"),("text_ge",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("text_gt",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("text_larger",[ScalarType "text",ScalarType "text"],ScalarType "text"),("text_le",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("text_lt",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("text_pattern_ge",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("text_pattern_gt",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("text_pattern_le",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("text_pattern_lt",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("text_smaller",[ScalarType "text",ScalarType "text"],ScalarType "text"),("textanycat",[ScalarType "text",Pseudo AnyNonArray],ScalarType "text"),("textcat",[ScalarType "text",ScalarType "text"],ScalarType "text"),("texteq",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("texticlike",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("texticnlike",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("texticregexeq",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("texticregexne",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("textin",[Pseudo Cstring],ScalarType "text"),("textlen",[ScalarType "text"],ScalarType "int4"),("textlike",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("textne",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("textnlike",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("textout",[ScalarType "text"],Pseudo Cstring),("textrecv",[Pseudo Internal],ScalarType "text"),("textregexeq",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("textregexne",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("textsend",[ScalarType "text"],ScalarType "bytea"),("thesaurus_init",[Pseudo Internal],Pseudo Internal),("thesaurus_lexize",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("tideq",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),("tidge",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),("tidgt",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),("tidin",[Pseudo Cstring],ScalarType "tid"),("tidlarger",[ScalarType "tid",ScalarType "tid"],ScalarType "tid"),("tidle",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),("tidlt",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),("tidne",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),("tidout",[ScalarType "tid"],Pseudo Cstring),("tidrecv",[Pseudo Internal],ScalarType "tid"),("tidsend",[ScalarType "tid"],ScalarType "bytea"),("tidsmaller",[ScalarType "tid",ScalarType "tid"],ScalarType "tid"),("time",[ScalarType "abstime"],ScalarType "time"),("time",[ScalarType "timestamp"],ScalarType "time"),("time",[ScalarType "timestamptz"],ScalarType "time"),("time",[ScalarType "interval"],ScalarType "time"),("time",[ScalarType "timetz"],ScalarType "time"),("time",[ScalarType "time",ScalarType "int4"],ScalarType "time"),("time_cmp",[ScalarType "time",ScalarType "time"],ScalarType "int4"),("time_eq",[ScalarType "time",ScalarType "time"],ScalarType "bool"),("time_ge",[ScalarType "time",ScalarType "time"],ScalarType "bool"),("time_gt",[ScalarType "time",ScalarType "time"],ScalarType "bool"),("time_hash",[ScalarType "time"],ScalarType "int4"),("time_in",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],ScalarType "time"),("time_larger",[ScalarType "time",ScalarType "time"],ScalarType "time"),("time_le",[ScalarType "time",ScalarType "time"],ScalarType "bool"),("time_lt",[ScalarType "time",ScalarType "time"],ScalarType "bool"),("time_mi_interval",[ScalarType "time",ScalarType "interval"],ScalarType "time"),("time_mi_time",[ScalarType "time",ScalarType "time"],ScalarType "interval"),("time_ne",[ScalarType "time",ScalarType "time"],ScalarType "bool"),("time_out",[ScalarType "time"],Pseudo Cstring),("time_pl_interval",[ScalarType "time",ScalarType "interval"],ScalarType "time"),("time_recv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],ScalarType "time"),("time_send",[ScalarType "time"],ScalarType "bytea"),("time_smaller",[ScalarType "time",ScalarType "time"],ScalarType "time"),("timedate_pl",[ScalarType "time",ScalarType "date"],ScalarType "timestamp"),("timemi",[ScalarType "abstime",ScalarType "reltime"],ScalarType "abstime"),("timenow",[],ScalarType "abstime"),("timeofday",[],ScalarType "text"),("timepl",[ScalarType "abstime",ScalarType "reltime"],ScalarType "abstime"),("timestamp",[ScalarType "abstime"],ScalarType "timestamp"),("timestamp",[ScalarType "date"],ScalarType "timestamp"),("timestamp",[ScalarType "timestamptz"],ScalarType "timestamp"),("timestamp",[ScalarType "date",ScalarType "time"],ScalarType "timestamp"),("timestamp",[ScalarType "timestamp",ScalarType "int4"],ScalarType "timestamp"),("timestamp_cmp",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "int4"),("timestamp_cmp_date",[ScalarType "timestamp",ScalarType "date"],ScalarType "int4"),("timestamp_cmp_timestamptz",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "int4"),("timestamp_eq",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("timestamp_eq_date",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),("timestamp_eq_timestamptz",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),("timestamp_ge",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("timestamp_ge_date",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),("timestamp_ge_timestamptz",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),("timestamp_gt",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("timestamp_gt_date",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),("timestamp_gt_timestamptz",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),("timestamp_hash",[ScalarType "timestamp"],ScalarType "int4"),("timestamp_in",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],ScalarType "timestamp"),("timestamp_larger",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "timestamp"),("timestamp_le",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("timestamp_le_date",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),("timestamp_le_timestamptz",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),("timestamp_lt",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("timestamp_lt_date",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),("timestamp_lt_timestamptz",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),("timestamp_mi",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "interval"),("timestamp_mi_interval",[ScalarType "timestamp",ScalarType "interval"],ScalarType "timestamp"),("timestamp_ne",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("timestamp_ne_date",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),("timestamp_ne_timestamptz",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),("timestamp_out",[ScalarType "timestamp"],Pseudo Cstring),("timestamp_pl_interval",[ScalarType "timestamp",ScalarType "interval"],ScalarType "timestamp"),("timestamp_recv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],ScalarType "timestamp"),("timestamp_send",[ScalarType "timestamp"],ScalarType "bytea"),("timestamp_smaller",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "timestamp"),("timestamptypmodin",[ArrayType (Pseudo Cstring)],ScalarType "int4"),("timestamptypmodout",[ScalarType "int4"],Pseudo Cstring),("timestamptz",[ScalarType "abstime"],ScalarType "timestamptz"),("timestamptz",[ScalarType "date"],ScalarType "timestamptz"),("timestamptz",[ScalarType "timestamp"],ScalarType "timestamptz"),("timestamptz",[ScalarType "date",ScalarType "time"],ScalarType "timestamptz"),("timestamptz",[ScalarType "date",ScalarType "timetz"],ScalarType "timestamptz"),("timestamptz",[ScalarType "timestamptz",ScalarType "int4"],ScalarType "timestamptz"),("timestamptz_cmp",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "int4"),("timestamptz_cmp_date",[ScalarType "timestamptz",ScalarType "date"],ScalarType "int4"),("timestamptz_cmp_timestamp",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "int4"),("timestamptz_eq",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("timestamptz_eq_date",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),("timestamptz_eq_timestamp",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),("timestamptz_ge",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("timestamptz_ge_date",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),("timestamptz_ge_timestamp",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),("timestamptz_gt",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("timestamptz_gt_date",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),("timestamptz_gt_timestamp",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),("timestamptz_in",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],ScalarType "timestamptz"),("timestamptz_larger",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "timestamptz"),("timestamptz_le",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("timestamptz_le_date",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),("timestamptz_le_timestamp",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),("timestamptz_lt",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("timestamptz_lt_date",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),("timestamptz_lt_timestamp",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),("timestamptz_mi",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "interval"),("timestamptz_mi_interval",[ScalarType "timestamptz",ScalarType "interval"],ScalarType "timestamptz"),("timestamptz_ne",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("timestamptz_ne_date",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),("timestamptz_ne_timestamp",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),("timestamptz_out",[ScalarType "timestamptz"],Pseudo Cstring),("timestamptz_pl_interval",[ScalarType "timestamptz",ScalarType "interval"],ScalarType "timestamptz"),("timestamptz_recv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],ScalarType "timestamptz"),("timestamptz_send",[ScalarType "timestamptz"],ScalarType "bytea"),("timestamptz_smaller",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "timestamptz"),("timestamptztypmodin",[ArrayType (Pseudo Cstring)],ScalarType "int4"),("timestamptztypmodout",[ScalarType "int4"],Pseudo Cstring),("timetypmodin",[ArrayType (Pseudo Cstring)],ScalarType "int4"),("timetypmodout",[ScalarType "int4"],Pseudo Cstring),("timetz",[ScalarType "time"],ScalarType "timetz"),("timetz",[ScalarType "timestamptz"],ScalarType "timetz"),("timetz",[ScalarType "timetz",ScalarType "int4"],ScalarType "timetz"),("timetz_cmp",[ScalarType "timetz",ScalarType "timetz"],ScalarType "int4"),("timetz_eq",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),("timetz_ge",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),("timetz_gt",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),("timetz_hash",[ScalarType "timetz"],ScalarType "int4"),("timetz_in",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],ScalarType "timetz"),("timetz_larger",[ScalarType "timetz",ScalarType "timetz"],ScalarType "timetz"),("timetz_le",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),("timetz_lt",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),("timetz_mi_interval",[ScalarType "timetz",ScalarType "interval"],ScalarType "timetz"),("timetz_ne",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),("timetz_out",[ScalarType "timetz"],Pseudo Cstring),("timetz_pl_interval",[ScalarType "timetz",ScalarType "interval"],ScalarType "timetz"),("timetz_recv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],ScalarType "timetz"),("timetz_send",[ScalarType "timetz"],ScalarType "bytea"),("timetz_smaller",[ScalarType "timetz",ScalarType "timetz"],ScalarType "timetz"),("timetzdate_pl",[ScalarType "timetz",ScalarType "date"],ScalarType "timestamptz"),("timetztypmodin",[ArrayType (Pseudo Cstring)],ScalarType "int4"),("timetztypmodout",[ScalarType "int4"],Pseudo Cstring),("timezone",[ScalarType "text",ScalarType "timestamp"],ScalarType "timestamptz"),("timezone",[ScalarType "text",ScalarType "timestamptz"],ScalarType "timestamp"),("timezone",[ScalarType "text",ScalarType "timetz"],ScalarType "timetz"),("timezone",[ScalarType "interval",ScalarType "timestamp"],ScalarType "timestamptz"),("timezone",[ScalarType "interval",ScalarType "timestamptz"],ScalarType "timestamp"),("timezone",[ScalarType "interval",ScalarType "timetz"],ScalarType "timetz"),("tinterval",[ScalarType "abstime",ScalarType "abstime"],ScalarType "tinterval"),("tintervalct",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("tintervalend",[ScalarType "tinterval"],ScalarType "abstime"),("tintervaleq",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("tintervalge",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("tintervalgt",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("tintervalin",[Pseudo Cstring],ScalarType "tinterval"),("tintervalle",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("tintervalleneq",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("tintervallenge",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("tintervallengt",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("tintervallenle",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("tintervallenlt",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("tintervallenne",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("tintervallt",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("tintervalne",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("tintervalout",[ScalarType "tinterval"],Pseudo Cstring),("tintervalov",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("tintervalrecv",[Pseudo Internal],ScalarType "tinterval"),("tintervalrel",[ScalarType "tinterval"],ScalarType "reltime"),("tintervalsame",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("tintervalsend",[ScalarType "tinterval"],ScalarType "bytea"),("tintervalstart",[ScalarType "tinterval"],ScalarType "abstime"),("to_ascii",[ScalarType "text"],ScalarType "text"),("to_ascii",[ScalarType "text",ScalarType "name"],ScalarType "text"),("to_ascii",[ScalarType "text",ScalarType "int4"],ScalarType "text"),("to_char",[ScalarType "int8",ScalarType "text"],ScalarType "text"),("to_char",[ScalarType "int4",ScalarType "text"],ScalarType "text"),("to_char",[ScalarType "float4",ScalarType "text"],ScalarType "text"),("to_char",[ScalarType "float8",ScalarType "text"],ScalarType "text"),("to_char",[ScalarType "timestamp",ScalarType "text"],ScalarType "text"),("to_char",[ScalarType "timestamptz",ScalarType "text"],ScalarType "text"),("to_char",[ScalarType "interval",ScalarType "text"],ScalarType "text"),("to_char",[ScalarType "numeric",ScalarType "text"],ScalarType "text"),("to_date",[ScalarType "text",ScalarType "text"],ScalarType "date"),("to_hex",[ScalarType "int8"],ScalarType "text"),("to_hex",[ScalarType "int4"],ScalarType "text"),("to_number",[ScalarType "text",ScalarType "text"],ScalarType "numeric"),("to_timestamp",[ScalarType "float8"],ScalarType "timestamptz"),("to_timestamp",[ScalarType "text",ScalarType "text"],ScalarType "timestamptz"),("to_tsquery",[ScalarType "text"],ScalarType "tsquery"),("to_tsquery",[ScalarType "regconfig",ScalarType "text"],ScalarType "tsquery"),("to_tsvector",[ScalarType "text"],ScalarType "tsvector"),("to_tsvector",[ScalarType "regconfig",ScalarType "text"],ScalarType "tsvector"),("transaction_timestamp",[],ScalarType "timestamptz"),("translate",[ScalarType "text",ScalarType "text",ScalarType "text"],ScalarType "text"),("trigger_in",[Pseudo Cstring],Pseudo Trigger),("trigger_out",[Pseudo Trigger],Pseudo Cstring),("trunc",[ScalarType "float8"],ScalarType "float8"),("trunc",[ScalarType "macaddr"],ScalarType "macaddr"),("trunc",[ScalarType "numeric"],ScalarType "numeric"),("trunc",[ScalarType "numeric",ScalarType "int4"],ScalarType "numeric"),("ts_debug",[ScalarType "text"],SetOfType (Pseudo Record)),("ts_debug",[ScalarType "regconfig",ScalarType "text"],SetOfType (Pseudo Record)),("ts_headline",[ScalarType "text",ScalarType "tsquery"],ScalarType "text"),("ts_headline",[ScalarType "text",ScalarType "tsquery",ScalarType "text"],ScalarType "text"),("ts_headline",[ScalarType "regconfig",ScalarType "text",ScalarType "tsquery"],ScalarType "text"),("ts_headline",[ScalarType "regconfig",ScalarType "text",ScalarType "tsquery",ScalarType "text"],ScalarType "text"),("ts_lexize",[ScalarType "regdictionary",ScalarType "text"],ArrayType (ScalarType "text")),("ts_match_qv",[ScalarType "tsquery",ScalarType "tsvector"],ScalarType "bool"),("ts_match_tq",[ScalarType "text",ScalarType "tsquery"],ScalarType "bool"),("ts_match_tt",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("ts_match_vq",[ScalarType "tsvector",ScalarType "tsquery"],ScalarType "bool"),("ts_parse",[ScalarType "text",ScalarType "text"],SetOfType (Pseudo Record)),("ts_parse",[ScalarType "oid",ScalarType "text"],SetOfType (Pseudo Record)),("ts_rank",[ScalarType "tsvector",ScalarType "tsquery"],ScalarType "float4"),("ts_rank",[ArrayType (ScalarType "float4"),ScalarType "tsvector",ScalarType "tsquery"],ScalarType "float4"),("ts_rank",[ScalarType "tsvector",ScalarType "tsquery",ScalarType "int4"],ScalarType "float4"),("ts_rank",[ArrayType (ScalarType "float4"),ScalarType "tsvector",ScalarType "tsquery",ScalarType "int4"],ScalarType "float4"),("ts_rank_cd",[ScalarType "tsvector",ScalarType "tsquery"],ScalarType "float4"),("ts_rank_cd",[ArrayType (ScalarType "float4"),ScalarType "tsvector",ScalarType "tsquery"],ScalarType "float4"),("ts_rank_cd",[ScalarType "tsvector",ScalarType "tsquery",ScalarType "int4"],ScalarType "float4"),("ts_rank_cd",[ArrayType (ScalarType "float4"),ScalarType "tsvector",ScalarType "tsquery",ScalarType "int4"],ScalarType "float4"),("ts_rewrite",[ScalarType "tsquery",ScalarType "text"],ScalarType "tsquery"),("ts_rewrite",[ScalarType "tsquery",ScalarType "tsquery",ScalarType "tsquery"],ScalarType "tsquery"),("ts_stat",[ScalarType "text"],SetOfType (Pseudo Record)),("ts_stat",[ScalarType "text",ScalarType "text"],SetOfType (Pseudo Record)),("ts_token_type",[ScalarType "text"],SetOfType (Pseudo Record)),("ts_token_type",[ScalarType "oid"],SetOfType (Pseudo Record)),("ts_typanalyze",[Pseudo Internal],ScalarType "bool"),("tsmatchjoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("tsmatchsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("tsq_mcontained",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("tsq_mcontains",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("tsquery_and",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "tsquery"),("tsquery_cmp",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "int4"),("tsquery_eq",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("tsquery_ge",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("tsquery_gt",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("tsquery_le",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("tsquery_lt",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("tsquery_ne",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("tsquery_not",[ScalarType "tsquery"],ScalarType "tsquery"),("tsquery_or",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "tsquery"),("tsqueryin",[Pseudo Cstring],ScalarType "tsquery"),("tsqueryout",[ScalarType "tsquery"],Pseudo Cstring),("tsqueryrecv",[Pseudo Internal],ScalarType "tsquery"),("tsquerysend",[ScalarType "tsquery"],ScalarType "bytea"),("tsvector_cmp",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "int4"),("tsvector_concat",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "tsvector"),("tsvector_eq",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),("tsvector_ge",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),("tsvector_gt",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),("tsvector_le",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),("tsvector_lt",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),("tsvector_ne",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),("tsvector_update_trigger",[],Pseudo Trigger),("tsvector_update_trigger_column",[],Pseudo Trigger),("tsvectorin",[Pseudo Cstring],ScalarType "tsvector"),("tsvectorout",[ScalarType "tsvector"],Pseudo Cstring),("tsvectorrecv",[Pseudo Internal],ScalarType "tsvector"),("tsvectorsend",[ScalarType "tsvector"],ScalarType "bytea"),("txid_current",[],ScalarType "int8"),("txid_current_snapshot",[],ScalarType "txid_snapshot"),("txid_snapshot_in",[Pseudo Cstring],ScalarType "txid_snapshot"),("txid_snapshot_out",[ScalarType "txid_snapshot"],Pseudo Cstring),("txid_snapshot_recv",[Pseudo Internal],ScalarType "txid_snapshot"),("txid_snapshot_send",[ScalarType "txid_snapshot"],ScalarType "bytea"),("txid_snapshot_xip",[ScalarType "txid_snapshot"],SetOfType (ScalarType "int8")),("txid_snapshot_xmax",[ScalarType "txid_snapshot"],ScalarType "int8"),("txid_snapshot_xmin",[ScalarType "txid_snapshot"],ScalarType "int8"),("txid_visible_in_snapshot",[ScalarType "int8",ScalarType "txid_snapshot"],ScalarType "bool"),("uhc_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("unknownin",[Pseudo Cstring],ScalarType "unknown"),("unknownout",[ScalarType "unknown"],Pseudo Cstring),("unknownrecv",[Pseudo Internal],ScalarType "unknown"),("unknownsend",[ScalarType "unknown"],ScalarType "bytea"),("unnest",[Pseudo AnyArray],SetOfType (Pseudo AnyElement)),("upper",[ScalarType "text"],ScalarType "text"),("utf8_to_ascii",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_big5",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_euc_cn",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_euc_jis_2004",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_euc_jp",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_euc_kr",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_euc_tw",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_gb18030",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_gbk",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_iso8859",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_iso8859_1",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_johab",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_koi8r",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_koi8u",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_shift_jis_2004",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_sjis",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_uhc",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_win",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("uuid_cmp",[ScalarType "uuid",ScalarType "uuid"],ScalarType "int4"),("uuid_eq",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),("uuid_ge",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),("uuid_gt",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),("uuid_hash",[ScalarType "uuid"],ScalarType "int4"),("uuid_in",[Pseudo Cstring],ScalarType "uuid"),("uuid_le",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),("uuid_lt",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),("uuid_ne",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),("uuid_out",[ScalarType "uuid"],Pseudo Cstring),("uuid_recv",[Pseudo Internal],ScalarType "uuid"),("uuid_send",[ScalarType "uuid"],ScalarType "bytea"),("varbit",[ScalarType "varbit",ScalarType "int4",ScalarType "bool"],ScalarType "varbit"),("varbit_in",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],ScalarType "varbit"),("varbit_out",[ScalarType "varbit"],Pseudo Cstring),("varbit_recv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],ScalarType "varbit"),("varbit_send",[ScalarType "varbit"],ScalarType "bytea"),("varbitcmp",[ScalarType "varbit",ScalarType "varbit"],ScalarType "int4"),("varbiteq",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),("varbitge",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),("varbitgt",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),("varbitle",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),("varbitlt",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),("varbitne",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),("varbittypmodin",[ArrayType (Pseudo Cstring)],ScalarType "int4"),("varbittypmodout",[ScalarType "int4"],Pseudo Cstring),("varchar",[ScalarType "name"],ScalarType "varchar"),("varchar",[ScalarType "varchar",ScalarType "int4",ScalarType "bool"],ScalarType "varchar"),("varcharin",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],ScalarType "varchar"),("varcharout",[ScalarType "varchar"],Pseudo Cstring),("varcharrecv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],ScalarType "varchar"),("varcharsend",[ScalarType "varchar"],ScalarType "bytea"),("varchartypmodin",[ArrayType (Pseudo Cstring)],ScalarType "int4"),("varchartypmodout",[ScalarType "int4"],Pseudo Cstring),("version",[],ScalarType "text"),("void_in",[Pseudo Cstring],Pseudo Void),("void_out",[Pseudo Void],Pseudo Cstring),("width",[ScalarType "box"],ScalarType "float8"),("width_bucket",[ScalarType "float8",ScalarType "float8",ScalarType "float8",ScalarType "int4"],ScalarType "int4"),("width_bucket",[ScalarType "numeric",ScalarType "numeric",ScalarType "numeric",ScalarType "int4"],ScalarType "int4"),("win1250_to_latin2",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("win1250_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("win1251_to_iso",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("win1251_to_koi8r",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("win1251_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("win1251_to_win866",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("win866_to_iso",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("win866_to_koi8r",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("win866_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("win866_to_win1251",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("win_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("xideq",[ScalarType "xid",ScalarType "xid"],ScalarType "bool"),("xideqint4",[ScalarType "xid",ScalarType "int4"],ScalarType "bool"),("xidin",[Pseudo Cstring],ScalarType "xid"),("xidout",[ScalarType "xid"],Pseudo Cstring),("xidrecv",[Pseudo Internal],ScalarType "xid"),("xidsend",[ScalarType "xid"],ScalarType "bytea"),("xml",[ScalarType "text"],ScalarType "xml"),("xml_in",[Pseudo Cstring],ScalarType "xml"),("xml_out",[ScalarType "xml"],Pseudo Cstring),("xml_recv",[Pseudo Internal],ScalarType "xml"),("xml_send",[ScalarType "xml"],ScalarType "bytea"),("xmlcomment",[ScalarType "text"],ScalarType "xml"),("xmlconcat2",[ScalarType "xml",ScalarType "xml"],ScalarType "xml"),("xmlvalidate",[ScalarType "xml",ScalarType "text"],ScalarType "bool"),("xpath",[ScalarType "text",ScalarType "xml"],ArrayType (ScalarType "xml")),("xpath",[ScalarType "text",ScalarType "xml",ArrayType (ScalarType "text")],ArrayType (ScalarType "xml"))], scopeAggregates = [("array_agg",[Pseudo AnyElement],Pseudo AnyArray),("avg",[ScalarType "int8"],ScalarType "numeric"),("avg",[ScalarType "int2"],ScalarType "numeric"),("avg",[ScalarType "int4"],ScalarType "numeric"),("avg",[ScalarType "float4"],ScalarType "float8"),("avg",[ScalarType "float8"],ScalarType "float8"),("avg",[ScalarType "interval"],ScalarType "interval"),("avg",[ScalarType "numeric"],ScalarType "numeric"),("bit_and",[ScalarType "int8"],ScalarType "int8"),("bit_and",[ScalarType "int2"],ScalarType "int2"),("bit_and",[ScalarType "int4"],ScalarType "int4"),("bit_and",[ScalarType "bit"],ScalarType "bit"),("bit_or",[ScalarType "int8"],ScalarType "int8"),("bit_or",[ScalarType "int2"],ScalarType "int2"),("bit_or",[ScalarType "int4"],ScalarType "int4"),("bit_or",[ScalarType "bit"],ScalarType "bit"),("bool_and",[ScalarType "bool"],ScalarType "bool"),("bool_or",[ScalarType "bool"],ScalarType "bool"),("corr",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("count",[],ScalarType "int8"),("count",[Pseudo Any],ScalarType "int8"),("covar_pop",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("covar_samp",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("every",[ScalarType "bool"],ScalarType "bool"),("max",[ScalarType "int8"],ScalarType "int8"),("max",[ScalarType "int2"],ScalarType "int2"),("max",[ScalarType "int4"],ScalarType "int4"),("max",[ScalarType "text"],ScalarType "text"),("max",[ScalarType "oid"],ScalarType "oid"),("max",[ScalarType "tid"],ScalarType "tid"),("max",[ScalarType "float4"],ScalarType "float4"),("max",[ScalarType "float8"],ScalarType "float8"),("max",[ScalarType "abstime"],ScalarType "abstime"),("max",[ScalarType "money"],ScalarType "money"),("max",[ScalarType "bpchar"],ScalarType "bpchar"),("max",[ScalarType "date"],ScalarType "date"),("max",[ScalarType "time"],ScalarType "time"),("max",[ScalarType "timestamp"],ScalarType "timestamp"),("max",[ScalarType "timestamptz"],ScalarType "timestamptz"),("max",[ScalarType "interval"],ScalarType "interval"),("max",[ScalarType "timetz"],ScalarType "timetz"),("max",[ScalarType "numeric"],ScalarType "numeric"),("max",[Pseudo AnyArray],Pseudo AnyArray),("max",[Pseudo AnyEnum],Pseudo AnyEnum),("min",[ScalarType "int8"],ScalarType "int8"),("min",[ScalarType "int2"],ScalarType "int2"),("min",[ScalarType "int4"],ScalarType "int4"),("min",[ScalarType "text"],ScalarType "text"),("min",[ScalarType "oid"],ScalarType "oid"),("min",[ScalarType "tid"],ScalarType "tid"),("min",[ScalarType "float4"],ScalarType "float4"),("min",[ScalarType "float8"],ScalarType "float8"),("min",[ScalarType "abstime"],ScalarType "abstime"),("min",[ScalarType "money"],ScalarType "money"),("min",[ScalarType "bpchar"],ScalarType "bpchar"),("min",[ScalarType "date"],ScalarType "date"),("min",[ScalarType "time"],ScalarType "time"),("min",[ScalarType "timestamp"],ScalarType "timestamp"),("min",[ScalarType "timestamptz"],ScalarType "timestamptz"),("min",[ScalarType "interval"],ScalarType "interval"),("min",[ScalarType "timetz"],ScalarType "timetz"),("min",[ScalarType "numeric"],ScalarType "numeric"),("min",[Pseudo AnyArray],Pseudo AnyArray),("min",[Pseudo AnyEnum],Pseudo AnyEnum),("regr_avgx",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("regr_avgy",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("regr_count",[ScalarType "float8",ScalarType "float8"],ScalarType "int8"),("regr_intercept",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("regr_r2",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("regr_slope",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("regr_sxx",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("regr_sxy",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("regr_syy",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("stddev",[ScalarType "int8"],ScalarType "numeric"),("stddev",[ScalarType "int2"],ScalarType "numeric"),("stddev",[ScalarType "int4"],ScalarType "numeric"),("stddev",[ScalarType "float4"],ScalarType "float8"),("stddev",[ScalarType "float8"],ScalarType "float8"),("stddev",[ScalarType "numeric"],ScalarType "numeric"),("stddev_pop",[ScalarType "int8"],ScalarType "numeric"),("stddev_pop",[ScalarType "int2"],ScalarType "numeric"),("stddev_pop",[ScalarType "int4"],ScalarType "numeric"),("stddev_pop",[ScalarType "float4"],ScalarType "float8"),("stddev_pop",[ScalarType "float8"],ScalarType "float8"),("stddev_pop",[ScalarType "numeric"],ScalarType "numeric"),("stddev_samp",[ScalarType "int8"],ScalarType "numeric"),("stddev_samp",[ScalarType "int2"],ScalarType "numeric"),("stddev_samp",[ScalarType "int4"],ScalarType "numeric"),("stddev_samp",[ScalarType "float4"],ScalarType "float8"),("stddev_samp",[ScalarType "float8"],ScalarType "float8"),("stddev_samp",[ScalarType "numeric"],ScalarType "numeric"),("sum",[ScalarType "int8"],ScalarType "numeric"),("sum",[ScalarType "int2"],ScalarType "int8"),("sum",[ScalarType "int4"],ScalarType "int8"),("sum",[ScalarType "float4"],ScalarType "float4"),("sum",[ScalarType "float8"],ScalarType "float8"),("sum",[ScalarType "money"],ScalarType "money"),("sum",[ScalarType "interval"],ScalarType "interval"),("sum",[ScalarType "numeric"],ScalarType "numeric"),("var_pop",[ScalarType "int8"],ScalarType "numeric"),("var_pop",[ScalarType "int2"],ScalarType "numeric"),("var_pop",[ScalarType "int4"],ScalarType "numeric"),("var_pop",[ScalarType "float4"],ScalarType "float8"),("var_pop",[ScalarType "float8"],ScalarType "float8"),("var_pop",[ScalarType "numeric"],ScalarType "numeric"),("var_samp",[ScalarType "int8"],ScalarType "numeric"),("var_samp",[ScalarType "int2"],ScalarType "numeric"),("var_samp",[ScalarType "int4"],ScalarType "numeric"),("var_samp",[ScalarType "float4"],ScalarType "float8"),("var_samp",[ScalarType "float8"],ScalarType "float8"),("var_samp",[ScalarType "numeric"],ScalarType "numeric"),("variance",[ScalarType "int8"],ScalarType "numeric"),("variance",[ScalarType "int2"],ScalarType "numeric"),("variance",[ScalarType "int4"],ScalarType "numeric"),("variance",[ScalarType "float4"],ScalarType "float8"),("variance",[ScalarType "float8"],ScalarType "float8"),("variance",[ScalarType "numeric"],ScalarType "numeric"),("xmlagg",[ScalarType "xml"],ScalarType "xml")], scopeAllFns = [("~",[ScalarType "int8"],ScalarType "int8"),("~",[ScalarType "int4"],ScalarType "int4"),("~",[ScalarType "int2"],ScalarType "int2"),("~",[ScalarType "bit"],ScalarType "bit"),("~",[ScalarType "inet"],ScalarType "inet"),("||/",[ScalarType "float8"],ScalarType "float8"),("|/",[ScalarType "float8"],ScalarType "float8"),("|",[ScalarType "tinterval"],ScalarType "abstime"),("@@",[ScalarType "circle"],ScalarType "point"),("@@",[ScalarType "lseg"],ScalarType "point"),("@@",[ScalarType "path"],ScalarType "point"),("@@",[ScalarType "polygon"],ScalarType "point"),("@@",[ScalarType "box"],ScalarType "point"),("@-@",[ScalarType "path"],ScalarType "float8"),("@-@",[ScalarType "lseg"],ScalarType "float8"),("@",[ScalarType "int8"],ScalarType "int8"),("@",[ScalarType "int4"],ScalarType "int4"),("@",[ScalarType "int2"],ScalarType "int2"),("@",[ScalarType "float8"],ScalarType "float8"),("@",[ScalarType "float4"],ScalarType "float4"),("@",[ScalarType "numeric"],ScalarType "numeric"),("?|",[ScalarType "line"],ScalarType "bool"),("?|",[ScalarType "lseg"],ScalarType "bool"),("?-",[ScalarType "lseg"],ScalarType "bool"),("?-",[ScalarType "line"],ScalarType "bool"),("-",[ScalarType "interval"],ScalarType "interval"),("-",[ScalarType "numeric"],ScalarType "numeric"),("-",[ScalarType "float8"],ScalarType "float8"),("-",[ScalarType "float4"],ScalarType "float4"),("-",[ScalarType "int2"],ScalarType "int2"),("-",[ScalarType "int4"],ScalarType "int4"),("-",[ScalarType "int8"],ScalarType "int8"),("+",[ScalarType "int2"],ScalarType "int2"),("+",[ScalarType "float8"],ScalarType "float8"),("+",[ScalarType "numeric"],ScalarType "numeric"),("+",[ScalarType "int8"],ScalarType "int8"),("+",[ScalarType "float4"],ScalarType "float4"),("+",[ScalarType "int4"],ScalarType "int4"),("#",[ScalarType "path"],ScalarType "int4"),("#",[ScalarType "polygon"],ScalarType "int4"),("!!",[ScalarType "int8"],ScalarType "numeric"),("!!",[ScalarType "tsquery"],ScalarType "tsquery"),("!",[ScalarType "int8"],ScalarType "numeric"),("~~*",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("~~*",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("~~*",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("~~",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("~~",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("~~",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("~~",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("~>~",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("~>~",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("~>=~",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("~>=~",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("~=",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("~=",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("~=",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("~=",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("~=",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("~<~",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("~<~",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("~<=~",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("~<=~",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("~*",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("~*",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("~*",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("~",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("~",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("~",[ArrayType (ScalarType "aclitem"),ScalarType "aclitem"],ScalarType "bool"),("~",[ScalarType "circle",ScalarType "point"],ScalarType "bool"),("~",[ScalarType "polygon",ScalarType "point"],ScalarType "bool"),("~",[ScalarType "path",ScalarType "point"],ScalarType "bool"),("~",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("~",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("~",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("~",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("||",[Pseudo AnyArray,Pseudo AnyArray],Pseudo AnyArray),("||",[ScalarType "text",ScalarType "text"],ScalarType "text"),("||",[ScalarType "varbit",ScalarType "varbit"],ScalarType "varbit"),("||",[Pseudo AnyElement,Pseudo AnyArray],Pseudo AnyArray),("||",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "tsquery"),("||",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bytea"),("||",[Pseudo AnyNonArray,ScalarType "text"],ScalarType "text"),("||",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "tsvector"),("||",[Pseudo AnyArray,Pseudo AnyElement],Pseudo AnyArray),("||",[ScalarType "text",Pseudo AnyNonArray],ScalarType "text"),("|>>",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("|>>",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("|>>",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("|&>",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("|&>",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("|&>",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("|",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("|",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("|",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("|",[ScalarType "inet",ScalarType "inet"],ScalarType "inet"),("|",[ScalarType "bit",ScalarType "bit"],ScalarType "bit"),("^",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("^",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("@@@",[ScalarType "tsquery",ScalarType "tsvector"],ScalarType "bool"),("@@@",[ScalarType "tsvector",ScalarType "tsquery"],ScalarType "bool"),("@@",[ScalarType "text",ScalarType "tsquery"],ScalarType "bool"),("@@",[ScalarType "tsquery",ScalarType "tsvector"],ScalarType "bool"),("@@",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("@@",[ScalarType "tsvector",ScalarType "tsquery"],ScalarType "bool"),("@>",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("@>",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("@>",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("@>",[ScalarType "polygon",ScalarType "point"],ScalarType "bool"),("@>",[ScalarType "path",ScalarType "point"],ScalarType "bool"),("@>",[ArrayType (ScalarType "aclitem"),ScalarType "aclitem"],ScalarType "bool"),("@>",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("@>",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("@>",[ScalarType "circle",ScalarType "point"],ScalarType "bool"),("?||",[ScalarType "line",ScalarType "line"],ScalarType "bool"),("?||",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("?|",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("?-|",[ScalarType "line",ScalarType "line"],ScalarType "bool"),("?-|",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("?-",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("?#",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("?#",[ScalarType "path",ScalarType "path"],ScalarType "bool"),("?#",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("?#",[ScalarType "lseg",ScalarType "line"],ScalarType "bool"),("?#",[ScalarType "line",ScalarType "line"],ScalarType "bool"),("?#",[ScalarType "lseg",ScalarType "box"],ScalarType "bool"),("?#",[ScalarType "line",ScalarType "box"],ScalarType "bool"),(">^",[ScalarType "point",ScalarType "point"],ScalarType "bool"),(">^",[ScalarType "box",ScalarType "box"],ScalarType "bool"),(">>=",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),(">>",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),(">>",[ScalarType "box",ScalarType "box"],ScalarType "bool"),(">>",[ScalarType "point",ScalarType "point"],ScalarType "bool"),(">>",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),(">>",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),(">>",[ScalarType "int2",ScalarType "int4"],ScalarType "int2"),(">>",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),(">>",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),(">>",[ScalarType "bit",ScalarType "int4"],ScalarType "bit"),(">=",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),(">=",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),(">=",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),(">=",[ScalarType "char",ScalarType "char"],ScalarType "bool"),(">=",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),(">=",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),(">=",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),(">=",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),(">=",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),(">=",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),(">=",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),(">=",[ScalarType "date",ScalarType "date"],ScalarType "bool"),(">=",[ScalarType "time",ScalarType "time"],ScalarType "bool"),(">=",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),(">=",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),(">=",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),(">=",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),(">=",[ScalarType "name",ScalarType "name"],ScalarType "bool"),(">=",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),(">=",[ScalarType "text",ScalarType "text"],ScalarType "bool"),(">=",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),(">=",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),(">=",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),(">=",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),(">=",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),(">=",[Pseudo Record,Pseudo Record],ScalarType "bool"),(">=",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),(">=",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),(">=",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),(">=",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),(">=",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),(">=",[ScalarType "box",ScalarType "box"],ScalarType "bool"),(">=",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),(">=",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),(">=",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),(">=",[ScalarType "path",ScalarType "path"],ScalarType "bool"),(">=",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),(">=",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),(">=",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),(">=",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),(">=",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),(">=",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),(">=",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),(">=",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),(">=",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),(">=",[ScalarType "money",ScalarType "money"],ScalarType "bool"),(">=",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),(">=",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),(">=",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),(">=",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),(">=",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),(">=",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),(">=",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),(">",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),(">",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),(">",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),(">",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),(">",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),(">",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),(">",[ScalarType "char",ScalarType "char"],ScalarType "bool"),(">",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),(">",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),(">",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),(">",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),(">",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),(">",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),(">",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),(">",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),(">",[ScalarType "box",ScalarType "box"],ScalarType "bool"),(">",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),(">",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),(">",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),(">",[ScalarType "date",ScalarType "date"],ScalarType "bool"),(">",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),(">",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),(">",[ScalarType "time",ScalarType "time"],ScalarType "bool"),(">",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),(">",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),(">",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),(">",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),(">",[ScalarType "name",ScalarType "name"],ScalarType "bool"),(">",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),(">",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),(">",[ScalarType "path",ScalarType "path"],ScalarType "bool"),(">",[Pseudo Record,Pseudo Record],ScalarType "bool"),(">",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),(">",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),(">",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),(">",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),(">",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),(">",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),(">",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),(">",[ScalarType "text",ScalarType "text"],ScalarType "bool"),(">",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),(">",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),(">",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),(">",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),(">",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),(">",[ScalarType "money",ScalarType "money"],ScalarType "bool"),(">",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),(">",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),(">",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),(">",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),(">",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),(">",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),(">",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),("=",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("=",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),("=",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),("=",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("=",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),("=",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),("=",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),("=",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),("=",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),("=",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),("=",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),("=",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),("=",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),("=",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),("=",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),("=",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),("=",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("=",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),("=",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),("=",[ScalarType "path",ScalarType "path"],ScalarType "bool"),("=",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),("=",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),("=",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),("=",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),("=",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("=",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),("=",[ScalarType "money",ScalarType "money"],ScalarType "bool"),("=",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),("=",[ScalarType "aclitem",ScalarType "aclitem"],ScalarType "bool"),("=",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),("=",[ScalarType "int2vector",ScalarType "int2vector"],ScalarType "bool"),("=",[Pseudo Record,Pseudo Record],ScalarType "bool"),("=",[ScalarType "cid",ScalarType "cid"],ScalarType "bool"),("=",[ScalarType "xid",ScalarType "int4"],ScalarType "bool"),("=",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("=",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("=",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("=",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),("=",[ScalarType "line",ScalarType "line"],ScalarType "bool"),("=",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),("=",[ScalarType "xid",ScalarType "xid"],ScalarType "bool"),("=",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("=",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),("=",[ScalarType "date",ScalarType "date"],ScalarType "bool"),("=",[ScalarType "time",ScalarType "time"],ScalarType "bool"),("=",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),("=",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),("=",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),("=",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),("=",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("=",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("=",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),("=",[ScalarType "name",ScalarType "name"],ScalarType "bool"),("=",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("=",[ScalarType "char",ScalarType "char"],ScalarType "bool"),("=",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("=",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("=",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("=",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),("<^",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("<^",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("<@",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("<@",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("<@",[ScalarType "lseg",ScalarType "box"],ScalarType "bool"),("<@",[ScalarType "lseg",ScalarType "line"],ScalarType "bool"),("<@",[ScalarType "point",ScalarType "line"],ScalarType "bool"),("<@",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("<@",[ScalarType "point",ScalarType "circle"],ScalarType "bool"),("<@",[ScalarType "point",ScalarType "polygon"],ScalarType "bool"),("<@",[ScalarType "point",ScalarType "path"],ScalarType "bool"),("<@",[ScalarType "point",ScalarType "box"],ScalarType "bool"),("<@",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("<@",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("<@",[ScalarType "point",ScalarType "lseg"],ScalarType "bool"),("<?>",[ScalarType "abstime",ScalarType "tinterval"],ScalarType "bool"),("<>",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),("<>",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("<>",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),("<>",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),("<>",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),("<>",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),("<>",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),("<>",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),("<>",[ScalarType "time",ScalarType "time"],ScalarType "bool"),("<>",[ScalarType "date",ScalarType "date"],ScalarType "bool"),("<>",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),("<>",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),("<>",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("<>",[ScalarType "char",ScalarType "char"],ScalarType "bool"),("<>",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),("<>",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("<>",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),("<>",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("<>",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("<>",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("<>",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),("<>",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),("<>",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),("<>",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),("<>",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),("<>",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("<>",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),("<>",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),("<>",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("<>",[ScalarType "name",ScalarType "name"],ScalarType "bool"),("<>",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),("<>",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("<>",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),("<>",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),("<>",[ScalarType "money",ScalarType "money"],ScalarType "bool"),("<>",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),("<>",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),("<>",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("<>",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("<>",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),("<>",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),("<>",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),("<>",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),("<>",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),("<>",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("<>",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),("<>",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("<>",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),("<>",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),("<>",[Pseudo Record,Pseudo Record],ScalarType "bool"),("<>",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("<>",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),("<=",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),("<=",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),("<=",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),("<=",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),("<=",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),("<=",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),("<=",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),("<=",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),("<=",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),("<=",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),("<=",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),("<=",[ScalarType "time",ScalarType "time"],ScalarType "bool"),("<=",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),("<=",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),("<=",[ScalarType "date",ScalarType "date"],ScalarType "bool"),("<=",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("<=",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("<=",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),("<=",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("<=",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("<=",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),("<=",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),("<=",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),("<=",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("<=",[ScalarType "money",ScalarType "money"],ScalarType "bool"),("<=",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("<=",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),("<=",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("<=",[Pseudo Record,Pseudo Record],ScalarType "bool"),("<=",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),("<=",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),("<=",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("<=",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),("<=",[ScalarType "path",ScalarType "path"],ScalarType "bool"),("<=",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),("<=",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),("<=",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("<=",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),("<=",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("<=",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("<=",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),("<=",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),("<=",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("<=",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),("<=",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("<=",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),("<=",[ScalarType "name",ScalarType "name"],ScalarType "bool"),("<=",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),("<=",[ScalarType "char",ScalarType "char"],ScalarType "bool"),("<=",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),("<=",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),("<=",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),("<=",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("<<|",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("<<|",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("<<|",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("<<=",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("<<",[ScalarType "int2",ScalarType "int4"],ScalarType "int2"),("<<",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("<<",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("<<",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("<<",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("<<",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("<<",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("<<",[ScalarType "bit",ScalarType "int4"],ScalarType "bit"),("<<",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("<<",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("<->",[ScalarType "point",ScalarType "point"],ScalarType "float8"),("<->",[ScalarType "circle",ScalarType "polygon"],ScalarType "float8"),("<->",[ScalarType "point",ScalarType "line"],ScalarType "float8"),("<->",[ScalarType "point",ScalarType "path"],ScalarType "float8"),("<->",[ScalarType "circle",ScalarType "circle"],ScalarType "float8"),("<->",[ScalarType "point",ScalarType "circle"],ScalarType "float8"),("<->",[ScalarType "lseg",ScalarType "box"],ScalarType "float8"),("<->",[ScalarType "point",ScalarType "lseg"],ScalarType "float8"),("<->",[ScalarType "lseg",ScalarType "line"],ScalarType "float8"),("<->",[ScalarType "point",ScalarType "box"],ScalarType "float8"),("<->",[ScalarType "box",ScalarType "box"],ScalarType "float8"),("<->",[ScalarType "polygon",ScalarType "polygon"],ScalarType "float8"),("<->",[ScalarType "lseg",ScalarType "lseg"],ScalarType "float8"),("<->",[ScalarType "line",ScalarType "line"],ScalarType "float8"),("<->",[ScalarType "path",ScalarType "path"],ScalarType "float8"),("<->",[ScalarType "line",ScalarType "box"],ScalarType "float8"),("<#>",[ScalarType "abstime",ScalarType "abstime"],ScalarType "tinterval"),("<",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),("<",[ScalarType "money",ScalarType "money"],ScalarType "bool"),("<",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),("<",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),("<",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),("<",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),("<",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("<",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),("<",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("<",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),("<",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),("<",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),("<",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),("<",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("<",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("<",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),("<",[ScalarType "path",ScalarType "path"],ScalarType "bool"),("<",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),("<",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),("<",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("<",[ScalarType "char",ScalarType "char"],ScalarType "bool"),("<",[Pseudo Record,Pseudo Record],ScalarType "bool"),("<",[ScalarType "name",ScalarType "name"],ScalarType "bool"),("<",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("<",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),("<",[ScalarType "date",ScalarType "date"],ScalarType "bool"),("<",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),("<",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("<",[ScalarType "time",ScalarType "time"],ScalarType "bool"),("<",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),("<",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),("<",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("<",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("<",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),("<",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),("<",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),("<",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("<",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),("<",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("<",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),("<",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),("<",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),("<",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),("<",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("<",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),("<",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("<",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),("<",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),("<",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),("<",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),("<",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),("<",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),("<",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("/",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("/",[ScalarType "int2",ScalarType "int8"],ScalarType "int8"),("/",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("/",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("/",[ScalarType "money",ScalarType "float4"],ScalarType "money"),("/",[ScalarType "int8",ScalarType "int2"],ScalarType "int8"),("/",[ScalarType "int4",ScalarType "int2"],ScalarType "int4"),("/",[ScalarType "point",ScalarType "point"],ScalarType "point"),("/",[ScalarType "circle",ScalarType "point"],ScalarType "circle"),("/",[ScalarType "int4",ScalarType "int8"],ScalarType "int8"),("/",[ScalarType "float8",ScalarType "float4"],ScalarType "float8"),("/",[ScalarType "money",ScalarType "int4"],ScalarType "money"),("/",[ScalarType "path",ScalarType "point"],ScalarType "path"),("/",[ScalarType "interval",ScalarType "float8"],ScalarType "interval"),("/",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("/",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("/",[ScalarType "int2",ScalarType "int4"],ScalarType "int4"),("/",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("/",[ScalarType "float4",ScalarType "float8"],ScalarType "float8"),("/",[ScalarType "money",ScalarType "int2"],ScalarType "money"),("/",[ScalarType "float4",ScalarType "float4"],ScalarType "float4"),("/",[ScalarType "money",ScalarType "float8"],ScalarType "money"),("/",[ScalarType "box",ScalarType "point"],ScalarType "box"),("-",[ScalarType "interval",ScalarType "interval"],ScalarType "interval"),("-",[ScalarType "timestamptz",ScalarType "interval"],ScalarType "timestamptz"),("-",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "interval"),("-",[ScalarType "circle",ScalarType "point"],ScalarType "circle"),("-",[ScalarType "float8",ScalarType "float4"],ScalarType "float8"),("-",[ScalarType "float4",ScalarType "float8"],ScalarType "float8"),("-",[ScalarType "date",ScalarType "int4"],ScalarType "date"),("-",[ScalarType "date",ScalarType "date"],ScalarType "int4"),("-",[ScalarType "date",ScalarType "interval"],ScalarType "timestamp"),("-",[ArrayType (ScalarType "aclitem"),ScalarType "aclitem"],ArrayType (ScalarType "aclitem")),("-",[ScalarType "money",ScalarType "money"],ScalarType "money"),("-",[ScalarType "inet",ScalarType "int8"],ScalarType "inet"),("-",[ScalarType "inet",ScalarType "inet"],ScalarType "int8"),("-",[ScalarType "box",ScalarType "point"],ScalarType "box"),("-",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("-",[ScalarType "path",ScalarType "point"],ScalarType "path"),("-",[ScalarType "point",ScalarType "point"],ScalarType "point"),("-",[ScalarType "int2",ScalarType "int8"],ScalarType "int8"),("-",[ScalarType "int8",ScalarType "int2"],ScalarType "int8"),("-",[ScalarType "int4",ScalarType "int8"],ScalarType "int8"),("-",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("-",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("-",[ScalarType "time",ScalarType "interval"],ScalarType "time"),("-",[ScalarType "timetz",ScalarType "interval"],ScalarType "timetz"),("-",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("-",[ScalarType "float4",ScalarType "float4"],ScalarType "float4"),("-",[ScalarType "abstime",ScalarType "reltime"],ScalarType "abstime"),("-",[ScalarType "int4",ScalarType "int2"],ScalarType "int4"),("-",[ScalarType "int2",ScalarType "int4"],ScalarType "int4"),("-",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("-",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("-",[ScalarType "timestamp",ScalarType "interval"],ScalarType "timestamp"),("-",[ScalarType "time",ScalarType "time"],ScalarType "interval"),("-",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "interval"),("+",[ScalarType "interval",ScalarType "interval"],ScalarType "interval"),("+",[ScalarType "date",ScalarType "time"],ScalarType "timestamp"),("+",[ScalarType "int4",ScalarType "int2"],ScalarType "int4"),("+",[ScalarType "int2",ScalarType "int4"],ScalarType "int4"),("+",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("+",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("+",[ScalarType "timetz",ScalarType "interval"],ScalarType "timetz"),("+",[ScalarType "time",ScalarType "interval"],ScalarType "time"),("+",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("+",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("+",[ScalarType "int4",ScalarType "int8"],ScalarType "int8"),("+",[ScalarType "timestamp",ScalarType "interval"],ScalarType "timestamp"),("+",[ScalarType "time",ScalarType "date"],ScalarType "timestamp"),("+",[ScalarType "int8",ScalarType "int2"],ScalarType "int8"),("+",[ScalarType "date",ScalarType "timetz"],ScalarType "timestamptz"),("+",[ScalarType "int2",ScalarType "int8"],ScalarType "int8"),("+",[ScalarType "point",ScalarType "point"],ScalarType "point"),("+",[ScalarType "path",ScalarType "path"],ScalarType "path"),("+",[ScalarType "path",ScalarType "point"],ScalarType "path"),("+",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("+",[ScalarType "box",ScalarType "point"],ScalarType "box"),("+",[ScalarType "money",ScalarType "money"],ScalarType "money"),("+",[ScalarType "int8",ScalarType "inet"],ScalarType "inet"),("+",[ArrayType (ScalarType "aclitem"),ScalarType "aclitem"],ArrayType (ScalarType "aclitem")),("+",[ScalarType "inet",ScalarType "int8"],ScalarType "inet"),("+",[ScalarType "interval",ScalarType "date"],ScalarType "timestamp"),("+",[ScalarType "date",ScalarType "interval"],ScalarType "timestamp"),("+",[ScalarType "timetz",ScalarType "date"],ScalarType "timestamptz"),("+",[ScalarType "interval",ScalarType "timetz"],ScalarType "timetz"),("+",[ScalarType "interval",ScalarType "timestamp"],ScalarType "timestamp"),("+",[ScalarType "date",ScalarType "int4"],ScalarType "date"),("+",[ScalarType "interval",ScalarType "timestamptz"],ScalarType "timestamptz"),("+",[ScalarType "int4",ScalarType "date"],ScalarType "date"),("+",[ScalarType "float4",ScalarType "float8"],ScalarType "float8"),("+",[ScalarType "float8",ScalarType "float4"],ScalarType "float8"),("+",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("+",[ScalarType "float4",ScalarType "float4"],ScalarType "float4"),("+",[ScalarType "circle",ScalarType "point"],ScalarType "circle"),("+",[ScalarType "timestamptz",ScalarType "interval"],ScalarType "timestamptz"),("+",[ScalarType "abstime",ScalarType "reltime"],ScalarType "abstime"),("+",[ScalarType "interval",ScalarType "time"],ScalarType "time"),("*",[ScalarType "point",ScalarType "point"],ScalarType "point"),("*",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("*",[ScalarType "path",ScalarType "point"],ScalarType "path"),("*",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("*",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("*",[ScalarType "box",ScalarType "point"],ScalarType "box"),("*",[ScalarType "money",ScalarType "float4"],ScalarType "money"),("*",[ScalarType "float4",ScalarType "money"],ScalarType "money"),("*",[ScalarType "money",ScalarType "float8"],ScalarType "money"),("*",[ScalarType "money",ScalarType "int4"],ScalarType "money"),("*",[ScalarType "money",ScalarType "int2"],ScalarType "money"),("*",[ScalarType "float8",ScalarType "money"],ScalarType "money"),("*",[ScalarType "int4",ScalarType "money"],ScalarType "money"),("*",[ScalarType "int2",ScalarType "money"],ScalarType "money"),("*",[ScalarType "circle",ScalarType "point"],ScalarType "circle"),("*",[ScalarType "float4",ScalarType "float4"],ScalarType "float4"),("*",[ScalarType "float8",ScalarType "interval"],ScalarType "interval"),("*",[ScalarType "interval",ScalarType "float8"],ScalarType "interval"),("*",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("*",[ScalarType "int4",ScalarType "int2"],ScalarType "int4"),("*",[ScalarType "int2",ScalarType "int4"],ScalarType "int4"),("*",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("*",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("*",[ScalarType "float4",ScalarType "float8"],ScalarType "float8"),("*",[ScalarType "int4",ScalarType "int8"],ScalarType "int8"),("*",[ScalarType "int8",ScalarType "int2"],ScalarType "int8"),("*",[ScalarType "int2",ScalarType "int8"],ScalarType "int8"),("*",[ScalarType "float8",ScalarType "float4"],ScalarType "float8"),("&>",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("&>",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("&>",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("&<|",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("&<|",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("&<|",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("&<",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("&<",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("&<",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("&&",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("&&",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("&&",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("&&",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("&&",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("&&",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "tsquery"),("&",[ScalarType "inet",ScalarType "inet"],ScalarType "inet"),("&",[ScalarType "bit",ScalarType "bit"],ScalarType "bit"),("&",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("&",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("&",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("%",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("%",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("%",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("%",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("#>=",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("#>",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("#=",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("#<>",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("#<=",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("#<",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("##",[ScalarType "line",ScalarType "lseg"],ScalarType "point"),("##",[ScalarType "lseg",ScalarType "line"],ScalarType "point"),("##",[ScalarType "point",ScalarType "box"],ScalarType "point"),("##",[ScalarType "lseg",ScalarType "box"],ScalarType "point"),("##",[ScalarType "line",ScalarType "box"],ScalarType "point"),("##",[ScalarType "point",ScalarType "line"],ScalarType "point"),("##",[ScalarType "point",ScalarType "lseg"],ScalarType "point"),("##",[ScalarType "lseg",ScalarType "lseg"],ScalarType "point"),("#",[ScalarType "bit",ScalarType "bit"],ScalarType "bit"),("#",[ScalarType "line",ScalarType "line"],ScalarType "point"),("#",[ScalarType "box",ScalarType "box"],ScalarType "box"),("#",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("#",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("#",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("#",[ScalarType "lseg",ScalarType "lseg"],ScalarType "point"),("!~~*",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("!~~*",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("!~~*",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("!~~",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("!~~",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("!~~",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("!~~",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("!~*",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("!~*",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("!~*",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("!~",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("!~",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("!~",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("RI_FKey_cascade_del",[],Pseudo Trigger),("RI_FKey_cascade_upd",[],Pseudo Trigger),("RI_FKey_check_ins",[],Pseudo Trigger),("RI_FKey_check_upd",[],Pseudo Trigger),("RI_FKey_noaction_del",[],Pseudo Trigger),("RI_FKey_noaction_upd",[],Pseudo Trigger),("RI_FKey_restrict_del",[],Pseudo Trigger),("RI_FKey_restrict_upd",[],Pseudo Trigger),("RI_FKey_setdefault_del",[],Pseudo Trigger),("RI_FKey_setdefault_upd",[],Pseudo Trigger),("RI_FKey_setnull_del",[],Pseudo Trigger),("RI_FKey_setnull_upd",[],Pseudo Trigger),("abbrev",[ScalarType "cidr"],ScalarType "text"),("abbrev",[ScalarType "inet"],ScalarType "text"),("abs",[ScalarType "int8"],ScalarType "int8"),("abs",[ScalarType "int2"],ScalarType "int2"),("abs",[ScalarType "int4"],ScalarType "int4"),("abs",[ScalarType "float4"],ScalarType "float4"),("abs",[ScalarType "float8"],ScalarType "float8"),("abs",[ScalarType "numeric"],ScalarType "numeric"),("abstime",[ScalarType "timestamp"],ScalarType "abstime"),("abstime",[ScalarType "timestamptz"],ScalarType "abstime"),("abstimeeq",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),("abstimege",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),("abstimegt",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),("abstimein",[Pseudo Cstring],ScalarType "abstime"),("abstimele",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),("abstimelt",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),("abstimene",[ScalarType "abstime",ScalarType "abstime"],ScalarType "bool"),("abstimeout",[ScalarType "abstime"],Pseudo Cstring),("abstimerecv",[Pseudo Internal],ScalarType "abstime"),("abstimesend",[ScalarType "abstime"],ScalarType "bytea"),("aclcontains",[ArrayType (ScalarType "aclitem"),ScalarType "aclitem"],ScalarType "bool"),("aclinsert",[ArrayType (ScalarType "aclitem"),ScalarType "aclitem"],ArrayType (ScalarType "aclitem")),("aclitemeq",[ScalarType "aclitem",ScalarType "aclitem"],ScalarType "bool"),("aclitemin",[Pseudo Cstring],ScalarType "aclitem"),("aclitemout",[ScalarType "aclitem"],Pseudo Cstring),("aclremove",[ArrayType (ScalarType "aclitem"),ScalarType "aclitem"],ArrayType (ScalarType "aclitem")),("acos",[ScalarType "float8"],ScalarType "float8"),("age",[ScalarType "xid"],ScalarType "int4"),("age",[ScalarType "timestamp"],ScalarType "interval"),("age",[ScalarType "timestamptz"],ScalarType "interval"),("age",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "interval"),("age",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "interval"),("any_in",[Pseudo Cstring],Pseudo Any),("any_out",[Pseudo Any],Pseudo Cstring),("anyarray_in",[Pseudo Cstring],Pseudo AnyArray),("anyarray_out",[Pseudo AnyArray],Pseudo Cstring),("anyarray_recv",[Pseudo Internal],Pseudo AnyArray),("anyarray_send",[Pseudo AnyArray],ScalarType "bytea"),("anyelement_in",[Pseudo Cstring],Pseudo AnyElement),("anyelement_out",[Pseudo AnyElement],Pseudo Cstring),("anyenum_in",[Pseudo Cstring],Pseudo AnyEnum),("anyenum_out",[Pseudo AnyEnum],Pseudo Cstring),("anynonarray_in",[Pseudo Cstring],Pseudo AnyNonArray),("anynonarray_out",[Pseudo AnyNonArray],Pseudo Cstring),("anytextcat",[Pseudo AnyNonArray,ScalarType "text"],ScalarType "text"),("area",[ScalarType "path"],ScalarType "float8"),("area",[ScalarType "box"],ScalarType "float8"),("area",[ScalarType "circle"],ScalarType "float8"),("areajoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("areasel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("array_agg_finalfn",[Pseudo Internal],Pseudo AnyArray),("array_agg_transfn",[Pseudo Internal,Pseudo AnyElement],Pseudo Internal),("array_append",[Pseudo AnyArray,Pseudo AnyElement],Pseudo AnyArray),("array_cat",[Pseudo AnyArray,Pseudo AnyArray],Pseudo AnyArray),("array_dims",[Pseudo AnyArray],ScalarType "text"),("array_eq",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("array_fill",[Pseudo AnyElement,ArrayType (ScalarType "int4")],Pseudo AnyArray),("array_fill",[Pseudo AnyElement,ArrayType (ScalarType "int4"),ArrayType (ScalarType "int4")],Pseudo AnyArray),("array_ge",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("array_gt",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("array_in",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],Pseudo AnyArray),("array_larger",[Pseudo AnyArray,Pseudo AnyArray],Pseudo AnyArray),("array_le",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("array_length",[Pseudo AnyArray,ScalarType "int4"],ScalarType "int4"),("array_lower",[Pseudo AnyArray,ScalarType "int4"],ScalarType "int4"),("array_lt",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("array_ndims",[Pseudo AnyArray],ScalarType "int4"),("array_ne",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("array_out",[Pseudo AnyArray],Pseudo Cstring),("array_prepend",[Pseudo AnyElement,Pseudo AnyArray],Pseudo AnyArray),("array_recv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],Pseudo AnyArray),("array_send",[Pseudo AnyArray],ScalarType "bytea"),("array_smaller",[Pseudo AnyArray,Pseudo AnyArray],Pseudo AnyArray),("array_to_string",[Pseudo AnyArray,ScalarType "text"],ScalarType "text"),("array_upper",[Pseudo AnyArray,ScalarType "int4"],ScalarType "int4"),("arraycontained",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("arraycontains",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("arrayoverlap",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "bool"),("ascii",[ScalarType "text"],ScalarType "int4"),("ascii_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("ascii_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("asin",[ScalarType "float8"],ScalarType "float8"),("atan",[ScalarType "float8"],ScalarType "float8"),("atan2",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("big5_to_euc_tw",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("big5_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("big5_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("bit",[ScalarType "int8",ScalarType "int4"],ScalarType "bit"),("bit",[ScalarType "int4",ScalarType "int4"],ScalarType "bit"),("bit",[ScalarType "bit",ScalarType "int4",ScalarType "bool"],ScalarType "bit"),("bit_in",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],ScalarType "bit"),("bit_length",[ScalarType "bytea"],ScalarType "int4"),("bit_length",[ScalarType "text"],ScalarType "int4"),("bit_length",[ScalarType "bit"],ScalarType "int4"),("bit_out",[ScalarType "bit"],Pseudo Cstring),("bit_recv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],ScalarType "bit"),("bit_send",[ScalarType "bit"],ScalarType "bytea"),("bitand",[ScalarType "bit",ScalarType "bit"],ScalarType "bit"),("bitcat",[ScalarType "varbit",ScalarType "varbit"],ScalarType "varbit"),("bitcmp",[ScalarType "bit",ScalarType "bit"],ScalarType "int4"),("biteq",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),("bitge",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),("bitgt",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),("bitle",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),("bitlt",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),("bitne",[ScalarType "bit",ScalarType "bit"],ScalarType "bool"),("bitnot",[ScalarType "bit"],ScalarType "bit"),("bitor",[ScalarType "bit",ScalarType "bit"],ScalarType "bit"),("bitshiftleft",[ScalarType "bit",ScalarType "int4"],ScalarType "bit"),("bitshiftright",[ScalarType "bit",ScalarType "int4"],ScalarType "bit"),("bittypmodin",[ArrayType (Pseudo Cstring)],ScalarType "int4"),("bittypmodout",[ScalarType "int4"],Pseudo Cstring),("bitxor",[ScalarType "bit",ScalarType "bit"],ScalarType "bit"),("bool",[ScalarType "int4"],ScalarType "bool"),("booland_statefunc",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("booleq",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("boolge",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("boolgt",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("boolin",[Pseudo Cstring],ScalarType "bool"),("boolle",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("boollt",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("boolne",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("boolor_statefunc",[ScalarType "bool",ScalarType "bool"],ScalarType "bool"),("boolout",[ScalarType "bool"],Pseudo Cstring),("boolrecv",[Pseudo Internal],ScalarType "bool"),("boolsend",[ScalarType "bool"],ScalarType "bytea"),("box",[ScalarType "polygon"],ScalarType "box"),("box",[ScalarType "circle"],ScalarType "box"),("box",[ScalarType "point",ScalarType "point"],ScalarType "box"),("box_above",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_above_eq",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_add",[ScalarType "box",ScalarType "point"],ScalarType "box"),("box_below",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_below_eq",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_center",[ScalarType "box"],ScalarType "point"),("box_contain",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_contained",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_distance",[ScalarType "box",ScalarType "box"],ScalarType "float8"),("box_div",[ScalarType "box",ScalarType "point"],ScalarType "box"),("box_eq",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_ge",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_gt",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_in",[Pseudo Cstring],ScalarType "box"),("box_intersect",[ScalarType "box",ScalarType "box"],ScalarType "box"),("box_le",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_left",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_lt",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_mul",[ScalarType "box",ScalarType "point"],ScalarType "box"),("box_out",[ScalarType "box"],Pseudo Cstring),("box_overabove",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_overbelow",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_overlap",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_overleft",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_overright",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_recv",[Pseudo Internal],ScalarType "box"),("box_right",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_same",[ScalarType "box",ScalarType "box"],ScalarType "bool"),("box_send",[ScalarType "box"],ScalarType "bytea"),("box_sub",[ScalarType "box",ScalarType "point"],ScalarType "box"),("bpchar",[ScalarType "char"],ScalarType "bpchar"),("bpchar",[ScalarType "name"],ScalarType "bpchar"),("bpchar",[ScalarType "bpchar",ScalarType "int4",ScalarType "bool"],ScalarType "bpchar"),("bpchar_larger",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bpchar"),("bpchar_pattern_ge",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("bpchar_pattern_gt",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("bpchar_pattern_le",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("bpchar_pattern_lt",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("bpchar_smaller",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bpchar"),("bpcharcmp",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "int4"),("bpchareq",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("bpcharge",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("bpchargt",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("bpchariclike",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("bpcharicnlike",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("bpcharicregexeq",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("bpcharicregexne",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("bpcharin",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],ScalarType "bpchar"),("bpcharle",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("bpcharlike",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("bpcharlt",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("bpcharne",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "bool"),("bpcharnlike",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("bpcharout",[ScalarType "bpchar"],Pseudo Cstring),("bpcharrecv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],ScalarType "bpchar"),("bpcharregexeq",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("bpcharregexne",[ScalarType "bpchar",ScalarType "text"],ScalarType "bool"),("bpcharsend",[ScalarType "bpchar"],ScalarType "bytea"),("bpchartypmodin",[ArrayType (Pseudo Cstring)],ScalarType "int4"),("bpchartypmodout",[ScalarType "int4"],Pseudo Cstring),("broadcast",[ScalarType "inet"],ScalarType "inet"),("btabstimecmp",[ScalarType "abstime",ScalarType "abstime"],ScalarType "int4"),("btarraycmp",[Pseudo AnyArray,Pseudo AnyArray],ScalarType "int4"),("btbeginscan",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("btboolcmp",[ScalarType "bool",ScalarType "bool"],ScalarType "int4"),("btbpchar_pattern_cmp",[ScalarType "bpchar",ScalarType "bpchar"],ScalarType "int4"),("btbuild",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("btbulkdelete",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("btcharcmp",[ScalarType "char",ScalarType "char"],ScalarType "int4"),("btcostestimate",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Void),("btendscan",[Pseudo Internal],Pseudo Void),("btfloat48cmp",[ScalarType "float4",ScalarType "float8"],ScalarType "int4"),("btfloat4cmp",[ScalarType "float4",ScalarType "float4"],ScalarType "int4"),("btfloat84cmp",[ScalarType "float8",ScalarType "float4"],ScalarType "int4"),("btfloat8cmp",[ScalarType "float8",ScalarType "float8"],ScalarType "int4"),("btgetbitmap",[Pseudo Internal,Pseudo Internal],ScalarType "int8"),("btgettuple",[Pseudo Internal,Pseudo Internal],ScalarType "bool"),("btinsert",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],ScalarType "bool"),("btint24cmp",[ScalarType "int2",ScalarType "int4"],ScalarType "int4"),("btint28cmp",[ScalarType "int2",ScalarType "int8"],ScalarType "int4"),("btint2cmp",[ScalarType "int2",ScalarType "int2"],ScalarType "int4"),("btint42cmp",[ScalarType "int4",ScalarType "int2"],ScalarType "int4"),("btint48cmp",[ScalarType "int4",ScalarType "int8"],ScalarType "int4"),("btint4cmp",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("btint82cmp",[ScalarType "int8",ScalarType "int2"],ScalarType "int4"),("btint84cmp",[ScalarType "int8",ScalarType "int4"],ScalarType "int4"),("btint8cmp",[ScalarType "int8",ScalarType "int8"],ScalarType "int4"),("btmarkpos",[Pseudo Internal],Pseudo Void),("btnamecmp",[ScalarType "name",ScalarType "name"],ScalarType "int4"),("btoidcmp",[ScalarType "oid",ScalarType "oid"],ScalarType "int4"),("btoidvectorcmp",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "int4"),("btoptions",[ArrayType (ScalarType "text"),ScalarType "bool"],ScalarType "bytea"),("btrecordcmp",[Pseudo Record,Pseudo Record],ScalarType "int4"),("btreltimecmp",[ScalarType "reltime",ScalarType "reltime"],ScalarType "int4"),("btrescan",[Pseudo Internal,Pseudo Internal],Pseudo Void),("btrestrpos",[Pseudo Internal],Pseudo Void),("btrim",[ScalarType "text"],ScalarType "text"),("btrim",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bytea"),("btrim",[ScalarType "text",ScalarType "text"],ScalarType "text"),("bttext_pattern_cmp",[ScalarType "text",ScalarType "text"],ScalarType "int4"),("bttextcmp",[ScalarType "text",ScalarType "text"],ScalarType "int4"),("bttidcmp",[ScalarType "tid",ScalarType "tid"],ScalarType "int4"),("bttintervalcmp",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "int4"),("btvacuumcleanup",[Pseudo Internal,Pseudo Internal],Pseudo Internal),("byteacat",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bytea"),("byteacmp",[ScalarType "bytea",ScalarType "bytea"],ScalarType "int4"),("byteaeq",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("byteage",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("byteagt",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("byteain",[Pseudo Cstring],ScalarType "bytea"),("byteale",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("bytealike",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("bytealt",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("byteane",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("byteanlike",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("byteaout",[ScalarType "bytea"],Pseudo Cstring),("bytearecv",[Pseudo Internal],ScalarType "bytea"),("byteasend",[ScalarType "bytea"],ScalarType "bytea"),("cash_cmp",[ScalarType "money",ScalarType "money"],ScalarType "int4"),("cash_div_flt4",[ScalarType "money",ScalarType "float4"],ScalarType "money"),("cash_div_flt8",[ScalarType "money",ScalarType "float8"],ScalarType "money"),("cash_div_int2",[ScalarType "money",ScalarType "int2"],ScalarType "money"),("cash_div_int4",[ScalarType "money",ScalarType "int4"],ScalarType "money"),("cash_eq",[ScalarType "money",ScalarType "money"],ScalarType "bool"),("cash_ge",[ScalarType "money",ScalarType "money"],ScalarType "bool"),("cash_gt",[ScalarType "money",ScalarType "money"],ScalarType "bool"),("cash_in",[Pseudo Cstring],ScalarType "money"),("cash_le",[ScalarType "money",ScalarType "money"],ScalarType "bool"),("cash_lt",[ScalarType "money",ScalarType "money"],ScalarType "bool"),("cash_mi",[ScalarType "money",ScalarType "money"],ScalarType "money"),("cash_mul_flt4",[ScalarType "money",ScalarType "float4"],ScalarType "money"),("cash_mul_flt8",[ScalarType "money",ScalarType "float8"],ScalarType "money"),("cash_mul_int2",[ScalarType "money",ScalarType "int2"],ScalarType "money"),("cash_mul_int4",[ScalarType "money",ScalarType "int4"],ScalarType "money"),("cash_ne",[ScalarType "money",ScalarType "money"],ScalarType "bool"),("cash_out",[ScalarType "money"],Pseudo Cstring),("cash_pl",[ScalarType "money",ScalarType "money"],ScalarType "money"),("cash_recv",[Pseudo Internal],ScalarType "money"),("cash_send",[ScalarType "money"],ScalarType "bytea"),("cash_words",[ScalarType "money"],ScalarType "text"),("cashlarger",[ScalarType "money",ScalarType "money"],ScalarType "money"),("cashsmaller",[ScalarType "money",ScalarType "money"],ScalarType "money"),("cbrt",[ScalarType "float8"],ScalarType "float8"),("ceil",[ScalarType "float8"],ScalarType "float8"),("ceil",[ScalarType "numeric"],ScalarType "numeric"),("ceiling",[ScalarType "float8"],ScalarType "float8"),("ceiling",[ScalarType "numeric"],ScalarType "numeric"),("center",[ScalarType "box"],ScalarType "point"),("center",[ScalarType "circle"],ScalarType "point"),("char",[ScalarType "int4"],ScalarType "char"),("char",[ScalarType "text"],ScalarType "char"),("char_length",[ScalarType "text"],ScalarType "int4"),("char_length",[ScalarType "bpchar"],ScalarType "int4"),("character_length",[ScalarType "text"],ScalarType "int4"),("character_length",[ScalarType "bpchar"],ScalarType "int4"),("chareq",[ScalarType "char",ScalarType "char"],ScalarType "bool"),("charge",[ScalarType "char",ScalarType "char"],ScalarType "bool"),("chargt",[ScalarType "char",ScalarType "char"],ScalarType "bool"),("charin",[Pseudo Cstring],ScalarType "char"),("charle",[ScalarType "char",ScalarType "char"],ScalarType "bool"),("charlt",[ScalarType "char",ScalarType "char"],ScalarType "bool"),("charne",[ScalarType "char",ScalarType "char"],ScalarType "bool"),("charout",[ScalarType "char"],Pseudo Cstring),("charrecv",[Pseudo Internal],ScalarType "char"),("charsend",[ScalarType "char"],ScalarType "bytea"),("chr",[ScalarType "int4"],ScalarType "text"),("cideq",[ScalarType "cid",ScalarType "cid"],ScalarType "bool"),("cidin",[Pseudo Cstring],ScalarType "cid"),("cidout",[ScalarType "cid"],Pseudo Cstring),("cidr",[ScalarType "inet"],ScalarType "cidr"),("cidr_in",[Pseudo Cstring],ScalarType "cidr"),("cidr_out",[ScalarType "cidr"],Pseudo Cstring),("cidr_recv",[Pseudo Internal],ScalarType "cidr"),("cidr_send",[ScalarType "cidr"],ScalarType "bytea"),("cidrecv",[Pseudo Internal],ScalarType "cid"),("cidsend",[ScalarType "cid"],ScalarType "bytea"),("circle",[ScalarType "box"],ScalarType "circle"),("circle",[ScalarType "polygon"],ScalarType "circle"),("circle",[ScalarType "point",ScalarType "float8"],ScalarType "circle"),("circle_above",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_add_pt",[ScalarType "circle",ScalarType "point"],ScalarType "circle"),("circle_below",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_center",[ScalarType "circle"],ScalarType "point"),("circle_contain",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_contain_pt",[ScalarType "circle",ScalarType "point"],ScalarType "bool"),("circle_contained",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_distance",[ScalarType "circle",ScalarType "circle"],ScalarType "float8"),("circle_div_pt",[ScalarType "circle",ScalarType "point"],ScalarType "circle"),("circle_eq",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_ge",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_gt",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_in",[Pseudo Cstring],ScalarType "circle"),("circle_le",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_left",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_lt",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_mul_pt",[ScalarType "circle",ScalarType "point"],ScalarType "circle"),("circle_ne",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_out",[ScalarType "circle"],Pseudo Cstring),("circle_overabove",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_overbelow",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_overlap",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_overleft",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_overright",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_recv",[Pseudo Internal],ScalarType "circle"),("circle_right",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_same",[ScalarType "circle",ScalarType "circle"],ScalarType "bool"),("circle_send",[ScalarType "circle"],ScalarType "bytea"),("circle_sub_pt",[ScalarType "circle",ScalarType "point"],ScalarType "circle"),("clock_timestamp",[],ScalarType "timestamptz"),("close_lb",[ScalarType "line",ScalarType "box"],ScalarType "point"),("close_ls",[ScalarType "line",ScalarType "lseg"],ScalarType "point"),("close_lseg",[ScalarType "lseg",ScalarType "lseg"],ScalarType "point"),("close_pb",[ScalarType "point",ScalarType "box"],ScalarType "point"),("close_pl",[ScalarType "point",ScalarType "line"],ScalarType "point"),("close_ps",[ScalarType "point",ScalarType "lseg"],ScalarType "point"),("close_sb",[ScalarType "lseg",ScalarType "box"],ScalarType "point"),("close_sl",[ScalarType "lseg",ScalarType "line"],ScalarType "point"),("col_description",[ScalarType "oid",ScalarType "int4"],ScalarType "text"),("contjoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("contsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("convert",[ScalarType "bytea",ScalarType "name",ScalarType "name"],ScalarType "bytea"),("convert_from",[ScalarType "bytea",ScalarType "name"],ScalarType "text"),("convert_to",[ScalarType "text",ScalarType "name"],ScalarType "bytea"),("cos",[ScalarType "float8"],ScalarType "float8"),("cot",[ScalarType "float8"],ScalarType "float8"),("cstring_in",[Pseudo Cstring],Pseudo Cstring),("cstring_out",[Pseudo Cstring],Pseudo Cstring),("cstring_recv",[Pseudo Internal],Pseudo Cstring),("cstring_send",[Pseudo Cstring],ScalarType "bytea"),("current_database",[],ScalarType "name"),("current_query",[],ScalarType "text"),("current_schema",[],ScalarType "name"),("current_schemas",[ScalarType "bool"],ArrayType (ScalarType "name")),("current_setting",[ScalarType "text"],ScalarType "text"),("current_user",[],ScalarType "name"),("currtid",[ScalarType "oid",ScalarType "tid"],ScalarType "tid"),("currtid2",[ScalarType "text",ScalarType "tid"],ScalarType "tid"),("currval",[ScalarType "regclass"],ScalarType "int8"),("cursor_to_xml",[ScalarType "refcursor",ScalarType "int4",ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("cursor_to_xmlschema",[ScalarType "refcursor",ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("database_to_xml",[ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("database_to_xml_and_xmlschema",[ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("database_to_xmlschema",[ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("date",[ScalarType "abstime"],ScalarType "date"),("date",[ScalarType "timestamp"],ScalarType "date"),("date",[ScalarType "timestamptz"],ScalarType "date"),("date_cmp",[ScalarType "date",ScalarType "date"],ScalarType "int4"),("date_cmp_timestamp",[ScalarType "date",ScalarType "timestamp"],ScalarType "int4"),("date_cmp_timestamptz",[ScalarType "date",ScalarType "timestamptz"],ScalarType "int4"),("date_eq",[ScalarType "date",ScalarType "date"],ScalarType "bool"),("date_eq_timestamp",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),("date_eq_timestamptz",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),("date_ge",[ScalarType "date",ScalarType "date"],ScalarType "bool"),("date_ge_timestamp",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),("date_ge_timestamptz",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),("date_gt",[ScalarType "date",ScalarType "date"],ScalarType "bool"),("date_gt_timestamp",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),("date_gt_timestamptz",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),("date_in",[Pseudo Cstring],ScalarType "date"),("date_larger",[ScalarType "date",ScalarType "date"],ScalarType "date"),("date_le",[ScalarType "date",ScalarType "date"],ScalarType "bool"),("date_le_timestamp",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),("date_le_timestamptz",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),("date_lt",[ScalarType "date",ScalarType "date"],ScalarType "bool"),("date_lt_timestamp",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),("date_lt_timestamptz",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),("date_mi",[ScalarType "date",ScalarType "date"],ScalarType "int4"),("date_mi_interval",[ScalarType "date",ScalarType "interval"],ScalarType "timestamp"),("date_mii",[ScalarType "date",ScalarType "int4"],ScalarType "date"),("date_ne",[ScalarType "date",ScalarType "date"],ScalarType "bool"),("date_ne_timestamp",[ScalarType "date",ScalarType "timestamp"],ScalarType "bool"),("date_ne_timestamptz",[ScalarType "date",ScalarType "timestamptz"],ScalarType "bool"),("date_out",[ScalarType "date"],Pseudo Cstring),("date_part",[ScalarType "text",ScalarType "abstime"],ScalarType "float8"),("date_part",[ScalarType "text",ScalarType "reltime"],ScalarType "float8"),("date_part",[ScalarType "text",ScalarType "date"],ScalarType "float8"),("date_part",[ScalarType "text",ScalarType "time"],ScalarType "float8"),("date_part",[ScalarType "text",ScalarType "timestamp"],ScalarType "float8"),("date_part",[ScalarType "text",ScalarType "timestamptz"],ScalarType "float8"),("date_part",[ScalarType "text",ScalarType "interval"],ScalarType "float8"),("date_part",[ScalarType "text",ScalarType "timetz"],ScalarType "float8"),("date_pl_interval",[ScalarType "date",ScalarType "interval"],ScalarType "timestamp"),("date_pli",[ScalarType "date",ScalarType "int4"],ScalarType "date"),("date_recv",[Pseudo Internal],ScalarType "date"),("date_send",[ScalarType "date"],ScalarType "bytea"),("date_smaller",[ScalarType "date",ScalarType "date"],ScalarType "date"),("date_trunc",[ScalarType "text",ScalarType "timestamp"],ScalarType "timestamp"),("date_trunc",[ScalarType "text",ScalarType "timestamptz"],ScalarType "timestamptz"),("date_trunc",[ScalarType "text",ScalarType "interval"],ScalarType "interval"),("datetime_pl",[ScalarType "date",ScalarType "time"],ScalarType "timestamp"),("datetimetz_pl",[ScalarType "date",ScalarType "timetz"],ScalarType "timestamptz"),("dcbrt",[ScalarType "float8"],ScalarType "float8"),("decode",[ScalarType "text",ScalarType "text"],ScalarType "bytea"),("degrees",[ScalarType "float8"],ScalarType "float8"),("dexp",[ScalarType "float8"],ScalarType "float8"),("diagonal",[ScalarType "box"],ScalarType "lseg"),("diameter",[ScalarType "circle"],ScalarType "float8"),("dispell_init",[Pseudo Internal],Pseudo Internal),("dispell_lexize",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("dist_cpoly",[ScalarType "circle",ScalarType "polygon"],ScalarType "float8"),("dist_lb",[ScalarType "line",ScalarType "box"],ScalarType "float8"),("dist_pb",[ScalarType "point",ScalarType "box"],ScalarType "float8"),("dist_pc",[ScalarType "point",ScalarType "circle"],ScalarType "float8"),("dist_pl",[ScalarType "point",ScalarType "line"],ScalarType "float8"),("dist_ppath",[ScalarType "point",ScalarType "path"],ScalarType "float8"),("dist_ps",[ScalarType "point",ScalarType "lseg"],ScalarType "float8"),("dist_sb",[ScalarType "lseg",ScalarType "box"],ScalarType "float8"),("dist_sl",[ScalarType "lseg",ScalarType "line"],ScalarType "float8"),("div",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("dlog1",[ScalarType "float8"],ScalarType "float8"),("dlog10",[ScalarType "float8"],ScalarType "float8"),("domain_in",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],Pseudo Any),("domain_recv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],Pseudo Any),("dpow",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("dround",[ScalarType "float8"],ScalarType "float8"),("dsimple_init",[Pseudo Internal],Pseudo Internal),("dsimple_lexize",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("dsnowball_init",[Pseudo Internal],Pseudo Internal),("dsnowball_lexize",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("dsqrt",[ScalarType "float8"],ScalarType "float8"),("dsynonym_init",[Pseudo Internal],Pseudo Internal),("dsynonym_lexize",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("dtrunc",[ScalarType "float8"],ScalarType "float8"),("encode",[ScalarType "bytea",ScalarType "text"],ScalarType "text"),("enum_cmp",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "int4"),("enum_eq",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),("enum_first",[Pseudo AnyEnum],Pseudo AnyEnum),("enum_ge",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),("enum_gt",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),("enum_in",[Pseudo Cstring,ScalarType "oid"],Pseudo AnyEnum),("enum_larger",[Pseudo AnyEnum,Pseudo AnyEnum],Pseudo AnyEnum),("enum_last",[Pseudo AnyEnum],Pseudo AnyEnum),("enum_le",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),("enum_lt",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),("enum_ne",[Pseudo AnyEnum,Pseudo AnyEnum],ScalarType "bool"),("enum_out",[Pseudo AnyEnum],Pseudo Cstring),("enum_range",[Pseudo AnyEnum],Pseudo AnyArray),("enum_range",[Pseudo AnyEnum,Pseudo AnyEnum],Pseudo AnyArray),("enum_recv",[Pseudo Cstring,ScalarType "oid"],Pseudo AnyEnum),("enum_send",[Pseudo AnyEnum],ScalarType "bytea"),("enum_smaller",[Pseudo AnyEnum,Pseudo AnyEnum],Pseudo AnyEnum),("eqjoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("eqsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("euc_cn_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("euc_cn_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("euc_jis_2004_to_shift_jis_2004",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("euc_jis_2004_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("euc_jp_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("euc_jp_to_sjis",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("euc_jp_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("euc_kr_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("euc_kr_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("euc_tw_to_big5",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("euc_tw_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("euc_tw_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("exp",[ScalarType "float8"],ScalarType "float8"),("exp",[ScalarType "numeric"],ScalarType "numeric"),("factorial",[ScalarType "int8"],ScalarType "numeric"),("family",[ScalarType "inet"],ScalarType "int4"),("flatfile_update_trigger",[],Pseudo Trigger),("float4",[ScalarType "int8"],ScalarType "float4"),("float4",[ScalarType "int2"],ScalarType "float4"),("float4",[ScalarType "int4"],ScalarType "float4"),("float4",[ScalarType "float8"],ScalarType "float4"),("float4",[ScalarType "numeric"],ScalarType "float4"),("float48div",[ScalarType "float4",ScalarType "float8"],ScalarType "float8"),("float48eq",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),("float48ge",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),("float48gt",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),("float48le",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),("float48lt",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),("float48mi",[ScalarType "float4",ScalarType "float8"],ScalarType "float8"),("float48mul",[ScalarType "float4",ScalarType "float8"],ScalarType "float8"),("float48ne",[ScalarType "float4",ScalarType "float8"],ScalarType "bool"),("float48pl",[ScalarType "float4",ScalarType "float8"],ScalarType "float8"),("float4_accum",[ArrayType (ScalarType "float8"),ScalarType "float4"],ArrayType (ScalarType "float8")),("float4abs",[ScalarType "float4"],ScalarType "float4"),("float4div",[ScalarType "float4",ScalarType "float4"],ScalarType "float4"),("float4eq",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),("float4ge",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),("float4gt",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),("float4in",[Pseudo Cstring],ScalarType "float4"),("float4larger",[ScalarType "float4",ScalarType "float4"],ScalarType "float4"),("float4le",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),("float4lt",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),("float4mi",[ScalarType "float4",ScalarType "float4"],ScalarType "float4"),("float4mul",[ScalarType "float4",ScalarType "float4"],ScalarType "float4"),("float4ne",[ScalarType "float4",ScalarType "float4"],ScalarType "bool"),("float4out",[ScalarType "float4"],Pseudo Cstring),("float4pl",[ScalarType "float4",ScalarType "float4"],ScalarType "float4"),("float4recv",[Pseudo Internal],ScalarType "float4"),("float4send",[ScalarType "float4"],ScalarType "bytea"),("float4smaller",[ScalarType "float4",ScalarType "float4"],ScalarType "float4"),("float4um",[ScalarType "float4"],ScalarType "float4"),("float4up",[ScalarType "float4"],ScalarType "float4"),("float8",[ScalarType "int8"],ScalarType "float8"),("float8",[ScalarType "int2"],ScalarType "float8"),("float8",[ScalarType "int4"],ScalarType "float8"),("float8",[ScalarType "float4"],ScalarType "float8"),("float8",[ScalarType "numeric"],ScalarType "float8"),("float84div",[ScalarType "float8",ScalarType "float4"],ScalarType "float8"),("float84eq",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),("float84ge",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),("float84gt",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),("float84le",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),("float84lt",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),("float84mi",[ScalarType "float8",ScalarType "float4"],ScalarType "float8"),("float84mul",[ScalarType "float8",ScalarType "float4"],ScalarType "float8"),("float84ne",[ScalarType "float8",ScalarType "float4"],ScalarType "bool"),("float84pl",[ScalarType "float8",ScalarType "float4"],ScalarType "float8"),("float8_accum",[ArrayType (ScalarType "float8"),ScalarType "float8"],ArrayType (ScalarType "float8")),("float8_avg",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_corr",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_covar_pop",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_covar_samp",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_regr_accum",[ArrayType (ScalarType "float8"),ScalarType "float8",ScalarType "float8"],ArrayType (ScalarType "float8")),("float8_regr_avgx",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_regr_avgy",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_regr_intercept",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_regr_r2",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_regr_slope",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_regr_sxx",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_regr_sxy",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_regr_syy",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_stddev_pop",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_stddev_samp",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_var_pop",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8_var_samp",[ArrayType (ScalarType "float8")],ScalarType "float8"),("float8abs",[ScalarType "float8"],ScalarType "float8"),("float8div",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("float8eq",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),("float8ge",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),("float8gt",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),("float8in",[Pseudo Cstring],ScalarType "float8"),("float8larger",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("float8le",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),("float8lt",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),("float8mi",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("float8mul",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("float8ne",[ScalarType "float8",ScalarType "float8"],ScalarType "bool"),("float8out",[ScalarType "float8"],Pseudo Cstring),("float8pl",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("float8recv",[Pseudo Internal],ScalarType "float8"),("float8send",[ScalarType "float8"],ScalarType "bytea"),("float8smaller",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("float8um",[ScalarType "float8"],ScalarType "float8"),("float8up",[ScalarType "float8"],ScalarType "float8"),("floor",[ScalarType "float8"],ScalarType "float8"),("floor",[ScalarType "numeric"],ScalarType "numeric"),("flt4_mul_cash",[ScalarType "float4",ScalarType "money"],ScalarType "money"),("flt8_mul_cash",[ScalarType "float8",ScalarType "money"],ScalarType "money"),("fmgr_c_validator",[ScalarType "oid"],Pseudo Void),("fmgr_internal_validator",[ScalarType "oid"],Pseudo Void),("fmgr_sql_validator",[ScalarType "oid"],Pseudo Void),("format_type",[ScalarType "oid",ScalarType "int4"],ScalarType "text"),("gb18030_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("gbk_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("generate_series",[ScalarType "int8",ScalarType "int8"],SetOfType (ScalarType "int8")),("generate_series",[ScalarType "int4",ScalarType "int4"],SetOfType (ScalarType "int4")),("generate_series",[ScalarType "int8",ScalarType "int8",ScalarType "int8"],SetOfType (ScalarType "int8")),("generate_series",[ScalarType "int4",ScalarType "int4",ScalarType "int4"],SetOfType (ScalarType "int4")),("generate_series",[ScalarType "timestamp",ScalarType "timestamp",ScalarType "interval"],SetOfType (ScalarType "timestamp")),("generate_series",[ScalarType "timestamptz",ScalarType "timestamptz",ScalarType "interval"],SetOfType (ScalarType "timestamptz")),("generate_subscripts",[Pseudo AnyArray,ScalarType "int4"],SetOfType (ScalarType "int4")),("generate_subscripts",[Pseudo AnyArray,ScalarType "int4",ScalarType "bool"],SetOfType (ScalarType "int4")),("get_bit",[ScalarType "bytea",ScalarType "int4"],ScalarType "int4"),("get_byte",[ScalarType "bytea",ScalarType "int4"],ScalarType "int4"),("get_current_ts_config",[],ScalarType "regconfig"),("getdatabaseencoding",[],ScalarType "name"),("getpgusername",[],ScalarType "name"),("gin_cmp_prefix",[ScalarType "text",ScalarType "text",ScalarType "int2",Pseudo Internal],ScalarType "int4"),("gin_cmp_tslexeme",[ScalarType "text",ScalarType "text"],ScalarType "int4"),("gin_extract_tsquery",[ScalarType "tsquery",Pseudo Internal,ScalarType "int2",Pseudo Internal,Pseudo Internal],Pseudo Internal),("gin_extract_tsvector",[ScalarType "tsvector",Pseudo Internal],Pseudo Internal),("gin_tsquery_consistent",[Pseudo Internal,ScalarType "int2",ScalarType "tsquery",ScalarType "int4",Pseudo Internal,Pseudo Internal],ScalarType "bool"),("ginarrayconsistent",[Pseudo Internal,ScalarType "int2",Pseudo AnyArray,ScalarType "int4",Pseudo Internal,Pseudo Internal],ScalarType "bool"),("ginarrayextract",[Pseudo AnyArray,Pseudo Internal],Pseudo Internal),("ginbeginscan",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("ginbuild",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("ginbulkdelete",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("gincostestimate",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Void),("ginendscan",[Pseudo Internal],Pseudo Void),("gingetbitmap",[Pseudo Internal,Pseudo Internal],ScalarType "int8"),("gininsert",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],ScalarType "bool"),("ginmarkpos",[Pseudo Internal],Pseudo Void),("ginoptions",[ArrayType (ScalarType "text"),ScalarType "bool"],ScalarType "bytea"),("ginqueryarrayextract",[Pseudo AnyArray,Pseudo Internal,ScalarType "int2",Pseudo Internal,Pseudo Internal],Pseudo Internal),("ginrescan",[Pseudo Internal,Pseudo Internal],Pseudo Void),("ginrestrpos",[Pseudo Internal],Pseudo Void),("ginvacuumcleanup",[Pseudo Internal,Pseudo Internal],Pseudo Internal),("gist_box_compress",[Pseudo Internal],Pseudo Internal),("gist_box_consistent",[Pseudo Internal,ScalarType "box",ScalarType "int4",ScalarType "oid",Pseudo Internal],ScalarType "bool"),("gist_box_decompress",[Pseudo Internal],Pseudo Internal),("gist_box_penalty",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("gist_box_picksplit",[Pseudo Internal,Pseudo Internal],Pseudo Internal),("gist_box_same",[ScalarType "box",ScalarType "box",Pseudo Internal],Pseudo Internal),("gist_box_union",[Pseudo Internal,Pseudo Internal],ScalarType "box"),("gist_circle_compress",[Pseudo Internal],Pseudo Internal),("gist_circle_consistent",[Pseudo Internal,ScalarType "circle",ScalarType "int4",ScalarType "oid",Pseudo Internal],ScalarType "bool"),("gist_poly_compress",[Pseudo Internal],Pseudo Internal),("gist_poly_consistent",[Pseudo Internal,ScalarType "polygon",ScalarType "int4",ScalarType "oid",Pseudo Internal],ScalarType "bool"),("gistbeginscan",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("gistbuild",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("gistbulkdelete",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("gistcostestimate",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Void),("gistendscan",[Pseudo Internal],Pseudo Void),("gistgetbitmap",[Pseudo Internal,Pseudo Internal],ScalarType "int8"),("gistgettuple",[Pseudo Internal,Pseudo Internal],ScalarType "bool"),("gistinsert",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],ScalarType "bool"),("gistmarkpos",[Pseudo Internal],Pseudo Void),("gistoptions",[ArrayType (ScalarType "text"),ScalarType "bool"],ScalarType "bytea"),("gistrescan",[Pseudo Internal,Pseudo Internal],Pseudo Void),("gistrestrpos",[Pseudo Internal],Pseudo Void),("gistvacuumcleanup",[Pseudo Internal,Pseudo Internal],Pseudo Internal),("gtsquery_compress",[Pseudo Internal],Pseudo Internal),("gtsquery_consistent",[Pseudo Internal,Pseudo Internal,ScalarType "int4",ScalarType "oid",Pseudo Internal],ScalarType "bool"),("gtsquery_decompress",[Pseudo Internal],Pseudo Internal),("gtsquery_penalty",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("gtsquery_picksplit",[Pseudo Internal,Pseudo Internal],Pseudo Internal),("gtsquery_same",[ScalarType "int8",ScalarType "int8",Pseudo Internal],Pseudo Internal),("gtsquery_union",[Pseudo Internal,Pseudo Internal],Pseudo Internal),("gtsvector_compress",[Pseudo Internal],Pseudo Internal),("gtsvector_consistent",[Pseudo Internal,ScalarType "gtsvector",ScalarType "int4",ScalarType "oid",Pseudo Internal],ScalarType "bool"),("gtsvector_decompress",[Pseudo Internal],Pseudo Internal),("gtsvector_penalty",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("gtsvector_picksplit",[Pseudo Internal,Pseudo Internal],Pseudo Internal),("gtsvector_same",[ScalarType "gtsvector",ScalarType "gtsvector",Pseudo Internal],Pseudo Internal),("gtsvector_union",[Pseudo Internal,Pseudo Internal],Pseudo Internal),("gtsvectorin",[Pseudo Cstring],ScalarType "gtsvector"),("gtsvectorout",[ScalarType "gtsvector"],Pseudo Cstring),("has_any_column_privilege",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_any_column_privilege",[ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_any_column_privilege",[ScalarType "name",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_any_column_privilege",[ScalarType "name",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_any_column_privilege",[ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_any_column_privilege",[ScalarType "oid",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "text",ScalarType "int2",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "text",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "oid",ScalarType "int2",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "name",ScalarType "text",ScalarType "int2",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "name",ScalarType "text",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "name",ScalarType "oid",ScalarType "int2",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "name",ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "oid",ScalarType "text",ScalarType "int2",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "oid",ScalarType "text",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "oid",ScalarType "oid",ScalarType "int2",ScalarType "text"],ScalarType "bool"),("has_column_privilege",[ScalarType "oid",ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_database_privilege",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_database_privilege",[ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_database_privilege",[ScalarType "name",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_database_privilege",[ScalarType "name",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_database_privilege",[ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_database_privilege",[ScalarType "oid",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_foreign_data_wrapper_privilege",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_foreign_data_wrapper_privilege",[ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_foreign_data_wrapper_privilege",[ScalarType "name",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_foreign_data_wrapper_privilege",[ScalarType "name",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_foreign_data_wrapper_privilege",[ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_foreign_data_wrapper_privilege",[ScalarType "oid",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_function_privilege",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_function_privilege",[ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_function_privilege",[ScalarType "name",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_function_privilege",[ScalarType "name",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_function_privilege",[ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_function_privilege",[ScalarType "oid",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_language_privilege",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_language_privilege",[ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_language_privilege",[ScalarType "name",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_language_privilege",[ScalarType "name",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_language_privilege",[ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_language_privilege",[ScalarType "oid",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_schema_privilege",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_schema_privilege",[ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_schema_privilege",[ScalarType "name",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_schema_privilege",[ScalarType "name",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_schema_privilege",[ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_schema_privilege",[ScalarType "oid",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_server_privilege",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_server_privilege",[ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_server_privilege",[ScalarType "name",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_server_privilege",[ScalarType "name",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_server_privilege",[ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_server_privilege",[ScalarType "oid",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_table_privilege",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_table_privilege",[ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_table_privilege",[ScalarType "name",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_table_privilege",[ScalarType "name",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_table_privilege",[ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_table_privilege",[ScalarType "oid",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_tablespace_privilege",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_tablespace_privilege",[ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_tablespace_privilege",[ScalarType "name",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_tablespace_privilege",[ScalarType "name",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("has_tablespace_privilege",[ScalarType "oid",ScalarType "text",ScalarType "text"],ScalarType "bool"),("has_tablespace_privilege",[ScalarType "oid",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("hash_aclitem",[ScalarType "aclitem"],ScalarType "int4"),("hash_numeric",[ScalarType "numeric"],ScalarType "int4"),("hashbeginscan",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("hashbpchar",[ScalarType "bpchar"],ScalarType "int4"),("hashbuild",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("hashbulkdelete",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("hashchar",[ScalarType "char"],ScalarType "int4"),("hashcostestimate",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Void),("hashendscan",[Pseudo Internal],Pseudo Void),("hashenum",[Pseudo AnyEnum],ScalarType "int4"),("hashfloat4",[ScalarType "float4"],ScalarType "int4"),("hashfloat8",[ScalarType "float8"],ScalarType "int4"),("hashgetbitmap",[Pseudo Internal,Pseudo Internal],ScalarType "int8"),("hashgettuple",[Pseudo Internal,Pseudo Internal],ScalarType "bool"),("hashinet",[ScalarType "inet"],ScalarType "int4"),("hashinsert",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],ScalarType "bool"),("hashint2",[ScalarType "int2"],ScalarType "int4"),("hashint2vector",[ScalarType "int2vector"],ScalarType "int4"),("hashint4",[ScalarType "int4"],ScalarType "int4"),("hashint8",[ScalarType "int8"],ScalarType "int4"),("hashmacaddr",[ScalarType "macaddr"],ScalarType "int4"),("hashmarkpos",[Pseudo Internal],Pseudo Void),("hashname",[ScalarType "name"],ScalarType "int4"),("hashoid",[ScalarType "oid"],ScalarType "int4"),("hashoidvector",[ScalarType "oidvector"],ScalarType "int4"),("hashoptions",[ArrayType (ScalarType "text"),ScalarType "bool"],ScalarType "bytea"),("hashrescan",[Pseudo Internal,Pseudo Internal],Pseudo Void),("hashrestrpos",[Pseudo Internal],Pseudo Void),("hashtext",[ScalarType "text"],ScalarType "int4"),("hashvacuumcleanup",[Pseudo Internal,Pseudo Internal],Pseudo Internal),("hashvarlena",[Pseudo Internal],ScalarType "int4"),("height",[ScalarType "box"],ScalarType "float8"),("host",[ScalarType "inet"],ScalarType "text"),("hostmask",[ScalarType "inet"],ScalarType "inet"),("iclikejoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("iclikesel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("icnlikejoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("icnlikesel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("icregexeqjoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("icregexeqsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("icregexnejoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("icregexnesel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("inet_client_addr",[],ScalarType "inet"),("inet_client_port",[],ScalarType "int4"),("inet_in",[Pseudo Cstring],ScalarType "inet"),("inet_out",[ScalarType "inet"],Pseudo Cstring),("inet_recv",[Pseudo Internal],ScalarType "inet"),("inet_send",[ScalarType "inet"],ScalarType "bytea"),("inet_server_addr",[],ScalarType "inet"),("inet_server_port",[],ScalarType "int4"),("inetand",[ScalarType "inet",ScalarType "inet"],ScalarType "inet"),("inetmi",[ScalarType "inet",ScalarType "inet"],ScalarType "int8"),("inetmi_int8",[ScalarType "inet",ScalarType "int8"],ScalarType "inet"),("inetnot",[ScalarType "inet"],ScalarType "inet"),("inetor",[ScalarType "inet",ScalarType "inet"],ScalarType "inet"),("inetpl",[ScalarType "inet",ScalarType "int8"],ScalarType "inet"),("initcap",[ScalarType "text"],ScalarType "text"),("int2",[ScalarType "int8"],ScalarType "int2"),("int2",[ScalarType "int4"],ScalarType "int2"),("int2",[ScalarType "float4"],ScalarType "int2"),("int2",[ScalarType "float8"],ScalarType "int2"),("int2",[ScalarType "numeric"],ScalarType "int2"),("int24div",[ScalarType "int2",ScalarType "int4"],ScalarType "int4"),("int24eq",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),("int24ge",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),("int24gt",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),("int24le",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),("int24lt",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),("int24mi",[ScalarType "int2",ScalarType "int4"],ScalarType "int4"),("int24mul",[ScalarType "int2",ScalarType "int4"],ScalarType "int4"),("int24ne",[ScalarType "int2",ScalarType "int4"],ScalarType "bool"),("int24pl",[ScalarType "int2",ScalarType "int4"],ScalarType "int4"),("int28div",[ScalarType "int2",ScalarType "int8"],ScalarType "int8"),("int28eq",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),("int28ge",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),("int28gt",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),("int28le",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),("int28lt",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),("int28mi",[ScalarType "int2",ScalarType "int8"],ScalarType "int8"),("int28mul",[ScalarType "int2",ScalarType "int8"],ScalarType "int8"),("int28ne",[ScalarType "int2",ScalarType "int8"],ScalarType "bool"),("int28pl",[ScalarType "int2",ScalarType "int8"],ScalarType "int8"),("int2_accum",[ArrayType (ScalarType "numeric"),ScalarType "int2"],ArrayType (ScalarType "numeric")),("int2_avg_accum",[ArrayType (ScalarType "int8"),ScalarType "int2"],ArrayType (ScalarType "int8")),("int2_mul_cash",[ScalarType "int2",ScalarType "money"],ScalarType "money"),("int2_sum",[ScalarType "int8",ScalarType "int2"],ScalarType "int8"),("int2abs",[ScalarType "int2"],ScalarType "int2"),("int2and",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("int2div",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("int2eq",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),("int2ge",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),("int2gt",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),("int2in",[Pseudo Cstring],ScalarType "int2"),("int2larger",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("int2le",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),("int2lt",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),("int2mi",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("int2mod",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("int2mul",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("int2ne",[ScalarType "int2",ScalarType "int2"],ScalarType "bool"),("int2not",[ScalarType "int2"],ScalarType "int2"),("int2or",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("int2out",[ScalarType "int2"],Pseudo Cstring),("int2pl",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("int2recv",[Pseudo Internal],ScalarType "int2"),("int2send",[ScalarType "int2"],ScalarType "bytea"),("int2shl",[ScalarType "int2",ScalarType "int4"],ScalarType "int2"),("int2shr",[ScalarType "int2",ScalarType "int4"],ScalarType "int2"),("int2smaller",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("int2um",[ScalarType "int2"],ScalarType "int2"),("int2up",[ScalarType "int2"],ScalarType "int2"),("int2vectoreq",[ScalarType "int2vector",ScalarType "int2vector"],ScalarType "bool"),("int2vectorin",[Pseudo Cstring],ScalarType "int2vector"),("int2vectorout",[ScalarType "int2vector"],Pseudo Cstring),("int2vectorrecv",[Pseudo Internal],ScalarType "int2vector"),("int2vectorsend",[ScalarType "int2vector"],ScalarType "bytea"),("int2xor",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("int4",[ScalarType "bool"],ScalarType "int4"),("int4",[ScalarType "char"],ScalarType "int4"),("int4",[ScalarType "int8"],ScalarType "int4"),("int4",[ScalarType "int2"],ScalarType "int4"),("int4",[ScalarType "float4"],ScalarType "int4"),("int4",[ScalarType "float8"],ScalarType "int4"),("int4",[ScalarType "bit"],ScalarType "int4"),("int4",[ScalarType "numeric"],ScalarType "int4"),("int42div",[ScalarType "int4",ScalarType "int2"],ScalarType "int4"),("int42eq",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),("int42ge",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),("int42gt",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),("int42le",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),("int42lt",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),("int42mi",[ScalarType "int4",ScalarType "int2"],ScalarType "int4"),("int42mul",[ScalarType "int4",ScalarType "int2"],ScalarType "int4"),("int42ne",[ScalarType "int4",ScalarType "int2"],ScalarType "bool"),("int42pl",[ScalarType "int4",ScalarType "int2"],ScalarType "int4"),("int48div",[ScalarType "int4",ScalarType "int8"],ScalarType "int8"),("int48eq",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),("int48ge",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),("int48gt",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),("int48le",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),("int48lt",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),("int48mi",[ScalarType "int4",ScalarType "int8"],ScalarType "int8"),("int48mul",[ScalarType "int4",ScalarType "int8"],ScalarType "int8"),("int48ne",[ScalarType "int4",ScalarType "int8"],ScalarType "bool"),("int48pl",[ScalarType "int4",ScalarType "int8"],ScalarType "int8"),("int4_accum",[ArrayType (ScalarType "numeric"),ScalarType "int4"],ArrayType (ScalarType "numeric")),("int4_avg_accum",[ArrayType (ScalarType "int8"),ScalarType "int4"],ArrayType (ScalarType "int8")),("int4_mul_cash",[ScalarType "int4",ScalarType "money"],ScalarType "money"),("int4_sum",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("int4abs",[ScalarType "int4"],ScalarType "int4"),("int4and",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int4div",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int4eq",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("int4ge",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("int4gt",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("int4in",[Pseudo Cstring],ScalarType "int4"),("int4inc",[ScalarType "int4"],ScalarType "int4"),("int4larger",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int4le",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("int4lt",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("int4mi",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int4mod",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int4mul",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int4ne",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("int4not",[ScalarType "int4"],ScalarType "int4"),("int4or",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int4out",[ScalarType "int4"],Pseudo Cstring),("int4pl",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int4recv",[Pseudo Internal],ScalarType "int4"),("int4send",[ScalarType "int4"],ScalarType "bytea"),("int4shl",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int4shr",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int4smaller",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int4um",[ScalarType "int4"],ScalarType "int4"),("int4up",[ScalarType "int4"],ScalarType "int4"),("int4xor",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("int8",[ScalarType "int2"],ScalarType "int8"),("int8",[ScalarType "int4"],ScalarType "int8"),("int8",[ScalarType "oid"],ScalarType "int8"),("int8",[ScalarType "float4"],ScalarType "int8"),("int8",[ScalarType "float8"],ScalarType "int8"),("int8",[ScalarType "bit"],ScalarType "int8"),("int8",[ScalarType "numeric"],ScalarType "int8"),("int82div",[ScalarType "int8",ScalarType "int2"],ScalarType "int8"),("int82eq",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),("int82ge",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),("int82gt",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),("int82le",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),("int82lt",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),("int82mi",[ScalarType "int8",ScalarType "int2"],ScalarType "int8"),("int82mul",[ScalarType "int8",ScalarType "int2"],ScalarType "int8"),("int82ne",[ScalarType "int8",ScalarType "int2"],ScalarType "bool"),("int82pl",[ScalarType "int8",ScalarType "int2"],ScalarType "int8"),("int84div",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("int84eq",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),("int84ge",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),("int84gt",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),("int84le",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),("int84lt",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),("int84mi",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("int84mul",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("int84ne",[ScalarType "int8",ScalarType "int4"],ScalarType "bool"),("int84pl",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("int8_accum",[ArrayType (ScalarType "numeric"),ScalarType "int8"],ArrayType (ScalarType "numeric")),("int8_avg",[ArrayType (ScalarType "int8")],ScalarType "numeric"),("int8_avg_accum",[ArrayType (ScalarType "numeric"),ScalarType "int8"],ArrayType (ScalarType "numeric")),("int8_sum",[ScalarType "numeric",ScalarType "int8"],ScalarType "numeric"),("int8abs",[ScalarType "int8"],ScalarType "int8"),("int8and",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("int8div",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("int8eq",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),("int8ge",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),("int8gt",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),("int8in",[Pseudo Cstring],ScalarType "int8"),("int8inc",[ScalarType "int8"],ScalarType "int8"),("int8inc_any",[ScalarType "int8",Pseudo Any],ScalarType "int8"),("int8inc_float8_float8",[ScalarType "int8",ScalarType "float8",ScalarType "float8"],ScalarType "int8"),("int8larger",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("int8le",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),("int8lt",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),("int8mi",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("int8mod",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("int8mul",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("int8ne",[ScalarType "int8",ScalarType "int8"],ScalarType "bool"),("int8not",[ScalarType "int8"],ScalarType "int8"),("int8or",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("int8out",[ScalarType "int8"],Pseudo Cstring),("int8pl",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("int8pl_inet",[ScalarType "int8",ScalarType "inet"],ScalarType "inet"),("int8recv",[Pseudo Internal],ScalarType "int8"),("int8send",[ScalarType "int8"],ScalarType "bytea"),("int8shl",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("int8shr",[ScalarType "int8",ScalarType "int4"],ScalarType "int8"),("int8smaller",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("int8um",[ScalarType "int8"],ScalarType "int8"),("int8up",[ScalarType "int8"],ScalarType "int8"),("int8xor",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("integer_pl_date",[ScalarType "int4",ScalarType "date"],ScalarType "date"),("inter_lb",[ScalarType "line",ScalarType "box"],ScalarType "bool"),("inter_sb",[ScalarType "lseg",ScalarType "box"],ScalarType "bool"),("inter_sl",[ScalarType "lseg",ScalarType "line"],ScalarType "bool"),("internal_in",[Pseudo Cstring],Pseudo Internal),("internal_out",[Pseudo Internal],Pseudo Cstring),("interval",[ScalarType "reltime"],ScalarType "interval"),("interval",[ScalarType "time"],ScalarType "interval"),("interval",[ScalarType "interval",ScalarType "int4"],ScalarType "interval"),("interval_accum",[ArrayType (ScalarType "interval"),ScalarType "interval"],ArrayType (ScalarType "interval")),("interval_avg",[ArrayType (ScalarType "interval")],ScalarType "interval"),("interval_cmp",[ScalarType "interval",ScalarType "interval"],ScalarType "int4"),("interval_div",[ScalarType "interval",ScalarType "float8"],ScalarType "interval"),("interval_eq",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),("interval_ge",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),("interval_gt",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),("interval_hash",[ScalarType "interval"],ScalarType "int4"),("interval_in",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],ScalarType "interval"),("interval_larger",[ScalarType "interval",ScalarType "interval"],ScalarType "interval"),("interval_le",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),("interval_lt",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),("interval_mi",[ScalarType "interval",ScalarType "interval"],ScalarType "interval"),("interval_mul",[ScalarType "interval",ScalarType "float8"],ScalarType "interval"),("interval_ne",[ScalarType "interval",ScalarType "interval"],ScalarType "bool"),("interval_out",[ScalarType "interval"],Pseudo Cstring),("interval_pl",[ScalarType "interval",ScalarType "interval"],ScalarType "interval"),("interval_pl_date",[ScalarType "interval",ScalarType "date"],ScalarType "timestamp"),("interval_pl_time",[ScalarType "interval",ScalarType "time"],ScalarType "time"),("interval_pl_timestamp",[ScalarType "interval",ScalarType "timestamp"],ScalarType "timestamp"),("interval_pl_timestamptz",[ScalarType "interval",ScalarType "timestamptz"],ScalarType "timestamptz"),("interval_pl_timetz",[ScalarType "interval",ScalarType "timetz"],ScalarType "timetz"),("interval_recv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],ScalarType "interval"),("interval_send",[ScalarType "interval"],ScalarType "bytea"),("interval_smaller",[ScalarType "interval",ScalarType "interval"],ScalarType "interval"),("interval_um",[ScalarType "interval"],ScalarType "interval"),("intervaltypmodin",[ArrayType (Pseudo Cstring)],ScalarType "int4"),("intervaltypmodout",[ScalarType "int4"],Pseudo Cstring),("intinterval",[ScalarType "abstime",ScalarType "tinterval"],ScalarType "bool"),("isclosed",[ScalarType "path"],ScalarType "bool"),("isfinite",[ScalarType "abstime"],ScalarType "bool"),("isfinite",[ScalarType "date"],ScalarType "bool"),("isfinite",[ScalarType "timestamp"],ScalarType "bool"),("isfinite",[ScalarType "timestamptz"],ScalarType "bool"),("isfinite",[ScalarType "interval"],ScalarType "bool"),("ishorizontal",[ScalarType "lseg"],ScalarType "bool"),("ishorizontal",[ScalarType "line"],ScalarType "bool"),("ishorizontal",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("iso8859_1_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("iso8859_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("iso_to_koi8r",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("iso_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("iso_to_win1251",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("iso_to_win866",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("isopen",[ScalarType "path"],ScalarType "bool"),("isparallel",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("isparallel",[ScalarType "line",ScalarType "line"],ScalarType "bool"),("isperp",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("isperp",[ScalarType "line",ScalarType "line"],ScalarType "bool"),("isvertical",[ScalarType "lseg"],ScalarType "bool"),("isvertical",[ScalarType "line"],ScalarType "bool"),("isvertical",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("johab_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("justify_days",[ScalarType "interval"],ScalarType "interval"),("justify_hours",[ScalarType "interval"],ScalarType "interval"),("justify_interval",[ScalarType "interval"],ScalarType "interval"),("koi8r_to_iso",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("koi8r_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("koi8r_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("koi8r_to_win1251",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("koi8r_to_win866",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("koi8u_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("language_handler_in",[Pseudo Cstring],Pseudo LanguageHandler),("language_handler_out",[Pseudo LanguageHandler],Pseudo Cstring),("lastval",[],ScalarType "int8"),("latin1_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("latin2_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("latin2_to_win1250",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("latin3_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("latin4_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("length",[ScalarType "bytea"],ScalarType "int4"),("length",[ScalarType "text"],ScalarType "int4"),("length",[ScalarType "lseg"],ScalarType "float8"),("length",[ScalarType "path"],ScalarType "float8"),("length",[ScalarType "bpchar"],ScalarType "int4"),("length",[ScalarType "bit"],ScalarType "int4"),("length",[ScalarType "tsvector"],ScalarType "int4"),("length",[ScalarType "bytea",ScalarType "name"],ScalarType "int4"),("like",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("like",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("like",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("like_escape",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bytea"),("like_escape",[ScalarType "text",ScalarType "text"],ScalarType "text"),("likejoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("likesel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("line",[ScalarType "point",ScalarType "point"],ScalarType "line"),("line_distance",[ScalarType "line",ScalarType "line"],ScalarType "float8"),("line_eq",[ScalarType "line",ScalarType "line"],ScalarType "bool"),("line_horizontal",[ScalarType "line"],ScalarType "bool"),("line_in",[Pseudo Cstring],ScalarType "line"),("line_interpt",[ScalarType "line",ScalarType "line"],ScalarType "point"),("line_intersect",[ScalarType "line",ScalarType "line"],ScalarType "bool"),("line_out",[ScalarType "line"],Pseudo Cstring),("line_parallel",[ScalarType "line",ScalarType "line"],ScalarType "bool"),("line_perp",[ScalarType "line",ScalarType "line"],ScalarType "bool"),("line_recv",[Pseudo Internal],ScalarType "line"),("line_send",[ScalarType "line"],ScalarType "bytea"),("line_vertical",[ScalarType "line"],ScalarType "bool"),("ln",[ScalarType "float8"],ScalarType "float8"),("ln",[ScalarType "numeric"],ScalarType "numeric"),("lo_close",[ScalarType "int4"],ScalarType "int4"),("lo_creat",[ScalarType "int4"],ScalarType "oid"),("lo_create",[ScalarType "oid"],ScalarType "oid"),("lo_export",[ScalarType "oid",ScalarType "text"],ScalarType "int4"),("lo_import",[ScalarType "text"],ScalarType "oid"),("lo_import",[ScalarType "text",ScalarType "oid"],ScalarType "oid"),("lo_lseek",[ScalarType "int4",ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("lo_open",[ScalarType "oid",ScalarType "int4"],ScalarType "int4"),("lo_tell",[ScalarType "int4"],ScalarType "int4"),("lo_truncate",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("lo_unlink",[ScalarType "oid"],ScalarType "int4"),("log",[ScalarType "float8"],ScalarType "float8"),("log",[ScalarType "numeric"],ScalarType "numeric"),("log",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("loread",[ScalarType "int4",ScalarType "int4"],ScalarType "bytea"),("lower",[ScalarType "text"],ScalarType "text"),("lowrite",[ScalarType "int4",ScalarType "bytea"],ScalarType "int4"),("lpad",[ScalarType "text",ScalarType "int4"],ScalarType "text"),("lpad",[ScalarType "text",ScalarType "int4",ScalarType "text"],ScalarType "text"),("lseg",[ScalarType "box"],ScalarType "lseg"),("lseg",[ScalarType "point",ScalarType "point"],ScalarType "lseg"),("lseg_center",[ScalarType "lseg"],ScalarType "point"),("lseg_distance",[ScalarType "lseg",ScalarType "lseg"],ScalarType "float8"),("lseg_eq",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("lseg_ge",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("lseg_gt",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("lseg_horizontal",[ScalarType "lseg"],ScalarType "bool"),("lseg_in",[Pseudo Cstring],ScalarType "lseg"),("lseg_interpt",[ScalarType "lseg",ScalarType "lseg"],ScalarType "point"),("lseg_intersect",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("lseg_le",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("lseg_length",[ScalarType "lseg"],ScalarType "float8"),("lseg_lt",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("lseg_ne",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("lseg_out",[ScalarType "lseg"],Pseudo Cstring),("lseg_parallel",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("lseg_perp",[ScalarType "lseg",ScalarType "lseg"],ScalarType "bool"),("lseg_recv",[Pseudo Internal],ScalarType "lseg"),("lseg_send",[ScalarType "lseg"],ScalarType "bytea"),("lseg_vertical",[ScalarType "lseg"],ScalarType "bool"),("ltrim",[ScalarType "text"],ScalarType "text"),("ltrim",[ScalarType "text",ScalarType "text"],ScalarType "text"),("macaddr_cmp",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "int4"),("macaddr_eq",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),("macaddr_ge",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),("macaddr_gt",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),("macaddr_in",[Pseudo Cstring],ScalarType "macaddr"),("macaddr_le",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),("macaddr_lt",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),("macaddr_ne",[ScalarType "macaddr",ScalarType "macaddr"],ScalarType "bool"),("macaddr_out",[ScalarType "macaddr"],Pseudo Cstring),("macaddr_recv",[Pseudo Internal],ScalarType "macaddr"),("macaddr_send",[ScalarType "macaddr"],ScalarType "bytea"),("makeaclitem",[ScalarType "oid",ScalarType "oid",ScalarType "text",ScalarType "bool"],ScalarType "aclitem"),("masklen",[ScalarType "inet"],ScalarType "int4"),("md5",[ScalarType "bytea"],ScalarType "text"),("md5",[ScalarType "text"],ScalarType "text"),("mic_to_ascii",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_big5",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_euc_cn",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_euc_jp",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_euc_kr",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_euc_tw",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_iso",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_koi8r",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_latin1",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_latin2",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_latin3",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_latin4",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_sjis",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_win1250",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_win1251",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mic_to_win866",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("mktinterval",[ScalarType "abstime",ScalarType "abstime"],ScalarType "tinterval"),("mod",[ScalarType "int8",ScalarType "int8"],ScalarType "int8"),("mod",[ScalarType "int2",ScalarType "int2"],ScalarType "int2"),("mod",[ScalarType "int4",ScalarType "int4"],ScalarType "int4"),("mod",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("mul_d_interval",[ScalarType "float8",ScalarType "interval"],ScalarType "interval"),("name",[ScalarType "text"],ScalarType "name"),("name",[ScalarType "bpchar"],ScalarType "name"),("name",[ScalarType "varchar"],ScalarType "name"),("nameeq",[ScalarType "name",ScalarType "name"],ScalarType "bool"),("namege",[ScalarType "name",ScalarType "name"],ScalarType "bool"),("namegt",[ScalarType "name",ScalarType "name"],ScalarType "bool"),("nameiclike",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("nameicnlike",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("nameicregexeq",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("nameicregexne",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("namein",[Pseudo Cstring],ScalarType "name"),("namele",[ScalarType "name",ScalarType "name"],ScalarType "bool"),("namelike",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("namelt",[ScalarType "name",ScalarType "name"],ScalarType "bool"),("namene",[ScalarType "name",ScalarType "name"],ScalarType "bool"),("namenlike",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("nameout",[ScalarType "name"],Pseudo Cstring),("namerecv",[Pseudo Internal],ScalarType "name"),("nameregexeq",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("nameregexne",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("namesend",[ScalarType "name"],ScalarType "bytea"),("neqjoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("neqsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("netmask",[ScalarType "inet"],ScalarType "inet"),("network",[ScalarType "inet"],ScalarType "cidr"),("network_cmp",[ScalarType "inet",ScalarType "inet"],ScalarType "int4"),("network_eq",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("network_ge",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("network_gt",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("network_le",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("network_lt",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("network_ne",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("network_sub",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("network_subeq",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("network_sup",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("network_supeq",[ScalarType "inet",ScalarType "inet"],ScalarType "bool"),("nextval",[ScalarType "regclass"],ScalarType "int8"),("nlikejoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("nlikesel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("notlike",[ScalarType "bytea",ScalarType "bytea"],ScalarType "bool"),("notlike",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("notlike",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("now",[],ScalarType "timestamptz"),("npoints",[ScalarType "path"],ScalarType "int4"),("npoints",[ScalarType "polygon"],ScalarType "int4"),("numeric",[ScalarType "int8"],ScalarType "numeric"),("numeric",[ScalarType "int2"],ScalarType "numeric"),("numeric",[ScalarType "int4"],ScalarType "numeric"),("numeric",[ScalarType "float4"],ScalarType "numeric"),("numeric",[ScalarType "float8"],ScalarType "numeric"),("numeric",[ScalarType "numeric",ScalarType "int4"],ScalarType "numeric"),("numeric_abs",[ScalarType "numeric"],ScalarType "numeric"),("numeric_accum",[ArrayType (ScalarType "numeric"),ScalarType "numeric"],ArrayType (ScalarType "numeric")),("numeric_add",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("numeric_avg",[ArrayType (ScalarType "numeric")],ScalarType "numeric"),("numeric_avg_accum",[ArrayType (ScalarType "numeric"),ScalarType "numeric"],ArrayType (ScalarType "numeric")),("numeric_cmp",[ScalarType "numeric",ScalarType "numeric"],ScalarType "int4"),("numeric_div",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("numeric_div_trunc",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("numeric_eq",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),("numeric_exp",[ScalarType "numeric"],ScalarType "numeric"),("numeric_fac",[ScalarType "int8"],ScalarType "numeric"),("numeric_ge",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),("numeric_gt",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),("numeric_in",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],ScalarType "numeric"),("numeric_inc",[ScalarType "numeric"],ScalarType "numeric"),("numeric_larger",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("numeric_le",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),("numeric_ln",[ScalarType "numeric"],ScalarType "numeric"),("numeric_log",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("numeric_lt",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),("numeric_mod",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("numeric_mul",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("numeric_ne",[ScalarType "numeric",ScalarType "numeric"],ScalarType "bool"),("numeric_out",[ScalarType "numeric"],Pseudo Cstring),("numeric_power",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("numeric_recv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],ScalarType "numeric"),("numeric_send",[ScalarType "numeric"],ScalarType "bytea"),("numeric_smaller",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("numeric_sqrt",[ScalarType "numeric"],ScalarType "numeric"),("numeric_stddev_pop",[ArrayType (ScalarType "numeric")],ScalarType "numeric"),("numeric_stddev_samp",[ArrayType (ScalarType "numeric")],ScalarType "numeric"),("numeric_sub",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("numeric_uminus",[ScalarType "numeric"],ScalarType "numeric"),("numeric_uplus",[ScalarType "numeric"],ScalarType "numeric"),("numeric_var_pop",[ArrayType (ScalarType "numeric")],ScalarType "numeric"),("numeric_var_samp",[ArrayType (ScalarType "numeric")],ScalarType "numeric"),("numerictypmodin",[ArrayType (Pseudo Cstring)],ScalarType "int4"),("numerictypmodout",[ScalarType "int4"],Pseudo Cstring),("numnode",[ScalarType "tsquery"],ScalarType "int4"),("obj_description",[ScalarType "oid"],ScalarType "text"),("obj_description",[ScalarType "oid",ScalarType "name"],ScalarType "text"),("octet_length",[ScalarType "bytea"],ScalarType "int4"),("octet_length",[ScalarType "text"],ScalarType "int4"),("octet_length",[ScalarType "bpchar"],ScalarType "int4"),("octet_length",[ScalarType "bit"],ScalarType "int4"),("oid",[ScalarType "int8"],ScalarType "oid"),("oideq",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),("oidge",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),("oidgt",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),("oidin",[Pseudo Cstring],ScalarType "oid"),("oidlarger",[ScalarType "oid",ScalarType "oid"],ScalarType "oid"),("oidle",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),("oidlt",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),("oidne",[ScalarType "oid",ScalarType "oid"],ScalarType "bool"),("oidout",[ScalarType "oid"],Pseudo Cstring),("oidrecv",[Pseudo Internal],ScalarType "oid"),("oidsend",[ScalarType "oid"],ScalarType "bytea"),("oidsmaller",[ScalarType "oid",ScalarType "oid"],ScalarType "oid"),("oidvectoreq",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),("oidvectorge",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),("oidvectorgt",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),("oidvectorin",[Pseudo Cstring],ScalarType "oidvector"),("oidvectorle",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),("oidvectorlt",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),("oidvectorne",[ScalarType "oidvector",ScalarType "oidvector"],ScalarType "bool"),("oidvectorout",[ScalarType "oidvector"],Pseudo Cstring),("oidvectorrecv",[Pseudo Internal],ScalarType "oidvector"),("oidvectorsend",[ScalarType "oidvector"],ScalarType "bytea"),("oidvectortypes",[ScalarType "oidvector"],ScalarType "text"),("on_pb",[ScalarType "point",ScalarType "box"],ScalarType "bool"),("on_pl",[ScalarType "point",ScalarType "line"],ScalarType "bool"),("on_ppath",[ScalarType "point",ScalarType "path"],ScalarType "bool"),("on_ps",[ScalarType "point",ScalarType "lseg"],ScalarType "bool"),("on_sb",[ScalarType "lseg",ScalarType "box"],ScalarType "bool"),("on_sl",[ScalarType "lseg",ScalarType "line"],ScalarType "bool"),("opaque_in",[Pseudo Cstring],Pseudo Opaque),("opaque_out",[Pseudo Opaque],Pseudo Cstring),("overlaps",[ScalarType "time",ScalarType "time",ScalarType "time",ScalarType "time"],ScalarType "bool"),("overlaps",[ScalarType "time",ScalarType "time",ScalarType "time",ScalarType "interval"],ScalarType "bool"),("overlaps",[ScalarType "time",ScalarType "interval",ScalarType "time",ScalarType "time"],ScalarType "bool"),("overlaps",[ScalarType "time",ScalarType "interval",ScalarType "time",ScalarType "interval"],ScalarType "bool"),("overlaps",[ScalarType "timestamp",ScalarType "timestamp",ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("overlaps",[ScalarType "timestamp",ScalarType "timestamp",ScalarType "timestamp",ScalarType "interval"],ScalarType "bool"),("overlaps",[ScalarType "timestamp",ScalarType "interval",ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("overlaps",[ScalarType "timestamp",ScalarType "interval",ScalarType "timestamp",ScalarType "interval"],ScalarType "bool"),("overlaps",[ScalarType "timestamptz",ScalarType "timestamptz",ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("overlaps",[ScalarType "timestamptz",ScalarType "timestamptz",ScalarType "timestamptz",ScalarType "interval"],ScalarType "bool"),("overlaps",[ScalarType "timestamptz",ScalarType "interval",ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("overlaps",[ScalarType "timestamptz",ScalarType "interval",ScalarType "timestamptz",ScalarType "interval"],ScalarType "bool"),("overlaps",[ScalarType "timetz",ScalarType "timetz",ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),("overlay",[ScalarType "text",ScalarType "text",ScalarType "int4"],ScalarType "text"),("overlay",[ScalarType "text",ScalarType "text",ScalarType "int4",ScalarType "int4"],ScalarType "text"),("path",[ScalarType "polygon"],ScalarType "path"),("path_add",[ScalarType "path",ScalarType "path"],ScalarType "path"),("path_add_pt",[ScalarType "path",ScalarType "point"],ScalarType "path"),("path_center",[ScalarType "path"],ScalarType "point"),("path_contain_pt",[ScalarType "path",ScalarType "point"],ScalarType "bool"),("path_distance",[ScalarType "path",ScalarType "path"],ScalarType "float8"),("path_div_pt",[ScalarType "path",ScalarType "point"],ScalarType "path"),("path_in",[Pseudo Cstring],ScalarType "path"),("path_inter",[ScalarType "path",ScalarType "path"],ScalarType "bool"),("path_length",[ScalarType "path"],ScalarType "float8"),("path_mul_pt",[ScalarType "path",ScalarType "point"],ScalarType "path"),("path_n_eq",[ScalarType "path",ScalarType "path"],ScalarType "bool"),("path_n_ge",[ScalarType "path",ScalarType "path"],ScalarType "bool"),("path_n_gt",[ScalarType "path",ScalarType "path"],ScalarType "bool"),("path_n_le",[ScalarType "path",ScalarType "path"],ScalarType "bool"),("path_n_lt",[ScalarType "path",ScalarType "path"],ScalarType "bool"),("path_npoints",[ScalarType "path"],ScalarType "int4"),("path_out",[ScalarType "path"],Pseudo Cstring),("path_recv",[Pseudo Internal],ScalarType "path"),("path_send",[ScalarType "path"],ScalarType "bytea"),("path_sub_pt",[ScalarType "path",ScalarType "point"],ScalarType "path"),("pclose",[ScalarType "path"],ScalarType "path"),("pg_advisory_lock",[ScalarType "int8"],Pseudo Void),("pg_advisory_lock",[ScalarType "int4",ScalarType "int4"],Pseudo Void),("pg_advisory_lock_shared",[ScalarType "int8"],Pseudo Void),("pg_advisory_lock_shared",[ScalarType "int4",ScalarType "int4"],Pseudo Void),("pg_advisory_unlock",[ScalarType "int8"],ScalarType "bool"),("pg_advisory_unlock",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("pg_advisory_unlock_all",[],Pseudo Void),("pg_advisory_unlock_shared",[ScalarType "int8"],ScalarType "bool"),("pg_advisory_unlock_shared",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("pg_backend_pid",[],ScalarType "int4"),("pg_cancel_backend",[ScalarType "int4"],ScalarType "bool"),("pg_char_to_encoding",[ScalarType "name"],ScalarType "int4"),("pg_client_encoding",[],ScalarType "name"),("pg_column_size",[Pseudo Any],ScalarType "int4"),("pg_conf_load_time",[],ScalarType "timestamptz"),("pg_conversion_is_visible",[ScalarType "oid"],ScalarType "bool"),("pg_current_xlog_insert_location",[],ScalarType "text"),("pg_current_xlog_location",[],ScalarType "text"),("pg_cursor",[],SetOfType (Pseudo Record)),("pg_database_size",[ScalarType "name"],ScalarType "int8"),("pg_database_size",[ScalarType "oid"],ScalarType "int8"),("pg_encoding_to_char",[ScalarType "int4"],ScalarType "name"),("pg_function_is_visible",[ScalarType "oid"],ScalarType "bool"),("pg_get_constraintdef",[ScalarType "oid"],ScalarType "text"),("pg_get_constraintdef",[ScalarType "oid",ScalarType "bool"],ScalarType "text"),("pg_get_expr",[ScalarType "text",ScalarType "oid"],ScalarType "text"),("pg_get_expr",[ScalarType "text",ScalarType "oid",ScalarType "bool"],ScalarType "text"),("pg_get_function_arguments",[ScalarType "oid"],ScalarType "text"),("pg_get_function_identity_arguments",[ScalarType "oid"],ScalarType "text"),("pg_get_function_result",[ScalarType "oid"],ScalarType "text"),("pg_get_functiondef",[ScalarType "oid"],ScalarType "text"),("pg_get_indexdef",[ScalarType "oid"],ScalarType "text"),("pg_get_indexdef",[ScalarType "oid",ScalarType "int4",ScalarType "bool"],ScalarType "text"),("pg_get_keywords",[],SetOfType (Pseudo Record)),("pg_get_ruledef",[ScalarType "oid"],ScalarType "text"),("pg_get_ruledef",[ScalarType "oid",ScalarType "bool"],ScalarType "text"),("pg_get_serial_sequence",[ScalarType "text",ScalarType "text"],ScalarType "text"),("pg_get_triggerdef",[ScalarType "oid"],ScalarType "text"),("pg_get_userbyid",[ScalarType "oid"],ScalarType "name"),("pg_get_viewdef",[ScalarType "text"],ScalarType "text"),("pg_get_viewdef",[ScalarType "oid"],ScalarType "text"),("pg_get_viewdef",[ScalarType "text",ScalarType "bool"],ScalarType "text"),("pg_get_viewdef",[ScalarType "oid",ScalarType "bool"],ScalarType "text"),("pg_has_role",[ScalarType "name",ScalarType "text"],ScalarType "bool"),("pg_has_role",[ScalarType "oid",ScalarType "text"],ScalarType "bool"),("pg_has_role",[ScalarType "name",ScalarType "name",ScalarType "text"],ScalarType "bool"),("pg_has_role",[ScalarType "name",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("pg_has_role",[ScalarType "oid",ScalarType "name",ScalarType "text"],ScalarType "bool"),("pg_has_role",[ScalarType "oid",ScalarType "oid",ScalarType "text"],ScalarType "bool"),("pg_is_other_temp_schema",[ScalarType "oid"],ScalarType "bool"),("pg_lock_status",[],SetOfType (Pseudo Record)),("pg_ls_dir",[ScalarType "text"],SetOfType (ScalarType "text")),("pg_my_temp_schema",[],ScalarType "oid"),("pg_opclass_is_visible",[ScalarType "oid"],ScalarType "bool"),("pg_operator_is_visible",[ScalarType "oid"],ScalarType "bool"),("pg_options_to_table",[ArrayType (ScalarType "text")],SetOfType (Pseudo Record)),("pg_postmaster_start_time",[],ScalarType "timestamptz"),("pg_prepared_statement",[],SetOfType (Pseudo Record)),("pg_prepared_xact",[],SetOfType (Pseudo Record)),("pg_read_file",[ScalarType "text",ScalarType "int8",ScalarType "int8"],ScalarType "text"),("pg_relation_size",[ScalarType "regclass"],ScalarType "int8"),("pg_relation_size",[ScalarType "regclass",ScalarType "text"],ScalarType "int8"),("pg_reload_conf",[],ScalarType "bool"),("pg_rotate_logfile",[],ScalarType "bool"),("pg_show_all_settings",[],SetOfType (Pseudo Record)),("pg_size_pretty",[ScalarType "int8"],ScalarType "text"),("pg_sleep",[ScalarType "float8"],Pseudo Void),("pg_start_backup",[ScalarType "text",ScalarType "bool"],ScalarType "text"),("pg_stat_clear_snapshot",[],Pseudo Void),("pg_stat_file",[ScalarType "text"],Pseudo Record),("pg_stat_get_activity",[ScalarType "int4"],SetOfType (Pseudo Record)),("pg_stat_get_backend_activity",[ScalarType "int4"],ScalarType "text"),("pg_stat_get_backend_activity_start",[ScalarType "int4"],ScalarType "timestamptz"),("pg_stat_get_backend_client_addr",[ScalarType "int4"],ScalarType "inet"),("pg_stat_get_backend_client_port",[ScalarType "int4"],ScalarType "int4"),("pg_stat_get_backend_dbid",[ScalarType "int4"],ScalarType "oid"),("pg_stat_get_backend_idset",[],SetOfType (ScalarType "int4")),("pg_stat_get_backend_pid",[ScalarType "int4"],ScalarType "int4"),("pg_stat_get_backend_start",[ScalarType "int4"],ScalarType "timestamptz"),("pg_stat_get_backend_userid",[ScalarType "int4"],ScalarType "oid"),("pg_stat_get_backend_waiting",[ScalarType "int4"],ScalarType "bool"),("pg_stat_get_backend_xact_start",[ScalarType "int4"],ScalarType "timestamptz"),("pg_stat_get_bgwriter_buf_written_checkpoints",[],ScalarType "int8"),("pg_stat_get_bgwriter_buf_written_clean",[],ScalarType "int8"),("pg_stat_get_bgwriter_maxwritten_clean",[],ScalarType "int8"),("pg_stat_get_bgwriter_requested_checkpoints",[],ScalarType "int8"),("pg_stat_get_bgwriter_timed_checkpoints",[],ScalarType "int8"),("pg_stat_get_blocks_fetched",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_blocks_hit",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_buf_alloc",[],ScalarType "int8"),("pg_stat_get_buf_written_backend",[],ScalarType "int8"),("pg_stat_get_db_blocks_fetched",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_db_blocks_hit",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_db_numbackends",[ScalarType "oid"],ScalarType "int4"),("pg_stat_get_db_tuples_deleted",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_db_tuples_fetched",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_db_tuples_inserted",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_db_tuples_returned",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_db_tuples_updated",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_db_xact_commit",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_db_xact_rollback",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_dead_tuples",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_function_calls",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_function_self_time",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_function_time",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_last_analyze_time",[ScalarType "oid"],ScalarType "timestamptz"),("pg_stat_get_last_autoanalyze_time",[ScalarType "oid"],ScalarType "timestamptz"),("pg_stat_get_last_autovacuum_time",[ScalarType "oid"],ScalarType "timestamptz"),("pg_stat_get_last_vacuum_time",[ScalarType "oid"],ScalarType "timestamptz"),("pg_stat_get_live_tuples",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_numscans",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_tuples_deleted",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_tuples_fetched",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_tuples_hot_updated",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_tuples_inserted",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_tuples_returned",[ScalarType "oid"],ScalarType "int8"),("pg_stat_get_tuples_updated",[ScalarType "oid"],ScalarType "int8"),("pg_stat_reset",[],Pseudo Void),("pg_stop_backup",[],ScalarType "text"),("pg_switch_xlog",[],ScalarType "text"),("pg_table_is_visible",[ScalarType "oid"],ScalarType "bool"),("pg_tablespace_databases",[ScalarType "oid"],SetOfType (ScalarType "oid")),("pg_tablespace_size",[ScalarType "name"],ScalarType "int8"),("pg_tablespace_size",[ScalarType "oid"],ScalarType "int8"),("pg_terminate_backend",[ScalarType "int4"],ScalarType "bool"),("pg_timezone_abbrevs",[],SetOfType (Pseudo Record)),("pg_timezone_names",[],SetOfType (Pseudo Record)),("pg_total_relation_size",[ScalarType "regclass"],ScalarType "int8"),("pg_try_advisory_lock",[ScalarType "int8"],ScalarType "bool"),("pg_try_advisory_lock",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("pg_try_advisory_lock_shared",[ScalarType "int8"],ScalarType "bool"),("pg_try_advisory_lock_shared",[ScalarType "int4",ScalarType "int4"],ScalarType "bool"),("pg_ts_config_is_visible",[ScalarType "oid"],ScalarType "bool"),("pg_ts_dict_is_visible",[ScalarType "oid"],ScalarType "bool"),("pg_ts_parser_is_visible",[ScalarType "oid"],ScalarType "bool"),("pg_ts_template_is_visible",[ScalarType "oid"],ScalarType "bool"),("pg_type_is_visible",[ScalarType "oid"],ScalarType "bool"),("pg_typeof",[Pseudo Any],ScalarType "regtype"),("pg_xlogfile_name",[ScalarType "text"],ScalarType "text"),("pg_xlogfile_name_offset",[ScalarType "text"],Pseudo Record),("pi",[],ScalarType "float8"),("plainto_tsquery",[ScalarType "text"],ScalarType "tsquery"),("plainto_tsquery",[ScalarType "regconfig",ScalarType "text"],ScalarType "tsquery"),("point",[ScalarType "lseg"],ScalarType "point"),("point",[ScalarType "path"],ScalarType "point"),("point",[ScalarType "box"],ScalarType "point"),("point",[ScalarType "polygon"],ScalarType "point"),("point",[ScalarType "circle"],ScalarType "point"),("point",[ScalarType "float8",ScalarType "float8"],ScalarType "point"),("point_above",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("point_add",[ScalarType "point",ScalarType "point"],ScalarType "point"),("point_below",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("point_distance",[ScalarType "point",ScalarType "point"],ScalarType "float8"),("point_div",[ScalarType "point",ScalarType "point"],ScalarType "point"),("point_eq",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("point_horiz",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("point_in",[Pseudo Cstring],ScalarType "point"),("point_left",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("point_mul",[ScalarType "point",ScalarType "point"],ScalarType "point"),("point_ne",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("point_out",[ScalarType "point"],Pseudo Cstring),("point_recv",[Pseudo Internal],ScalarType "point"),("point_right",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("point_send",[ScalarType "point"],ScalarType "bytea"),("point_sub",[ScalarType "point",ScalarType "point"],ScalarType "point"),("point_vert",[ScalarType "point",ScalarType "point"],ScalarType "bool"),("poly_above",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_below",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_center",[ScalarType "polygon"],ScalarType "point"),("poly_contain",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_contain_pt",[ScalarType "polygon",ScalarType "point"],ScalarType "bool"),("poly_contained",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_distance",[ScalarType "polygon",ScalarType "polygon"],ScalarType "float8"),("poly_in",[Pseudo Cstring],ScalarType "polygon"),("poly_left",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_npoints",[ScalarType "polygon"],ScalarType "int4"),("poly_out",[ScalarType "polygon"],Pseudo Cstring),("poly_overabove",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_overbelow",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_overlap",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_overleft",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_overright",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_recv",[Pseudo Internal],ScalarType "polygon"),("poly_right",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_same",[ScalarType "polygon",ScalarType "polygon"],ScalarType "bool"),("poly_send",[ScalarType "polygon"],ScalarType "bytea"),("polygon",[ScalarType "path"],ScalarType "polygon"),("polygon",[ScalarType "box"],ScalarType "polygon"),("polygon",[ScalarType "circle"],ScalarType "polygon"),("polygon",[ScalarType "int4",ScalarType "circle"],ScalarType "polygon"),("popen",[ScalarType "path"],ScalarType "path"),("position",[ScalarType "bytea",ScalarType "bytea"],ScalarType "int4"),("position",[ScalarType "text",ScalarType "text"],ScalarType "int4"),("position",[ScalarType "bit",ScalarType "bit"],ScalarType "int4"),("positionjoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("positionsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("postgresql_fdw_validator",[ArrayType (ScalarType "text"),ScalarType "oid"],ScalarType "bool"),("pow",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("pow",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("power",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("power",[ScalarType "numeric",ScalarType "numeric"],ScalarType "numeric"),("prsd_end",[Pseudo Internal],Pseudo Void),("prsd_headline",[Pseudo Internal,Pseudo Internal,ScalarType "tsquery"],Pseudo Internal),("prsd_lextype",[Pseudo Internal],Pseudo Internal),("prsd_nexttoken",[Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("prsd_start",[Pseudo Internal,ScalarType "int4"],Pseudo Internal),("pt_contained_circle",[ScalarType "point",ScalarType "circle"],ScalarType "bool"),("pt_contained_poly",[ScalarType "point",ScalarType "polygon"],ScalarType "bool"),("query_to_xml",[ScalarType "text",ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("query_to_xml_and_xmlschema",[ScalarType "text",ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("query_to_xmlschema",[ScalarType "text",ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("querytree",[ScalarType "tsquery"],ScalarType "text"),("quote_ident",[ScalarType "text"],ScalarType "text"),("quote_literal",[ScalarType "text"],ScalarType "text"),("quote_literal",[Pseudo AnyElement],ScalarType "text"),("quote_nullable",[ScalarType "text"],ScalarType "text"),("quote_nullable",[Pseudo AnyElement],ScalarType "text"),("radians",[ScalarType "float8"],ScalarType "float8"),("radius",[ScalarType "circle"],ScalarType "float8"),("random",[],ScalarType "float8"),("record_eq",[Pseudo Record,Pseudo Record],ScalarType "bool"),("record_ge",[Pseudo Record,Pseudo Record],ScalarType "bool"),("record_gt",[Pseudo Record,Pseudo Record],ScalarType "bool"),("record_in",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],Pseudo Record),("record_le",[Pseudo Record,Pseudo Record],ScalarType "bool"),("record_lt",[Pseudo Record,Pseudo Record],ScalarType "bool"),("record_ne",[Pseudo Record,Pseudo Record],ScalarType "bool"),("record_out",[Pseudo Record],Pseudo Cstring),("record_recv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],Pseudo Record),("record_send",[Pseudo Record],ScalarType "bytea"),("regclass",[ScalarType "text"],ScalarType "regclass"),("regclassin",[Pseudo Cstring],ScalarType "regclass"),("regclassout",[ScalarType "regclass"],Pseudo Cstring),("regclassrecv",[Pseudo Internal],ScalarType "regclass"),("regclasssend",[ScalarType "regclass"],ScalarType "bytea"),("regconfigin",[Pseudo Cstring],ScalarType "regconfig"),("regconfigout",[ScalarType "regconfig"],Pseudo Cstring),("regconfigrecv",[Pseudo Internal],ScalarType "regconfig"),("regconfigsend",[ScalarType "regconfig"],ScalarType "bytea"),("regdictionaryin",[Pseudo Cstring],ScalarType "regdictionary"),("regdictionaryout",[ScalarType "regdictionary"],Pseudo Cstring),("regdictionaryrecv",[Pseudo Internal],ScalarType "regdictionary"),("regdictionarysend",[ScalarType "regdictionary"],ScalarType "bytea"),("regexeqjoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("regexeqsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("regexnejoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("regexnesel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("regexp_matches",[ScalarType "text",ScalarType "text"],SetOfType (ArrayType (ScalarType "text"))),("regexp_matches",[ScalarType "text",ScalarType "text",ScalarType "text"],SetOfType (ArrayType (ScalarType "text"))),("regexp_replace",[ScalarType "text",ScalarType "text",ScalarType "text"],ScalarType "text"),("regexp_replace",[ScalarType "text",ScalarType "text",ScalarType "text",ScalarType "text"],ScalarType "text"),("regexp_split_to_array",[ScalarType "text",ScalarType "text"],ArrayType (ScalarType "text")),("regexp_split_to_array",[ScalarType "text",ScalarType "text",ScalarType "text"],ArrayType (ScalarType "text")),("regexp_split_to_table",[ScalarType "text",ScalarType "text"],SetOfType (ScalarType "text")),("regexp_split_to_table",[ScalarType "text",ScalarType "text",ScalarType "text"],SetOfType (ScalarType "text")),("regoperatorin",[Pseudo Cstring],ScalarType "regoperator"),("regoperatorout",[ScalarType "regoperator"],Pseudo Cstring),("regoperatorrecv",[Pseudo Internal],ScalarType "regoperator"),("regoperatorsend",[ScalarType "regoperator"],ScalarType "bytea"),("regoperin",[Pseudo Cstring],ScalarType "regoper"),("regoperout",[ScalarType "regoper"],Pseudo Cstring),("regoperrecv",[Pseudo Internal],ScalarType "regoper"),("regopersend",[ScalarType "regoper"],ScalarType "bytea"),("regprocedurein",[Pseudo Cstring],ScalarType "regprocedure"),("regprocedureout",[ScalarType "regprocedure"],Pseudo Cstring),("regprocedurerecv",[Pseudo Internal],ScalarType "regprocedure"),("regproceduresend",[ScalarType "regprocedure"],ScalarType "bytea"),("regprocin",[Pseudo Cstring],ScalarType "regproc"),("regprocout",[ScalarType "regproc"],Pseudo Cstring),("regprocrecv",[Pseudo Internal],ScalarType "regproc"),("regprocsend",[ScalarType "regproc"],ScalarType "bytea"),("regtypein",[Pseudo Cstring],ScalarType "regtype"),("regtypeout",[ScalarType "regtype"],Pseudo Cstring),("regtyperecv",[Pseudo Internal],ScalarType "regtype"),("regtypesend",[ScalarType "regtype"],ScalarType "bytea"),("reltime",[ScalarType "interval"],ScalarType "reltime"),("reltimeeq",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),("reltimege",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),("reltimegt",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),("reltimein",[Pseudo Cstring],ScalarType "reltime"),("reltimele",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),("reltimelt",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),("reltimene",[ScalarType "reltime",ScalarType "reltime"],ScalarType "bool"),("reltimeout",[ScalarType "reltime"],Pseudo Cstring),("reltimerecv",[Pseudo Internal],ScalarType "reltime"),("reltimesend",[ScalarType "reltime"],ScalarType "bytea"),("repeat",[ScalarType "text",ScalarType "int4"],ScalarType "text"),("replace",[ScalarType "text",ScalarType "text",ScalarType "text"],ScalarType "text"),("round",[ScalarType "float8"],ScalarType "float8"),("round",[ScalarType "numeric"],ScalarType "numeric"),("round",[ScalarType "numeric",ScalarType "int4"],ScalarType "numeric"),("rpad",[ScalarType "text",ScalarType "int4"],ScalarType "text"),("rpad",[ScalarType "text",ScalarType "int4",ScalarType "text"],ScalarType "text"),("rtrim",[ScalarType "text"],ScalarType "text"),("rtrim",[ScalarType "text",ScalarType "text"],ScalarType "text"),("scalargtjoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("scalargtsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("scalarltjoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("scalarltsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("schema_to_xml",[ScalarType "name",ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("schema_to_xml_and_xmlschema",[ScalarType "name",ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("schema_to_xmlschema",[ScalarType "name",ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("session_user",[],ScalarType "name"),("set_bit",[ScalarType "bytea",ScalarType "int4",ScalarType "int4"],ScalarType "bytea"),("set_byte",[ScalarType "bytea",ScalarType "int4",ScalarType "int4"],ScalarType "bytea"),("set_config",[ScalarType "text",ScalarType "text",ScalarType "bool"],ScalarType "text"),("set_masklen",[ScalarType "cidr",ScalarType "int4"],ScalarType "cidr"),("set_masklen",[ScalarType "inet",ScalarType "int4"],ScalarType "inet"),("setseed",[ScalarType "float8"],Pseudo Void),("setval",[ScalarType "regclass",ScalarType "int8"],ScalarType "int8"),("setval",[ScalarType "regclass",ScalarType "int8",ScalarType "bool"],ScalarType "int8"),("setweight",[ScalarType "tsvector",ScalarType "char"],ScalarType "tsvector"),("shell_in",[Pseudo Cstring],Pseudo Opaque),("shell_out",[Pseudo Opaque],Pseudo Cstring),("shift_jis_2004_to_euc_jis_2004",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("shift_jis_2004_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("shobj_description",[ScalarType "oid",ScalarType "name"],ScalarType "text"),("sign",[ScalarType "float8"],ScalarType "float8"),("sign",[ScalarType "numeric"],ScalarType "numeric"),("similar_escape",[ScalarType "text",ScalarType "text"],ScalarType "text"),("sin",[ScalarType "float8"],ScalarType "float8"),("sjis_to_euc_jp",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("sjis_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("sjis_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("slope",[ScalarType "point",ScalarType "point"],ScalarType "float8"),("smgreq",[ScalarType "smgr",ScalarType "smgr"],ScalarType "bool"),("smgrin",[Pseudo Cstring],ScalarType "smgr"),("smgrne",[ScalarType "smgr",ScalarType "smgr"],ScalarType "bool"),("smgrout",[ScalarType "smgr"],Pseudo Cstring),("split_part",[ScalarType "text",ScalarType "text",ScalarType "int4"],ScalarType "text"),("sqrt",[ScalarType "float8"],ScalarType "float8"),("sqrt",[ScalarType "numeric"],ScalarType "numeric"),("statement_timestamp",[],ScalarType "timestamptz"),("string_to_array",[ScalarType "text",ScalarType "text"],ArrayType (ScalarType "text")),("strip",[ScalarType "tsvector"],ScalarType "tsvector"),("strpos",[ScalarType "text",ScalarType "text"],ScalarType "int4"),("substr",[ScalarType "bytea",ScalarType "int4"],ScalarType "bytea"),("substr",[ScalarType "text",ScalarType "int4"],ScalarType "text"),("substr",[ScalarType "bytea",ScalarType "int4",ScalarType "int4"],ScalarType "bytea"),("substr",[ScalarType "text",ScalarType "int4",ScalarType "int4"],ScalarType "text"),("substring",[ScalarType "bytea",ScalarType "int4"],ScalarType "bytea"),("substring",[ScalarType "text",ScalarType "int4"],ScalarType "text"),("substring",[ScalarType "text",ScalarType "text"],ScalarType "text"),("substring",[ScalarType "bit",ScalarType "int4"],ScalarType "bit"),("substring",[ScalarType "bytea",ScalarType "int4",ScalarType "int4"],ScalarType "bytea"),("substring",[ScalarType "text",ScalarType "int4",ScalarType "int4"],ScalarType "text"),("substring",[ScalarType "text",ScalarType "text",ScalarType "text"],ScalarType "text"),("substring",[ScalarType "bit",ScalarType "int4",ScalarType "int4"],ScalarType "bit"),("suppress_redundant_updates_trigger",[],Pseudo Trigger),("table_to_xml",[ScalarType "regclass",ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("table_to_xml_and_xmlschema",[ScalarType "regclass",ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("table_to_xmlschema",[ScalarType "regclass",ScalarType "bool",ScalarType "bool",ScalarType "text"],ScalarType "xml"),("tan",[ScalarType "float8"],ScalarType "float8"),("text",[ScalarType "bool"],ScalarType "text"),("text",[ScalarType "char"],ScalarType "text"),("text",[ScalarType "name"],ScalarType "text"),("text",[ScalarType "xml"],ScalarType "text"),("text",[ScalarType "inet"],ScalarType "text"),("text",[ScalarType "bpchar"],ScalarType "text"),("text_ge",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("text_gt",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("text_larger",[ScalarType "text",ScalarType "text"],ScalarType "text"),("text_le",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("text_lt",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("text_pattern_ge",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("text_pattern_gt",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("text_pattern_le",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("text_pattern_lt",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("text_smaller",[ScalarType "text",ScalarType "text"],ScalarType "text"),("textanycat",[ScalarType "text",Pseudo AnyNonArray],ScalarType "text"),("textcat",[ScalarType "text",ScalarType "text"],ScalarType "text"),("texteq",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("texticlike",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("texticnlike",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("texticregexeq",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("texticregexne",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("textin",[Pseudo Cstring],ScalarType "text"),("textlen",[ScalarType "text"],ScalarType "int4"),("textlike",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("textne",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("textnlike",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("textout",[ScalarType "text"],Pseudo Cstring),("textrecv",[Pseudo Internal],ScalarType "text"),("textregexeq",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("textregexne",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("textsend",[ScalarType "text"],ScalarType "bytea"),("thesaurus_init",[Pseudo Internal],Pseudo Internal),("thesaurus_lexize",[Pseudo Internal,Pseudo Internal,Pseudo Internal,Pseudo Internal],Pseudo Internal),("tideq",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),("tidge",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),("tidgt",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),("tidin",[Pseudo Cstring],ScalarType "tid"),("tidlarger",[ScalarType "tid",ScalarType "tid"],ScalarType "tid"),("tidle",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),("tidlt",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),("tidne",[ScalarType "tid",ScalarType "tid"],ScalarType "bool"),("tidout",[ScalarType "tid"],Pseudo Cstring),("tidrecv",[Pseudo Internal],ScalarType "tid"),("tidsend",[ScalarType "tid"],ScalarType "bytea"),("tidsmaller",[ScalarType "tid",ScalarType "tid"],ScalarType "tid"),("time",[ScalarType "abstime"],ScalarType "time"),("time",[ScalarType "timestamp"],ScalarType "time"),("time",[ScalarType "timestamptz"],ScalarType "time"),("time",[ScalarType "interval"],ScalarType "time"),("time",[ScalarType "timetz"],ScalarType "time"),("time",[ScalarType "time",ScalarType "int4"],ScalarType "time"),("time_cmp",[ScalarType "time",ScalarType "time"],ScalarType "int4"),("time_eq",[ScalarType "time",ScalarType "time"],ScalarType "bool"),("time_ge",[ScalarType "time",ScalarType "time"],ScalarType "bool"),("time_gt",[ScalarType "time",ScalarType "time"],ScalarType "bool"),("time_hash",[ScalarType "time"],ScalarType "int4"),("time_in",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],ScalarType "time"),("time_larger",[ScalarType "time",ScalarType "time"],ScalarType "time"),("time_le",[ScalarType "time",ScalarType "time"],ScalarType "bool"),("time_lt",[ScalarType "time",ScalarType "time"],ScalarType "bool"),("time_mi_interval",[ScalarType "time",ScalarType "interval"],ScalarType "time"),("time_mi_time",[ScalarType "time",ScalarType "time"],ScalarType "interval"),("time_ne",[ScalarType "time",ScalarType "time"],ScalarType "bool"),("time_out",[ScalarType "time"],Pseudo Cstring),("time_pl_interval",[ScalarType "time",ScalarType "interval"],ScalarType "time"),("time_recv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],ScalarType "time"),("time_send",[ScalarType "time"],ScalarType "bytea"),("time_smaller",[ScalarType "time",ScalarType "time"],ScalarType "time"),("timedate_pl",[ScalarType "time",ScalarType "date"],ScalarType "timestamp"),("timemi",[ScalarType "abstime",ScalarType "reltime"],ScalarType "abstime"),("timenow",[],ScalarType "abstime"),("timeofday",[],ScalarType "text"),("timepl",[ScalarType "abstime",ScalarType "reltime"],ScalarType "abstime"),("timestamp",[ScalarType "abstime"],ScalarType "timestamp"),("timestamp",[ScalarType "date"],ScalarType "timestamp"),("timestamp",[ScalarType "timestamptz"],ScalarType "timestamp"),("timestamp",[ScalarType "date",ScalarType "time"],ScalarType "timestamp"),("timestamp",[ScalarType "timestamp",ScalarType "int4"],ScalarType "timestamp"),("timestamp_cmp",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "int4"),("timestamp_cmp_date",[ScalarType "timestamp",ScalarType "date"],ScalarType "int4"),("timestamp_cmp_timestamptz",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "int4"),("timestamp_eq",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("timestamp_eq_date",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),("timestamp_eq_timestamptz",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),("timestamp_ge",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("timestamp_ge_date",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),("timestamp_ge_timestamptz",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),("timestamp_gt",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("timestamp_gt_date",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),("timestamp_gt_timestamptz",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),("timestamp_hash",[ScalarType "timestamp"],ScalarType "int4"),("timestamp_in",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],ScalarType "timestamp"),("timestamp_larger",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "timestamp"),("timestamp_le",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("timestamp_le_date",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),("timestamp_le_timestamptz",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),("timestamp_lt",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("timestamp_lt_date",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),("timestamp_lt_timestamptz",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),("timestamp_mi",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "interval"),("timestamp_mi_interval",[ScalarType "timestamp",ScalarType "interval"],ScalarType "timestamp"),("timestamp_ne",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "bool"),("timestamp_ne_date",[ScalarType "timestamp",ScalarType "date"],ScalarType "bool"),("timestamp_ne_timestamptz",[ScalarType "timestamp",ScalarType "timestamptz"],ScalarType "bool"),("timestamp_out",[ScalarType "timestamp"],Pseudo Cstring),("timestamp_pl_interval",[ScalarType "timestamp",ScalarType "interval"],ScalarType "timestamp"),("timestamp_recv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],ScalarType "timestamp"),("timestamp_send",[ScalarType "timestamp"],ScalarType "bytea"),("timestamp_smaller",[ScalarType "timestamp",ScalarType "timestamp"],ScalarType "timestamp"),("timestamptypmodin",[ArrayType (Pseudo Cstring)],ScalarType "int4"),("timestamptypmodout",[ScalarType "int4"],Pseudo Cstring),("timestamptz",[ScalarType "abstime"],ScalarType "timestamptz"),("timestamptz",[ScalarType "date"],ScalarType "timestamptz"),("timestamptz",[ScalarType "timestamp"],ScalarType "timestamptz"),("timestamptz",[ScalarType "date",ScalarType "time"],ScalarType "timestamptz"),("timestamptz",[ScalarType "date",ScalarType "timetz"],ScalarType "timestamptz"),("timestamptz",[ScalarType "timestamptz",ScalarType "int4"],ScalarType "timestamptz"),("timestamptz_cmp",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "int4"),("timestamptz_cmp_date",[ScalarType "timestamptz",ScalarType "date"],ScalarType "int4"),("timestamptz_cmp_timestamp",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "int4"),("timestamptz_eq",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("timestamptz_eq_date",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),("timestamptz_eq_timestamp",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),("timestamptz_ge",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("timestamptz_ge_date",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),("timestamptz_ge_timestamp",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),("timestamptz_gt",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("timestamptz_gt_date",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),("timestamptz_gt_timestamp",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),("timestamptz_in",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],ScalarType "timestamptz"),("timestamptz_larger",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "timestamptz"),("timestamptz_le",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("timestamptz_le_date",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),("timestamptz_le_timestamp",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),("timestamptz_lt",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("timestamptz_lt_date",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),("timestamptz_lt_timestamp",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),("timestamptz_mi",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "interval"),("timestamptz_mi_interval",[ScalarType "timestamptz",ScalarType "interval"],ScalarType "timestamptz"),("timestamptz_ne",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "bool"),("timestamptz_ne_date",[ScalarType "timestamptz",ScalarType "date"],ScalarType "bool"),("timestamptz_ne_timestamp",[ScalarType "timestamptz",ScalarType "timestamp"],ScalarType "bool"),("timestamptz_out",[ScalarType "timestamptz"],Pseudo Cstring),("timestamptz_pl_interval",[ScalarType "timestamptz",ScalarType "interval"],ScalarType "timestamptz"),("timestamptz_recv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],ScalarType "timestamptz"),("timestamptz_send",[ScalarType "timestamptz"],ScalarType "bytea"),("timestamptz_smaller",[ScalarType "timestamptz",ScalarType "timestamptz"],ScalarType "timestamptz"),("timestamptztypmodin",[ArrayType (Pseudo Cstring)],ScalarType "int4"),("timestamptztypmodout",[ScalarType "int4"],Pseudo Cstring),("timetypmodin",[ArrayType (Pseudo Cstring)],ScalarType "int4"),("timetypmodout",[ScalarType "int4"],Pseudo Cstring),("timetz",[ScalarType "time"],ScalarType "timetz"),("timetz",[ScalarType "timestamptz"],ScalarType "timetz"),("timetz",[ScalarType "timetz",ScalarType "int4"],ScalarType "timetz"),("timetz_cmp",[ScalarType "timetz",ScalarType "timetz"],ScalarType "int4"),("timetz_eq",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),("timetz_ge",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),("timetz_gt",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),("timetz_hash",[ScalarType "timetz"],ScalarType "int4"),("timetz_in",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],ScalarType "timetz"),("timetz_larger",[ScalarType "timetz",ScalarType "timetz"],ScalarType "timetz"),("timetz_le",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),("timetz_lt",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),("timetz_mi_interval",[ScalarType "timetz",ScalarType "interval"],ScalarType "timetz"),("timetz_ne",[ScalarType "timetz",ScalarType "timetz"],ScalarType "bool"),("timetz_out",[ScalarType "timetz"],Pseudo Cstring),("timetz_pl_interval",[ScalarType "timetz",ScalarType "interval"],ScalarType "timetz"),("timetz_recv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],ScalarType "timetz"),("timetz_send",[ScalarType "timetz"],ScalarType "bytea"),("timetz_smaller",[ScalarType "timetz",ScalarType "timetz"],ScalarType "timetz"),("timetzdate_pl",[ScalarType "timetz",ScalarType "date"],ScalarType "timestamptz"),("timetztypmodin",[ArrayType (Pseudo Cstring)],ScalarType "int4"),("timetztypmodout",[ScalarType "int4"],Pseudo Cstring),("timezone",[ScalarType "text",ScalarType "timestamp"],ScalarType "timestamptz"),("timezone",[ScalarType "text",ScalarType "timestamptz"],ScalarType "timestamp"),("timezone",[ScalarType "text",ScalarType "timetz"],ScalarType "timetz"),("timezone",[ScalarType "interval",ScalarType "timestamp"],ScalarType "timestamptz"),("timezone",[ScalarType "interval",ScalarType "timestamptz"],ScalarType "timestamp"),("timezone",[ScalarType "interval",ScalarType "timetz"],ScalarType "timetz"),("tinterval",[ScalarType "abstime",ScalarType "abstime"],ScalarType "tinterval"),("tintervalct",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("tintervalend",[ScalarType "tinterval"],ScalarType "abstime"),("tintervaleq",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("tintervalge",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("tintervalgt",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("tintervalin",[Pseudo Cstring],ScalarType "tinterval"),("tintervalle",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("tintervalleneq",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("tintervallenge",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("tintervallengt",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("tintervallenle",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("tintervallenlt",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("tintervallenne",[ScalarType "tinterval",ScalarType "reltime"],ScalarType "bool"),("tintervallt",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("tintervalne",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("tintervalout",[ScalarType "tinterval"],Pseudo Cstring),("tintervalov",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("tintervalrecv",[Pseudo Internal],ScalarType "tinterval"),("tintervalrel",[ScalarType "tinterval"],ScalarType "reltime"),("tintervalsame",[ScalarType "tinterval",ScalarType "tinterval"],ScalarType "bool"),("tintervalsend",[ScalarType "tinterval"],ScalarType "bytea"),("tintervalstart",[ScalarType "tinterval"],ScalarType "abstime"),("to_ascii",[ScalarType "text"],ScalarType "text"),("to_ascii",[ScalarType "text",ScalarType "name"],ScalarType "text"),("to_ascii",[ScalarType "text",ScalarType "int4"],ScalarType "text"),("to_char",[ScalarType "int8",ScalarType "text"],ScalarType "text"),("to_char",[ScalarType "int4",ScalarType "text"],ScalarType "text"),("to_char",[ScalarType "float4",ScalarType "text"],ScalarType "text"),("to_char",[ScalarType "float8",ScalarType "text"],ScalarType "text"),("to_char",[ScalarType "timestamp",ScalarType "text"],ScalarType "text"),("to_char",[ScalarType "timestamptz",ScalarType "text"],ScalarType "text"),("to_char",[ScalarType "interval",ScalarType "text"],ScalarType "text"),("to_char",[ScalarType "numeric",ScalarType "text"],ScalarType "text"),("to_date",[ScalarType "text",ScalarType "text"],ScalarType "date"),("to_hex",[ScalarType "int8"],ScalarType "text"),("to_hex",[ScalarType "int4"],ScalarType "text"),("to_number",[ScalarType "text",ScalarType "text"],ScalarType "numeric"),("to_timestamp",[ScalarType "float8"],ScalarType "timestamptz"),("to_timestamp",[ScalarType "text",ScalarType "text"],ScalarType "timestamptz"),("to_tsquery",[ScalarType "text"],ScalarType "tsquery"),("to_tsquery",[ScalarType "regconfig",ScalarType "text"],ScalarType "tsquery"),("to_tsvector",[ScalarType "text"],ScalarType "tsvector"),("to_tsvector",[ScalarType "regconfig",ScalarType "text"],ScalarType "tsvector"),("transaction_timestamp",[],ScalarType "timestamptz"),("translate",[ScalarType "text",ScalarType "text",ScalarType "text"],ScalarType "text"),("trigger_in",[Pseudo Cstring],Pseudo Trigger),("trigger_out",[Pseudo Trigger],Pseudo Cstring),("trunc",[ScalarType "float8"],ScalarType "float8"),("trunc",[ScalarType "macaddr"],ScalarType "macaddr"),("trunc",[ScalarType "numeric"],ScalarType "numeric"),("trunc",[ScalarType "numeric",ScalarType "int4"],ScalarType "numeric"),("ts_debug",[ScalarType "text"],SetOfType (Pseudo Record)),("ts_debug",[ScalarType "regconfig",ScalarType "text"],SetOfType (Pseudo Record)),("ts_headline",[ScalarType "text",ScalarType "tsquery"],ScalarType "text"),("ts_headline",[ScalarType "text",ScalarType "tsquery",ScalarType "text"],ScalarType "text"),("ts_headline",[ScalarType "regconfig",ScalarType "text",ScalarType "tsquery"],ScalarType "text"),("ts_headline",[ScalarType "regconfig",ScalarType "text",ScalarType "tsquery",ScalarType "text"],ScalarType "text"),("ts_lexize",[ScalarType "regdictionary",ScalarType "text"],ArrayType (ScalarType "text")),("ts_match_qv",[ScalarType "tsquery",ScalarType "tsvector"],ScalarType "bool"),("ts_match_tq",[ScalarType "text",ScalarType "tsquery"],ScalarType "bool"),("ts_match_tt",[ScalarType "text",ScalarType "text"],ScalarType "bool"),("ts_match_vq",[ScalarType "tsvector",ScalarType "tsquery"],ScalarType "bool"),("ts_parse",[ScalarType "text",ScalarType "text"],SetOfType (Pseudo Record)),("ts_parse",[ScalarType "oid",ScalarType "text"],SetOfType (Pseudo Record)),("ts_rank",[ScalarType "tsvector",ScalarType "tsquery"],ScalarType "float4"),("ts_rank",[ArrayType (ScalarType "float4"),ScalarType "tsvector",ScalarType "tsquery"],ScalarType "float4"),("ts_rank",[ScalarType "tsvector",ScalarType "tsquery",ScalarType "int4"],ScalarType "float4"),("ts_rank",[ArrayType (ScalarType "float4"),ScalarType "tsvector",ScalarType "tsquery",ScalarType "int4"],ScalarType "float4"),("ts_rank_cd",[ScalarType "tsvector",ScalarType "tsquery"],ScalarType "float4"),("ts_rank_cd",[ArrayType (ScalarType "float4"),ScalarType "tsvector",ScalarType "tsquery"],ScalarType "float4"),("ts_rank_cd",[ScalarType "tsvector",ScalarType "tsquery",ScalarType "int4"],ScalarType "float4"),("ts_rank_cd",[ArrayType (ScalarType "float4"),ScalarType "tsvector",ScalarType "tsquery",ScalarType "int4"],ScalarType "float4"),("ts_rewrite",[ScalarType "tsquery",ScalarType "text"],ScalarType "tsquery"),("ts_rewrite",[ScalarType "tsquery",ScalarType "tsquery",ScalarType "tsquery"],ScalarType "tsquery"),("ts_stat",[ScalarType "text"],SetOfType (Pseudo Record)),("ts_stat",[ScalarType "text",ScalarType "text"],SetOfType (Pseudo Record)),("ts_token_type",[ScalarType "text"],SetOfType (Pseudo Record)),("ts_token_type",[ScalarType "oid"],SetOfType (Pseudo Record)),("ts_typanalyze",[Pseudo Internal],ScalarType "bool"),("tsmatchjoinsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int2",Pseudo Internal],ScalarType "float8"),("tsmatchsel",[Pseudo Internal,ScalarType "oid",Pseudo Internal,ScalarType "int4"],ScalarType "float8"),("tsq_mcontained",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("tsq_mcontains",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("tsquery_and",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "tsquery"),("tsquery_cmp",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "int4"),("tsquery_eq",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("tsquery_ge",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("tsquery_gt",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("tsquery_le",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("tsquery_lt",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("tsquery_ne",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "bool"),("tsquery_not",[ScalarType "tsquery"],ScalarType "tsquery"),("tsquery_or",[ScalarType "tsquery",ScalarType "tsquery"],ScalarType "tsquery"),("tsqueryin",[Pseudo Cstring],ScalarType "tsquery"),("tsqueryout",[ScalarType "tsquery"],Pseudo Cstring),("tsqueryrecv",[Pseudo Internal],ScalarType "tsquery"),("tsquerysend",[ScalarType "tsquery"],ScalarType "bytea"),("tsvector_cmp",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "int4"),("tsvector_concat",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "tsvector"),("tsvector_eq",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),("tsvector_ge",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),("tsvector_gt",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),("tsvector_le",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),("tsvector_lt",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),("tsvector_ne",[ScalarType "tsvector",ScalarType "tsvector"],ScalarType "bool"),("tsvector_update_trigger",[],Pseudo Trigger),("tsvector_update_trigger_column",[],Pseudo Trigger),("tsvectorin",[Pseudo Cstring],ScalarType "tsvector"),("tsvectorout",[ScalarType "tsvector"],Pseudo Cstring),("tsvectorrecv",[Pseudo Internal],ScalarType "tsvector"),("tsvectorsend",[ScalarType "tsvector"],ScalarType "bytea"),("txid_current",[],ScalarType "int8"),("txid_current_snapshot",[],ScalarType "txid_snapshot"),("txid_snapshot_in",[Pseudo Cstring],ScalarType "txid_snapshot"),("txid_snapshot_out",[ScalarType "txid_snapshot"],Pseudo Cstring),("txid_snapshot_recv",[Pseudo Internal],ScalarType "txid_snapshot"),("txid_snapshot_send",[ScalarType "txid_snapshot"],ScalarType "bytea"),("txid_snapshot_xip",[ScalarType "txid_snapshot"],SetOfType (ScalarType "int8")),("txid_snapshot_xmax",[ScalarType "txid_snapshot"],ScalarType "int8"),("txid_snapshot_xmin",[ScalarType "txid_snapshot"],ScalarType "int8"),("txid_visible_in_snapshot",[ScalarType "int8",ScalarType "txid_snapshot"],ScalarType "bool"),("uhc_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("unknownin",[Pseudo Cstring],ScalarType "unknown"),("unknownout",[ScalarType "unknown"],Pseudo Cstring),("unknownrecv",[Pseudo Internal],ScalarType "unknown"),("unknownsend",[ScalarType "unknown"],ScalarType "bytea"),("unnest",[Pseudo AnyArray],SetOfType (Pseudo AnyElement)),("upper",[ScalarType "text"],ScalarType "text"),("utf8_to_ascii",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_big5",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_euc_cn",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_euc_jis_2004",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_euc_jp",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_euc_kr",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_euc_tw",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_gb18030",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_gbk",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_iso8859",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_iso8859_1",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_johab",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_koi8r",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_koi8u",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_shift_jis_2004",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_sjis",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_uhc",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("utf8_to_win",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("uuid_cmp",[ScalarType "uuid",ScalarType "uuid"],ScalarType "int4"),("uuid_eq",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),("uuid_ge",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),("uuid_gt",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),("uuid_hash",[ScalarType "uuid"],ScalarType "int4"),("uuid_in",[Pseudo Cstring],ScalarType "uuid"),("uuid_le",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),("uuid_lt",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),("uuid_ne",[ScalarType "uuid",ScalarType "uuid"],ScalarType "bool"),("uuid_out",[ScalarType "uuid"],Pseudo Cstring),("uuid_recv",[Pseudo Internal],ScalarType "uuid"),("uuid_send",[ScalarType "uuid"],ScalarType "bytea"),("varbit",[ScalarType "varbit",ScalarType "int4",ScalarType "bool"],ScalarType "varbit"),("varbit_in",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],ScalarType "varbit"),("varbit_out",[ScalarType "varbit"],Pseudo Cstring),("varbit_recv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],ScalarType "varbit"),("varbit_send",[ScalarType "varbit"],ScalarType "bytea"),("varbitcmp",[ScalarType "varbit",ScalarType "varbit"],ScalarType "int4"),("varbiteq",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),("varbitge",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),("varbitgt",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),("varbitle",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),("varbitlt",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),("varbitne",[ScalarType "varbit",ScalarType "varbit"],ScalarType "bool"),("varbittypmodin",[ArrayType (Pseudo Cstring)],ScalarType "int4"),("varbittypmodout",[ScalarType "int4"],Pseudo Cstring),("varchar",[ScalarType "name"],ScalarType "varchar"),("varchar",[ScalarType "varchar",ScalarType "int4",ScalarType "bool"],ScalarType "varchar"),("varcharin",[Pseudo Cstring,ScalarType "oid",ScalarType "int4"],ScalarType "varchar"),("varcharout",[ScalarType "varchar"],Pseudo Cstring),("varcharrecv",[Pseudo Internal,ScalarType "oid",ScalarType "int4"],ScalarType "varchar"),("varcharsend",[ScalarType "varchar"],ScalarType "bytea"),("varchartypmodin",[ArrayType (Pseudo Cstring)],ScalarType "int4"),("varchartypmodout",[ScalarType "int4"],Pseudo Cstring),("version",[],ScalarType "text"),("void_in",[Pseudo Cstring],Pseudo Void),("void_out",[Pseudo Void],Pseudo Cstring),("width",[ScalarType "box"],ScalarType "float8"),("width_bucket",[ScalarType "float8",ScalarType "float8",ScalarType "float8",ScalarType "int4"],ScalarType "int4"),("width_bucket",[ScalarType "numeric",ScalarType "numeric",ScalarType "numeric",ScalarType "int4"],ScalarType "int4"),("win1250_to_latin2",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("win1250_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("win1251_to_iso",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("win1251_to_koi8r",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("win1251_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("win1251_to_win866",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("win866_to_iso",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("win866_to_koi8r",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("win866_to_mic",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("win866_to_win1251",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("win_to_utf8",[ScalarType "int4",ScalarType "int4",Pseudo Cstring,Pseudo Internal,ScalarType "int4"],Pseudo Void),("xideq",[ScalarType "xid",ScalarType "xid"],ScalarType "bool"),("xideqint4",[ScalarType "xid",ScalarType "int4"],ScalarType "bool"),("xidin",[Pseudo Cstring],ScalarType "xid"),("xidout",[ScalarType "xid"],Pseudo Cstring),("xidrecv",[Pseudo Internal],ScalarType "xid"),("xidsend",[ScalarType "xid"],ScalarType "bytea"),("xml",[ScalarType "text"],ScalarType "xml"),("xml_in",[Pseudo Cstring],ScalarType "xml"),("xml_out",[ScalarType "xml"],Pseudo Cstring),("xml_recv",[Pseudo Internal],ScalarType "xml"),("xml_send",[ScalarType "xml"],ScalarType "bytea"),("xmlcomment",[ScalarType "text"],ScalarType "xml"),("xmlconcat2",[ScalarType "xml",ScalarType "xml"],ScalarType "xml"),("xmlvalidate",[ScalarType "xml",ScalarType "text"],ScalarType "bool"),("xpath",[ScalarType "text",ScalarType "xml"],ArrayType (ScalarType "xml")),("xpath",[ScalarType "text",ScalarType "xml",ArrayType (ScalarType "text")],ArrayType (ScalarType "xml")),("array_agg",[Pseudo AnyElement],Pseudo AnyArray),("avg",[ScalarType "int8"],ScalarType "numeric"),("avg",[ScalarType "int2"],ScalarType "numeric"),("avg",[ScalarType "int4"],ScalarType "numeric"),("avg",[ScalarType "float4"],ScalarType "float8"),("avg",[ScalarType "float8"],ScalarType "float8"),("avg",[ScalarType "interval"],ScalarType "interval"),("avg",[ScalarType "numeric"],ScalarType "numeric"),("bit_and",[ScalarType "int8"],ScalarType "int8"),("bit_and",[ScalarType "int2"],ScalarType "int2"),("bit_and",[ScalarType "int4"],ScalarType "int4"),("bit_and",[ScalarType "bit"],ScalarType "bit"),("bit_or",[ScalarType "int8"],ScalarType "int8"),("bit_or",[ScalarType "int2"],ScalarType "int2"),("bit_or",[ScalarType "int4"],ScalarType "int4"),("bit_or",[ScalarType "bit"],ScalarType "bit"),("bool_and",[ScalarType "bool"],ScalarType "bool"),("bool_or",[ScalarType "bool"],ScalarType "bool"),("corr",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("count",[],ScalarType "int8"),("count",[Pseudo Any],ScalarType "int8"),("covar_pop",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("covar_samp",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("every",[ScalarType "bool"],ScalarType "bool"),("max",[ScalarType "int8"],ScalarType "int8"),("max",[ScalarType "int2"],ScalarType "int2"),("max",[ScalarType "int4"],ScalarType "int4"),("max",[ScalarType "text"],ScalarType "text"),("max",[ScalarType "oid"],ScalarType "oid"),("max",[ScalarType "tid"],ScalarType "tid"),("max",[ScalarType "float4"],ScalarType "float4"),("max",[ScalarType "float8"],ScalarType "float8"),("max",[ScalarType "abstime"],ScalarType "abstime"),("max",[ScalarType "money"],ScalarType "money"),("max",[ScalarType "bpchar"],ScalarType "bpchar"),("max",[ScalarType "date"],ScalarType "date"),("max",[ScalarType "time"],ScalarType "time"),("max",[ScalarType "timestamp"],ScalarType "timestamp"),("max",[ScalarType "timestamptz"],ScalarType "timestamptz"),("max",[ScalarType "interval"],ScalarType "interval"),("max",[ScalarType "timetz"],ScalarType "timetz"),("max",[ScalarType "numeric"],ScalarType "numeric"),("max",[Pseudo AnyArray],Pseudo AnyArray),("max",[Pseudo AnyEnum],Pseudo AnyEnum),("min",[ScalarType "int8"],ScalarType "int8"),("min",[ScalarType "int2"],ScalarType "int2"),("min",[ScalarType "int4"],ScalarType "int4"),("min",[ScalarType "text"],ScalarType "text"),("min",[ScalarType "oid"],ScalarType "oid"),("min",[ScalarType "tid"],ScalarType "tid"),("min",[ScalarType "float4"],ScalarType "float4"),("min",[ScalarType "float8"],ScalarType "float8"),("min",[ScalarType "abstime"],ScalarType "abstime"),("min",[ScalarType "money"],ScalarType "money"),("min",[ScalarType "bpchar"],ScalarType "bpchar"),("min",[ScalarType "date"],ScalarType "date"),("min",[ScalarType "time"],ScalarType "time"),("min",[ScalarType "timestamp"],ScalarType "timestamp"),("min",[ScalarType "timestamptz"],ScalarType "timestamptz"),("min",[ScalarType "interval"],ScalarType "interval"),("min",[ScalarType "timetz"],ScalarType "timetz"),("min",[ScalarType "numeric"],ScalarType "numeric"),("min",[Pseudo AnyArray],Pseudo AnyArray),("min",[Pseudo AnyEnum],Pseudo AnyEnum),("regr_avgx",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("regr_avgy",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("regr_count",[ScalarType "float8",ScalarType "float8"],ScalarType "int8"),("regr_intercept",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("regr_r2",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("regr_slope",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("regr_sxx",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("regr_sxy",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("regr_syy",[ScalarType "float8",ScalarType "float8"],ScalarType "float8"),("stddev",[ScalarType "int8"],ScalarType "numeric"),("stddev",[ScalarType "int2"],ScalarType "numeric"),("stddev",[ScalarType "int4"],ScalarType "numeric"),("stddev",[ScalarType "float4"],ScalarType "float8"),("stddev",[ScalarType "float8"],ScalarType "float8"),("stddev",[ScalarType "numeric"],ScalarType "numeric"),("stddev_pop",[ScalarType "int8"],ScalarType "numeric"),("stddev_pop",[ScalarType "int2"],ScalarType "numeric"),("stddev_pop",[ScalarType "int4"],ScalarType "numeric"),("stddev_pop",[ScalarType "float4"],ScalarType "float8"),("stddev_pop",[ScalarType "float8"],ScalarType "float8"),("stddev_pop",[ScalarType "numeric"],ScalarType "numeric"),("stddev_samp",[ScalarType "int8"],ScalarType "numeric"),("stddev_samp",[ScalarType "int2"],ScalarType "numeric"),("stddev_samp",[ScalarType "int4"],ScalarType "numeric"),("stddev_samp",[ScalarType "float4"],ScalarType "float8"),("stddev_samp",[ScalarType "float8"],ScalarType "float8"),("stddev_samp",[ScalarType "numeric"],ScalarType "numeric"),("sum",[ScalarType "int8"],ScalarType "numeric"),("sum",[ScalarType "int2"],ScalarType "int8"),("sum",[ScalarType "int4"],ScalarType "int8"),("sum",[ScalarType "float4"],ScalarType "float4"),("sum",[ScalarType "float8"],ScalarType "float8"),("sum",[ScalarType "money"],ScalarType "money"),("sum",[ScalarType "interval"],ScalarType "interval"),("sum",[ScalarType "numeric"],ScalarType "numeric"),("var_pop",[ScalarType "int8"],ScalarType "numeric"),("var_pop",[ScalarType "int2"],ScalarType "numeric"),("var_pop",[ScalarType "int4"],ScalarType "numeric"),("var_pop",[ScalarType "float4"],ScalarType "float8"),("var_pop",[ScalarType "float8"],ScalarType "float8"),("var_pop",[ScalarType "numeric"],ScalarType "numeric"),("var_samp",[ScalarType "int8"],ScalarType "numeric"),("var_samp",[ScalarType "int2"],ScalarType "numeric"),("var_samp",[ScalarType "int4"],ScalarType "numeric"),("var_samp",[ScalarType "float4"],ScalarType "float8"),("var_samp",[ScalarType "float8"],ScalarType "float8"),("var_samp",[ScalarType "numeric"],ScalarType "numeric"),("variance",[ScalarType "int8"],ScalarType "numeric"),("variance",[ScalarType "int2"],ScalarType "numeric"),("variance",[ScalarType "int4"],ScalarType "numeric"),("variance",[ScalarType "float4"],ScalarType "float8"),("variance",[ScalarType "float8"],ScalarType "float8"),("variance",[ScalarType "numeric"],ScalarType "numeric"),("xmlagg",[ScalarType "xml"],ScalarType "xml")], scopeAttrDefs = [("pg_aggregate",TableComposite,UnnamedCompositeType [("aggfnoid",ScalarType "regproc"),("aggtransfn",ScalarType "regproc"),("aggfinalfn",ScalarType "regproc"),("aggsortop",ScalarType "oid"),("aggtranstype",ScalarType "oid"),("agginitval",ScalarType "text")]),("pg_am",TableComposite,UnnamedCompositeType [("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")]),("pg_amop",TableComposite,UnnamedCompositeType [("amopfamily",ScalarType "oid"),("amoplefttype",ScalarType "oid"),("amoprighttype",ScalarType "oid"),("amopstrategy",ScalarType "int2"),("amopopr",ScalarType "oid"),("amopmethod",ScalarType "oid")]),("pg_amproc",TableComposite,UnnamedCompositeType [("amprocfamily",ScalarType "oid"),("amproclefttype",ScalarType "oid"),("amprocrighttype",ScalarType "oid"),("amprocnum",ScalarType "int2"),("amproc",ScalarType "regproc")]),("pg_attrdef",TableComposite,UnnamedCompositeType [("adrelid",ScalarType "oid"),("adnum",ScalarType "int2"),("adbin",ScalarType "text"),("adsrc",ScalarType "text")]),("pg_attribute",TableComposite,UnnamedCompositeType [("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"))]),("pg_auth_members",TableComposite,UnnamedCompositeType [("roleid",ScalarType "oid"),("member",ScalarType "oid"),("grantor",ScalarType "oid"),("admin_option",ScalarType "bool")]),("pg_authid",TableComposite,UnnamedCompositeType [("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"))]),("pg_cast",TableComposite,UnnamedCompositeType [("castsource",ScalarType "oid"),("casttarget",ScalarType "oid"),("castfunc",ScalarType "oid"),("castcontext",ScalarType "char"),("castmethod",ScalarType "char")]),("pg_class",TableComposite,UnnamedCompositeType [("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"))]),("pg_constraint",TableComposite,UnnamedCompositeType [("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")]),("pg_conversion",TableComposite,UnnamedCompositeType [("conname",ScalarType "name"),("connamespace",ScalarType "oid"),("conowner",ScalarType "oid"),("conforencoding",ScalarType "int4"),("contoencoding",ScalarType "int4"),("conproc",ScalarType "regproc"),("condefault",ScalarType "bool")]),("pg_database",TableComposite,UnnamedCompositeType [("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"))]),("pg_depend",TableComposite,UnnamedCompositeType [("classid",ScalarType "oid"),("objid",ScalarType "oid"),("objsubid",ScalarType "int4"),("refclassid",ScalarType "oid"),("refobjid",ScalarType "oid"),("refobjsubid",ScalarType "int4"),("deptype",ScalarType "char")]),("pg_description",TableComposite,UnnamedCompositeType [("objoid",ScalarType "oid"),("classoid",ScalarType "oid"),("objsubid",ScalarType "int4"),("description",ScalarType "text")]),("pg_enum",TableComposite,UnnamedCompositeType [("enumtypid",ScalarType "oid"),("enumlabel",ScalarType "name")]),("pg_foreign_data_wrapper",TableComposite,UnnamedCompositeType [("fdwname",ScalarType "name"),("fdwowner",ScalarType "oid"),("fdwvalidator",ScalarType "oid"),("fdwacl",ArrayType (ScalarType "aclitem")),("fdwoptions",ArrayType (ScalarType "text"))]),("pg_foreign_server",TableComposite,UnnamedCompositeType [("srvname",ScalarType "name"),("srvowner",ScalarType "oid"),("srvfdw",ScalarType "oid"),("srvtype",ScalarType "text"),("srvversion",ScalarType "text"),("srvacl",ArrayType (ScalarType "aclitem")),("srvoptions",ArrayType (ScalarType "text"))]),("pg_index",TableComposite,UnnamedCompositeType [("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")]),("pg_inherits",TableComposite,UnnamedCompositeType [("inhrelid",ScalarType "oid"),("inhparent",ScalarType "oid"),("inhseqno",ScalarType "int4")]),("pg_language",TableComposite,UnnamedCompositeType [("lanname",ScalarType "name"),("lanowner",ScalarType "oid"),("lanispl",ScalarType "bool"),("lanpltrusted",ScalarType "bool"),("lanplcallfoid",ScalarType "oid"),("lanvalidator",ScalarType "oid"),("lanacl",ArrayType (ScalarType "aclitem"))]),("pg_largeobject",TableComposite,UnnamedCompositeType [("loid",ScalarType "oid"),("pageno",ScalarType "int4"),("data",ScalarType "bytea")]),("pg_listener",TableComposite,UnnamedCompositeType [("relname",ScalarType "name"),("listenerpid",ScalarType "int4"),("notification",ScalarType "int4")]),("pg_namespace",TableComposite,UnnamedCompositeType [("nspname",ScalarType "name"),("nspowner",ScalarType "oid"),("nspacl",ArrayType (ScalarType "aclitem"))]),("pg_opclass",TableComposite,UnnamedCompositeType [("opcmethod",ScalarType "oid"),("opcname",ScalarType "name"),("opcnamespace",ScalarType "oid"),("opcowner",ScalarType "oid"),("opcfamily",ScalarType "oid"),("opcintype",ScalarType "oid"),("opcdefault",ScalarType "bool"),("opckeytype",ScalarType "oid")]),("pg_operator",TableComposite,UnnamedCompositeType [("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")]),("pg_opfamily",TableComposite,UnnamedCompositeType [("opfmethod",ScalarType "oid"),("opfname",ScalarType "name"),("opfnamespace",ScalarType "oid"),("opfowner",ScalarType "oid")]),("pg_pltemplate",TableComposite,UnnamedCompositeType [("tmplname",ScalarType "name"),("tmpltrusted",ScalarType "bool"),("tmpldbacreate",ScalarType "bool"),("tmplhandler",ScalarType "text"),("tmplvalidator",ScalarType "text"),("tmpllibrary",ScalarType "text"),("tmplacl",ArrayType (ScalarType "aclitem"))]),("pg_proc",TableComposite,UnnamedCompositeType [("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"))]),("pg_rewrite",TableComposite,UnnamedCompositeType [("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")]),("pg_shdepend",TableComposite,UnnamedCompositeType [("dbid",ScalarType "oid"),("classid",ScalarType "oid"),("objid",ScalarType "oid"),("objsubid",ScalarType "int4"),("refclassid",ScalarType "oid"),("refobjid",ScalarType "oid"),("deptype",ScalarType "char")]),("pg_shdescription",TableComposite,UnnamedCompositeType [("objoid",ScalarType "oid"),("classoid",ScalarType "oid"),("description",ScalarType "text")]),("pg_statistic",TableComposite,UnnamedCompositeType [("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)]),("pg_tablespace",TableComposite,UnnamedCompositeType [("spcname",ScalarType "name"),("spcowner",ScalarType "oid"),("spclocation",ScalarType "text"),("spcacl",ArrayType (ScalarType "aclitem"))]),("pg_trigger",TableComposite,UnnamedCompositeType [("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")]),("pg_ts_config",TableComposite,UnnamedCompositeType [("cfgname",ScalarType "name"),("cfgnamespace",ScalarType "oid"),("cfgowner",ScalarType "oid"),("cfgparser",ScalarType "oid")]),("pg_ts_config_map",TableComposite,UnnamedCompositeType [("mapcfg",ScalarType "oid"),("maptokentype",ScalarType "int4"),("mapseqno",ScalarType "int4"),("mapdict",ScalarType "oid")]),("pg_ts_dict",TableComposite,UnnamedCompositeType [("dictname",ScalarType "name"),("dictnamespace",ScalarType "oid"),("dictowner",ScalarType "oid"),("dicttemplate",ScalarType "oid"),("dictinitoption",ScalarType "text")]),("pg_ts_parser",TableComposite,UnnamedCompositeType [("prsname",ScalarType "name"),("prsnamespace",ScalarType "oid"),("prsstart",ScalarType "regproc"),("prstoken",ScalarType "regproc"),("prsend",ScalarType "regproc"),("prsheadline",ScalarType "regproc"),("prslextype",ScalarType "regproc")]),("pg_ts_template",TableComposite,UnnamedCompositeType [("tmplname",ScalarType "name"),("tmplnamespace",ScalarType "oid"),("tmplinit",ScalarType "regproc"),("tmpllexize",ScalarType "regproc")]),("pg_type",TableComposite,UnnamedCompositeType [("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")]),("pg_user_mapping",TableComposite,UnnamedCompositeType [("umuser",ScalarType "oid"),("umserver",ScalarType "oid"),("umoptions",ArrayType (ScalarType "text"))]),("pg_cursors",ViewComposite,UnnamedCompositeType [("name",ScalarType "text"),("statement",ScalarType "text"),("is_holdable",ScalarType "bool"),("is_binary",ScalarType "bool"),("is_scrollable",ScalarType "bool"),("creation_time",ScalarType "timestamptz")]),("pg_group",ViewComposite,UnnamedCompositeType [("groname",ScalarType "name"),("grosysid",ScalarType "oid"),("grolist",ArrayType (ScalarType "oid"))]),("pg_indexes",ViewComposite,UnnamedCompositeType [("schemaname",ScalarType "name"),("tablename",ScalarType "name"),("indexname",ScalarType "name"),("tablespace",ScalarType "name"),("indexdef",ScalarType "text")]),("pg_locks",ViewComposite,UnnamedCompositeType [("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")]),("pg_prepared_statements",ViewComposite,UnnamedCompositeType [("name",ScalarType "text"),("statement",ScalarType "text"),("prepare_time",ScalarType "timestamptz"),("parameter_types",ArrayType (ScalarType "regtype")),("from_sql",ScalarType "bool")]),("pg_prepared_xacts",ViewComposite,UnnamedCompositeType [("transaction",ScalarType "xid"),("gid",ScalarType "text"),("prepared",ScalarType "timestamptz"),("owner",ScalarType "name"),("database",ScalarType "name")]),("pg_roles",ViewComposite,UnnamedCompositeType [("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")]),("pg_rules",ViewComposite,UnnamedCompositeType [("schemaname",ScalarType "name"),("tablename",ScalarType "name"),("rulename",ScalarType "name"),("definition",ScalarType "text")]),("pg_settings",ViewComposite,UnnamedCompositeType [("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")]),("pg_shadow",ViewComposite,UnnamedCompositeType [("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"))]),("pg_stat_activity",ViewComposite,UnnamedCompositeType [("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")]),("pg_stat_all_indexes",ViewComposite,UnnamedCompositeType [("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")]),("pg_stat_all_tables",ViewComposite,UnnamedCompositeType [("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")]),("pg_stat_bgwriter",ViewComposite,UnnamedCompositeType [("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")]),("pg_stat_database",ViewComposite,UnnamedCompositeType [("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")]),("pg_stat_sys_indexes",ViewComposite,UnnamedCompositeType [("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")]),("pg_stat_sys_tables",ViewComposite,UnnamedCompositeType [("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")]),("pg_stat_user_functions",ViewComposite,UnnamedCompositeType [("funcid",ScalarType "oid"),("schemaname",ScalarType "name"),("funcname",ScalarType "name"),("calls",ScalarType "int8"),("total_time",ScalarType "int8"),("self_time",ScalarType "int8")]),("pg_stat_user_indexes",ViewComposite,UnnamedCompositeType [("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")]),("pg_stat_user_tables",ViewComposite,UnnamedCompositeType [("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")]),("pg_statio_all_indexes",ViewComposite,UnnamedCompositeType [("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")]),("pg_statio_all_sequences",ViewComposite,UnnamedCompositeType [("relid",ScalarType "oid"),("schemaname",ScalarType "name"),("relname",ScalarType "name"),("blks_read",ScalarType "int8"),("blks_hit",ScalarType "int8")]),("pg_statio_all_tables",ViewComposite,UnnamedCompositeType [("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")]),("pg_statio_sys_indexes",ViewComposite,UnnamedCompositeType [("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")]),("pg_statio_sys_sequences",ViewComposite,UnnamedCompositeType [("relid",ScalarType "oid"),("schemaname",ScalarType "name"),("relname",ScalarType "name"),("blks_read",ScalarType "int8"),("blks_hit",ScalarType "int8")]),("pg_statio_sys_tables",ViewComposite,UnnamedCompositeType [("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")]),("pg_statio_user_indexes",ViewComposite,UnnamedCompositeType [("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")]),("pg_statio_user_sequences",ViewComposite,UnnamedCompositeType [("relid",ScalarType "oid"),("schemaname",ScalarType "name"),("relname",ScalarType "name"),("blks_read",ScalarType "int8"),("blks_hit",ScalarType "int8")]),("pg_statio_user_tables",ViewComposite,UnnamedCompositeType [("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")]),("pg_stats",ViewComposite,UnnamedCompositeType [("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")]),("pg_tables",ViewComposite,UnnamedCompositeType [("schemaname",ScalarType "name"),("tablename",ScalarType "name"),("tableowner",ScalarType "name"),("tablespace",ScalarType "name"),("hasindexes",ScalarType "bool"),("hasrules",ScalarType "bool"),("hastriggers",ScalarType "bool")]),("pg_timezone_abbrevs",ViewComposite,UnnamedCompositeType [("abbrev",ScalarType "text"),("utc_offset",ScalarType "interval"),("is_dst",ScalarType "bool")]),("pg_timezone_names",ViewComposite,UnnamedCompositeType [("name",ScalarType "text"),("abbrev",ScalarType "text"),("utc_offset",ScalarType "interval"),("is_dst",ScalarType "bool")]),("pg_user",ViewComposite,UnnamedCompositeType [("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"))]),("pg_user_mappings",ViewComposite,UnnamedCompositeType [("umid",ScalarType "oid"),("srvid",ScalarType "oid"),("srvname",ScalarType "name"),("umuser",ScalarType "oid"),("usename",ScalarType "name"),("umoptions",ArrayType (ScalarType "text"))]),("pg_views",ViewComposite,UnnamedCompositeType [("schemaname",ScalarType "name"),("viewname",ScalarType "name"),("viewowner",ScalarType "name"),("definition",ScalarType "text")])], scopeAttrSystemColumns = [("pg_aggregate",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("ctid",ScalarType "tid")]),("pg_am",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_amop",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_amproc",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_attrdef",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_attribute",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("ctid",ScalarType "tid")]),("pg_auth_members",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("ctid",ScalarType "tid")]),("pg_authid",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_cast",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_class",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_constraint",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_conversion",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_database",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_depend",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("ctid",ScalarType "tid")]),("pg_description",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("ctid",ScalarType "tid")]),("pg_enum",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_foreign_data_wrapper",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_foreign_server",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_index",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("ctid",ScalarType "tid")]),("pg_inherits",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("ctid",ScalarType "tid")]),("pg_language",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_largeobject",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("ctid",ScalarType "tid")]),("pg_listener",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("ctid",ScalarType "tid")]),("pg_namespace",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_opclass",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_operator",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_opfamily",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_pltemplate",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("ctid",ScalarType "tid")]),("pg_proc",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_rewrite",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_shdepend",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("ctid",ScalarType "tid")]),("pg_shdescription",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("ctid",ScalarType "tid")]),("pg_statistic",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("ctid",ScalarType "tid")]),("pg_tablespace",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_trigger",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_ts_config",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_ts_config_map",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("ctid",ScalarType "tid")]),("pg_ts_dict",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_ts_parser",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_ts_template",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_type",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")]),("pg_user_mapping",TableComposite,UnnamedCompositeType [("tableoid",ScalarType "oid"),("cmax",ScalarType "cid"),("xmax",ScalarType "xid"),("cmin",ScalarType "cid"),("xmin",ScalarType "xid"),("oid",ScalarType "oid"),("ctid",ScalarType "tid")])], scopeIdentifierTypes = [], scopeJoinIdentifiers = []}
+ Database/HsSqlPpp/DefaultScopeEmpty.hs view
@@ -0,0 +1,47 @@+{-+Copyright 2009 Jake Wheat++This file is used in the following scenario:++hack up scope or readscope or something++run ./HsSqlSystem.lhs getscope template1 >DefaultScope.hs++oops - DefaultScope.hs has been blanked too soon (i.e. before ghc has+loaded it as part of running HsSqlSystem), and HsSqlSystem can't run,+and we're stuck without being able to generate a new DefaultScope.++Or//++run ./HsSqlSystem.lhs getscope template1 >DefaultScope1.hs+then mv DefaultScope1.hs DefaultScope.hs++and, oops - DefaultScope hasn't generated properly and can't+compile. Once again we can't run HsSqlSystem.hs to fix it.++If you end up in this position, use+cp DefaultScopeEmpty.hs DefaultScope.hs+and you can then generate a new DefaultScope again using HsSqlPpp.++Finally//++You alter the scope type, and hssqlsystem won't run since the value in+defaultscope no longer matches the scope type, overwrite+DefaultScope.hs with this file and then you can regenerate the+DefaultScope with the new type. Assuming you've updated ScopeReader+also.++Perhaps having the program to generate defaultscope.hs depend on it+being a valid file before it can regenerate it is a bad design...++-}+++module Database.HsSqlPpp.DefaultScope where++import Database.HsSqlPpp.TypeType+import Database.HsSqlPpp.Scope+++defaultScope :: Scope+defaultScope = emptyScope
+ Database/HsSqlPpp/Lexer.lhs view
@@ -0,0 +1,290 @@+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)++> module Database.HsSqlPpp.Lexer (+> Token+> ,Tok(..)+> ,lexSqlFile+> ,lexSqlText+> ) where++> import Text.Parsec hiding(many, optional, (<|>))+> import qualified Text.Parsec.Token as P+> import Text.Parsec.Language+> import Text.Parsec.String++> import Control.Applicative+> import Control.Monad.Identity++> import Data.Char++> import Database.HsSqlPpp.ParseErrors++================================================================================++= 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 -- $1, etc.+> | FloatTok Double+> | IntegerTok Integer+> | CopyPayloadTok String -- support copy from stdin; with inline data+> deriving (Eq,Show)++> type ParseState = [Tok]++> lexSqlFile :: FilePath -> IO (Either ExtendedError [Token])+> lexSqlFile f = do+> te <- readFile f+> let x = runParser sqlTokens [] f te --parseFromFile sqlTokens f+> return $ convertToExtendedError x f te++> lexSqlText :: String -> Either ExtendedError [Token]+> lexSqlText s = convertToExtendedError (runParser sqlTokens [] "" s) "" s++================================================================================++= lexers++lexer for tokens, contains a hack for copy from stdin with inline+table data.++> sqlTokens :: ParsecT String ParseState 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 ParseState 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 ParseState 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 ParseState Identity Tok+> idString = IdStringTok <$> identifierString++> positionalArg :: ParsecT String ParseState 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++> sqlSymbol :: ParsecT String ParseState Identity Tok+> sqlSymbol =+> SymbolTok <$> lexeme (choice [+> replicate 1 <$> oneOf "()[],;"+> ,string ".."+> ,try $ string "::"+> ,try $ string ":="+> ,string ":"+> ,many1 (oneOf "+-*/<>=~!@#%^&|`?")+> ])++> sqlFloat :: ParsecT String ParseState Identity Tok+> sqlFloat = FloatTok <$> float++> sqlInteger :: ParsecT String ParseState 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 ParseState 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 = (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 ParseState 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)++doesn't seem too gratuitous, comes up a few times++> (<:>) :: (Applicative f) =>+> f a -> f [a] -> f [a]+> (<:>) a b = (:) <$> a <*> b++> 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 ParseState Identity String+> symbol = P.symbol lexer++> integer :: ParsecT String ParseState Identity Integer+> integer = lexeme $ P.integer lexer++> float :: ParsecT String ParseState Identity Double+> float = lexeme $ P.float lexer++> whiteSpace :: ParsecT String ParseState Identity ()+> whiteSpace= P.whiteSpace lexer++> lexeme :: ParsecT String ParseState Identity a+> -> ParsecT String ParseState 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 ParseState 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/ParseErrors.lhs view
@@ -0,0 +1,49 @@+Copyright 2009 Jake Wheat++convert error messages to show source text fragment with little hat,+plus output error location in emacs friendly format.++> module Database.HsSqlPpp.ParseErrors (convertToExtendedError, ExtendedError(..)) where++> import Text.Parsec++> showEr :: ParseError -> String -> String -> String+> showEr er fn src =+> let pos = errorPos er+> lineNo = sourceLine pos+> ls = lines src+> line = safeGet ls(lineNo - 1)+> prelines = map (safeGet ls) [(lineNo - 5) .. (lineNo - 2)]+> postlines = map (safeGet ls) [lineNo .. (lineNo + 5)]+> colNo = sourceColumn pos+> highlightLine = replicate (colNo - 1) ' ' ++ "^"+> errorHighlightText = prelines+> ++ [line, highlightLine, "ERROR HERE"]+> ++ postlines+> in "\n---------------------\n" ++ show er+> ++ "\nFILENAMESTUFF:\n" ++ fn ++ ":" ++ show lineNo ++ ":" ++ show colNo+> ++ "\n------------\nCheck it out:\n"+> ++ unlines (trimLines errorHighlightText)+> ++ "\n-----------------\n"+> where+> safeGet a i = if i < 0 || i >= length a+> then ""+> else a !! i+> trimLines = trimStartLines . reverse . trimStartLines . reverse+> trimStartLines = dropWhile (=="")++give access to the nicer error text via Show++> data ExtendedError = ExtendedError ParseError String++> instance Show ExtendedError where+> show (ExtendedError _ x) = x++> convertToExtendedError :: Either ParseError b+> -> String+> -> String+> -> Either ExtendedError b+> convertToExtendedError f fn src =+> case f of+> Left er -> Left $ ExtendedError er (showEr er fn src)+> Right l -> Right l
+ Database/HsSqlPpp/ParserTests.lhs view
@@ -0,0 +1,1121 @@+#!/usr/bin/env runghc++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.++Also had some quickcheck stuff, but it got disabled since it failed+depressingly often and the code has now gone very stale. The idea with+this was to generate random asts, pretty print then parse them, and+check the new ast was the same as the original. Probably worth having+another go at this some time soon.++There are no tests for invalid sql at the moment.++> module Database.HsSqlPpp.ParserTests (parserTests) where++> import Test.HUnit+> import Test.Framework+> import Test.Framework.Providers.HUnit+> import Data.Char++> import Database.HsSqlPpp.Ast+> import Database.HsSqlPpp.Parser+> import Database.HsSqlPpp.PrettyPrinter+> import Database.HsSqlPpp.ParseErrors++> parserTests :: Test.Framework.Test+> parserTests =+> testGroup "parserTests" [++================================================================================++uses a whole bunch of shortcuts (at the bottom of main) to make this+code more concise. Could probably use a few more.++> testGroup "parse expression"+> (mapExpr [++start with some really basic expressions, we just use the expression+parser rather than the full sql statement parser. (the expression parser+requires a single expression followed by eof.)++> 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])++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])++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++array selector++> ,p "array[1,2]" (FunCall "!arrayCtor" [IntegerLit 1, IntegerLit 2])++array subscripting++> ,p "a[1]" (FunCall "!arraySub" [Identifier "a", IntegerLit 1])++we just produce a ast, so no type checking or anything like that is+done++some operator tests++> ,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 "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"])++some function call tests++> ,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"])++simple whitespace sanity checks++> ,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])++null stuff++> ,p "not null" (FunCall "!not" [NullLit])+> ,p "a is null" (FunCall "!isNull" [Identifier "a"])+> ,p "a is not null" (FunCall "!isNotNull" [Identifier "a"])++some slightly more complex stuff++> ,p "case when a,b then 3\n\+> \ when c then 4\n\+> \ else 5\n\+> \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))+++positional args used in sql and sometimes plpgsql functions++> ,p "$1" (PositionalArg 1)++> ,p "exists (select 1 from a)"+> (Exists (selectFrom [SelExp (IntegerLit 1)] (Tref "a")))++ > (Exists (makeSelect {+ > selSelectList = sle [(IntegerLit 1)]+ > ,selTref = Just $ Tref "a"}))+++selectFrom [SelExp (IntegerLit 1)] (Tref "a")))++in variants, including using row constructors++> ,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 "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.++> ,testGroup "string parsing"+> (mapExpr [+> 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")+> ])++================================================================================++first statement, pretty simple++> ,testGroup "select expression"+> (mapSql [+> p "select 1;" [SelectStatement $ selectE (SelectList [SelExp (IntegerLit 1)] [])]+> ])++================================================================================++test a whole bunch more select statements++> ,testGroup "select from table"+> (mapSql [+> p "select * from tbl;"+> [SelectStatement $ selectFrom (selIL ["*"]) (Tref "tbl")]+> ,p "select a,b from tbl;"+> [SelectStatement $ selectFrom (selIL ["a", "b"]) (Tref "tbl")]++> ,p "select a,b from inf.tbl;"+> [SelectStatement $ selectFrom (selIL ["a", "b"]) (Tref "inf.tbl")]++> ,p "select distinct * from tbl;"+> [SelectStatement $ Select Distinct (SelectList (selIL ["*"]) []) (Just $ Tref "tbl")+> Nothing [] Nothing [] Asc Nothing Nothing]++> ,p "select a from tbl where b=2;"+> [SelectStatement $ selectFromWhere+> (selIL ["a"])+> (Tref "tbl")+> (FunCall "="+> [Identifier "b", IntegerLit 2])]+> ,p "select a from tbl where b=2 and c=3;"+> [SelectStatement $ selectFromWhere+> (selIL ["a"])+> (Tref "tbl")+> (FunCall "!and"+> [FunCall "=" [Identifier "b", IntegerLit 2]+> ,FunCall "=" [Identifier "c", IntegerLit 3]])]++> ,p "select a from tbl\n\+> \except\n\+> \select a from tbl1;"+> [SelectStatement $ CombineSelect Except+> (selectFrom (selIL ["a"]) (Tref "tbl"))+> (selectFrom (selIL ["a"]) (Tref "tbl1"))]+> ,p "select a from tbl where true\n\+> \except\n\+> \select a from tbl1 where true;"+> [SelectStatement $ CombineSelect Except+> (selectFromWhere (selIL ["a"]) (Tref "tbl") (BooleanLit True))+> (selectFromWhere (selIL ["a"]) (Tref "tbl1") (BooleanLit True))]+> ,p "select a from tbl\n\+> \union\n\+> \select a from tbl1;"+> [SelectStatement $ CombineSelect Union+> (selectFrom (selIL ["a"]) (Tref "tbl"))+> (selectFrom (selIL ["a"]) (Tref "tbl1"))]+> ,p "select a from tbl\n\+> \union all\n\+> \select a from tbl1;"+> [SelectStatement $ CombineSelect UnionAll+> (selectFrom (selIL ["a"]) (Tref "tbl"))+> (selectFrom (selIL ["a"]) (Tref "tbl1"))]++> ,p "select a as b from tbl;"+> [SelectStatement $ selectFrom [SelectItem (Identifier "a") "b"] (Tref "tbl")]+> ,p "select a + b as b from tbl;"+> [SelectStatement $ selectFrom+> [SelectItem+> (FunCall "+"+> [Identifier "a", Identifier "b"]) "b"]+> (Tref "tbl")]+> ,p "select a.* from tbl a;"+> [SelectStatement $ selectFrom (selIL ["a.*"]) (TrefAlias "tbl" "a")]++> ,p "select a from b inner join c on b.a=c.a;"+> [SelectStatement $ selectFrom+> (selIL ["a"])+> (JoinedTref (Tref "b") Unnatural Inner (Tref "c")+> (Just (JoinOn+> (FunCall "=" [Identifier "b.a", Identifier "c.a"]))))]+> ,p "select a from b inner join c as d on b.a=d.a;"+> [SelectStatement $ selectFrom+> (selIL ["a"])+> (JoinedTref (Tref "b") Unnatural Inner (TrefAlias "c" "d")+> (Just (JoinOn+> (FunCall "=" [Identifier "b.a", Identifier "d.a"]))))]++> ,p "select a from b inner join c using(d,e);"+> [SelectStatement $ selectFrom+> (selIL ["a"])+> (JoinedTref (Tref "b") Unnatural Inner (Tref "c")+> (Just (JoinUsing ["d","e"])))]++> ,p "select a from b natural inner join c;"+> [SelectStatement $ selectFrom+> (selIL ["a"])+> (JoinedTref (Tref "b") Natural Inner (Tref "c") Nothing)]+> ,p "select a from b left outer join c;"+> [SelectStatement $ selectFrom+> (selIL ["a"])+> (JoinedTref (Tref "b") Unnatural LeftOuter (Tref "c") Nothing)]+> ,p "select a from b full outer join c;"+> [SelectStatement $ selectFrom+> (selIL ["a"])+> (JoinedTref (Tref "b") Unnatural FullOuter (Tref "c") Nothing)]+> ,p "select a from b right outer join c;"+> [SelectStatement $ selectFrom+> (selIL ["a"])+> (JoinedTref (Tref "b") Unnatural RightOuter (Tref "c") Nothing)]+> ,p "select a from b cross join c;"+> [SelectStatement $ selectFrom+> (selIL ["a"])+> (JoinedTref (Tref "b") Unnatural Cross (Tref "c") Nothing)]++> ,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") Unnatural Inner (Tref "c")+> (Just $ JoinOn (BooleanLit True)))+> Unnatural Inner (Tref "d")+> (Just $ JoinOn (FunCall "="+> [IntegerLit 1, IntegerLit 1])))]++> ,p "select row_number() over(order by a) as place from tbl;"+> [SelectStatement $ selectFrom [SelectItem+> (WindowFn+> (FunCall "row_number" [])+> []+> [Identifier "a"] Asc)+> "place"]+> (Tref "tbl")]+> ,p "select row_number() over(order by a asc) as place from tbl;"+> [SelectStatement $ selectFrom [SelectItem+> (WindowFn+> (FunCall "row_number" [])+> []+> [Identifier "a"] Asc)+> "place"]+> (Tref "tbl")]+> ,p "select row_number() over(order by a desc) as place from tbl;"+> [SelectStatement $ selectFrom [SelectItem+> (WindowFn+> (FunCall "row_number" [])+> []+> [Identifier "a"] Desc)+> "place"]+> (Tref "tbl")]+> ,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)+> "place"]+> (Tref "tbl")]++> ,p "select * from a natural inner join (select * from b) as a;"+> [SelectStatement $ selectFrom+> (selIL ["*"])+> (JoinedTref (Tref "a") Natural+> Inner (SubTref (selectFrom+> (selIL ["*"])+> (Tref "b")) "a")+> Nothing)]++> ,p "select * from a order by c;"+> [SelectStatement $ Select Dupes+> (sl (selIL ["*"]))+> (Just $ Tref "a")+> Nothing [] Nothing [Identifier "c"] Asc Nothing Nothing]++> ,p "select * from a order by c,d asc;"+> [SelectStatement $ Select Dupes+> (sl (selIL ["*"]))+> (Just $ Tref "a")+> Nothing [] Nothing [Identifier "c", Identifier "d"] Asc Nothing Nothing]++> ,p "select * from a order by c,d desc;"+> [SelectStatement $ Select Dupes+> (sl (selIL ["*"]))+> (Just $ Tref "a")+> Nothing [] Nothing [Identifier "c", Identifier "d"] Desc Nothing Nothing]++> ,p "select * from a order by c limit 1;"+> [SelectStatement $ Select Dupes+> (sl (selIL ["*"]))+> (Just $ Tref "a")+> Nothing [] Nothing [Identifier "c"] Asc (Just (IntegerLit 1)) Nothing]++> ,p "select * from a order by c offset 3;"+> [SelectStatement $ Select Dupes+> (sl (selIL ["*"]))+> (Just $ Tref "a")+> 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"))+> "d")]++> ,p "select * from gen();"+> [SelectStatement $ selectFrom (selIL ["*"]) (TrefFun $ FunCall "gen" [])]+> ,p "select * from gen() as t;"+> [SelectStatement $ selectFrom+> (selIL ["*"])+> (TrefFunAlias (FunCall "gen" []) "t")]++> ,p "select a, count(b) from c group by a;"+> [SelectStatement $ Select Dupes+> (sl [selI "a", SelExp (FunCall "count" [Identifier "b"])])+> (Just $ Tref "c") Nothing [Identifier "a"]+> Nothing [] Asc 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"])+> (Just $ Tref "c") Nothing [Identifier "a"]+> (Just $ FunCall ">" [Identifier "cnt", IntegerLit 4])+> [] Asc 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"] [])+> "x")]+> ])++================================================================================++one sanity check for parsing multiple statements++> ,testGroup "multiple statements"+> (mapSql [+> p "select 1;\nselect 2;" [SelectStatement $ selectE $ sl [SelExp (IntegerLit 1)]+> ,SelectStatement $ selectE $ sl [SelExp (IntegerLit 2)]]+> ])++================================================================================++test comment behaviour++> ,testGroup "comments"+> (mapSql [+> p "" []+> ,p "-- this is a test" []+> ,p "/* this is\n\+> \a test*/" []++maybe some people actually put block comments inside parts of+statements when they program?++> ,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++> ,testGroup "dml"+> (mapSql [++simple insert++> 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"))+> 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"])]++updates++> ,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]++delete++> ,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"])]++> ,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++> ,p "copy tbl(a,b) from stdin;\n\+> \bat t\n\+> \bear f\n\+> \\\.\n"+> [Copy "tbl" ["a", "b"] Stdin+> ,CopyData "\+> \bat t\n\+> \bear f\n"]+> ])++================================================================================++some ddl++> ,testGroup "create"+> (mapSql [++create table tests++> 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)] []))]++other creates++> ,p "create view v1 as\n\+> \select a,b from t;"+> [CreateView+> "v1"+> (selectFrom [selI "a", selI "b"] (Tref "t"))]+> ,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")]]++drops++> ,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]++> ])++constraints++> ,testGroup "constraints"+> (mapSql [++nulls++> 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]]+> []]++unique table++> ,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]][]]++primary key row, table++> ,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"]]]++check row, table++> ,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"])]]++row, whole load of constraints, todo: add reference here++> ,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"]))]] []]++reference row, table++> ,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 delete cascade on update cascade\n\+> \);"+> [CreateTable "t1" [att "x" "int"+> ,att "y" "int"]+> [ReferenceConstraint ["x", "y"] "t2" []+> Cascade Cascade]]++> ])++================================================================================++test functions++> ,testGroup "functions"+> (mapSql [+> p "create function t1(text) returns text as $$\n\+> \select a from t1 where b = $1;\n\+> \$$ language sql stable;"+> [CreateFunction Sql "t1" [ParamDefTp $ SimpleTypeName "text"]+> (SimpleTypeName "text") "$$"+> (SqlFnBody+> [addNsp $ SelectStatement $ selectFromWhere [SelExp (Identifier "a")] (Tref "t1")+> (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 Plpgsql "fn" [] (SimpleTypeName "void") "$$"+> (PlpgsqlFnBody [VarDef "a" (SimpleTypeName "int") Nothing+> ,VarDef "b" (SimpleTypeName "text") Nothing]+> [addNsp 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 Plpgsql "fn" [] (SimpleTypeName "void") "$$"+> (PlpgsqlFnBody [VarDef "a" (SimpleTypeName "int") Nothing+> ,VarDef "b" (SimpleTypeName "text") Nothing]+> [addNsp 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 Plpgsql "fn"+> [ParamDef "a" $ ArrayTypeName $ SimpleTypeName "text"]+> (ArrayTypeName $ SimpleTypeName "int") "$$"+> (PlpgsqlFnBody+> [VarDef "b" (ArrayTypeName $ SimpleTypeName "xtype") (Just $ stringQ "{}")]+> [addNsp 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 Plpgsql "fn" [] (SimpleTypeName "void") "'"+> (PlpgsqlFnBody [VarDef "a" (SimpleTypeName "int") (Just $ IntegerLit 3)]+> [addNsp NullStatement])+> Stable]+> ,p "create function fn() returns setof int as $$\n\+> \begin\n\+> \ null;\n\+> \end;\n\+> \$$ language plpgsql stable;"+> [CreateFunction Plpgsql "fn" []+> (SetOfTypeName $ SimpleTypeName "int") "$$"+> (PlpgsqlFnBody [] [addNsp NullStatement])+> Stable]+> ,p "create function fn() returns void as $$\n\+> \begin\n\+> \ null;\n\+> \end\n\+> \$$ language plpgsql stable;"+> [CreateFunction Plpgsql "fn" []+> (SimpleTypeName "void") "$$"+> (PlpgsqlFnBody [] [addNsp NullStatement])+> Stable]+> ,p "drop function test(text);"+> [DropFunction Require [("test",["text"])] Restrict]+> ,p "drop function if exists a(),test(text) cascade;"+> [DropFunction IfExists [("a",[])+> ,("test",["text"])] Cascade]+> ])++================================================================================++test non sql plpgsql statements++> ,testGroup "plpgsqlStatements"+> (mapPlpgsql [++simple statements++> 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")]+> ,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"])+> (Just $ Tref "e") Nothing [] Nothing [] Asc Nothing Nothing]+> ,p "select c,d into a,b from e;"+> [SelectStatement $ Select Dupes (SelectList [selI "c", selI "d"] ["a", "b"])+> (Just $ Tref "e") Nothing [] Nothing [] Asc Nothing Nothing]++> ,p "execute s;"+> [Execute (Identifier "s")]+> ,p "execute s into r;"+> [ExecuteInto (Identifier "s") ["r"]]++> ,p "continue;" [ContinueStatement]++complicated statements++> ,p "for r in select a from tbl loop\n\+> \null;\n\+> \end loop;"+> [ForSelectStatement "r" (selectFrom [selI "a"] (Tref "tbl"))+> [addNsp NullStatement]]+> ,p "for r in select a from tbl where true loop\n\+> \null;\n\+> \end loop;"+> [ForSelectStatement "r"+> (selectFromWhere [selI "a"] (Tref "tbl") (BooleanLit True))+> [addNsp NullStatement]]+> ,p "for r in 1 .. 10 loop\n\+> \null;\n\+> \end loop;"+> [ForIntegerStatement "r"+> (IntegerLit 1) (IntegerLit 10)+> [addNsp NullStatement]]++> ,p "if a=b then\n\+> \ update c set d = e;\n\+> \end if;"+> [If [((FunCall "=" [Identifier "a", Identifier "b"])+> ,[addNsp $ Update "c" [SetClause "d" (Identifier "e")] Nothing Nothing])]+> []]+> ,p "if true then\n\+> \ null;\n\+> \else\n\+> \ null;\n\+> \end if;"+> [If [((BooleanLit True),[addNsp NullStatement])]+> [addNsp NullStatement]]+> ,p "if true then\n\+> \ null;\n\+> \elseif false then\n\+> \ return;\n\+> \end if;"+> [If [((BooleanLit True), [addNsp NullStatement])+> ,((BooleanLit False), [addNsp $ 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), [addNsp NullStatement])+> ,((BooleanLit False), [addNsp $ Return Nothing])+> ,((BooleanLit False), [addNsp $ Return Nothing])]+> [addNsp $ 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"], [addNsp NullStatement])+> ,([Identifier "c", Identifier "d"], [addNsp NullStatement])]+> [addNsp NullStatement]]+> ])+> --,testProperty "random expression" prop_expression_ppp+> -- ,testProperty "random statements" prop_statements_ppp+> ]+> where+> mapExpr = map $ uncurry checkParseExpression+> mapSql = map $ uncurry checkParse+> mapPlpgsql = map $ uncurry checkParsePlpgsql+> p a b = (a,b)+> selIL = map selI+> selI = SelExp . Identifier+> sl a = SelectList a []+> selectE selList = Select Dupes selList+> Nothing Nothing [] Nothing [] Asc Nothing Nothing+> selectFrom selList frm =+> Select Dupes (SelectList selList [])+> (Just frm) Nothing [] Nothing [] Asc Nothing Nothing+> selectFromWhere selList frm whr =+> Select Dupes (SelectList selList [])+> (Just frm) (Just whr) [] Nothing [] Asc Nothing Nothing+> stringQ = StringLit "'"+> addNsp s = (nsp,s)+> att n t = AttributeDef n (SimpleTypeName t) Nothing []++================================================================================++Unit test helpers++parse and then pretty print and parse a statement++> checkParse :: String -> [Statement] -> Test.Framework.Test+> checkParse src ast = parseUtil1 src ast parseSql++parse and then pretty print and parse an expression++> checkParseExpression :: String -> Expression -> Test.Framework.Test+> checkParseExpression src ast = parseUtil src ast+> parseExpression printExpression++> checkParsePlpgsql :: String -> [Statement] -> Test.Framework.Test+> checkParsePlpgsql src ast = parseUtil1 src ast parsePlpgsql++> parseUtil :: (Show t, Eq b, Show b) =>+> String+> -> b+> -> (String -> Either t b)+> -> (b -> String)+> -> Test.Framework.Test+> parseUtil src ast parser printer = testCase ("parse " ++ src) $ do+> let ast' = case parser src of+> Left er -> error $ show er+> Right l -> l+> assertEqual ("parse " ++ src) ast ast'+> -- pretty print then parse to check+> let pp = printer ast+> let ast'' = case parser pp of+> Left er -> error $ "reparse\n" ++ show er ++ "\n" -- ++ pp ++ "\n"+> Right l -> l+> assertEqual ("reparse " ++ pp) ast ast''++> parseUtil1 :: String+> -> [Statement]+> -> (String -> Either ExtendedError StatementList)+> -> Test.Framework.Test+> parseUtil1 src ast parser = testCase ("parse " ++ src) $ do+> let ast' = case parser src of+> Left er -> error $ show er+> Right l -> l+> assertEqual ("parse " ++ src) ast $ resetSps (map snd ast')+> -- pretty print then parse to check+> let pp = printSql ast'+> let ast'' = case parser pp of+> Left er -> error $ "reparse\n" ++ show er ++ "\n" -- ++ pp ++ "\n"+> Right l -> l+> assertEqual ("reparse " ++ pp) ast $ resetSps (map snd ast'')+
+ Database/HsSqlPpp/Scope.lhs view
@@ -0,0 +1,135 @@+Copyright 2009 Jake Wheat++Represents the types, identifiers, etc available. Used internally for+static and changing scopes in the type checker, as well as the input+to the type checking routines if you want to supply different/extra+definitions before type checking something, and you're not getting the+extra definitions from an accessible database.++> module Database.HsSqlPpp.Scope where++> import Data.List+> import Debug.Trace++> import Database.HsSqlPpp.TypeType++> type FunctionPrototype = (String, [Type], Type)+> type DomainDefinition = (Type,Type)++> data Scope = Scope {scopeTypes :: [Type]+> ,scopeTypeNames :: [(String, Type)]+> ,scopeDomainDefs :: [DomainDefinition]+> ,scopeCasts :: [(Type,Type,CastContext)]+> ,scopeTypeCategories :: [(Type,String,Bool)]+> ,scopePrefixOperators :: [FunctionPrototype]+> ,scopePostfixOperators :: [FunctionPrototype]+> ,scopeBinaryOperators :: [FunctionPrototype]+> ,scopeFunctions :: [FunctionPrototype]+> ,scopeAggregates :: [FunctionPrototype]+> --this should be done better:+> ,scopeAllFns :: [FunctionPrototype]+> ,scopeAttrDefs :: [CompositeDef]+> ,scopeAttrSystemColumns :: [CompositeDef]+> ,scopeIdentifierTypes :: [QualifiedScope]+> ,scopeJoinIdentifiers :: [String]}+> deriving (Eq,Show)++= 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.++scopeIdentifierTypes 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.++> type QualifiedScope = (String, ([(String,Type)], [(String,Type)]))++> emptyScope :: Scope+> emptyScope = Scope [] [] [] [] [] [] [] [] [] [] [] [] [] [] []++> scopeReplaceIds :: Scope -> [QualifiedScope] -> [String] -> Scope+> scopeReplaceIds scope ids commonJoinFields =+> scope { scopeIdentifierTypes = ids+> ,scopeJoinIdentifiers = commonJoinFields }++> catPair :: ([a],[a]) -> [a]+> catPair = uncurry (++)++> scopeLookupID :: Scope -> MySourcePos -> String -> String -> Type+> scopeLookupID scope sp correlationName iden =+> if correlationName == ""+> then let types = concatMap (filter (\ (s, _) -> s == iden))+> (map (catPair.snd) $ scopeIdentifierTypes scope)+> in case length types of+> 0 -> TypeError sp (UnrecognisedIdentifier iden)+> 1 -> (snd . head) types+> _ -> --see if this identifier is in the join list+> if iden `elem` scopeJoinIdentifiers scope+> then (snd . head) types+> else TypeError sp (AmbiguousIdentifier iden)+> else case lookup correlationName (scopeIdentifierTypes scope) of+> Nothing -> TypeError sp $ UnrecognisedCorrelationName correlationName+> Just s -> case lookup iden (catPair s) of+> Nothing -> TypeError sp $ UnrecognisedIdentifier $ correlationName ++ "." ++ iden+> Just t -> t++> scopeExpandStar :: Scope -> MySourcePos -> String -> [(String,Type)]+> scopeExpandStar scope sp correlationName =+> if correlationName == ""+> then let allFields = concatMap (fst.snd) $ scopeIdentifierTypes scope+> (commonFields,uncommonFields) =+> partition (\(a,_) -> a `elem` scopeJoinIdentifiers scope) allFields+> in nub commonFields ++ uncommonFields+> else+> case lookup correlationName $ scopeIdentifierTypes scope of+> Nothing -> [("", TypeError sp $ UnrecognisedCorrelationName correlationName)]+> Just s -> fst s+++> combineScopes :: Scope -> Scope -> Scope+> --base, overrides+> combineScopes (Scope bt btn bdod bc btc bpre bpost bbin bf bagg baf bcd basc _ _)+> (Scope ot otn odod oc otc opre opost obin off oagg oaf ocd oasc oi oji) =+> Scope (funion ot bt)+> (funion otn btn)+> (funion odod bdod)+> (funion oc bc)+> (funion otc btc)+> (funion opre bpre)+> (funion opost bpost)+> (funion obin bbin)+> (funion off bf)+> (funion oagg bagg)+> (funion oaf baf)+> (funion ocd bcd)+> (funion oasc basc)+> oi -- overwrites old scopes, might need to be looked at again+> oji+> where+> --without this it runs very slowly - guessing because it creates+> --a lot of garbage+> funion a b = case () of+> _ | a == [] -> b+> | b == [] -> a+> | otherwise -> union a b++combine scopes still seems to run slowly, so change it so that it+chains scope lookups along a list of scopes instead of unioning the+individual lists.
+ Database/HsSqlPpp/ScopeReader.lhs view
@@ -0,0 +1,230 @@+Copyright 2009 Jake Wheat++This file contains the code to read all the scope data from a+postgresql database catalog. This is used to generate the default+scope, and to type check against a database schema in a live database.++It basically runs through each field in the Scope data type and reads+the values for that field out of the database, and turns it into the+appropriate data types.++Maps are use to hold oids during this process to e.g. hook up the+types of table columns (which are read as oids which refer to the+pg_type table) to the haskell values represent those types. These maps+are discarded after the Scope value is created.++> module Database.HsSqlPpp.ScopeReader (readScope) where++> import qualified Data.Map as M+> import Data.Maybe++> import Debug.Trace++> import Database.HsSqlPpp.DBAccess+> import Database.HsSqlPpp.Scope+> import Database.HsSqlPpp.TypeType+++> readScope :: String -> IO Scope+> readScope dbName = withConn ("dbname=" ++ dbName) $ \conn -> do+> typeInfo <- selectRelation conn+> "select t.oid as oid,\n\+> \ t.typtype,\n\+> \ t.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\+> \ 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+> types = map snd typeAssoc+> typeNames = map (\(_,a,b) -> (b,a)) typeStuff++> domainDefInfo <- selectRelation conn+> "select oid, typbasetype\n\+> \from pg_type 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)))+> typeCatInfo <- selectRelation conn+> "select pg_type.oid, typcategory, typispreferred from pg_type\n\+> \where pg_catalog.pg_type_is_visible(pg_type.oid);" []+> let typeCats = flip map typeCatInfo+> (\l -> (jlt (l!!0), l!!1, read (l!!2)::Bool))+> 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+++> attrInfo <- selectRelation conn+> "select distinct\n\+> \ cls.relkind,\n\+> \ cls.relname,\n\+> \ array_to_string(\n\+> \ array_agg(attname || ';' || atttypid)\n\+> \ over (partition by relname order by attnum\n\+> \ range between unbounded preceding\n\+> \ and unbounded following)\n\+> \ ,',')\n\+> \ from pg_attribute att\n\+> \ inner join pg_class cls\n\+> \ on cls.oid = attrelid\n\+> \ where\n\+> \ pg_catalog.pg_table_is_visible(cls.oid)\n\+> \ and cls.relkind in ('r','v','c')\n\+> \ and not attisdropped\n\+> \ and attnum > 0\n\+> \ order by relkind, relname;" []+> let attrs = map (convAttrRow jlt) attrInfo++> systemAttrInfo <- selectRelation conn+> "select distinct\n\+> \ cls.relkind,\n\+> \ cls.relname,\n\+> \ array_to_string(\n\+> \ array_agg(attname || ';' || atttypid)\n\+> \ over (partition by relname order by attnum\n\+> \ range between unbounded preceding\n\+> \ and unbounded following)\n\+> \ ,',')\n\+> \ from pg_attribute att\n\+> \ inner join pg_class cls\n\+> \ on cls.oid = attrelid\n\+> \ where\n\+> \ pg_catalog.pg_table_is_visible(cls.oid)\n\+> \ and cls.relkind in ('r','v','c')\n\+> \ and not attisdropped\n\+> \ and attnum < 0\n\+> \ order by relkind, relname;" []+> let systemAttrs = map (convAttrRow jlt) systemAttrInfo++> return Scope {scopeTypes = types+> ,scopeTypeNames = typeNames+> ,scopeDomainDefs = domainDefs+> ,scopeCasts = casts+> ,scopeTypeCategories = typeCats+> ,scopePrefixOperators = prefixOps+> ,scopePostfixOperators = postfixOps+> ,scopeBinaryOperators = binaryOps+> ,scopeFunctions = fnProts+> ,scopeAggregates = aggProts+> ,scopeAllFns = (prefixOps ++ postfixOps +++> binaryOps ++ fnProts ++ aggProts)+> ,scopeAttrDefs = attrs+> ,scopeAttrSystemColumns = systemAttrs+> ,scopeIdentifierTypes = []+> ,scopeJoinIdentifiers = []}++> where+> convAttrRow jlt l =+> (l!!1, ty, atts)+> where+> ty = case l!!0 of+> "r" -> TableComposite+> "v" -> ViewComposite+> "c" -> Composite+> x -> error $ "internal error: unknown composite type: " ++ x+> atts = let ps = split ',' (l!!2)+> ps1 = map (split ';') ps+> in UnnamedCompositeType $ 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 = (l!!2)+> ctor = case (l!!1) of+> "b" -> ScalarType+> "c" -> CompositeType+> "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]+++> split :: Char -> String -> [String]+> split _ "" = []+> split c s = let (l, s') = break (== c) s+> in l : case s' of+> [] -> []+> (_:s'') -> split c s''
+ Database/HsSqlPpp/TypeChecking.ag view
@@ -0,0 +1,1091 @@+{-+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 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...).++The main current limitation is that the ddl statements aren't passed+on in the scope so e.g. it doesn't type check a create table followed+by a select from that table. The support for this is nearly complete+and it should be working very soon.++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.++================================================================================++= main attributes used++Here are the main attributes used in the type checking:++sourcePos - holds the source position used in messages, not very+accurate at the moment, just gives you the position of the first+character in the current statement++actual value - add this to all nodes out of laziness. We use these+values in a limited number of places in the code++-}++ATTR AllNodes+ [ sourcePos: MySourcePos+ |+ |+ ]++ATTR AllNodes Root ExpressionRoot+ [ scope : Scope+ |+ | actualValue: SELF+ ]++{-++Node types++Just a hack to get started, provide a default type to each node (even+though it doesn't make sense for a lot of them), and provide default+rules for this attribute, even though this also doesn't make a lot of+sense. Will be reviewed and removed quite soon. (Some nodes will keep+the node type attribute, most will lose it.)++-}++ATTR NonListNodes Root ExpressionRoot+ [+ |+ | nodeType USE {`setUnknown`} {UnknownType} : {Type}+ ]++ATTR ListNodes+ [+ |+ | nodeType USE {`appendTypeList`} {TypeList []} : {Type}+ ]++{+setUnknown :: Type -> Type -> Type+setUnknown _ _ = UnknownType++appendTypeList :: Type -> Type -> Type+appendTypeList t1 (TypeList ts) = TypeList (t1:ts)+appendTypeList t1 t2 = TypeList [t1,t2]+}++{-+================================================================================++= statement info++slightly hacky, to support adding useful comments to sql source,+create a new data type which is more descriptive than Type, so+statements can expose information here. E.g. a create table can expose+the table name, a create function can expose the function prototype++This will evolve into the main annotation data type which is used to+supply information, e.g. to intersperse into some sql source, or to+get back info on an individual sql statement interactively in an ide.++-}++{+data StatementInfo = DefaultStatementInfo Type+ | RelvarInfo CompositeDef+ | CreateFunctionInfo FunctionPrototype+ | SelectInfo Type+ | InsertInfo String Type+ | UpdateInfo String Type+ | DeleteInfo String+ | CreateDomainInfo String Type+ | DropInfo [(String,String)]+ | DropFunctionInfo [(String,[Type])]+ deriving (Eq,Show)+}++{+--use this to make sure type errors are propagated into the statement+--infos, temporary++makeStatementInfo :: Type -> StatementInfo -> StatementInfo+makeStatementInfo ty st =+ if isError ty+ then DefaultStatementInfo ty+ else st+ where+ isError t = case t of+ TypeError _ _ -> True+ TypeList ts -> any isError ts+ _ -> False+}++ATTR Statement+ [+ | backType : Type+ | statementInfo : StatementInfo+ ]++ATTR SourcePosStatement+ [+ |+ | statementInfo : StatementInfo+ ]++ATTR Root StatementList+ [+ |+ | statementInfo : {[StatementInfo]}+ ]++SEM StatementList+ | Nil lhs.statementInfo = []+ | Cons lhs.statementInfo = @hd.statementInfo : @tl.statementInfo+++-- don't know how to copy the nodetype to the statement info in the+-- sem statement so bounce it out then back in like this+SEM SourcePosStatement+ | Tuple x2.backType = @x2.nodeType++SEM Statement+ | Copy CopyData Truncate+ DropFunction DropSomething Assignment Return ReturnNext ReturnQuery+ Raise NullStatement Perform Execute ExecuteInto ForSelectStatement+ ForIntegerStatement WhileStatement ContinueStatement CaseStatement+ If lhs.statementInfo = DefaultStatementInfo @lhs.backType++{-++some helpers++-}+SEM MaybeExpression+ | Just lhs.nodeType = @just.nodeType+ | Nothing lhs.nodeType = TypeList []++ATTR StringList+ [+ |+ | strings : {[String]}+ ]++SEM StringList+ | Cons lhs.strings = @hd : @tl.strings+ | Nil lhs.strings = []++{-++================================================================================++semantics for source positions++source positions aren't collected by the parser properly yet, so we+just get what's available and propagate that. All the type errors+should collect the source position information properly, so when it+appears in the ast nodes, we can hook it up here and the errors should+start giving accurate positions.++-}++SEM SourcePosStatement+ | Tuple x2.sourcePos = @x1++SEM Root+ | Root statements.sourcePos = ("",0,0)++SEM ExpressionRoot+ | ExpressionRoot expr.sourcePos = ("",0,0)++{-+================================================================================++= some basic typing++== type names++Types with type modifiers (called PrecTypeName here, to be changed),+are not supported at the moment.++-}++SEM TypeName+ | SimpleTypeName+ --this needs to work a bit better, a simpletypename can match+ --domains, composite types, etc., not just scalar types+ lhs.nodeType = lookupTypeByName @lhs.scope @lhs.sourcePos $ canonicalizeTypeName @tn+-- | PrecTypeName+-- lhs.nodeType = if @tn `elem` defaultTypes+-- then ScalarType @tn+-- else TypeError @lhs.sourcePos+-- (UnknownTypeError @tn)+ | ArrayTypeName+ lhs.nodeType = let t = ArrayType @typ.nodeType+ in checkErrors+ [@typ.nodeType+ ,checkTypeExists @lhs.scope @lhs.sourcePos t]+ t+ | SetOfTypeName+ lhs.nodeType = checkErrors [@typ.nodeType]+ (SetOfType @typ.nodeType)++{-+== literals+-}++SEM Expression+ | IntegerLit lhs.nodeType = typeInt+ | StringLit lhs.nodeType = UnknownStringLit+ | FloatLit lhs.nodeType = typeNumeric+ | BooleanLit lhs.nodeType = typeBool+ -- I think a null types like an unknown string lit+ | NullLit lhs.nodeType = UnknownStringLit++++{-+================================================================================++= expressions++== cast expression++-}++SEM Expression+ | Cast lhs.nodeType = checkErrors [@expr.nodeType]+ @tn.nodeType++{-+== operators and functions+-}++SEM Expression+ | FunCall lhs.nodeType =+ checkErrors [@args.nodeType] $+ typeCheckFunCall+ @lhs.scope+ @lhs.sourcePos+ @funName+ @args.nodeType++{-+== 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.++so, the caseexpressionlistexpressionpair items each set their node+type to a typelist with two elements, the first is a typelist of the+when expressions, and the second is the type of the then+expression. These can then be checked appropriately in the case or+casesimple sem code.++-}++SEM Expression+ | Case lhs.nodeType =+ let elseThen =+ case @els.nodeType of+ TypeList [] -> []+ t -> [t]+ unwrappedLists = map unwrapTypeList $ unwrapTypeList @cases.nodeType+ whenTypes :: [Type]+ whenTypes = concat $ map unwrapTypeList $ map head unwrappedLists+ thenTypes :: [Type]+ thenTypes = map (head . tail) unwrappedLists ++ elseThen+ whensAllBool :: Type+ whensAllBool = if any (/= typeBool) whenTypes+ then TypeError @lhs.sourcePos+ (WrongTypes typeBool whenTypes)+ else TypeList []+ in checkErrors (whenTypes ++ thenTypes ++ [whensAllBool]) $+ resolveResultSetType+ @lhs.scope+ @lhs.sourcePos+ thenTypes++SEM Expression+ | CaseSimple lhs.nodeType =+ let elseThen =+ case @els.nodeType of+ TypeList [] -> []+ t -> [t]+ unwrappedLists = map unwrapTypeList $ unwrapTypeList @cases.nodeType+ whenTypes :: [Type]+ whenTypes = concat $ map unwrapTypeList $ map head unwrappedLists+ thenTypes :: [Type]+ thenTypes = map (head . tail) unwrappedLists ++ elseThen+ checkWhenTypes = resolveResultSetType+ @lhs.scope+ @lhs.sourcePos+ (@value.nodeType:whenTypes)+ in checkErrors (whenTypes ++ thenTypes ++ [checkWhenTypes]) $+ resolveResultSetType+ @lhs.scope+ @lhs.sourcePos+ thenTypes+++{-+== identifiers+pull id types out of scope for identifiers++-}++SEM Expression+ | Identifier lhs.nodeType =+ let (correlationName,iden) = splitIdentifier @i+ in scopeLookupID @lhs.scope @lhs.sourcePos correlationName iden++{+-- 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)+}++SEM Expression+ | Exists lhs.nodeType = checkErrors [@sel.nodeType] typeBool++{-+== scalar subquery+1 col -> type of that col+2 + cols -> row type+-}++SEM Expression+ | ScalarSubQuery+ lhs.nodeType = let f = map snd $ unwrapComposite $ unwrapSetOf @sel.nodeType+ in checkErrors [@sel.nodeType] $+ case length f of+ 0 -> error "internal error: no columns in scalar subquery?"+ 1 -> head f+ _ -> RowCtor f+{-+== inlist+-}+SEM Expression+ | InPredicate+ lhs.nodeType =+ let er = resolveResultSetType+ @lhs.scope+ @lhs.sourcePos+ [@expr.nodeType, @list.nodeType]+ in checkErrors [er] typeBool++SEM InList+ | InList+ lhs.nodeType = resolveResultSetType+ @lhs.scope+ @lhs.sourcePos+ $ unwrapTypeList @exprs.nodeType+ | InSelect lhs.nodeType =+ let attrs = map snd $ unwrapComposite $ unwrapSetOf $ @sel.nodeType+ in case length attrs of+ 0 -> error "internal error - got subquery with no columns? in inselect"+ 1 -> head attrs+ _ -> RowCtor attrs++{-+================================================================================++= basic select statements++== nodeTypes++-}++SEM Statement+ | SelectStatement lhs.nodeType = @ex.nodeType+ lhs.statementInfo = makeStatementInfo @lhs.backType $ SelectInfo @ex.nodeType++SEM SelectExpression+ --assume we get TypeList (TypeList (Type)) out of vll+ | Values lhs.nodeType =+ checkErrors [@vll.nodeType] $+ typeCheckValuesExpr+ @lhs.scope+ @lhs.sourcePos+ @vll.nodeType+ | Select+ lhs.nodeType = checkErrors+ [@selTref.nodeType+ ,@selSelectList.nodeType+ ,@selWhere.nodeType]+ (let t = @selSelectList.nodeType+ in case t of+ UnnamedCompositeType [(_,Pseudo Void)] -> Pseudo Void+ _ -> SetOfType @selSelectList.nodeType)+ | CombineSelect lhs.nodeType =+ checkErrors [@sel1.nodeType,@sel2.nodeType] $+ typeCheckCombineSelect+ @lhs.scope+ @lhs.sourcePos+ @sel1.nodeType+ @sel2.nodeType++SEM TableRef+ | SubTref lhs.nodeType = checkErrors [@sel.nodeType] $ unwrapSetOfComposite @sel.nodeType+ lhs.idens = [(@alias, (unwrapComposite $ unwrapSetOf @sel.nodeType, []))]+ lhs.joinIdens = []+ | TrefAlias Tref+ lhs.nodeType = fst $ getRelationType @lhs.scope @lhs.sourcePos @tbl+ lhs.joinIdens = []+ | Tref+ lhs.idens = [(@tbl, both unwrapComposite $ getRelationType @lhs.scope @lhs.sourcePos @tbl)]+ | TrefAlias+ lhs.idens = [(@alias, both unwrapComposite $ getRelationType @lhs.scope @lhs.sourcePos @tbl)]+ | TrefFun+ lhs.nodeType = getFnType @lhs.scope @lhs.sourcePos "" @fn.actualValue @fn.nodeType+ lhs.joinIdens = []+ lhs.idens = [second (\l -> (unwrapComposite l, [])) $ getFunIdens @lhs.scope @lhs.sourcePos "" @fn.actualValue @fn.nodeType]+ | TrefFunAlias+ lhs.nodeType = getFnType @lhs.scope @lhs.sourcePos @alias @fn.actualValue @fn.nodeType+ lhs.joinIdens = []+ lhs.idens = [second (\l -> (unwrapComposite l, [])) $ getFunIdens @lhs.scope @lhs.sourcePos @alias @fn.actualValue @fn.nodeType]+ | JoinedTref+ lhs.nodeType =+ checkErrors [@tbl.nodeType+ ,@tbl1.nodeType]+ ret+ where+ ret = case (@nat.actualValue, @onExpr.actualValue) of+ (Natural, _) -> unionJoinList $ commonFieldNames+ @tbl.nodeType+ @tbl1.nodeType+ (_,Just (JoinUsing s)) -> unionJoinList s+ _ -> unionJoinList []+ unionJoinList s = combineTableTypesWithUsingList+ @lhs.scope+ @lhs.sourcePos+ s+ @tbl.nodeType+ @tbl1.nodeType+ lhs.idens = @tbl.idens ++ @tbl1.idens+ lhs.joinIdens = commonFieldNames @tbl.nodeType @tbl1.nodeType+{+--returns the type of the relation, and the system columns also+getRelationType :: Scope -> MySourcePos -> String -> (Type,Type)+getRelationType scope sp tbl =+ case getAttrs scope [TableComposite, ViewComposite] tbl of+ Just ((_,_,a@(UnnamedCompositeType _))+ ,(_,_,s@(UnnamedCompositeType _)) ) -> (a,s)+ _ -> (TypeError sp (UnrecognisedRelation tbl), TypeList [])++getFnType :: Scope -> MySourcePos -> String -> Expression -> Type -> Type+getFnType scope sp alias fnVal fnType =+ checkErrors [fnType] $ snd $ getFunIdens scope sp alias fnVal fnType++getFunIdens :: Scope -> MySourcePos -> String -> Expression -> Type -> (String, Type)+getFunIdens scope sp alias fnVal fnType =+ case fnVal of+ FunCall f _ ->+ let correlationName = if alias /= ""+ then alias+ else f+ in (correlationName, case fnType of+ SetOfType (CompositeType t) -> getCompositeType t+ SetOfType x -> UnnamedCompositeType [(correlationName,x)]+ y -> UnnamedCompositeType [(correlationName,y)])+ x -> ("", TypeError sp (ContextError "FunCall"))+ where+ getCompositeType t =+ case getAttrs scope [Composite+ ,TableComposite+ ,ViewComposite] t of+ Just ((_,_,a@(UnnamedCompositeType _)), _) -> a+ _ -> UnnamedCompositeType []++commonFieldNames t1 t2 =+ intersect (fn t1) (fn t2)+ where+ fn (UnnamedCompositeType s) = map fst s+ fn _ = []++both :: (a->b) -> (a,a) -> (b,b)+both fn (x,y) = (fn x, fn y)++}++++SEM MTableRef+ | Nothing lhs.nodeType = TypeList []+ lhs.idens = []+ lhs.joinIdens = []+ | Just lhs.nodeType = @just.nodeType+++SEM Where+ | Nothing lhs.nodeType = typeBool+ | Just lhs.nodeType =+ checkErrors+ [@just.nodeType]+ (if @just.nodeType /= typeBool+ then TypeError @lhs.sourcePos ExpressionMustBeBool+ else typeBool)++SEM SelectItem+ | SelExp SelectItem lhs.nodeType = @ex.nodeType++SEM SelectItemList+ | Cons lhs.nodeType =+ foldr consComposite @tl.nodeType+ (let (correlationName,iden) = splitIdentifier @hd.columnName+ in if iden == "*"+ then scopeExpandStar @lhs.scope @lhs.sourcePos correlationName+ else [(iden, @hd.nodeType)])+ | Nil lhs.nodeType = UnnamedCompositeType []++SEM SelectList+ | SelectList lhs.nodeType = @items.nodeType++{-++== scope passing++scope 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)++ 1. from+ 2. where+ 3. group by+ 4. having+ 5. select++-}++ATTR TableRef+ [+ |+ | idens : {[QualifiedScope]} joinIdens : {[String]}+ ]++ATTR MTableRef+ [+ |+ | idens : {[QualifiedScope]} joinIdens : {[String]}+ ]+++SEM SelectExpression+ | Select+ selSelectList.scope = scopeReplaceIds @lhs.scope @selTref.idens @selTref.joinIdens+ selWhere.scope = scopeReplaceIds @lhs.scope @selTref.idens @selTref.joinIdens++{-++== attributes++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++ATTR Expression+ [+ |+ | liftedColumnName USE {`(fixedValue "")`} {""}: String+ ]++{+fixedValue :: a -> a -> a -> a+fixedValue a _ _ = a+}++{-+override for identifier nodes, this only makes it out to the selectitem+node if the identifier is not wrapped in parens, function calls, etc.+-}++SEM Expression+ | Identifier lhs.liftedColumnName = @i+ | FunCall lhs.liftedColumnName =+ if isOperator @funName+ then ""+ else @funName+ | Cast lhs.liftedColumnName = case @tn.actualValue of+ SimpleTypeName tn -> tn+ _ -> ""++-- 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++{-+================================================================================++= insert++-}++SEM Statement+ | Insert+ lhs.nodeType = checkErrors [checkTableExists @lhs.scope @lhs.sourcePos @table+ ,@insData.nodeType+ ,checkColumnConsistency @lhs.scope @lhs.sourcePos @table @targetCols.strings (unwrapComposite $ unwrapSetOf @insData.nodeType)]+ @insData.nodeType+ lhs.statementInfo =+ makeStatementInfo @lhs.backType $ InsertInfo @table $ UnnamedCompositeType $ getColumnTypes @lhs.scope @lhs.sourcePos @table @targetCols.strings++{+checkTableExists :: Scope -> MySourcePos -> String -> Type+checkTableExists scope sp tbl =+ case getAttrs scope [TableComposite, ViewComposite] tbl of+ Just _ -> TypeList []+ _ -> TypeError sp (UnrecognisedRelation tbl)++checkColumnConsistency :: Scope -> MySourcePos -> String -> [String] -> [(String,Type)] -> Type+checkColumnConsistency scope sp tbl cols' insNameTypePairs =+ let --todo: check the cols have no duplicates+ --todo: check the missing target cols have defaults+ targetTableType = fst $ getRelationType scope sp tbl+ targetTableCols = unwrapComposite targetTableType+ --check the num cols in the insdata match the number of cols+ cols = if null cols'+ then map fst targetTableCols+ else cols'+ wrongLengthError = if length insNameTypePairs /= length cols+ then TypeError sp WrongNumberOfColumns+ else TypeList []+ --check the target cols appear in the target table and get their types+ nonMatchingColumns = cols \\ map fst targetTableCols+ nonMatchingErrors = case length nonMatchingColumns of+ 0 -> TypeList []+ 1 -> makeUnknownColumnError $ head nonMatchingColumns+ _ -> TypeList $ map makeUnknownColumnError nonMatchingColumns+ targetNameTypePairs = map (\l -> (l, fromJust $ lookup l targetTableCols)) 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+ matchingTypeErrors = map (\(_,b,c) -> checkAssignmentValid scope sp c b) typeTriples+ in checkErrors [targetTableType+ ,wrongLengthError+ ,nonMatchingErrors+ ,TypeList matchingTypeErrors] $ TypeList []+ where+ makeUnknownColumnError = TypeError sp . UnrecognisedIdentifier++getColumnTypes :: Scope -> MySourcePos -> String -> [String] -> [(String,Type)]+getColumnTypes scope sp tbl cols' =+ let targetTableType = fst $ getRelationType scope sp tbl+ targetTableCols = unwrapComposite targetTableType+ cols = if null cols'+ then map fst targetTableCols+ else cols'+ nonMatchingColumns = cols \\ map fst targetTableCols+ nonMatchingErrors = case length nonMatchingColumns of+ 0 -> TypeList []+ 1 -> makeUnknownColumnError $ head nonMatchingColumns+ _ -> TypeList $ map makeUnknownColumnError nonMatchingColumns+ in map (\l -> (l, fromJust $ lookup l targetTableCols)) cols+ where+ makeUnknownColumnError = TypeError sp . UnrecognisedIdentifier+}++{-+================================================================================++= update++-}+SEM Statement+ | Update+ lhs.nodeType =+ checkErrors [checkTableExists @lhs.scope @lhs.sourcePos @table+ ,@whr.nodeType+ ,@assigns.nodeType+ ,checkColumnConsistency @lhs.scope @lhs.sourcePos+ @table colNames colTypes]+ @assigns.nodeType+ where+ colNames = map fst @assigns.pairs+ colTypes = @assigns.pairs+ lhs.statementInfo =+ makeStatementInfo @lhs.backType $ UpdateInfo @table $+ UnnamedCompositeType $ getColumnTypes @lhs.scope @lhs.sourcePos @table $ map fst @assigns.pairs++ATTR SetClauseList+ [+ |+ | pairs : {[(String,Type)]}+ ]++ATTR SetClause+ [+ |+ | pairs : {[(String,Type)]}+ ]++SEM SetClauseList+ | Cons lhs.pairs = @hd.pairs ++ @tl.pairs+ | Nil lhs.pairs = []++SEM SetClause+ | SetClause+ lhs.nodeType = checkErrors [@val.nodeType] $ TypeList []+ lhs.pairs = [(@att, @val.nodeType)]+ | RowSetClause+ lhs.nodeType =+ let atts = @atts.strings+ types = getRowTypes @vals.nodeType+ lengthError = if length atts /= length types+ then TypeError @lhs.sourcePos WrongNumberOfColumns+ else TypeList []+ in checkErrors [lengthError] $ TypeList []+ lhs.pairs = zip @atts.strings $ getRowTypes @vals.nodeType++{+getRowTypes :: Type -> [Type]+getRowTypes (TypeList [(RowCtor ts)]) = ts+getRowTypes (TypeList ts) = ts+getRowTypes x = error $ "cannot get row types from " ++ show x+}++{-+================================================================================++= delete+-}++SEM Statement+ | Delete+ lhs.nodeType =+ checkErrors [checkTableExists @lhs.scope @lhs.sourcePos @table+ ,@whr.nodeType]+ $ TypeList []+ lhs.statementInfo =+ makeStatementInfo @lhs.backType $ DeleteInfo @table++{-+================================================================================++= create table++scope needs to be modified:+types, typenames, typecats, attrdefs, systemcolumns++produces a compositedef: (name, tablecomposite, unnamedcomp [(attrname, type)])++-}++ATTR AttributeDef+ [+ |+ | attrName : String+ ]++SEM AttributeDef+ | AttributeDef+ lhs.attrName = @name+ lhs.nodeType = @typ.nodeType++SEM AttributeDefList+ | Cons lhs.nodeType =+ checkErrors [@tl.nodeType, @hd.nodeType] $+ consComposite (@hd.attrName, @hd.nodeType) @tl.nodeType+ | Nil lhs.nodeType = UnnamedCompositeType []++SEM Statement+ | CreateTable lhs.nodeType = @atts.nodeType+ lhs.statementInfo = makeStatementInfo @lhs.backType $ RelvarInfo (@name, TableComposite, @atts.nodeType)+++SEM Statement+ | CreateTableAs lhs.statementInfo = makeStatementInfo @lhs.backType $ RelvarInfo (@name, TableComposite, @expr.nodeType)+++{-+================================================================================++= create view++-}++SEM Statement+ | CreateView lhs.statementInfo = makeStatementInfo @lhs.backType $ RelvarInfo (@name, ViewComposite, @expr.nodeType)+++{-+================================================================================++= create type++-}++ATTR TypeAttributeDef+ [+ |+ | attrName : String+ ]+++SEM TypeAttributeDef+ | TypeAttDef+ lhs.nodeType = @typ.nodeType+ lhs.attrName = @name++SEM TypeAttributeDefList+ | Cons lhs.nodeType =+ checkErrors [@tl.nodeType, @hd.nodeType] $+ consComposite (@hd.attrName, @hd.nodeType) @tl.nodeType+ | Nil lhs.nodeType = UnnamedCompositeType []++SEM Statement+ | CreateType+ lhs.statementInfo = makeStatementInfo @lhs.backType $ RelvarInfo (@name, Composite, @atts.nodeType)++{-+================================================================================++= create domain++-}++SEM Statement+ | CreateDomain+ lhs.statementInfo = makeStatementInfo @lhs.backType $ CreateDomainInfo @name @typ.nodeType++{-+================================================================================++= create function++ignore body for now, just get the signature+-}++ATTR ParamDef+ [+ |+ | paramName : String+ ]++ATTR ParamDefList+ [+ |+ | params : {[(String,Type)]}+ ]++SEM ParamDef+ | ParamDef ParamDefTp+ lhs.nodeType = @typ.nodeType+ | ParamDef+ lhs.paramName = @name+ | ParamDefTp+ lhs.paramName = ""++SEM ParamDefList+ | Nil lhs.params = []+ | Cons lhs.params = ((@hd.paramName, @hd.nodeType) : @tl.params)++SEM Statement+ | CreateFunction+ lhs.statementInfo =+ makeStatementInfo @lhs.backType $ CreateFunctionInfo (@name,map snd @params.params,@rettype.nodeType)+++{-+================================================================================++= 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.++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.++Both the workarounds to these seem a bit tedious and error prone, and+will make the code much less readable. Maybe need a preprocessor to+produce the ag file? Alternatively, just attach the messages to each+node (so this appears in the data types and isn't an attribute, then+have a tree walker collect them all). Since an annotation field in+each node is going to be added anyway, so each node can be labelled+with a type, will probably do this at some point.++================================================================================++= 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 @lhs.sourcePos 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.+++-}
+ Database/HsSqlPpp/TypeCheckingH.lhs view
@@ -0,0 +1,158 @@+Copyright 2009 Jake Wheat++This file contains some utility functions for working with types and+type checking.++> module Database.HsSqlPpp.TypeCheckingH where++> import Data.Maybe+> import Data.List+> import Debug.Trace++> import Database.HsSqlPpp.TypeType+> import Database.HsSqlPpp.Scope+> import Database.HsSqlPpp.AstUtils+> import Database.HsSqlPpp.TypeConversion++================================================================================++= type check code++idea is to move these here from TypeChecking.ag if they get a bit big,+not very consistently applied at the moment.++> typeCheckFunCall :: Scope -> MySourcePos -> String -> Type -> Type+> typeCheckFunCall scope sp fnName argsType' =+> checkErrors [argsType'] ret+> where+> argsType = unwrapTypeList argsType'+> ret = case fnName of++do the special cases first, some of these will use the variadic support+when it is done and no longer be special cases.++> "!arrayCtor" -> let t = resolveResultSetType scope sp argsType+> in checkErrors [t] $ ArrayType t+> "!between" -> let f1 = lookupFn ">=" [argsType !! 0, argsType !! 1]+> f2 = lookupFn "<=" [argsType !! 0, argsType !! 2]+> f3 = lookupFn "!and" [f1,f2]+> in checkErrors [f1,f2] f3+> "coalesce" -> let t = resolveResultSetType scope sp argsType+> in checkErrors [t] t+> "greatest" -> let t = resolveResultSetType scope sp argsType+> f1 = lookupFn ">=" [t,t]+> in checkErrors [t, f1] t+> "least" -> let t = resolveResultSetType scope sp argsType+> f1 = lookupFn "<=" [t,t]+> in checkErrors [t, f1] t+> "!rowCtor" -> RowCtor argsType++special case the row comparison ops++> _ | let isRowCtor t = case t of+> RowCtor _ -> True+> _ -> False+> in fnName `elem` ["=", "<>", "<=", ">=", "<", ">"]+> && length argsType == 2+> && all isRowCtor argsType ->+> checkRowTypesMatch (head argsType) (head $ tail argsType)++> s -> lookupFn s argsType+> lookupFn s1 args = case findCallMatch scope sp+> (if s1 == "u-" then "-" else s1) args of+> Left te -> te+> Right (_,_,r) -> r+> checkRowTypesMatch (RowCtor t1s) (RowCtor t2s) =+> let e1 = if length t1s /= length t2s+> then TypeError sp ValuesListsMustBeSameLength+> else TypeList []+> t3s = map (resolveResultSetType scope sp . (\(a,b) -> [a,b])) $ zip t1s t2s+> in checkErrors (e1:t3s) typeBool+> checkRowTypesMatch x y =+> error $ "internal error: checkRowTypesMatch called with " ++ show x ++ "," ++ show y+++> typeCheckValuesExpr :: Scope -> MySourcePos -> Type -> Type+> typeCheckValuesExpr scope sp vll =+> let rowsTs1 = unwrapTypeList vll+> --convert into [[Type]]+> rowsTs = map unwrapTypeList rowsTs1+> colNames = zipWith (++)+> (repeat "column")+> (map show [1..length $ head rowsTs])+> in unionRelTypes scope sp rowsTs colNames++> typeCheckCombineSelect :: Scope -> MySourcePos -> Type -> Type -> Type+> typeCheckCombineSelect scope sp v1 v2 =+> let colNames = map fst $ unwrapComposite $ unwrapSetOf v1+> in unionRelTypes scope sp+> (map (map snd . unwrapComposite . unwrapSetOf) [v1,v2])+> colNames++> unionRelTypes :: Scope -> MySourcePos -> [[Type]] -> [String] -> Type+> unionRelTypes scope sp rowsTs colNames =+> let lengths = map length rowsTs+> error1 = case () of+> _ | null rowsTs ->+> TypeError sp NoRowsGivenForValues+> | not (all (==head lengths) lengths) ->+> TypeError sp+> ValuesListsMustBeSameLength+> | otherwise -> TypeList []+> colTypeLists = transpose rowsTs+> colTypes = map (resolveResultSetType scope sp) colTypeLists+> ty = SetOfType $ UnnamedCompositeType $ zip colNames colTypes+> in checkErrors (error1:colTypes) ty++================================================================================++= utils++lookup a composite type name, restricting it to only certain kinds of+composite type, returns the composite definition which you can get the+attributes out of which is a pair with the normal columns first, then+the system columns second++> getAttrs :: Scope -> [CompositeFlavour] -> String -> Maybe (CompositeDef, CompositeDef)+> getAttrs scope f n =+> let a = find (\(nm,fl,_) -> fl `elem` f && nm == n)+> (scopeAttrDefs scope)+> b = find (\(nm,_,_) -> nm == n)+> (scopeAttrSystemColumns scope)+> in case (a,b) of+> (Nothing,_) -> Nothing+> (Just x,Nothing) -> Just (x, (n,TableComposite,UnnamedCompositeType []))+> (Just x,Just y) -> Just (x,y)++combine two relvar types when being joined, pass in a using list and+it checks the types in the using list are compatible, and eliminates+duplicate columns of the attrs in the using list, returns the relvar+type of the joined tables.++> combineTableTypesWithUsingList :: Scope -> MySourcePos -> [String] -> Type -> Type -> Type+> combineTableTypesWithUsingList scope sp l t1c t2c =+> --check t1 and t2 have l+> let t1 = unwrapComposite t1c+> t2 = unwrapComposite t2c+> names1 = getNames t1+> names2 = getNames t2+> error1 = if not (contained l names1) ||+> not (contained l names2)+> then TypeError sp MissingJoinAttribute+> else TypeList []+> --check the types+> joinColumns = map (getColumnType t1 t2) l+> nonJoinColumns =+> let notJoin = (\(s,_) -> s `notElem` l)+> in filter notJoin t1 ++ filter notJoin t2+> in checkErrors [error1]+> (UnnamedCompositeType $ joinColumns ++ nonJoinColumns)+> where+> getNames :: [(String,Type)] -> [String]+> getNames = map fst+> contained l1 l2 = all (`elem` l2) l1+> getColumnType t1 t2 f =+> let ct1 = getFieldType t1 f+> ct2 = getFieldType t2 f+> in (f, resolveResultSetType scope sp [ct1,ct2])+> getFieldType t f = snd $ fromJust $ find (\(s,_) -> s == f) t
+ Database/HsSqlPpp/TypeConversion.lhs view
@@ -0,0 +1,513 @@+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++> module Database.HsSqlPpp.TypeConversion (+> findCallMatch+> ,resolveResultSetType+> ,checkAssignmentValid+> ) where++> import Data.Maybe+> import Data.List++> import Database.HsSqlPpp.TypeType+> import Database.HsSqlPpp.Scope+> import Database.HsSqlPpp.AstUtils+++= 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++> type ProtArgCast = (FunctionPrototype, [ArgCastFlavour])++> findCallMatch :: Scope -> MySourcePos -> String -> [Type] -> Either Type FunctionPrototype+> findCallMatch scope sp f inArgs =+> returnIfOnne [+> exactMatch+> ,binOp1UnknownMatch+> ,polymorpicExactMatches+> ,reachable+> ,mostExactMatches+> ,filteredForPreferred+> ,unknownMatchesByCat]+> (TypeError sp (NoMatchingOperator f inArgs))+> where+> -- basic lists which roughly mirror algo+> -- get the possibly matching candidates+> initialCandList :: [FunctionPrototype]+> initialCandList = filter (\(candf,candArgs,_) ->+> (candf,length candArgs) == (f,length inArgs))+> allFns+>+> -- record what casts are needed for each candidate+> castPairs :: [[ArgCastFlavour]]+> castPairs = map (listCastPairs . getFnArgs) initialCandList+>+> candCastPairs :: [ProtArgCast]+> 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 scope) inArgs+> exactCounts :: [Int]+> exactCounts =+> map ((length+> . filter (\(a1,a2) -> a1==replaceWithBase scope 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+> | implicitlyCastableFromTo scope ia ca ->+> if isPreferredType scope 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 (isOperator f &&+> length inArgs == 2 &&+> count (==UnknownStringLit) inArgs == 1)+> then []+> else let newInArgs =+> replicate 2 (if head inArgs == UnknownStringLit+> 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 = catMaybes $ flip map argPairs+> (\(ia,fa) -> case fa of+> Pseudo Any -> if isArrayType ia+> then Just $ unwrapArray ia+> else Just ia+> Pseudo AnyArray -> Just $ unwrapArray ia+> Pseudo AnyElement -> if isArrayType ia+> then Just $ unwrapArray ia+> else Just ia+> Pseudo AnyEnum -> Nothing+> Pseudo AnyNonArray -> Just ia+> _ -> Nothing)+> in {-trace ("\nresolve types: " ++ show typeList ++ "\n") $-}+> case resolveResultSetType scope sp typeList of+> UnknownType -> Nothing+> TypeError _ _ -> Nothing+> x -> Just x+> instantiatePolyType :: ProtArgCast -> Type -> ProtArgCast+> instantiatePolyType pac t =+> let ((fn,a,r),_) = pac+> instArgs = swapPolys t a+> p1 = (fn, instArgs, swapPoly t r)+> 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 /= UnknownStringLit+> then Left ()+> else getCandsCatAt n) : filterArgN (n+1))+> where+> getCandsCatAt :: Int -> Either () String+> getCandsCatAt n' =+> let typesAtN = map (!!n') candArgLists+> catsAtN = map (getTypeCategory scope) 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) /= UnknownStringLit -> getMatches cands (n + 1)+> | otherwise ->+> let catMatches :: [ProtArgCast]+> catMatches = filter (\c -> Right (getCatForArgN n c) ==+> (cats !! n)) cands+> prefMatches :: [ProtArgCast]+> prefMatches = filter (isPreferredType scope .+> 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 = getTypeCategory scope . 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+> allFns = keywordOperatorTypes ++ specialFunctionTypes ++ scopeAllFns scope++> none p = not . any p+> count p = length . filter p+>+> data ArgCastFlavour = ExactMatch+> | CannotCast+> | ImplicitToPreferred+> | ImplicitToNonPreferred+> deriving (Eq,Show)+>+> isPreferredType :: Scope -> Type -> Bool+> isPreferredType scope t = case find (\(t1,_,_)-> t1==t) (scopeTypeCategories scope) of+> Nothing -> error $ "internal error: couldn't find type category information: " ++ show t+> Just (_,_,p) -> p+>+> getTypeCategory :: Scope -> Type -> String+> getTypeCategory scope t = case find (\(t1,_,_)-> t1==t) (scopeTypeCategories scope) of+> Nothing -> error $ "internal error: couldn't find type category information: " ++ show t+> Just (_,c,_) -> c+>+>+> implicitlyCastableFromTo :: Scope -> Type -> Type -> Bool+> implicitlyCastableFromTo scope from to = from == UnknownStringLit ||+> any (==(from,to,ImplicitCastContext)) (scopeCasts scope)+>+++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 :: Scope -> MySourcePos -> [Type] -> Type+> resolveResultSetType scope sp inArgs =+> checkErrors [TypeList inArgs] ret+> where+> ret = case () of+> _ | null inArgs -> TypeError sp TypelessEmptyArray+> | allSameType -> head inArgs+> | allSameBaseType -> head inArgsBase+> --todo: do domains+> | allUnknown -> ScalarType "text"+> | not allSameCat ->+> TypeError sp (IncompatibleTypeSet inArgs)+> | isJust targetType &&+> allConvertibleToFrom (fromJust targetType) inArgs ->+> fromJust targetType+> | otherwise -> TypeError sp (IncompatibleTypeSet inArgs)+> allSameType = all (== head inArgs) inArgs &&+> head inArgs /= UnknownStringLit+> allSameBaseType = all (== head inArgsBase) inArgsBase &&+> head inArgsBase /= UnknownStringLit+> inArgsBase = map (replaceWithBase scope) inArgs+> allUnknown = all (==UnknownStringLit) inArgsBase+> allSameCat = let firstCat = getTypeCategory scope (head knownTypes)+> in all (\t -> getTypeCategory scope t == firstCat)+> knownTypes+> targetType = case catMaybes [firstPreferred, lastAllConvertibleTo] of+> [] -> Nothing+> (x:_) -> Just x+> firstPreferred = find (isPreferredType scope) knownTypes+> lastAllConvertibleTo = firstAllConvertibleTo (reverse knownTypes)+> firstAllConvertibleTo (x:xs) = if allConvertibleToFrom x xs+> then Just x+> else firstAllConvertibleTo xs+> firstAllConvertibleTo [] = Nothing+> matchOrImplicitToFrom t t1 = t == t1 ||+> implicitlyCastableFromTo scope t1 t+> knownTypes = filter (/=UnknownStringLit) inArgsBase+> allConvertibleToFrom = all . matchOrImplicitToFrom++> replaceWithBase :: Scope -> Type -> Type+> replaceWithBase scope t@(DomainType _) =+> case lookup t (scopeDomainDefs scope) of+> Nothing -> error $ "internal error - couldn't find base type for " ++ show t+> Just u -> replaceWithBase scope u+> replaceWithBase _ t = t++todo:+row ctor implicitly and explicitly cast to a composite type+cast empty array, where else can an empty array work?++================================================================================++= checkAssignmentValue++assignment is ok if:+types are equal+there is a cast from src to target++> checkAssignmentValid :: Scope -> MySourcePos -> Type -> Type -> Type+> checkAssignmentValid scope sp src tgt =+> case () of+> _ | src == tgt -> TypeList []+> | assignCastableFromTo scope src tgt -> TypeList []+> | otherwise -> TypeError sp (IncompatibleTypes tgt src)++> assignCastableFromTo :: Scope -> Type -> Type -> Bool+> assignCastableFromTo scope from to = from == UnknownStringLit ||+> any (`elem` [(from,to,ImplicitCastContext)+> ,(from,to,AssignmentCastContext)]) (scopeCasts scope)
+ Database/HsSqlPpp/TypeType.lhs view
@@ -0,0 +1,149 @@+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 Ast.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+typelist is an internal type (not a pg type) used during type checking+typeerror represents something which has failed to typecheck+unknowntype is used to represent the type of anything which the code+is currently unable to type check, this should disappear at some+point++The Type type identifies the type of a node, but doesn't necessarily+describe the type.+Arraytype, setoftype and row are treated as type generators, and are+unnamed so have structural equality. Other types sometimes effectively+have structural equality depending on the context...++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.++> module Database.HsSqlPpp.TypeType where++> data Type = ScalarType String+> | ArrayType Type+> | SetOfType Type+> | CompositeType String+> | UnnamedCompositeType [(String,Type)]+> | DomainType String+> | EnumType String+> | RowCtor [Type]+> -- type list is used internally in the type checking.+> | TypeList [Type]+> | Pseudo PseudoType+> | TypeError MySourcePos TypeErrorInfo+> | UnknownType -- represents something which the type checker+> -- doesn't know how to type check+> | UnknownStringLit -- represents a string literal+> -- token whose type isn't yet+> -- determined+> deriving (Eq,Show)++> data PseudoType = Any+> | AnyArray+> | AnyElement+> | AnyEnum+> | AnyNonArray+> | Cstring+> | Record+> | Trigger+> | Void+> | Internal+> | LanguageHandler+> | Opaque+> deriving (Eq,Show)++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 TypeErrorInfo = WrongTypes Type [Type]+> -- | WrongTypeList [Type] [Type]+> -- | WrongNumArgs Int Int+> -- | WrongType Type Type+> -- | NotArrayType Type+> -- | NeedOneOrMoreArgs+> -- | OtherTypeError String+> | UnknownTypeError Type+> | UnknownTypeName String+> -- | OperatorNeeds1Or2Args Int+> | NoMatchingOperator String [Type]+> -- | MultipleMatchingOperators String [Type]+> | TypelessEmptyArray+> | IncompatibleTypeSet [Type]+> | IncompatibleTypes Type Type+> | ValuesListsMustBeSameLength+> | NoRowsGivenForValues+> | UnrecognisedIdentifier String+> | UnrecognisedRelation String+> | UnrecognisedCorrelationName String+> | AmbiguousIdentifier String+> | ContextError String+> | MissingJoinAttribute+> | ExpressionMustBeBool+> | WrongNumberOfColumns+> -- | InternalError String+> deriving (Eq,Show)++need this here because it is used in type errors - this should be+fixed, so a typeerror type doesn't hold location info, we use+(SourcePosInfo, TypeError), not going to worry about this until focus+is on good error messages.++> type MySourcePos = (String, Int, Int)++some random stuff needed here because of compilation orders++cast context - used in the casts catalog++> data CastContext = ImplicitCastContext+> | AssignmentCastContext+> | ExplicitCastContext+> deriving (Eq,Show)++used in the attribute catalog which holds the attribute names and+types of tables, views and other composite types.++> data CompositeFlavour = Composite | TableComposite | ViewComposite+> deriving (Eq,Show)++type is always an UnnamedCompositeType:++> type CompositeDef = (String, CompositeFlavour, Type)++> isOperator :: String -> Bool+> isOperator = any (`elem` "+-*/<>=~!@#%^&|`?")
+ HsSqlPppTests.lhs view
@@ -0,0 +1,20 @@+#!/usr/bin/env runghc++Copyright 2009 Jake Wheat++Runner for automated tests, just pulls in the tests defs from the+other files.+++> import Test.Framework+> import Database.HsSqlPpp.ParserTests+> import Database.HsSqlPpp.DatabaseLoaderTests+> import Database.HsSqlPpp.AstCheckTests++> main :: IO ()+> main =+> defaultMain [+> parserTests+> ,astCheckTests+> ,databaseLoaderTests+> ]
− Tests.lhs
@@ -1,20 +0,0 @@-#!/usr/bin/env runghc--Copyright 2009 Jake Wheat--Runner for automated tests, just pulls in the tests defs from the-other files.---> import Test.Framework-> import Database.HsSqlPpp.ParserTests-> import Database.HsSqlPpp.DatabaseLoaderTests-> import Database.HsSqlPpp.AstCheckTests--> main :: IO ()-> main =-> defaultMain [-> parserTests-> ,astCheckTests-> ,databaseLoaderTests-> ]
hssqlppp.cabal view
@@ -1,5 +1,5 @@ Name: hssqlppp-Version: 0.0.4+Version: 0.0.5 Synopsis: Sql parser, pretty printer and type checker Description: Sql parser, pretty printer and type checker, targets PostGreSQL SQL and PL/pgSQL, uses Parsec and UUAGC. License: BSD3@@ -19,17 +19,25 @@ development, questions, usage,- LICENSE+ LICENSE,+ Database/HsSqlPpp/Ast.ag+ Database/HsSqlPpp/TypeChecking.ag+ Database/HsSqlPpp/DefaultScopeEmpty.hs+ Library Build-Depends: base >= 3 && < 5, mtl, parsec >= 3, pretty, containers- Exposed-modules: Database.HsSqlPpp.Parser,+ Exposed-modules: Database.HsSqlPpp.Ast,+ Database.HsSqlPpp.DefaultScope,+ Database.HsSqlPpp.Lexer,+ Database.HsSqlPpp.ParseErrors,+ Database.HsSqlPpp.Parser, Database.HsSqlPpp.PrettyPrinter,- Database.HsSqlPpp.Ast-+ Database.HsSqlPpp.Scope,+ Database.HsSqlPpp.ScopeReader Executable HsSqlSystem Main-is: HsSqlSystem.lhs@@ -39,13 +47,42 @@ HDBC, HDBC-postgresql, directory- Other-Modules: Database.HsSqlPpp.Parser, Database.HsSqlPpp.PrettyPrinter+ Other-Modules: Database.HsSqlPpp.Ast,+ Database.HsSqlPpp.AstUtils,+ Database.HsSqlPpp.DatabaseLoader,+ Database.HsSqlPpp.DBAccess,+ Database.HsSqlPpp.DefaultScope,+ Database.HsSqlPpp.Lexer,+ Database.HsSqlPpp.ParseErrors,+ Database.HsSqlPpp.Parser,+ Database.HsSqlPpp.PrettyPrinter,+ Database.HsSqlPpp.Scope,+ Database.HsSqlPpp.ScopeReader,+ Database.HsSqlPpp.TypeCheckingH,+ Database.HsSqlPpp.TypeConversion,+ Database.HsSqlPpp.TypeType -Executable Tests- Main-is: Tests.lhs+Executable HsSqlPppTests+ Main-is: HsSqlPppTests.lhs Build-Depends: base, HUnit, test-framework, test-framework-hunit - Other-Modules: Database.HsSqlPpp.Parser, Database.HsSqlPpp.PrettyPrinter+ Other-Modules: Database.HsSqlPpp.AstCheckTests,+ Database.HsSqlPpp.Ast,+ Database.HsSqlPpp.AstUtils,+ Database.HsSqlPpp.DatabaseLoader,+ Database.HsSqlPpp.DatabaseLoaderTests,+ Database.HsSqlPpp.DBAccess,+ Database.HsSqlPpp.DefaultScope,+ Database.HsSqlPpp.Lexer,+ Database.HsSqlPpp.ParseErrors,+ Database.HsSqlPpp.Parser,+ Database.HsSqlPpp.ParserTests,+ Database.HsSqlPpp.PrettyPrinter,+ Database.HsSqlPpp.Scope,+ Database.HsSqlPpp.ScopeReader,+ Database.HsSqlPpp.TypeCheckingH,+ Database.HsSqlPpp.TypeConversion,+ Database.HsSqlPpp.TypeType