*** a/doc/src/sgml/func.sgml --- b/doc/src/sgml/func.sgml *************** *** 10041,10046 **** SELECT count(*) FROM sometable; --- 10041,10155 ---- + + Window Functions + + + Window functions provides facilities of + windowed table calculation, including windowed aggregate and rank. + + The built-in window rank functions are listed in + . + All of aggregate functions in and + can be also used in + windowed table. + + + + General-Purpose Rank Functions + + + + + Function + Return Type + Description + + + + + + + + rank + + rank() OVER (ORDER BY expression) + + + bigint + + number of the row from 1 ordered by expressions, with gaps + + + + + + dense_rank + + dense_rank() OVER (ORDER BY expression) + + + bigint + + number of the row from 1 ordered by expressions, without gaps + + + + + + row_number() + + row_number() OVER (ORDER BY expression) + + + bigint + + number of the row from 1 ordered by expressions, incrementing always + + + + + + percent_rank() + + percent_rank() OVER (ORDER BY expression) + + + double precision + + relative rank of the row between 0 and 1 ordered by expressions, with gap + + + + + + cume_dist() + + cume_dist() OVER (ORDER BY expression) + + + double precision + + relative rank of the row between 0 and 1 ordered by expressions, without gap + + + + + + ntile() + + ntile(integer) OVER (ORDER BY expression) + + + integer + + integer value ranging from 1 to the argument integer, equally dividing the window partition + + + +
+ +
Subquery Expressions *** a/doc/src/sgml/keywords.sgml --- b/doc/src/sgml/keywords.sgml *************** *** 1510,1516 **** EXCLUDE ! non-reserved --- 1510,1516 ---- EXCLUDE ! non-reserved non-reserved *************** *** 2868,2874 **** OTHERS ! non-reserved --- 2868,2874 ---- OTHERS ! non-reserved non-reserved *************** *** 2896,2902 **** OVER ! reserved --- 2896,2902 ---- OVER ! non-reserved reserved *************** *** 3015,3021 **** PARTITION ! reserved --- 3015,3021 ---- PARTITION ! reserved reserved *************** *** 3106,3112 **** PRECEDING ! non-reserved --- 3106,3112 ---- PRECEDING ! reserved non-reserved *************** *** 3204,3210 **** RANGE ! reserved --- 3204,3210 ---- RANGE ! reserved reserved *************** *** 4128,4134 **** TIES ! non-reserved --- 4128,4134 ---- TIES ! non-reserved non-reserved *************** *** 4317,4323 **** UNBOUNDED ! non-reserved --- 4317,4323 ---- UNBOUNDED ! non-reserved non-reserved *************** *** 4590,4596 **** WINDOW ! reserved --- 4590,4596 ---- WINDOW ! reserved reserved *** a/doc/src/sgml/query.sgml --- b/doc/src/sgml/query.sgml *************** *** 805,810 **** SELECT city, max(temp_lo) --- 805,909 ---- + + Window Functions + + + A window function is the operation across a set of rows in + a windowed table. This may sound similar to aggregate functions, + but contrast to that window functions don't reduce rows. + Additionally, window functions can compute different results + row by row. + + + + Here is an example that shows how to compare each employee's salary + with the department average salary. + + + SELECT depname, empno, salary, avg(salary) OVER (PARTITION BY depname) FROM empsalary; + + + + depname | empno | salary | avg + -----------+-------+--------+----------------------- + develop | 11 | 5200 | 5020.0000000000000000 + develop | 7 | 4200 | 5020.0000000000000000 + develop | 9 | 4500 | 5020.0000000000000000 + develop | 8 | 6000 | 5020.0000000000000000 + develop | 10 | 5200 | 5020.0000000000000000 + personnel | 5 | 3500 | 3700.0000000000000000 + personnel | 2 | 3900 | 3700.0000000000000000 + sales | 3 | 4800 | 4866.6666666666666667 + sales | 1 | 5000 | 4866.6666666666666667 + sales | 4 | 4800 | 4866.6666666666666667 + (10 rows) + + + avg works exact same as the aggregate functions + except it doesn't reduce rows and returns same result within the + same depname. Without reducing rows, + it is possible to compare the original salary + with each department's average salary. + + + + Another expample shows different capability of window functions + from above. + + + SELECT depname, empno, salary, rank() OVER (PARTITION BY depname ORDER BY salary DESC) FROM empsalary; + + + + depname | empno | salary | rank + -----------+-------+--------+------ + develop | 8 | 6000 | 1 + develop | 10 | 5200 | 2 + develop | 11 | 5200 | 2 + develop | 9 | 4500 | 4 + develop | 7 | 4200 | 5 + personnel | 2 | 3900 | 1 + personnel | 5 | 3500 | 2 + sales | 1 | 5000 | 1 + sales | 4 | 4800 | 2 + sales | 3 | 4800 | 2 + (10 rows) + + + rank returns offset position of the row when + the rows in the partition are ordered by the specified value. In this case, + in each department each employee's salary rank with gap is shown. + + + + Window functions are put in the SELECT list. + It is forbidden anywhere else such as GROUP BY, + HAVING and WHERE clauses. + The arguments passed to window functions and the expressions in + PARTITION BY and ORDER BY + of a window definition can be the results of aggregate functions. + But window functions may not be placed as aggregate functions' + arguments. All of window functions are evaluated after aggregate. + + + + In a query, windows can be defined as many as needed. The order + of the evaluation for each window is implicitly determined by + backend, which means there is no way to predict its order. + + + + The same window definitions can be named and put togather into one + definition using WINDOWclause. + + + SELECT sum(salary) OVER w, avg(salary) OVER w FROM empsalary WINDOW w AS (PARTITION BY depname); + + + The two of functions are evaluated in the same window. + + Updates *** a/doc/src/sgml/ref/select.sgml --- b/doc/src/sgml/ref/select.sgml *************** *** 27,32 **** SELECT [ ALL | DISTINCT [ ON ( expressioncondition ] [ GROUP BY expression [, ...] ] [ HAVING condition [, ...] ] + [ WINDOW window_name AS ( window_definition ) [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL ] select ] [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ] [ LIMIT { count | ALL } ] *************** *** 551,556 **** HAVING condition --- 552,589 ---- + + <literal>WINDOW</literal> Clause + + + The optional WINDOW clause has the general form + + WINDOW window_name AS (window_definition) [, ...] + + where window_name is + the window name that is referred from windowed functions, and + window_definition is described as follows: + + + [ PARTITION BY expression [, ...] ] + [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ] + + where the first expression is the same as + one in GROUP BY and the second is the same as + one in ORDER BY of the SELECT. + Either of two must be specified. + + + + When the window functions with OVER clause in the + SELECT list refers to a window name, WINDOW + clause must describe what the windowed table is like. If some of the + window names are not referred from any of the window function calls, + they will be just ignored. In the window definition the expressions + are allowed to be aggregated. + + + <command>SELECT</command> List *** a/doc/src/sgml/syntax.sgml --- b/doc/src/sgml/syntax.sgml *************** *** 1413,1418 **** sqrt(2) --- 1413,1471 ---- + + Windowed Tables + + + A windowed table is a table with one or more windows. + A window is a transient set of rows split within a table + described by a window definition. The windowed table allows + to process values across multiple rows within the window. + + + + The windowed table comes with window function calls. + + + function_call ([arg]) OVER (PARTITION BY partition_column [ , ... ] ORDER BY order_column [ , ... ]) + function_call ([arg]) OVER window_name + + + where arg, + partition_column and + order_column are normal target + list such as table column and subquery result as well as + the result of GROUP BY process. Either + PARTITION clause or + ORDER clause must be specified in a + window definition. The window_name + in the second form indicates use of a window that is defined + later WINDOW clause. In the windowed tables + any of aggregate function can be called. Additionally predefined + window functions may be used to calculate rank values. + + + + The predefined ranking window functions are described in + . Currently, window functions + cannot be defined by the user. + + + + Windowed functions doesn't accept DISTINCT and ALL syntax, even though + the function is normal aggregate function. This will be fixed in + the later version. + + + + Windowed functions are not placed in any of GROUP BY, HAVING and + WHERE clauses, which process values before any of the windows. If + there is need to qualify rows by the result of windowed functions, + whole of the query must be nested and append WHERE clause outer of + the current query. + + + Type Casts *** a/src/backend/catalog/pg_aggregate.c --- b/src/backend/catalog/pg_aggregate.c *************** *** 294,299 **** lookup_agg_function(List *fnName, --- 294,301 ---- Oid fnOid; bool retset; int nvargs; + bool isagg; + bool iswfunc; Oid *true_oid_array; FuncDetailCode fdresult; AclResult aclresult; *************** *** 308,313 **** lookup_agg_function(List *fnName, --- 310,316 ---- */ fdresult = func_get_detail(fnName, NIL, nargs, input_types, false, &fnOid, rettype, &retset, &nvargs, + &isagg, &iswfunc, &true_oid_array); /* only valid case is a normal function not returning a set */ *** a/src/backend/catalog/pg_proc.c --- b/src/backend/catalog/pg_proc.c *************** *** 290,295 **** ProcedureCreate(const char *procedureName, --- 290,296 ---- values[Anum_pg_proc_prorows - 1] = Float4GetDatum(prorows); values[Anum_pg_proc_provariadic - 1] = ObjectIdGetDatum(variadicType); values[Anum_pg_proc_proisagg - 1] = BoolGetDatum(isAgg); + values[Anum_pg_proc_proiswfunc - 1] = BoolGetDatum(false); /* temporarily */ values[Anum_pg_proc_prosecdef - 1] = BoolGetDatum(security_definer); values[Anum_pg_proc_proisstrict - 1] = BoolGetDatum(isStrict); values[Anum_pg_proc_proretset - 1] = BoolGetDatum(returnsSet); *** a/src/backend/commands/explain.c --- b/src/backend/commands/explain.c *************** *** 626,631 **** explain_outNode(StringInfo str, --- 626,634 ---- case T_Limit: pname = "Limit"; break; + case T_Window: + pname = "Window"; + break; case T_Hash: pname = "Hash"; break; *************** *** 912,917 **** explain_outNode(StringInfo str, --- 915,922 ---- show_sort_info((SortState *) planstate, str, indent, es); break; + case T_Window: + break; case T_Result: show_upper_qual((List *) ((Result *) plan)->resconstantqual, "One-Time Filter", plan, *** a/src/backend/executor/Makefile --- b/src/backend/executor/Makefile *************** *** 20,26 **** OBJS = execAmi.o execCurrent.o execGrouping.o execJunk.o execMain.o \ nodeHashjoin.o nodeIndexscan.o nodeMaterial.o nodeMergejoin.o \ nodeNestloop.o nodeFunctionscan.o nodeRecursiveunion.o nodeResult.o \ nodeSeqscan.o nodeSetOp.o nodeSort.o nodeUnique.o \ ! nodeValuesscan.o nodeCtescan.o nodeWorktablescan.o \ nodeLimit.o nodeGroup.o nodeSubplan.o nodeSubqueryscan.o nodeTidscan.o \ tstoreReceiver.o spi.o --- 20,26 ---- nodeHashjoin.o nodeIndexscan.o nodeMaterial.o nodeMergejoin.o \ nodeNestloop.o nodeFunctionscan.o nodeRecursiveunion.o nodeResult.o \ nodeSeqscan.o nodeSetOp.o nodeSort.o nodeUnique.o \ ! nodeValuesscan.o nodeCtescan.o nodeWindow.o nodeWorktablescan.o \ nodeLimit.o nodeGroup.o nodeSubplan.o nodeSubqueryscan.o nodeTidscan.o \ tstoreReceiver.o spi.o *** a/src/backend/executor/execAmi.c --- b/src/backend/executor/execAmi.c *************** *** 42,47 **** --- 42,48 ---- #include "executor/nodeValuesscan.h" #include "executor/nodeCtescan.h" #include "executor/nodeWorktablescan.h" + #include "executor/nodeWindow.h" /* *************** *** 220,225 **** ExecReScan(PlanState *node, ExprContext *exprCtxt) --- 221,230 ---- ExecReScanLimit((LimitState *) node, exprCtxt); break; + case T_WindowState: + ExecReScanWindow((WindowState *) node, exprCtxt); + break; + default: elog(ERROR, "unrecognized node type: %d", (int) nodeTag(node)); break; *** a/src/backend/executor/execGrouping.c --- b/src/backend/executor/execGrouping.c *************** *** 16,21 **** --- 16,22 ---- #include "executor/executor.h" #include "parser/parse_oper.h" + #include "utils/builtins.h" #include "utils/lsyscache.h" #include "utils/memutils.h" #include "utils/syscache.h" *************** *** 565,567 **** TupleHashTableMatch(const void *key1, const void *key2, Size keysize) --- 566,589 ---- else return 1; } + + /* + * GetAggInitVal + * return datum represented by textInitVal. + */ + Datum + GetAggInitVal(Datum textInitVal, Oid transtype) + { + Oid typinput, + typioparam; + char *strInitVal; + Datum initVal; + + getTypeInputInfo(transtype, &typinput, &typioparam); + strInitVal = TextDatumGetCString(textInitVal); + initVal = OidInputFunctionCall(typinput, strInitVal, + typioparam, -1); + pfree(strInitVal); + return initVal; + } + *** a/src/backend/executor/execProcnode.c --- b/src/backend/executor/execProcnode.c *************** *** 106,111 **** --- 106,112 ---- #include "executor/nodeValuesscan.h" #include "executor/nodeCtescan.h" #include "executor/nodeWorktablescan.h" + #include "executor/nodeWindow.h" #include "miscadmin.h" *************** *** 280,285 **** ExecInitNode(Plan *node, EState *estate, int eflags) --- 281,291 ---- estate, eflags); break; + case T_Window: + result = (PlanState *) ExecInitWindow((Window *) node, + estate, eflags); + break; + default: elog(ERROR, "unrecognized node type: %d", (int) nodeTag(node)); result = NULL; /* keep compiler quiet */ *************** *** 441,446 **** ExecProcNode(PlanState *node) --- 447,456 ---- result = ExecLimit((LimitState *) node); break; + case T_WindowState: + result = ExecWindow((WindowState *) node); + break; + default: elog(ERROR, "unrecognized node type: %d", (int) nodeTag(node)); result = NULL; *************** *** 613,618 **** ExecCountSlotsNode(Plan *node) --- 623,632 ---- case T_Limit: return ExecCountSlotsLimit((Limit *) node); + case T_Window: + return ExecCountSlotsWindow((Window *) node); + break; + default: elog(ERROR, "unrecognized node type: %d", (int) nodeTag(node)); break; *************** *** 765,770 **** ExecEndNode(PlanState *node) --- 779,788 ---- ExecEndLimit((LimitState *) node); break; + case T_WindowState: + ExecEndWindow((WindowState *) node); + break; + default: elog(ERROR, "unrecognized node type: %d", (int) nodeTag(node)); break; *** a/src/backend/executor/execQual.c --- b/src/backend/executor/execQual.c *************** *** 62,67 **** static Datum ExecEvalArrayRef(ArrayRefExprState *astate, --- 62,70 ---- static Datum ExecEvalAggref(AggrefExprState *aggref, ExprContext *econtext, bool *isNull, ExprDoneCond *isDone); + static Datum ExecEvalWFunc(WFuncExprState *wfunc, + ExprContext *econtext, + bool *isNull, ExprDoneCond *isDone); static Datum ExecEvalVar(ExprState *exprstate, ExprContext *econtext, bool *isNull, ExprDoneCond *isDone); static Datum ExecEvalScalarVar(ExprState *exprstate, ExprContext *econtext, *************** *** 433,438 **** ExecEvalAggref(AggrefExprState *aggref, ExprContext *econtext, --- 436,465 ---- } /* ---------------------------------------------------------------- + * ExecEvalWFunc + * + * Returns a Datum whose value is the value of the precomputed + * window function found in the given expression context. + * + * Note: WFunc uses ecxt_aggvalues for stored result + * because Window node never contains Aggref node. + * ---------------------------------------------------------------- + */ + static Datum + ExecEvalWFunc(WFuncExprState *wfunc, ExprContext *econtext, + bool *isNull, ExprDoneCond *isDone) + { + if (isDone) + *isDone = ExprSingleResult; + + if (econtext->ecxt_aggvalues == NULL) /* safety check */ + elog(ERROR, "no aggregates in this expression context"); + + *isNull = econtext->ecxt_aggnulls[wfunc->funcno]; + return econtext->ecxt_aggvalues[wfunc->funcno]; + } + + /* ---------------------------------------------------------------- * ExecEvalVar * * Returns a Datum whose value is the value of a range *************** *** 3844,3849 **** ExecInitExpr(Expr *node, PlanState *parent) --- 3871,3911 ---- state = (ExprState *) astate; } break; + case T_WFunc: + { + WFunc *wfunc = (WFunc *) node; + WFuncExprState *wfstate = makeNode(WFuncExprState); + + wfstate->xprstate.evalfunc = (ExprStateEvalFunc) ExecEvalWFunc; + if (parent && IsA(parent, WindowState)) + { + WindowState *winstate = (WindowState *) parent; + int nfuncs; + + winstate->funcs = lcons(wfstate, winstate->funcs); + nfuncs = ++winstate->numfuncs; + + wfstate->args = (List *) ExecInitExpr((Expr *) wfunc->args, + parent); + /* + * Complain if the wfunc's arguments contain any + * wfuncs; nested agg functions are semantically + * nonsensical. (This should have been caught earlier, + * but we defend against it here anyway.) + */ + if (nfuncs != winstate->numfuncs) + ereport(ERROR, + (errcode(ERRCODE_WINDOWING_ERROR), + errmsg("window function calls cannot be nested"))); + } + else + { + /* planner messed up */ + elog(ERROR, "wfunc found in non-Window plan node"); + } + state = (ExprState *) wfstate; + } + break; case T_ArrayRef: { ArrayRef *aref = (ArrayRef *) node; *** a/src/backend/executor/nodeAgg.c --- b/src/backend/executor/nodeAgg.c *************** *** 233,239 **** static AggHashEntry lookup_hash_entry(AggState *aggstate, static TupleTableSlot *agg_retrieve_direct(AggState *aggstate); static void agg_fill_hash_table(AggState *aggstate); static TupleTableSlot *agg_retrieve_hash_table(AggState *aggstate); - static Datum GetAggInitVal(Datum textInitVal, Oid transtype); /* --- 233,238 ---- *************** *** 1573,1594 **** ExecInitAgg(Agg *node, EState *estate, int eflags) return aggstate; } - static Datum - GetAggInitVal(Datum textInitVal, Oid transtype) - { - Oid typinput, - typioparam; - char *strInitVal; - Datum initVal; - - getTypeInputInfo(transtype, &typinput, &typioparam); - strInitVal = TextDatumGetCString(textInitVal); - initVal = OidInputFunctionCall(typinput, strInitVal, - typioparam, -1); - pfree(strInitVal); - return initVal; - } - int ExecCountSlotsAgg(Agg *node) { --- 1572,1577 ---- *** /dev/null --- b/src/backend/executor/nodeWindow.c *************** *** 0 **** --- 1,1938 ---- + /*------------------------------------------------------------------------- + * + * nodeWindow.c + * + * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * Window node evaluates only WFunc expression. Any other expressions are + * retrieved from the outer plan as Var or Const node. This is based on + * the fact window functions may evaluate those nodes more than once. The + * node collects rows into its WindowFrame as indicated by FRAME clause + * and stop it if it hits the PARTITION bottom. Note that a WindowFrame + * always processes rows forward, not goes backward. A WindowFrame is + * related to the CURRENT ROW that represents the current scan (result) row. + * + * Currently Window node assume its input is sorted appropriately so it doesn't + * care sort operation. + * + * A window function is defined as a function maked as wfunc in pg_proc. By this + * mark, it means the function can handle window frame APIs and window iteration APIs + * that allow it to access arbitrary random rows within the frame. Window node + * can aggregate function as well, treating it as special case. Contrast to + * Agg node, aggregate functions are executed one by one from initializing to + * finalizing, which suits the Window execution model. The aggregated result + * is cached in a WindowStatePerAgg struct and is recycled if the frame didn't + * moved since the last execution, otherwise, re-run whole aggregation. This + * is not efficient so the aggregate function can be a window function, which + * can subtract values from the previous result by which row is dropped since + * the last execution. fcinfo->context will be a WindowState instead of AggState + * if the aggregate function is called as a window function. + * + * Note that the solid concept of the window functions is "they can access + * arbitrary rows within the frame as they want". As far as we keep the rule + * of thumb, any kind of optimization is allowed. + * + * IDENTIFICATION + * $Id$ + * + *------------------------------------------------------------------------- + */ + + #include "postgres.h" + + #include "catalog/pg_aggregate.h" + #include "catalog/pg_proc.h" + #include "catalog/pg_type.h" + #include "executor/executor.h" + #include "executor/nodeWindow.h" + #include "miscadmin.h" + #include "nodes/nodeFuncs.h" + #include "optimizer/clauses.h" + #include "parser/parse_agg.h" + #include "parser/parse_coerce.h" + #include "parser/parse_expr.h" + #include "parser/parse_oper.h" + #include "utils/acl.h" + #include "utils/builtins.h" + #include "utils/lsyscache.h" + #include "utils/memutils.h" + #include "utils/syscache.h" + #include "utils/tuplestore.h" + #include "utils/datum.h" + + typedef struct WindowStatePerAggData + { + /* number of input arguments for aggregate */ + int numArguments; + + /* Oids of transfer functions */ + Oid transfn_oid; + Oid finalfn_oid; /* may be InvalidOid */ + + /* + * fmgr lookup data for transfer functions --- only valid when + * corresponding oid is not InvalidOid. Note in particular that fn_strict + * flags are kept here. + */ + FmgrInfo transfn; + FmgrInfo finalfn; + + /* + * initial value from pg_aggregate entry + */ + Datum initValue; + bool initValueIsNull; + + /* + * cached value for non-moving frame + */ + Datum resultValue; + bool resultValueIsNull; + bool hasResult; + + /* + * We need the len and byval info for the agg's input, result, and + * transition data types in order to know how to copy/delete values. + */ + int16 inputtypeLen, + resulttypeLen, + transtypeLen; + bool inputtypeByVal, + resulttypeByVal, + transtypeByVal; + } WindowStatePerAggData; + + typedef struct WindowStatePerFuncData + { + /* Links to WFunc expr and state nodes this working state is for */ + WFuncExprState *wfuncstate; + WFunc *wfunc; + + /* number of input arguments for aggregate */ + int numArguments; + + /* + * fmgr lookup data for transfer functions --- only valid when + * corresponding oid is not InvalidOid. Note in particular that fn_strict + * flags are kept here. + */ + FmgrInfo flinfo; + + /* + * We need the len and byval info for the result of each function + * in order to know how to copy/delete values. + */ + int16 resulttypeLen; + bool resulttypeByVal; + + /* not window supported (normal aggregate) function? */ + bool pure_agg; + + /* + * This field is not used for window supported functions. + */ + WindowStatePerAggData *peraggstate; + } WindowStatePerFuncData; + + typedef struct WindowFrameData + { + ExprContext *econtext; /* points to winstate->tmpcontext */ + Tuplestorestate *tuples; /* rows stored in this frame */ + HeapTuple currentrow; /* copied outer tuple of CURRENT ROW */ + + /* + * numbers indicating row positions and status + */ + int32 currentpos; /* position of current row in the PARTITION */ + int32 npartition; /* total fetched from the PARTITION */ + bool moved; /* did the frame move within the PARTITION? */ + int32 dropped; /* number of rows dropped by moving frame */ + + /* + * read_pointers of tuplestore + * See also winodw_seek() + */ + int currentptr; /* CURRENT ROW */ + int headptr; /* the first row */ + int tailptr; /* the last row */ + + bool iterating; /* itertor is active? */ + } WindowFrameData; + + typedef struct WindowIterData + { + WindowFrameData *frame; /* the frame which this itrator came from */ + int position; /* current position within the frame */ + bool finished; /* has finished? */ + } WindowIterData; + + + + static void eval_windowaggregate(WindowState *winstate, WindowFrame frame, + WindowStatePerFunc perfuncstate, Datum *result, bool *isnull); + static void eval_windowfunction(WindowState *winstate, WindowFrame frame, + WindowStatePerFunc perfuncstate, Datum *result, bool *isnull); + static void create_frame(WindowState *winstate); + static TupleTableSlot *process_frame(WindowState *winstate, WindowFrame frame); + static void finish_frame(WindowState *winstate); + + static bool frame_prepare(WindowState *winstate, WindowFrame frame); + static bool frame_feed(WindowState *winstate, WindowFrame frame, TupleTableSlot *slot); + + static WindowStatePerAggData *initialize_peragg(WindowState *winstate, WFunc *wfunc); + static bool window_seek(WindowFrame frame, int seek_pos, int seek_type); + static bool rank_up(FunctionCallInfo fcinfo); + + /* + * ranking process information + */ + typedef struct rank_context + { + int64 rank; + } rank_context; + + /* + * ntile process information + */ + typedef struct + { + int64 ntile; /* current result */ + int64 rows_per_bucket; /* row number of current bucket */ + int64 boundary; /* how many rows should be in the bucket */ + int64 remainder; /* (total rows) % (bucket num) */ + } ntile_context; + + /* + * SQL spec window functions + */ + Datum row_number(PG_FUNCTION_ARGS); + Datum rank(PG_FUNCTION_ARGS); + Datum dense_rank(PG_FUNCTION_ARGS); + Datum percent_rank(PG_FUNCTION_ARGS); + Datum cume_dist(PG_FUNCTION_ARGS); + Datum ntile(PG_FUNCTION_ARGS); + Datum lag(PG_FUNCTION_ARGS); + Datum lead(PG_FUNCTION_ARGS); + Datum first_value(PG_FUNCTION_ARGS); + Datum last_value(PG_FUNCTION_ARGS); + Datum nth_value(PG_FUNCTION_ARGS); + + /* + * eval_windowaggregate + * evaluate normal aggregates (not proiswfunc but proisagg marked). + * + * Many flows and ideas are ported from nodeAgg.c. Contrast to Agg, each + * aggregate is executed from initializing to finalizing one by one. + * So we don't need PerGroup state. + * + * If a window frame is moving whole the calculation of trans/final + * functions are executed again, whereas if not moving the only result + * is cached and returned while the frame is valid. + */ + static void + eval_windowaggregate(WindowState *winstate, WindowFrame frame, + WindowStatePerFunc perfuncstate, Datum *result, bool *isnull) + { + WindowStatePerAggData *peraggstate = perfuncstate->peraggstate; + WFuncExprState *wfuncstate; + WindowIter iter; + int numArguments; + Datum transValue; + bool transValueIsNull; + bool noTransValue; + MemoryContext oldContext; + + if (!window_moved(frame) && peraggstate->hasResult) + { + /* return the same value as the previous result */ + *isnull = peraggstate->resultValueIsNull; + if (*isnull) + return; + + if (!peraggstate->resulttypeByVal && + !peraggstate->resultValueIsNull && + DatumGetPointer(peraggstate->resultValue) != NULL) + { + oldContext = MemoryContextSwitchTo(winstate->wincontext); + *result = datumCopy(peraggstate->resultValue, + peraggstate->resulttypeByVal, + peraggstate->resulttypeLen); + MemoryContextSwitchTo(oldContext); + } + else + *result = peraggstate->resultValue; + + return; + } + + /* inititalize_aggregate */ + if (peraggstate->initValueIsNull) + transValue = peraggstate->initValue; + else + { + oldContext = MemoryContextSwitchTo(winstate->wincontext); + transValue = datumCopy(peraggstate->initValue, + peraggstate->transtypeByVal, + peraggstate->transtypeLen); + MemoryContextSwitchTo(oldContext); + } + transValueIsNull = peraggstate->initValueIsNull; + noTransValue = peraggstate->initValueIsNull; + + wfuncstate = perfuncstate->wfuncstate; + numArguments = perfuncstate->numArguments; + + /* + * scanning frame from the head. + */ + iter = window_iter_init(frame); + while(window_iter_next(iter)) + { + FunctionCallInfoData fcinfodata; + FunctionCallInfo fcinfo = &fcinfodata; + Datum newVal; + ListCell *arg; + int i; + + /* advance_aggregate */ + /* We start from 1, since the 0th arg will be the transition value */ + i = 1; + foreach(arg, wfuncstate->args) + { + ExprState *argstate = (ExprState *) lfirst(arg); + bool isnull; + + /* + * we assume the argument expressions are always static nodes. + */ + Assert(IsA(argstate->expr, Var) || IsA(argstate->expr, Const)); + fcinfo->arg[i] = window_iter_getarg(iter, argstate, &isnull); + fcinfo->argnull[i] = isnull; + i++; + } + + if (peraggstate->transfn.fn_strict) + { + /* + * For a strict transfn, nothing happens when there's a NULL input; we + * just keep the prior transValue. + */ + for(i = 1; i <= numArguments; i++) + { + if (fcinfo->argnull[i]) + continue; + } + if (noTransValue) + { + /* + * transValue has not been initialized. This is the first non-NULL + * input value. We use it as the initial value for transValue. (We + * already checked that the agg's input type is binary-compatible + * with its transtype, so straight copy here is OK.) + * + * We must copy the datum into aggcontext if it is pass-by-ref. We + * do not need to pfree the old transValue, since it's NULL. + */ + oldContext = MemoryContextSwitchTo(winstate->wincontext); + transValue = datumCopy(fcinfo->arg[1], + peraggstate->transtypeByVal, + peraggstate->transtypeLen); + transValueIsNull = false; + noTransValue = false; + MemoryContextSwitchTo(oldContext); + continue; + } + if (transValueIsNull) + { + continue; + } + } + + /* should rest memory context? */ + oldContext = MemoryContextSwitchTo(frame->econtext->ecxt_per_tuple_memory); + + /* + * OK to call the transition function + */ + InitFunctionCallInfoData(*fcinfo, &(peraggstate->transfn), + numArguments + 1, + (void *) winstate, NULL); + fcinfo->arg[0] = transValue; + fcinfo->argnull[0] = transValueIsNull; + newVal = FunctionCallInvoke(fcinfo); + + /* + * If pass-by-ref datatype, must copy the new value into aggcontext and + * pfree the prior transValue. But if transfn returned a pointer to its + * first input, we don't need to do anything. + */ + if (!peraggstate->transtypeByVal && + DatumGetPointer(newVal) != DatumGetPointer(transValue)) + { + if (!fcinfo->isnull) + { + MemoryContextSwitchTo(winstate->wincontext); + newVal = datumCopy(newVal, + peraggstate->transtypeByVal, + peraggstate->transtypeLen); + } + if (!transValueIsNull) + pfree(DatumGetPointer(transValue)); + } + + transValue = newVal; + transValueIsNull = fcinfo->isnull; + } + + /* finalize_aggregate */ + oldContext = MemoryContextSwitchTo(winstate->ss.ps.ps_ExprContext->ecxt_per_tuple_memory); + + /* + * Apply the agg's finalfn if one is provided, else return transValue. + */ + if (OidIsValid(peraggstate->finalfn_oid)) + { + FunctionCallInfoData fcinfo; + + InitFunctionCallInfoData(fcinfo, &(peraggstate->finalfn), 1, + (void *) winstate, NULL); + fcinfo.arg[0] = transValue; + fcinfo.argnull[0] = transValueIsNull; + if (fcinfo.flinfo->fn_strict && transValueIsNull) + { + /* don't call a strict function with NULL inputs */ + *result = (Datum) 0; + *isnull = true; + } + else + { + *result = FunctionCallInvoke(&fcinfo); + *isnull = fcinfo.isnull; + } + } + else + { + *result = transValue; + *isnull = transValueIsNull; + } + + /* + * If result is pass-by-ref, make sure it is in the right context. + */ + if (!peraggstate->resulttypeByVal && !*isnull && + !MemoryContextContains(CurrentMemoryContext, + DatumGetPointer(*result))) + *result = datumCopy(*result, + peraggstate->resulttypeByVal, + peraggstate->resulttypeLen); + MemoryContextSwitchTo(oldContext); + + /* + * save the result for the next (non-moving-frame) call. + */ + if (!peraggstate->resulttypeByVal && !*isnull) + { + /* + * clear old resultValue in order not to leak memory. + */ + if (peraggstate->hasResult && + (DatumGetPointer(peraggstate->resultValue) != + DatumGetPointer(*result)) && + !peraggstate->resultValueIsNull) + pfree(DatumGetPointer(peraggstate->resultValue)); + + /* + * If pass-by-ref, copy it into our global context. + */ + oldContext = MemoryContextSwitchTo(winstate->wincontext); + peraggstate->resultValue = datumCopy(*result, + peraggstate->resulttypeByVal, + peraggstate->resulttypeLen); + MemoryContextSwitchTo(oldContext); + } + else + { + peraggstate->resultValue = *result; + } + peraggstate->resultValueIsNull = *isnull; + peraggstate->hasResult = true; + } + + /* + * eval_windowfunction + * + * Arguments of window functions are not actual datum but expression node. + * This is based on the fact they can access arbitrary row column specified + * by their arguments. The window API can handle separate row evaluations. + * Since window functions' arguments must be Var or Const by the planner, + * fetching arbitrary separate row is always successful. + */ + static void + eval_windowfunction(WindowState *winstate, WindowFrame frame, + WindowStatePerFunc perfuncstate, Datum *result, bool *isnull) + { + WFuncExprState *wfuncstate = perfuncstate->wfuncstate; + FunctionCallInfoData fcinfo; + int i; + ListCell *arg; + MemoryContext oldContext; + + oldContext = MemoryContextSwitchTo(winstate->ss.ps.ps_ExprContext->ecxt_per_tuple_memory); + InitFunctionCallInfoData(fcinfo, &(perfuncstate->flinfo), + perfuncstate->numArguments, + (void *) winstate, NULL); + + i = 0; + foreach(arg, wfuncstate->args) + { + ExprState *argstate = (ExprState *) lfirst(arg); + + /* + * Window functions' arguments should be Var or Const. + * Any other types operation must have done at the outer + * nodes. + */ + Assert(IsA(argstate->expr, Var) || IsA(argstate->expr, Const)); + fcinfo.arg[i] = PointerGetDatum(argstate); + i++; + } + + *result = FunctionCallInvoke(&fcinfo); + *isnull = fcinfo.isnull; + + /* + * make sure the pass-by-ref datum is allocated in the appropriate context. + */ + if (!perfuncstate->resulttypeByVal && !fcinfo.isnull && + !MemoryContextContains(CurrentMemoryContext, + DatumGetPointer(*result))) + *result = datumCopy(*result, + perfuncstate->resulttypeByVal, + perfuncstate->resulttypeLen); + + MemoryContextSwitchTo(oldContext); + } + + /* + * create_frame + * create new frame or advance it until the partition ends. + * + * If the call is on the brand new partition, frame is created + * and is initialized. Otherwise, advance current row and pointer + * then feed additional rows into the frame from the partition. + * The parition works as only boundary, not stored row strage, only + * frame stores them. So the frame may store more rows than it + * needs for the current row but it controls approprietely as if + * it holds only necessary rows through window function APIs. + */ + static void + create_frame(WindowState *winstate) + { + Window *node = (Window *) winstate->ss.ps.plan; + PlanState *outerPlan; + ExprContext *econtext; + ExprContext *tmpcontext; + TupleTableSlot *outerslot; + TupleTableSlot *firstSlot; + WindowFrame frame = winstate->frame; + + outerPlan = outerPlanState(winstate); + econtext = winstate->ss.ps.ps_ExprContext; + tmpcontext = winstate->tmpcontext; + firstSlot = winstate->ss.ss_ScanTupleSlot; + + if (frame == NULL) + { + Tuplestorestate *tuples; + + /* + * new frame is created. + */ + frame = (WindowFrameData *) palloc(sizeof(WindowFrameData)); + + /* + * frame's context is always winstate->tmpcontext. + * window APIs also uses the ecxt_outertuple member of this. + */ + frame->econtext = winstate->tmpcontext; + + /* + * tuplestore needs randomAccess + */ + tuples = tuplestore_begin_heap(true, false, work_mem); + /* + * mark CURRENT ROW pointer + */ + frame->currentptr = tuplestore_alloc_read_pointer(tuples, winstate->eflags); + Assert(frame->currentptr == 1); + frame->headptr = tuplestore_alloc_read_pointer(tuples, winstate->eflags); + Assert(frame->headptr == 2); + frame->tailptr = tuplestore_alloc_read_pointer(tuples, winstate->eflags); + frame->tuples = tuples; + + frame->currentpos = 0; + frame->npartition = 0; + frame->dropped = 0; + frame->moved = false; + frame->iterating = false; + winstate->frame = frame; + winstate->partition_end = false; + + /* + * continued from the previous partition? + */ + if (winstate->prt_firstTuple != NULL) + { + /* yes, we hold the first tuple of the current partition */ + /* + * shouldFree is false, since prt_firstTuple + * is recycled some times. + */ + ExecStoreTuple(winstate->prt_firstTuple, + firstSlot, + InvalidBuffer, + false); + frame_feed(winstate, frame, firstSlot); + } + else + { + /* no, execution is at the first time */ + outerslot = ExecProcNode(outerPlan); + if (!TupIsNull(outerslot)) + { + winstate->prt_firstTuple = ExecCopySlotTuple(outerslot); + frame_feed(winstate, frame, outerslot); + } + else + { + /* nothing will be returned */ + winstate->win_done = true; + finish_frame(winstate); + return; + } + } + } + else + { + /* + * advance frame's current row. This will affect actual + * frame->currentrow in frame_prepare() + */ + frame->currentpos++; + } + + /* + * get current row and fill uncommitted row to the frame. + * if we don't need more rows then get to next step. + */ + if(!frame_prepare(winstate, frame)) + return; + + if (winstate->prt_firstTuple != NULL) + { + /* + * shouldFree is false, since prt_firstTuple + * is recycled some times. + */ + ExecStoreTuple(winstate->prt_firstTuple, + firstSlot, + InvalidBuffer, + false); + for(;;) + { + outerslot = ExecProcNode(outerPlan); + if (TupIsNull(outerslot)) + { + /* + * we hit the bottom of the last partition. + */ + winstate->win_done = true; + winstate->partition_end = true; + break; + } + + /* + * the partition is only a boundary + */ + if (!execTuplesMatch(firstSlot, + outerslot, + node->prtNumCols, node->prtColIdx, + winstate->prtEqfunctions, + econtext->ecxt_per_tuple_memory)) + { + /* + * at the end of partition + * copy the tuple for the next partition cycle. + */ + heap_freetuple(winstate->prt_firstTuple); + winstate->prt_firstTuple = ExecCopySlotTuple(outerslot); + + /* + * we remeber that we touched the bottom but do nothing, + * because frame's current row may not be the last one. + */ + winstate->partition_end = true; + break; + } + + if (!frame_feed(winstate, + frame, + outerslot)) + break; + } + } + + } + + /* + * process_frame + * given frame, evaluate each window function with it + * and return the result tuple. + */ + static TupleTableSlot * + process_frame(WindowState *winstate, WindowFrame frame) + { + ExprContext *econtext; + ProjectionInfo *projInfo; + int i; + int numfuncs; + + /* final output execution is on ps_ExprContext */ + econtext = winstate->ss.ps.ps_ExprContext; + numfuncs = winstate->numfuncs; + + for(i = 0; i < numfuncs; i++) + { + WindowStatePerFunc perfuncstate; + Datum *result = &(econtext->ecxt_aggvalues[i]); + bool *isnull = &(econtext->ecxt_aggnulls[i]); + + perfuncstate = &(winstate->perfunc[i]); + /* + * normal aggregates are called from specialized environment + * rather than as window function + */ + if (perfuncstate->pure_agg) + eval_windowaggregate(winstate, frame, perfuncstate, result, isnull); + else + eval_windowfunction(winstate, frame, perfuncstate, result, isnull); + } + + /* + * read back the current row from the frame to econtext + * as an outer tuple. econtext->ecxt_outertuple will be used + * in the projection (current row evaluation after the + * window function execution). + */ + projInfo = winstate->ss.ps.ps_ProjInfo; + econtext->ecxt_outertuple = winstate->ss.ss_ScanTupleSlot; + ExecStoreTuple(frame->currentrow, + econtext->ecxt_outertuple, + InvalidBuffer, + true); + return ExecProject(projInfo, NULL); + } + + /* + * finish_frame + * clear all resources of the frame and set NULL. + * + * The frame is finished for each end of partition because + * it does not go across over the different partitions, but + * drop / feed rows while holding some. + */ + static void + finish_frame(WindowState *winstate) + { + WindowFrame frame = winstate->frame; + int i; + int numfuncs = winstate->numfuncs; + + tuplestore_end(frame->tuples); + for(i = 0; i < numfuncs; i++) + { + WindowStatePerFunc perfuncstate = &(winstate->perfunc[i]); + + if (perfuncstate->flinfo.fn_extra != NULL) + { + pfree(perfuncstate->flinfo.fn_extra); + /* + * Be sure to set NULL, which is one of the signs + * that the frame is brand new. + */ + perfuncstate->flinfo.fn_extra = NULL; + } + + /* + * reset agg result cache + */ + if (perfuncstate->pure_agg) + { + WindowStatePerAggData *peraggstate = perfuncstate->peraggstate; + + if (!peraggstate->resulttypeByVal && + peraggstate->hasResult && + !peraggstate->resultValueIsNull) + { + pfree(DatumGetPointer(peraggstate->resultValue)); + peraggstate->resultValueIsNull = true; + } + peraggstate->hasResult = false; + } + } + + winstate->frame = NULL; + } + + /* + * frame_prepare + * return false if the current frame is filled already. + * + * The purposes here are: + * - drop rows that are no longer necessary for the current frame + * - save the current row to frame. + * + * The current row is special, for it is used to return + * result tuple to parent node. + */ + static bool + frame_prepare(WindowState *winstate, WindowFrame frame) + { + Tuplestorestate *tuples = frame->tuples; + TupleTableSlot *slot = frame->econtext->ecxt_outertuple; + + tuplestore_copy_read_pointer(tuples, frame->currentptr, 0); + if (!tuplestore_gettupleslot(tuples, true, slot)) + { + return false; + } + /* + * update CURRENT ROW position for the next fetching + */ + tuplestore_copy_read_pointer(tuples, 0, frame->currentptr); + + frame->currentrow = ExecCopySlotTuple(slot); + + /* + * Now that FRAME clause is not supported, + * we stop scannig rows from outer plan when + * current row is not starting row. + */ + if (frame->currentpos != 0) + return false; + return true; + } + + /* + * frame_feed + * return false if the current frame is filled. + */ + static bool + frame_feed(WindowState *winstate, WindowFrame frame, TupleTableSlot *slot) + { + Tuplestorestate *tuples = frame->tuples; + + tuplestore_write_to_read_pointer(tuples, frame->tailptr); + tuplestore_puttupleslot(tuples, slot); + frame->npartition++; + + return true; + } + + /* ----------------- + * ExecWindow + * + * ExecWindow receives tuples from its outer subplan and + * creates or feeds the current frame then process window functions + * with the frame. This node doesn't reduce nor qualify any row + * so the number of returned rows are exactly same as its outer + * subplan's result. + * The frame works as if some temporary table that stores row values + * and provides evaluation functionality, which needs an econtext so that + * window functions use it as the core executor does. Thus, we need + * two econtext for this purpose and the result tuple evaluation purpose. + * ----------------- + */ + TupleTableSlot * + ExecWindow(WindowState *winstate) + { + TupleTableSlot *slot; + + if (winstate->win_done && winstate->frame == NULL) + return NULL; + + create_frame(winstate); + + /* + * we double-check if we can go processing frame. + * It means the first partition has no rows + * when this second check is false. + */ + if (winstate->win_done && winstate->frame == NULL) + return NULL; + + slot = process_frame(winstate, winstate->frame); + + /* + * make sure to clear the frame on the end of the partition. + */ + if (winstate->partition_end && + winstate->frame->currentpos == winstate->frame->npartition-1) + { + finish_frame(winstate); + } + + return slot; + } + + /* ----------------- + * ExecInitWindow + * + * Creates the run-time information for the Window node produced by the + * planner and initializes its outer subtree + * ----------------- + */ + WindowState * + ExecInitWindow(Window *node, EState *estate, int eflags) + { + WindowState *winstate; + Plan *outerPlan; + ExprContext *econtext; + ExprContext *tmpcontext; + WindowStatePerFunc perfunc; + int numfuncs = 0, funcno; + ListCell *l; + + /* check for unsupported flags */ + Assert(!(eflags & (EXEC_FLAG_BACKWARD | EXEC_FLAG_MARK))); + + winstate = makeNode(WindowState); + winstate->ss.ps.plan = (Plan *) node; + winstate->ss.ps.state = estate; + winstate->eflags = (EXEC_FLAG_REWIND | EXEC_FLAG_BACKWARD | EXEC_FLAG_MARK); + + /* + * Create expression contexts. We need two, one for per-input-tuple + * processing and one for per-output-tuple processing. We cheat a little + * by using ExecAssignExprContext() to build both. + */ + ExecAssignExprContext(estate, &winstate->ss.ps); + tmpcontext = winstate->ss.ps.ps_ExprContext; + winstate->tmpcontext = tmpcontext; + ExecAssignExprContext(estate, &winstate->ss.ps); + + winstate->wincontext = + AllocSetContextCreate(CurrentMemoryContext, + "WinContext", + ALLOCSET_DEFAULT_MINSIZE, + ALLOCSET_DEFAULT_INITSIZE, + ALLOCSET_DEFAULT_MAXSIZE); + + #define WINDOW_NSLOTS 3 + + /* + * tuple table initialization + */ + ExecInitScanTupleSlot(estate, &winstate->ss); + ExecInitResultTupleSlot(estate, &winstate->ss.ps); + + /* + * This slot is used as the frame current row, and + * some temporary row in window functions. + */ + tmpcontext->ecxt_outertuple = ExecInitExtraTupleSlot(estate); + + winstate->ss.ps.targetlist = (List *) + ExecInitExpr((Expr *) node->plan.targetlist, + (PlanState *) winstate); + winstate->ss.ps.qual = NIL; + + /* + * initialize child nodes + * + * We shield the child node from the need to support REWIND, BACKWARD, or + * MARK/RESTORE. + */ + eflags &= ~(EXEC_FLAG_REWIND | EXEC_FLAG_BACKWARD | EXEC_FLAG_MARK); + outerPlan = outerPlan(node); + outerPlanState(winstate) = ExecInitNode(outerPlan, estate, eflags); + + /* + * initialize result tuple type and projection info. + */ + ExecAssignScanTypeFromOuterPlan(&winstate->ss); + + /* + * initialize result tuple type and projection info. + */ + ExecAssignResultTypeFromTL(&winstate->ss.ps); + ExecAssignProjectionInfo(&winstate->ss.ps, NULL); + ExecSetSlotDescriptor(tmpcontext->ecxt_outertuple, winstate->ss.ss_ScanTupleSlot->tts_tupleDescriptor); + ExecStoreAllNullTuple(tmpcontext->ecxt_outertuple); + + numfuncs = winstate->numfuncs; + if (node->prtNumCols > 0) + winstate->prtEqfunctions = execTuplesMatchPrepare(node->prtNumCols, + node->prtOperators); + if (node->ordNumCols > 0) + winstate->ordEqfunctions = execTuplesMatchPrepare(node->ordNumCols, + node->ordOperators); + + /* + * Window functions use aggvalues and aggnulls as well as Agg node. + */ + econtext = winstate->ss.ps.ps_ExprContext; + econtext->ecxt_aggvalues = (Datum *) palloc0(sizeof(Datum) * numfuncs); + econtext->ecxt_aggnulls = (bool *) palloc0(sizeof(bool) * numfuncs); + + perfunc = (WindowStatePerFunc) palloc0(sizeof(WindowStatePerFuncData) * numfuncs); + winstate->perfunc = perfunc; + + funcno = -1; + foreach(l, winstate->funcs) + { + WFuncExprState *wfuncstate = (WFuncExprState *) lfirst(l); + WFunc *wfunc = (WFunc *) wfuncstate->xprstate.expr; + WindowStatePerFunc perfuncstate; + int numArguments; + int i; + + Assert(wfunc->winlevelsup == 0); + + /* Look for a previous duplicate window function */ + for (i = 0; i <= funcno; i++) + { + if (equal(wfunc, perfunc[i].wfunc) && + !contain_volatile_functions((Node *) wfunc)) + break; + } + if (i <= funcno) + { + /* Found a match to an existing entry, so just mark it */ + wfuncstate->funcno = i; + continue; + } + + /* Nope, so assign a new PerAgg record */ + perfuncstate = &perfunc[++funcno]; + + /* Mark WFunc state node with assigned index in the result array */ + wfuncstate->funcno = funcno; + + /* Fill in the perfuncstate data */ + perfuncstate->wfuncstate = wfuncstate; + perfuncstate->wfunc = wfunc; + numArguments = list_length(wfunc->args); + perfuncstate->numArguments = numArguments; + + fmgr_info_cxt(wfunc->winfnoid, &(perfuncstate->flinfo), + winstate->tmpcontext->ecxt_per_query_memory); + get_typlenbyval(wfunc->wintype, + &perfuncstate->resulttypeLen, + &perfuncstate->resulttypeByVal); + + /* + * if the function doesn't have capability of window function + * but of aggregate, we emulate Agg environment for it. + */ + perfuncstate->pure_agg = wfunc->pure_agg; + if (wfunc->pure_agg) + { + perfuncstate->peraggstate = initialize_peragg(winstate, wfunc); + } + } + + /* Update numfuncs to match number of unique function found */ + winstate->numfuncs = funcno + 1; + + return winstate; + } + + /* ----------------- + * ExecCountSlotsWindow + * ----------------- + */ + int + ExecCountSlotsWindow(Window *node) + { + return ExecCountSlotsNode(outerPlan(node)) + + ExecCountSlotsNode(innerPlan(node)) + + WINDOW_NSLOTS; + } + /* ----------------- + * ExecEndWindow + * ----------------- + */ + void + ExecEndWindow(WindowState *node) + { + PlanState *outerPlan; + int i; + + for(i = 0; i < node->numfuncs; i++) + { + WindowStatePerFuncData *perfuncstate = &(node->perfunc[i]); + + if (perfuncstate->pure_agg) + { + WindowStatePerAggData *peraggstate = perfuncstate->peraggstate; + + pfree(peraggstate); + } + } + pfree(node->perfunc); + + /* + * clear tuple before freeing expr context because + * tmpcontext is invalid after freeing. + */ + ExecClearTuple(node->ss.ss_ScanTupleSlot); + ExecClearTuple(node->tmpcontext->ecxt_outertuple); + + /* + * Free both the expr contexts. + */ + ExecFreeExprContext(&node->ss.ps); + node->ss.ps.ps_ExprContext = node->tmpcontext; + ExecFreeExprContext(&node->ss.ps); + + if (node->prt_firstTuple != NULL) + heap_freetuple(node->prt_firstTuple); + + if (node->frame != NULL) + finish_frame(node); + + MemoryContextDelete(node->wincontext); + + outerPlan = outerPlanState(node); + ExecEndNode(outerPlan); + } + + /* ----------------- + * ExecRescanWindow + * ----------------- + */ + void + ExecReScanWindow(WindowState *node, ExprContext *exprCtxt) + { + ExprContext *econtext = node->ss.ps.ps_ExprContext; + + node->win_done = false; + + if (node->prt_firstTuple != NULL) + { + heap_freetuple(node->prt_firstTuple); + node->prt_firstTuple = NULL; + } + + MemSet(econtext->ecxt_aggvalues, 0, sizeof(Datum) * node->numfuncs); + MemSet(econtext->ecxt_aggnulls, 0, sizeof(bool) * node->numfuncs); + } + + /* + * initialize_peragg + * + * Almost same as the nodeAgg.c. We don't care DISTINCT of the aggregate + * argument currenlty. + */ + static WindowStatePerAggData * + initialize_peragg(WindowState *winstate, WFunc *wfunc) + { + Oid inputTypes[FUNC_MAX_ARGS]; + int numArguments; + HeapTuple aggTuple; + Form_pg_aggregate aggform; + Oid aggtranstype; + AclResult aclresult; + Oid transfn_oid, + finalfn_oid; + Expr *transfnexpr, + *finalfnexpr; + Datum textInitVal; + int i; + ListCell *lc; + WindowStatePerAggData *peraggstate; + + peraggstate = (WindowStatePerAggData *) palloc0(sizeof(WindowStatePerAggData)); + numArguments = list_length(wfunc->args); + peraggstate->numArguments = numArguments; + + i = 0; + foreach(lc, wfunc->args) + { + inputTypes[i++] = exprType((Node *) lfirst(lc)); + } + + aggTuple = SearchSysCache(AGGFNOID, + ObjectIdGetDatum(wfunc->winfnoid), + 0, 0, 0); + if (!HeapTupleIsValid(aggTuple)) + elog(ERROR, "cache lookup failed for aggregate %u", + wfunc->winfnoid); + aggform = (Form_pg_aggregate) GETSTRUCT(aggTuple); + + /* Check permission to call aggregate function */ + aclresult = pg_proc_aclcheck(wfunc->winfnoid, GetUserId(), + ACL_EXECUTE); + if (aclresult != ACLCHECK_OK) + aclcheck_error(aclresult, ACL_KIND_PROC, + get_func_name(wfunc->winfnoid)); + + peraggstate->transfn_oid = transfn_oid = aggform->aggtransfn; + peraggstate->finalfn_oid = finalfn_oid = aggform->aggfinalfn; + + /* Check that aggregate owner has permission to call component fns */ + { + HeapTuple procTuple; + Oid aggOwner; + + procTuple = SearchSysCache(PROCOID, + ObjectIdGetDatum(wfunc->winfnoid), + 0, 0, 0); + if (!HeapTupleIsValid(procTuple)) + elog(ERROR, "cache lookup failed for function %u", + wfunc->winfnoid); + aggOwner = ((Form_pg_proc) GETSTRUCT(procTuple))->proowner; + ReleaseSysCache(procTuple); + + aclresult = pg_proc_aclcheck(transfn_oid, aggOwner, + ACL_EXECUTE); + if (aclresult != ACLCHECK_OK) + aclcheck_error(aclresult, ACL_KIND_PROC, + get_func_name(transfn_oid)); + if (OidIsValid(finalfn_oid)) + { + aclresult = pg_proc_aclcheck(finalfn_oid, aggOwner, + ACL_EXECUTE); + if (aclresult != ACLCHECK_OK) + aclcheck_error(aclresult, ACL_KIND_PROC, + get_func_name(finalfn_oid)); + } + } + + /* resolve actual type of transition state, if polymorphic */ + aggtranstype = aggform->aggtranstype; + if (IsPolymorphicType(aggtranstype)) + { + /* have to fetch the agg's declared input types... */ + Oid *declaredArgTypes; + int agg_nargs; + + (void) get_func_signature(wfunc->winfnoid, + &declaredArgTypes, &agg_nargs); + Assert(agg_nargs == numArguments); + aggtranstype = enforce_generic_type_consistency(inputTypes, + declaredArgTypes, + agg_nargs, + aggtranstype, + false); + pfree(declaredArgTypes); + } + + /* build expression trees using actual argument & result types */ + build_aggregate_fnexprs(inputTypes, + numArguments, + aggtranstype, + wfunc->wintype, + transfn_oid, + finalfn_oid, + &transfnexpr, + &finalfnexpr); + + fmgr_info(transfn_oid, &peraggstate->transfn); + peraggstate->transfn.fn_expr = (Node *) transfnexpr; + + if (OidIsValid(finalfn_oid)) + { + fmgr_info(finalfn_oid, &peraggstate->finalfn); + peraggstate->finalfn.fn_expr = (Node *) finalfnexpr; + } + + get_typlenbyval(wfunc->wintype, + &peraggstate->resulttypeLen, + &peraggstate->resulttypeByVal); + get_typlenbyval(aggtranstype, + &peraggstate->transtypeLen, + &peraggstate->transtypeByVal); + + /* + * initval is potentially null, so don't try to access it as a struct + * field. Must do it the hard way with SysCacheGetAttr. + */ + textInitVal = SysCacheGetAttr(AGGFNOID, aggTuple, + Anum_pg_aggregate_agginitval, + &peraggstate->initValueIsNull); + + if (peraggstate->initValueIsNull) + peraggstate->initValue = (Datum) 0; + else + peraggstate->initValue = GetAggInitVal(textInitVal, + aggtranstype); + + /* + * If the transfn is strict and the initval is NULL, make sure input + * type and transtype are the same (or at least binary-compatible), so + * that it's OK to use the first input value as the initial + * transValue. This should have been checked at agg definition time, + * but just in case... + */ + if (peraggstate->transfn.fn_strict && peraggstate->initValueIsNull) + { + if (numArguments < 1 || + !IsBinaryCoercible(inputTypes[0], aggtranstype)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), + errmsg("aggregate %u needs to have compatible input type and transition type", + wfunc->winfnoid))); + } + + ReleaseSysCache(aggTuple); + + return peraggstate; + } + + /* window frame APIs and window iteration APIs */ + + /* + * window_seek + * Because tuplestore doesn't capability to seek nth row, + * we hold three marking points and from there advance rows as needed. + * + * The current row when seek_pos = 0 on WINDOW_SEEK_CURRENT, + * the first row when seek_pos = 0 on WINDOW_SEEK_HEAD, + * and the last row when seek_pos = 0 on WINDOW_SEEK_TAIL + * is fetched by the subsequent window_getarg/window_gettuple call. + */ + static bool + window_seek(WindowFrame frame, int seek_pos, int seek_type) + { + Tuplestorestate *tuples = frame->tuples; + int read_pointer; + + switch(seek_type) + { + case WINDOW_SEEK_CURRENT: + read_pointer = frame->currentptr; + /* + * Since frame->currentptr marks the next CURRENT ROW already, + * seek_pos is actually subtracted 1. + */ + seek_pos -= 1; + break; + + case WINDOW_SEEK_HEAD: + read_pointer = frame->headptr; + + /* validation check */ + if (seek_pos < 0) + return false; + break; + + case WINDOW_SEEK_TAIL: + read_pointer = frame->tailptr; + + /* validation check */ + if (seek_pos > 0) + return false; + break; + + default: + elog(ERROR, "unknown window seek type: %d", seek_type); + break; + } + + tuplestore_copy_read_pointer(tuples, read_pointer, 0); + if (seek_pos != 0) + { + bool forward = (seek_pos > 0); + int num_ahead = (seek_pos < 0 ? (-seek_pos) : seek_pos); + int i; + + for(i = 0; i < num_ahead; i++) + { + if (!tuplestore_advance(tuples, forward)) + { + /* + * tuplestore_advance returns false when backward scan + * hit the head, which is valid position. + * But we consider window_seek going more than head, + * which means the seeking position is invalid. + */ + if (i < num_ahead - 1 || tuplestore_ateof(tuples)) + return false; + break; + } + } + } + + return true; + } + + /* + * window_currentpos + * return the position of CURRENT ROW in the frame. + */ + int + window_currentpos(WindowFrame frame) + { + return frame->currentpos - frame->dropped; + } + + /* + * window_framerow + * return total row number of the frame. + */ + int + window_framerow(WindowFrame frame) + { + return frame->npartition - frame->dropped; + } + + /* + * window_getarg + * return the value of the specific argument of the specific row. + * relpos can be positive or negative. + */ + Datum + window_getarg(WindowFrame frame, ExprState *argstate, + int relpos, int seektype, bool *isnull) + { + ExprContext *econtext = frame->econtext; + TupleTableSlot *slot = econtext->ecxt_outertuple; + Tuplestorestate *tuples = frame->tuples; + Datum result; + MemoryContext oldContext; + + if (!window_seek(frame, relpos, seektype)) + { + *isnull = true; + return (Datum) 0; + } + + if (!tuplestore_gettupleslot(tuples, true, slot)) + { + *isnull = true; + return (Datum) 0; + } + + oldContext = MemoryContextSwitchTo(econtext->ecxt_per_tuple_memory); + result = ExecEvalExpr(argstate, econtext, isnull, NULL); + MemoryContextSwitchTo(oldContext); + + return result; + } + + /* + * window_gettuple + * set the specified row to slot and return true if succeeded. + * relpos can be positive or negative. + */ + bool + window_gettuple(WindowFrame frame, TupleTableSlot *slot, + int relpos, int seektype) + { + Tuplestorestate *tuples = frame->tuples; + + if (!window_seek(frame, relpos, seektype)) + { + ExecClearTuple(slot); + return false; + } + + return tuplestore_gettupleslot(tuples, true, slot); + } + + /* + * window_moved + * If the window frame moved within the current partition. + * This cannot be happened unless the frame clause is given. + */ + bool + window_moved(WindowFrame frame) + { + return frame->moved; + } + + /* + * window_iter_init + * initialize the iterator from start of the frame. + */ + WindowIter + window_iter_init(WindowFrame frame) + { + WindowIterData *iter; + + /* + * We could use Assert() here but this assumption might be + * broken by external API call, so use elog(). + */ + if (frame->iterating) + elog(ERROR, "another frame iteration is not done yet."); + + iter = (WindowIterData *) palloc0(sizeof(WindowIterData)); + iter->frame = frame; + iter->finished = false; + iter->position = frame->dropped; + frame->iterating = true; + + tuplestore_copy_read_pointer(frame->tuples, frame->headptr, 0); + + return iter; + } + + /* + * window_iter_next + * advance the iterator to the next row. any tuple fetching is allowed + * after this method. + * returns false if there is no more row + */ + bool + window_iter_next(WindowIter iter) + { + WindowFrameData *frame = iter->frame; + ExprContext *econtext = frame->econtext; + TupleTableSlot *slot = econtext->ecxt_outertuple; + bool hasnext; + + if(!tuplestore_gettupleslot(frame->tuples, true, slot)) + { + iter->finished = true; + } + else + { + iter->position++; + iter->finished = ((frame->npartition - frame->dropped) < iter->position); + } + + hasnext = !iter->finished; + if (!hasnext) + { + /* finish iteration */ + frame->iterating = false; + pfree(iter); + } + + return hasnext; + } + + /* + * window_iter_getarg + * get datum from the current iterator row. + */ + Datum + window_iter_getarg(WindowIter iter, ExprState *argstate, bool *isnull) + { + WindowFrameData *frame = iter->frame; + ExprContext *econtext = frame->econtext; + Datum result; + MemoryContext oldContext; + + oldContext = MemoryContextSwitchTo(econtext->ecxt_per_tuple_memory); + result = ExecEvalExpr(argstate, econtext, isnull, NULL); + MemoryContextSwitchTo(oldContext); + + return result; + } + + + /* SQL spec window functions and helpers */ + + /* + * allocate new user space for the bran new function call. + */ + #define allocate_if_new(fcinfo, size) do{ \ + if ((fcinfo)->flinfo->fn_extra == NULL) \ + { \ + MemoryContext __oldContext; \ + __oldContext = MemoryContextSwitchTo((fcinfo)->flinfo->fn_mcxt); \ + (fcinfo)->flinfo->fn_extra = palloc0(size); \ + MemoryContextSwitchTo(__oldContext); \ + } \ + }while(0) + + /* + * Since some window functions are defined for "rows of the partition", + * sliding frame must not be specified. This restriction depends on + * each window function, thus we cannot know if the function restricts it + * until the runtime execution. + */ + #define check_frame_moving(frame) do{ \ + if (window_moved(frame)) \ + elog(ERROR, "this function does not allow the frame to move."); \ + }while(0) + + /* + * utility routine for *_rank functions. + */ + static bool + rank_up(FunctionCallInfo fcinfo) + { + WindowFrame frame = PG_WINDOW_FRAME(); + rank_context *context; + bool up = false; /* should rank up? */ + + allocate_if_new(fcinfo, sizeof(rank_context)); + + context = (rank_context *) fcinfo->flinfo->fn_extra; + + if (context->rank == 0) + { + /* first call */ + context->rank = 1; + } + else + { + WindowState *winstate; + Window *node; + ExprContext *fcontext; + TupleTableSlot *scanslot; + TupleTableSlot *frameslot; + bool res; + + /* we need two tuple slot to compare */ + winstate = (WindowState *) fcinfo->context; + node = (Window *) winstate->ss.ps.plan; + fcontext = frame->econtext; + scanslot = winstate->ss.ss_ScanTupleSlot; + frameslot = fcontext->ecxt_outertuple; + + if (!node->ordNumCols) + elog(ERROR, "this function requires ORDER BY clause in the window"); + + res = window_gettuple(frame, scanslot, -1, WINDOW_SEEK_CURRENT); + Assert(res); + res = window_gettuple(frame, frameslot, 0, WINDOW_SEEK_CURRENT); + Assert(res); + + /* tuples matching by ORDER BY clause */ + if (!execTuplesMatch(scanslot, frameslot, + node->ordNumCols, node->ordColIdx, + winstate->ordEqfunctions, + fcontext->ecxt_per_tuple_memory)) + { + up = true; + } + } + + return up; + } + + + /* + * row_number + * just increment up from 1 until current context finishes. + * This function DOES NOT allow the frame to move. + */ + Datum + row_number(PG_FUNCTION_ARGS) + { + WindowFrame frame = PG_WINDOW_FRAME(); + + check_frame_moving(frame); + + PG_RETURN_INT64(((int64) window_currentpos(frame)) + 1); + } + + + /* + * rank + * increment up if key tuple changes. The new rank number is as the current row number. + * This function DOES NOT allow the frame to move. + */ + Datum + rank(PG_FUNCTION_ARGS) + { + WindowFrame frame = PG_WINDOW_FRAME(); + rank_context *context; + bool up; + + check_frame_moving(frame); + + up = rank_up(fcinfo); + context = (rank_context *) fcinfo->flinfo->fn_extra; + if (up) + { + context->rank = window_currentpos(frame) + 1; + } + + PG_RETURN_INT64(context->rank); + } + + /* + * dense_rank + * increment up if key tuple changes. The new rank number is as added up 1. + * This function DOES NOT allow the frame to move. + */ + Datum + dense_rank(PG_FUNCTION_ARGS) + { + WindowFrame frame = PG_WINDOW_FRAME(); + rank_context *context; + bool up; + + check_frame_moving(frame); + + up = rank_up(fcinfo); + context = (rank_context *) fcinfo->flinfo->fn_extra; + if (up) + { + context->rank += 1; + } + + PG_RETURN_INT64(context->rank); + } + + /* + * percent_rank + * return fraction between 0 and 1 inclusive, which + * is described as (RK - 1) / (NR - 1), where RK is the rank and NR is + * the number of total row, per spec. + * This function DOES NOT allow the frame to move. + */ + Datum + percent_rank(PG_FUNCTION_ARGS) + { + WindowFrame frame = PG_WINDOW_FRAME(); + rank_context *context; + bool up; + int32 totalrow; + + check_frame_moving(frame); + + up = rank_up(fcinfo); + context = (rank_context *) fcinfo->flinfo->fn_extra; + if (up) + { + context->rank = window_currentpos(frame) + 1; + } + + totalrow = window_framerow(frame); + Assert(totalrow > 0); + + if (totalrow == 1) + PG_RETURN_FLOAT8(1.0); + + PG_RETURN_FLOAT8((float8) (context->rank - 1) / (float8) (totalrow - 1)); + } + + /* + * cume_dist + * return fraction betweeen 0 and 1 inclusive, which + * is described as NP / NR, where NP is the number of row preceeding and + * NR is the number of total row, per spec. + * This function DOES NOT allow the frame to move. + */ + Datum + cume_dist(PG_FUNCTION_ARGS) + { + WindowFrame frame = PG_WINDOW_FRAME(); + int totalrow; + + check_frame_moving(frame); + + totalrow = window_framerow(frame); + Assert(totalrow > 0); + + PG_RETURN_FLOAT8((float8) (window_currentpos(frame) + 1) / (float8) totalrow); + } + + /* + * ntile + * compute an exact numeric value with scale0 (zero), + * ranging from 1 (one) to n, per spec. + * This function DOES NOT allow the frame to move. + */ + Datum + ntile(PG_FUNCTION_ARGS) + { + WindowFrame frame = PG_WINDOW_FRAME(); + ntile_context *context; + + check_frame_moving(frame); + + allocate_if_new(fcinfo, sizeof(ntile_context)); + + context = (ntile_context *) fcinfo->flinfo->fn_extra; + + if (context->ntile == 0) + { + /* first call */ + int64 total; + int64 nbuckets; + bool isnull; + + total = window_framerow(frame); + nbuckets = window_getarg(frame, PG_WINDOW_ARG(0), + 0, WINDOW_SEEK_CURRENT, &isnull); + Assert(!isnull); + + context->ntile = 1; + context->rows_per_bucket = 0; + context->boundary = total / nbuckets; + if (context->boundary <= 0) + context->boundary = 1; + else + { + /* + * If the total number is not divisible, add 1 row to + * leading buckets. + */ + context->remainder = total % nbuckets; + if (context->remainder != 0) + context->boundary++; + } + } + + context->rows_per_bucket++; + if (context->boundary < context->rows_per_bucket) + { + /* ntile up */ + if (context->remainder != 0 && context->ntile == context->remainder) + { + context->remainder = 0; + context->boundary -= 1; + } + context->ntile += 1; + context->rows_per_bucket = 1; + } + + PG_RETURN_INT64(context->ntile); + } + + + /* + * lag + * returns the value of VE evaluated on a row that is OFFSET + * number of rows before the current row within a partition, + * per spec. + * This function DOES NOT allow the frame move. + */ + Datum + lag(PG_FUNCTION_ARGS) + { + WindowFrame frame = PG_WINDOW_FRAME(); + int4 offset; + Datum result; + bool isnull = false; + + check_frame_moving(frame); + + offset = window_getarg(frame, PG_WINDOW_ARG(1), + 0, WINDOW_SEEK_CURRENT, &isnull); + if (isnull) + PG_RETURN_NULL(); + + result = window_getarg(frame, PG_WINDOW_ARG(0), + -offset, WINDOW_SEEK_CURRENT, &isnull); + + if (isnull) + PG_RETURN_NULL(); + + PG_RETURN_DATUM(result); + } + + /* + * lead + * returns the value of VE evaluated on a row that is OFFSET + * number of rows after the current row within a partition, + * per spec. + * This function DOES NOT allow the frame to move. + */ + Datum + lead(PG_FUNCTION_ARGS) + { + WindowFrame frame = PG_WINDOW_FRAME(); + int4 offset; + Datum result; + bool isnull = false; + + check_frame_moving(frame); + + offset = window_getarg(frame, PG_WINDOW_ARG(1), + 0, WINDOW_SEEK_CURRENT, &isnull); + if (isnull) + PG_RETURN_NULL(); + + result = window_getarg(frame, PG_WINDOW_ARG(0), + offset, WINDOW_SEEK_CURRENT, &isnull); + + if (isnull) + PG_RETURN_NULL(); + + PG_RETURN_DATUM(result); + } + + /* + * first_value + * return the value of VE evaluated on the first row of the + * window frame, per spec. + * This function DOES allow the frame to move. + */ + Datum + first_value(PG_FUNCTION_ARGS) + { + WindowFrame frame = PG_WINDOW_FRAME(); + Datum result; + bool isnull; + + result = window_getarg(frame, PG_WINDOW_ARG(0), + 0, WINDOW_SEEK_HEAD, &isnull); + + if (isnull) + PG_RETURN_NULL(); + + PG_RETURN_DATUM(result); + } + + /* + * last_value + * return the value of VE evaluated on the last row of the + * window frame, per spec. + * This function DOES allow the frame to move. + */ + Datum + last_value(PG_FUNCTION_ARGS) + { + WindowFrame frame = PG_WINDOW_FRAME(); + Datum result; + bool isnull; + + result = window_getarg(frame, PG_WINDOW_ARG(0), + 0, WINDOW_SEEK_TAIL, &isnull); + + if (isnull) + PG_RETURN_NULL(); + + PG_RETURN_DATUM(result); + } + + /* + * nth_value + * return the value of VE evaluated on the n-th row from the first + * row of the window frame, per spec. + * The argument "nth" is an exact numeric value n with scale 0 (zero). + * This function DOES allow the frame to move. + */ + Datum + nth_value(PG_FUNCTION_ARGS) + { + WindowFrame frame = PG_WINDOW_FRAME(); + Datum result; + bool isnull; + int4 nth; + + nth = window_getarg(frame, PG_WINDOW_ARG(1), + 0, WINDOW_SEEK_CURRENT, &isnull); + + if (isnull) + PG_RETURN_NULL(); + + result = window_getarg(frame, PG_WINDOW_ARG(0), + nth, WINDOW_SEEK_HEAD, &isnull); + + if (isnull) + PG_RETURN_NULL(); + + PG_RETURN_DATUM(result); + } *** a/src/backend/nodes/copyfuncs.c --- b/src/backend/nodes/copyfuncs.c *************** *** 762,767 **** _copyLimit(Limit *from) --- 762,789 ---- } /* + * _copyWindow + */ + static Window * + _copyWindow(Window *from) + { + Window *newnode = makeNode(Window); + + CopyPlanFields((Plan *) from, (Plan *) newnode); + + COPY_SCALAR_FIELD(prtNumCols); + COPY_POINTER_FIELD(prtColIdx, from->prtNumCols * sizeof(AttrNumber)); + COPY_POINTER_FIELD(prtOperators, from->prtNumCols * sizeof(Oid)); + COPY_SCALAR_FIELD(ordNumCols); + COPY_POINTER_FIELD(ordColIdx, from->ordNumCols * sizeof(AttrNumber)); + COPY_NODE_FIELD(preceding); + COPY_NODE_FIELD(following); + COPY_SCALAR_FIELD(winref); + + return newnode; + } + + /* * _copyPlanInvalItem */ static PlanInvalItem * *************** *** 932,937 **** _copyAggref(Aggref *from) --- 954,979 ---- } /* + * _copyWFunc + */ + static WFunc * + _copyWFunc(WFunc *from) + { + WFunc *newnode = makeNode(WFunc); + + COPY_SCALAR_FIELD(winfnoid); + COPY_SCALAR_FIELD(wintype); + COPY_NODE_FIELD(args); + COPY_SCALAR_FIELD(winlevelsup); + COPY_SCALAR_FIELD(winstar); + COPY_SCALAR_FIELD(winref); + COPY_SCALAR_FIELD(pure_agg); + COPY_LOCATION_FIELD(location); + + return newnode; + } + + /* * _copyArrayRef */ static ArrayRef * *************** *** 1697,1702 **** _copySortGroupClause(SortGroupClause *from) --- 1739,1797 ---- return newnode; } + static OrderClause * + _copyOrderClause(OrderClause *from) + { + OrderClause *newnode = makeNode(OrderClause); + + COPY_SCALAR_FIELD(tleSortGroupRef); + COPY_SCALAR_FIELD(eqop); + COPY_SCALAR_FIELD(sortop); + COPY_SCALAR_FIELD(nulls_first); + + return newnode; + } + + static PartitionClause * + _copyPartitionClause(PartitionClause *from) + { + PartitionClause *newnode = makeNode(PartitionClause); + + COPY_SCALAR_FIELD(tleSortGroupRef); + COPY_SCALAR_FIELD(eqop); + COPY_SCALAR_FIELD(sortop); + COPY_SCALAR_FIELD(nulls_first); + + return newnode; + } + + static WinDef * + _copyWinDef(WinDef *from) + { + WinDef *newnode = makeNode(WinDef); + + COPY_NODE_FIELD(partitionClause); + COPY_NODE_FIELD(orderClause); + COPY_NODE_FIELD(expr_list); + COPY_STRING_FIELD(name); + COPY_LOCATION_FIELD(location); + + return newnode; + } + + static WindowClause * + _copyWindowClause(WindowClause *from) + { + WindowClause *newnode = makeNode(WindowClause); + + COPY_NODE_FIELD(partitionClause); + COPY_NODE_FIELD(orderClause); + COPY_STRING_FIELD(name); + COPY_SCALAR_FIELD(winref); + + return newnode; + } + static RowMarkClause * _copyRowMarkClause(RowMarkClause *from) { *************** *** 1816,1821 **** _copyFuncCall(FuncCall *from) --- 1911,1917 ---- COPY_SCALAR_FIELD(agg_star); COPY_SCALAR_FIELD(agg_distinct); COPY_SCALAR_FIELD(func_variadic); + COPY_NODE_FIELD(win_definition); COPY_LOCATION_FIELD(location); return newnode; *************** *** 2040,2045 **** _copyQuery(Query *from) --- 2136,2142 ---- COPY_SCALAR_FIELD(hasDistinctOn); COPY_SCALAR_FIELD(hasRecursive); COPY_NODE_FIELD(cteList); + COPY_SCALAR_FIELD(hasWindow); COPY_NODE_FIELD(rtable); COPY_NODE_FIELD(jointree); COPY_NODE_FIELD(targetList); *************** *** 2048,2053 **** _copyQuery(Query *from) --- 2145,2151 ---- COPY_NODE_FIELD(havingQual); COPY_NODE_FIELD(distinctClause); COPY_NODE_FIELD(sortClause); + COPY_NODE_FIELD(windowList); COPY_NODE_FIELD(limitOffset); COPY_NODE_FIELD(limitCount); COPY_NODE_FIELD(rowMarks); *************** *** 2108,2113 **** _copySelectStmt(SelectStmt *from) --- 2206,2212 ---- COPY_NODE_FIELD(whereClause); COPY_NODE_FIELD(groupClause); COPY_NODE_FIELD(havingClause); + COPY_NODE_FIELD(windowClause); COPY_NODE_FIELD(withClause); COPY_NODE_FIELD(valuesLists); COPY_NODE_FIELD(sortClause); *************** *** 3292,3297 **** copyObject(void *from) --- 3391,3398 ---- case T_Limit: retval = _copyLimit(from); break; + case T_Window: + retval = _copyWindow(from); case T_PlanInvalItem: retval = _copyPlanInvalItem(from); break; *************** *** 3320,3325 **** copyObject(void *from) --- 3421,3429 ---- case T_Aggref: retval = _copyAggref(from); break; + case T_WFunc: + retval = _copyWFunc(from); + break; case T_ArrayRef: retval = _copyArrayRef(from); break; *************** *** 3788,3793 **** copyObject(void *from) --- 3892,3909 ---- case T_SortGroupClause: retval = _copySortGroupClause(from); break; + case T_OrderClause: + retval = _copyOrderClause(from); + break; + case T_PartitionClause: + retval = _copyPartitionClause(from); + break; + case T_WinDef: + retval = _copyWinDef(from); + break; + case T_WindowClause: + retval = _copyWindowClause(from); + break; case T_RowMarkClause: retval = _copyRowMarkClause(from); break; *** a/src/backend/nodes/equalfuncs.c --- b/src/backend/nodes/equalfuncs.c *************** *** 192,197 **** _equalAggref(Aggref *a, Aggref *b) --- 192,212 ---- } static bool + _equalWFunc(WFunc *a, WFunc *b) + { + COMPARE_SCALAR_FIELD(winfnoid); + COMPARE_SCALAR_FIELD(wintype); + COMPARE_NODE_FIELD(args); + COMPARE_SCALAR_FIELD(winlevelsup); + COMPARE_SCALAR_FIELD(winstar); + COMPARE_SCALAR_FIELD(winref); + COMPARE_SCALAR_FIELD(pure_agg); + COMPARE_LOCATION_FIELD(location); + + return true; + } + + static bool _equalArrayRef(ArrayRef *a, ArrayRef *b) { COMPARE_SCALAR_FIELD(refarraytype); *************** *** 871,876 **** _equalSelectStmt(SelectStmt *a, SelectStmt *b) --- 886,892 ---- COMPARE_NODE_FIELD(whereClause); COMPARE_NODE_FIELD(groupClause); COMPARE_NODE_FIELD(havingClause); + COMPARE_NODE_FIELD(windowClause); COMPARE_NODE_FIELD(withClause); COMPARE_NODE_FIELD(valuesLists); COMPARE_NODE_FIELD(sortClause); *************** *** 1765,1770 **** _equalFuncCall(FuncCall *a, FuncCall *b) --- 1781,1787 ---- COMPARE_SCALAR_FIELD(agg_star); COMPARE_SCALAR_FIELD(agg_distinct); COMPARE_SCALAR_FIELD(func_variadic); + COMPARE_NODE_FIELD(win_definition); COMPARE_LOCATION_FIELD(location); return true; *************** *** 1969,1974 **** _equalSortGroupClause(SortGroupClause *a, SortGroupClause *b) --- 1986,2014 ---- } static bool + _equalWinDef(WinDef *a, WinDef *b) + { + COMPARE_NODE_FIELD(partitionClause); + COMPARE_NODE_FIELD(orderClause); + COMPARE_NODE_FIELD(expr_list); + COMPARE_STRING_FIELD(name); + COMPARE_LOCATION_FIELD(location); + + return true; + } + + static bool + _equalWindowClause(WindowClause *a, WindowClause *b) + { + COMPARE_NODE_FIELD(partitionClause); + COMPARE_NODE_FIELD(orderClause); + COMPARE_STRING_FIELD(name); + COMPARE_SCALAR_FIELD(winref); + + return true; + } + + static bool _equalRowMarkClause(RowMarkClause *a, RowMarkClause *b) { COMPARE_SCALAR_FIELD(rti); *************** *** 2170,2175 **** equal(void *a, void *b) --- 2210,2217 ---- break; case T_Aggref: retval = _equalAggref(a, b); + case T_WFunc: + retval = _equalWFunc(a, b); break; case T_ArrayRef: retval = _equalArrayRef(a, b); *************** *** 2276,2281 **** equal(void *a, void *b) --- 2318,2326 ---- case T_JoinExpr: retval = _equalJoinExpr(a, b); break; + case T_WindowClause: + retval = _equalWindowClause(a, b); + break; /* * RELATION NODES *************** *** 2623,2630 **** equal(void *a, void *b) --- 2668,2680 ---- retval = _equalRangeTblEntry(a, b); break; case T_SortGroupClause: + case T_OrderClause: + case T_PartitionClause: retval = _equalSortGroupClause(a, b); break; + case T_WinDef: + retval = _equalWinDef(a, b); + break; case T_RowMarkClause: retval = _equalRowMarkClause(a, b); break; *** a/src/backend/nodes/nodeFuncs.c --- b/src/backend/nodes/nodeFuncs.c *************** *** 52,57 **** exprType(Node *expr) --- 52,60 ---- case T_Aggref: type = ((Aggref *) expr)->aggtype; break; + case T_WFunc: + type = ((WFunc *) expr)->wintype; + break; case T_ArrayRef: { ArrayRef *arrayref = (ArrayRef *) expr; *************** *** 1036,1041 **** expression_tree_walker(Node *node, --- 1039,1052 ---- return true; } break; + case T_WFunc: + { + WFunc *expr = (WFunc *) node; + if(expression_tree_walker((Node *) expr->args, + walker, context)) + return true; + } + break; case T_ArrayRef: { ArrayRef *aref = (ArrayRef *) node; *************** *** 1527,1532 **** expression_tree_mutator(Node *node, --- 1538,1553 ---- return (Node *) newnode; } break; + case T_WFunc: + { + WFunc *wfunc = (WFunc *) node; + WFunc *newnode; + + FLATCOPY(newnode, wfunc, WFunc); + MUTATE(newnode->args, wfunc->args, List *); + return (Node *) newnode; + } + break; case T_ArrayRef: { ArrayRef *arrayref = (ArrayRef *) node; *** a/src/backend/nodes/outfuncs.c --- b/src/backend/nodes/outfuncs.c *************** *** 684,689 **** _outLimit(StringInfo str, Limit *node) --- 684,711 ---- } static void + _outWindow(StringInfo str, Window *node) + { + int i; + + WRITE_NODE_TYPE("WINDOW"); + + _outPlanInfo(str, (Plan *) node); + + appendStringInfo(str, " :prtColIdx"); + for (i = 0; i < node->prtNumCols; i++) + appendStringInfo(str, " %d", node->prtColIdx[i]); + + appendStringInfo(str, " :prtOperations"); + for (i = 0; i < node->prtNumCols; i++) + appendStringInfo(str, " %d", node->prtOperators[i]); + + appendStringInfo(str, " :ordColIdx"); + for (i = 0; i< node->ordNumCols; i++) + appendStringInfo(str, " %d", node->ordColIdx[i]); + } + + static void _outPlanInvalItem(StringInfo str, PlanInvalItem *node) { WRITE_NODE_TYPE("PLANINVALITEM"); *************** *** 799,804 **** _outAggref(StringInfo str, Aggref *node) --- 821,841 ---- } static void + _outWFunc(StringInfo str, WFunc *node) + { + WRITE_NODE_TYPE("WFUNC"); + + WRITE_OID_FIELD(winfnoid); + WRITE_OID_FIELD(wintype); + WRITE_NODE_FIELD(args); + WRITE_UINT_FIELD(winlevelsup); + WRITE_BOOL_FIELD(winstar); + WRITE_UINT_FIELD(winref); + WRITE_BOOL_FIELD(pure_agg); + WRITE_LOCATION_FIELD(location); + } + + static void _outArrayRef(StringInfo str, ArrayRef *node) { WRITE_NODE_TYPE("ARRAYREF"); *************** *** 1697,1702 **** _outSelectStmt(StringInfo str, SelectStmt *node) --- 1734,1740 ---- WRITE_NODE_FIELD(groupClause); WRITE_NODE_FIELD(havingClause); WRITE_NODE_FIELD(withClause); + WRITE_NODE_FIELD(windowClause); WRITE_NODE_FIELD(valuesLists); WRITE_NODE_FIELD(sortClause); WRITE_NODE_FIELD(limitOffset); *************** *** 1718,1723 **** _outFuncCall(StringInfo str, FuncCall *node) --- 1756,1762 ---- WRITE_BOOL_FIELD(agg_star); WRITE_BOOL_FIELD(agg_distinct); WRITE_BOOL_FIELD(func_variadic); + WRITE_NODE_FIELD(win_definition); WRITE_LOCATION_FIELD(location); } *************** *** 1842,1847 **** _outQuery(StringInfo str, Query *node) --- 1881,1887 ---- WRITE_BOOL_FIELD(hasAggs); WRITE_BOOL_FIELD(hasSubLinks); WRITE_BOOL_FIELD(hasDistinctOn); + WRITE_BOOL_FIELD(hasWindow); WRITE_BOOL_FIELD(hasRecursive); WRITE_NODE_FIELD(cteList); WRITE_NODE_FIELD(rtable); *************** *** 1852,1857 **** _outQuery(StringInfo str, Query *node) --- 1892,1898 ---- WRITE_NODE_FIELD(havingQual); WRITE_NODE_FIELD(distinctClause); WRITE_NODE_FIELD(sortClause); + WRITE_NODE_FIELD(windowList); WRITE_NODE_FIELD(limitOffset); WRITE_NODE_FIELD(limitCount); WRITE_NODE_FIELD(rowMarks); *************** *** 1870,1875 **** _outSortGroupClause(StringInfo str, SortGroupClause *node) --- 1911,1962 ---- } static void + _outOrderClause(StringInfo str, OrderClause *node) + { + WRITE_NODE_TYPE("ORDERCLAUSE"); + + WRITE_UINT_FIELD(tleSortGroupRef); + WRITE_OID_FIELD(eqop); + WRITE_OID_FIELD(sortop); + WRITE_BOOL_FIELD(nulls_first); + } + + static void + _outPartitionClause(StringInfo str, PartitionClause *node) + { + WRITE_NODE_TYPE("PARTITIONCLAUSE"); + + WRITE_UINT_FIELD(tleSortGroupRef); + WRITE_OID_FIELD(eqop); + WRITE_OID_FIELD(sortop); + WRITE_BOOL_FIELD(nulls_first); + } + + static void + _outWinDef(StringInfo str, WinDef *node) + { + WRITE_NODE_TYPE("WINDEF"); + + WRITE_NODE_FIELD(partitionClause); + WRITE_NODE_FIELD(orderClause); + WRITE_NODE_FIELD(expr_list); + WRITE_STRING_FIELD(name); + WRITE_LOCATION_FIELD(location); + } + + static void + _outWindowClause(StringInfo str, WindowClause *node) + { + WRITE_NODE_TYPE("WINDOWCLAUSE"); + + WRITE_NODE_FIELD(partitionClause); + WRITE_NODE_FIELD(orderClause); + WRITE_STRING_FIELD(name); + WRITE_UINT_FIELD(winref); + } + + + static void _outRowMarkClause(StringInfo str, RowMarkClause *node) { WRITE_NODE_TYPE("ROWMARKCLAUSE"); *************** *** 2340,2345 **** _outNode(StringInfo str, void *obj) --- 2427,2435 ---- case T_Limit: _outLimit(str, obj); break; + case T_Window: + _outWindow(str, obj); + break; case T_PlanInvalItem: _outPlanInvalItem(str, obj); break; *************** *** 2364,2369 **** _outNode(StringInfo str, void *obj) --- 2454,2462 ---- case T_Aggref: _outAggref(str, obj); break; + case T_WFunc: + _outWFunc(str, obj); + break; case T_ArrayRef: _outArrayRef(str, obj); break; *************** *** 2582,2587 **** _outNode(StringInfo str, void *obj) --- 2675,2692 ---- case T_SortGroupClause: _outSortGroupClause(str, obj); break; + case T_OrderClause: + _outOrderClause(str, obj); + break; + case T_PartitionClause: + _outPartitionClause(str, obj); + break; + case T_WinDef: + _outWinDef(str, obj); + break; + case T_WindowClause: + _outWindowClause(str, obj); + break; case T_RowMarkClause: _outRowMarkClause(str, obj); break; *** a/src/backend/nodes/readfuncs.c --- b/src/backend/nodes/readfuncs.c *************** *** 155,160 **** _readQuery(void) --- 155,161 ---- READ_BOOL_FIELD(hasAggs); READ_BOOL_FIELD(hasSubLinks); READ_BOOL_FIELD(hasDistinctOn); + READ_BOOL_FIELD(hasWindow); READ_BOOL_FIELD(hasRecursive); READ_NODE_FIELD(cteList); READ_NODE_FIELD(rtable); *************** *** 165,170 **** _readQuery(void) --- 166,172 ---- READ_NODE_FIELD(havingQual); READ_NODE_FIELD(distinctClause); READ_NODE_FIELD(sortClause); + READ_NODE_FIELD(windowList); READ_NODE_FIELD(limitOffset); READ_NODE_FIELD(limitCount); READ_NODE_FIELD(rowMarks); *************** *** 218,223 **** _readSortGroupClause(void) --- 220,290 ---- } /* + * _readOrderClause + */ + static OrderClause * + _readOrderClause(void) + { + READ_LOCALS(OrderClause); + + READ_UINT_FIELD(tleSortGroupRef); + READ_OID_FIELD(eqop); + READ_OID_FIELD(sortop); + READ_BOOL_FIELD(nulls_first); + + READ_DONE(); + } + + /* + * _readPartitionClause + */ + static PartitionClause * + _readPartitionClause(void) + { + READ_LOCALS(PartitionClause); + + READ_UINT_FIELD(tleSortGroupRef); + READ_OID_FIELD(eqop); + READ_OID_FIELD(sortop); + READ_BOOL_FIELD(nulls_first); + + READ_DONE(); + } + + /* + * _readWinDef + */ + static WinDef * + _readWinDef(void) + { + READ_LOCALS(WinDef); + + READ_NODE_FIELD(partitionClause); + READ_NODE_FIELD(orderClause); + READ_NODE_FIELD(expr_list); + READ_STRING_FIELD(name); + READ_LOCATION_FIELD(location); + + READ_DONE(); + } + + /* + * _readWindowClause + */ + static WindowClause * + _readWindowClause(void) + { + READ_LOCALS(WindowClause); + + READ_NODE_FIELD(partitionClause); + READ_NODE_FIELD(orderClause); + READ_STRING_FIELD(name); + READ_UINT_FIELD(winref); + + READ_DONE(); + } + + /* * _readRowMarkClause */ static RowMarkClause * *************** *** 401,406 **** _readAggref(void) --- 468,493 ---- } /* + * _readWFunc + */ + static WFunc * + _readWFunc(void) + { + READ_LOCALS(WFunc); + + READ_OID_FIELD(winfnoid); + READ_OID_FIELD(wintype); + READ_NODE_FIELD(args); + READ_UINT_FIELD(winlevelsup); + READ_BOOL_FIELD(winstar); + READ_UINT_FIELD(winref); + READ_BOOL_FIELD(pure_agg); + READ_LOCATION_FIELD(location); + + READ_DONE(); + } + + /* * _readArrayRef */ static ArrayRef * *************** *** 1089,1094 **** parseNodeString(void) --- 1176,1189 ---- return_value = _readQuery(); else if (MATCH("SORTGROUPCLAUSE", 15)) return_value = _readSortGroupClause(); + else if (MATCH("ORDERCLAUSE", 11)) + return_value = _readOrderClause(); + else if (MATCH("PARTITIONCLAUSE", 15)) + return_value = _readPartitionClause(); + else if (MATCH("WINDEF", 6)) + return_value = _readWinDef(); + else if (MATCH("WINDOWCLAUSE", 12)) + return_value = _readWindowClause(); else if (MATCH("ROWMARKCLAUSE", 13)) return_value = _readRowMarkClause(); else if (MATCH("COMMONTABLEEXPR", 15)) *************** *** 1109,1114 **** parseNodeString(void) --- 1204,1211 ---- return_value = _readParam(); else if (MATCH("AGGREF", 6)) return_value = _readAggref(); + else if (MATCH("WFUNC", 9)) + return_value = _readWFunc(); else if (MATCH("ARRAYREF", 8)) return_value = _readArrayRef(); else if (MATCH("FUNCEXPR", 8)) *** a/src/backend/optimizer/path/allpaths.c --- b/src/backend/optimizer/path/allpaths.c *************** *** 935,941 **** standard_join_search(PlannerInfo *root, int levels_needed, List *initial_rels) * * Conditions checked here: * ! * 1. If the subquery has a LIMIT clause, we must not push down any quals, * since that could change the set of rows returned. * * 2. If the subquery contains EXCEPT or EXCEPT ALL set ops we cannot push --- 935,941 ---- * * Conditions checked here: * ! * 1. If the subquery has a LIMIT or Window clause, we must not push down any quals, * since that could change the set of rows returned. * * 2. If the subquery contains EXCEPT or EXCEPT ALL set ops we cannot push *************** *** 956,962 **** subquery_is_pushdown_safe(Query *subquery, Query *topquery, SetOperationStmt *topop; /* Check point 1 */ ! if (subquery->limitOffset != NULL || subquery->limitCount != NULL) return false; /* Are we at top level, or looking at a setop component? */ --- 956,963 ---- SetOperationStmt *topop; /* Check point 1 */ ! if (subquery->limitOffset != NULL || subquery->limitCount != NULL ! || subquery->hasWindow) return false; /* Are we at top level, or looking at a setop component? */ *** a/src/backend/optimizer/path/equivclass.c --- b/src/backend/optimizer/path/equivclass.c *************** *** 438,451 **** get_eclass_for_sort_expr(PlannerInfo *root, /* * add_eq_member doesn't check for volatile functions, set-returning ! * functions, or aggregates, but such could appear in sort expressions; so ! * we have to check whether its const-marking was correct. */ if (newec->ec_has_const) { if (newec->ec_has_volatile || expression_returns_set((Node *) expr) || ! contain_agg_clause((Node *) expr)) { newec->ec_has_const = false; newem->em_is_const = false; --- 438,454 ---- /* * add_eq_member doesn't check for volatile functions, set-returning ! * functions, aggregates, or window functions, but such could appear ! * in sort expressions; so we have to check whether its const-marking ! * was correct. ! * XXX: need consider stable function? */ if (newec->ec_has_const) { if (newec->ec_has_volatile || expression_returns_set((Node *) expr) || ! contain_agg_clause((Node *) expr) || ! find_wfunc((Node *) expr) != NULL) { newec->ec_has_const = false; newem->em_is_const = false; *** a/src/backend/optimizer/plan/createplan.c --- b/src/backend/optimizer/plan/createplan.c *************** *** 3482,3487 **** make_limit(Plan *lefttree, Node *limitOffset, Node *limitCount, --- 3482,3608 ---- return node; } + /* + * make_window + * Almost same as make_agg in the meaning of partition columns + */ + Window * + make_window(PlannerInfo *root, + List *tlist, + WindowClause *parse, + Oid *prtOperators, + Oid *ordOperators, + Plan *lefttree) + { + Window *node = makeNode(Window); + Plan *plan = &node->plan; + List *sub_tlist = lefttree->targetlist; + ListCell *lc; + int numCols; + int numWfuncs; + + /* + * count up window functions + */ + numWfuncs = 0; + foreach(lc, tlist) + { + TargetEntry *tle = (TargetEntry *) lfirst(lc); + Node *wfunc; + + wfunc = find_wfunc(tle); + if(wfunc) + numWfuncs++; + } + + copy_plan_costsize(plan, lefttree); + + /* + * Charge one cpu_operator_cost per comparison per input tuple. We assume + * all columns get compared at most of the tuples. + */ + numCols = list_length(tlist); + plan->total_cost += cpu_operator_cost * lefttree->plan_rows * numCols; + plan->total_cost += cpu_operator_cost * numWfuncs * lefttree->plan_rows; + + plan->lefttree = lefttree; + plan->targetlist = tlist; + plan->qual = NIL; + + numCols = list_length(parse->partitionClause); + node->prtNumCols = numCols; + if (parse->partitionClause) + { + int keyno = 0; + AttrNumber *prtColIdx = NULL; + ListCell *pl; + + prtColIdx = (AttrNumber *) palloc(sizeof(AttrNumber) * numCols); + + foreach(pl, parse->partitionClause) + { + PartitionClause *prtcl = (PartitionClause *) lfirst(pl); + Node *prtexpr = get_sortgroupclause_expr(prtcl, sub_tlist); + TargetEntry *te = NULL; + ListCell *l; + + foreach(l, sub_tlist) + { + te = (TargetEntry *) lfirst(l); + if (equal(prtexpr, te->expr)) + break; + } + + Assert(te); + prtColIdx[keyno++] = te->resno; + } + node->prtColIdx = prtColIdx; + node->prtOperators = prtOperators; + } + + numCols = list_length(parse->orderClause); + node->ordNumCols = numCols; + if (parse->orderClause) + { + int keyno = 0; + AttrNumber *ordColIdx = NULL; + ListCell *ol; + + ordColIdx = (AttrNumber *) palloc(sizeof(AttrNumber) * numCols); + foreach(ol, parse->orderClause) + { + OrderClause *ordcl = (OrderClause *) lfirst(ol); + Node *ordexpr = get_sortgroupclause_expr(ordcl, sub_tlist); + TargetEntry *te = NULL; + ListCell *l; + + foreach(l, sub_tlist) + { + te = (TargetEntry *) lfirst(l); + if (equal(ordexpr, te->expr)) + break; + } + + Assert(te); + ordColIdx[keyno++] = te->resno; + } + /* orderClause columns will be used as "key columns". */ + node->ordColIdx = ordColIdx; + node->ordOperators = ordOperators; + } + + /* + * Currently, the parser doesn't accept frame clause. + * This is for future implementation. + */ + node->frameType = WINDOW_FRAME_NONE; + node->preceding = NULL; + node->following = NULL; + + node->winref = parse->winref; + + return node; + } /* * make_result *** a/src/backend/optimizer/plan/planagg.c --- b/src/backend/optimizer/plan/planagg.c *************** *** 52,57 **** static ScanDirection match_agg_to_index_col(MinMaxAggInfo *info, --- 52,58 ---- static void make_agg_subplan(PlannerInfo *root, MinMaxAggInfo *info); static Node *replace_aggs_with_params_mutator(Node *node, List **context); static Oid fetch_agg_sort_op(Oid aggfnoid); + static bool find_aggref_walker(Node *node, Aggref **context); /* *************** *** 625,627 **** fetch_agg_sort_op(Oid aggfnoid) --- 626,652 ---- return aggsortop; } + + Aggref * + find_aggref(Node *node) + { + Aggref *context = NULL; + + find_aggref_walker(node, &context); + return context; + } + + static bool + find_aggref_walker(Node *node, Aggref **context) + { + if (node == NULL) + return false; + + if (IsA(node, Aggref)) + { + *context = (Aggref *) node; + return true; + } + + return expression_tree_walker(node, find_aggref_walker, (void *) context); + } *** a/src/backend/optimizer/plan/planner.c --- b/src/backend/optimizer/plan/planner.c *************** *** 22,27 **** --- 22,28 ---- #include "executor/nodeAgg.h" #include "miscadmin.h" #include "nodes/makefuncs.h" + #include "nodes/nodeFuncs.h" #include "optimizer/clauses.h" #include "optimizer/cost.h" #include "optimizer/pathnode.h" *************** *** 82,87 **** static void locate_grouping_columns(PlannerInfo *root, --- 83,90 ---- List *sub_tlist, AttrNumber *groupColIdx); static List *postprocess_setop_tlist(List *new_tlist, List *orig_tlist); + static List *preprocess_window(List *tlist, Plan *subplan); + static List *window_tlist(List *tlist, Index winref, bool *has_win); /***************************************************************************** *************** *** 1232,1237 **** grouping_planner(PlannerInfo *root, double tuple_fraction) --- 1235,1323 ---- } /* end of if (setOperations) */ /* + * Window nodes are stacked one by one for each window because Window + * functions are evaluated in the appropriate window. Hence, in a window + * level, upper window expressions are replaced by nulls so as to be + * evaluated in the upper Window node. For lower expressions, setrefs + * will replace them to Var nodes. + */ + if (parse->windowList) + { + ListCell *l; + List *window_pathkeys = NIL; + + /* + * If the top-level plan node is one that cannot do expression + * evaluation, we must insert a Result node to project the + * desired tlist. + */ + if (!is_projection_capable_plan(result_plan)) + { + result_plan = (Plan *) make_result(root, + tlist, + NULL, + result_plan); + } + result_plan->targetlist = preprocess_window(tlist, result_plan); + foreach(l, parse->windowList) + { + List *current_tlist; + List *partition_pathkeys = NIL; + List *order_pathkeys = NIL; + WindowClause *wc = (WindowClause *) lfirst(l); + bool has_win = false; + + current_tlist = window_tlist(tlist, wc->winref, &has_win); + if (!has_win) + continue; + + /* + * Currently, Window Partitioning strategy is only by Sort. + * So just join partitionClause and orderClause + * to match Grouping. Hashing algorithm will be considered later. + */ + if (wc->partitionClause) + { + partition_pathkeys = make_pathkeys_for_sortclauses(root, + wc->partitionClause, + result_plan->targetlist, + false); + } + + if (wc->orderClause) + { + order_pathkeys = make_pathkeys_for_sortclauses(root, + wc->orderClause, + result_plan->targetlist, + false); + } + + Assert(partition_pathkeys != NIL || order_pathkeys != NIL); + /* + * create Sort node under Window, so PARTITION BY works + */ + window_pathkeys = list_concat(partition_pathkeys, order_pathkeys); + window_pathkeys = canonicalize_pathkeys(root, window_pathkeys); + if (!pathkeys_contained_in(window_pathkeys, current_pathkeys)) + { + result_plan = (Plan *) make_sort_from_pathkeys(root, + result_plan, + window_pathkeys, + -1); + current_pathkeys = window_pathkeys; + } + + result_plan = (Plan *) make_window(root, + current_tlist, + wc, + extract_grouping_ops(wc->partitionClause), + extract_grouping_ops(wc->orderClause), + result_plan); + } + current_pathkeys = NIL; + } + + /* * If there is a DISTINCT clause, add the necessary node(s). */ if (parse->distinctClause) *************** *** 2034,2040 **** make_subplanTargetList(PlannerInfo *root, * If we're not grouping or aggregating, there's nothing to do here; * query_planner should receive the unmodified target list. */ ! if (!parse->hasAggs && !parse->groupClause && !root->hasHavingQual) { *need_tlist_eval = true; return tlist; --- 2120,2126 ---- * If we're not grouping or aggregating, there's nothing to do here; * query_planner should receive the unmodified target list. */ ! if (!parse->hasAggs && !parse->groupClause && !root->hasHavingQual && !parse->hasWindow) { *need_tlist_eval = true; return tlist; *************** *** 2194,2196 **** postprocess_setop_tlist(List *new_tlist, List *orig_tlist) --- 2280,2461 ---- elog(ERROR, "resjunk output columns are not implemented"); return new_tlist; } + + /* + * preprocess_window - + * given parser tlist, returns recomposed tlist for current top plan. + * + * Before create Window nodes, window expressions are removed from current + * tlist because current plan must not be a Window node. These expressions + * are evaluated in appropriate window later. + * + * There are two main cases to be considered. + * 1. Agg/Group + * Vars from scan node required by any of expression should have been pulled + * up to now. So there's no need to consider it. + * + * 2. Other Scan + * The situation resembles to the one in Agg/Group. Var expressions are pulled + * (tlist is flattened), and other evaluation expressions but window expression + * are as well, since in Window nodes we take care of only window expression. + * + * common in both + * WFunc args are also pulled and appended to the subplan. The window functions + * assume their arguments must be Var or Const, retrieved from outer plan. + */ + static List * + preprocess_window(List *tlist, Plan *subplan) + { + ListCell *l; + List *pulled_exprs = NIL; + List *output_targetlist; + AttrNumber resno, + tlist_resno; + + /* + * Agg/Group has already flatten its tlist. Only other nodes + * must consider pulling vars. + */ + if (!(IsA(subplan, Agg) || IsA(subplan, Group))) + { + /* + * copyObject() is required, as in tlist = lappend(tlist, tle); + * Without this, it may fall into an infinte loop. + */ + output_targetlist = copyObject(flatten_tlist(tlist)); + tlist_resno = list_length(tlist); + + foreach(l, output_targetlist) + { + TargetEntry *tle = (TargetEntry *) lfirst(l); + TargetEntry *member; + Var *var = (Var *) tle->expr; + + /* + * tlist must have full set of vars required + * by any window functions up to the top Window node. + */ + member = tlist_member((Node *) var, tlist); + if (!member) + { + tlist_resno++; + tle = makeTargetEntry(copyObject(var), + tlist_resno, + NULL, + true); + tlist = lappend(tlist, tle); + } + else + { + /* + * It is necessary since flatten_tlist() doesn't pull + * their resosortgroupref. + */ + tle->ressortgroupref = member->ressortgroupref; + } + } + } + + resno = list_length(output_targetlist); + foreach(l, tlist) + { + TargetEntry *tle = (TargetEntry *) lfirst(l); + WFunc *wfunc; + ListCell *lc; + + /* + * WFuncs doesn't work in the current top plan. So + * we replace these nodes to NullConst but save their + * args in order that WFuncs argument evaluations contain + * only Var and Const. + */ + wfunc = (WFunc *) find_wfunc((Node *) tle->expr); + if (wfunc) + { + pulled_exprs = list_concat(pulled_exprs, wfunc->args); + tle = flatCopyTargetEntry(tle); + tle->expr = (Expr *) makeNullConst(exprType((Node *) tle->expr), + exprTypmod((Node *) tle->expr)); + } + + foreach(lc, output_targetlist) + { + if (tlist_member((Node *) tle->expr, output_targetlist)) + break; + } + + /* + * If an entry isn't in flatten tlist nor window expression, + * it must be evaluated here before any of Window nodes. + */ + if (!lc) + { + TargetEntry *newtle = flatCopyTargetEntry(tle); + + resno++; + newtle->resno = resno; + output_targetlist = lappend(output_targetlist, newtle); + } + } + + /* + * finally pulled arguments are appended to the current tlist so that + * each window function can take Var or Const arguments. + */ + foreach(l, pulled_exprs) + { + TargetEntry *tle; + Expr *expr = (Expr *) lfirst(l); + + resno++; + tle = makeTargetEntry(expr, + resno, + NULL, + true); + output_targetlist = lappend(output_targetlist, tle); + } + + return output_targetlist; + } + + /* + * window_tlist - + * + * creates tlist suitable for the current window, indicated by winref. + * For the upper window expressions than current, they are relpaced + * by NullConst, so that setrefs can understand where the references + * may stop. + * With window clause syntax, there may be a window in which none of + * window evaluations is executed. In this case, we can pass by the window. + */ + static List * + window_tlist(List *tlist, Index winref, bool *has_win) + { + List *output_targetlist = NIL; + ListCell *l; + + foreach(l, tlist) + { + TargetEntry *tle = (TargetEntry *) lfirst(l); + WFunc *wfunc; + + tle = flatCopyTargetEntry(tle); + wfunc = (WFunc *) find_wfunc_greater((Node *) tle->expr); + if (wfunc && winref == wfunc->winref) + *has_win = true; + + /* + * window that contains evaluation on upper than current window is set null. + * for the lower ones, setrefs will fix them to Vars pointing to OUTER. + */ + if (wfunc && winref < wfunc->winref) + { + tle->expr = (Expr *) makeNullConst(exprType((Node *) tle->expr), + exprTypmod((Node *) tle->expr)); + } + + output_targetlist = lappend(output_targetlist, tle); + } + + return output_targetlist; + } *** a/src/backend/optimizer/plan/setrefs.c --- b/src/backend/optimizer/plan/setrefs.c *************** *** 415,420 **** set_plan_refs(PlannerGlobal *glob, Plan *plan, int rtoffset) --- 415,421 ---- break; case T_Agg: case T_Group: + case T_Window: set_upper_references(glob, plan, rtoffset); break; case T_Result: *** a/src/backend/optimizer/plan/subselect.c --- b/src/backend/optimizer/plan/subselect.c *************** *** 1947,1952 **** finalize_plan(PlannerInfo *root, Plan *plan, Bitmapset *valid_params) --- 1947,1953 ---- case T_Unique: case T_SetOp: case T_Group: + case T_Window: break; default: *** a/src/backend/optimizer/prep/prepjointree.c --- b/src/backend/optimizer/prep/prepjointree.c *************** *** 928,933 **** is_simple_subquery(Query *subquery) --- 928,934 ---- * limiting, or WITH. (XXX WITH could possibly be allowed later) */ if (subquery->hasAggs || + subquery->hasWindow || subquery->groupClause || subquery->havingQual || subquery->sortClause || *** a/src/backend/optimizer/util/clauses.c --- b/src/backend/optimizer/util/clauses.c *************** *** 780,785 **** contain_volatile_functions_walker(Node *node, void *context) --- 780,793 ---- return true; /* else fall through to check args */ } + else if (IsA(node, WFunc)) + { + WFunc *winagg = (WFunc *) node; + + if (func_volatile(winagg->winfnoid) == PROVOLATILE_VOLATILE) + return true; + /* else fall through to check args */ + } else if (IsA(node, OpExpr)) { OpExpr *expr = (OpExpr *) node; *** a/src/backend/optimizer/util/tlist.c --- b/src/backend/optimizer/util/tlist.c *************** *** 366,368 **** grouping_is_hashable(List *groupClause) --- 366,369 ---- } return true; } + *** a/src/backend/optimizer/util/var.c --- b/src/backend/optimizer/util/var.c *************** *** 59,64 **** typedef struct --- 59,70 ---- int sublevels_up; } flatten_join_alias_vars_context; + typedef struct + { + Node *node; + int prefer; + } find_wfunc_context; + static bool pull_varnos_walker(Node *node, pull_varnos_context *context); static bool pull_varattnos_walker(Node *node, Bitmapset **varattnos); *************** *** 75,80 **** static bool pull_var_clause_walker(Node *node, --- 81,88 ---- static Node *flatten_join_alias_vars_mutator(Node *node, flatten_join_alias_vars_context *context); static Relids alias_relid_set(PlannerInfo *root, Relids relids); + static Node *find_wfunc_inner(Node *node, int prefer); + static bool find_wfunc_walker(Node *node, find_wfunc_context *context); /* *************** *** 748,750 **** alias_relid_set(PlannerInfo *root, Relids relids) --- 756,837 ---- bms_free(tmprelids); return result; } + + /* + * Since a target entry may contain more than one window function, + * caller can specify which window function is demanded. + */ + Node * + find_wfunc_greater(Node *node) + { + return find_wfunc_inner(node, 1); + } + + Node * + find_wfunc_lesser(Node *node) + { + return find_wfunc_inner(node, -1); + } + + Node * + find_wfunc(Node *node) + { + return find_wfunc_inner(node, 0); + } + + /* + * find_wfunc - + * find window function node in the given TargetEntry. + * parameter prefer means caller prefers greater winref in > 0 and + * lesser winref in < 0. prefer 0 means no care. + */ + static Node * + find_wfunc_inner(Node *node, int prefer) + { + find_wfunc_context context; + + context.node = NULL; + context.prefer = prefer; + find_wfunc_walker(node, &context); + + return context.node; + } + + /* + * find_wfunc_walker - + */ + static bool + find_wfunc_walker(Node *node, find_wfunc_context *context) + { + if (node == NULL) + return false; + + if (IsA(node, WFunc)) + { + if (context->node) + { + if (context->prefer > 0) + { + if (((WFunc *) context->node)->winref < ((WFunc *) node)->winref) + context->node = node; + } + else + { + /* context->node != NULL && context->prefer == 0 doesn't make sense */ + if (((WFunc *) context->node)->winref > ((WFunc *) node)->winref) + context->node = node; + } + } + else + context->node = node; + + /* + * no prefer, which means no need to search others. + * let's return the first found node. + */ + if (context->prefer == 0) + return true; + } + + return expression_tree_walker(node, find_wfunc_walker, (void *) context); + } *** a/src/backend/parser/analyze.c --- b/src/backend/parser/analyze.c *************** *** 779,785 **** transformSelectStmt(ParseState *pstate, SelectStmt *stmt) qry->hasDistinctOn = true; } ! /* transform LIMIT */ qry->limitOffset = transformLimitClause(pstate, stmt->limitOffset, "OFFSET"); qry->limitCount = transformLimitClause(pstate, stmt->limitCount, --- 779,789 ---- qry->hasDistinctOn = true; } ! pstate->p_windef_list = list_concat(stmt->windowClause, pstate->p_windef_list); ! qry->windowList = transformWinDef(pstate, ! pstate->p_windef_list, ! &qry->targetList); ! qry->limitOffset = transformLimitClause(pstate, stmt->limitOffset, "OFFSET"); qry->limitCount = transformLimitClause(pstate, stmt->limitCount, *************** *** 798,806 **** transformSelectStmt(ParseState *pstate, SelectStmt *stmt) --- 802,814 ---- qry->hasSubLinks = pstate->p_hasSubLinks; qry->hasAggs = pstate->p_hasAggs; + qry->hasWindow = pstate->p_hasWindow; if (pstate->p_hasAggs || qry->groupClause || qry->havingQual) parseCheckAggregates(pstate, qry); + if (pstate->p_hasWindow) + parseCheckWindow(pstate, qry); + foreach(l, stmt->lockingClause) { transformLockingClause(pstate, qry, (LockingClause *) lfirst(l)); *************** *** 1564,1571 **** transformUpdateStmt(ParseState *pstate, UpdateStmt *stmt) qry->hasSubLinks = pstate->p_hasSubLinks; /* ! * Top-level aggregates are simply disallowed in UPDATE, per spec. (From ! * an implementation point of view, this is forced because the implicit * ctid reference would otherwise be an ungrouped variable.) */ if (pstate->p_hasAggs) --- 1572,1579 ---- qry->hasSubLinks = pstate->p_hasSubLinks; /* ! * Top-level aggregates nor window are simply disallowed in UPDATE, per spec. ! * (From an implementation point of view, this is forced because the implicit * ctid reference would otherwise be an ungrouped variable.) */ if (pstate->p_hasAggs) *************** *** 1575,1580 **** transformUpdateStmt(ParseState *pstate, UpdateStmt *stmt) --- 1583,1593 ---- parser_errposition(pstate, locate_agg_of_level((Node *) qry, 0)))); + if (pstate->p_hasWindow) + ereport(ERROR, + (errcode(ERRCODE_WINDOWING_ERROR), + errmsg("cannot use window function in UPDATE"))); + /* * Now we are done with SELECT-like processing, and can get on with * transforming the target list to match the UPDATE target columns. *************** *** 1674,1679 **** transformReturningList(ParseState *pstate, List *returningList) --- 1687,1698 ---- parser_errposition(pstate, locate_agg_of_level((Node *) rlist, 0)))); + /* window functions not allowed in returning clause */ + if (pstate->p_hasWindow) + ereport(ERROR, + (errcode(ERRCODE_WINDOWING_ERROR), + errmsg("cannot use window function in RETURNING"))); + /* no new relation references please */ if (list_length(pstate->p_rtable) != length_rtable) { *** a/src/backend/parser/gram.y --- b/src/backend/parser/gram.y *************** *** 383,388 **** static TypeName *TableFuncTypeName(List *columns); --- 383,392 ---- %type with_clause %type cte_list + %type partition_clause opt_partition_clause window_clause window_definition_list + %type window_definition window_specification over_clause + /* since these are not implemented, types may be unmatched actually. */ + %type opt_frame_clause frame_clause frame_extent frame_bound opt_frame_exclusion /* * If you make any token changes, update the keyword table in *************** *** 411,420 **** static TypeName *TableFuncTypeName(List *columns); DEFERRABLE DEFERRED DEFINER DELETE_P DELIMITER DELIMITERS DESC DICTIONARY DISABLE_P DISCARD DISTINCT DO DOCUMENT_P DOMAIN_P DOUBLE_P DROP ! EACH ELSE ENABLE_P ENCODING ENCRYPTED END_P ENUM_P ESCAPE EXCEPT EXCLUDING ! EXCLUSIVE EXECUTE EXISTS EXPLAIN EXTERNAL EXTRACT ! FALSE_P FAMILY FETCH FIRST_P FLOAT_P FOR FORCE FOREIGN FORWARD FREEZE FROM FULL FUNCTION GLOBAL GRANT GRANTED GREATEST GROUP_P --- 415,424 ---- DEFERRABLE DEFERRED DEFINER DELETE_P DELIMITER DELIMITERS DESC DICTIONARY DISABLE_P DISCARD DISTINCT DO DOCUMENT_P DOMAIN_P DOUBLE_P DROP ! EACH ELSE ENABLE_P ENCODING ENCRYPTED END_P ENUM_P ESCAPE EXCEPT EXCLUDE ! EXCLUDING EXCLUSIVE EXECUTE EXISTS EXPLAIN EXTERNAL EXTRACT ! FALSE_P FAMILY FETCH FIRST_P FLOAT_P FOLLOWING FOR FORCE FOREIGN FORWARD FREEZE FROM FULL FUNCTION GLOBAL GRANT GRANTED GREATEST GROUP_P *************** *** 441,455 **** static TypeName *TableFuncTypeName(List *columns); NOT NOTHING NOTIFY NOTNULL NOWAIT NULL_P NULLIF NULLS_P NUMERIC OBJECT_P OF OFF OFFSET OIDS OLD ON ONLY OPERATOR OPTION OR ! ORDER OUT_P OUTER_P OVERLAPS OVERLAY OWNED OWNER ! PARSER PARTIAL PASSWORD PLACING PLANS POSITION ! PRECISION PRESERVE PREPARE PREPARED PRIMARY PRIOR PRIVILEGES PROCEDURAL PROCEDURE QUOTE ! READ REAL REASSIGN RECHECK RECURSIVE REFERENCES REINDEX RELATIVE_P RELEASE RENAME REPEATABLE REPLACE REPLICA RESET RESTART RESTRICT RETURNING RETURNS REVOKE RIGHT ROLE ROLLBACK ROW ROWS RULE --- 445,459 ---- NOT NOTHING NOTIFY NOTNULL NOWAIT NULL_P NULLIF NULLS_P NUMERIC OBJECT_P OF OFF OFFSET OIDS OLD ON ONLY OPERATOR OPTION OR ! ORDER OTHERS OUT_P OUTER_P OVER OVERLAPS OVERLAY OWNED OWNER ! PARSER PARTIAL PARTITION PASSWORD PLACING PLANS POSITION ! PRECEDING PRECISION PRESERVE PREPARE PREPARED PRIMARY PRIOR PRIVILEGES PROCEDURAL PROCEDURE QUOTE ! RANGE READ REAL REASSIGN RECHECK RECURSIVE REFERENCES REINDEX RELATIVE_P RELEASE RENAME REPEATABLE REPLACE REPLICA RESET RESTART RESTRICT RETURNING RETURNS REVOKE RIGHT ROLE ROLLBACK ROW ROWS RULE *************** *** 459,475 **** static TypeName *TableFuncTypeName(List *columns); STATISTICS STDIN STDOUT STORAGE STRICT_P STRIP_P SUBSTRING SUPERUSER_P SYMMETRIC SYSID SYSTEM_P ! TABLE TABLESPACE TEMP TEMPLATE TEMPORARY TEXT_P THEN TIME TIMESTAMP TO TRAILING TRANSACTION TREAT TRIGGER TRIM TRUE_P TRUNCATE TRUSTED TYPE_P ! UNCOMMITTED UNENCRYPTED UNION UNIQUE UNKNOWN UNLISTEN UNTIL UPDATE USER USING VACUUM VALID VALIDATOR VALUE_P VALUES VARCHAR VARIADIC VARYING VERBOSE VERSION_P VIEW VOLATILE ! WHEN WHERE WHITESPACE_P WITH WITHOUT WORK WRITE XML_P XMLATTRIBUTES XMLCONCAT XMLELEMENT XMLFOREST XMLPARSE XMLPI XMLROOT XMLSERIALIZE --- 463,479 ---- STATISTICS STDIN STDOUT STORAGE STRICT_P STRIP_P SUBSTRING SUPERUSER_P SYMMETRIC SYSID SYSTEM_P ! TABLE TABLESPACE TEMP TEMPLATE TEMPORARY TEXT_P THEN TIES TIME TIMESTAMP TO TRAILING TRANSACTION TREAT TRIGGER TRIM TRUE_P TRUNCATE TRUSTED TYPE_P ! UNBOUNDED UNCOMMITTED UNENCRYPTED UNION UNIQUE UNKNOWN UNLISTEN UNTIL UPDATE USER USING VACUUM VALID VALIDATOR VALUE_P VALUES VARCHAR VARIADIC VARYING VERBOSE VERSION_P VIEW VOLATILE ! WHEN WHERE WHITESPACE_P WINDOW WITH WITHOUT WORK WRITE XML_P XMLATTRIBUTES XMLCONCAT XMLELEMENT XMLFOREST XMLPARSE XMLPI XMLROOT XMLSERIALIZE *************** *** 6374,6380 **** select_clause: simple_select: SELECT opt_distinct target_list into_clause from_clause where_clause ! group_clause having_clause { SelectStmt *n = makeNode(SelectStmt); n->distinctClause = $2; --- 6378,6384 ---- simple_select: SELECT opt_distinct target_list into_clause from_clause where_clause ! group_clause having_clause window_clause { SelectStmt *n = makeNode(SelectStmt); n->distinctClause = $2; *************** *** 6384,6389 **** simple_select: --- 6388,6394 ---- n->whereClause = $6; n->groupClause = $7; n->havingClause = $8; + n->windowClause = $9; $$ = (Node *)n; } | values_clause { $$ = $1; } *************** *** 8104,8110 **** c_expr: columnref { $$ = $1; } * (Note that many of the special SQL functions wouldn't actually make any * sense as functional index entries, but we ignore that consideration here.) */ ! func_expr: func_name '(' ')' { FuncCall *n = makeNode(FuncCall); n->funcname = $1; --- 8109,8115 ---- * (Note that many of the special SQL functions wouldn't actually make any * sense as functional index entries, but we ignore that consideration here.) */ ! func_expr: func_name '(' ')' over_clause { FuncCall *n = makeNode(FuncCall); n->funcname = $1; *************** *** 8112,8121 **** func_expr: func_name '(' ')' n->agg_star = FALSE; n->agg_distinct = FALSE; n->func_variadic = FALSE; n->location = @1; $$ = (Node *)n; } ! | func_name '(' expr_list ')' { FuncCall *n = makeNode(FuncCall); n->funcname = $1; --- 8117,8127 ---- n->agg_star = FALSE; n->agg_distinct = FALSE; n->func_variadic = FALSE; + n->win_definition = (WinDef *) $4; n->location = @1; $$ = (Node *)n; } ! | func_name '(' expr_list ')' over_clause { FuncCall *n = makeNode(FuncCall); n->funcname = $1; *************** *** 8123,8132 **** func_expr: func_name '(' ')' n->agg_star = FALSE; n->agg_distinct = FALSE; n->func_variadic = FALSE; n->location = @1; $$ = (Node *)n; } ! | func_name '(' VARIADIC a_expr ')' { FuncCall *n = makeNode(FuncCall); n->funcname = $1; --- 8129,8139 ---- n->agg_star = FALSE; n->agg_distinct = FALSE; n->func_variadic = FALSE; + n->win_definition = (WinDef *) $5; n->location = @1; $$ = (Node *)n; } ! | func_name '(' VARIADIC a_expr ')' /* intentionally not accept over_clause */ { FuncCall *n = makeNode(FuncCall); n->funcname = $1; *************** *** 8134,8143 **** func_expr: func_name '(' ')' n->agg_star = FALSE; n->agg_distinct = FALSE; n->func_variadic = TRUE; n->location = @1; $$ = (Node *)n; } ! | func_name '(' expr_list ',' VARIADIC a_expr ')' { FuncCall *n = makeNode(FuncCall); n->funcname = $1; --- 8141,8151 ---- n->agg_star = FALSE; n->agg_distinct = FALSE; n->func_variadic = TRUE; + n->win_definition = NULL; n->location = @1; $$ = (Node *)n; } ! | func_name '(' expr_list ',' VARIADIC a_expr ')' /* intentionally not accept over_clause */ { FuncCall *n = makeNode(FuncCall); n->funcname = $1; *************** *** 8145,8154 **** func_expr: func_name '(' ')' n->agg_star = FALSE; n->agg_distinct = FALSE; n->func_variadic = TRUE; n->location = @1; $$ = (Node *)n; } ! | func_name '(' ALL expr_list ')' { FuncCall *n = makeNode(FuncCall); n->funcname = $1; --- 8153,8163 ---- n->agg_star = FALSE; n->agg_distinct = FALSE; n->func_variadic = TRUE; + n->win_definition = NULL; n->location = @1; $$ = (Node *)n; } ! | func_name '(' ALL expr_list ')' /* intentionally not accept over_clause */ { FuncCall *n = makeNode(FuncCall); n->funcname = $1; *************** *** 8160,8169 **** func_expr: func_name '(' ')' * for that in FuncCall at the moment. */ n->func_variadic = FALSE; n->location = @1; $$ = (Node *)n; } ! | func_name '(' DISTINCT expr_list ')' { FuncCall *n = makeNode(FuncCall); n->funcname = $1; --- 8169,8179 ---- * for that in FuncCall at the moment. */ n->func_variadic = FALSE; + n->win_definition = NULL; n->location = @1; $$ = (Node *)n; } ! | func_name '(' DISTINCT expr_list ')' /* intentionally not accept over_clause */ { FuncCall *n = makeNode(FuncCall); n->funcname = $1; *************** *** 8171,8180 **** func_expr: func_name '(' ')' n->agg_star = FALSE; n->agg_distinct = TRUE; n->func_variadic = FALSE; n->location = @1; $$ = (Node *)n; } ! | func_name '(' '*' ')' { /* * We consider AGGREGATE(*) to invoke a parameterless --- 8181,8191 ---- n->agg_star = FALSE; n->agg_distinct = TRUE; n->func_variadic = FALSE; + n->win_definition = NULL; n->location = @1; $$ = (Node *)n; } ! | func_name '(' '*' ')' over_clause { /* * We consider AGGREGATE(*) to invoke a parameterless *************** *** 8192,8197 **** func_expr: func_name '(' ')' --- 8203,8209 ---- n->agg_star = TRUE; n->agg_distinct = FALSE; n->func_variadic = FALSE; + n->win_definition = (WinDef *) $5; n->location = @1; $$ = (Node *)n; } *************** *** 8617,8622 **** xml_whitespace_option: PRESERVE WHITESPACE_P { $$ = TRUE; } --- 8629,8742 ---- ; /* + * Window Definitions + * + * In SQL2003 window may appear after a function call or after HAVING, with the same syntax. + * If there is window syntax after HAVING, some of the windows can refer to it. + */ + over_clause: OVER window_specification { $$ = $2; } + | OVER IDENT + { + WinDef *n = makeNode(WinDef); + n->partitionClause = NIL; + n->orderClause = NIL; + n->expr_list = NIL; + n->name = pstrdup($2); + n->location = @1; + $$ = (Node *) n; + } + | /*EMPTY*/ { $$ = NULL; } + ; + window_specification: '(' opt_partition_clause opt_sort_clause opt_frame_clause ')' + { + WinDef *n = makeNode(WinDef); + n->partitionClause = $2; + n->orderClause = $3; + n->expr_list = NIL; + n->name = NULL; + n->location = @1; + if (!n->partitionClause && !n->orderClause) + { + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("either PARTITION BY or ORDER BY must be specified in window clause"))); + } + $$ = (Node *) n; + } + ; + + opt_partition_clause: + partition_clause { $$ = $1; } + | /*EMPTY*/ { $$ = NIL; } + ; + partition_clause: PARTITION BY expr_list + { + $$ = $3; + } + ; + + /* Frame clause is not supported but we must recognize its grammar to report errors */ + opt_frame_clause: + frame_clause + { + /* Frame clause should be called "FRAME clause" or "ROWS/RANGE clause"? */ + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("ROWS/RANGE clause of window functions not yet implemented"))); + } + | /*EMPTY*/ { $$ = NULL; } + ; + frame_clause: + ROWS frame_extent opt_frame_exclusion + { $$ = NULL; } + | RANGE frame_extent opt_frame_exclusion + { $$ = NULL; } + ; + frame_extent: + UNBOUNDED PRECEDING { $$ = NULL; } + | CURRENT_P ROW { $$ = NULL; } + | a_expr PRECEDING { $$ = NULL; } + | BETWEEN frame_bound AND frame_bound { $$ = NULL; } + ; + frame_bound: + UNBOUNDED PRECEDING { $$ = NULL; } + | CURRENT_P ROW { $$ = NULL; } + | a_expr PRECEDING { $$ = NULL; } + | UNBOUNDED FOLLOWING { $$ = NULL; } + | a_expr FOLLOWING { $$ = NULL; } + ; + opt_frame_exclusion: + EXCLUDE CURRENT_P ROW { $$ = NULL; } + | EXCLUDE GROUP_P { $$ = NULL; } + | EXCLUDE TIES { $$ = NULL; } + | EXCLUDE NO OTHERS { $$ = NULL; } + | /*EMPTY*/ { $$ = NULL; } + ; + + window_clause: + WINDOW window_definition_list { $$ = $2; } + | /*EMPTY*/ { $$ = NIL; } + ; + window_definition_list: + window_definition + { + $$ = list_make1($1); + } + | window_definition_list ',' window_definition + { + $$ = lappend($1, $3); + } + ; + window_definition: + IDENT AS window_specification + { + WinDef *n = (WinDef *) $3; + n->name = pstrdup($1); + $$ = (Node *) n; + } + + + /* * Supporting nonterminals for expressions. */ *** a/src/backend/parser/keywords.c --- b/src/backend/parser/keywords.c *************** *** 156,161 **** const ScanKeyword ScanKeywords[] = { --- 156,162 ---- {"enum", ENUM_P, UNRESERVED_KEYWORD}, {"escape", ESCAPE, UNRESERVED_KEYWORD}, {"except", EXCEPT, RESERVED_KEYWORD}, + {"exclude", EXCLUDE, UNRESERVED_KEYWORD}, {"excluding", EXCLUDING, UNRESERVED_KEYWORD}, {"exclusive", EXCLUSIVE, UNRESERVED_KEYWORD}, {"execute", EXECUTE, UNRESERVED_KEYWORD}, *************** *** 168,173 **** const ScanKeyword ScanKeywords[] = { --- 169,175 ---- {"fetch", FETCH, UNRESERVED_KEYWORD}, {"first", FIRST_P, UNRESERVED_KEYWORD}, {"float", FLOAT_P, COL_NAME_KEYWORD}, + {"following", FOLLOWING, UNRESERVED_KEYWORD}, {"for", FOR, RESERVED_KEYWORD}, {"force", FORCE, UNRESERVED_KEYWORD}, {"foreign", FOREIGN, RESERVED_KEYWORD}, *************** *** 279,296 **** const ScanKeyword ScanKeywords[] = { --- 281,302 ---- {"option", OPTION, UNRESERVED_KEYWORD}, {"or", OR, RESERVED_KEYWORD}, {"order", ORDER, RESERVED_KEYWORD}, + {"others", OTHERS, UNRESERVED_KEYWORD}, {"out", OUT_P, COL_NAME_KEYWORD}, {"outer", OUTER_P, TYPE_FUNC_NAME_KEYWORD}, + {"over", OVER, UNRESERVED_KEYWORD}, {"overlaps", OVERLAPS, TYPE_FUNC_NAME_KEYWORD}, {"overlay", OVERLAY, COL_NAME_KEYWORD}, {"owned", OWNED, UNRESERVED_KEYWORD}, {"owner", OWNER, UNRESERVED_KEYWORD}, {"parser", PARSER, UNRESERVED_KEYWORD}, {"partial", PARTIAL, UNRESERVED_KEYWORD}, + {"partition", PARTITION, RESERVED_KEYWORD}, {"password", PASSWORD, UNRESERVED_KEYWORD}, {"placing", PLACING, RESERVED_KEYWORD}, {"plans", PLANS, UNRESERVED_KEYWORD}, {"position", POSITION, COL_NAME_KEYWORD}, + {"preceding", PRECEDING, UNRESERVED_KEYWORD}, {"precision", PRECISION, COL_NAME_KEYWORD}, {"prepare", PREPARE, UNRESERVED_KEYWORD}, {"prepared", PREPARED, UNRESERVED_KEYWORD}, *************** *** 301,306 **** const ScanKeyword ScanKeywords[] = { --- 307,313 ---- {"procedural", PROCEDURAL, UNRESERVED_KEYWORD}, {"procedure", PROCEDURE, UNRESERVED_KEYWORD}, {"quote", QUOTE, UNRESERVED_KEYWORD}, + {"range", RANGE, RESERVED_KEYWORD}, {"read", READ, UNRESERVED_KEYWORD}, {"real", REAL, COL_NAME_KEYWORD}, {"reassign", REASSIGN, UNRESERVED_KEYWORD}, *************** *** 367,372 **** const ScanKeyword ScanKeywords[] = { --- 374,380 ---- {"temporary", TEMPORARY, UNRESERVED_KEYWORD}, {"text", TEXT_P, UNRESERVED_KEYWORD}, {"then", THEN, RESERVED_KEYWORD}, + {"ties", TIES, UNRESERVED_KEYWORD}, {"time", TIME, COL_NAME_KEYWORD}, {"timestamp", TIMESTAMP, COL_NAME_KEYWORD}, {"to", TO, RESERVED_KEYWORD}, *************** *** 379,384 **** const ScanKeyword ScanKeywords[] = { --- 387,393 ---- {"truncate", TRUNCATE, UNRESERVED_KEYWORD}, {"trusted", TRUSTED, UNRESERVED_KEYWORD}, {"type", TYPE_P, UNRESERVED_KEYWORD}, + {"unbounded", UNBOUNDED, UNRESERVED_KEYWORD}, {"uncommitted", UNCOMMITTED, UNRESERVED_KEYWORD}, {"unencrypted", UNENCRYPTED, UNRESERVED_KEYWORD}, {"union", UNION, RESERVED_KEYWORD}, *************** *** 404,409 **** const ScanKeyword ScanKeywords[] = { --- 413,428 ---- {"when", WHEN, RESERVED_KEYWORD}, {"where", WHERE, RESERVED_KEYWORD}, {"whitespace", WHITESPACE_P, UNRESERVED_KEYWORD}, + {"window", WINDOW, RESERVED_KEYWORD}, + + /* + * XXX we mark WITH as reserved to force it to be quoted in dumps, even + * though it is currently unreserved according to gram.y. This is because + * we expect we'll have to make it reserved to implement SQL WITH clauses. + * If that patch manages to do without reserving WITH, adjust this entry + * at that time; in any case this should be back in sync with gram.y after + * WITH clauses are implemented. + */ {"with", WITH, RESERVED_KEYWORD}, {"without", WITHOUT, UNRESERVED_KEYWORD}, {"work", WORK, UNRESERVED_KEYWORD}, *** a/src/backend/parser/parse_agg.c --- b/src/backend/parser/parse_agg.c *************** *** 1,7 **** /*------------------------------------------------------------------------- * * parse_agg.c ! * handle aggregates in parser * * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California --- 1,7 ---- /*------------------------------------------------------------------------- * * parse_agg.c ! * handle aggregates and window functions in parser * * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California *************** *** 73,78 **** transformAggregateCall(ParseState *pstate, Aggref *agg) --- 73,84 ---- errmsg("aggregate function calls cannot be nested"), parser_errposition(pstate, locate_agg_of_level((Node *) agg->args, 0)))); + if (checkExprHasWFuncs((Node *) agg->args)) + ereport(ERROR, + (errcode(ERRCODE_GROUPING_ERROR), + errmsg("aggregate function calls cannot take window functions as arguments"), + parser_errposition(pstate, + locate_agg_of_level((Node *) agg->args, 0)))); } if (min_varlevel < 0) *************** *** 85,90 **** transformAggregateCall(ParseState *pstate, Aggref *agg) --- 91,130 ---- pstate->p_hasAggs = true; } + /* + * transformWindowCall - + * + */ + void + transformWindowCall(ParseState *pstate, WFunc *wfunc) + { + int min_varlevel; + + /* + * The aggregate's level is the same as the level of the lowest-level + * variable or aggregate in its arguments; or if it contains no variables + * at all, we presume it to be local. + */ + min_varlevel = find_minimum_var_level((Node *) wfunc->args); + + /* + * An aggregate can't directly contain another aggregate call of the same + * level (though outer aggs are okay). We can skip this check if we + * didn't find any local vars or aggs. + */ + if (min_varlevel == 0) + { + if (checkExprHasWFuncs((Node *) wfunc->args)) + ereport(ERROR, + (errcode(ERRCODE_WINDOWING_ERROR), + errmsg("window function calls cannot be nested"))); + } + + if (min_varlevel < 0) + min_varlevel = 0; + wfunc->winlevelsup = min_varlevel; + pstate->p_hasWindow = true; + } /* * parseCheckAggregates *************** *** 231,236 **** parseCheckAggregates(ParseState *pstate, Query *qry) --- 271,311 ---- locate_agg_of_level((Node *) qry, 0)))); } + /* + * Window functions must not be in either WHERE, HAVING, or GRUP BY clauses. + */ + void + parseCheckWindow(ParseState *pstate, Query *qry) + { + ListCell *l; + + if (checkExprHasWFuncs(qry->jointree->quals)) + ereport(ERROR, + (errcode(ERRCODE_WINDOWING_ERROR), + errmsg("window functions not allowed in WHERE clause"))); + if (checkExprHasWFuncs((Node *) qry->jointree->fromlist)) + ereport(ERROR, + (errcode(ERRCODE_WINDOWING_ERROR), + errmsg("window functions not allowed in JOIN conditions"))); + if (checkExprHasWFuncs(qry->havingQual)) + ereport(ERROR, + (errcode(ERRCODE_WINDOWING_ERROR), + errmsg("window functions not allowed in HAVING clause"))); + + foreach(l, qry->groupClause) + { + SortGroupClause *grpcl = (SortGroupClause *) lfirst(l); + Node *expr; + + expr = get_sortgroupclause_expr(grpcl, qry->targetList); + if (expr == NULL) + continue; /* probably cannot happen */ + if (checkExprHasWFuncs(expr)) + ereport(ERROR, + (errcode(ERRCODE_WINDOWING_ERROR), + errmsg("window functions not allowed in GROUP BY clause"))); + } + } /* * check_ungrouped_columns - *** a/src/backend/parser/parse_clause.c --- b/src/backend/parser/parse_clause.c *************** *** 40,47 **** #define ORDER_CLAUSE 0 #define GROUP_CLAUSE 1 #define DISTINCT_ON_CLAUSE 2 ! static char *clauseText[] = {"ORDER BY", "GROUP BY", "DISTINCT ON"}; static void extractRemainingColumns(List *common_colnames, List *src_colnames, List *src_colvars, --- 40,49 ---- #define ORDER_CLAUSE 0 #define GROUP_CLAUSE 1 #define DISTINCT_ON_CLAUSE 2 + #define PARTITION_CLAUSE 3 + #define WIN_ORDER_CLAUSE 4 ! static char *clauseText[] = {"ORDER BY", "GROUP BY", "DISTINCT ON", "PARTITION", "ORDER BY"}; static void extractRemainingColumns(List *common_colnames, List *src_colnames, List *src_colvars, *************** *** 68,73 **** static Node *buildMergedJoinVar(ParseState *pstate, JoinType jointype, --- 70,77 ---- Var *l_colvar, Var *r_colvar); static TargetEntry *findTargetlistEntry(ParseState *pstate, Node *node, List **tlist, int clause); + static WindowClause *findWindowClause(List *wclist, const char *name, + List *partitionClause, List *orderClause); static int get_matching_location(int sortgroupref, List *sortgrouprefs, List *exprs); static List *addTargetToSortList(ParseState *pstate, TargetEntry *tle, *************** *** 565,570 **** transformRangeFunction(ParseState *pstate, RangeFunction *r) --- 569,582 ---- locate_agg_of_level(funcexpr, 0)))); } + if (pstate->p_hasWindow) + { + if (checkExprHasWFuncs(funcexpr)) + ereport(ERROR, + (errcode(ERRCODE_WINDOWING_ERROR), + errmsg("cannot use window function in function expression in FROM"))); + } + /* * OK, build an RTE for the function. */ *************** *** 1301,1306 **** findTargetlistEntry(ParseState *pstate, Node *node, List **tlist, int clause) --- 1313,1343 ---- clauseText[clause]), parser_errposition(pstate, location))); + /* + * In ORDER BY clause of a window, simple integer means + * integer data, not target pos. + */ + if (clause == WIN_ORDER_CLAUSE) + { + TargetEntry *tle; + Const *cons; + AttrNumber resno; + + resno = list_length(*tlist) + 1; + cons = makeConst(INT4OID, + -1, + sizeof(int32), + Int32GetDatum(intVal(val)), + false, + true); + tle = makeTargetEntry((Expr *) cons, + resno, + NULL, + true); + *tlist = lappend(*tlist, tle); + return tle; + } + target_pos = intVal(val); foreach(tl, *tlist) { *************** *** 1452,1457 **** transformSortClause(ParseState *pstate, --- 1489,1643 ---- } /* + * transformOrderClause - + * + * OrderClause is a set of SortBys. Only tag type is different. + */ + List * + transformOrderClause(ParseState *pstate, + List *orderlist, + List **targetlist, + bool resolveUnknown) + { + List *result = NIL; + ListCell *l; + TargetEntry *tle; + + foreach(l, orderlist) + { + SortBy *sortby = lfirst(l); + + tle = findTargetlistEntry(pstate, sortby->node, + targetlist, WIN_ORDER_CLAUSE); + result = addTargetToSortList(pstate, tle, + result, *targetlist, + sortby, resolveUnknown); + } + + return result; + } + + /* + * transformPartitionClause - + * + * Almost everything PartitionClause has is the same as GroupClause. + */ + List * + transformPartitionClause(ParseState *pstate, + List *partitionlist, + List **targetlist) + { + List *result = NIL; + ListCell *l; + TargetEntry *tle; + + foreach(l, partitionlist) + { + Oid restype; + Oid sortop; + Oid eqop; + PartitionClause *pc; + + tle = findTargetlistEntry(pstate, lfirst(l), targetlist, PARTITION_CLAUSE); + + restype = exprType((Node *) tle->expr); + + if (restype == UNKNOWNOID) + tle->expr = (Expr *) coerce_type(pstate, (Node *) tle->expr, + restype, TEXTOID, -1, + COERCION_IMPLICIT, + COERCE_IMPLICIT_CAST, + -1); + pc = makeNode(PartitionClause); + pc->tleSortGroupRef = assignSortGroupRef(tle, *targetlist); + get_sort_group_operators(restype, + false, true, false, + &sortop, &eqop, NULL); + pc->eqop = eqop; + pc->sortop = sortop; + pc->nulls_first = false; + result = lappend(result, pc); + } + + return result; + } + + /* + * transformWinDef - + * + */ + List * + transformWinDef(ParseState *pstate, + List *windefinition, + List **targetlist) + { + List *result = NIL; + ListCell *l; + Index winref = 1; + + foreach(l, windefinition) + { + WinDef *windef = (WinDef *) lfirst(l); + List *partitionClause = NIL; + List *orderClause = NIL; + WindowClause *wc; + ListCell *lc; + + partitionClause = transformPartitionClause(pstate, + windef->partitionClause, + targetlist); + orderClause = transformOrderClause(pstate, + windef->orderClause, + targetlist, + true); + + /* + * If there is the same node that has been in the list, + * refer to it. + */ + wc = findWindowClause(result, windef->name, partitionClause, orderClause); + if (!wc) + { + if (windef->name && windef->expr_list) + { + /* + * Though OVER clause uses window name, there's + * no definition in WINDOW clause. + */ + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("window name(%s) is not found in WINDOW clause", + windef->name))); + } + + wc = makeNode(WindowClause); + wc->partitionClause = partitionClause; + wc->orderClause = orderClause; + wc->name = windef->name; + wc->winref = winref++; + + result = lappend(result, wc); + pstate->p_hasWindow = true; + } + + /* + * Tie the function with the appropriate window + */ + foreach(lc, windef->expr_list) + { + Node *node = (Node *) lfirst(lc); + + if (IsA(node, WFunc)) + { + ((WFunc *) node)->winref = wc->winref; + } + } + } + + return result; + } + + /* * transformDistinctClause - * transform a DISTINCT clause * *************** *** 1919,1921 **** targetIsInSortList(TargetEntry *tle, Oid sortop, List *sortList) --- 2105,2135 ---- } return false; } + + /* + * find_window_clause - + * + * search for the WindowClause which has already been in the list. + * It is done by name or by the set of partition and order. + */ + static WindowClause * + findWindowClause(List *wclist, const char *name, List *partitionClause, List *orderClause) + { + ListCell *l; + + foreach(l, wclist) + { + WindowClause *wc = (WindowClause *) lfirst(l); + if (wc->name && name) + { + if (strcmp(wc->name, name) == 0) + return wc; + } + + if (equal(wc->partitionClause, partitionClause) && + equal(wc->orderClause, orderClause)) + return wc; + } + + return NULL; + } *** a/src/backend/parser/parse_expr.c --- b/src/backend/parser/parse_expr.c *************** *** 360,366 **** transformIndirection(ParseState *pstate, Node *basenode, List *indirection) list_make1(n), list_make1(result), false, false, false, ! true, -1); } } /* process trailing subscripts, if any */ --- 360,366 ---- list_make1(n), list_make1(result), false, false, false, ! true, NULL, -1); } } /* process trailing subscripts, if any */ *************** *** 504,510 **** transformColumnRef(ParseState *pstate, ColumnRef *cref) list_make1(makeString(name2)), list_make1(node), false, false, false, ! true, cref->location); } break; } --- 504,510 ---- list_make1(makeString(name2)), list_make1(node), false, false, false, ! true, NULL, cref->location); } break; } *************** *** 545,551 **** transformColumnRef(ParseState *pstate, ColumnRef *cref) list_make1(makeString(name3)), list_make1(node), false, false, false, ! true, cref->location); } break; } --- 545,551 ---- list_make1(makeString(name3)), list_make1(node), false, false, false, ! true, NULL, cref->location); } break; } *************** *** 600,606 **** transformColumnRef(ParseState *pstate, ColumnRef *cref) list_make1(makeString(name4)), list_make1(node), false, false, false, ! true, cref->location); } break; } --- 600,606 ---- list_make1(makeString(name4)), list_make1(node), false, false, false, ! true, NULL, cref->location); } break; } *************** *** 1096,1101 **** transformFuncCall(ParseState *pstate, FuncCall *fn) --- 1096,1102 ---- fn->agg_distinct, fn->func_variadic, false, + fn->win_definition, fn->location); } *** a/src/backend/parser/parse_func.c --- b/src/backend/parser/parse_func.c *************** *** 15,20 **** --- 15,21 ---- #include "postgres.h" #include "access/heapam.h" + #include "catalog/pg_aggregate.h" #include "catalog/pg_inherits.h" #include "catalog/pg_proc.h" #include "catalog/pg_type.h" *************** *** 63,69 **** static void unknown_attribute(ParseState *pstate, Node *relref, char *attname, Node * ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs, bool agg_star, bool agg_distinct, bool func_variadic, ! bool is_column, int location) { Oid rettype; Oid funcid; --- 64,70 ---- Node * ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs, bool agg_star, bool agg_distinct, bool func_variadic, ! bool is_column, WinDef *windef, int location) { Oid rettype; Oid funcid; *************** *** 76,81 **** ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs, --- 77,84 ---- Node *retval; bool retset; int nvargs; + bool isagg; + bool iswfunc; FuncDetailCode fdresult; /* *************** *** 164,169 **** ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs, --- 167,173 ---- fdresult = func_get_detail(funcname, fargs, nargs, actual_arg_types, !func_variadic, &funcid, &rettype, &retset, &nvargs, + &isagg, &iswfunc, &declared_arg_types); if (fdresult == FUNCDETAIL_COERCION) { *************** *** 195,201 **** ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs, NameListToString(funcname)), parser_errposition(pstate, location))); } ! else if (fdresult != FUNCDETAIL_AGGREGATE) { /* * Oops. Time to die. --- 199,205 ---- NameListToString(funcname)), parser_errposition(pstate, location))); } ! else if (fdresult != FUNCDETAIL_AGG_OR_WFUNC) { /* * Oops. Time to die. *************** *** 292,331 **** ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs, retval = (Node *) funcexpr; } ! else { ! /* aggregate function */ ! Aggref *aggref = makeNode(Aggref); ! aggref->aggfnoid = funcid; ! aggref->aggtype = rettype; ! aggref->args = fargs; ! aggref->aggstar = agg_star; ! aggref->aggdistinct = agg_distinct; ! aggref->location = location; ! /* ! * Reject attempt to call a parameterless aggregate without (*) ! * syntax. This is mere pedantry but some folks insisted ... ! */ ! if (fargs == NIL && !agg_star) ! ereport(ERROR, ! (errcode(ERRCODE_WRONG_OBJECT_TYPE), ! errmsg("%s(*) must be used to call a parameterless aggregate function", ! NameListToString(funcname)), ! parser_errposition(pstate, location))); ! /* parse_agg.c does additional aggregate-specific processing */ ! transformAggregateCall(pstate, aggref); ! retval = (Node *) aggref; ! if (retset) ! ereport(ERROR, ! (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), ! errmsg("aggregates cannot return sets"), ! parser_errposition(pstate, location))); } return retval; } --- 296,382 ---- retval = (Node *) funcexpr; } ! else if (fdresult == FUNCDETAIL_AGG_OR_WFUNC) { ! if (isagg && !windef) ! { ! /* aggregate function */ ! Aggref *aggref = makeNode(Aggref); ! aggref->aggfnoid = funcid; ! aggref->aggtype = rettype; ! aggref->args = fargs; ! aggref->aggstar = agg_star; ! aggref->aggdistinct = agg_distinct; ! aggref->location = location; ! /* ! * Reject attempt to call a parameterless aggregate without (*) ! * syntax. This is mere pedantry but some folks insisted ... ! */ ! if (fargs == NIL && !agg_star) ! ereport(ERROR, ! (errcode(ERRCODE_WRONG_OBJECT_TYPE), ! errmsg("%s(*) must be used to call a parameterless aggregate function", ! NameListToString(funcname)), ! parser_errposition(pstate, location))); ! ! /* parse_agg.c does additional aggregate-specific processing */ ! transformAggregateCall(pstate, aggref); ! ! retval = (Node *) aggref; ! ! if (retset) ! ereport(ERROR, ! (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), ! errmsg("aggregates cannot return sets"), ! parser_errposition(pstate, location))); ! } ! else ! { ! /* window function */ ! WFunc *wfunc = makeNode(WFunc); ! ! /* ! * Window functions must be called with window definition. ! */ ! if (!windef) ! ereport(ERROR, ! (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), ! errmsg("window function call need window definition"), ! parser_errposition(pstate, location))); ! /* ! * normal aggregate can be called as window function by ! * the special aggregate wrapper function. By using wrappepr, ! * the performance is dropped but result is same. ! */ ! if (isagg && !iswfunc) ! wfunc->pure_agg = true; ! wfunc->winfnoid = funcid; ! wfunc->wintype = rettype; ! wfunc->args = fargs; ! wfunc->location = location; ! /* ! * agg_star is acceptable for aggregate functions ! * but distinct sould be rejected in parser though checked here again. ! */ ! wfunc->winstar = agg_star; ! if (agg_distinct) ! ereport(ERROR, ! (errcode(ERRCODE_SYNTAX_ERROR), ! errmsg("windowing functions cannot accept DISTINCT argument."))); ! transformWindowCall(pstate, wfunc); ! retval = (Node *) wfunc; ! ! pstate->p_windef_list = lappend(pstate->p_windef_list, windef); ! windef->expr_list = lappend(windef->expr_list, wfunc); ! } } + else + elog(ERROR, "unknown function status"); return retval; } *************** *** 729,734 **** func_get_detail(List *funcname, --- 780,787 ---- Oid *rettype, /* return value */ bool *retset, /* return value */ int *nvargs, /* return value */ + bool *isagg, /* return value */ + bool *iswfunc, /* return value */ Oid **true_typeids) /* return value */ { FuncCandidateList raw_candidates; *************** *** 880,886 **** func_get_detail(List *funcname, pform = (Form_pg_proc) GETSTRUCT(ftup); *rettype = pform->prorettype; *retset = pform->proretset; ! result = pform->proisagg ? FUNCDETAIL_AGGREGATE : FUNCDETAIL_NORMAL; ReleaseSysCache(ftup); return result; } --- 933,949 ---- pform = (Form_pg_proc) GETSTRUCT(ftup); *rettype = pform->prorettype; *retset = pform->proretset; ! *isagg = pform->proisagg; ! *iswfunc = pform->proiswfunc; ! /* ! * agg and wfunc are similar to each other ! * and overlaps as well. So we return agg_or_wfunc then ! * delegate to caller the detail process depending on which. ! */ ! if (pform->proisagg || pform->proiswfunc) ! result = FUNCDETAIL_AGG_OR_WFUNC; ! else ! result = FUNCDETAIL_NORMAL; ReleaseSysCache(ftup); return result; } *************** *** 1374,1376 **** LookupAggNameTypeNames(List *aggname, List *argtypes, bool noError) --- 1437,1442 ---- return oid; } + + + *** a/src/backend/rewrite/rewriteManip.c --- b/src/backend/rewrite/rewriteManip.c *************** *** 36,41 **** typedef struct --- 36,43 ---- static bool contain_aggs_of_level_walker(Node *node, contain_aggs_of_level_context *context); + static bool checkExprHasWFuncs_walker(Node *node, + contain_aggs_of_level_context *context); static bool locate_agg_of_level_walker(Node *node, locate_agg_of_level_context *context); static bool checkExprHasSubLink_walker(Node *node, void *context); *************** *** 110,115 **** contain_aggs_of_level_walker(Node *node, --- 112,161 ---- (void *) context); } + bool + checkExprHasWFuncs(Node *node) + { + contain_aggs_of_level_context context; + + context.sublevels_up = 0; + + /* + * Must be prepared to start with a Query or a bare expression tree; if + * it's a Query, we don't want to increment sublevels_up. + */ + return query_or_expression_tree_walker(node, + checkExprHasWFuncs_walker, + (void *) &context, + 0); + } + + static bool + checkExprHasWFuncs_walker(Node *node, contain_aggs_of_level_context *context) + { + if (node == NULL) + return false; + if (IsA(node, WFunc)) + { + if (((WFunc *) node)->winlevelsup == context->sublevels_up) + return true; /* abort the tree traversal and return true */ + /* else fall through to examine argument */ + } + if (IsA(node, Query)) + { + /* Recurse into subselects */ + bool result; + + context->sublevels_up++; + result = query_tree_walker((Query *) node, + checkExprHasWFuncs_walker, + (void *) context, 0); + context->sublevels_up--; + return result; + } + return expression_tree_walker(node, checkExprHasWFuncs_walker, + (void *) context); + } + /* * locate_agg_of_level - * Find the parse location of any aggregate of the specified query level. *** a/src/backend/utils/adt/ruleutils.c --- b/src/backend/utils/adt/ruleutils.c *************** *** 183,188 **** static void get_oper_expr(OpExpr *expr, deparse_context *context); --- 183,189 ---- static void get_func_expr(FuncExpr *expr, deparse_context *context, bool showimplicit); static void get_agg_expr(Aggref *aggref, deparse_context *context); + static void get_wfunc_expr(WFunc *wfunc, deparse_context *context); static void get_coercion_expr(Node *arg, deparse_context *context, Oid resulttype, int32 resulttypmod, Node *parentNode); *************** *** 4014,4019 **** get_rule_expr(Node *node, deparse_context *context, --- 4015,4024 ---- get_agg_expr((Aggref *) node, context); break; + case T_WFunc: + get_wfunc_expr((WFunc *) node, context); + break; + case T_ArrayRef: { ArrayRef *aref = (ArrayRef *) node; *************** *** 4972,4977 **** get_agg_expr(Aggref *aggref, deparse_context *context) --- 4977,5015 ---- appendStringInfoChar(buf, ')'); } + /* + * get_wfunc_expr - Parse back an WFunc node + */ + static void + get_wfunc_expr(WFunc *wfunc, deparse_context *context) + { + StringInfo buf = context->buf; + Oid argtypes[FUNC_MAX_ARGS]; + int nargs; + ListCell *l; + + nargs = 0; + foreach(l, wfunc->args) + { + if (nargs >= FUNC_MAX_ARGS) + ereport(ERROR, + (errcode(ERRCODE_TOO_MANY_ARGUMENTS), + errmsg("too many arguments"))); + argtypes[nargs] = exprType((Node *) lfirst(l)); + nargs++; + } + + appendStringInfo(buf, "%s(%s", + generate_function_name(wfunc->winfnoid, + nargs, argtypes, NULL), ""); + /* winstar can be set only in zero-argument aggregates */ + if (wfunc->winstar) + appendStringInfoChar(buf, '*'); + else + get_rule_expr((Node *) wfunc->args, context, true); + appendStringInfoChar(buf, ')'); + } + /* ---------- * get_coercion_expr * *************** *** 5983,5988 **** generate_function_name(Oid funcid, int nargs, Oid *argtypes, --- 6021,6028 ---- Oid p_rettype; bool p_retset; int p_nvargs; + bool p_isagg; + bool p_iswfunc; Oid *p_true_typeids; proctup = SearchSysCache(PROCOID, *************** *** 6002,6009 **** generate_function_name(Oid funcid, int nargs, Oid *argtypes, p_result = func_get_detail(list_make1(makeString(proname)), NIL, nargs, argtypes, false, &p_funcid, &p_rettype, ! &p_retset, &p_nvargs, &p_true_typeids); ! if ((p_result == FUNCDETAIL_NORMAL || p_result == FUNCDETAIL_AGGREGATE) && p_funcid == funcid) nspname = NULL; else --- 6042,6050 ---- p_result = func_get_detail(list_make1(makeString(proname)), NIL, nargs, argtypes, false, &p_funcid, &p_rettype, ! &p_retset, &p_nvargs, ! &p_isagg, &p_iswfunc, &p_true_typeids); ! if ((p_result == FUNCDETAIL_NORMAL || p_result == FUNCDETAIL_AGG_OR_WFUNC) && p_funcid == funcid) nspname = NULL; else *** a/src/backend/utils/sort/tuplestore.c --- b/src/backend/utils/sort/tuplestore.c *************** *** 1052,1057 **** tuplestore_copy_read_pointer(Tuplestorestate *state, --- 1052,1087 ---- } /* + * copy write pointer to the specified read pointer + */ + void + tuplestore_write_to_read_pointer(Tuplestorestate *state, int readptr) + { + TSReadPointer *ptr = &state->readptrs[readptr]; + + Assert(readptr >= 0 && readptr < state->readptrcount); + + switch(state->status) + { + case TSS_INMEM: + ptr->current = state->memtupcount; + break; + case TSS_WRITEFILE: + BufFileTell(state->myfile, + &ptr->file, + &ptr->offset); + break; + case TSS_READFILE: + ptr->file = state->writepos_file; + ptr->offset = state->writepos_offset; + break; + default: + elog(ERROR, "invalid tuplestore state"); + break; + } + } + + /* * tuplestore_trim - remove all no-longer-needed tuples */ static void *** a/src/include/catalog/pg_attribute.h --- b/src/include/catalog/pg_attribute.h *************** *** 295,314 **** DATA(insert ( 1247 tableoid 26 0 4 -7 0 -1 -1 t p i t f f t 0)); { 1255, {"prorows"}, 700, -1, 4, 6, 0, -1, -1, FLOAT4PASSBYVAL, 'p', 'i', true, false, false, true, 0 }, \ { 1255, {"provariadic"}, 26, -1, 4, 7, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \ { 1255, {"proisagg"}, 16, -1, 1, 8, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \ ! { 1255, {"prosecdef"}, 16, -1, 1, 9, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \ ! { 1255, {"proisstrict"}, 16, -1, 1, 10, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \ ! { 1255, {"proretset"}, 16, -1, 1, 11, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \ ! { 1255, {"provolatile"}, 18, -1, 1, 12, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \ ! { 1255, {"pronargs"}, 21, -1, 2, 13, 0, -1, -1, true, 'p', 's', true, false, false, true, 0 }, \ ! { 1255, {"prorettype"}, 26, -1, 4, 14, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \ ! { 1255, {"proargtypes"}, 30, -1, -1, 15, 1, -1, -1, false, 'p', 'i', true, false, false, true, 0 }, \ ! { 1255, {"proallargtypes"}, 1028, -1, -1, 16, 1, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \ ! { 1255, {"proargmodes"}, 1002, -1, -1, 17, 1, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \ ! { 1255, {"proargnames"}, 1009, -1, -1, 18, 1, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \ ! { 1255, {"prosrc"}, 25, -1, -1, 19, 0, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \ ! { 1255, {"probin"}, 17, -1, -1, 20, 0, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \ ! { 1255, {"proconfig"}, 1009, -1, -1, 21, 1, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \ ! { 1255, {"proacl"}, 1034, -1, -1, 22, 1, -1, -1, false, 'x', 'i', false, false, false, true, 0 } DATA(insert ( 1255 proname 19 -1 NAMEDATALEN 1 0 -1 -1 f p c t f f t 0)); DATA(insert ( 1255 pronamespace 26 -1 4 2 0 -1 -1 t p i t f f t 0)); --- 295,315 ---- { 1255, {"prorows"}, 700, -1, 4, 6, 0, -1, -1, FLOAT4PASSBYVAL, 'p', 'i', true, false, false, true, 0 }, \ { 1255, {"provariadic"}, 26, -1, 4, 7, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \ { 1255, {"proisagg"}, 16, -1, 1, 8, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \ ! { 1255, {"proiswfunc"}, 16, -1, 1, 9, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \ ! { 1255, {"prosecdef"}, 16, -1, 1, 10, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \ ! { 1255, {"proisstrict"}, 16, -1, 1, 11, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \ ! { 1255, {"proretset"}, 16, -1, 1, 12, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \ ! { 1255, {"provolatile"}, 18, -1, 1, 13, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \ ! { 1255, {"pronargs"}, 21, -1, 2, 14, 0, -1, -1, true, 'p', 's', true, false, false, true, 0 }, \ ! { 1255, {"prorettype"}, 26, -1, 4, 15, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \ ! { 1255, {"proargtypes"}, 30, -1, -1, 16, 1, -1, -1, false, 'p', 'i', true, false, false, true, 0 }, \ ! { 1255, {"proallargtypes"}, 1028, -1, -1, 17, 1, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \ ! { 1255, {"proargmodes"}, 1002, -1, -1, 18, 1, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \ ! { 1255, {"proargnames"}, 1009, -1, -1, 19, 1, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \ ! { 1255, {"prosrc"}, 25, -1, -1, 20, 0, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \ ! { 1255, {"probin"}, 17, -1, -1, 21, 0, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \ ! { 1255, {"proconfig"}, 1009, -1, -1, 22, 1, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \ ! { 1255, {"proacl"}, 1034, -1, -1, 23, 1, -1, -1, false, 'x', 'i', false, false, false, true, 0 } DATA(insert ( 1255 proname 19 -1 NAMEDATALEN 1 0 -1 -1 f p c t f f t 0)); DATA(insert ( 1255 pronamespace 26 -1 4 2 0 -1 -1 t p i t f f t 0)); *************** *** 318,337 **** DATA(insert ( 1255 procost 700 -1 4 5 0 -1 -1 FLOAT4PASSBYVAL p i t f f t DATA(insert ( 1255 prorows 700 -1 4 6 0 -1 -1 FLOAT4PASSBYVAL p i t f f t 0)); DATA(insert ( 1255 provariadic 26 -1 4 7 0 -1 -1 t p i t f f t 0)); DATA(insert ( 1255 proisagg 16 -1 1 8 0 -1 -1 t p c t f f t 0)); ! DATA(insert ( 1255 prosecdef 16 -1 1 9 0 -1 -1 t p c t f f t 0)); ! DATA(insert ( 1255 proisstrict 16 -1 1 10 0 -1 -1 t p c t f f t 0)); ! DATA(insert ( 1255 proretset 16 -1 1 11 0 -1 -1 t p c t f f t 0)); ! DATA(insert ( 1255 provolatile 18 -1 1 12 0 -1 -1 t p c t f f t 0)); ! DATA(insert ( 1255 pronargs 21 -1 2 13 0 -1 -1 t p s t f f t 0)); ! DATA(insert ( 1255 prorettype 26 -1 4 14 0 -1 -1 t p i t f f t 0)); ! DATA(insert ( 1255 proargtypes 30 -1 -1 15 1 -1 -1 f p i t f f t 0)); ! DATA(insert ( 1255 proallargtypes 1028 -1 -1 16 1 -1 -1 f x i f f f t 0)); ! DATA(insert ( 1255 proargmodes 1002 -1 -1 17 1 -1 -1 f x i f f f t 0)); ! DATA(insert ( 1255 proargnames 1009 -1 -1 18 1 -1 -1 f x i f f f t 0)); ! DATA(insert ( 1255 prosrc 25 -1 -1 19 0 -1 -1 f x i f f f t 0)); ! DATA(insert ( 1255 probin 17 -1 -1 20 0 -1 -1 f x i f f f t 0)); ! DATA(insert ( 1255 proconfig 1009 -1 -1 21 1 -1 -1 f x i f f f t 0)); ! DATA(insert ( 1255 proacl 1034 -1 -1 22 1 -1 -1 f x i f f f t 0)); DATA(insert ( 1255 ctid 27 0 6 -1 0 -1 -1 f p s t f f t 0)); DATA(insert ( 1255 oid 26 0 4 -2 0 -1 -1 t p i t f f t 0)); DATA(insert ( 1255 xmin 28 0 4 -3 0 -1 -1 t p i t f f t 0)); --- 319,339 ---- DATA(insert ( 1255 prorows 700 -1 4 6 0 -1 -1 FLOAT4PASSBYVAL p i t f f t 0)); DATA(insert ( 1255 provariadic 26 -1 4 7 0 -1 -1 t p i t f f t 0)); DATA(insert ( 1255 proisagg 16 -1 1 8 0 -1 -1 t p c t f f t 0)); ! DATA(insert ( 1255 proiswfunc 16 -1 1 9 0 -1 -1 t p c t f f t 0)); ! DATA(insert ( 1255 prosecdef 16 -1 1 10 0 -1 -1 t p c t f f t 0)); ! DATA(insert ( 1255 proisstrict 16 -1 1 11 0 -1 -1 t p c t f f t 0)); ! DATA(insert ( 1255 proretset 16 -1 1 12 0 -1 -1 t p c t f f t 0)); ! DATA(insert ( 1255 provolatile 18 -1 1 13 0 -1 -1 t p c t f f t 0)); ! DATA(insert ( 1255 pronargs 21 -1 2 14 0 -1 -1 t p s t f f t 0)); ! DATA(insert ( 1255 prorettype 26 -1 4 15 0 -1 -1 t p i t f f t 0)); ! DATA(insert ( 1255 proargtypes 30 -1 -1 16 1 -1 -1 f p i t f f t 0)); ! DATA(insert ( 1255 proallargtypes 1028 -1 -1 17 1 -1 -1 f x i f f f t 0)); ! DATA(insert ( 1255 proargmodes 1002 -1 -1 18 1 -1 -1 f x i f f f t 0)); ! DATA(insert ( 1255 proargnames 1009 -1 -1 19 1 -1 -1 f x i f f f t 0)); ! DATA(insert ( 1255 prosrc 25 -1 -1 20 0 -1 -1 f x i f f f t 0)); ! DATA(insert ( 1255 probin 17 -1 -1 21 0 -1 -1 f x i f f f t 0)); ! DATA(insert ( 1255 proconfig 1009 -1 -1 22 1 -1 -1 f x i f f f t 0)); ! DATA(insert ( 1255 proacl 1034 -1 -1 23 1 -1 -1 f x i f f f t 0)); DATA(insert ( 1255 ctid 27 0 6 -1 0 -1 -1 f p s t f f t 0)); DATA(insert ( 1255 oid 26 0 4 -2 0 -1 -1 t p i t f f t 0)); DATA(insert ( 1255 xmin 28 0 4 -3 0 -1 -1 t p i t f f t 0)); *** a/src/include/catalog/pg_class.h --- b/src/include/catalog/pg_class.h *************** *** 131,137 **** DATA(insert OID = 1247 ( pg_type PGNSP 71 PGUID 0 1247 0 0 0 0 0 f f r 28 0 0 DESCR(""); DATA(insert OID = 1249 ( pg_attribute PGNSP 75 PGUID 0 1249 0 0 0 0 0 f f r 17 0 0 0 0 0 f f f f 3 _null_ _null_ )); DESCR(""); ! DATA(insert OID = 1255 ( pg_proc PGNSP 81 PGUID 0 1255 0 0 0 0 0 f f r 22 0 0 0 0 0 t f f f 3 _null_ _null_ )); DESCR(""); DATA(insert OID = 1259 ( pg_class PGNSP 83 PGUID 0 1259 0 0 0 0 0 f f r 27 0 0 0 0 0 t f f f 3 _null_ _null_ )); DESCR(""); --- 131,137 ---- DESCR(""); DATA(insert OID = 1249 ( pg_attribute PGNSP 75 PGUID 0 1249 0 0 0 0 0 f f r 17 0 0 0 0 0 f f f f 3 _null_ _null_ )); DESCR(""); ! DATA(insert OID = 1255 ( pg_proc PGNSP 81 PGUID 0 1255 0 0 0 0 0 f f r 23 0 0 0 0 0 t f f f 3 _null_ _null_ )); DESCR(""); DATA(insert OID = 1259 ( pg_class PGNSP 83 PGUID 0 1259 0 0 0 0 0 f f r 27 0 0 0 0 0 t f f f 3 _null_ _null_ )); DESCR(""); *** a/src/include/catalog/pg_proc.h --- b/src/include/catalog/pg_proc.h *************** *** 42,47 **** CATALOG(pg_proc,1255) BKI_BOOTSTRAP --- 42,48 ---- float4 prorows; /* estimated # of rows out (if proretset) */ Oid provariadic; /* element type of variadic array, or 0 */ bool proisagg; /* is it an aggregate? */ + bool proiswfunc; /* is it a window function? */ bool prosecdef; /* security definer */ bool proisstrict; /* strict with respect to NULLs? */ bool proretset; /* returns a set? */ *************** *** 71,77 **** typedef FormData_pg_proc *Form_pg_proc; * compiler constants for pg_proc * ---------------- */ ! #define Natts_pg_proc 22 #define Anum_pg_proc_proname 1 #define Anum_pg_proc_pronamespace 2 #define Anum_pg_proc_proowner 3 --- 72,78 ---- * compiler constants for pg_proc * ---------------- */ ! #define Natts_pg_proc 23 #define Anum_pg_proc_proname 1 #define Anum_pg_proc_pronamespace 2 #define Anum_pg_proc_proowner 3 *************** *** 80,99 **** typedef FormData_pg_proc *Form_pg_proc; #define Anum_pg_proc_prorows 6 #define Anum_pg_proc_provariadic 7 #define Anum_pg_proc_proisagg 8 ! #define Anum_pg_proc_prosecdef 9 ! #define Anum_pg_proc_proisstrict 10 ! #define Anum_pg_proc_proretset 11 ! #define Anum_pg_proc_provolatile 12 ! #define Anum_pg_proc_pronargs 13 ! #define Anum_pg_proc_prorettype 14 ! #define Anum_pg_proc_proargtypes 15 ! #define Anum_pg_proc_proallargtypes 16 ! #define Anum_pg_proc_proargmodes 17 ! #define Anum_pg_proc_proargnames 18 ! #define Anum_pg_proc_prosrc 19 ! #define Anum_pg_proc_probin 20 ! #define Anum_pg_proc_proconfig 21 ! #define Anum_pg_proc_proacl 22 /* ---------------- * initial contents of pg_proc --- 81,101 ---- #define Anum_pg_proc_prorows 6 #define Anum_pg_proc_provariadic 7 #define Anum_pg_proc_proisagg 8 ! #define Anum_pg_proc_proiswfunc 9 ! #define Anum_pg_proc_prosecdef 10 ! #define Anum_pg_proc_proisstrict 11 ! #define Anum_pg_proc_proretset 12 ! #define Anum_pg_proc_provolatile 13 ! #define Anum_pg_proc_pronargs 14 ! #define Anum_pg_proc_prorettype 15 ! #define Anum_pg_proc_proargtypes 16 ! #define Anum_pg_proc_proallargtypes 17 ! #define Anum_pg_proc_proargmodes 18 ! #define Anum_pg_proc_proargnames 19 ! #define Anum_pg_proc_prosrc 20 ! #define Anum_pg_proc_probin 21 ! #define Anum_pg_proc_proconfig 22 ! #define Anum_pg_proc_proacl 23 /* ---------------- * initial contents of pg_proc *************** *** 104,4565 **** typedef FormData_pg_proc *Form_pg_proc; /* OIDS 1 - 99 */ ! DATA(insert OID = 1242 ( boolin PGNSP PGUID 12 1 0 0 f f t f i 1 16 "2275" _null_ _null_ _null_ boolin _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1243 ( boolout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "16" _null_ _null_ _null_ boolout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1244 ( byteain PGNSP PGUID 12 1 0 0 f f t f i 1 17 "2275" _null_ _null_ _null_ byteain _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 31 ( byteaout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "17" _null_ _null_ _null_ byteaout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1245 ( charin PGNSP PGUID 12 1 0 0 f f t f i 1 18 "2275" _null_ _null_ _null_ charin _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 33 ( charout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "18" _null_ _null_ _null_ charout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 34 ( namein PGNSP PGUID 12 1 0 0 f f t f i 1 19 "2275" _null_ _null_ _null_ namein _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 35 ( nameout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "19" _null_ _null_ _null_ nameout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 38 ( int2in PGNSP PGUID 12 1 0 0 f f t f i 1 21 "2275" _null_ _null_ _null_ int2in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 39 ( int2out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "21" _null_ _null_ _null_ int2out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 40 ( int2vectorin PGNSP PGUID 12 1 0 0 f f t f i 1 22 "2275" _null_ _null_ _null_ int2vectorin _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 41 ( int2vectorout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "22" _null_ _null_ _null_ int2vectorout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 42 ( int4in PGNSP PGUID 12 1 0 0 f f t f i 1 23 "2275" _null_ _null_ _null_ int4in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 43 ( int4out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "23" _null_ _null_ _null_ int4out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 44 ( regprocin PGNSP PGUID 12 1 0 0 f f t f s 1 24 "2275" _null_ _null_ _null_ regprocin _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 45 ( regprocout PGNSP PGUID 12 1 0 0 f f t f s 1 2275 "24" _null_ _null_ _null_ regprocout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 46 ( textin PGNSP PGUID 12 1 0 0 f f t f i 1 25 "2275" _null_ _null_ _null_ textin _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 47 ( textout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "25" _null_ _null_ _null_ textout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 48 ( tidin PGNSP PGUID 12 1 0 0 f f t f i 1 27 "2275" _null_ _null_ _null_ tidin _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 49 ( tidout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "27" _null_ _null_ _null_ tidout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 50 ( xidin PGNSP PGUID 12 1 0 0 f f t f i 1 28 "2275" _null_ _null_ _null_ xidin _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 51 ( xidout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "28" _null_ _null_ _null_ xidout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 52 ( cidin PGNSP PGUID 12 1 0 0 f f t f i 1 29 "2275" _null_ _null_ _null_ cidin _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 53 ( cidout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "29" _null_ _null_ _null_ cidout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 54 ( oidvectorin PGNSP PGUID 12 1 0 0 f f t f i 1 30 "2275" _null_ _null_ _null_ oidvectorin _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 55 ( oidvectorout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "30" _null_ _null_ _null_ oidvectorout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 56 ( boollt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "16 16" _null_ _null_ _null_ boollt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 57 ( boolgt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "16 16" _null_ _null_ _null_ boolgt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 60 ( booleq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "16 16" _null_ _null_ _null_ booleq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 61 ( chareq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "18 18" _null_ _null_ _null_ chareq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 62 ( nameeq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "19 19" _null_ _null_ _null_ nameeq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 63 ( int2eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "21 21" _null_ _null_ _null_ int2eq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 64 ( int2lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "21 21" _null_ _null_ _null_ int2lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 65 ( int4eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "23 23" _null_ _null_ _null_ int4eq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 66 ( int4lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "23 23" _null_ _null_ _null_ int4lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 67 ( texteq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "25 25" _null_ _null_ _null_ texteq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 68 ( xideq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "28 28" _null_ _null_ _null_ xideq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 69 ( cideq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "29 29" _null_ _null_ _null_ cideq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 70 ( charne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "18 18" _null_ _null_ _null_ charne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 1246 ( charlt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "18 18" _null_ _null_ _null_ charlt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 72 ( charle PGNSP PGUID 12 1 0 0 f f t f i 2 16 "18 18" _null_ _null_ _null_ charle _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 73 ( chargt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "18 18" _null_ _null_ _null_ chargt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 74 ( charge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "18 18" _null_ _null_ _null_ charge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 77 ( int4 PGNSP PGUID 12 1 0 0 f f t f i 1 23 "18" _null_ _null_ _null_ chartoi4 _null_ _null_ _null_ )); DESCR("convert char to int4"); ! DATA(insert OID = 78 ( char PGNSP PGUID 12 1 0 0 f f t f i 1 18 "23" _null_ _null_ _null_ i4tochar _null_ _null_ _null_ )); DESCR("convert int4 to char"); ! DATA(insert OID = 79 ( nameregexeq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "19 25" _null_ _null_ _null_ nameregexeq _null_ _null_ _null_ )); DESCR("matches regex., case-sensitive"); ! DATA(insert OID = 1252 ( nameregexne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "19 25" _null_ _null_ _null_ nameregexne _null_ _null_ _null_ )); DESCR("does not match regex., case-sensitive"); ! DATA(insert OID = 1254 ( textregexeq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "25 25" _null_ _null_ _null_ textregexeq _null_ _null_ _null_ )); DESCR("matches regex., case-sensitive"); ! DATA(insert OID = 1256 ( textregexne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "25 25" _null_ _null_ _null_ textregexne _null_ _null_ _null_ )); DESCR("does not match regex., case-sensitive"); ! DATA(insert OID = 1257 ( textlen PGNSP PGUID 12 1 0 0 f f t f i 1 23 "25" _null_ _null_ _null_ textlen _null_ _null_ _null_ )); DESCR("length"); ! DATA(insert OID = 1258 ( textcat PGNSP PGUID 12 1 0 0 f f t f i 2 25 "25 25" _null_ _null_ _null_ textcat _null_ _null_ _null_ )); DESCR("concatenate"); ! DATA(insert OID = 84 ( boolne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "16 16" _null_ _null_ _null_ boolne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 89 ( version PGNSP PGUID 12 1 0 0 f f t f s 0 25 "" _null_ _null_ _null_ pgsql_version _null_ _null_ _null_ )); DESCR("PostgreSQL version string"); /* OIDS 100 - 199 */ ! DATA(insert OID = 101 ( eqsel PGNSP PGUID 12 1 0 0 f f t f s 4 701 "2281 26 2281 23" _null_ _null_ _null_ eqsel _null_ _null_ _null_ )); DESCR("restriction selectivity of = and related operators"); ! DATA(insert OID = 102 ( neqsel PGNSP PGUID 12 1 0 0 f f t f s 4 701 "2281 26 2281 23" _null_ _null_ _null_ neqsel _null_ _null_ _null_ )); DESCR("restriction selectivity of <> and related operators"); ! DATA(insert OID = 103 ( scalarltsel PGNSP PGUID 12 1 0 0 f f t f s 4 701 "2281 26 2281 23" _null_ _null_ _null_ scalarltsel _null_ _null_ _null_ )); DESCR("restriction selectivity of < and related operators on scalar datatypes"); ! DATA(insert OID = 104 ( scalargtsel PGNSP PGUID 12 1 0 0 f f t f s 4 701 "2281 26 2281 23" _null_ _null_ _null_ scalargtsel _null_ _null_ _null_ )); DESCR("restriction selectivity of > and related operators on scalar datatypes"); ! DATA(insert OID = 105 ( eqjoinsel PGNSP PGUID 12 1 0 0 f f t f s 5 701 "2281 26 2281 21 2281" _null_ _null_ _null_ eqjoinsel _null_ _null_ _null_ )); DESCR("join selectivity of = and related operators"); ! DATA(insert OID = 106 ( neqjoinsel PGNSP PGUID 12 1 0 0 f f t f s 5 701 "2281 26 2281 21 2281" _null_ _null_ _null_ neqjoinsel _null_ _null_ _null_ )); DESCR("join selectivity of <> and related operators"); ! DATA(insert OID = 107 ( scalarltjoinsel PGNSP PGUID 12 1 0 0 f f t f s 5 701 "2281 26 2281 21 2281" _null_ _null_ _null_ scalarltjoinsel _null_ _null_ _null_ )); DESCR("join selectivity of < and related operators on scalar datatypes"); ! DATA(insert OID = 108 ( scalargtjoinsel PGNSP PGUID 12 1 0 0 f f t f s 5 701 "2281 26 2281 21 2281" _null_ _null_ _null_ scalargtjoinsel _null_ _null_ _null_ )); DESCR("join selectivity of > and related operators on scalar datatypes"); ! DATA(insert OID = 109 ( unknownin PGNSP PGUID 12 1 0 0 f f t f i 1 705 "2275" _null_ _null_ _null_ unknownin _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 110 ( unknownout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "705" _null_ _null_ _null_ unknownout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 111 ( numeric_fac PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "20" _null_ _null_ _null_ numeric_fac _null_ _null_ _null_ )); DESCR("equivalent to factorial"); ! DATA(insert OID = 115 ( box_above_eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "603 603" _null_ _null_ _null_ box_above_eq _null_ _null_ _null_ )); DESCR("is above (allows touching)"); ! DATA(insert OID = 116 ( box_below_eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "603 603" _null_ _null_ _null_ box_below_eq _null_ _null_ _null_ )); DESCR("is below (allows touching)"); ! DATA(insert OID = 117 ( point_in PGNSP PGUID 12 1 0 0 f f t f i 1 600 "2275" _null_ _null_ _null_ point_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 118 ( point_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "600" _null_ _null_ _null_ point_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 119 ( lseg_in PGNSP PGUID 12 1 0 0 f f t f i 1 601 "2275" _null_ _null_ _null_ lseg_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 120 ( lseg_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "601" _null_ _null_ _null_ lseg_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 121 ( path_in PGNSP PGUID 12 1 0 0 f f t f i 1 602 "2275" _null_ _null_ _null_ path_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 122 ( path_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "602" _null_ _null_ _null_ path_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 123 ( box_in PGNSP PGUID 12 1 0 0 f f t f i 1 603 "2275" _null_ _null_ _null_ box_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 124 ( box_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "603" _null_ _null_ _null_ box_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 125 ( box_overlap PGNSP PGUID 12 1 0 0 f f t f i 2 16 "603 603" _null_ _null_ _null_ box_overlap _null_ _null_ _null_ )); DESCR("overlaps"); ! DATA(insert OID = 126 ( box_ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "603 603" _null_ _null_ _null_ box_ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal by area"); ! DATA(insert OID = 127 ( box_gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "603 603" _null_ _null_ _null_ box_gt _null_ _null_ _null_ )); DESCR("greater-than by area"); ! DATA(insert OID = 128 ( box_eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "603 603" _null_ _null_ _null_ box_eq _null_ _null_ _null_ )); DESCR("equal by area"); ! DATA(insert OID = 129 ( box_lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "603 603" _null_ _null_ _null_ box_lt _null_ _null_ _null_ )); DESCR("less-than by area"); ! DATA(insert OID = 130 ( box_le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "603 603" _null_ _null_ _null_ box_le _null_ _null_ _null_ )); DESCR("less-than-or-equal by area"); ! DATA(insert OID = 131 ( point_above PGNSP PGUID 12 1 0 0 f f t f i 2 16 "600 600" _null_ _null_ _null_ point_above _null_ _null_ _null_ )); DESCR("is above"); ! DATA(insert OID = 132 ( point_left PGNSP PGUID 12 1 0 0 f f t f i 2 16 "600 600" _null_ _null_ _null_ point_left _null_ _null_ _null_ )); DESCR("is left of"); ! DATA(insert OID = 133 ( point_right PGNSP PGUID 12 1 0 0 f f t f i 2 16 "600 600" _null_ _null_ _null_ point_right _null_ _null_ _null_ )); DESCR("is right of"); ! DATA(insert OID = 134 ( point_below PGNSP PGUID 12 1 0 0 f f t f i 2 16 "600 600" _null_ _null_ _null_ point_below _null_ _null_ _null_ )); DESCR("is below"); ! DATA(insert OID = 135 ( point_eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "600 600" _null_ _null_ _null_ point_eq _null_ _null_ _null_ )); DESCR("same as?"); ! DATA(insert OID = 136 ( on_pb PGNSP PGUID 12 1 0 0 f f t f i 2 16 "600 603" _null_ _null_ _null_ on_pb _null_ _null_ _null_ )); DESCR("point inside box?"); ! DATA(insert OID = 137 ( on_ppath PGNSP PGUID 12 1 0 0 f f t f i 2 16 "600 602" _null_ _null_ _null_ on_ppath _null_ _null_ _null_ )); DESCR("point within closed path, or point on open path"); ! DATA(insert OID = 138 ( box_center PGNSP PGUID 12 1 0 0 f f t f i 1 600 "603" _null_ _null_ _null_ box_center _null_ _null_ _null_ )); DESCR("center of"); ! DATA(insert OID = 139 ( areasel PGNSP PGUID 12 1 0 0 f f t f s 4 701 "2281 26 2281 23" _null_ _null_ _null_ areasel _null_ _null_ _null_ )); DESCR("restriction selectivity for area-comparison operators"); ! DATA(insert OID = 140 ( areajoinsel PGNSP PGUID 12 1 0 0 f f t f s 5 701 "2281 26 2281 21 2281" _null_ _null_ _null_ areajoinsel _null_ _null_ _null_ )); DESCR("join selectivity for area-comparison operators"); ! DATA(insert OID = 141 ( int4mul PGNSP PGUID 12 1 0 0 f f t f i 2 23 "23 23" _null_ _null_ _null_ int4mul _null_ _null_ _null_ )); DESCR("multiply"); ! DATA(insert OID = 144 ( int4ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "23 23" _null_ _null_ _null_ int4ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 145 ( int2ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "21 21" _null_ _null_ _null_ int2ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 146 ( int2gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "21 21" _null_ _null_ _null_ int2gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 147 ( int4gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "23 23" _null_ _null_ _null_ int4gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 148 ( int2le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "21 21" _null_ _null_ _null_ int2le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 149 ( int4le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "23 23" _null_ _null_ _null_ int4le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 150 ( int4ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "23 23" _null_ _null_ _null_ int4ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 151 ( int2ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "21 21" _null_ _null_ _null_ int2ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 152 ( int2mul PGNSP PGUID 12 1 0 0 f f t f i 2 21 "21 21" _null_ _null_ _null_ int2mul _null_ _null_ _null_ )); DESCR("multiply"); ! DATA(insert OID = 153 ( int2div PGNSP PGUID 12 1 0 0 f f t f i 2 21 "21 21" _null_ _null_ _null_ int2div _null_ _null_ _null_ )); DESCR("divide"); ! DATA(insert OID = 154 ( int4div PGNSP PGUID 12 1 0 0 f f t f i 2 23 "23 23" _null_ _null_ _null_ int4div _null_ _null_ _null_ )); DESCR("divide"); ! DATA(insert OID = 155 ( int2mod PGNSP PGUID 12 1 0 0 f f t f i 2 21 "21 21" _null_ _null_ _null_ int2mod _null_ _null_ _null_ )); DESCR("modulus"); ! DATA(insert OID = 156 ( int4mod PGNSP PGUID 12 1 0 0 f f t f i 2 23 "23 23" _null_ _null_ _null_ int4mod _null_ _null_ _null_ )); DESCR("modulus"); ! DATA(insert OID = 157 ( textne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "25 25" _null_ _null_ _null_ textne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 158 ( int24eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "21 23" _null_ _null_ _null_ int24eq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 159 ( int42eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "23 21" _null_ _null_ _null_ int42eq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 160 ( int24lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "21 23" _null_ _null_ _null_ int24lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 161 ( int42lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "23 21" _null_ _null_ _null_ int42lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 162 ( int24gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "21 23" _null_ _null_ _null_ int24gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 163 ( int42gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "23 21" _null_ _null_ _null_ int42gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 164 ( int24ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "21 23" _null_ _null_ _null_ int24ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 165 ( int42ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "23 21" _null_ _null_ _null_ int42ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 166 ( int24le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "21 23" _null_ _null_ _null_ int24le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 167 ( int42le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "23 21" _null_ _null_ _null_ int42le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 168 ( int24ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "21 23" _null_ _null_ _null_ int24ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 169 ( int42ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "23 21" _null_ _null_ _null_ int42ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 170 ( int24mul PGNSP PGUID 12 1 0 0 f f t f i 2 23 "21 23" _null_ _null_ _null_ int24mul _null_ _null_ _null_ )); DESCR("multiply"); ! DATA(insert OID = 171 ( int42mul PGNSP PGUID 12 1 0 0 f f t f i 2 23 "23 21" _null_ _null_ _null_ int42mul _null_ _null_ _null_ )); DESCR("multiply"); ! DATA(insert OID = 172 ( int24div PGNSP PGUID 12 1 0 0 f f t f i 2 23 "21 23" _null_ _null_ _null_ int24div _null_ _null_ _null_ )); DESCR("divide"); ! DATA(insert OID = 173 ( int42div PGNSP PGUID 12 1 0 0 f f t f i 2 23 "23 21" _null_ _null_ _null_ int42div _null_ _null_ _null_ )); DESCR("divide"); ! DATA(insert OID = 176 ( int2pl PGNSP PGUID 12 1 0 0 f f t f i 2 21 "21 21" _null_ _null_ _null_ int2pl _null_ _null_ _null_ )); DESCR("add"); ! DATA(insert OID = 177 ( int4pl PGNSP PGUID 12 1 0 0 f f t f i 2 23 "23 23" _null_ _null_ _null_ int4pl _null_ _null_ _null_ )); DESCR("add"); ! DATA(insert OID = 178 ( int24pl PGNSP PGUID 12 1 0 0 f f t f i 2 23 "21 23" _null_ _null_ _null_ int24pl _null_ _null_ _null_ )); DESCR("add"); ! DATA(insert OID = 179 ( int42pl PGNSP PGUID 12 1 0 0 f f t f i 2 23 "23 21" _null_ _null_ _null_ int42pl _null_ _null_ _null_ )); DESCR("add"); ! DATA(insert OID = 180 ( int2mi PGNSP PGUID 12 1 0 0 f f t f i 2 21 "21 21" _null_ _null_ _null_ int2mi _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 181 ( int4mi PGNSP PGUID 12 1 0 0 f f t f i 2 23 "23 23" _null_ _null_ _null_ int4mi _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 182 ( int24mi PGNSP PGUID 12 1 0 0 f f t f i 2 23 "21 23" _null_ _null_ _null_ int24mi _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 183 ( int42mi PGNSP PGUID 12 1 0 0 f f t f i 2 23 "23 21" _null_ _null_ _null_ int42mi _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 184 ( oideq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "26 26" _null_ _null_ _null_ oideq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 185 ( oidne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "26 26" _null_ _null_ _null_ oidne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 186 ( box_same PGNSP PGUID 12 1 0 0 f f t f i 2 16 "603 603" _null_ _null_ _null_ box_same _null_ _null_ _null_ )); DESCR("same as?"); ! DATA(insert OID = 187 ( box_contain PGNSP PGUID 12 1 0 0 f f t f i 2 16 "603 603" _null_ _null_ _null_ box_contain _null_ _null_ _null_ )); DESCR("contains?"); ! DATA(insert OID = 188 ( box_left PGNSP PGUID 12 1 0 0 f f t f i 2 16 "603 603" _null_ _null_ _null_ box_left _null_ _null_ _null_ )); DESCR("is left of"); ! DATA(insert OID = 189 ( box_overleft PGNSP PGUID 12 1 0 0 f f t f i 2 16 "603 603" _null_ _null_ _null_ box_overleft _null_ _null_ _null_ )); DESCR("overlaps or is left of"); ! DATA(insert OID = 190 ( box_overright PGNSP PGUID 12 1 0 0 f f t f i 2 16 "603 603" _null_ _null_ _null_ box_overright _null_ _null_ _null_ )); DESCR("overlaps or is right of"); ! DATA(insert OID = 191 ( box_right PGNSP PGUID 12 1 0 0 f f t f i 2 16 "603 603" _null_ _null_ _null_ box_right _null_ _null_ _null_ )); DESCR("is right of"); ! DATA(insert OID = 192 ( box_contained PGNSP PGUID 12 1 0 0 f f t f i 2 16 "603 603" _null_ _null_ _null_ box_contained _null_ _null_ _null_ )); DESCR("is contained by?"); /* OIDS 200 - 299 */ ! DATA(insert OID = 200 ( float4in PGNSP PGUID 12 1 0 0 f f t f i 1 700 "2275" _null_ _null_ _null_ float4in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 201 ( float4out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "700" _null_ _null_ _null_ float4out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 202 ( float4mul PGNSP PGUID 12 1 0 0 f f t f i 2 700 "700 700" _null_ _null_ _null_ float4mul _null_ _null_ _null_ )); DESCR("multiply"); ! DATA(insert OID = 203 ( float4div PGNSP PGUID 12 1 0 0 f f t f i 2 700 "700 700" _null_ _null_ _null_ float4div _null_ _null_ _null_ )); DESCR("divide"); ! DATA(insert OID = 204 ( float4pl PGNSP PGUID 12 1 0 0 f f t f i 2 700 "700 700" _null_ _null_ _null_ float4pl _null_ _null_ _null_ )); DESCR("add"); ! DATA(insert OID = 205 ( float4mi PGNSP PGUID 12 1 0 0 f f t f i 2 700 "700 700" _null_ _null_ _null_ float4mi _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 206 ( float4um PGNSP PGUID 12 1 0 0 f f t f i 1 700 "700" _null_ _null_ _null_ float4um _null_ _null_ _null_ )); DESCR("negate"); ! DATA(insert OID = 207 ( float4abs PGNSP PGUID 12 1 0 0 f f t f i 1 700 "700" _null_ _null_ _null_ float4abs _null_ _null_ _null_ )); DESCR("absolute value"); ! DATA(insert OID = 208 ( float4_accum PGNSP PGUID 12 1 0 0 f f t f i 2 1022 "1022 700" _null_ _null_ _null_ float4_accum _null_ _null_ _null_ )); DESCR("aggregate transition function"); ! DATA(insert OID = 209 ( float4larger PGNSP PGUID 12 1 0 0 f f t f i 2 700 "700 700" _null_ _null_ _null_ float4larger _null_ _null_ _null_ )); DESCR("larger of two"); ! DATA(insert OID = 211 ( float4smaller PGNSP PGUID 12 1 0 0 f f t f i 2 700 "700 700" _null_ _null_ _null_ float4smaller _null_ _null_ _null_ )); DESCR("smaller of two"); ! DATA(insert OID = 212 ( int4um PGNSP PGUID 12 1 0 0 f f t f i 1 23 "23" _null_ _null_ _null_ int4um _null_ _null_ _null_ )); DESCR("negate"); ! DATA(insert OID = 213 ( int2um PGNSP PGUID 12 1 0 0 f f t f i 1 21 "21" _null_ _null_ _null_ int2um _null_ _null_ _null_ )); DESCR("negate"); ! DATA(insert OID = 214 ( float8in PGNSP PGUID 12 1 0 0 f f t f i 1 701 "2275" _null_ _null_ _null_ float8in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 215 ( float8out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "701" _null_ _null_ _null_ float8out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 216 ( float8mul PGNSP PGUID 12 1 0 0 f f t f i 2 701 "701 701" _null_ _null_ _null_ float8mul _null_ _null_ _null_ )); DESCR("multiply"); ! DATA(insert OID = 217 ( float8div PGNSP PGUID 12 1 0 0 f f t f i 2 701 "701 701" _null_ _null_ _null_ float8div _null_ _null_ _null_ )); DESCR("divide"); ! DATA(insert OID = 218 ( float8pl PGNSP PGUID 12 1 0 0 f f t f i 2 701 "701 701" _null_ _null_ _null_ float8pl _null_ _null_ _null_ )); DESCR("add"); ! DATA(insert OID = 219 ( float8mi PGNSP PGUID 12 1 0 0 f f t f i 2 701 "701 701" _null_ _null_ _null_ float8mi _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 220 ( float8um PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ float8um _null_ _null_ _null_ )); DESCR("negate"); ! DATA(insert OID = 221 ( float8abs PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ float8abs _null_ _null_ _null_ )); DESCR("absolute value"); ! DATA(insert OID = 222 ( float8_accum PGNSP PGUID 12 1 0 0 f f t f i 2 1022 "1022 701" _null_ _null_ _null_ float8_accum _null_ _null_ _null_ )); DESCR("aggregate transition function"); ! DATA(insert OID = 223 ( float8larger PGNSP PGUID 12 1 0 0 f f t f i 2 701 "701 701" _null_ _null_ _null_ float8larger _null_ _null_ _null_ )); DESCR("larger of two"); ! DATA(insert OID = 224 ( float8smaller PGNSP PGUID 12 1 0 0 f f t f i 2 701 "701 701" _null_ _null_ _null_ float8smaller _null_ _null_ _null_ )); DESCR("smaller of two"); ! DATA(insert OID = 225 ( lseg_center PGNSP PGUID 12 1 0 0 f f t f i 1 600 "601" _null_ _null_ _null_ lseg_center _null_ _null_ _null_ )); DESCR("center of"); ! DATA(insert OID = 226 ( path_center PGNSP PGUID 12 1 0 0 f f t f i 1 600 "602" _null_ _null_ _null_ path_center _null_ _null_ _null_ )); DESCR("center of"); ! DATA(insert OID = 227 ( poly_center PGNSP PGUID 12 1 0 0 f f t f i 1 600 "604" _null_ _null_ _null_ poly_center _null_ _null_ _null_ )); DESCR("center of"); ! DATA(insert OID = 228 ( dround PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dround _null_ _null_ _null_ )); DESCR("round to nearest integer"); ! DATA(insert OID = 229 ( dtrunc PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dtrunc _null_ _null_ _null_ )); DESCR("truncate to integer"); ! DATA(insert OID = 2308 ( ceil PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dceil _null_ _null_ _null_ )); DESCR("smallest integer >= value"); ! DATA(insert OID = 2320 ( ceiling PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dceil _null_ _null_ _null_ )); DESCR("smallest integer >= value"); ! DATA(insert OID = 2309 ( floor PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dfloor _null_ _null_ _null_ )); DESCR("largest integer <= value"); ! DATA(insert OID = 2310 ( sign PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dsign _null_ _null_ _null_ )); DESCR("sign of value"); ! DATA(insert OID = 230 ( dsqrt PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dsqrt _null_ _null_ _null_ )); DESCR("square root"); ! DATA(insert OID = 231 ( dcbrt PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dcbrt _null_ _null_ _null_ )); DESCR("cube root"); ! DATA(insert OID = 232 ( dpow PGNSP PGUID 12 1 0 0 f f t f i 2 701 "701 701" _null_ _null_ _null_ dpow _null_ _null_ _null_ )); DESCR("exponentiation (x^y)"); ! DATA(insert OID = 233 ( dexp PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dexp _null_ _null_ _null_ )); DESCR("natural exponential (e^x)"); ! DATA(insert OID = 234 ( dlog1 PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dlog1 _null_ _null_ _null_ )); DESCR("natural logarithm"); ! DATA(insert OID = 235 ( float8 PGNSP PGUID 12 1 0 0 f f t f i 1 701 "21" _null_ _null_ _null_ i2tod _null_ _null_ _null_ )); DESCR("convert int2 to float8"); ! DATA(insert OID = 236 ( float4 PGNSP PGUID 12 1 0 0 f f t f i 1 700 "21" _null_ _null_ _null_ i2tof _null_ _null_ _null_ )); DESCR("convert int2 to float4"); ! DATA(insert OID = 237 ( int2 PGNSP PGUID 12 1 0 0 f f t f i 1 21 "701" _null_ _null_ _null_ dtoi2 _null_ _null_ _null_ )); DESCR("convert float8 to int2"); ! DATA(insert OID = 238 ( int2 PGNSP PGUID 12 1 0 0 f f t f i 1 21 "700" _null_ _null_ _null_ ftoi2 _null_ _null_ _null_ )); DESCR("convert float4 to int2"); ! DATA(insert OID = 239 ( line_distance PGNSP PGUID 12 1 0 0 f f t f i 2 701 "628 628" _null_ _null_ _null_ line_distance _null_ _null_ _null_ )); DESCR("distance between"); ! DATA(insert OID = 240 ( abstimein PGNSP PGUID 12 1 0 0 f f t f s 1 702 "2275" _null_ _null_ _null_ abstimein _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 241 ( abstimeout PGNSP PGUID 12 1 0 0 f f t f s 1 2275 "702" _null_ _null_ _null_ abstimeout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 242 ( reltimein PGNSP PGUID 12 1 0 0 f f t f s 1 703 "2275" _null_ _null_ _null_ reltimein _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 243 ( reltimeout PGNSP PGUID 12 1 0 0 f f t f s 1 2275 "703" _null_ _null_ _null_ reltimeout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 244 ( timepl PGNSP PGUID 12 1 0 0 f f t f i 2 702 "702 703" _null_ _null_ _null_ timepl _null_ _null_ _null_ )); DESCR("add"); ! DATA(insert OID = 245 ( timemi PGNSP PGUID 12 1 0 0 f f t f i 2 702 "702 703" _null_ _null_ _null_ timemi _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 246 ( tintervalin PGNSP PGUID 12 1 0 0 f f t f s 1 704 "2275" _null_ _null_ _null_ tintervalin _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 247 ( tintervalout PGNSP PGUID 12 1 0 0 f f t f s 1 2275 "704" _null_ _null_ _null_ tintervalout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 248 ( intinterval PGNSP PGUID 12 1 0 0 f f t f i 2 16 "702 704" _null_ _null_ _null_ intinterval _null_ _null_ _null_ )); DESCR("abstime in tinterval"); ! DATA(insert OID = 249 ( tintervalrel PGNSP PGUID 12 1 0 0 f f t f i 1 703 "704" _null_ _null_ _null_ tintervalrel _null_ _null_ _null_ )); DESCR("tinterval to reltime"); ! DATA(insert OID = 250 ( timenow PGNSP PGUID 12 1 0 0 f f t f s 0 702 "" _null_ _null_ _null_ timenow _null_ _null_ _null_ )); DESCR("current date and time (abstime)"); ! DATA(insert OID = 251 ( abstimeeq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "702 702" _null_ _null_ _null_ abstimeeq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 252 ( abstimene PGNSP PGUID 12 1 0 0 f f t f i 2 16 "702 702" _null_ _null_ _null_ abstimene _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 253 ( abstimelt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "702 702" _null_ _null_ _null_ abstimelt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 254 ( abstimegt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "702 702" _null_ _null_ _null_ abstimegt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 255 ( abstimele PGNSP PGUID 12 1 0 0 f f t f i 2 16 "702 702" _null_ _null_ _null_ abstimele _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 256 ( abstimege PGNSP PGUID 12 1 0 0 f f t f i 2 16 "702 702" _null_ _null_ _null_ abstimege _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 257 ( reltimeeq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "703 703" _null_ _null_ _null_ reltimeeq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 258 ( reltimene PGNSP PGUID 12 1 0 0 f f t f i 2 16 "703 703" _null_ _null_ _null_ reltimene _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 259 ( reltimelt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "703 703" _null_ _null_ _null_ reltimelt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 260 ( reltimegt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "703 703" _null_ _null_ _null_ reltimegt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 261 ( reltimele PGNSP PGUID 12 1 0 0 f f t f i 2 16 "703 703" _null_ _null_ _null_ reltimele _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 262 ( reltimege PGNSP PGUID 12 1 0 0 f f t f i 2 16 "703 703" _null_ _null_ _null_ reltimege _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 263 ( tintervalsame PGNSP PGUID 12 1 0 0 f f t f i 2 16 "704 704" _null_ _null_ _null_ tintervalsame _null_ _null_ _null_ )); DESCR("same as?"); ! DATA(insert OID = 264 ( tintervalct PGNSP PGUID 12 1 0 0 f f t f i 2 16 "704 704" _null_ _null_ _null_ tintervalct _null_ _null_ _null_ )); DESCR("contains?"); ! DATA(insert OID = 265 ( tintervalov PGNSP PGUID 12 1 0 0 f f t f i 2 16 "704 704" _null_ _null_ _null_ tintervalov _null_ _null_ _null_ )); DESCR("overlaps"); ! DATA(insert OID = 266 ( tintervalleneq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "704 703" _null_ _null_ _null_ tintervalleneq _null_ _null_ _null_ )); DESCR("length equal"); ! DATA(insert OID = 267 ( tintervallenne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "704 703" _null_ _null_ _null_ tintervallenne _null_ _null_ _null_ )); DESCR("length not equal to"); ! DATA(insert OID = 268 ( tintervallenlt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "704 703" _null_ _null_ _null_ tintervallenlt _null_ _null_ _null_ )); DESCR("length less-than"); ! DATA(insert OID = 269 ( tintervallengt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "704 703" _null_ _null_ _null_ tintervallengt _null_ _null_ _null_ )); DESCR("length greater-than"); ! DATA(insert OID = 270 ( tintervallenle PGNSP PGUID 12 1 0 0 f f t f i 2 16 "704 703" _null_ _null_ _null_ tintervallenle _null_ _null_ _null_ )); DESCR("length less-than-or-equal"); ! DATA(insert OID = 271 ( tintervallenge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "704 703" _null_ _null_ _null_ tintervallenge _null_ _null_ _null_ )); DESCR("length greater-than-or-equal"); ! DATA(insert OID = 272 ( tintervalstart PGNSP PGUID 12 1 0 0 f f t f i 1 702 "704" _null_ _null_ _null_ tintervalstart _null_ _null_ _null_ )); DESCR("start of interval"); ! DATA(insert OID = 273 ( tintervalend PGNSP PGUID 12 1 0 0 f f t f i 1 702 "704" _null_ _null_ _null_ tintervalend _null_ _null_ _null_ )); DESCR("end of interval"); ! DATA(insert OID = 274 ( timeofday PGNSP PGUID 12 1 0 0 f f t f v 0 25 "" _null_ _null_ _null_ timeofday _null_ _null_ _null_ )); DESCR("current date and time - increments during transactions"); ! DATA(insert OID = 275 ( isfinite PGNSP PGUID 12 1 0 0 f f t f i 1 16 "702" _null_ _null_ _null_ abstime_finite _null_ _null_ _null_ )); DESCR("finite abstime?"); ! DATA(insert OID = 277 ( inter_sl PGNSP PGUID 12 1 0 0 f f t f i 2 16 "601 628" _null_ _null_ _null_ inter_sl _null_ _null_ _null_ )); DESCR("intersect?"); ! DATA(insert OID = 278 ( inter_lb PGNSP PGUID 12 1 0 0 f f t f i 2 16 "628 603" _null_ _null_ _null_ inter_lb _null_ _null_ _null_ )); DESCR("intersect?"); ! DATA(insert OID = 279 ( float48mul PGNSP PGUID 12 1 0 0 f f t f i 2 701 "700 701" _null_ _null_ _null_ float48mul _null_ _null_ _null_ )); DESCR("multiply"); ! DATA(insert OID = 280 ( float48div PGNSP PGUID 12 1 0 0 f f t f i 2 701 "700 701" _null_ _null_ _null_ float48div _null_ _null_ _null_ )); DESCR("divide"); ! DATA(insert OID = 281 ( float48pl PGNSP PGUID 12 1 0 0 f f t f i 2 701 "700 701" _null_ _null_ _null_ float48pl _null_ _null_ _null_ )); DESCR("add"); ! DATA(insert OID = 282 ( float48mi PGNSP PGUID 12 1 0 0 f f t f i 2 701 "700 701" _null_ _null_ _null_ float48mi _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 283 ( float84mul PGNSP PGUID 12 1 0 0 f f t f i 2 701 "701 700" _null_ _null_ _null_ float84mul _null_ _null_ _null_ )); DESCR("multiply"); ! DATA(insert OID = 284 ( float84div PGNSP PGUID 12 1 0 0 f f t f i 2 701 "701 700" _null_ _null_ _null_ float84div _null_ _null_ _null_ )); DESCR("divide"); ! DATA(insert OID = 285 ( float84pl PGNSP PGUID 12 1 0 0 f f t f i 2 701 "701 700" _null_ _null_ _null_ float84pl _null_ _null_ _null_ )); DESCR("add"); ! DATA(insert OID = 286 ( float84mi PGNSP PGUID 12 1 0 0 f f t f i 2 701 "701 700" _null_ _null_ _null_ float84mi _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 287 ( float4eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "700 700" _null_ _null_ _null_ float4eq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 288 ( float4ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "700 700" _null_ _null_ _null_ float4ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 289 ( float4lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "700 700" _null_ _null_ _null_ float4lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 290 ( float4le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "700 700" _null_ _null_ _null_ float4le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 291 ( float4gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "700 700" _null_ _null_ _null_ float4gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 292 ( float4ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "700 700" _null_ _null_ _null_ float4ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 293 ( float8eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "701 701" _null_ _null_ _null_ float8eq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 294 ( float8ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "701 701" _null_ _null_ _null_ float8ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 295 ( float8lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "701 701" _null_ _null_ _null_ float8lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 296 ( float8le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "701 701" _null_ _null_ _null_ float8le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 297 ( float8gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "701 701" _null_ _null_ _null_ float8gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 298 ( float8ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "701 701" _null_ _null_ _null_ float8ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 299 ( float48eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "700 701" _null_ _null_ _null_ float48eq _null_ _null_ _null_ )); DESCR("equal"); /* OIDS 300 - 399 */ ! DATA(insert OID = 300 ( float48ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "700 701" _null_ _null_ _null_ float48ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 301 ( float48lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "700 701" _null_ _null_ _null_ float48lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 302 ( float48le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "700 701" _null_ _null_ _null_ float48le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 303 ( float48gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "700 701" _null_ _null_ _null_ float48gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 304 ( float48ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "700 701" _null_ _null_ _null_ float48ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 305 ( float84eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "701 700" _null_ _null_ _null_ float84eq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 306 ( float84ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "701 700" _null_ _null_ _null_ float84ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 307 ( float84lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "701 700" _null_ _null_ _null_ float84lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 308 ( float84le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "701 700" _null_ _null_ _null_ float84le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 309 ( float84gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "701 700" _null_ _null_ _null_ float84gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 310 ( float84ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "701 700" _null_ _null_ _null_ float84ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 320 ( width_bucket PGNSP PGUID 12 1 0 0 f f t f i 4 23 "701 701 701 23" _null_ _null_ _null_ width_bucket_float8 _null_ _null_ _null_ )); DESCR("bucket number of operand in equidepth histogram"); ! DATA(insert OID = 311 ( float8 PGNSP PGUID 12 1 0 0 f f t f i 1 701 "700" _null_ _null_ _null_ ftod _null_ _null_ _null_ )); DESCR("convert float4 to float8"); ! DATA(insert OID = 312 ( float4 PGNSP PGUID 12 1 0 0 f f t f i 1 700 "701" _null_ _null_ _null_ dtof _null_ _null_ _null_ )); DESCR("convert float8 to float4"); ! DATA(insert OID = 313 ( int4 PGNSP PGUID 12 1 0 0 f f t f i 1 23 "21" _null_ _null_ _null_ i2toi4 _null_ _null_ _null_ )); DESCR("convert int2 to int4"); ! DATA(insert OID = 314 ( int2 PGNSP PGUID 12 1 0 0 f f t f i 1 21 "23" _null_ _null_ _null_ i4toi2 _null_ _null_ _null_ )); DESCR("convert int4 to int2"); ! DATA(insert OID = 315 ( int2vectoreq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "22 22" _null_ _null_ _null_ int2vectoreq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 316 ( float8 PGNSP PGUID 12 1 0 0 f f t f i 1 701 "23" _null_ _null_ _null_ i4tod _null_ _null_ _null_ )); DESCR("convert int4 to float8"); ! DATA(insert OID = 317 ( int4 PGNSP PGUID 12 1 0 0 f f t f i 1 23 "701" _null_ _null_ _null_ dtoi4 _null_ _null_ _null_ )); DESCR("convert float8 to int4"); ! DATA(insert OID = 318 ( float4 PGNSP PGUID 12 1 0 0 f f t f i 1 700 "23" _null_ _null_ _null_ i4tof _null_ _null_ _null_ )); DESCR("convert int4 to float4"); ! DATA(insert OID = 319 ( int4 PGNSP PGUID 12 1 0 0 f f t f i 1 23 "700" _null_ _null_ _null_ ftoi4 _null_ _null_ _null_ )); DESCR("convert float4 to int4"); ! DATA(insert OID = 330 ( btgettuple PGNSP PGUID 12 1 0 0 f f t f v 2 16 "2281 2281" _null_ _null_ _null_ btgettuple _null_ _null_ _null_ )); DESCR("btree(internal)"); ! DATA(insert OID = 636 ( btgetbitmap PGNSP PGUID 12 1 0 0 f f t f v 2 20 "2281 2281" _null_ _null_ _null_ btgetbitmap _null_ _null_ _null_ )); DESCR("btree(internal)"); ! DATA(insert OID = 331 ( btinsert PGNSP PGUID 12 1 0 0 f f t f v 6 16 "2281 2281 2281 2281 2281 2281" _null_ _null_ _null_ btinsert _null_ _null_ _null_ )); DESCR("btree(internal)"); ! DATA(insert OID = 333 ( btbeginscan PGNSP PGUID 12 1 0 0 f f t f v 3 2281 "2281 2281 2281" _null_ _null_ _null_ btbeginscan _null_ _null_ _null_ )); DESCR("btree(internal)"); ! DATA(insert OID = 334 ( btrescan PGNSP PGUID 12 1 0 0 f f t f v 2 2278 "2281 2281" _null_ _null_ _null_ btrescan _null_ _null_ _null_ )); DESCR("btree(internal)"); ! DATA(insert OID = 335 ( btendscan PGNSP PGUID 12 1 0 0 f f t f v 1 2278 "2281" _null_ _null_ _null_ btendscan _null_ _null_ _null_ )); DESCR("btree(internal)"); ! DATA(insert OID = 336 ( btmarkpos PGNSP PGUID 12 1 0 0 f f t f v 1 2278 "2281" _null_ _null_ _null_ btmarkpos _null_ _null_ _null_ )); DESCR("btree(internal)"); ! DATA(insert OID = 337 ( btrestrpos PGNSP PGUID 12 1 0 0 f f t f v 1 2278 "2281" _null_ _null_ _null_ btrestrpos _null_ _null_ _null_ )); DESCR("btree(internal)"); ! DATA(insert OID = 338 ( btbuild PGNSP PGUID 12 1 0 0 f f t f v 3 2281 "2281 2281 2281" _null_ _null_ _null_ btbuild _null_ _null_ _null_ )); DESCR("btree(internal)"); ! DATA(insert OID = 332 ( btbulkdelete PGNSP PGUID 12 1 0 0 f f t f v 4 2281 "2281 2281 2281 2281" _null_ _null_ _null_ btbulkdelete _null_ _null_ _null_ )); DESCR("btree(internal)"); ! DATA(insert OID = 972 ( btvacuumcleanup PGNSP PGUID 12 1 0 0 f f t f v 2 2281 "2281 2281" _null_ _null_ _null_ btvacuumcleanup _null_ _null_ _null_ )); DESCR("btree(internal)"); ! DATA(insert OID = 1268 ( btcostestimate PGNSP PGUID 12 1 0 0 f f t f v 8 2278 "2281 2281 2281 2281 2281 2281 2281 2281" _null_ _null_ _null_ btcostestimate _null_ _null_ _null_ )); DESCR("btree(internal)"); ! DATA(insert OID = 2785 ( btoptions PGNSP PGUID 12 1 0 0 f f t f s 2 17 "1009 16" _null_ _null_ _null_ btoptions _null_ _null_ _null_ )); DESCR("btree(internal)"); ! DATA(insert OID = 339 ( poly_same PGNSP PGUID 12 1 0 0 f f t f i 2 16 "604 604" _null_ _null_ _null_ poly_same _null_ _null_ _null_ )); DESCR("same as?"); ! DATA(insert OID = 340 ( poly_contain PGNSP PGUID 12 1 0 0 f f t f i 2 16 "604 604" _null_ _null_ _null_ poly_contain _null_ _null_ _null_ )); DESCR("contains?"); ! DATA(insert OID = 341 ( poly_left PGNSP PGUID 12 1 0 0 f f t f i 2 16 "604 604" _null_ _null_ _null_ poly_left _null_ _null_ _null_ )); DESCR("is left of"); ! DATA(insert OID = 342 ( poly_overleft PGNSP PGUID 12 1 0 0 f f t f i 2 16 "604 604" _null_ _null_ _null_ poly_overleft _null_ _null_ _null_ )); DESCR("overlaps or is left of"); ! DATA(insert OID = 343 ( poly_overright PGNSP PGUID 12 1 0 0 f f t f i 2 16 "604 604" _null_ _null_ _null_ poly_overright _null_ _null_ _null_ )); DESCR("overlaps or is right of"); ! DATA(insert OID = 344 ( poly_right PGNSP PGUID 12 1 0 0 f f t f i 2 16 "604 604" _null_ _null_ _null_ poly_right _null_ _null_ _null_ )); DESCR("is right of"); ! DATA(insert OID = 345 ( poly_contained PGNSP PGUID 12 1 0 0 f f t f i 2 16 "604 604" _null_ _null_ _null_ poly_contained _null_ _null_ _null_ )); DESCR("is contained by?"); ! DATA(insert OID = 346 ( poly_overlap PGNSP PGUID 12 1 0 0 f f t f i 2 16 "604 604" _null_ _null_ _null_ poly_overlap _null_ _null_ _null_ )); DESCR("overlaps"); ! DATA(insert OID = 347 ( poly_in PGNSP PGUID 12 1 0 0 f f t f i 1 604 "2275" _null_ _null_ _null_ poly_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 348 ( poly_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "604" _null_ _null_ _null_ poly_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 350 ( btint2cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "21 21" _null_ _null_ _null_ btint2cmp _null_ _null_ _null_ )); DESCR("btree less-equal-greater"); ! DATA(insert OID = 351 ( btint4cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "23 23" _null_ _null_ _null_ btint4cmp _null_ _null_ _null_ )); DESCR("btree less-equal-greater"); ! DATA(insert OID = 842 ( btint8cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "20 20" _null_ _null_ _null_ btint8cmp _null_ _null_ _null_ )); DESCR("btree less-equal-greater"); ! DATA(insert OID = 354 ( btfloat4cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "700 700" _null_ _null_ _null_ btfloat4cmp _null_ _null_ _null_ )); DESCR("btree less-equal-greater"); ! DATA(insert OID = 355 ( btfloat8cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "701 701" _null_ _null_ _null_ btfloat8cmp _null_ _null_ _null_ )); DESCR("btree less-equal-greater"); ! DATA(insert OID = 356 ( btoidcmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "26 26" _null_ _null_ _null_ btoidcmp _null_ _null_ _null_ )); DESCR("btree less-equal-greater"); ! DATA(insert OID = 404 ( btoidvectorcmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "30 30" _null_ _null_ _null_ btoidvectorcmp _null_ _null_ _null_ )); DESCR("btree less-equal-greater"); ! DATA(insert OID = 357 ( btabstimecmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "702 702" _null_ _null_ _null_ btabstimecmp _null_ _null_ _null_ )); DESCR("btree less-equal-greater"); ! DATA(insert OID = 358 ( btcharcmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "18 18" _null_ _null_ _null_ btcharcmp _null_ _null_ _null_ )); DESCR("btree less-equal-greater"); ! DATA(insert OID = 359 ( btnamecmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "19 19" _null_ _null_ _null_ btnamecmp _null_ _null_ _null_ )); DESCR("btree less-equal-greater"); ! DATA(insert OID = 360 ( bttextcmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "25 25" _null_ _null_ _null_ bttextcmp _null_ _null_ _null_ )); DESCR("btree less-equal-greater"); ! DATA(insert OID = 377 ( cash_cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "790 790" _null_ _null_ _null_ cash_cmp _null_ _null_ _null_ )); DESCR("btree less-equal-greater"); ! DATA(insert OID = 380 ( btreltimecmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "703 703" _null_ _null_ _null_ btreltimecmp _null_ _null_ _null_ )); DESCR("btree less-equal-greater"); ! DATA(insert OID = 381 ( bttintervalcmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "704 704" _null_ _null_ _null_ bttintervalcmp _null_ _null_ _null_ )); DESCR("btree less-equal-greater"); ! DATA(insert OID = 382 ( btarraycmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "2277 2277" _null_ _null_ _null_ btarraycmp _null_ _null_ _null_ )); DESCR("btree less-equal-greater"); ! DATA(insert OID = 361 ( lseg_distance PGNSP PGUID 12 1 0 0 f f t f i 2 701 "601 601" _null_ _null_ _null_ lseg_distance _null_ _null_ _null_ )); DESCR("distance between"); ! DATA(insert OID = 362 ( lseg_interpt PGNSP PGUID 12 1 0 0 f f t f i 2 600 "601 601" _null_ _null_ _null_ lseg_interpt _null_ _null_ _null_ )); DESCR("intersection point"); ! DATA(insert OID = 363 ( dist_ps PGNSP PGUID 12 1 0 0 f f t f i 2 701 "600 601" _null_ _null_ _null_ dist_ps _null_ _null_ _null_ )); DESCR("distance between"); ! DATA(insert OID = 364 ( dist_pb PGNSP PGUID 12 1 0 0 f f t f i 2 701 "600 603" _null_ _null_ _null_ dist_pb _null_ _null_ _null_ )); DESCR("distance between point and box"); ! DATA(insert OID = 365 ( dist_sb PGNSP PGUID 12 1 0 0 f f t f i 2 701 "601 603" _null_ _null_ _null_ dist_sb _null_ _null_ _null_ )); DESCR("distance between segment and box"); ! DATA(insert OID = 366 ( close_ps PGNSP PGUID 12 1 0 0 f f t f i 2 600 "600 601" _null_ _null_ _null_ close_ps _null_ _null_ _null_ )); DESCR("closest point on line segment"); ! DATA(insert OID = 367 ( close_pb PGNSP PGUID 12 1 0 0 f f t f i 2 600 "600 603" _null_ _null_ _null_ close_pb _null_ _null_ _null_ )); DESCR("closest point on box"); ! DATA(insert OID = 368 ( close_sb PGNSP PGUID 12 1 0 0 f f t f i 2 600 "601 603" _null_ _null_ _null_ close_sb _null_ _null_ _null_ )); DESCR("closest point to line segment on box"); ! DATA(insert OID = 369 ( on_ps PGNSP PGUID 12 1 0 0 f f t f i 2 16 "600 601" _null_ _null_ _null_ on_ps _null_ _null_ _null_ )); DESCR("point contained in segment?"); ! DATA(insert OID = 370 ( path_distance PGNSP PGUID 12 1 0 0 f f t f i 2 701 "602 602" _null_ _null_ _null_ path_distance _null_ _null_ _null_ )); DESCR("distance between paths"); ! DATA(insert OID = 371 ( dist_ppath PGNSP PGUID 12 1 0 0 f f t f i 2 701 "600 602" _null_ _null_ _null_ dist_ppath _null_ _null_ _null_ )); DESCR("distance between point and path"); ! DATA(insert OID = 372 ( on_sb PGNSP PGUID 12 1 0 0 f f t f i 2 16 "601 603" _null_ _null_ _null_ on_sb _null_ _null_ _null_ )); DESCR("lseg contained in box?"); ! DATA(insert OID = 373 ( inter_sb PGNSP PGUID 12 1 0 0 f f t f i 2 16 "601 603" _null_ _null_ _null_ inter_sb _null_ _null_ _null_ )); DESCR("intersect?"); /* OIDS 400 - 499 */ ! DATA(insert OID = 401 ( text PGNSP PGUID 12 1 0 0 f f t f i 1 25 "1042" _null_ _null_ _null_ rtrim1 _null_ _null_ _null_ )); DESCR("convert char(n) to text"); ! DATA(insert OID = 406 ( text PGNSP PGUID 12 1 0 0 f f t f i 1 25 "19" _null_ _null_ _null_ name_text _null_ _null_ _null_ )); DESCR("convert name to text"); ! DATA(insert OID = 407 ( name PGNSP PGUID 12 1 0 0 f f t f i 1 19 "25" _null_ _null_ _null_ text_name _null_ _null_ _null_ )); DESCR("convert text to name"); ! DATA(insert OID = 408 ( bpchar PGNSP PGUID 12 1 0 0 f f t f i 1 1042 "19" _null_ _null_ _null_ name_bpchar _null_ _null_ _null_ )); DESCR("convert name to char(n)"); ! DATA(insert OID = 409 ( name PGNSP PGUID 12 1 0 0 f f t f i 1 19 "1042" _null_ _null_ _null_ bpchar_name _null_ _null_ _null_ )); DESCR("convert char(n) to name"); ! DATA(insert OID = 440 ( hashgettuple PGNSP PGUID 12 1 0 0 f f t f v 2 16 "2281 2281" _null_ _null_ _null_ hashgettuple _null_ _null_ _null_ )); DESCR("hash(internal)"); ! DATA(insert OID = 637 ( hashgetbitmap PGNSP PGUID 12 1 0 0 f f t f v 2 20 "2281 2281" _null_ _null_ _null_ hashgetbitmap _null_ _null_ _null_ )); DESCR("hash(internal)"); ! DATA(insert OID = 441 ( hashinsert PGNSP PGUID 12 1 0 0 f f t f v 6 16 "2281 2281 2281 2281 2281 2281" _null_ _null_ _null_ hashinsert _null_ _null_ _null_ )); DESCR("hash(internal)"); ! DATA(insert OID = 443 ( hashbeginscan PGNSP PGUID 12 1 0 0 f f t f v 3 2281 "2281 2281 2281" _null_ _null_ _null_ hashbeginscan _null_ _null_ _null_ )); DESCR("hash(internal)"); ! DATA(insert OID = 444 ( hashrescan PGNSP PGUID 12 1 0 0 f f t f v 2 2278 "2281 2281" _null_ _null_ _null_ hashrescan _null_ _null_ _null_ )); DESCR("hash(internal)"); ! DATA(insert OID = 445 ( hashendscan PGNSP PGUID 12 1 0 0 f f t f v 1 2278 "2281" _null_ _null_ _null_ hashendscan _null_ _null_ _null_ )); DESCR("hash(internal)"); ! DATA(insert OID = 446 ( hashmarkpos PGNSP PGUID 12 1 0 0 f f t f v 1 2278 "2281" _null_ _null_ _null_ hashmarkpos _null_ _null_ _null_ )); DESCR("hash(internal)"); ! DATA(insert OID = 447 ( hashrestrpos PGNSP PGUID 12 1 0 0 f f t f v 1 2278 "2281" _null_ _null_ _null_ hashrestrpos _null_ _null_ _null_ )); DESCR("hash(internal)"); ! DATA(insert OID = 448 ( hashbuild PGNSP PGUID 12 1 0 0 f f t f v 3 2281 "2281 2281 2281" _null_ _null_ _null_ hashbuild _null_ _null_ _null_ )); DESCR("hash(internal)"); ! DATA(insert OID = 442 ( hashbulkdelete PGNSP PGUID 12 1 0 0 f f t f v 4 2281 "2281 2281 2281 2281" _null_ _null_ _null_ hashbulkdelete _null_ _null_ _null_ )); DESCR("hash(internal)"); ! DATA(insert OID = 425 ( hashvacuumcleanup PGNSP PGUID 12 1 0 0 f f t f v 2 2281 "2281 2281" _null_ _null_ _null_ hashvacuumcleanup _null_ _null_ _null_ )); DESCR("hash(internal)"); ! DATA(insert OID = 438 ( hashcostestimate PGNSP PGUID 12 1 0 0 f f t f v 8 2278 "2281 2281 2281 2281 2281 2281 2281 2281" _null_ _null_ _null_ hashcostestimate _null_ _null_ _null_ )); DESCR("hash(internal)"); ! DATA(insert OID = 2786 ( hashoptions PGNSP PGUID 12 1 0 0 f f t f s 2 17 "1009 16" _null_ _null_ _null_ hashoptions _null_ _null_ _null_ )); DESCR("hash(internal)"); ! DATA(insert OID = 449 ( hashint2 PGNSP PGUID 12 1 0 0 f f t f i 1 23 "21" _null_ _null_ _null_ hashint2 _null_ _null_ _null_ )); DESCR("hash"); ! DATA(insert OID = 450 ( hashint4 PGNSP PGUID 12 1 0 0 f f t f i 1 23 "23" _null_ _null_ _null_ hashint4 _null_ _null_ _null_ )); DESCR("hash"); ! DATA(insert OID = 949 ( hashint8 PGNSP PGUID 12 1 0 0 f f t f i 1 23 "20" _null_ _null_ _null_ hashint8 _null_ _null_ _null_ )); DESCR("hash"); ! DATA(insert OID = 451 ( hashfloat4 PGNSP PGUID 12 1 0 0 f f t f i 1 23 "700" _null_ _null_ _null_ hashfloat4 _null_ _null_ _null_ )); DESCR("hash"); ! DATA(insert OID = 452 ( hashfloat8 PGNSP PGUID 12 1 0 0 f f t f i 1 23 "701" _null_ _null_ _null_ hashfloat8 _null_ _null_ _null_ )); DESCR("hash"); ! DATA(insert OID = 453 ( hashoid PGNSP PGUID 12 1 0 0 f f t f i 1 23 "26" _null_ _null_ _null_ hashoid _null_ _null_ _null_ )); DESCR("hash"); ! DATA(insert OID = 454 ( hashchar PGNSP PGUID 12 1 0 0 f f t f i 1 23 "18" _null_ _null_ _null_ hashchar _null_ _null_ _null_ )); DESCR("hash"); ! DATA(insert OID = 455 ( hashname PGNSP PGUID 12 1 0 0 f f t f i 1 23 "19" _null_ _null_ _null_ hashname _null_ _null_ _null_ )); DESCR("hash"); ! DATA(insert OID = 400 ( hashtext PGNSP PGUID 12 1 0 0 f f t f i 1 23 "25" _null_ _null_ _null_ hashtext _null_ _null_ _null_ )); DESCR("hash"); ! DATA(insert OID = 456 ( hashvarlena PGNSP PGUID 12 1 0 0 f f t f i 1 23 "2281" _null_ _null_ _null_ hashvarlena _null_ _null_ _null_ )); DESCR("hash any varlena type"); ! DATA(insert OID = 457 ( hashoidvector PGNSP PGUID 12 1 0 0 f f t f i 1 23 "30" _null_ _null_ _null_ hashoidvector _null_ _null_ _null_ )); DESCR("hash"); ! DATA(insert OID = 329 ( hash_aclitem PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1033" _null_ _null_ _null_ hash_aclitem _null_ _null_ _null_ )); DESCR("hash"); ! DATA(insert OID = 398 ( hashint2vector PGNSP PGUID 12 1 0 0 f f t f i 1 23 "22" _null_ _null_ _null_ hashint2vector _null_ _null_ _null_ )); DESCR("hash"); ! DATA(insert OID = 399 ( hashmacaddr PGNSP PGUID 12 1 0 0 f f t f i 1 23 "829" _null_ _null_ _null_ hashmacaddr _null_ _null_ _null_ )); DESCR("hash"); ! DATA(insert OID = 422 ( hashinet PGNSP PGUID 12 1 0 0 f f t f i 1 23 "869" _null_ _null_ _null_ hashinet _null_ _null_ _null_ )); DESCR("hash"); ! DATA(insert OID = 432 ( hash_numeric PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1700" _null_ _null_ _null_ hash_numeric _null_ _null_ _null_ )); DESCR("hash"); ! DATA(insert OID = 458 ( text_larger PGNSP PGUID 12 1 0 0 f f t f i 2 25 "25 25" _null_ _null_ _null_ text_larger _null_ _null_ _null_ )); DESCR("larger of two"); ! DATA(insert OID = 459 ( text_smaller PGNSP PGUID 12 1 0 0 f f t f i 2 25 "25 25" _null_ _null_ _null_ text_smaller _null_ _null_ _null_ )); DESCR("smaller of two"); ! DATA(insert OID = 460 ( int8in PGNSP PGUID 12 1 0 0 f f t f i 1 20 "2275" _null_ _null_ _null_ int8in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 461 ( int8out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "20" _null_ _null_ _null_ int8out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 462 ( int8um PGNSP PGUID 12 1 0 0 f f t f i 1 20 "20" _null_ _null_ _null_ int8um _null_ _null_ _null_ )); DESCR("negate"); ! DATA(insert OID = 463 ( int8pl PGNSP PGUID 12 1 0 0 f f t f i 2 20 "20 20" _null_ _null_ _null_ int8pl _null_ _null_ _null_ )); DESCR("add"); ! DATA(insert OID = 464 ( int8mi PGNSP PGUID 12 1 0 0 f f t f i 2 20 "20 20" _null_ _null_ _null_ int8mi _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 465 ( int8mul PGNSP PGUID 12 1 0 0 f f t f i 2 20 "20 20" _null_ _null_ _null_ int8mul _null_ _null_ _null_ )); DESCR("multiply"); ! DATA(insert OID = 466 ( int8div PGNSP PGUID 12 1 0 0 f f t f i 2 20 "20 20" _null_ _null_ _null_ int8div _null_ _null_ _null_ )); DESCR("divide"); ! DATA(insert OID = 467 ( int8eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "20 20" _null_ _null_ _null_ int8eq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 468 ( int8ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "20 20" _null_ _null_ _null_ int8ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 469 ( int8lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "20 20" _null_ _null_ _null_ int8lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 470 ( int8gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "20 20" _null_ _null_ _null_ int8gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 471 ( int8le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "20 20" _null_ _null_ _null_ int8le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 472 ( int8ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "20 20" _null_ _null_ _null_ int8ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 474 ( int84eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "20 23" _null_ _null_ _null_ int84eq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 475 ( int84ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "20 23" _null_ _null_ _null_ int84ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 476 ( int84lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "20 23" _null_ _null_ _null_ int84lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 477 ( int84gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "20 23" _null_ _null_ _null_ int84gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 478 ( int84le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "20 23" _null_ _null_ _null_ int84le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 479 ( int84ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "20 23" _null_ _null_ _null_ int84ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 480 ( int4 PGNSP PGUID 12 1 0 0 f f t f i 1 23 "20" _null_ _null_ _null_ int84 _null_ _null_ _null_ )); DESCR("convert int8 to int4"); ! DATA(insert OID = 481 ( int8 PGNSP PGUID 12 1 0 0 f f t f i 1 20 "23" _null_ _null_ _null_ int48 _null_ _null_ _null_ )); DESCR("convert int4 to int8"); ! DATA(insert OID = 482 ( float8 PGNSP PGUID 12 1 0 0 f f t f i 1 701 "20" _null_ _null_ _null_ i8tod _null_ _null_ _null_ )); DESCR("convert int8 to float8"); ! DATA(insert OID = 483 ( int8 PGNSP PGUID 12 1 0 0 f f t f i 1 20 "701" _null_ _null_ _null_ dtoi8 _null_ _null_ _null_ )); DESCR("convert float8 to int8"); /* OIDS 500 - 599 */ /* OIDS 600 - 699 */ ! DATA(insert OID = 652 ( float4 PGNSP PGUID 12 1 0 0 f f t f i 1 700 "20" _null_ _null_ _null_ i8tof _null_ _null_ _null_ )); DESCR("convert int8 to float4"); ! DATA(insert OID = 653 ( int8 PGNSP PGUID 12 1 0 0 f f t f i 1 20 "700" _null_ _null_ _null_ ftoi8 _null_ _null_ _null_ )); DESCR("convert float4 to int8"); ! DATA(insert OID = 714 ( int2 PGNSP PGUID 12 1 0 0 f f t f i 1 21 "20" _null_ _null_ _null_ int82 _null_ _null_ _null_ )); DESCR("convert int8 to int2"); ! DATA(insert OID = 754 ( int8 PGNSP PGUID 12 1 0 0 f f t f i 1 20 "21" _null_ _null_ _null_ int28 _null_ _null_ _null_ )); DESCR("convert int2 to int8"); ! DATA(insert OID = 655 ( namelt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "19 19" _null_ _null_ _null_ namelt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 656 ( namele PGNSP PGUID 12 1 0 0 f f t f i 2 16 "19 19" _null_ _null_ _null_ namele _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 657 ( namegt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "19 19" _null_ _null_ _null_ namegt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 658 ( namege PGNSP PGUID 12 1 0 0 f f t f i 2 16 "19 19" _null_ _null_ _null_ namege _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 659 ( namene PGNSP PGUID 12 1 0 0 f f t f i 2 16 "19 19" _null_ _null_ _null_ namene _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 668 ( bpchar PGNSP PGUID 12 1 0 0 f f t f i 3 1042 "1042 23 16" _null_ _null_ _null_ bpchar _null_ _null_ _null_ )); DESCR("adjust char() to typmod length"); ! DATA(insert OID = 669 ( varchar PGNSP PGUID 12 1 0 0 f f t f i 3 1043 "1043 23 16" _null_ _null_ _null_ varchar _null_ _null_ _null_ )); DESCR("adjust varchar() to typmod length"); ! DATA(insert OID = 676 ( mktinterval PGNSP PGUID 12 1 0 0 f f t f i 2 704 "702 702" _null_ _null_ _null_ mktinterval _null_ _null_ _null_ )); DESCR("convert to tinterval"); ! DATA(insert OID = 619 ( oidvectorne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "30 30" _null_ _null_ _null_ oidvectorne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 677 ( oidvectorlt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "30 30" _null_ _null_ _null_ oidvectorlt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 678 ( oidvectorle PGNSP PGUID 12 1 0 0 f f t f i 2 16 "30 30" _null_ _null_ _null_ oidvectorle _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 679 ( oidvectoreq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "30 30" _null_ _null_ _null_ oidvectoreq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 680 ( oidvectorge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "30 30" _null_ _null_ _null_ oidvectorge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 681 ( oidvectorgt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "30 30" _null_ _null_ _null_ oidvectorgt _null_ _null_ _null_ )); DESCR("greater-than"); /* OIDS 700 - 799 */ ! DATA(insert OID = 710 ( getpgusername PGNSP PGUID 12 1 0 0 f f t f s 0 19 "" _null_ _null_ _null_ current_user _null_ _null_ _null_ )); DESCR("deprecated -- use current_user"); ! DATA(insert OID = 716 ( oidlt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "26 26" _null_ _null_ _null_ oidlt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 717 ( oidle PGNSP PGUID 12 1 0 0 f f t f i 2 16 "26 26" _null_ _null_ _null_ oidle _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 720 ( octet_length PGNSP PGUID 12 1 0 0 f f t f i 1 23 "17" _null_ _null_ _null_ byteaoctetlen _null_ _null_ _null_ )); DESCR("octet length"); ! DATA(insert OID = 721 ( get_byte PGNSP PGUID 12 1 0 0 f f t f i 2 23 "17 23" _null_ _null_ _null_ byteaGetByte _null_ _null_ _null_ )); DESCR("get byte"); ! DATA(insert OID = 722 ( set_byte PGNSP PGUID 12 1 0 0 f f t f i 3 17 "17 23 23" _null_ _null_ _null_ byteaSetByte _null_ _null_ _null_ )); DESCR("set byte"); ! DATA(insert OID = 723 ( get_bit PGNSP PGUID 12 1 0 0 f f t f i 2 23 "17 23" _null_ _null_ _null_ byteaGetBit _null_ _null_ _null_ )); DESCR("get bit"); ! DATA(insert OID = 724 ( set_bit PGNSP PGUID 12 1 0 0 f f t f i 3 17 "17 23 23" _null_ _null_ _null_ byteaSetBit _null_ _null_ _null_ )); DESCR("set bit"); ! DATA(insert OID = 725 ( dist_pl PGNSP PGUID 12 1 0 0 f f t f i 2 701 "600 628" _null_ _null_ _null_ dist_pl _null_ _null_ _null_ )); DESCR("distance between point and line"); ! DATA(insert OID = 726 ( dist_lb PGNSP PGUID 12 1 0 0 f f t f i 2 701 "628 603" _null_ _null_ _null_ dist_lb _null_ _null_ _null_ )); DESCR("distance between line and box"); ! DATA(insert OID = 727 ( dist_sl PGNSP PGUID 12 1 0 0 f f t f i 2 701 "601 628" _null_ _null_ _null_ dist_sl _null_ _null_ _null_ )); DESCR("distance between lseg and line"); ! DATA(insert OID = 728 ( dist_cpoly PGNSP PGUID 12 1 0 0 f f t f i 2 701 "718 604" _null_ _null_ _null_ dist_cpoly _null_ _null_ _null_ )); DESCR("distance between"); ! DATA(insert OID = 729 ( poly_distance PGNSP PGUID 12 1 0 0 f f t f i 2 701 "604 604" _null_ _null_ _null_ poly_distance _null_ _null_ _null_ )); DESCR("distance between"); ! DATA(insert OID = 740 ( text_lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "25 25" _null_ _null_ _null_ text_lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 741 ( text_le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "25 25" _null_ _null_ _null_ text_le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 742 ( text_gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "25 25" _null_ _null_ _null_ text_gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 743 ( text_ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "25 25" _null_ _null_ _null_ text_ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 745 ( current_user PGNSP PGUID 12 1 0 0 f f t f s 0 19 "" _null_ _null_ _null_ current_user _null_ _null_ _null_ )); DESCR("current user name"); ! DATA(insert OID = 746 ( session_user PGNSP PGUID 12 1 0 0 f f t f s 0 19 "" _null_ _null_ _null_ session_user _null_ _null_ _null_ )); DESCR("session user name"); ! DATA(insert OID = 744 ( array_eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "2277 2277" _null_ _null_ _null_ array_eq _null_ _null_ _null_ )); DESCR("array equal"); ! DATA(insert OID = 390 ( array_ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "2277 2277" _null_ _null_ _null_ array_ne _null_ _null_ _null_ )); DESCR("array not equal"); ! DATA(insert OID = 391 ( array_lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "2277 2277" _null_ _null_ _null_ array_lt _null_ _null_ _null_ )); DESCR("array less than"); ! DATA(insert OID = 392 ( array_gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "2277 2277" _null_ _null_ _null_ array_gt _null_ _null_ _null_ )); DESCR("array greater than"); ! DATA(insert OID = 393 ( array_le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "2277 2277" _null_ _null_ _null_ array_le _null_ _null_ _null_ )); DESCR("array less than or equal"); ! DATA(insert OID = 396 ( array_ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "2277 2277" _null_ _null_ _null_ array_ge _null_ _null_ _null_ )); DESCR("array greater than or equal"); ! DATA(insert OID = 747 ( array_dims PGNSP PGUID 12 1 0 0 f f t f i 1 25 "2277" _null_ _null_ _null_ array_dims _null_ _null_ _null_ )); DESCR("array dimensions"); ! DATA(insert OID = 750 ( array_in PGNSP PGUID 12 1 0 0 f f t f s 3 2277 "2275 26 23" _null_ _null_ _null_ array_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 751 ( array_out PGNSP PGUID 12 1 0 0 f f t f s 1 2275 "2277" _null_ _null_ _null_ array_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2091 ( array_lower PGNSP PGUID 12 1 0 0 f f t f i 2 23 "2277 23" _null_ _null_ _null_ array_lower _null_ _null_ _null_ )); DESCR("array lower dimension"); ! DATA(insert OID = 2092 ( array_upper PGNSP PGUID 12 1 0 0 f f t f i 2 23 "2277 23" _null_ _null_ _null_ array_upper _null_ _null_ _null_ )); DESCR("array upper dimension"); ! DATA(insert OID = 378 ( array_append PGNSP PGUID 12 1 0 0 f f f f i 2 2277 "2277 2283" _null_ _null_ _null_ array_push _null_ _null_ _null_ )); DESCR("append element onto end of array"); ! DATA(insert OID = 379 ( array_prepend PGNSP PGUID 12 1 0 0 f f f f i 2 2277 "2283 2277" _null_ _null_ _null_ array_push _null_ _null_ _null_ )); DESCR("prepend element onto front of array"); ! DATA(insert OID = 383 ( array_cat PGNSP PGUID 12 1 0 0 f f f f i 2 2277 "2277 2277" _null_ _null_ _null_ array_cat _null_ _null_ _null_ )); DESCR("concatenate two arrays"); ! DATA(insert OID = 394 ( string_to_array PGNSP PGUID 12 1 0 0 f f t f i 2 1009 "25 25" _null_ _null_ _null_ text_to_array _null_ _null_ _null_ )); DESCR("split delimited text into text[]"); ! DATA(insert OID = 395 ( array_to_string PGNSP PGUID 12 1 0 0 f f t f i 2 25 "2277 25" _null_ _null_ _null_ array_to_text _null_ _null_ _null_ )); DESCR("concatenate array elements, using delimiter, into text"); ! DATA(insert OID = 515 ( array_larger PGNSP PGUID 12 1 0 0 f f t f i 2 2277 "2277 2277" _null_ _null_ _null_ array_larger _null_ _null_ _null_ )); DESCR("larger of two"); ! DATA(insert OID = 516 ( array_smaller PGNSP PGUID 12 1 0 0 f f t f i 2 2277 "2277 2277" _null_ _null_ _null_ array_smaller _null_ _null_ _null_ )); DESCR("smaller of two"); ! DATA(insert OID = 1191 ( generate_subscripts PGNSP PGUID 12 1 1000 0 f f t t i 3 23 "2277 23 16" _null_ _null_ _null_ generate_subscripts _null_ _null_ _null_ )); DESCR("array subscripts generator"); ! DATA(insert OID = 1192 ( generate_subscripts PGNSP PGUID 12 1 1000 0 f f t t i 2 23 "2277 23" _null_ _null_ _null_ generate_subscripts_nodir _null_ _null_ _null_ )); DESCR("array subscripts generator"); ! DATA(insert OID = 1193 ( array_fill PGNSP PGUID 12 1 0 0 f f f f i 2 2277 "2283 1007" _null_ _null_ _null_ array_fill _null_ _null_ _null_ )); DESCR("array constructor with value"); ! DATA(insert OID = 1286 ( array_fill PGNSP PGUID 12 1 0 0 f f f f i 3 2277 "2283 1007 1007" _null_ _null_ _null_ array_fill_with_lower_bounds _null_ _null_ _null_ )); DESCR("array constructor with value"); ! DATA(insert OID = 760 ( smgrin PGNSP PGUID 12 1 0 0 f f t f s 1 210 "2275" _null_ _null_ _null_ smgrin _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 761 ( smgrout PGNSP PGUID 12 1 0 0 f f t f s 1 2275 "210" _null_ _null_ _null_ smgrout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 762 ( smgreq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "210 210" _null_ _null_ _null_ smgreq _null_ _null_ _null_ )); DESCR("storage manager"); ! DATA(insert OID = 763 ( smgrne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "210 210" _null_ _null_ _null_ smgrne _null_ _null_ _null_ )); DESCR("storage manager"); ! DATA(insert OID = 764 ( lo_import PGNSP PGUID 12 1 0 0 f f t f v 1 26 "25" _null_ _null_ _null_ lo_import _null_ _null_ _null_ )); DESCR("large object import"); ! DATA(insert OID = 767 ( lo_import PGNSP PGUID 12 1 0 0 f f t f v 2 26 "25 26" _null_ _null_ _null_ lo_import_with_oid _null_ _null_ _null_ )); DESCR("large object import"); ! DATA(insert OID = 765 ( lo_export PGNSP PGUID 12 1 0 0 f f t f v 2 23 "26 25" _null_ _null_ _null_ lo_export _null_ _null_ _null_ )); DESCR("large object export"); ! DATA(insert OID = 766 ( int4inc PGNSP PGUID 12 1 0 0 f f t f i 1 23 "23" _null_ _null_ _null_ int4inc _null_ _null_ _null_ )); DESCR("increment"); ! DATA(insert OID = 768 ( int4larger PGNSP PGUID 12 1 0 0 f f t f i 2 23 "23 23" _null_ _null_ _null_ int4larger _null_ _null_ _null_ )); DESCR("larger of two"); ! DATA(insert OID = 769 ( int4smaller PGNSP PGUID 12 1 0 0 f f t f i 2 23 "23 23" _null_ _null_ _null_ int4smaller _null_ _null_ _null_ )); DESCR("smaller of two"); ! DATA(insert OID = 770 ( int2larger PGNSP PGUID 12 1 0 0 f f t f i 2 21 "21 21" _null_ _null_ _null_ int2larger _null_ _null_ _null_ )); DESCR("larger of two"); ! DATA(insert OID = 771 ( int2smaller PGNSP PGUID 12 1 0 0 f f t f i 2 21 "21 21" _null_ _null_ _null_ int2smaller _null_ _null_ _null_ )); DESCR("smaller of two"); ! DATA(insert OID = 774 ( gistgettuple PGNSP PGUID 12 1 0 0 f f t f v 2 16 "2281 2281" _null_ _null_ _null_ gistgettuple _null_ _null_ _null_ )); DESCR("gist(internal)"); ! DATA(insert OID = 638 ( gistgetbitmap PGNSP PGUID 12 1 0 0 f f t f v 2 20 "2281 2281" _null_ _null_ _null_ gistgetbitmap _null_ _null_ _null_ )); DESCR("gist(internal)"); ! DATA(insert OID = 775 ( gistinsert PGNSP PGUID 12 1 0 0 f f t f v 6 16 "2281 2281 2281 2281 2281 2281" _null_ _null_ _null_ gistinsert _null_ _null_ _null_ )); DESCR("gist(internal)"); ! DATA(insert OID = 777 ( gistbeginscan PGNSP PGUID 12 1 0 0 f f t f v 3 2281 "2281 2281 2281" _null_ _null_ _null_ gistbeginscan _null_ _null_ _null_ )); DESCR("gist(internal)"); ! DATA(insert OID = 778 ( gistrescan PGNSP PGUID 12 1 0 0 f f t f v 2 2278 "2281 2281" _null_ _null_ _null_ gistrescan _null_ _null_ _null_ )); DESCR("gist(internal)"); ! DATA(insert OID = 779 ( gistendscan PGNSP PGUID 12 1 0 0 f f t f v 1 2278 "2281" _null_ _null_ _null_ gistendscan _null_ _null_ _null_ )); DESCR("gist(internal)"); ! DATA(insert OID = 780 ( gistmarkpos PGNSP PGUID 12 1 0 0 f f t f v 1 2278 "2281" _null_ _null_ _null_ gistmarkpos _null_ _null_ _null_ )); DESCR("gist(internal)"); ! DATA(insert OID = 781 ( gistrestrpos PGNSP PGUID 12 1 0 0 f f t f v 1 2278 "2281" _null_ _null_ _null_ gistrestrpos _null_ _null_ _null_ )); DESCR("gist(internal)"); ! DATA(insert OID = 782 ( gistbuild PGNSP PGUID 12 1 0 0 f f t f v 3 2281 "2281 2281 2281" _null_ _null_ _null_ gistbuild _null_ _null_ _null_ )); DESCR("gist(internal)"); ! DATA(insert OID = 776 ( gistbulkdelete PGNSP PGUID 12 1 0 0 f f t f v 4 2281 "2281 2281 2281 2281" _null_ _null_ _null_ gistbulkdelete _null_ _null_ _null_ )); DESCR("gist(internal)"); ! DATA(insert OID = 2561 ( gistvacuumcleanup PGNSP PGUID 12 1 0 0 f f t f v 2 2281 "2281 2281" _null_ _null_ _null_ gistvacuumcleanup _null_ _null_ _null_ )); DESCR("gist(internal)"); ! DATA(insert OID = 772 ( gistcostestimate PGNSP PGUID 12 1 0 0 f f t f v 8 2278 "2281 2281 2281 2281 2281 2281 2281 2281" _null_ _null_ _null_ gistcostestimate _null_ _null_ _null_ )); DESCR("gist(internal)"); ! DATA(insert OID = 2787 ( gistoptions PGNSP PGUID 12 1 0 0 f f t f s 2 17 "1009 16" _null_ _null_ _null_ gistoptions _null_ _null_ _null_ )); DESCR("gist(internal)"); ! DATA(insert OID = 784 ( tintervaleq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "704 704" _null_ _null_ _null_ tintervaleq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 785 ( tintervalne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "704 704" _null_ _null_ _null_ tintervalne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 786 ( tintervallt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "704 704" _null_ _null_ _null_ tintervallt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 787 ( tintervalgt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "704 704" _null_ _null_ _null_ tintervalgt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 788 ( tintervalle PGNSP PGUID 12 1 0 0 f f t f i 2 16 "704 704" _null_ _null_ _null_ tintervalle _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 789 ( tintervalge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "704 704" _null_ _null_ _null_ tintervalge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); /* OIDS 800 - 899 */ ! DATA(insert OID = 846 ( cash_mul_flt4 PGNSP PGUID 12 1 0 0 f f t f i 2 790 "790 700" _null_ _null_ _null_ cash_mul_flt4 _null_ _null_ _null_ )); DESCR("multiply"); ! DATA(insert OID = 847 ( cash_div_flt4 PGNSP PGUID 12 1 0 0 f f t f i 2 790 "790 700" _null_ _null_ _null_ cash_div_flt4 _null_ _null_ _null_ )); DESCR("divide"); ! DATA(insert OID = 848 ( flt4_mul_cash PGNSP PGUID 12 1 0 0 f f t f i 2 790 "700 790" _null_ _null_ _null_ flt4_mul_cash _null_ _null_ _null_ )); DESCR("multiply"); ! DATA(insert OID = 849 ( position PGNSP PGUID 12 1 0 0 f f t f i 2 23 "25 25" _null_ _null_ _null_ textpos _null_ _null_ _null_ )); DESCR("return position of substring"); ! DATA(insert OID = 850 ( textlike PGNSP PGUID 12 1 0 0 f f t f i 2 16 "25 25" _null_ _null_ _null_ textlike _null_ _null_ _null_ )); DESCR("matches LIKE expression"); ! DATA(insert OID = 851 ( textnlike PGNSP PGUID 12 1 0 0 f f t f i 2 16 "25 25" _null_ _null_ _null_ textnlike _null_ _null_ _null_ )); DESCR("does not match LIKE expression"); ! DATA(insert OID = 852 ( int48eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "23 20" _null_ _null_ _null_ int48eq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 853 ( int48ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "23 20" _null_ _null_ _null_ int48ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 854 ( int48lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "23 20" _null_ _null_ _null_ int48lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 855 ( int48gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "23 20" _null_ _null_ _null_ int48gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 856 ( int48le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "23 20" _null_ _null_ _null_ int48le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 857 ( int48ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "23 20" _null_ _null_ _null_ int48ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 858 ( namelike PGNSP PGUID 12 1 0 0 f f t f i 2 16 "19 25" _null_ _null_ _null_ namelike _null_ _null_ _null_ )); DESCR("matches LIKE expression"); ! DATA(insert OID = 859 ( namenlike PGNSP PGUID 12 1 0 0 f f t f i 2 16 "19 25" _null_ _null_ _null_ namenlike _null_ _null_ _null_ )); DESCR("does not match LIKE expression"); ! DATA(insert OID = 860 ( bpchar PGNSP PGUID 12 1 0 0 f f t f i 1 1042 "18" _null_ _null_ _null_ char_bpchar _null_ _null_ _null_ )); DESCR("convert char to char()"); ! DATA(insert OID = 861 ( current_database PGNSP PGUID 12 1 0 0 f f t f s 0 19 "" _null_ _null_ _null_ current_database _null_ _null_ _null_ )); DESCR("returns the current database"); ! DATA(insert OID = 817 ( current_query PGNSP PGUID 12 1 0 0 f f f f v 0 25 "" _null_ _null_ _null_ current_query _null_ _null_ _null_ )); DESCR("returns the currently executing query"); ! DATA(insert OID = 862 ( int4_mul_cash PGNSP PGUID 12 1 0 0 f f t f i 2 790 "23 790" _null_ _null_ _null_ int4_mul_cash _null_ _null_ _null_ )); DESCR("multiply"); ! DATA(insert OID = 863 ( int2_mul_cash PGNSP PGUID 12 1 0 0 f f t f i 2 790 "21 790" _null_ _null_ _null_ int2_mul_cash _null_ _null_ _null_ )); DESCR("multiply"); ! DATA(insert OID = 864 ( cash_mul_int4 PGNSP PGUID 12 1 0 0 f f t f i 2 790 "790 23" _null_ _null_ _null_ cash_mul_int4 _null_ _null_ _null_ )); DESCR("multiply"); ! DATA(insert OID = 865 ( cash_div_int4 PGNSP PGUID 12 1 0 0 f f t f i 2 790 "790 23" _null_ _null_ _null_ cash_div_int4 _null_ _null_ _null_ )); DESCR("divide"); ! DATA(insert OID = 866 ( cash_mul_int2 PGNSP PGUID 12 1 0 0 f f t f i 2 790 "790 21" _null_ _null_ _null_ cash_mul_int2 _null_ _null_ _null_ )); DESCR("multiply"); ! DATA(insert OID = 867 ( cash_div_int2 PGNSP PGUID 12 1 0 0 f f t f i 2 790 "790 21" _null_ _null_ _null_ cash_div_int2 _null_ _null_ _null_ )); DESCR("divide"); ! DATA(insert OID = 886 ( cash_in PGNSP PGUID 12 1 0 0 f f t f i 1 790 "2275" _null_ _null_ _null_ cash_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 887 ( cash_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "790" _null_ _null_ _null_ cash_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 888 ( cash_eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "790 790" _null_ _null_ _null_ cash_eq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 889 ( cash_ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "790 790" _null_ _null_ _null_ cash_ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 890 ( cash_lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "790 790" _null_ _null_ _null_ cash_lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 891 ( cash_le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "790 790" _null_ _null_ _null_ cash_le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 892 ( cash_gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "790 790" _null_ _null_ _null_ cash_gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 893 ( cash_ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "790 790" _null_ _null_ _null_ cash_ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 894 ( cash_pl PGNSP PGUID 12 1 0 0 f f t f i 2 790 "790 790" _null_ _null_ _null_ cash_pl _null_ _null_ _null_ )); DESCR("add"); ! DATA(insert OID = 895 ( cash_mi PGNSP PGUID 12 1 0 0 f f t f i 2 790 "790 790" _null_ _null_ _null_ cash_mi _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 896 ( cash_mul_flt8 PGNSP PGUID 12 1 0 0 f f t f i 2 790 "790 701" _null_ _null_ _null_ cash_mul_flt8 _null_ _null_ _null_ )); DESCR("multiply"); ! DATA(insert OID = 897 ( cash_div_flt8 PGNSP PGUID 12 1 0 0 f f t f i 2 790 "790 701" _null_ _null_ _null_ cash_div_flt8 _null_ _null_ _null_ )); DESCR("divide"); ! DATA(insert OID = 898 ( cashlarger PGNSP PGUID 12 1 0 0 f f t f i 2 790 "790 790" _null_ _null_ _null_ cashlarger _null_ _null_ _null_ )); DESCR("larger of two"); ! DATA(insert OID = 899 ( cashsmaller PGNSP PGUID 12 1 0 0 f f t f i 2 790 "790 790" _null_ _null_ _null_ cashsmaller _null_ _null_ _null_ )); DESCR("smaller of two"); ! DATA(insert OID = 919 ( flt8_mul_cash PGNSP PGUID 12 1 0 0 f f t f i 2 790 "701 790" _null_ _null_ _null_ flt8_mul_cash _null_ _null_ _null_ )); DESCR("multiply"); ! DATA(insert OID = 935 ( cash_words PGNSP PGUID 12 1 0 0 f f t f i 1 25 "790" _null_ _null_ _null_ cash_words _null_ _null_ _null_ )); DESCR("output amount as words"); /* OIDS 900 - 999 */ ! DATA(insert OID = 940 ( mod PGNSP PGUID 12 1 0 0 f f t f i 2 21 "21 21" _null_ _null_ _null_ int2mod _null_ _null_ _null_ )); DESCR("modulus"); ! DATA(insert OID = 941 ( mod PGNSP PGUID 12 1 0 0 f f t f i 2 23 "23 23" _null_ _null_ _null_ int4mod _null_ _null_ _null_ )); DESCR("modulus"); ! DATA(insert OID = 945 ( int8mod PGNSP PGUID 12 1 0 0 f f t f i 2 20 "20 20" _null_ _null_ _null_ int8mod _null_ _null_ _null_ )); DESCR("modulus"); ! DATA(insert OID = 947 ( mod PGNSP PGUID 12 1 0 0 f f t f i 2 20 "20 20" _null_ _null_ _null_ int8mod _null_ _null_ _null_ )); DESCR("modulus"); ! DATA(insert OID = 944 ( char PGNSP PGUID 12 1 0 0 f f t f i 1 18 "25" _null_ _null_ _null_ text_char _null_ _null_ _null_ )); DESCR("convert text to char"); ! DATA(insert OID = 946 ( text PGNSP PGUID 12 1 0 0 f f t f i 1 25 "18" _null_ _null_ _null_ char_text _null_ _null_ _null_ )); DESCR("convert char to text"); ! DATA(insert OID = 952 ( lo_open PGNSP PGUID 12 1 0 0 f f t f v 2 23 "26 23" _null_ _null_ _null_ lo_open _null_ _null_ _null_ )); DESCR("large object open"); ! DATA(insert OID = 953 ( lo_close PGNSP PGUID 12 1 0 0 f f t f v 1 23 "23" _null_ _null_ _null_ lo_close _null_ _null_ _null_ )); DESCR("large object close"); ! DATA(insert OID = 954 ( loread PGNSP PGUID 12 1 0 0 f f t f v 2 17 "23 23" _null_ _null_ _null_ loread _null_ _null_ _null_ )); DESCR("large object read"); ! DATA(insert OID = 955 ( lowrite PGNSP PGUID 12 1 0 0 f f t f v 2 23 "23 17" _null_ _null_ _null_ lowrite _null_ _null_ _null_ )); DESCR("large object write"); ! DATA(insert OID = 956 ( lo_lseek PGNSP PGUID 12 1 0 0 f f t f v 3 23 "23 23 23" _null_ _null_ _null_ lo_lseek _null_ _null_ _null_ )); DESCR("large object seek"); ! DATA(insert OID = 957 ( lo_creat PGNSP PGUID 12 1 0 0 f f t f v 1 26 "23" _null_ _null_ _null_ lo_creat _null_ _null_ _null_ )); DESCR("large object create"); ! DATA(insert OID = 715 ( lo_create PGNSP PGUID 12 1 0 0 f f t f v 1 26 "26" _null_ _null_ _null_ lo_create _null_ _null_ _null_ )); DESCR("large object create"); ! DATA(insert OID = 958 ( lo_tell PGNSP PGUID 12 1 0 0 f f t f v 1 23 "23" _null_ _null_ _null_ lo_tell _null_ _null_ _null_ )); DESCR("large object position"); ! DATA(insert OID = 1004 ( lo_truncate PGNSP PGUID 12 1 0 0 f f t f v 2 23 "23 23" _null_ _null_ _null_ lo_truncate _null_ _null_ _null_ )); DESCR("truncate large object"); ! DATA(insert OID = 959 ( on_pl PGNSP PGUID 12 1 0 0 f f t f i 2 16 "600 628" _null_ _null_ _null_ on_pl _null_ _null_ _null_ )); DESCR("point on line?"); ! DATA(insert OID = 960 ( on_sl PGNSP PGUID 12 1 0 0 f f t f i 2 16 "601 628" _null_ _null_ _null_ on_sl _null_ _null_ _null_ )); DESCR("lseg on line?"); ! DATA(insert OID = 961 ( close_pl PGNSP PGUID 12 1 0 0 f f t f i 2 600 "600 628" _null_ _null_ _null_ close_pl _null_ _null_ _null_ )); DESCR("closest point on line"); ! DATA(insert OID = 962 ( close_sl PGNSP PGUID 12 1 0 0 f f t f i 2 600 "601 628" _null_ _null_ _null_ close_sl _null_ _null_ _null_ )); DESCR("closest point to line segment on line"); ! DATA(insert OID = 963 ( close_lb PGNSP PGUID 12 1 0 0 f f t f i 2 600 "628 603" _null_ _null_ _null_ close_lb _null_ _null_ _null_ )); DESCR("closest point to line on box"); ! DATA(insert OID = 964 ( lo_unlink PGNSP PGUID 12 1 0 0 f f t f v 1 23 "26" _null_ _null_ _null_ lo_unlink _null_ _null_ _null_ )); DESCR("large object unlink(delete)"); ! DATA(insert OID = 973 ( path_inter PGNSP PGUID 12 1 0 0 f f t f i 2 16 "602 602" _null_ _null_ _null_ path_inter _null_ _null_ _null_ )); DESCR("intersect?"); ! DATA(insert OID = 975 ( area PGNSP PGUID 12 1 0 0 f f t f i 1 701 "603" _null_ _null_ _null_ box_area _null_ _null_ _null_ )); DESCR("box area"); ! DATA(insert OID = 976 ( width PGNSP PGUID 12 1 0 0 f f t f i 1 701 "603" _null_ _null_ _null_ box_width _null_ _null_ _null_ )); DESCR("box width"); ! DATA(insert OID = 977 ( height PGNSP PGUID 12 1 0 0 f f t f i 1 701 "603" _null_ _null_ _null_ box_height _null_ _null_ _null_ )); DESCR("box height"); ! DATA(insert OID = 978 ( box_distance PGNSP PGUID 12 1 0 0 f f t f i 2 701 "603 603" _null_ _null_ _null_ box_distance _null_ _null_ _null_ )); DESCR("distance between boxes"); ! DATA(insert OID = 979 ( area PGNSP PGUID 12 1 0 0 f f t f i 1 701 "602" _null_ _null_ _null_ path_area _null_ _null_ _null_ )); DESCR("area of a closed path"); ! DATA(insert OID = 980 ( box_intersect PGNSP PGUID 12 1 0 0 f f t f i 2 603 "603 603" _null_ _null_ _null_ box_intersect _null_ _null_ _null_ )); DESCR("box intersection (another box)"); ! DATA(insert OID = 981 ( diagonal PGNSP PGUID 12 1 0 0 f f t f i 1 601 "603" _null_ _null_ _null_ box_diagonal _null_ _null_ _null_ )); DESCR("box diagonal"); ! DATA(insert OID = 982 ( path_n_lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "602 602" _null_ _null_ _null_ path_n_lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 983 ( path_n_gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "602 602" _null_ _null_ _null_ path_n_gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 984 ( path_n_eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "602 602" _null_ _null_ _null_ path_n_eq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 985 ( path_n_le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "602 602" _null_ _null_ _null_ path_n_le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 986 ( path_n_ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "602 602" _null_ _null_ _null_ path_n_ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 987 ( path_length PGNSP PGUID 12 1 0 0 f f t f i 1 701 "602" _null_ _null_ _null_ path_length _null_ _null_ _null_ )); DESCR("sum of path segment lengths"); ! DATA(insert OID = 988 ( point_ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "600 600" _null_ _null_ _null_ point_ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 989 ( point_vert PGNSP PGUID 12 1 0 0 f f t f i 2 16 "600 600" _null_ _null_ _null_ point_vert _null_ _null_ _null_ )); DESCR("vertically aligned?"); ! DATA(insert OID = 990 ( point_horiz PGNSP PGUID 12 1 0 0 f f t f i 2 16 "600 600" _null_ _null_ _null_ point_horiz _null_ _null_ _null_ )); DESCR("horizontally aligned?"); ! DATA(insert OID = 991 ( point_distance PGNSP PGUID 12 1 0 0 f f t f i 2 701 "600 600" _null_ _null_ _null_ point_distance _null_ _null_ _null_ )); DESCR("distance between"); ! DATA(insert OID = 992 ( slope PGNSP PGUID 12 1 0 0 f f t f i 2 701 "600 600" _null_ _null_ _null_ point_slope _null_ _null_ _null_ )); DESCR("slope between points"); ! DATA(insert OID = 993 ( lseg PGNSP PGUID 12 1 0 0 f f t f i 2 601 "600 600" _null_ _null_ _null_ lseg_construct _null_ _null_ _null_ )); DESCR("convert points to line segment"); ! DATA(insert OID = 994 ( lseg_intersect PGNSP PGUID 12 1 0 0 f f t f i 2 16 "601 601" _null_ _null_ _null_ lseg_intersect _null_ _null_ _null_ )); DESCR("intersect?"); ! DATA(insert OID = 995 ( lseg_parallel PGNSP PGUID 12 1 0 0 f f t f i 2 16 "601 601" _null_ _null_ _null_ lseg_parallel _null_ _null_ _null_ )); DESCR("parallel?"); ! DATA(insert OID = 996 ( lseg_perp PGNSP PGUID 12 1 0 0 f f t f i 2 16 "601 601" _null_ _null_ _null_ lseg_perp _null_ _null_ _null_ )); DESCR("perpendicular?"); ! DATA(insert OID = 997 ( lseg_vertical PGNSP PGUID 12 1 0 0 f f t f i 1 16 "601" _null_ _null_ _null_ lseg_vertical _null_ _null_ _null_ )); DESCR("vertical?"); ! DATA(insert OID = 998 ( lseg_horizontal PGNSP PGUID 12 1 0 0 f f t f i 1 16 "601" _null_ _null_ _null_ lseg_horizontal _null_ _null_ _null_ )); DESCR("horizontal?"); ! DATA(insert OID = 999 ( lseg_eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "601 601" _null_ _null_ _null_ lseg_eq _null_ _null_ _null_ )); DESCR("equal"); /* OIDS 1000 - 1999 */ ! DATA(insert OID = 1026 ( timezone PGNSP PGUID 12 1 0 0 f f t f i 2 1114 "1186 1184" _null_ _null_ _null_ timestamptz_izone _null_ _null_ _null_ )); DESCR("adjust timestamp to new time zone"); ! DATA(insert OID = 1031 ( aclitemin PGNSP PGUID 12 1 0 0 f f t f s 1 1033 "2275" _null_ _null_ _null_ aclitemin _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1032 ( aclitemout PGNSP PGUID 12 1 0 0 f f t f s 1 2275 "1033" _null_ _null_ _null_ aclitemout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1035 ( aclinsert PGNSP PGUID 12 1 0 0 f f t f i 2 1034 "1034 1033" _null_ _null_ _null_ aclinsert _null_ _null_ _null_ )); DESCR("add/update ACL item"); ! DATA(insert OID = 1036 ( aclremove PGNSP PGUID 12 1 0 0 f f t f i 2 1034 "1034 1033" _null_ _null_ _null_ aclremove _null_ _null_ _null_ )); DESCR("remove ACL item"); ! DATA(insert OID = 1037 ( aclcontains PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1034 1033" _null_ _null_ _null_ aclcontains _null_ _null_ _null_ )); DESCR("ACL contains item?"); ! DATA(insert OID = 1062 ( aclitemeq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1033 1033" _null_ _null_ _null_ aclitem_eq _null_ _null_ _null_ )); DESCR("equality operator for ACL items"); ! DATA(insert OID = 1365 ( makeaclitem PGNSP PGUID 12 1 0 0 f f t f i 4 1033 "26 26 25 16" _null_ _null_ _null_ makeaclitem _null_ _null_ _null_ )); DESCR("make ACL item"); ! DATA(insert OID = 1044 ( bpcharin PGNSP PGUID 12 1 0 0 f f t f i 3 1042 "2275 26 23" _null_ _null_ _null_ bpcharin _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1045 ( bpcharout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "1042" _null_ _null_ _null_ bpcharout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2913 ( bpchartypmodin PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1263" _null_ _null_ _null_ bpchartypmodin _null_ _null_ _null_ )); DESCR("I/O typmod"); ! DATA(insert OID = 2914 ( bpchartypmodout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "23" _null_ _null_ _null_ bpchartypmodout _null_ _null_ _null_ )); DESCR("I/O typmod"); ! DATA(insert OID = 1046 ( varcharin PGNSP PGUID 12 1 0 0 f f t f i 3 1043 "2275 26 23" _null_ _null_ _null_ varcharin _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1047 ( varcharout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "1043" _null_ _null_ _null_ varcharout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2915 ( varchartypmodin PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1263" _null_ _null_ _null_ varchartypmodin _null_ _null_ _null_ )); DESCR("I/O typmod"); ! DATA(insert OID = 2916 ( varchartypmodout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "23" _null_ _null_ _null_ varchartypmodout _null_ _null_ _null_ )); DESCR("I/O typmod"); ! DATA(insert OID = 1048 ( bpchareq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1042 1042" _null_ _null_ _null_ bpchareq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 1049 ( bpcharlt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1042 1042" _null_ _null_ _null_ bpcharlt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 1050 ( bpcharle PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1042 1042" _null_ _null_ _null_ bpcharle _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 1051 ( bpchargt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1042 1042" _null_ _null_ _null_ bpchargt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 1052 ( bpcharge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1042 1042" _null_ _null_ _null_ bpcharge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 1053 ( bpcharne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1042 1042" _null_ _null_ _null_ bpcharne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 1063 ( bpchar_larger PGNSP PGUID 12 1 0 0 f f t f i 2 1042 "1042 1042" _null_ _null_ _null_ bpchar_larger _null_ _null_ _null_ )); DESCR("larger of two"); ! DATA(insert OID = 1064 ( bpchar_smaller PGNSP PGUID 12 1 0 0 f f t f i 2 1042 "1042 1042" _null_ _null_ _null_ bpchar_smaller _null_ _null_ _null_ )); DESCR("smaller of two"); ! DATA(insert OID = 1078 ( bpcharcmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "1042 1042" _null_ _null_ _null_ bpcharcmp _null_ _null_ _null_ )); DESCR("less-equal-greater"); ! DATA(insert OID = 1080 ( hashbpchar PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1042" _null_ _null_ _null_ hashbpchar _null_ _null_ _null_ )); DESCR("hash"); ! DATA(insert OID = 1081 ( format_type PGNSP PGUID 12 1 0 0 f f f f s 2 25 "26 23" _null_ _null_ _null_ format_type _null_ _null_ _null_ )); DESCR("format a type oid and atttypmod to canonical SQL"); ! DATA(insert OID = 1084 ( date_in PGNSP PGUID 12 1 0 0 f f t f s 1 1082 "2275" _null_ _null_ _null_ date_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1085 ( date_out PGNSP PGUID 12 1 0 0 f f t f s 1 2275 "1082" _null_ _null_ _null_ date_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1086 ( date_eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1082 1082" _null_ _null_ _null_ date_eq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 1087 ( date_lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1082 1082" _null_ _null_ _null_ date_lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 1088 ( date_le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1082 1082" _null_ _null_ _null_ date_le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 1089 ( date_gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1082 1082" _null_ _null_ _null_ date_gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 1090 ( date_ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1082 1082" _null_ _null_ _null_ date_ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 1091 ( date_ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1082 1082" _null_ _null_ _null_ date_ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 1092 ( date_cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "1082 1082" _null_ _null_ _null_ date_cmp _null_ _null_ _null_ )); DESCR("less-equal-greater"); /* OIDS 1100 - 1199 */ ! DATA(insert OID = 1102 ( time_lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1083 1083" _null_ _null_ _null_ time_lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 1103 ( time_le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1083 1083" _null_ _null_ _null_ time_le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 1104 ( time_gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1083 1083" _null_ _null_ _null_ time_gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 1105 ( time_ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1083 1083" _null_ _null_ _null_ time_ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 1106 ( time_ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1083 1083" _null_ _null_ _null_ time_ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 1107 ( time_cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "1083 1083" _null_ _null_ _null_ time_cmp _null_ _null_ _null_ )); DESCR("less-equal-greater"); ! DATA(insert OID = 1138 ( date_larger PGNSP PGUID 12 1 0 0 f f t f i 2 1082 "1082 1082" _null_ _null_ _null_ date_larger _null_ _null_ _null_ )); DESCR("larger of two"); ! DATA(insert OID = 1139 ( date_smaller PGNSP PGUID 12 1 0 0 f f t f i 2 1082 "1082 1082" _null_ _null_ _null_ date_smaller _null_ _null_ _null_ )); DESCR("smaller of two"); ! DATA(insert OID = 1140 ( date_mi PGNSP PGUID 12 1 0 0 f f t f i 2 23 "1082 1082" _null_ _null_ _null_ date_mi _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 1141 ( date_pli PGNSP PGUID 12 1 0 0 f f t f i 2 1082 "1082 23" _null_ _null_ _null_ date_pli _null_ _null_ _null_ )); DESCR("add"); ! DATA(insert OID = 1142 ( date_mii PGNSP PGUID 12 1 0 0 f f t f i 2 1082 "1082 23" _null_ _null_ _null_ date_mii _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 1143 ( time_in PGNSP PGUID 12 1 0 0 f f t f s 3 1083 "2275 26 23" _null_ _null_ _null_ time_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1144 ( time_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "1083" _null_ _null_ _null_ time_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2909 ( timetypmodin PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1263" _null_ _null_ _null_ timetypmodin _null_ _null_ _null_ )); DESCR("I/O typmod"); ! DATA(insert OID = 2910 ( timetypmodout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "23" _null_ _null_ _null_ timetypmodout _null_ _null_ _null_ )); DESCR("I/O typmod"); ! DATA(insert OID = 1145 ( time_eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1083 1083" _null_ _null_ _null_ time_eq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 1146 ( circle_add_pt PGNSP PGUID 12 1 0 0 f f t f i 2 718 "718 600" _null_ _null_ _null_ circle_add_pt _null_ _null_ _null_ )); DESCR("add"); ! DATA(insert OID = 1147 ( circle_sub_pt PGNSP PGUID 12 1 0 0 f f t f i 2 718 "718 600" _null_ _null_ _null_ circle_sub_pt _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 1148 ( circle_mul_pt PGNSP PGUID 12 1 0 0 f f t f i 2 718 "718 600" _null_ _null_ _null_ circle_mul_pt _null_ _null_ _null_ )); DESCR("multiply"); ! DATA(insert OID = 1149 ( circle_div_pt PGNSP PGUID 12 1 0 0 f f t f i 2 718 "718 600" _null_ _null_ _null_ circle_div_pt _null_ _null_ _null_ )); DESCR("divide"); ! DATA(insert OID = 1150 ( timestamptz_in PGNSP PGUID 12 1 0 0 f f t f s 3 1184 "2275 26 23" _null_ _null_ _null_ timestamptz_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1151 ( timestamptz_out PGNSP PGUID 12 1 0 0 f f t f s 1 2275 "1184" _null_ _null_ _null_ timestamptz_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2907 ( timestamptztypmodin PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1263" _null_ _null_ _null_ timestamptztypmodin _null_ _null_ _null_ )); DESCR("I/O typmod"); ! DATA(insert OID = 2908 ( timestamptztypmodout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "23" _null_ _null_ _null_ timestamptztypmodout _null_ _null_ _null_ )); DESCR("I/O typmod"); ! DATA(insert OID = 1152 ( timestamptz_eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1184 1184" _null_ _null_ _null_ timestamp_eq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 1153 ( timestamptz_ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1184 1184" _null_ _null_ _null_ timestamp_ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 1154 ( timestamptz_lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1184 1184" _null_ _null_ _null_ timestamp_lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 1155 ( timestamptz_le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1184 1184" _null_ _null_ _null_ timestamp_le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 1156 ( timestamptz_ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1184 1184" _null_ _null_ _null_ timestamp_ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 1157 ( timestamptz_gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1184 1184" _null_ _null_ _null_ timestamp_gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 1158 ( to_timestamp PGNSP PGUID 14 1 0 0 f f t f i 1 1184 "701" _null_ _null_ _null_ "select (''epoch''::pg_catalog.timestamptz + $1 * ''1 second''::pg_catalog.interval)" _null_ _null_ _null_ )); DESCR("convert UNIX epoch to timestamptz"); ! DATA(insert OID = 1159 ( timezone PGNSP PGUID 12 1 0 0 f f t f i 2 1114 "25 1184" _null_ _null_ _null_ timestamptz_zone _null_ _null_ _null_ )); DESCR("adjust timestamp to new time zone"); ! DATA(insert OID = 1160 ( interval_in PGNSP PGUID 12 1 0 0 f f t f s 3 1186 "2275 26 23" _null_ _null_ _null_ interval_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1161 ( interval_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "1186" _null_ _null_ _null_ interval_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2903 ( intervaltypmodin PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1263" _null_ _null_ _null_ intervaltypmodin _null_ _null_ _null_ )); DESCR("I/O typmod"); ! DATA(insert OID = 2904 ( intervaltypmodout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "23" _null_ _null_ _null_ intervaltypmodout _null_ _null_ _null_ )); DESCR("I/O typmod"); ! DATA(insert OID = 1162 ( interval_eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1186 1186" _null_ _null_ _null_ interval_eq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 1163 ( interval_ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1186 1186" _null_ _null_ _null_ interval_ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 1164 ( interval_lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1186 1186" _null_ _null_ _null_ interval_lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 1165 ( interval_le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1186 1186" _null_ _null_ _null_ interval_le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 1166 ( interval_ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1186 1186" _null_ _null_ _null_ interval_ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 1167 ( interval_gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1186 1186" _null_ _null_ _null_ interval_gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 1168 ( interval_um PGNSP PGUID 12 1 0 0 f f t f i 1 1186 "1186" _null_ _null_ _null_ interval_um _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 1169 ( interval_pl PGNSP PGUID 12 1 0 0 f f t f i 2 1186 "1186 1186" _null_ _null_ _null_ interval_pl _null_ _null_ _null_ )); DESCR("add"); ! DATA(insert OID = 1170 ( interval_mi PGNSP PGUID 12 1 0 0 f f t f i 2 1186 "1186 1186" _null_ _null_ _null_ interval_mi _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 1171 ( date_part PGNSP PGUID 12 1 0 0 f f t f s 2 701 "25 1184" _null_ _null_ _null_ timestamptz_part _null_ _null_ _null_ )); DESCR("extract field from timestamp with time zone"); ! DATA(insert OID = 1172 ( date_part PGNSP PGUID 12 1 0 0 f f t f i 2 701 "25 1186" _null_ _null_ _null_ interval_part _null_ _null_ _null_ )); DESCR("extract field from interval"); ! DATA(insert OID = 1173 ( timestamptz PGNSP PGUID 12 1 0 0 f f t f i 1 1184 "702" _null_ _null_ _null_ abstime_timestamptz _null_ _null_ _null_ )); DESCR("convert abstime to timestamp with time zone"); ! DATA(insert OID = 1174 ( timestamptz PGNSP PGUID 12 1 0 0 f f t f s 1 1184 "1082" _null_ _null_ _null_ date_timestamptz _null_ _null_ _null_ )); DESCR("convert date to timestamp with time zone"); ! DATA(insert OID = 2711 ( justify_interval PGNSP PGUID 12 1 0 0 f f t f i 1 1186 "1186" _null_ _null_ _null_ interval_justify_interval _null_ _null_ _null_ )); DESCR("promote groups of 24 hours to numbers of days and promote groups of 30 days to numbers of months"); ! DATA(insert OID = 1175 ( justify_hours PGNSP PGUID 12 1 0 0 f f t f i 1 1186 "1186" _null_ _null_ _null_ interval_justify_hours _null_ _null_ _null_ )); DESCR("promote groups of 24 hours to numbers of days"); ! DATA(insert OID = 1295 ( justify_days PGNSP PGUID 12 1 0 0 f f t f i 1 1186 "1186" _null_ _null_ _null_ interval_justify_days _null_ _null_ _null_ )); DESCR("promote groups of 30 days to numbers of months"); ! DATA(insert OID = 1176 ( timestamptz PGNSP PGUID 14 1 0 0 f f t f s 2 1184 "1082 1083" _null_ _null_ _null_ "select cast(($1 + $2) as timestamp with time zone)" _null_ _null_ _null_ )); DESCR("convert date and time to timestamp with time zone"); ! DATA(insert OID = 1177 ( interval PGNSP PGUID 12 1 0 0 f f t f i 1 1186 "703" _null_ _null_ _null_ reltime_interval _null_ _null_ _null_ )); DESCR("convert reltime to interval"); ! DATA(insert OID = 1178 ( date PGNSP PGUID 12 1 0 0 f f t f s 1 1082 "1184" _null_ _null_ _null_ timestamptz_date _null_ _null_ _null_ )); DESCR("convert timestamp with time zone to date"); ! DATA(insert OID = 1179 ( date PGNSP PGUID 12 1 0 0 f f t f s 1 1082 "702" _null_ _null_ _null_ abstime_date _null_ _null_ _null_ )); DESCR("convert abstime to date"); ! DATA(insert OID = 1180 ( abstime PGNSP PGUID 12 1 0 0 f f t f i 1 702 "1184" _null_ _null_ _null_ timestamptz_abstime _null_ _null_ _null_ )); DESCR("convert timestamp with time zone to abstime"); ! DATA(insert OID = 1181 ( age PGNSP PGUID 12 1 0 0 f f t f s 1 23 "28" _null_ _null_ _null_ xid_age _null_ _null_ _null_ )); DESCR("age of a transaction ID, in transactions before current transaction"); ! DATA(insert OID = 1188 ( timestamptz_mi PGNSP PGUID 12 1 0 0 f f t f i 2 1186 "1184 1184" _null_ _null_ _null_ timestamp_mi _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 1189 ( timestamptz_pl_interval PGNSP PGUID 12 1 0 0 f f t f s 2 1184 "1184 1186" _null_ _null_ _null_ timestamptz_pl_interval _null_ _null_ _null_ )); DESCR("plus"); ! DATA(insert OID = 1190 ( timestamptz_mi_interval PGNSP PGUID 12 1 0 0 f f t f s 2 1184 "1184 1186" _null_ _null_ _null_ timestamptz_mi_interval _null_ _null_ _null_ )); DESCR("minus"); ! DATA(insert OID = 1194 ( reltime PGNSP PGUID 12 1 0 0 f f t f i 1 703 "1186" _null_ _null_ _null_ interval_reltime _null_ _null_ _null_ )); DESCR("convert interval to reltime"); ! DATA(insert OID = 1195 ( timestamptz_smaller PGNSP PGUID 12 1 0 0 f f t f i 2 1184 "1184 1184" _null_ _null_ _null_ timestamp_smaller _null_ _null_ _null_ )); DESCR("smaller of two"); ! DATA(insert OID = 1196 ( timestamptz_larger PGNSP PGUID 12 1 0 0 f f t f i 2 1184 "1184 1184" _null_ _null_ _null_ timestamp_larger _null_ _null_ _null_ )); DESCR("larger of two"); ! DATA(insert OID = 1197 ( interval_smaller PGNSP PGUID 12 1 0 0 f f t f i 2 1186 "1186 1186" _null_ _null_ _null_ interval_smaller _null_ _null_ _null_ )); DESCR("smaller of two"); ! DATA(insert OID = 1198 ( interval_larger PGNSP PGUID 12 1 0 0 f f t f i 2 1186 "1186 1186" _null_ _null_ _null_ interval_larger _null_ _null_ _null_ )); DESCR("larger of two"); ! DATA(insert OID = 1199 ( age PGNSP PGUID 12 1 0 0 f f t f i 2 1186 "1184 1184" _null_ _null_ _null_ timestamptz_age _null_ _null_ _null_ )); DESCR("date difference preserving months and years"); /* OIDS 1200 - 1299 */ ! DATA(insert OID = 1200 ( interval PGNSP PGUID 12 1 0 0 f f t f i 2 1186 "1186 23" _null_ _null_ _null_ interval_scale _null_ _null_ _null_ )); DESCR("adjust interval precision"); ! DATA(insert OID = 1215 ( obj_description PGNSP PGUID 14 100 0 0 f f t f s 2 25 "26 19" _null_ _null_ _null_ "select description from pg_catalog.pg_description where objoid = $1 and classoid = (select oid from pg_catalog.pg_class where relname = $2 and relnamespace = PGNSP) and objsubid = 0" _null_ _null_ _null_ )); DESCR("get description for object id and catalog name"); ! DATA(insert OID = 1216 ( col_description PGNSP PGUID 14 100 0 0 f f t f s 2 25 "26 23" _null_ _null_ _null_ "select description from pg_catalog.pg_description where objoid = $1 and classoid = ''pg_catalog.pg_class''::pg_catalog.regclass and objsubid = $2" _null_ _null_ _null_ )); DESCR("get description for table column"); ! DATA(insert OID = 1993 ( shobj_description PGNSP PGUID 14 100 0 0 f f t f s 2 25 "26 19" _null_ _null_ _null_ "select description from pg_catalog.pg_shdescription where objoid = $1 and classoid = (select oid from pg_catalog.pg_class where relname = $2 and relnamespace = PGNSP)" _null_ _null_ _null_ )); DESCR("get description for object id and shared catalog name"); ! DATA(insert OID = 1217 ( date_trunc PGNSP PGUID 12 1 0 0 f f t f s 2 1184 "25 1184" _null_ _null_ _null_ timestamptz_trunc _null_ _null_ _null_ )); DESCR("truncate timestamp with time zone to specified units"); ! DATA(insert OID = 1218 ( date_trunc PGNSP PGUID 12 1 0 0 f f t f i 2 1186 "25 1186" _null_ _null_ _null_ interval_trunc _null_ _null_ _null_ )); DESCR("truncate interval to specified units"); ! DATA(insert OID = 1219 ( int8inc PGNSP PGUID 12 1 0 0 f f t f i 1 20 "20" _null_ _null_ _null_ int8inc _null_ _null_ _null_ )); DESCR("increment"); ! DATA(insert OID = 2804 ( int8inc_any PGNSP PGUID 12 1 0 0 f f t f i 2 20 "20 2276" _null_ _null_ _null_ int8inc_any _null_ _null_ _null_ )); DESCR("increment, ignores second argument"); ! DATA(insert OID = 1230 ( int8abs PGNSP PGUID 12 1 0 0 f f t f i 1 20 "20" _null_ _null_ _null_ int8abs _null_ _null_ _null_ )); DESCR("absolute value"); ! DATA(insert OID = 1236 ( int8larger PGNSP PGUID 12 1 0 0 f f t f i 2 20 "20 20" _null_ _null_ _null_ int8larger _null_ _null_ _null_ )); DESCR("larger of two"); ! DATA(insert OID = 1237 ( int8smaller PGNSP PGUID 12 1 0 0 f f t f i 2 20 "20 20" _null_ _null_ _null_ int8smaller _null_ _null_ _null_ )); DESCR("smaller of two"); ! DATA(insert OID = 1238 ( texticregexeq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "25 25" _null_ _null_ _null_ texticregexeq _null_ _null_ _null_ )); DESCR("matches regex., case-insensitive"); ! DATA(insert OID = 1239 ( texticregexne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "25 25" _null_ _null_ _null_ texticregexne _null_ _null_ _null_ )); DESCR("does not match regex., case-insensitive"); ! DATA(insert OID = 1240 ( nameicregexeq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "19 25" _null_ _null_ _null_ nameicregexeq _null_ _null_ _null_ )); DESCR("matches regex., case-insensitive"); ! DATA(insert OID = 1241 ( nameicregexne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "19 25" _null_ _null_ _null_ nameicregexne _null_ _null_ _null_ )); DESCR("does not match regex., case-insensitive"); ! DATA(insert OID = 1251 ( int4abs PGNSP PGUID 12 1 0 0 f f t f i 1 23 "23" _null_ _null_ _null_ int4abs _null_ _null_ _null_ )); DESCR("absolute value"); ! DATA(insert OID = 1253 ( int2abs PGNSP PGUID 12 1 0 0 f f t f i 1 21 "21" _null_ _null_ _null_ int2abs _null_ _null_ _null_ )); DESCR("absolute value"); ! DATA(insert OID = 1271 ( overlaps PGNSP PGUID 12 1 0 0 f f f f i 4 16 "1266 1266 1266 1266" _null_ _null_ _null_ overlaps_timetz _null_ _null_ _null_ )); DESCR("intervals overlap?"); ! DATA(insert OID = 1272 ( datetime_pl PGNSP PGUID 12 1 0 0 f f t f i 2 1114 "1082 1083" _null_ _null_ _null_ datetime_timestamp _null_ _null_ _null_ )); DESCR("convert date and time to timestamp"); ! DATA(insert OID = 1273 ( date_part PGNSP PGUID 12 1 0 0 f f t f i 2 701 "25 1266" _null_ _null_ _null_ timetz_part _null_ _null_ _null_ )); DESCR("extract field from time with time zone"); ! DATA(insert OID = 1274 ( int84pl PGNSP PGUID 12 1 0 0 f f t f i 2 20 "20 23" _null_ _null_ _null_ int84pl _null_ _null_ _null_ )); DESCR("add"); ! DATA(insert OID = 1275 ( int84mi PGNSP PGUID 12 1 0 0 f f t f i 2 20 "20 23" _null_ _null_ _null_ int84mi _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 1276 ( int84mul PGNSP PGUID 12 1 0 0 f f t f i 2 20 "20 23" _null_ _null_ _null_ int84mul _null_ _null_ _null_ )); DESCR("multiply"); ! DATA(insert OID = 1277 ( int84div PGNSP PGUID 12 1 0 0 f f t f i 2 20 "20 23" _null_ _null_ _null_ int84div _null_ _null_ _null_ )); DESCR("divide"); ! DATA(insert OID = 1278 ( int48pl PGNSP PGUID 12 1 0 0 f f t f i 2 20 "23 20" _null_ _null_ _null_ int48pl _null_ _null_ _null_ )); DESCR("add"); ! DATA(insert OID = 1279 ( int48mi PGNSP PGUID 12 1 0 0 f f t f i 2 20 "23 20" _null_ _null_ _null_ int48mi _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 1280 ( int48mul PGNSP PGUID 12 1 0 0 f f t f i 2 20 "23 20" _null_ _null_ _null_ int48mul _null_ _null_ _null_ )); DESCR("multiply"); ! DATA(insert OID = 1281 ( int48div PGNSP PGUID 12 1 0 0 f f t f i 2 20 "23 20" _null_ _null_ _null_ int48div _null_ _null_ _null_ )); DESCR("divide"); ! DATA(insert OID = 837 ( int82pl PGNSP PGUID 12 1 0 0 f f t f i 2 20 "20 21" _null_ _null_ _null_ int82pl _null_ _null_ _null_ )); DESCR("add"); ! DATA(insert OID = 838 ( int82mi PGNSP PGUID 12 1 0 0 f f t f i 2 20 "20 21" _null_ _null_ _null_ int82mi _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 839 ( int82mul PGNSP PGUID 12 1 0 0 f f t f i 2 20 "20 21" _null_ _null_ _null_ int82mul _null_ _null_ _null_ )); DESCR("multiply"); ! DATA(insert OID = 840 ( int82div PGNSP PGUID 12 1 0 0 f f t f i 2 20 "20 21" _null_ _null_ _null_ int82div _null_ _null_ _null_ )); DESCR("divide"); ! DATA(insert OID = 841 ( int28pl PGNSP PGUID 12 1 0 0 f f t f i 2 20 "21 20" _null_ _null_ _null_ int28pl _null_ _null_ _null_ )); DESCR("add"); ! DATA(insert OID = 942 ( int28mi PGNSP PGUID 12 1 0 0 f f t f i 2 20 "21 20" _null_ _null_ _null_ int28mi _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 943 ( int28mul PGNSP PGUID 12 1 0 0 f f t f i 2 20 "21 20" _null_ _null_ _null_ int28mul _null_ _null_ _null_ )); DESCR("multiply"); ! DATA(insert OID = 948 ( int28div PGNSP PGUID 12 1 0 0 f f t f i 2 20 "21 20" _null_ _null_ _null_ int28div _null_ _null_ _null_ )); DESCR("divide"); ! DATA(insert OID = 1287 ( oid PGNSP PGUID 12 1 0 0 f f t f i 1 26 "20" _null_ _null_ _null_ i8tooid _null_ _null_ _null_ )); DESCR("convert int8 to oid"); ! DATA(insert OID = 1288 ( int8 PGNSP PGUID 12 1 0 0 f f t f i 1 20 "26" _null_ _null_ _null_ oidtoi8 _null_ _null_ _null_ )); DESCR("convert oid to int8"); ! DATA(insert OID = 1292 ( tideq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "27 27" _null_ _null_ _null_ tideq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 1293 ( currtid PGNSP PGUID 12 1 0 0 f f t f v 2 27 "26 27" _null_ _null_ _null_ currtid_byreloid _null_ _null_ _null_ )); DESCR("latest tid of a tuple"); ! DATA(insert OID = 1294 ( currtid2 PGNSP PGUID 12 1 0 0 f f t f v 2 27 "25 27" _null_ _null_ _null_ currtid_byrelname _null_ _null_ _null_ )); DESCR("latest tid of a tuple"); ! DATA(insert OID = 1265 ( tidne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "27 27" _null_ _null_ _null_ tidne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 2790 ( tidgt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "27 27" _null_ _null_ _null_ tidgt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 2791 ( tidlt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "27 27" _null_ _null_ _null_ tidlt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 2792 ( tidge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "27 27" _null_ _null_ _null_ tidge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 2793 ( tidle PGNSP PGUID 12 1 0 0 f f t f i 2 16 "27 27" _null_ _null_ _null_ tidle _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 2794 ( bttidcmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "27 27" _null_ _null_ _null_ bttidcmp _null_ _null_ _null_ )); DESCR("btree less-equal-greater"); ! DATA(insert OID = 2795 ( tidlarger PGNSP PGUID 12 1 0 0 f f t f i 2 27 "27 27" _null_ _null_ _null_ tidlarger _null_ _null_ _null_ )); DESCR("larger of two"); ! DATA(insert OID = 2796 ( tidsmaller PGNSP PGUID 12 1 0 0 f f t f i 2 27 "27 27" _null_ _null_ _null_ tidsmaller _null_ _null_ _null_ )); DESCR("smaller of two"); ! DATA(insert OID = 1296 ( timedate_pl PGNSP PGUID 14 1 0 0 f f t f i 2 1114 "1083 1082" _null_ _null_ _null_ "select ($2 + $1)" _null_ _null_ _null_ )); DESCR("convert time and date to timestamp"); ! DATA(insert OID = 1297 ( datetimetz_pl PGNSP PGUID 12 1 0 0 f f t f i 2 1184 "1082 1266" _null_ _null_ _null_ datetimetz_timestamptz _null_ _null_ _null_ )); DESCR("convert date and time with time zone to timestamp with time zone"); ! DATA(insert OID = 1298 ( timetzdate_pl PGNSP PGUID 14 1 0 0 f f t f i 2 1184 "1266 1082" _null_ _null_ _null_ "select ($2 + $1)" _null_ _null_ _null_ )); DESCR("convert time with time zone and date to timestamp with time zone"); ! DATA(insert OID = 1299 ( now PGNSP PGUID 12 1 0 0 f f t f s 0 1184 "" _null_ _null_ _null_ now _null_ _null_ _null_ )); DESCR("current transaction time"); ! DATA(insert OID = 2647 ( transaction_timestamp PGNSP PGUID 12 1 0 0 f f t f s 0 1184 "" _null_ _null_ _null_ now _null_ _null_ _null_ )); DESCR("current transaction time"); ! DATA(insert OID = 2648 ( statement_timestamp PGNSP PGUID 12 1 0 0 f f t f s 0 1184 "" _null_ _null_ _null_ statement_timestamp _null_ _null_ _null_ )); DESCR("current statement time"); ! DATA(insert OID = 2649 ( clock_timestamp PGNSP PGUID 12 1 0 0 f f t f v 0 1184 "" _null_ _null_ _null_ clock_timestamp _null_ _null_ _null_ )); DESCR("current clock time"); /* OIDS 1300 - 1399 */ ! DATA(insert OID = 1300 ( positionsel PGNSP PGUID 12 1 0 0 f f t f s 4 701 "2281 26 2281 23" _null_ _null_ _null_ positionsel _null_ _null_ _null_ )); DESCR("restriction selectivity for position-comparison operators"); ! DATA(insert OID = 1301 ( positionjoinsel PGNSP PGUID 12 1 0 0 f f t f s 5 701 "2281 26 2281 21 2281" _null_ _null_ _null_ positionjoinsel _null_ _null_ _null_ )); DESCR("join selectivity for position-comparison operators"); ! DATA(insert OID = 1302 ( contsel PGNSP PGUID 12 1 0 0 f f t f s 4 701 "2281 26 2281 23" _null_ _null_ _null_ contsel _null_ _null_ _null_ )); DESCR("restriction selectivity for containment comparison operators"); ! DATA(insert OID = 1303 ( contjoinsel PGNSP PGUID 12 1 0 0 f f t f s 5 701 "2281 26 2281 21 2281" _null_ _null_ _null_ contjoinsel _null_ _null_ _null_ )); DESCR("join selectivity for containment comparison operators"); ! DATA(insert OID = 1304 ( overlaps PGNSP PGUID 12 1 0 0 f f f f i 4 16 "1184 1184 1184 1184" _null_ _null_ _null_ overlaps_timestamp _null_ _null_ _null_ )); DESCR("intervals overlap?"); ! DATA(insert OID = 1305 ( overlaps PGNSP PGUID 14 1 0 0 f f f f s 4 16 "1184 1186 1184 1186" _null_ _null_ _null_ "select ($1, ($1 + $2)) overlaps ($3, ($3 + $4))" _null_ _null_ _null_ )); DESCR("intervals overlap?"); ! DATA(insert OID = 1306 ( overlaps PGNSP PGUID 14 1 0 0 f f f f s 4 16 "1184 1184 1184 1186" _null_ _null_ _null_ "select ($1, $2) overlaps ($3, ($3 + $4))" _null_ _null_ _null_ )); DESCR("intervals overlap?"); ! DATA(insert OID = 1307 ( overlaps PGNSP PGUID 14 1 0 0 f f f f s 4 16 "1184 1186 1184 1184" _null_ _null_ _null_ "select ($1, ($1 + $2)) overlaps ($3, $4)" _null_ _null_ _null_ )); DESCR("intervals overlap?"); ! DATA(insert OID = 1308 ( overlaps PGNSP PGUID 12 1 0 0 f f f f i 4 16 "1083 1083 1083 1083" _null_ _null_ _null_ overlaps_time _null_ _null_ _null_ )); DESCR("intervals overlap?"); ! DATA(insert OID = 1309 ( overlaps PGNSP PGUID 14 1 0 0 f f f f i 4 16 "1083 1186 1083 1186" _null_ _null_ _null_ "select ($1, ($1 + $2)) overlaps ($3, ($3 + $4))" _null_ _null_ _null_ )); DESCR("intervals overlap?"); ! DATA(insert OID = 1310 ( overlaps PGNSP PGUID 14 1 0 0 f f f f i 4 16 "1083 1083 1083 1186" _null_ _null_ _null_ "select ($1, $2) overlaps ($3, ($3 + $4))" _null_ _null_ _null_ )); DESCR("intervals overlap?"); ! DATA(insert OID = 1311 ( overlaps PGNSP PGUID 14 1 0 0 f f f f i 4 16 "1083 1186 1083 1083" _null_ _null_ _null_ "select ($1, ($1 + $2)) overlaps ($3, $4)" _null_ _null_ _null_ )); DESCR("intervals overlap?"); ! DATA(insert OID = 1312 ( timestamp_in PGNSP PGUID 12 1 0 0 f f t f s 3 1114 "2275 26 23" _null_ _null_ _null_ timestamp_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1313 ( timestamp_out PGNSP PGUID 12 1 0 0 f f t f s 1 2275 "1114" _null_ _null_ _null_ timestamp_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2905 ( timestamptypmodin PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1263" _null_ _null_ _null_ timestamptypmodin _null_ _null_ _null_ )); DESCR("I/O typmod"); ! DATA(insert OID = 2906 ( timestamptypmodout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "23" _null_ _null_ _null_ timestamptypmodout _null_ _null_ _null_ )); DESCR("I/O typmod"); ! DATA(insert OID = 1314 ( timestamptz_cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "1184 1184" _null_ _null_ _null_ timestamp_cmp _null_ _null_ _null_ )); DESCR("less-equal-greater"); ! DATA(insert OID = 1315 ( interval_cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "1186 1186" _null_ _null_ _null_ interval_cmp _null_ _null_ _null_ )); DESCR("less-equal-greater"); ! DATA(insert OID = 1316 ( time PGNSP PGUID 12 1 0 0 f f t f i 1 1083 "1114" _null_ _null_ _null_ timestamp_time _null_ _null_ _null_ )); DESCR("convert timestamp to time"); ! DATA(insert OID = 1317 ( length PGNSP PGUID 12 1 0 0 f f t f i 1 23 "25" _null_ _null_ _null_ textlen _null_ _null_ _null_ )); DESCR("length"); ! DATA(insert OID = 1318 ( length PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1042" _null_ _null_ _null_ bpcharlen _null_ _null_ _null_ )); DESCR("character length"); ! DATA(insert OID = 1319 ( xideqint4 PGNSP PGUID 12 1 0 0 f f t f i 2 16 "28 23" _null_ _null_ _null_ xideq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 1326 ( interval_div PGNSP PGUID 12 1 0 0 f f t f i 2 1186 "1186 701" _null_ _null_ _null_ interval_div _null_ _null_ _null_ )); DESCR("divide"); ! DATA(insert OID = 1339 ( dlog10 PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dlog10 _null_ _null_ _null_ )); DESCR("base 10 logarithm"); ! DATA(insert OID = 1340 ( log PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dlog10 _null_ _null_ _null_ )); DESCR("base 10 logarithm"); ! DATA(insert OID = 1341 ( ln PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dlog1 _null_ _null_ _null_ )); DESCR("natural logarithm"); ! DATA(insert OID = 1342 ( round PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dround _null_ _null_ _null_ )); DESCR("round to nearest integer"); ! DATA(insert OID = 1343 ( trunc PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dtrunc _null_ _null_ _null_ )); DESCR("truncate to integer"); ! DATA(insert OID = 1344 ( sqrt PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dsqrt _null_ _null_ _null_ )); DESCR("square root"); ! DATA(insert OID = 1345 ( cbrt PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dcbrt _null_ _null_ _null_ )); DESCR("cube root"); ! DATA(insert OID = 1346 ( pow PGNSP PGUID 12 1 0 0 f f t f i 2 701 "701 701" _null_ _null_ _null_ dpow _null_ _null_ _null_ )); DESCR("exponentiation"); ! DATA(insert OID = 1368 ( power PGNSP PGUID 12 1 0 0 f f t f i 2 701 "701 701" _null_ _null_ _null_ dpow _null_ _null_ _null_ )); DESCR("exponentiation"); ! DATA(insert OID = 1347 ( exp PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dexp _null_ _null_ _null_ )); DESCR("exponential"); /* * This form of obj_description is now deprecated, since it will fail if * OIDs are not unique across system catalogs. Use the other forms instead. */ ! DATA(insert OID = 1348 ( obj_description PGNSP PGUID 14 100 0 0 f f t f s 1 25 "26" _null_ _null_ _null_ "select description from pg_catalog.pg_description where objoid = $1 and objsubid = 0" _null_ _null_ _null_ )); DESCR("get description for object id (deprecated)"); ! DATA(insert OID = 1349 ( oidvectortypes PGNSP PGUID 12 1 0 0 f f t f s 1 25 "30" _null_ _null_ _null_ oidvectortypes _null_ _null_ _null_ )); DESCR("print type names of oidvector field"); ! DATA(insert OID = 1350 ( timetz_in PGNSP PGUID 12 1 0 0 f f t f s 3 1266 "2275 26 23" _null_ _null_ _null_ timetz_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1351 ( timetz_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "1266" _null_ _null_ _null_ timetz_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2911 ( timetztypmodin PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1263" _null_ _null_ _null_ timetztypmodin _null_ _null_ _null_ )); DESCR("I/O typmod"); ! DATA(insert OID = 2912 ( timetztypmodout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "23" _null_ _null_ _null_ timetztypmodout _null_ _null_ _null_ )); DESCR("I/O typmod"); ! DATA(insert OID = 1352 ( timetz_eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1266 1266" _null_ _null_ _null_ timetz_eq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 1353 ( timetz_ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1266 1266" _null_ _null_ _null_ timetz_ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 1354 ( timetz_lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1266 1266" _null_ _null_ _null_ timetz_lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 1355 ( timetz_le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1266 1266" _null_ _null_ _null_ timetz_le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 1356 ( timetz_ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1266 1266" _null_ _null_ _null_ timetz_ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 1357 ( timetz_gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1266 1266" _null_ _null_ _null_ timetz_gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 1358 ( timetz_cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "1266 1266" _null_ _null_ _null_ timetz_cmp _null_ _null_ _null_ )); DESCR("less-equal-greater"); ! DATA(insert OID = 1359 ( timestamptz PGNSP PGUID 12 1 0 0 f f t f i 2 1184 "1082 1266" _null_ _null_ _null_ datetimetz_timestamptz _null_ _null_ _null_ )); DESCR("convert date and time with time zone to timestamp with time zone"); ! DATA(insert OID = 1364 ( time PGNSP PGUID 14 1 0 0 f f t f s 1 1083 "702" _null_ _null_ _null_ "select cast(cast($1 as timestamp without time zone) as pg_catalog.time)" _null_ _null_ _null_ )); DESCR("convert abstime to time"); ! DATA(insert OID = 1367 ( character_length PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1042" _null_ _null_ _null_ bpcharlen _null_ _null_ _null_ )); DESCR("character length"); ! DATA(insert OID = 1369 ( character_length PGNSP PGUID 12 1 0 0 f f t f i 1 23 "25" _null_ _null_ _null_ textlen _null_ _null_ _null_ )); DESCR("character length"); ! DATA(insert OID = 1370 ( interval PGNSP PGUID 12 1 0 0 f f t f i 1 1186 "1083" _null_ _null_ _null_ time_interval _null_ _null_ _null_ )); DESCR("convert time to interval"); ! DATA(insert OID = 1372 ( char_length PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1042" _null_ _null_ _null_ bpcharlen _null_ _null_ _null_ )); DESCR("character length"); ! DATA(insert OID = 1374 ( octet_length PGNSP PGUID 12 1 0 0 f f t f i 1 23 "25" _null_ _null_ _null_ textoctetlen _null_ _null_ _null_ )); DESCR("octet length"); ! DATA(insert OID = 1375 ( octet_length PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1042" _null_ _null_ _null_ bpcharoctetlen _null_ _null_ _null_ )); DESCR("octet length"); ! DATA(insert OID = 1377 ( time_larger PGNSP PGUID 12 1 0 0 f f t f i 2 1083 "1083 1083" _null_ _null_ _null_ time_larger _null_ _null_ _null_ )); DESCR("larger of two"); ! DATA(insert OID = 1378 ( time_smaller PGNSP PGUID 12 1 0 0 f f t f i 2 1083 "1083 1083" _null_ _null_ _null_ time_smaller _null_ _null_ _null_ )); DESCR("smaller of two"); ! DATA(insert OID = 1379 ( timetz_larger PGNSP PGUID 12 1 0 0 f f t f i 2 1266 "1266 1266" _null_ _null_ _null_ timetz_larger _null_ _null_ _null_ )); DESCR("larger of two"); ! DATA(insert OID = 1380 ( timetz_smaller PGNSP PGUID 12 1 0 0 f f t f i 2 1266 "1266 1266" _null_ _null_ _null_ timetz_smaller _null_ _null_ _null_ )); DESCR("smaller of two"); ! DATA(insert OID = 1381 ( char_length PGNSP PGUID 12 1 0 0 f f t f i 1 23 "25" _null_ _null_ _null_ textlen _null_ _null_ _null_ )); DESCR("character length"); ! DATA(insert OID = 1382 ( date_part PGNSP PGUID 14 1 0 0 f f t f s 2 701 "25 702" _null_ _null_ _null_ "select pg_catalog.date_part($1, cast($2 as timestamp with time zone))" _null_ _null_ _null_ )); DESCR("extract field from abstime"); ! DATA(insert OID = 1383 ( date_part PGNSP PGUID 14 1 0 0 f f t f s 2 701 "25 703" _null_ _null_ _null_ "select pg_catalog.date_part($1, cast($2 as pg_catalog.interval))" _null_ _null_ _null_ )); DESCR("extract field from reltime"); ! DATA(insert OID = 1384 ( date_part PGNSP PGUID 14 1 0 0 f f t f i 2 701 "25 1082" _null_ _null_ _null_ "select pg_catalog.date_part($1, cast($2 as timestamp without time zone))" _null_ _null_ _null_ )); DESCR("extract field from date"); ! DATA(insert OID = 1385 ( date_part PGNSP PGUID 12 1 0 0 f f t f i 2 701 "25 1083" _null_ _null_ _null_ time_part _null_ _null_ _null_ )); DESCR("extract field from time"); ! DATA(insert OID = 1386 ( age PGNSP PGUID 14 1 0 0 f f t f s 1 1186 "1184" _null_ _null_ _null_ "select pg_catalog.age(cast(current_date as timestamp with time zone), $1)" _null_ _null_ _null_ )); DESCR("date difference from today preserving months and years"); ! DATA(insert OID = 1388 ( timetz PGNSP PGUID 12 1 0 0 f f t f s 1 1266 "1184" _null_ _null_ _null_ timestamptz_timetz _null_ _null_ _null_ )); DESCR("convert timestamptz to timetz"); ! DATA(insert OID = 1389 ( isfinite PGNSP PGUID 12 1 0 0 f f t f i 1 16 "1184" _null_ _null_ _null_ timestamp_finite _null_ _null_ _null_ )); DESCR("finite timestamp?"); ! DATA(insert OID = 1390 ( isfinite PGNSP PGUID 12 1 0 0 f f t f i 1 16 "1186" _null_ _null_ _null_ interval_finite _null_ _null_ _null_ )); DESCR("finite interval?"); ! DATA(insert OID = 1376 ( factorial PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "20" _null_ _null_ _null_ numeric_fac _null_ _null_ _null_ )); DESCR("factorial"); ! DATA(insert OID = 1394 ( abs PGNSP PGUID 12 1 0 0 f f t f i 1 700 "700" _null_ _null_ _null_ float4abs _null_ _null_ _null_ )); DESCR("absolute value"); ! DATA(insert OID = 1395 ( abs PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ float8abs _null_ _null_ _null_ )); DESCR("absolute value"); ! DATA(insert OID = 1396 ( abs PGNSP PGUID 12 1 0 0 f f t f i 1 20 "20" _null_ _null_ _null_ int8abs _null_ _null_ _null_ )); DESCR("absolute value"); ! DATA(insert OID = 1397 ( abs PGNSP PGUID 12 1 0 0 f f t f i 1 23 "23" _null_ _null_ _null_ int4abs _null_ _null_ _null_ )); DESCR("absolute value"); ! DATA(insert OID = 1398 ( abs PGNSP PGUID 12 1 0 0 f f t f i 1 21 "21" _null_ _null_ _null_ int2abs _null_ _null_ _null_ )); DESCR("absolute value"); /* OIDS 1400 - 1499 */ ! DATA(insert OID = 1400 ( name PGNSP PGUID 12 1 0 0 f f t f i 1 19 "1043" _null_ _null_ _null_ text_name _null_ _null_ _null_ )); DESCR("convert varchar to name"); ! DATA(insert OID = 1401 ( varchar PGNSP PGUID 12 1 0 0 f f t f i 1 1043 "19" _null_ _null_ _null_ name_text _null_ _null_ _null_ )); DESCR("convert name to varchar"); ! DATA(insert OID = 1402 ( current_schema PGNSP PGUID 12 1 0 0 f f t f s 0 19 "" _null_ _null_ _null_ current_schema _null_ _null_ _null_ )); DESCR("current schema name"); ! DATA(insert OID = 1403 ( current_schemas PGNSP PGUID 12 1 0 0 f f t f s 1 1003 "16" _null_ _null_ _null_ current_schemas _null_ _null_ _null_ )); DESCR("current schema search list"); ! DATA(insert OID = 1404 ( overlay PGNSP PGUID 14 1 0 0 f f t f i 4 25 "25 25 23 23" _null_ _null_ _null_ "select pg_catalog.substring($1, 1, ($3 - 1)) || $2 || pg_catalog.substring($1, ($3 + $4))" _null_ _null_ _null_ )); DESCR("substitute portion of string"); ! DATA(insert OID = 1405 ( overlay PGNSP PGUID 14 1 0 0 f f t f i 3 25 "25 25 23" _null_ _null_ _null_ "select pg_catalog.substring($1, 1, ($3 - 1)) || $2 || pg_catalog.substring($1, ($3 + pg_catalog.char_length($2)))" _null_ _null_ _null_ )); DESCR("substitute portion of string"); ! DATA(insert OID = 1406 ( isvertical PGNSP PGUID 12 1 0 0 f f t f i 2 16 "600 600" _null_ _null_ _null_ point_vert _null_ _null_ _null_ )); DESCR("vertically aligned?"); ! DATA(insert OID = 1407 ( ishorizontal PGNSP PGUID 12 1 0 0 f f t f i 2 16 "600 600" _null_ _null_ _null_ point_horiz _null_ _null_ _null_ )); DESCR("horizontally aligned?"); ! DATA(insert OID = 1408 ( isparallel PGNSP PGUID 12 1 0 0 f f t f i 2 16 "601 601" _null_ _null_ _null_ lseg_parallel _null_ _null_ _null_ )); DESCR("parallel?"); ! DATA(insert OID = 1409 ( isperp PGNSP PGUID 12 1 0 0 f f t f i 2 16 "601 601" _null_ _null_ _null_ lseg_perp _null_ _null_ _null_ )); DESCR("perpendicular?"); ! DATA(insert OID = 1410 ( isvertical PGNSP PGUID 12 1 0 0 f f t f i 1 16 "601" _null_ _null_ _null_ lseg_vertical _null_ _null_ _null_ )); DESCR("vertical?"); ! DATA(insert OID = 1411 ( ishorizontal PGNSP PGUID 12 1 0 0 f f t f i 1 16 "601" _null_ _null_ _null_ lseg_horizontal _null_ _null_ _null_ )); DESCR("horizontal?"); ! DATA(insert OID = 1412 ( isparallel PGNSP PGUID 12 1 0 0 f f t f i 2 16 "628 628" _null_ _null_ _null_ line_parallel _null_ _null_ _null_ )); DESCR("parallel?"); ! DATA(insert OID = 1413 ( isperp PGNSP PGUID 12 1 0 0 f f t f i 2 16 "628 628" _null_ _null_ _null_ line_perp _null_ _null_ _null_ )); DESCR("perpendicular?"); ! DATA(insert OID = 1414 ( isvertical PGNSP PGUID 12 1 0 0 f f t f i 1 16 "628" _null_ _null_ _null_ line_vertical _null_ _null_ _null_ )); DESCR("vertical?"); ! DATA(insert OID = 1415 ( ishorizontal PGNSP PGUID 12 1 0 0 f f t f i 1 16 "628" _null_ _null_ _null_ line_horizontal _null_ _null_ _null_ )); DESCR("horizontal?"); ! DATA(insert OID = 1416 ( point PGNSP PGUID 12 1 0 0 f f t f i 1 600 "718" _null_ _null_ _null_ circle_center _null_ _null_ _null_ )); DESCR("center of"); ! DATA(insert OID = 1419 ( time PGNSP PGUID 12 1 0 0 f f t f i 1 1083 "1186" _null_ _null_ _null_ interval_time _null_ _null_ _null_ )); DESCR("convert interval to time"); ! DATA(insert OID = 1421 ( box PGNSP PGUID 12 1 0 0 f f t f i 2 603 "600 600" _null_ _null_ _null_ points_box _null_ _null_ _null_ )); DESCR("convert points to box"); ! DATA(insert OID = 1422 ( box_add PGNSP PGUID 12 1 0 0 f f t f i 2 603 "603 600" _null_ _null_ _null_ box_add _null_ _null_ _null_ )); DESCR("add point to box (translate)"); ! DATA(insert OID = 1423 ( box_sub PGNSP PGUID 12 1 0 0 f f t f i 2 603 "603 600" _null_ _null_ _null_ box_sub _null_ _null_ _null_ )); DESCR("subtract point from box (translate)"); ! DATA(insert OID = 1424 ( box_mul PGNSP PGUID 12 1 0 0 f f t f i 2 603 "603 600" _null_ _null_ _null_ box_mul _null_ _null_ _null_ )); DESCR("multiply box by point (scale)"); ! DATA(insert OID = 1425 ( box_div PGNSP PGUID 12 1 0 0 f f t f i 2 603 "603 600" _null_ _null_ _null_ box_div _null_ _null_ _null_ )); DESCR("divide box by point (scale)"); ! DATA(insert OID = 1426 ( path_contain_pt PGNSP PGUID 14 1 0 0 f f t f i 2 16 "602 600" _null_ _null_ _null_ "select pg_catalog.on_ppath($2, $1)" _null_ _null_ _null_ )); DESCR("path contains point?"); ! DATA(insert OID = 1428 ( poly_contain_pt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "604 600" _null_ _null_ _null_ poly_contain_pt _null_ _null_ _null_ )); DESCR("polygon contains point?"); ! DATA(insert OID = 1429 ( pt_contained_poly PGNSP PGUID 12 1 0 0 f f t f i 2 16 "600 604" _null_ _null_ _null_ pt_contained_poly _null_ _null_ _null_ )); DESCR("point contained in polygon?"); ! DATA(insert OID = 1430 ( isclosed PGNSP PGUID 12 1 0 0 f f t f i 1 16 "602" _null_ _null_ _null_ path_isclosed _null_ _null_ _null_ )); DESCR("path closed?"); ! DATA(insert OID = 1431 ( isopen PGNSP PGUID 12 1 0 0 f f t f i 1 16 "602" _null_ _null_ _null_ path_isopen _null_ _null_ _null_ )); DESCR("path open?"); ! DATA(insert OID = 1432 ( path_npoints PGNSP PGUID 12 1 0 0 f f t f i 1 23 "602" _null_ _null_ _null_ path_npoints _null_ _null_ _null_ )); DESCR("number of points in path"); /* pclose and popen might better be named close and open, but that crashes initdb. * - thomas 97/04/20 */ ! DATA(insert OID = 1433 ( pclose PGNSP PGUID 12 1 0 0 f f t f i 1 602 "602" _null_ _null_ _null_ path_close _null_ _null_ _null_ )); DESCR("close path"); ! DATA(insert OID = 1434 ( popen PGNSP PGUID 12 1 0 0 f f t f i 1 602 "602" _null_ _null_ _null_ path_open _null_ _null_ _null_ )); DESCR("open path"); ! DATA(insert OID = 1435 ( path_add PGNSP PGUID 12 1 0 0 f f t f i 2 602 "602 602" _null_ _null_ _null_ path_add _null_ _null_ _null_ )); DESCR("concatenate open paths"); ! DATA(insert OID = 1436 ( path_add_pt PGNSP PGUID 12 1 0 0 f f t f i 2 602 "602 600" _null_ _null_ _null_ path_add_pt _null_ _null_ _null_ )); DESCR("add (translate path)"); ! DATA(insert OID = 1437 ( path_sub_pt PGNSP PGUID 12 1 0 0 f f t f i 2 602 "602 600" _null_ _null_ _null_ path_sub_pt _null_ _null_ _null_ )); DESCR("subtract (translate path)"); ! DATA(insert OID = 1438 ( path_mul_pt PGNSP PGUID 12 1 0 0 f f t f i 2 602 "602 600" _null_ _null_ _null_ path_mul_pt _null_ _null_ _null_ )); DESCR("multiply (rotate/scale path)"); ! DATA(insert OID = 1439 ( path_div_pt PGNSP PGUID 12 1 0 0 f f t f i 2 602 "602 600" _null_ _null_ _null_ path_div_pt _null_ _null_ _null_ )); DESCR("divide (rotate/scale path)"); ! DATA(insert OID = 1440 ( point PGNSP PGUID 12 1 0 0 f f t f i 2 600 "701 701" _null_ _null_ _null_ construct_point _null_ _null_ _null_ )); DESCR("convert x, y to point"); ! DATA(insert OID = 1441 ( point_add PGNSP PGUID 12 1 0 0 f f t f i 2 600 "600 600" _null_ _null_ _null_ point_add _null_ _null_ _null_ )); DESCR("add points (translate)"); ! DATA(insert OID = 1442 ( point_sub PGNSP PGUID 12 1 0 0 f f t f i 2 600 "600 600" _null_ _null_ _null_ point_sub _null_ _null_ _null_ )); DESCR("subtract points (translate)"); ! DATA(insert OID = 1443 ( point_mul PGNSP PGUID 12 1 0 0 f f t f i 2 600 "600 600" _null_ _null_ _null_ point_mul _null_ _null_ _null_ )); DESCR("multiply points (scale/rotate)"); ! DATA(insert OID = 1444 ( point_div PGNSP PGUID 12 1 0 0 f f t f i 2 600 "600 600" _null_ _null_ _null_ point_div _null_ _null_ _null_ )); DESCR("divide points (scale/rotate)"); ! DATA(insert OID = 1445 ( poly_npoints PGNSP PGUID 12 1 0 0 f f t f i 1 23 "604" _null_ _null_ _null_ poly_npoints _null_ _null_ _null_ )); DESCR("number of points in polygon"); ! DATA(insert OID = 1446 ( box PGNSP PGUID 12 1 0 0 f f t f i 1 603 "604" _null_ _null_ _null_ poly_box _null_ _null_ _null_ )); DESCR("convert polygon to bounding box"); ! DATA(insert OID = 1447 ( path PGNSP PGUID 12 1 0 0 f f t f i 1 602 "604" _null_ _null_ _null_ poly_path _null_ _null_ _null_ )); DESCR("convert polygon to path"); ! DATA(insert OID = 1448 ( polygon PGNSP PGUID 12 1 0 0 f f t f i 1 604 "603" _null_ _null_ _null_ box_poly _null_ _null_ _null_ )); DESCR("convert box to polygon"); ! DATA(insert OID = 1449 ( polygon PGNSP PGUID 12 1 0 0 f f t f i 1 604 "602" _null_ _null_ _null_ path_poly _null_ _null_ _null_ )); DESCR("convert path to polygon"); ! DATA(insert OID = 1450 ( circle_in PGNSP PGUID 12 1 0 0 f f t f i 1 718 "2275" _null_ _null_ _null_ circle_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1451 ( circle_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "718" _null_ _null_ _null_ circle_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1452 ( circle_same PGNSP PGUID 12 1 0 0 f f t f i 2 16 "718 718" _null_ _null_ _null_ circle_same _null_ _null_ _null_ )); DESCR("same as?"); ! DATA(insert OID = 1453 ( circle_contain PGNSP PGUID 12 1 0 0 f f t f i 2 16 "718 718" _null_ _null_ _null_ circle_contain _null_ _null_ _null_ )); DESCR("contains?"); ! DATA(insert OID = 1454 ( circle_left PGNSP PGUID 12 1 0 0 f f t f i 2 16 "718 718" _null_ _null_ _null_ circle_left _null_ _null_ _null_ )); DESCR("is left of"); ! DATA(insert OID = 1455 ( circle_overleft PGNSP PGUID 12 1 0 0 f f t f i 2 16 "718 718" _null_ _null_ _null_ circle_overleft _null_ _null_ _null_ )); DESCR("overlaps or is left of"); ! DATA(insert OID = 1456 ( circle_overright PGNSP PGUID 12 1 0 0 f f t f i 2 16 "718 718" _null_ _null_ _null_ circle_overright _null_ _null_ _null_ )); DESCR("overlaps or is right of"); ! DATA(insert OID = 1457 ( circle_right PGNSP PGUID 12 1 0 0 f f t f i 2 16 "718 718" _null_ _null_ _null_ circle_right _null_ _null_ _null_ )); DESCR("is right of"); ! DATA(insert OID = 1458 ( circle_contained PGNSP PGUID 12 1 0 0 f f t f i 2 16 "718 718" _null_ _null_ _null_ circle_contained _null_ _null_ _null_ )); DESCR("is contained by?"); ! DATA(insert OID = 1459 ( circle_overlap PGNSP PGUID 12 1 0 0 f f t f i 2 16 "718 718" _null_ _null_ _null_ circle_overlap _null_ _null_ _null_ )); DESCR("overlaps"); ! DATA(insert OID = 1460 ( circle_below PGNSP PGUID 12 1 0 0 f f t f i 2 16 "718 718" _null_ _null_ _null_ circle_below _null_ _null_ _null_ )); DESCR("is below"); ! DATA(insert OID = 1461 ( circle_above PGNSP PGUID 12 1 0 0 f f t f i 2 16 "718 718" _null_ _null_ _null_ circle_above _null_ _null_ _null_ )); DESCR("is above"); ! DATA(insert OID = 1462 ( circle_eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "718 718" _null_ _null_ _null_ circle_eq _null_ _null_ _null_ )); DESCR("equal by area"); ! DATA(insert OID = 1463 ( circle_ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "718 718" _null_ _null_ _null_ circle_ne _null_ _null_ _null_ )); DESCR("not equal by area"); ! DATA(insert OID = 1464 ( circle_lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "718 718" _null_ _null_ _null_ circle_lt _null_ _null_ _null_ )); DESCR("less-than by area"); ! DATA(insert OID = 1465 ( circle_gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "718 718" _null_ _null_ _null_ circle_gt _null_ _null_ _null_ )); DESCR("greater-than by area"); ! DATA(insert OID = 1466 ( circle_le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "718 718" _null_ _null_ _null_ circle_le _null_ _null_ _null_ )); DESCR("less-than-or-equal by area"); ! DATA(insert OID = 1467 ( circle_ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "718 718" _null_ _null_ _null_ circle_ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal by area"); ! DATA(insert OID = 1468 ( area PGNSP PGUID 12 1 0 0 f f t f i 1 701 "718" _null_ _null_ _null_ circle_area _null_ _null_ _null_ )); DESCR("area of circle"); ! DATA(insert OID = 1469 ( diameter PGNSP PGUID 12 1 0 0 f f t f i 1 701 "718" _null_ _null_ _null_ circle_diameter _null_ _null_ _null_ )); DESCR("diameter of circle"); ! DATA(insert OID = 1470 ( radius PGNSP PGUID 12 1 0 0 f f t f i 1 701 "718" _null_ _null_ _null_ circle_radius _null_ _null_ _null_ )); DESCR("radius of circle"); ! DATA(insert OID = 1471 ( circle_distance PGNSP PGUID 12 1 0 0 f f t f i 2 701 "718 718" _null_ _null_ _null_ circle_distance _null_ _null_ _null_ )); DESCR("distance between"); ! DATA(insert OID = 1472 ( circle_center PGNSP PGUID 12 1 0 0 f f t f i 1 600 "718" _null_ _null_ _null_ circle_center _null_ _null_ _null_ )); DESCR("center of"); ! DATA(insert OID = 1473 ( circle PGNSP PGUID 12 1 0 0 f f t f i 2 718 "600 701" _null_ _null_ _null_ cr_circle _null_ _null_ _null_ )); DESCR("convert point and radius to circle"); ! DATA(insert OID = 1474 ( circle PGNSP PGUID 12 1 0 0 f f t f i 1 718 "604" _null_ _null_ _null_ poly_circle _null_ _null_ _null_ )); DESCR("convert polygon to circle"); ! DATA(insert OID = 1475 ( polygon PGNSP PGUID 12 1 0 0 f f t f i 2 604 "23 718" _null_ _null_ _null_ circle_poly _null_ _null_ _null_ )); DESCR("convert vertex count and circle to polygon"); ! DATA(insert OID = 1476 ( dist_pc PGNSP PGUID 12 1 0 0 f f t f i 2 701 "600 718" _null_ _null_ _null_ dist_pc _null_ _null_ _null_ )); DESCR("distance between point and circle"); ! DATA(insert OID = 1477 ( circle_contain_pt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "718 600" _null_ _null_ _null_ circle_contain_pt _null_ _null_ _null_ )); DESCR("circle contains point?"); ! DATA(insert OID = 1478 ( pt_contained_circle PGNSP PGUID 12 1 0 0 f f t f i 2 16 "600 718" _null_ _null_ _null_ pt_contained_circle _null_ _null_ _null_ )); DESCR("point contained in circle?"); ! DATA(insert OID = 1479 ( circle PGNSP PGUID 12 1 0 0 f f t f i 1 718 "603" _null_ _null_ _null_ box_circle _null_ _null_ _null_ )); DESCR("convert box to circle"); ! DATA(insert OID = 1480 ( box PGNSP PGUID 12 1 0 0 f f t f i 1 603 "718" _null_ _null_ _null_ circle_box _null_ _null_ _null_ )); DESCR("convert circle to box"); ! DATA(insert OID = 1481 ( tinterval PGNSP PGUID 12 1 0 0 f f t f i 2 704 "702 702" _null_ _null_ _null_ mktinterval _null_ _null_ _null_ )); DESCR("convert to tinterval"); ! DATA(insert OID = 1482 ( lseg_ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "601 601" _null_ _null_ _null_ lseg_ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 1483 ( lseg_lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "601 601" _null_ _null_ _null_ lseg_lt _null_ _null_ _null_ )); DESCR("less-than by length"); ! DATA(insert OID = 1484 ( lseg_le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "601 601" _null_ _null_ _null_ lseg_le _null_ _null_ _null_ )); DESCR("less-than-or-equal by length"); ! DATA(insert OID = 1485 ( lseg_gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "601 601" _null_ _null_ _null_ lseg_gt _null_ _null_ _null_ )); DESCR("greater-than by length"); ! DATA(insert OID = 1486 ( lseg_ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "601 601" _null_ _null_ _null_ lseg_ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal by length"); ! DATA(insert OID = 1487 ( lseg_length PGNSP PGUID 12 1 0 0 f f t f i 1 701 "601" _null_ _null_ _null_ lseg_length _null_ _null_ _null_ )); DESCR("distance between endpoints"); ! DATA(insert OID = 1488 ( close_ls PGNSP PGUID 12 1 0 0 f f t f i 2 600 "628 601" _null_ _null_ _null_ close_ls _null_ _null_ _null_ )); DESCR("closest point to line on line segment"); ! DATA(insert OID = 1489 ( close_lseg PGNSP PGUID 12 1 0 0 f f t f i 2 600 "601 601" _null_ _null_ _null_ close_lseg _null_ _null_ _null_ )); DESCR("closest point to line segment on line segment"); ! DATA(insert OID = 1490 ( line_in PGNSP PGUID 12 1 0 0 f f t f i 1 628 "2275" _null_ _null_ _null_ line_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1491 ( line_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "628" _null_ _null_ _null_ line_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1492 ( line_eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "628 628" _null_ _null_ _null_ line_eq _null_ _null_ _null_ )); DESCR("lines equal?"); ! DATA(insert OID = 1493 ( line PGNSP PGUID 12 1 0 0 f f t f i 2 628 "600 600" _null_ _null_ _null_ line_construct_pp _null_ _null_ _null_ )); DESCR("line from points"); ! DATA(insert OID = 1494 ( line_interpt PGNSP PGUID 12 1 0 0 f f t f i 2 600 "628 628" _null_ _null_ _null_ line_interpt _null_ _null_ _null_ )); DESCR("intersection point"); ! DATA(insert OID = 1495 ( line_intersect PGNSP PGUID 12 1 0 0 f f t f i 2 16 "628 628" _null_ _null_ _null_ line_intersect _null_ _null_ _null_ )); DESCR("intersect?"); ! DATA(insert OID = 1496 ( line_parallel PGNSP PGUID 12 1 0 0 f f t f i 2 16 "628 628" _null_ _null_ _null_ line_parallel _null_ _null_ _null_ )); DESCR("parallel?"); ! DATA(insert OID = 1497 ( line_perp PGNSP PGUID 12 1 0 0 f f t f i 2 16 "628 628" _null_ _null_ _null_ line_perp _null_ _null_ _null_ )); DESCR("perpendicular?"); ! DATA(insert OID = 1498 ( line_vertical PGNSP PGUID 12 1 0 0 f f t f i 1 16 "628" _null_ _null_ _null_ line_vertical _null_ _null_ _null_ )); DESCR("vertical?"); ! DATA(insert OID = 1499 ( line_horizontal PGNSP PGUID 12 1 0 0 f f t f i 1 16 "628" _null_ _null_ _null_ line_horizontal _null_ _null_ _null_ )); DESCR("horizontal?"); /* OIDS 1500 - 1599 */ ! DATA(insert OID = 1530 ( length PGNSP PGUID 12 1 0 0 f f t f i 1 701 "601" _null_ _null_ _null_ lseg_length _null_ _null_ _null_ )); DESCR("distance between endpoints"); ! DATA(insert OID = 1531 ( length PGNSP PGUID 12 1 0 0 f f t f i 1 701 "602" _null_ _null_ _null_ path_length _null_ _null_ _null_ )); DESCR("sum of path segments"); ! DATA(insert OID = 1532 ( point PGNSP PGUID 12 1 0 0 f f t f i 1 600 "601" _null_ _null_ _null_ lseg_center _null_ _null_ _null_ )); DESCR("center of"); ! DATA(insert OID = 1533 ( point PGNSP PGUID 12 1 0 0 f f t f i 1 600 "602" _null_ _null_ _null_ path_center _null_ _null_ _null_ )); DESCR("center of"); ! DATA(insert OID = 1534 ( point PGNSP PGUID 12 1 0 0 f f t f i 1 600 "603" _null_ _null_ _null_ box_center _null_ _null_ _null_ )); DESCR("center of"); ! DATA(insert OID = 1540 ( point PGNSP PGUID 12 1 0 0 f f t f i 1 600 "604" _null_ _null_ _null_ poly_center _null_ _null_ _null_ )); DESCR("center of"); ! DATA(insert OID = 1541 ( lseg PGNSP PGUID 12 1 0 0 f f t f i 1 601 "603" _null_ _null_ _null_ box_diagonal _null_ _null_ _null_ )); DESCR("diagonal of"); ! DATA(insert OID = 1542 ( center PGNSP PGUID 12 1 0 0 f f t f i 1 600 "603" _null_ _null_ _null_ box_center _null_ _null_ _null_ )); DESCR("center of"); ! DATA(insert OID = 1543 ( center PGNSP PGUID 12 1 0 0 f f t f i 1 600 "718" _null_ _null_ _null_ circle_center _null_ _null_ _null_ )); DESCR("center of"); ! DATA(insert OID = 1544 ( polygon PGNSP PGUID 14 1 0 0 f f t f i 1 604 "718" _null_ _null_ _null_ "select pg_catalog.polygon(12, $1)" _null_ _null_ _null_ )); DESCR("convert circle to 12-vertex polygon"); ! DATA(insert OID = 1545 ( npoints PGNSP PGUID 12 1 0 0 f f t f i 1 23 "602" _null_ _null_ _null_ path_npoints _null_ _null_ _null_ )); DESCR("number of points in path"); ! DATA(insert OID = 1556 ( npoints PGNSP PGUID 12 1 0 0 f f t f i 1 23 "604" _null_ _null_ _null_ poly_npoints _null_ _null_ _null_ )); DESCR("number of points in polygon"); ! DATA(insert OID = 1564 ( bit_in PGNSP PGUID 12 1 0 0 f f t f i 3 1560 "2275 26 23" _null_ _null_ _null_ bit_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1565 ( bit_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "1560" _null_ _null_ _null_ bit_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2919 ( bittypmodin PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1263" _null_ _null_ _null_ bittypmodin _null_ _null_ _null_ )); DESCR("I/O typmod"); ! DATA(insert OID = 2920 ( bittypmodout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "23" _null_ _null_ _null_ bittypmodout _null_ _null_ _null_ )); DESCR("I/O typmod"); ! DATA(insert OID = 1569 ( like PGNSP PGUID 12 1 0 0 f f t f i 2 16 "25 25" _null_ _null_ _null_ textlike _null_ _null_ _null_ )); DESCR("matches LIKE expression"); ! DATA(insert OID = 1570 ( notlike PGNSP PGUID 12 1 0 0 f f t f i 2 16 "25 25" _null_ _null_ _null_ textnlike _null_ _null_ _null_ )); DESCR("does not match LIKE expression"); ! DATA(insert OID = 1571 ( like PGNSP PGUID 12 1 0 0 f f t f i 2 16 "19 25" _null_ _null_ _null_ namelike _null_ _null_ _null_ )); DESCR("matches LIKE expression"); ! DATA(insert OID = 1572 ( notlike PGNSP PGUID 12 1 0 0 f f t f i 2 16 "19 25" _null_ _null_ _null_ namenlike _null_ _null_ _null_ )); DESCR("does not match LIKE expression"); /* SEQUENCE functions */ ! DATA(insert OID = 1574 ( nextval PGNSP PGUID 12 1 0 0 f f t f v 1 20 "2205" _null_ _null_ _null_ nextval_oid _null_ _null_ _null_ )); DESCR("sequence next value"); ! DATA(insert OID = 1575 ( currval PGNSP PGUID 12 1 0 0 f f t f v 1 20 "2205" _null_ _null_ _null_ currval_oid _null_ _null_ _null_ )); DESCR("sequence current value"); ! DATA(insert OID = 1576 ( setval PGNSP PGUID 12 1 0 0 f f t f v 2 20 "2205 20" _null_ _null_ _null_ setval_oid _null_ _null_ _null_ )); DESCR("set sequence value"); ! DATA(insert OID = 1765 ( setval PGNSP PGUID 12 1 0 0 f f t f v 3 20 "2205 20 16" _null_ _null_ _null_ setval3_oid _null_ _null_ _null_ )); DESCR("set sequence value and iscalled status"); ! DATA(insert OID = 1579 ( varbit_in PGNSP PGUID 12 1 0 0 f f t f i 3 1562 "2275 26 23" _null_ _null_ _null_ varbit_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1580 ( varbit_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "1562" _null_ _null_ _null_ varbit_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2902 ( varbittypmodin PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1263" _null_ _null_ _null_ varbittypmodin _null_ _null_ _null_ )); DESCR("I/O typmod"); ! DATA(insert OID = 2921 ( varbittypmodout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "23" _null_ _null_ _null_ varbittypmodout _null_ _null_ _null_ )); DESCR("I/O typmod"); ! DATA(insert OID = 1581 ( biteq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1560 1560" _null_ _null_ _null_ biteq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 1582 ( bitne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1560 1560" _null_ _null_ _null_ bitne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 1592 ( bitge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1560 1560" _null_ _null_ _null_ bitge _null_ _null_ _null_ )); DESCR("greater than or equal"); ! DATA(insert OID = 1593 ( bitgt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1560 1560" _null_ _null_ _null_ bitgt _null_ _null_ _null_ )); DESCR("greater than"); ! DATA(insert OID = 1594 ( bitle PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1560 1560" _null_ _null_ _null_ bitle _null_ _null_ _null_ )); DESCR("less than or equal"); ! DATA(insert OID = 1595 ( bitlt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1560 1560" _null_ _null_ _null_ bitlt _null_ _null_ _null_ )); DESCR("less than"); ! DATA(insert OID = 1596 ( bitcmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "1560 1560" _null_ _null_ _null_ bitcmp _null_ _null_ _null_ )); DESCR("compare"); ! DATA(insert OID = 1598 ( random PGNSP PGUID 12 1 0 0 f f t f v 0 701 "" _null_ _null_ _null_ drandom _null_ _null_ _null_ )); DESCR("random value"); ! DATA(insert OID = 1599 ( setseed PGNSP PGUID 12 1 0 0 f f t f v 1 2278 "701" _null_ _null_ _null_ setseed _null_ _null_ _null_ )); DESCR("set random seed"); /* OIDS 1600 - 1699 */ ! DATA(insert OID = 1600 ( asin PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dasin _null_ _null_ _null_ )); DESCR("arcsine"); ! DATA(insert OID = 1601 ( acos PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dacos _null_ _null_ _null_ )); DESCR("arccosine"); ! DATA(insert OID = 1602 ( atan PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ datan _null_ _null_ _null_ )); DESCR("arctangent"); ! DATA(insert OID = 1603 ( atan2 PGNSP PGUID 12 1 0 0 f f t f i 2 701 "701 701" _null_ _null_ _null_ datan2 _null_ _null_ _null_ )); DESCR("arctangent, two arguments"); ! DATA(insert OID = 1604 ( sin PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dsin _null_ _null_ _null_ )); DESCR("sine"); ! DATA(insert OID = 1605 ( cos PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dcos _null_ _null_ _null_ )); DESCR("cosine"); ! DATA(insert OID = 1606 ( tan PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dtan _null_ _null_ _null_ )); DESCR("tangent"); ! DATA(insert OID = 1607 ( cot PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ dcot _null_ _null_ _null_ )); DESCR("cotangent"); ! DATA(insert OID = 1608 ( degrees PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ degrees _null_ _null_ _null_ )); DESCR("radians to degrees"); ! DATA(insert OID = 1609 ( radians PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ radians _null_ _null_ _null_ )); DESCR("degrees to radians"); ! DATA(insert OID = 1610 ( pi PGNSP PGUID 12 1 0 0 f f t f i 0 701 "" _null_ _null_ _null_ dpi _null_ _null_ _null_ )); DESCR("PI"); ! DATA(insert OID = 1618 ( interval_mul PGNSP PGUID 12 1 0 0 f f t f i 2 1186 "1186 701" _null_ _null_ _null_ interval_mul _null_ _null_ _null_ )); DESCR("multiply interval"); ! DATA(insert OID = 1620 ( ascii PGNSP PGUID 12 1 0 0 f f t f i 1 23 "25" _null_ _null_ _null_ ascii _null_ _null_ _null_ )); DESCR("convert first char to int4"); ! DATA(insert OID = 1621 ( chr PGNSP PGUID 12 1 0 0 f f t f i 1 25 "23" _null_ _null_ _null_ chr _null_ _null_ _null_ )); DESCR("convert int4 to char"); ! DATA(insert OID = 1622 ( repeat PGNSP PGUID 12 1 0 0 f f t f i 2 25 "25 23" _null_ _null_ _null_ repeat _null_ _null_ _null_ )); DESCR("replicate string int4 times"); ! DATA(insert OID = 1623 ( similar_escape PGNSP PGUID 12 1 0 0 f f f f i 2 25 "25 25" _null_ _null_ _null_ similar_escape _null_ _null_ _null_ )); DESCR("convert SQL99 regexp pattern to POSIX style"); ! DATA(insert OID = 1624 ( mul_d_interval PGNSP PGUID 12 1 0 0 f f t f i 2 1186 "701 1186" _null_ _null_ _null_ mul_d_interval _null_ _null_ _null_ )); ! DATA(insert OID = 1631 ( bpcharlike PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1042 25" _null_ _null_ _null_ textlike _null_ _null_ _null_ )); DESCR("matches LIKE expression"); ! DATA(insert OID = 1632 ( bpcharnlike PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1042 25" _null_ _null_ _null_ textnlike _null_ _null_ _null_ )); DESCR("does not match LIKE expression"); ! DATA(insert OID = 1633 ( texticlike PGNSP PGUID 12 1 0 0 f f t f i 2 16 "25 25" _null_ _null_ _null_ texticlike _null_ _null_ _null_ )); DESCR("matches LIKE expression, case-insensitive"); ! DATA(insert OID = 1634 ( texticnlike PGNSP PGUID 12 1 0 0 f f t f i 2 16 "25 25" _null_ _null_ _null_ texticnlike _null_ _null_ _null_ )); DESCR("does not match LIKE expression, case-insensitive"); ! DATA(insert OID = 1635 ( nameiclike PGNSP PGUID 12 1 0 0 f f t f i 2 16 "19 25" _null_ _null_ _null_ nameiclike _null_ _null_ _null_ )); DESCR("matches LIKE expression, case-insensitive"); ! DATA(insert OID = 1636 ( nameicnlike PGNSP PGUID 12 1 0 0 f f t f i 2 16 "19 25" _null_ _null_ _null_ nameicnlike _null_ _null_ _null_ )); DESCR("does not match LIKE expression, case-insensitive"); ! DATA(insert OID = 1637 ( like_escape PGNSP PGUID 12 1 0 0 f f t f i 2 25 "25 25" _null_ _null_ _null_ like_escape _null_ _null_ _null_ )); DESCR("convert LIKE pattern to use backslash escapes"); ! DATA(insert OID = 1656 ( bpcharicregexeq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1042 25" _null_ _null_ _null_ texticregexeq _null_ _null_ _null_ )); DESCR("matches regex., case-insensitive"); ! DATA(insert OID = 1657 ( bpcharicregexne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1042 25" _null_ _null_ _null_ texticregexne _null_ _null_ _null_ )); DESCR("does not match regex., case-insensitive"); ! DATA(insert OID = 1658 ( bpcharregexeq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1042 25" _null_ _null_ _null_ textregexeq _null_ _null_ _null_ )); DESCR("matches regex., case-sensitive"); ! DATA(insert OID = 1659 ( bpcharregexne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1042 25" _null_ _null_ _null_ textregexne _null_ _null_ _null_ )); DESCR("does not match regex., case-sensitive"); ! DATA(insert OID = 1660 ( bpchariclike PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1042 25" _null_ _null_ _null_ texticlike _null_ _null_ _null_ )); DESCR("matches LIKE expression, case-insensitive"); ! DATA(insert OID = 1661 ( bpcharicnlike PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1042 25" _null_ _null_ _null_ texticnlike _null_ _null_ _null_ )); DESCR("does not match LIKE expression, case-insensitive"); ! DATA(insert OID = 1689 ( flatfile_update_trigger PGNSP PGUID 12 1 0 0 f f t f v 0 2279 "" _null_ _null_ _null_ flatfile_update_trigger _null_ _null_ _null_ )); DESCR("update flat-file copy of a shared catalog"); /* Oracle Compatibility Related Functions - By Edmund Mergl */ ! DATA(insert OID = 868 ( strpos PGNSP PGUID 12 1 0 0 f f t f i 2 23 "25 25" _null_ _null_ _null_ textpos _null_ _null_ _null_ )); DESCR("find position of substring"); ! DATA(insert OID = 870 ( lower PGNSP PGUID 12 1 0 0 f f t f i 1 25 "25" _null_ _null_ _null_ lower _null_ _null_ _null_ )); DESCR("lowercase"); ! DATA(insert OID = 871 ( upper PGNSP PGUID 12 1 0 0 f f t f i 1 25 "25" _null_ _null_ _null_ upper _null_ _null_ _null_ )); DESCR("uppercase"); ! DATA(insert OID = 872 ( initcap PGNSP PGUID 12 1 0 0 f f t f i 1 25 "25" _null_ _null_ _null_ initcap _null_ _null_ _null_ )); DESCR("capitalize each word"); ! DATA(insert OID = 873 ( lpad PGNSP PGUID 12 1 0 0 f f t f i 3 25 "25 23 25" _null_ _null_ _null_ lpad _null_ _null_ _null_ )); DESCR("left-pad string to length"); ! DATA(insert OID = 874 ( rpad PGNSP PGUID 12 1 0 0 f f t f i 3 25 "25 23 25" _null_ _null_ _null_ rpad _null_ _null_ _null_ )); DESCR("right-pad string to length"); ! DATA(insert OID = 875 ( ltrim PGNSP PGUID 12 1 0 0 f f t f i 2 25 "25 25" _null_ _null_ _null_ ltrim _null_ _null_ _null_ )); DESCR("trim selected characters from left end of string"); ! DATA(insert OID = 876 ( rtrim PGNSP PGUID 12 1 0 0 f f t f i 2 25 "25 25" _null_ _null_ _null_ rtrim _null_ _null_ _null_ )); DESCR("trim selected characters from right end of string"); ! DATA(insert OID = 877 ( substr PGNSP PGUID 12 1 0 0 f f t f i 3 25 "25 23 23" _null_ _null_ _null_ text_substr _null_ _null_ _null_ )); DESCR("return portion of string"); ! DATA(insert OID = 878 ( translate PGNSP PGUID 12 1 0 0 f f t f i 3 25 "25 25 25" _null_ _null_ _null_ translate _null_ _null_ _null_ )); DESCR("map a set of character appearing in string"); ! DATA(insert OID = 879 ( lpad PGNSP PGUID 14 1 0 0 f f t f i 2 25 "25 23" _null_ _null_ _null_ "select pg_catalog.lpad($1, $2, '' '')" _null_ _null_ _null_ )); DESCR("left-pad string to length"); ! DATA(insert OID = 880 ( rpad PGNSP PGUID 14 1 0 0 f f t f i 2 25 "25 23" _null_ _null_ _null_ "select pg_catalog.rpad($1, $2, '' '')" _null_ _null_ _null_ )); DESCR("right-pad string to length"); ! DATA(insert OID = 881 ( ltrim PGNSP PGUID 12 1 0 0 f f t f i 1 25 "25" _null_ _null_ _null_ ltrim1 _null_ _null_ _null_ )); DESCR("trim spaces from left end of string"); ! DATA(insert OID = 882 ( rtrim PGNSP PGUID 12 1 0 0 f f t f i 1 25 "25" _null_ _null_ _null_ rtrim1 _null_ _null_ _null_ )); DESCR("trim spaces from right end of string"); ! DATA(insert OID = 883 ( substr PGNSP PGUID 12 1 0 0 f f t f i 2 25 "25 23" _null_ _null_ _null_ text_substr_no_len _null_ _null_ _null_ )); DESCR("return portion of string"); ! DATA(insert OID = 884 ( btrim PGNSP PGUID 12 1 0 0 f f t f i 2 25 "25 25" _null_ _null_ _null_ btrim _null_ _null_ _null_ )); DESCR("trim selected characters from both ends of string"); ! DATA(insert OID = 885 ( btrim PGNSP PGUID 12 1 0 0 f f t f i 1 25 "25" _null_ _null_ _null_ btrim1 _null_ _null_ _null_ )); DESCR("trim spaces from both ends of string"); ! DATA(insert OID = 936 ( substring PGNSP PGUID 12 1 0 0 f f t f i 3 25 "25 23 23" _null_ _null_ _null_ text_substr _null_ _null_ _null_ )); DESCR("return portion of string"); ! DATA(insert OID = 937 ( substring PGNSP PGUID 12 1 0 0 f f t f i 2 25 "25 23" _null_ _null_ _null_ text_substr_no_len _null_ _null_ _null_ )); DESCR("return portion of string"); ! DATA(insert OID = 2087 ( replace PGNSP PGUID 12 1 0 0 f f t f i 3 25 "25 25 25" _null_ _null_ _null_ replace_text _null_ _null_ _null_ )); DESCR("replace all occurrences in string of old_substr with new_substr"); ! DATA(insert OID = 2284 ( regexp_replace PGNSP PGUID 12 1 0 0 f f t f i 3 25 "25 25 25" _null_ _null_ _null_ textregexreplace_noopt _null_ _null_ _null_ )); DESCR("replace text using regexp"); ! DATA(insert OID = 2285 ( regexp_replace PGNSP PGUID 12 1 0 0 f f t f i 4 25 "25 25 25 25" _null_ _null_ _null_ textregexreplace _null_ _null_ _null_ )); DESCR("replace text using regexp"); ! DATA(insert OID = 2763 ( regexp_matches PGNSP PGUID 12 1 1 0 f f t t i 2 1009 "25 25" _null_ _null_ _null_ regexp_matches_no_flags _null_ _null_ _null_ )); DESCR("return all match groups for regexp"); ! DATA(insert OID = 2764 ( regexp_matches PGNSP PGUID 12 1 10 0 f f t t i 3 1009 "25 25 25" _null_ _null_ _null_ regexp_matches _null_ _null_ _null_ )); DESCR("return all match groups for regexp"); ! DATA(insert OID = 2088 ( split_part PGNSP PGUID 12 1 0 0 f f t f i 3 25 "25 25 23" _null_ _null_ _null_ split_text _null_ _null_ _null_ )); DESCR("split string by field_sep and return field_num"); ! DATA(insert OID = 2765 ( regexp_split_to_table PGNSP PGUID 12 1 1000 0 f f t t i 2 25 "25 25" _null_ _null_ _null_ regexp_split_to_table_no_flags _null_ _null_ _null_ )); DESCR("split string by pattern"); ! DATA(insert OID = 2766 ( regexp_split_to_table PGNSP PGUID 12 1 1000 0 f f t t i 3 25 "25 25 25" _null_ _null_ _null_ regexp_split_to_table _null_ _null_ _null_ )); DESCR("split string by pattern"); ! DATA(insert OID = 2767 ( regexp_split_to_array PGNSP PGUID 12 1 0 0 f f t f i 2 1009 "25 25" _null_ _null_ _null_ regexp_split_to_array_no_flags _null_ _null_ _null_ )); DESCR("split string by pattern"); ! DATA(insert OID = 2768 ( regexp_split_to_array PGNSP PGUID 12 1 0 0 f f t f i 3 1009 "25 25 25" _null_ _null_ _null_ regexp_split_to_array _null_ _null_ _null_ )); DESCR("split string by pattern"); ! DATA(insert OID = 2089 ( to_hex PGNSP PGUID 12 1 0 0 f f t f i 1 25 "23" _null_ _null_ _null_ to_hex32 _null_ _null_ _null_ )); DESCR("convert int4 number to hex"); ! DATA(insert OID = 2090 ( to_hex PGNSP PGUID 12 1 0 0 f f t f i 1 25 "20" _null_ _null_ _null_ to_hex64 _null_ _null_ _null_ )); DESCR("convert int8 number to hex"); /* for character set encoding support */ /* return database encoding name */ ! DATA(insert OID = 1039 ( getdatabaseencoding PGNSP PGUID 12 1 0 0 f f t f s 0 19 "" _null_ _null_ _null_ getdatabaseencoding _null_ _null_ _null_ )); DESCR("encoding name of current database"); /* return client encoding name i.e. session encoding */ ! DATA(insert OID = 810 ( pg_client_encoding PGNSP PGUID 12 1 0 0 f f t f s 0 19 "" _null_ _null_ _null_ pg_client_encoding _null_ _null_ _null_ )); DESCR("encoding name of current database"); ! DATA(insert OID = 1713 ( length PGNSP PGUID 12 1 0 0 f f t f s 2 23 "17 19" _null_ _null_ _null_ length_in_encoding _null_ _null_ _null_ )); DESCR("length of string in specified encoding"); ! DATA(insert OID = 1714 ( convert_from PGNSP PGUID 12 1 0 0 f f t f s 2 25 "17 19" _null_ _null_ _null_ pg_convert_from _null_ _null_ _null_ )); DESCR("convert string with specified source encoding name"); ! DATA(insert OID = 1717 ( convert_to PGNSP PGUID 12 1 0 0 f f t f s 2 17 "25 19" _null_ _null_ _null_ pg_convert_to _null_ _null_ _null_ )); DESCR("convert string with specified destination encoding name"); ! DATA(insert OID = 1813 ( convert PGNSP PGUID 12 1 0 0 f f t f s 3 17 "17 19 19" _null_ _null_ _null_ pg_convert _null_ _null_ _null_ )); DESCR("convert string with specified encoding names"); ! DATA(insert OID = 1264 ( pg_char_to_encoding PGNSP PGUID 12 1 0 0 f f t f s 1 23 "19" _null_ _null_ _null_ PG_char_to_encoding _null_ _null_ _null_ )); DESCR("convert encoding name to encoding id"); ! DATA(insert OID = 1597 ( pg_encoding_to_char PGNSP PGUID 12 1 0 0 f f t f s 1 19 "23" _null_ _null_ _null_ PG_encoding_to_char _null_ _null_ _null_ )); DESCR("convert encoding id to encoding name"); ! DATA(insert OID = 1638 ( oidgt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "26 26" _null_ _null_ _null_ oidgt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 1639 ( oidge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "26 26" _null_ _null_ _null_ oidge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); /* System-view support functions */ ! DATA(insert OID = 1573 ( pg_get_ruledef PGNSP PGUID 12 1 0 0 f f t f s 1 25 "26" _null_ _null_ _null_ pg_get_ruledef _null_ _null_ _null_ )); DESCR("source text of a rule"); ! DATA(insert OID = 1640 ( pg_get_viewdef PGNSP PGUID 12 1 0 0 f f t f s 1 25 "25" _null_ _null_ _null_ pg_get_viewdef_name _null_ _null_ _null_ )); DESCR("select statement of a view"); ! DATA(insert OID = 1641 ( pg_get_viewdef PGNSP PGUID 12 1 0 0 f f t f s 1 25 "26" _null_ _null_ _null_ pg_get_viewdef _null_ _null_ _null_ )); DESCR("select statement of a view"); ! DATA(insert OID = 1642 ( pg_get_userbyid PGNSP PGUID 12 1 0 0 f f t f s 1 19 "26" _null_ _null_ _null_ pg_get_userbyid _null_ _null_ _null_ )); DESCR("role name by OID (with fallback)"); ! DATA(insert OID = 1643 ( pg_get_indexdef PGNSP PGUID 12 1 0 0 f f t f s 1 25 "26" _null_ _null_ _null_ pg_get_indexdef _null_ _null_ _null_ )); DESCR("index description"); ! DATA(insert OID = 1662 ( pg_get_triggerdef PGNSP PGUID 12 1 0 0 f f t f s 1 25 "26" _null_ _null_ _null_ pg_get_triggerdef _null_ _null_ _null_ )); DESCR("trigger description"); ! DATA(insert OID = 1387 ( pg_get_constraintdef PGNSP PGUID 12 1 0 0 f f t f s 1 25 "26" _null_ _null_ _null_ pg_get_constraintdef _null_ _null_ _null_ )); DESCR("constraint description"); ! DATA(insert OID = 1716 ( pg_get_expr PGNSP PGUID 12 1 0 0 f f t f s 2 25 "25 26" _null_ _null_ _null_ pg_get_expr _null_ _null_ _null_ )); DESCR("deparse an encoded expression"); ! DATA(insert OID = 1665 ( pg_get_serial_sequence PGNSP PGUID 12 1 0 0 f f t f s 2 25 "25 25" _null_ _null_ _null_ pg_get_serial_sequence _null_ _null_ _null_ )); DESCR("name of sequence for a serial column"); ! DATA(insert OID = 2098 ( pg_get_functiondef PGNSP PGUID 12 1 0 0 f f t f s 1 25 "26" _null_ _null_ _null_ pg_get_functiondef _null_ _null_ _null_ )); DESCR("definition of a function"); ! DATA(insert OID = 2162 ( pg_get_function_arguments PGNSP PGUID 12 1 0 0 f f t f s 1 25 "26" _null_ _null_ _null_ pg_get_function_arguments _null_ _null_ _null_ )); DESCR("argument list of a function"); ! DATA(insert OID = 2165 ( pg_get_function_result PGNSP PGUID 12 1 0 0 f f t f s 1 25 "26" _null_ _null_ _null_ pg_get_function_result _null_ _null_ _null_ )); DESCR("result type of a function"); ! DATA(insert OID = 1686 ( pg_get_keywords PGNSP PGUID 12 10 400 0 f f t t s 0 2249 "" "{25,18,25}" "{o,o,o}" "{word,catcode,catdesc}" pg_get_keywords _null_ _null_ _null_ )); DESCR("list of SQL keywords"); /* Generic referential integrity constraint triggers */ ! DATA(insert OID = 1644 ( RI_FKey_check_ins PGNSP PGUID 12 1 0 0 f f t f v 0 2279 "" _null_ _null_ _null_ RI_FKey_check_ins _null_ _null_ _null_ )); DESCR("referential integrity FOREIGN KEY ... REFERENCES"); ! DATA(insert OID = 1645 ( RI_FKey_check_upd PGNSP PGUID 12 1 0 0 f f t f v 0 2279 "" _null_ _null_ _null_ RI_FKey_check_upd _null_ _null_ _null_ )); DESCR("referential integrity FOREIGN KEY ... REFERENCES"); ! DATA(insert OID = 1646 ( RI_FKey_cascade_del PGNSP PGUID 12 1 0 0 f f t f v 0 2279 "" _null_ _null_ _null_ RI_FKey_cascade_del _null_ _null_ _null_ )); DESCR("referential integrity ON DELETE CASCADE"); ! DATA(insert OID = 1647 ( RI_FKey_cascade_upd PGNSP PGUID 12 1 0 0 f f t f v 0 2279 "" _null_ _null_ _null_ RI_FKey_cascade_upd _null_ _null_ _null_ )); DESCR("referential integrity ON UPDATE CASCADE"); ! DATA(insert OID = 1648 ( RI_FKey_restrict_del PGNSP PGUID 12 1 0 0 f f t f v 0 2279 "" _null_ _null_ _null_ RI_FKey_restrict_del _null_ _null_ _null_ )); DESCR("referential integrity ON DELETE RESTRICT"); ! DATA(insert OID = 1649 ( RI_FKey_restrict_upd PGNSP PGUID 12 1 0 0 f f t f v 0 2279 "" _null_ _null_ _null_ RI_FKey_restrict_upd _null_ _null_ _null_ )); DESCR("referential integrity ON UPDATE RESTRICT"); ! DATA(insert OID = 1650 ( RI_FKey_setnull_del PGNSP PGUID 12 1 0 0 f f t f v 0 2279 "" _null_ _null_ _null_ RI_FKey_setnull_del _null_ _null_ _null_ )); DESCR("referential integrity ON DELETE SET NULL"); ! DATA(insert OID = 1651 ( RI_FKey_setnull_upd PGNSP PGUID 12 1 0 0 f f t f v 0 2279 "" _null_ _null_ _null_ RI_FKey_setnull_upd _null_ _null_ _null_ )); DESCR("referential integrity ON UPDATE SET NULL"); ! DATA(insert OID = 1652 ( RI_FKey_setdefault_del PGNSP PGUID 12 1 0 0 f f t f v 0 2279 "" _null_ _null_ _null_ RI_FKey_setdefault_del _null_ _null_ _null_ )); DESCR("referential integrity ON DELETE SET DEFAULT"); ! DATA(insert OID = 1653 ( RI_FKey_setdefault_upd PGNSP PGUID 12 1 0 0 f f t f v 0 2279 "" _null_ _null_ _null_ RI_FKey_setdefault_upd _null_ _null_ _null_ )); DESCR("referential integrity ON UPDATE SET DEFAULT"); ! DATA(insert OID = 1654 ( RI_FKey_noaction_del PGNSP PGUID 12 1 0 0 f f t f v 0 2279 "" _null_ _null_ _null_ RI_FKey_noaction_del _null_ _null_ _null_ )); DESCR("referential integrity ON DELETE NO ACTION"); ! DATA(insert OID = 1655 ( RI_FKey_noaction_upd PGNSP PGUID 12 1 0 0 f f t f v 0 2279 "" _null_ _null_ _null_ RI_FKey_noaction_upd _null_ _null_ _null_ )); DESCR("referential integrity ON UPDATE NO ACTION"); ! DATA(insert OID = 1666 ( varbiteq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1562 1562" _null_ _null_ _null_ biteq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 1667 ( varbitne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1562 1562" _null_ _null_ _null_ bitne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 1668 ( varbitge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1562 1562" _null_ _null_ _null_ bitge _null_ _null_ _null_ )); DESCR("greater than or equal"); ! DATA(insert OID = 1669 ( varbitgt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1562 1562" _null_ _null_ _null_ bitgt _null_ _null_ _null_ )); DESCR("greater than"); ! DATA(insert OID = 1670 ( varbitle PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1562 1562" _null_ _null_ _null_ bitle _null_ _null_ _null_ )); DESCR("less than or equal"); ! DATA(insert OID = 1671 ( varbitlt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1562 1562" _null_ _null_ _null_ bitlt _null_ _null_ _null_ )); DESCR("less than"); ! DATA(insert OID = 1672 ( varbitcmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "1562 1562" _null_ _null_ _null_ bitcmp _null_ _null_ _null_ )); DESCR("compare"); ! DATA(insert OID = 1673 ( bitand PGNSP PGUID 12 1 0 0 f f t f i 2 1560 "1560 1560" _null_ _null_ _null_ bitand _null_ _null_ _null_ )); DESCR("bitwise and"); ! DATA(insert OID = 1674 ( bitor PGNSP PGUID 12 1 0 0 f f t f i 2 1560 "1560 1560" _null_ _null_ _null_ bitor _null_ _null_ _null_ )); DESCR("bitwise or"); ! DATA(insert OID = 1675 ( bitxor PGNSP PGUID 12 1 0 0 f f t f i 2 1560 "1560 1560" _null_ _null_ _null_ bitxor _null_ _null_ _null_ )); DESCR("bitwise exclusive or"); ! DATA(insert OID = 1676 ( bitnot PGNSP PGUID 12 1 0 0 f f t f i 1 1560 "1560" _null_ _null_ _null_ bitnot _null_ _null_ _null_ )); DESCR("bitwise not"); ! DATA(insert OID = 1677 ( bitshiftleft PGNSP PGUID 12 1 0 0 f f t f i 2 1560 "1560 23" _null_ _null_ _null_ bitshiftleft _null_ _null_ _null_ )); DESCR("bitwise left shift"); ! DATA(insert OID = 1678 ( bitshiftright PGNSP PGUID 12 1 0 0 f f t f i 2 1560 "1560 23" _null_ _null_ _null_ bitshiftright _null_ _null_ _null_ )); DESCR("bitwise right shift"); ! DATA(insert OID = 1679 ( bitcat PGNSP PGUID 12 1 0 0 f f t f i 2 1562 "1562 1562" _null_ _null_ _null_ bitcat _null_ _null_ _null_ )); DESCR("bitwise concatenation"); ! DATA(insert OID = 1680 ( substring PGNSP PGUID 12 1 0 0 f f t f i 3 1560 "1560 23 23" _null_ _null_ _null_ bitsubstr _null_ _null_ _null_ )); DESCR("return portion of bitstring"); ! DATA(insert OID = 1681 ( length PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1560" _null_ _null_ _null_ bitlength _null_ _null_ _null_ )); DESCR("bitstring length"); ! DATA(insert OID = 1682 ( octet_length PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1560" _null_ _null_ _null_ bitoctetlength _null_ _null_ _null_ )); DESCR("octet length"); ! DATA(insert OID = 1683 ( bit PGNSP PGUID 12 1 0 0 f f t f i 2 1560 "23 23" _null_ _null_ _null_ bitfromint4 _null_ _null_ _null_ )); DESCR("int4 to bitstring"); ! DATA(insert OID = 1684 ( int4 PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1560" _null_ _null_ _null_ bittoint4 _null_ _null_ _null_ )); DESCR("bitstring to int4"); ! DATA(insert OID = 1685 ( bit PGNSP PGUID 12 1 0 0 f f t f i 3 1560 "1560 23 16" _null_ _null_ _null_ bit _null_ _null_ _null_ )); DESCR("adjust bit() to typmod length"); ! DATA(insert OID = 1687 ( varbit PGNSP PGUID 12 1 0 0 f f t f i 3 1562 "1562 23 16" _null_ _null_ _null_ varbit _null_ _null_ _null_ )); DESCR("adjust varbit() to typmod length"); ! DATA(insert OID = 1698 ( position PGNSP PGUID 12 1 0 0 f f t f i 2 23 "1560 1560" _null_ _null_ _null_ bitposition _null_ _null_ _null_ )); DESCR("return position of sub-bitstring"); ! DATA(insert OID = 1699 ( substring PGNSP PGUID 14 1 0 0 f f t f i 2 1560 "1560 23" _null_ _null_ _null_ "select pg_catalog.substring($1, $2, -1)" _null_ _null_ _null_ )); DESCR("return portion of bitstring"); /* for mac type support */ ! DATA(insert OID = 436 ( macaddr_in PGNSP PGUID 12 1 0 0 f f t f i 1 829 "2275" _null_ _null_ _null_ macaddr_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 437 ( macaddr_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "829" _null_ _null_ _null_ macaddr_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 753 ( trunc PGNSP PGUID 12 1 0 0 f f t f i 1 829 "829" _null_ _null_ _null_ macaddr_trunc _null_ _null_ _null_ )); DESCR("MAC manufacturer fields"); ! DATA(insert OID = 830 ( macaddr_eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "829 829" _null_ _null_ _null_ macaddr_eq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 831 ( macaddr_lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "829 829" _null_ _null_ _null_ macaddr_lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 832 ( macaddr_le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "829 829" _null_ _null_ _null_ macaddr_le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 833 ( macaddr_gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "829 829" _null_ _null_ _null_ macaddr_gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 834 ( macaddr_ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "829 829" _null_ _null_ _null_ macaddr_ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 835 ( macaddr_ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "829 829" _null_ _null_ _null_ macaddr_ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 836 ( macaddr_cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "829 829" _null_ _null_ _null_ macaddr_cmp _null_ _null_ _null_ )); DESCR("less-equal-greater"); /* for inet type support */ ! DATA(insert OID = 910 ( inet_in PGNSP PGUID 12 1 0 0 f f t f i 1 869 "2275" _null_ _null_ _null_ inet_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 911 ( inet_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "869" _null_ _null_ _null_ inet_out _null_ _null_ _null_ )); DESCR("I/O"); /* for cidr type support */ ! DATA(insert OID = 1267 ( cidr_in PGNSP PGUID 12 1 0 0 f f t f i 1 650 "2275" _null_ _null_ _null_ cidr_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1427 ( cidr_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "650" _null_ _null_ _null_ cidr_out _null_ _null_ _null_ )); DESCR("I/O"); /* these are used for both inet and cidr */ ! DATA(insert OID = 920 ( network_eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "869 869" _null_ _null_ _null_ network_eq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 921 ( network_lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "869 869" _null_ _null_ _null_ network_lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 922 ( network_le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "869 869" _null_ _null_ _null_ network_le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 923 ( network_gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "869 869" _null_ _null_ _null_ network_gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 924 ( network_ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "869 869" _null_ _null_ _null_ network_ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 925 ( network_ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "869 869" _null_ _null_ _null_ network_ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 926 ( network_cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "869 869" _null_ _null_ _null_ network_cmp _null_ _null_ _null_ )); DESCR("less-equal-greater"); ! DATA(insert OID = 927 ( network_sub PGNSP PGUID 12 1 0 0 f f t f i 2 16 "869 869" _null_ _null_ _null_ network_sub _null_ _null_ _null_ )); DESCR("is-subnet"); ! DATA(insert OID = 928 ( network_subeq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "869 869" _null_ _null_ _null_ network_subeq _null_ _null_ _null_ )); DESCR("is-subnet-or-equal"); ! DATA(insert OID = 929 ( network_sup PGNSP PGUID 12 1 0 0 f f t f i 2 16 "869 869" _null_ _null_ _null_ network_sup _null_ _null_ _null_ )); DESCR("is-supernet"); ! DATA(insert OID = 930 ( network_supeq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "869 869" _null_ _null_ _null_ network_supeq _null_ _null_ _null_ )); DESCR("is-supernet-or-equal"); /* inet/cidr functions */ ! DATA(insert OID = 598 ( abbrev PGNSP PGUID 12 1 0 0 f f t f i 1 25 "869" _null_ _null_ _null_ inet_abbrev _null_ _null_ _null_ )); DESCR("abbreviated display of inet value"); ! DATA(insert OID = 599 ( abbrev PGNSP PGUID 12 1 0 0 f f t f i 1 25 "650" _null_ _null_ _null_ cidr_abbrev _null_ _null_ _null_ )); DESCR("abbreviated display of cidr value"); ! DATA(insert OID = 605 ( set_masklen PGNSP PGUID 12 1 0 0 f f t f i 2 869 "869 23" _null_ _null_ _null_ inet_set_masklen _null_ _null_ _null_ )); DESCR("change netmask of inet"); ! DATA(insert OID = 635 ( set_masklen PGNSP PGUID 12 1 0 0 f f t f i 2 650 "650 23" _null_ _null_ _null_ cidr_set_masklen _null_ _null_ _null_ )); DESCR("change netmask of cidr"); ! DATA(insert OID = 711 ( family PGNSP PGUID 12 1 0 0 f f t f i 1 23 "869" _null_ _null_ _null_ network_family _null_ _null_ _null_ )); DESCR("address family (4 for IPv4, 6 for IPv6)"); ! DATA(insert OID = 683 ( network PGNSP PGUID 12 1 0 0 f f t f i 1 650 "869" _null_ _null_ _null_ network_network _null_ _null_ _null_ )); DESCR("network part of address"); ! DATA(insert OID = 696 ( netmask PGNSP PGUID 12 1 0 0 f f t f i 1 869 "869" _null_ _null_ _null_ network_netmask _null_ _null_ _null_ )); DESCR("netmask of address"); ! DATA(insert OID = 697 ( masklen PGNSP PGUID 12 1 0 0 f f t f i 1 23 "869" _null_ _null_ _null_ network_masklen _null_ _null_ _null_ )); DESCR("netmask length"); ! DATA(insert OID = 698 ( broadcast PGNSP PGUID 12 1 0 0 f f t f i 1 869 "869" _null_ _null_ _null_ network_broadcast _null_ _null_ _null_ )); DESCR("broadcast address of network"); ! DATA(insert OID = 699 ( host PGNSP PGUID 12 1 0 0 f f t f i 1 25 "869" _null_ _null_ _null_ network_host _null_ _null_ _null_ )); DESCR("show address octets only"); ! DATA(insert OID = 730 ( text PGNSP PGUID 12 1 0 0 f f t f i 1 25 "869" _null_ _null_ _null_ network_show _null_ _null_ _null_ )); DESCR("show all parts of inet/cidr value"); ! DATA(insert OID = 1362 ( hostmask PGNSP PGUID 12 1 0 0 f f t f i 1 869 "869" _null_ _null_ _null_ network_hostmask _null_ _null_ _null_ )); DESCR("hostmask of address"); ! DATA(insert OID = 1715 ( cidr PGNSP PGUID 12 1 0 0 f f t f i 1 650 "869" _null_ _null_ _null_ inet_to_cidr _null_ _null_ _null_ )); DESCR("coerce inet to cidr"); ! DATA(insert OID = 2196 ( inet_client_addr PGNSP PGUID 12 1 0 0 f f f f s 0 869 "" _null_ _null_ _null_ inet_client_addr _null_ _null_ _null_ )); DESCR("inet address of the client"); ! DATA(insert OID = 2197 ( inet_client_port PGNSP PGUID 12 1 0 0 f f f f s 0 23 "" _null_ _null_ _null_ inet_client_port _null_ _null_ _null_ )); DESCR("client's port number for this connection"); ! DATA(insert OID = 2198 ( inet_server_addr PGNSP PGUID 12 1 0 0 f f f f s 0 869 "" _null_ _null_ _null_ inet_server_addr _null_ _null_ _null_ )); DESCR("inet address of the server"); ! DATA(insert OID = 2199 ( inet_server_port PGNSP PGUID 12 1 0 0 f f f f s 0 23 "" _null_ _null_ _null_ inet_server_port _null_ _null_ _null_ )); DESCR("server's port number for this connection"); ! DATA(insert OID = 2627 ( inetnot PGNSP PGUID 12 1 0 0 f f t f i 1 869 "869" _null_ _null_ _null_ inetnot _null_ _null_ _null_ )); DESCR("bitwise not"); ! DATA(insert OID = 2628 ( inetand PGNSP PGUID 12 1 0 0 f f t f i 2 869 "869 869" _null_ _null_ _null_ inetand _null_ _null_ _null_ )); DESCR("bitwise and"); ! DATA(insert OID = 2629 ( inetor PGNSP PGUID 12 1 0 0 f f t f i 2 869 "869 869" _null_ _null_ _null_ inetor _null_ _null_ _null_ )); DESCR("bitwise or"); ! DATA(insert OID = 2630 ( inetpl PGNSP PGUID 12 1 0 0 f f t f i 2 869 "869 20" _null_ _null_ _null_ inetpl _null_ _null_ _null_ )); DESCR("add integer to inet value"); ! DATA(insert OID = 2631 ( int8pl_inet PGNSP PGUID 14 1 0 0 f f t f i 2 869 "20 869" _null_ _null_ _null_ "select $2 + $1" _null_ _null_ _null_ )); DESCR("add integer to inet value"); ! DATA(insert OID = 2632 ( inetmi_int8 PGNSP PGUID 12 1 0 0 f f t f i 2 869 "869 20" _null_ _null_ _null_ inetmi_int8 _null_ _null_ _null_ )); DESCR("subtract integer from inet value"); ! DATA(insert OID = 2633 ( inetmi PGNSP PGUID 12 1 0 0 f f t f i 2 20 "869 869" _null_ _null_ _null_ inetmi _null_ _null_ _null_ )); DESCR("subtract inet values"); ! DATA(insert OID = 1690 ( time_mi_time PGNSP PGUID 12 1 0 0 f f t f i 2 1186 "1083 1083" _null_ _null_ _null_ time_mi_time _null_ _null_ _null_ )); DESCR("minus"); ! DATA(insert OID = 1691 ( boolle PGNSP PGUID 12 1 0 0 f f t f i 2 16 "16 16" _null_ _null_ _null_ boolle _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 1692 ( boolge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "16 16" _null_ _null_ _null_ boolge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 1693 ( btboolcmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "16 16" _null_ _null_ _null_ btboolcmp _null_ _null_ _null_ )); DESCR("btree less-equal-greater"); ! DATA(insert OID = 1688 ( time_hash PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1083" _null_ _null_ _null_ time_hash _null_ _null_ _null_ )); DESCR("hash"); ! DATA(insert OID = 1696 ( timetz_hash PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1266" _null_ _null_ _null_ timetz_hash _null_ _null_ _null_ )); DESCR("hash"); ! DATA(insert OID = 1697 ( interval_hash PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1186" _null_ _null_ _null_ interval_hash _null_ _null_ _null_ )); DESCR("hash"); /* OID's 1700 - 1799 NUMERIC data type */ ! DATA(insert OID = 1701 ( numeric_in PGNSP PGUID 12 1 0 0 f f t f i 3 1700 "2275 26 23" _null_ _null_ _null_ numeric_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1702 ( numeric_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "1700" _null_ _null_ _null_ numeric_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2917 ( numerictypmodin PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1263" _null_ _null_ _null_ numerictypmodin _null_ _null_ _null_ )); DESCR("I/O typmod"); ! DATA(insert OID = 2918 ( numerictypmodout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "23" _null_ _null_ _null_ numerictypmodout _null_ _null_ _null_ )); DESCR("I/O typmod"); ! DATA(insert OID = 1703 ( numeric PGNSP PGUID 12 1 0 0 f f t f i 2 1700 "1700 23" _null_ _null_ _null_ numeric _null_ _null_ _null_ )); DESCR("adjust numeric to typmod precision/scale"); ! DATA(insert OID = 1704 ( numeric_abs PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "1700" _null_ _null_ _null_ numeric_abs _null_ _null_ _null_ )); DESCR("absolute value"); ! DATA(insert OID = 1705 ( abs PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "1700" _null_ _null_ _null_ numeric_abs _null_ _null_ _null_ )); DESCR("absolute value"); ! DATA(insert OID = 1706 ( sign PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "1700" _null_ _null_ _null_ numeric_sign _null_ _null_ _null_ )); DESCR("sign of value"); ! DATA(insert OID = 1707 ( round PGNSP PGUID 12 1 0 0 f f t f i 2 1700 "1700 23" _null_ _null_ _null_ numeric_round _null_ _null_ _null_ )); DESCR("value rounded to 'scale'"); ! DATA(insert OID = 1708 ( round PGNSP PGUID 14 1 0 0 f f t f i 1 1700 "1700" _null_ _null_ _null_ "select pg_catalog.round($1,0)" _null_ _null_ _null_ )); DESCR("value rounded to 'scale' of zero"); ! DATA(insert OID = 1709 ( trunc PGNSP PGUID 12 1 0 0 f f t f i 2 1700 "1700 23" _null_ _null_ _null_ numeric_trunc _null_ _null_ _null_ )); DESCR("value truncated to 'scale'"); ! DATA(insert OID = 1710 ( trunc PGNSP PGUID 14 1 0 0 f f t f i 1 1700 "1700" _null_ _null_ _null_ "select pg_catalog.trunc($1,0)" _null_ _null_ _null_ )); DESCR("value truncated to 'scale' of zero"); ! DATA(insert OID = 1711 ( ceil PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "1700" _null_ _null_ _null_ numeric_ceil _null_ _null_ _null_ )); DESCR("smallest integer >= value"); ! DATA(insert OID = 2167 ( ceiling PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "1700" _null_ _null_ _null_ numeric_ceil _null_ _null_ _null_ )); DESCR("smallest integer >= value"); ! DATA(insert OID = 1712 ( floor PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "1700" _null_ _null_ _null_ numeric_floor _null_ _null_ _null_ )); DESCR("largest integer <= value"); ! DATA(insert OID = 1718 ( numeric_eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1700 1700" _null_ _null_ _null_ numeric_eq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 1719 ( numeric_ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1700 1700" _null_ _null_ _null_ numeric_ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 1720 ( numeric_gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1700 1700" _null_ _null_ _null_ numeric_gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 1721 ( numeric_ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1700 1700" _null_ _null_ _null_ numeric_ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 1722 ( numeric_lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1700 1700" _null_ _null_ _null_ numeric_lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 1723 ( numeric_le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1700 1700" _null_ _null_ _null_ numeric_le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 1724 ( numeric_add PGNSP PGUID 12 1 0 0 f f t f i 2 1700 "1700 1700" _null_ _null_ _null_ numeric_add _null_ _null_ _null_ )); DESCR("add"); ! DATA(insert OID = 1725 ( numeric_sub PGNSP PGUID 12 1 0 0 f f t f i 2 1700 "1700 1700" _null_ _null_ _null_ numeric_sub _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 1726 ( numeric_mul PGNSP PGUID 12 1 0 0 f f t f i 2 1700 "1700 1700" _null_ _null_ _null_ numeric_mul _null_ _null_ _null_ )); DESCR("multiply"); ! DATA(insert OID = 1727 ( numeric_div PGNSP PGUID 12 1 0 0 f f t f i 2 1700 "1700 1700" _null_ _null_ _null_ numeric_div _null_ _null_ _null_ )); DESCR("divide"); ! DATA(insert OID = 1728 ( mod PGNSP PGUID 12 1 0 0 f f t f i 2 1700 "1700 1700" _null_ _null_ _null_ numeric_mod _null_ _null_ _null_ )); DESCR("modulus"); ! DATA(insert OID = 1729 ( numeric_mod PGNSP PGUID 12 1 0 0 f f t f i 2 1700 "1700 1700" _null_ _null_ _null_ numeric_mod _null_ _null_ _null_ )); DESCR("modulus"); ! DATA(insert OID = 1730 ( sqrt PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "1700" _null_ _null_ _null_ numeric_sqrt _null_ _null_ _null_ )); DESCR("square root"); ! DATA(insert OID = 1731 ( numeric_sqrt PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "1700" _null_ _null_ _null_ numeric_sqrt _null_ _null_ _null_ )); DESCR("square root"); ! DATA(insert OID = 1732 ( exp PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "1700" _null_ _null_ _null_ numeric_exp _null_ _null_ _null_ )); DESCR("e raised to the power of n"); ! DATA(insert OID = 1733 ( numeric_exp PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "1700" _null_ _null_ _null_ numeric_exp _null_ _null_ _null_ )); DESCR("e raised to the power of n"); ! DATA(insert OID = 1734 ( ln PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "1700" _null_ _null_ _null_ numeric_ln _null_ _null_ _null_ )); DESCR("natural logarithm of n"); ! DATA(insert OID = 1735 ( numeric_ln PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "1700" _null_ _null_ _null_ numeric_ln _null_ _null_ _null_ )); DESCR("natural logarithm of n"); ! DATA(insert OID = 1736 ( log PGNSP PGUID 12 1 0 0 f f t f i 2 1700 "1700 1700" _null_ _null_ _null_ numeric_log _null_ _null_ _null_ )); DESCR("logarithm base m of n"); ! DATA(insert OID = 1737 ( numeric_log PGNSP PGUID 12 1 0 0 f f t f i 2 1700 "1700 1700" _null_ _null_ _null_ numeric_log _null_ _null_ _null_ )); DESCR("logarithm base m of n"); ! DATA(insert OID = 1738 ( pow PGNSP PGUID 12 1 0 0 f f t f i 2 1700 "1700 1700" _null_ _null_ _null_ numeric_power _null_ _null_ _null_ )); DESCR("m raised to the power of n"); ! DATA(insert OID = 2169 ( power PGNSP PGUID 12 1 0 0 f f t f i 2 1700 "1700 1700" _null_ _null_ _null_ numeric_power _null_ _null_ _null_ )); DESCR("m raised to the power of n"); ! DATA(insert OID = 1739 ( numeric_power PGNSP PGUID 12 1 0 0 f f t f i 2 1700 "1700 1700" _null_ _null_ _null_ numeric_power _null_ _null_ _null_ )); DESCR("m raised to the power of n"); ! DATA(insert OID = 1740 ( numeric PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "23" _null_ _null_ _null_ int4_numeric _null_ _null_ _null_ )); DESCR("(internal)"); ! DATA(insert OID = 1741 ( log PGNSP PGUID 14 1 0 0 f f t f i 1 1700 "1700" _null_ _null_ _null_ "select pg_catalog.log(10, $1)" _null_ _null_ _null_ )); DESCR("logarithm base 10 of n"); ! DATA(insert OID = 1742 ( numeric PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "700" _null_ _null_ _null_ float4_numeric _null_ _null_ _null_ )); DESCR("(internal)"); ! DATA(insert OID = 1743 ( numeric PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "701" _null_ _null_ _null_ float8_numeric _null_ _null_ _null_ )); DESCR("(internal)"); ! DATA(insert OID = 1744 ( int4 PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1700" _null_ _null_ _null_ numeric_int4 _null_ _null_ _null_ )); DESCR("(internal)"); ! DATA(insert OID = 1745 ( float4 PGNSP PGUID 12 1 0 0 f f t f i 1 700 "1700" _null_ _null_ _null_ numeric_float4 _null_ _null_ _null_ )); DESCR("(internal)"); ! DATA(insert OID = 1746 ( float8 PGNSP PGUID 12 1 0 0 f f t f i 1 701 "1700" _null_ _null_ _null_ numeric_float8 _null_ _null_ _null_ )); DESCR("(internal)"); ! DATA(insert OID = 1973 ( div PGNSP PGUID 12 1 0 0 f f t f i 2 1700 "1700 1700" _null_ _null_ _null_ numeric_div_trunc _null_ _null_ _null_ )); DESCR("trunc(x/y)"); ! DATA(insert OID = 1980 ( numeric_div_trunc PGNSP PGUID 12 1 0 0 f f t f i 2 1700 "1700 1700" _null_ _null_ _null_ numeric_div_trunc _null_ _null_ _null_ )); DESCR("trunc(x/y)"); ! DATA(insert OID = 2170 ( width_bucket PGNSP PGUID 12 1 0 0 f f t f i 4 23 "1700 1700 1700 23" _null_ _null_ _null_ width_bucket_numeric _null_ _null_ _null_ )); DESCR("bucket number of operand in equidepth histogram"); ! DATA(insert OID = 1747 ( time_pl_interval PGNSP PGUID 12 1 0 0 f f t f i 2 1083 "1083 1186" _null_ _null_ _null_ time_pl_interval _null_ _null_ _null_ )); DESCR("plus"); ! DATA(insert OID = 1748 ( time_mi_interval PGNSP PGUID 12 1 0 0 f f t f i 2 1083 "1083 1186" _null_ _null_ _null_ time_mi_interval _null_ _null_ _null_ )); DESCR("minus"); ! DATA(insert OID = 1749 ( timetz_pl_interval PGNSP PGUID 12 1 0 0 f f t f i 2 1266 "1266 1186" _null_ _null_ _null_ timetz_pl_interval _null_ _null_ _null_ )); DESCR("plus"); ! DATA(insert OID = 1750 ( timetz_mi_interval PGNSP PGUID 12 1 0 0 f f t f i 2 1266 "1266 1186" _null_ _null_ _null_ timetz_mi_interval _null_ _null_ _null_ )); DESCR("minus"); ! DATA(insert OID = 1764 ( numeric_inc PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "1700" _null_ _null_ _null_ numeric_inc _null_ _null_ _null_ )); DESCR("increment by one"); ! DATA(insert OID = 1766 ( numeric_smaller PGNSP PGUID 12 1 0 0 f f t f i 2 1700 "1700 1700" _null_ _null_ _null_ numeric_smaller _null_ _null_ _null_ )); DESCR("smaller of two numbers"); ! DATA(insert OID = 1767 ( numeric_larger PGNSP PGUID 12 1 0 0 f f t f i 2 1700 "1700 1700" _null_ _null_ _null_ numeric_larger _null_ _null_ _null_ )); DESCR("larger of two numbers"); ! DATA(insert OID = 1769 ( numeric_cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "1700 1700" _null_ _null_ _null_ numeric_cmp _null_ _null_ _null_ )); DESCR("compare two numbers"); ! DATA(insert OID = 1771 ( numeric_uminus PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "1700" _null_ _null_ _null_ numeric_uminus _null_ _null_ _null_ )); DESCR("negate"); ! DATA(insert OID = 1779 ( int8 PGNSP PGUID 12 1 0 0 f f t f i 1 20 "1700" _null_ _null_ _null_ numeric_int8 _null_ _null_ _null_ )); DESCR("(internal)"); ! DATA(insert OID = 1781 ( numeric PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "20" _null_ _null_ _null_ int8_numeric _null_ _null_ _null_ )); DESCR("(internal)"); ! DATA(insert OID = 1782 ( numeric PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "21" _null_ _null_ _null_ int2_numeric _null_ _null_ _null_ )); DESCR("(internal)"); ! DATA(insert OID = 1783 ( int2 PGNSP PGUID 12 1 0 0 f f t f i 1 21 "1700" _null_ _null_ _null_ numeric_int2 _null_ _null_ _null_ )); DESCR("(internal)"); /* formatting */ ! DATA(insert OID = 1770 ( to_char PGNSP PGUID 12 1 0 0 f f t f s 2 25 "1184 25" _null_ _null_ _null_ timestamptz_to_char _null_ _null_ _null_ )); DESCR("format timestamp with time zone to text"); ! DATA(insert OID = 1772 ( to_char PGNSP PGUID 12 1 0 0 f f t f s 2 25 "1700 25" _null_ _null_ _null_ numeric_to_char _null_ _null_ _null_ )); DESCR("format numeric to text"); ! DATA(insert OID = 1773 ( to_char PGNSP PGUID 12 1 0 0 f f t f s 2 25 "23 25" _null_ _null_ _null_ int4_to_char _null_ _null_ _null_ )); DESCR("format int4 to text"); ! DATA(insert OID = 1774 ( to_char PGNSP PGUID 12 1 0 0 f f t f s 2 25 "20 25" _null_ _null_ _null_ int8_to_char _null_ _null_ _null_ )); DESCR("format int8 to text"); ! DATA(insert OID = 1775 ( to_char PGNSP PGUID 12 1 0 0 f f t f s 2 25 "700 25" _null_ _null_ _null_ float4_to_char _null_ _null_ _null_ )); DESCR("format float4 to text"); ! DATA(insert OID = 1776 ( to_char PGNSP PGUID 12 1 0 0 f f t f s 2 25 "701 25" _null_ _null_ _null_ float8_to_char _null_ _null_ _null_ )); DESCR("format float8 to text"); ! DATA(insert OID = 1777 ( to_number PGNSP PGUID 12 1 0 0 f f t f s 2 1700 "25 25" _null_ _null_ _null_ numeric_to_number _null_ _null_ _null_ )); DESCR("convert text to numeric"); ! DATA(insert OID = 1778 ( to_timestamp PGNSP PGUID 12 1 0 0 f f t f s 2 1184 "25 25" _null_ _null_ _null_ to_timestamp _null_ _null_ _null_ )); DESCR("convert text to timestamp with time zone"); ! DATA(insert OID = 1780 ( to_date PGNSP PGUID 12 1 0 0 f f t f s 2 1082 "25 25" _null_ _null_ _null_ to_date _null_ _null_ _null_ )); DESCR("convert text to date"); ! DATA(insert OID = 1768 ( to_char PGNSP PGUID 12 1 0 0 f f t f s 2 25 "1186 25" _null_ _null_ _null_ interval_to_char _null_ _null_ _null_ )); DESCR("format interval to text"); ! DATA(insert OID = 1282 ( quote_ident PGNSP PGUID 12 1 0 0 f f t f i 1 25 "25" _null_ _null_ _null_ quote_ident _null_ _null_ _null_ )); DESCR("quote an identifier for usage in a querystring"); ! DATA(insert OID = 1283 ( quote_literal PGNSP PGUID 12 1 0 0 f f t f i 1 25 "25" _null_ _null_ _null_ quote_literal _null_ _null_ _null_ )); DESCR("quote a literal for usage in a querystring"); ! DATA(insert OID = 1285 ( quote_literal PGNSP PGUID 14 1 0 0 f f t f v 1 25 "2283" _null_ _null_ _null_ "select pg_catalog.quote_literal($1::pg_catalog.text)" _null_ _null_ _null_ )); DESCR("quote a data value for usage in a querystring"); ! DATA(insert OID = 1289 ( quote_nullable PGNSP PGUID 12 1 0 0 f f f f i 1 25 "25" _null_ _null_ _null_ quote_nullable _null_ _null_ _null_ )); DESCR("quote a possibly-null literal for usage in a querystring"); ! DATA(insert OID = 1290 ( quote_nullable PGNSP PGUID 14 1 0 0 f f f f v 1 25 "2283" _null_ _null_ _null_ "select pg_catalog.quote_nullable($1::pg_catalog.text)" _null_ _null_ _null_ )); DESCR("quote a possibly-null data value for usage in a querystring"); ! DATA(insert OID = 1798 ( oidin PGNSP PGUID 12 1 0 0 f f t f i 1 26 "2275" _null_ _null_ _null_ oidin _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1799 ( oidout PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "26" _null_ _null_ _null_ oidout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1810 ( bit_length PGNSP PGUID 14 1 0 0 f f t f i 1 23 "17" _null_ _null_ _null_ "select pg_catalog.octet_length($1) * 8" _null_ _null_ _null_ )); DESCR("length in bits"); ! DATA(insert OID = 1811 ( bit_length PGNSP PGUID 14 1 0 0 f f t f i 1 23 "25" _null_ _null_ _null_ "select pg_catalog.octet_length($1) * 8" _null_ _null_ _null_ )); DESCR("length in bits"); ! DATA(insert OID = 1812 ( bit_length PGNSP PGUID 14 1 0 0 f f t f i 1 23 "1560" _null_ _null_ _null_ "select pg_catalog.length($1)" _null_ _null_ _null_ )); DESCR("length in bits"); /* Selectivity estimators for LIKE and related operators */ ! DATA(insert OID = 1814 ( iclikesel PGNSP PGUID 12 1 0 0 f f t f s 4 701 "2281 26 2281 23" _null_ _null_ _null_ iclikesel _null_ _null_ _null_ )); DESCR("restriction selectivity of ILIKE"); ! DATA(insert OID = 1815 ( icnlikesel PGNSP PGUID 12 1 0 0 f f t f s 4 701 "2281 26 2281 23" _null_ _null_ _null_ icnlikesel _null_ _null_ _null_ )); DESCR("restriction selectivity of NOT ILIKE"); ! DATA(insert OID = 1816 ( iclikejoinsel PGNSP PGUID 12 1 0 0 f f t f s 5 701 "2281 26 2281 21 2281" _null_ _null_ _null_ iclikejoinsel _null_ _null_ _null_ )); DESCR("join selectivity of ILIKE"); ! DATA(insert OID = 1817 ( icnlikejoinsel PGNSP PGUID 12 1 0 0 f f t f s 5 701 "2281 26 2281 21 2281" _null_ _null_ _null_ icnlikejoinsel _null_ _null_ _null_ )); DESCR("join selectivity of NOT ILIKE"); ! DATA(insert OID = 1818 ( regexeqsel PGNSP PGUID 12 1 0 0 f f t f s 4 701 "2281 26 2281 23" _null_ _null_ _null_ regexeqsel _null_ _null_ _null_ )); DESCR("restriction selectivity of regex match"); ! DATA(insert OID = 1819 ( likesel PGNSP PGUID 12 1 0 0 f f t f s 4 701 "2281 26 2281 23" _null_ _null_ _null_ likesel _null_ _null_ _null_ )); DESCR("restriction selectivity of LIKE"); ! DATA(insert OID = 1820 ( icregexeqsel PGNSP PGUID 12 1 0 0 f f t f s 4 701 "2281 26 2281 23" _null_ _null_ _null_ icregexeqsel _null_ _null_ _null_ )); DESCR("restriction selectivity of case-insensitive regex match"); ! DATA(insert OID = 1821 ( regexnesel PGNSP PGUID 12 1 0 0 f f t f s 4 701 "2281 26 2281 23" _null_ _null_ _null_ regexnesel _null_ _null_ _null_ )); DESCR("restriction selectivity of regex non-match"); ! DATA(insert OID = 1822 ( nlikesel PGNSP PGUID 12 1 0 0 f f t f s 4 701 "2281 26 2281 23" _null_ _null_ _null_ nlikesel _null_ _null_ _null_ )); DESCR("restriction selectivity of NOT LIKE"); ! DATA(insert OID = 1823 ( icregexnesel PGNSP PGUID 12 1 0 0 f f t f s 4 701 "2281 26 2281 23" _null_ _null_ _null_ icregexnesel _null_ _null_ _null_ )); DESCR("restriction selectivity of case-insensitive regex non-match"); ! DATA(insert OID = 1824 ( regexeqjoinsel PGNSP PGUID 12 1 0 0 f f t f s 5 701 "2281 26 2281 21 2281" _null_ _null_ _null_ regexeqjoinsel _null_ _null_ _null_ )); DESCR("join selectivity of regex match"); ! DATA(insert OID = 1825 ( likejoinsel PGNSP PGUID 12 1 0 0 f f t f s 5 701 "2281 26 2281 21 2281" _null_ _null_ _null_ likejoinsel _null_ _null_ _null_ )); DESCR("join selectivity of LIKE"); ! DATA(insert OID = 1826 ( icregexeqjoinsel PGNSP PGUID 12 1 0 0 f f t f s 5 701 "2281 26 2281 21 2281" _null_ _null_ _null_ icregexeqjoinsel _null_ _null_ _null_ )); DESCR("join selectivity of case-insensitive regex match"); ! DATA(insert OID = 1827 ( regexnejoinsel PGNSP PGUID 12 1 0 0 f f t f s 5 701 "2281 26 2281 21 2281" _null_ _null_ _null_ regexnejoinsel _null_ _null_ _null_ )); DESCR("join selectivity of regex non-match"); ! DATA(insert OID = 1828 ( nlikejoinsel PGNSP PGUID 12 1 0 0 f f t f s 5 701 "2281 26 2281 21 2281" _null_ _null_ _null_ nlikejoinsel _null_ _null_ _null_ )); DESCR("join selectivity of NOT LIKE"); ! DATA(insert OID = 1829 ( icregexnejoinsel PGNSP PGUID 12 1 0 0 f f t f s 5 701 "2281 26 2281 21 2281" _null_ _null_ _null_ icregexnejoinsel _null_ _null_ _null_ )); DESCR("join selectivity of case-insensitive regex non-match"); /* Aggregate-related functions */ ! DATA(insert OID = 1830 ( float8_avg PGNSP PGUID 12 1 0 0 f f t f i 1 701 "1022" _null_ _null_ _null_ float8_avg _null_ _null_ _null_ )); DESCR("AVG aggregate final function"); ! DATA(insert OID = 2512 ( float8_var_pop PGNSP PGUID 12 1 0 0 f f t f i 1 701 "1022" _null_ _null_ _null_ float8_var_pop _null_ _null_ _null_ )); DESCR("VAR_POP aggregate final function"); ! DATA(insert OID = 1831 ( float8_var_samp PGNSP PGUID 12 1 0 0 f f t f i 1 701 "1022" _null_ _null_ _null_ float8_var_samp _null_ _null_ _null_ )); DESCR("VAR_SAMP aggregate final function"); ! DATA(insert OID = 2513 ( float8_stddev_pop PGNSP PGUID 12 1 0 0 f f t f i 1 701 "1022" _null_ _null_ _null_ float8_stddev_pop _null_ _null_ _null_ )); DESCR("STDDEV_POP aggregate final function"); ! DATA(insert OID = 1832 ( float8_stddev_samp PGNSP PGUID 12 1 0 0 f f t f i 1 701 "1022" _null_ _null_ _null_ float8_stddev_samp _null_ _null_ _null_ )); DESCR("STDDEV_SAMP aggregate final function"); ! DATA(insert OID = 1833 ( numeric_accum PGNSP PGUID 12 1 0 0 f f t f i 2 1231 "1231 1700" _null_ _null_ _null_ numeric_accum _null_ _null_ _null_ )); DESCR("aggregate transition function"); ! DATA(insert OID = 2858 ( numeric_avg_accum PGNSP PGUID 12 1 0 0 f f t f i 2 1231 "1231 1700" _null_ _null_ _null_ numeric_avg_accum _null_ _null_ _null_ )); DESCR("aggregate transition function"); ! DATA(insert OID = 1834 ( int2_accum PGNSP PGUID 12 1 0 0 f f t f i 2 1231 "1231 21" _null_ _null_ _null_ int2_accum _null_ _null_ _null_ )); DESCR("aggregate transition function"); ! DATA(insert OID = 1835 ( int4_accum PGNSP PGUID 12 1 0 0 f f t f i 2 1231 "1231 23" _null_ _null_ _null_ int4_accum _null_ _null_ _null_ )); DESCR("aggregate transition function"); ! DATA(insert OID = 1836 ( int8_accum PGNSP PGUID 12 1 0 0 f f t f i 2 1231 "1231 20" _null_ _null_ _null_ int8_accum _null_ _null_ _null_ )); DESCR("aggregate transition function"); ! DATA(insert OID = 2746 ( int8_avg_accum PGNSP PGUID 12 1 0 0 f f t f i 2 1231 "1231 20" _null_ _null_ _null_ int8_avg_accum _null_ _null_ _null_ )); DESCR("aggregate transition function"); ! DATA(insert OID = 1837 ( numeric_avg PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "1231" _null_ _null_ _null_ numeric_avg _null_ _null_ _null_ )); DESCR("AVG aggregate final function"); ! DATA(insert OID = 2514 ( numeric_var_pop PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "1231" _null_ _null_ _null_ numeric_var_pop _null_ _null_ _null_ )); DESCR("VAR_POP aggregate final function"); ! DATA(insert OID = 1838 ( numeric_var_samp PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "1231" _null_ _null_ _null_ numeric_var_samp _null_ _null_ _null_ )); DESCR("VAR_SAMP aggregate final function"); ! DATA(insert OID = 2596 ( numeric_stddev_pop PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "1231" _null_ _null_ _null_ numeric_stddev_pop _null_ _null_ _null_ )); DESCR("STDDEV_POP aggregate final function"); ! DATA(insert OID = 1839 ( numeric_stddev_samp PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "1231" _null_ _null_ _null_ numeric_stddev_samp _null_ _null_ _null_ )); DESCR("STDDEV_SAMP aggregate final function"); ! DATA(insert OID = 1840 ( int2_sum PGNSP PGUID 12 1 0 0 f f f f i 2 20 "20 21" _null_ _null_ _null_ int2_sum _null_ _null_ _null_ )); DESCR("SUM(int2) transition function"); ! DATA(insert OID = 1841 ( int4_sum PGNSP PGUID 12 1 0 0 f f f f i 2 20 "20 23" _null_ _null_ _null_ int4_sum _null_ _null_ _null_ )); DESCR("SUM(int4) transition function"); ! DATA(insert OID = 1842 ( int8_sum PGNSP PGUID 12 1 0 0 f f f f i 2 1700 "1700 20" _null_ _null_ _null_ int8_sum _null_ _null_ _null_ )); DESCR("SUM(int8) transition function"); ! DATA(insert OID = 1843 ( interval_accum PGNSP PGUID 12 1 0 0 f f t f i 2 1187 "1187 1186" _null_ _null_ _null_ interval_accum _null_ _null_ _null_ )); DESCR("aggregate transition function"); ! DATA(insert OID = 1844 ( interval_avg PGNSP PGUID 12 1 0 0 f f t f i 1 1186 "1187" _null_ _null_ _null_ interval_avg _null_ _null_ _null_ )); DESCR("AVG aggregate final function"); ! DATA(insert OID = 1962 ( int2_avg_accum PGNSP PGUID 12 1 0 0 f f t f i 2 1016 "1016 21" _null_ _null_ _null_ int2_avg_accum _null_ _null_ _null_ )); DESCR("AVG(int2) transition function"); ! DATA(insert OID = 1963 ( int4_avg_accum PGNSP PGUID 12 1 0 0 f f t f i 2 1016 "1016 23" _null_ _null_ _null_ int4_avg_accum _null_ _null_ _null_ )); DESCR("AVG(int4) transition function"); ! DATA(insert OID = 1964 ( int8_avg PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "1016" _null_ _null_ _null_ int8_avg _null_ _null_ _null_ )); DESCR("AVG(int) aggregate final function"); ! DATA(insert OID = 2805 ( int8inc_float8_float8 PGNSP PGUID 12 1 0 0 f f t f i 3 20 "20 701 701" _null_ _null_ _null_ int8inc_float8_float8 _null_ _null_ _null_ )); DESCR("REGR_COUNT(double, double) transition function"); ! DATA(insert OID = 2806 ( float8_regr_accum PGNSP PGUID 12 1 0 0 f f t f i 3 1022 "1022 701 701" _null_ _null_ _null_ float8_regr_accum _null_ _null_ _null_ )); DESCR("REGR_...(double, double) transition function"); ! DATA(insert OID = 2807 ( float8_regr_sxx PGNSP PGUID 12 1 0 0 f f t f i 1 701 "1022" _null_ _null_ _null_ float8_regr_sxx _null_ _null_ _null_ )); DESCR("REGR_SXX(double, double) aggregate final function"); ! DATA(insert OID = 2808 ( float8_regr_syy PGNSP PGUID 12 1 0 0 f f t f i 1 701 "1022" _null_ _null_ _null_ float8_regr_syy _null_ _null_ _null_ )); DESCR("REGR_SYY(double, double) aggregate final function"); ! DATA(insert OID = 2809 ( float8_regr_sxy PGNSP PGUID 12 1 0 0 f f t f i 1 701 "1022" _null_ _null_ _null_ float8_regr_sxy _null_ _null_ _null_ )); DESCR("REGR_SXY(double, double) aggregate final function"); ! DATA(insert OID = 2810 ( float8_regr_avgx PGNSP PGUID 12 1 0 0 f f t f i 1 701 "1022" _null_ _null_ _null_ float8_regr_avgx _null_ _null_ _null_ )); DESCR("REGR_AVGX(double, double) aggregate final function"); ! DATA(insert OID = 2811 ( float8_regr_avgy PGNSP PGUID 12 1 0 0 f f t f i 1 701 "1022" _null_ _null_ _null_ float8_regr_avgy _null_ _null_ _null_ )); DESCR("REGR_AVGY(double, double) aggregate final function"); ! DATA(insert OID = 2812 ( float8_regr_r2 PGNSP PGUID 12 1 0 0 f f t f i 1 701 "1022" _null_ _null_ _null_ float8_regr_r2 _null_ _null_ _null_ )); DESCR("REGR_R2(double, double) aggregate final function"); ! DATA(insert OID = 2813 ( float8_regr_slope PGNSP PGUID 12 1 0 0 f f t f i 1 701 "1022" _null_ _null_ _null_ float8_regr_slope _null_ _null_ _null_ )); DESCR("REGR_SLOPE(double, double) aggregate final function"); ! DATA(insert OID = 2814 ( float8_regr_intercept PGNSP PGUID 12 1 0 0 f f t f i 1 701 "1022" _null_ _null_ _null_ float8_regr_intercept _null_ _null_ _null_ )); DESCR("REGR_INTERCEPT(double, double) aggregate final function"); ! DATA(insert OID = 2815 ( float8_covar_pop PGNSP PGUID 12 1 0 0 f f t f i 1 701 "1022" _null_ _null_ _null_ float8_covar_pop _null_ _null_ _null_ )); DESCR("COVAR_POP(double, double) aggregate final function"); ! DATA(insert OID = 2816 ( float8_covar_samp PGNSP PGUID 12 1 0 0 f f t f i 1 701 "1022" _null_ _null_ _null_ float8_covar_samp _null_ _null_ _null_ )); DESCR("COVAR_SAMP(double, double) aggregate final function"); ! DATA(insert OID = 2817 ( float8_corr PGNSP PGUID 12 1 0 0 f f t f i 1 701 "1022" _null_ _null_ _null_ float8_corr _null_ _null_ _null_ )); DESCR("CORR(double, double) aggregate final function"); /* To ASCII conversion */ ! DATA(insert OID = 1845 ( to_ascii PGNSP PGUID 12 1 0 0 f f t f i 1 25 "25" _null_ _null_ _null_ to_ascii_default _null_ _null_ _null_ )); DESCR("encode text from DB encoding to ASCII text"); ! DATA(insert OID = 1846 ( to_ascii PGNSP PGUID 12 1 0 0 f f t f i 2 25 "25 23" _null_ _null_ _null_ to_ascii_enc _null_ _null_ _null_ )); DESCR("encode text from encoding to ASCII text"); ! DATA(insert OID = 1847 ( to_ascii PGNSP PGUID 12 1 0 0 f f t f i 2 25 "25 19" _null_ _null_ _null_ to_ascii_encname _null_ _null_ _null_ )); DESCR("encode text from encoding to ASCII text"); ! DATA(insert OID = 1848 ( interval_pl_time PGNSP PGUID 14 1 0 0 f f t f i 2 1083 "1186 1083" _null_ _null_ _null_ "select $2 + $1" _null_ _null_ _null_ )); DESCR("plus"); ! DATA(insert OID = 1850 ( int28eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "21 20" _null_ _null_ _null_ int28eq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 1851 ( int28ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "21 20" _null_ _null_ _null_ int28ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 1852 ( int28lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "21 20" _null_ _null_ _null_ int28lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 1853 ( int28gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "21 20" _null_ _null_ _null_ int28gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 1854 ( int28le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "21 20" _null_ _null_ _null_ int28le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 1855 ( int28ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "21 20" _null_ _null_ _null_ int28ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 1856 ( int82eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "20 21" _null_ _null_ _null_ int82eq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 1857 ( int82ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "20 21" _null_ _null_ _null_ int82ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 1858 ( int82lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "20 21" _null_ _null_ _null_ int82lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 1859 ( int82gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "20 21" _null_ _null_ _null_ int82gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 1860 ( int82le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "20 21" _null_ _null_ _null_ int82le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 1861 ( int82ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "20 21" _null_ _null_ _null_ int82ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 1892 ( int2and PGNSP PGUID 12 1 0 0 f f t f i 2 21 "21 21" _null_ _null_ _null_ int2and _null_ _null_ _null_ )); DESCR("bitwise and"); ! DATA(insert OID = 1893 ( int2or PGNSP PGUID 12 1 0 0 f f t f i 2 21 "21 21" _null_ _null_ _null_ int2or _null_ _null_ _null_ )); DESCR("bitwise or"); ! DATA(insert OID = 1894 ( int2xor PGNSP PGUID 12 1 0 0 f f t f i 2 21 "21 21" _null_ _null_ _null_ int2xor _null_ _null_ _null_ )); DESCR("bitwise xor"); ! DATA(insert OID = 1895 ( int2not PGNSP PGUID 12 1 0 0 f f t f i 1 21 "21" _null_ _null_ _null_ int2not _null_ _null_ _null_ )); DESCR("bitwise not"); ! DATA(insert OID = 1896 ( int2shl PGNSP PGUID 12 1 0 0 f f t f i 2 21 "21 23" _null_ _null_ _null_ int2shl _null_ _null_ _null_ )); DESCR("bitwise shift left"); ! DATA(insert OID = 1897 ( int2shr PGNSP PGUID 12 1 0 0 f f t f i 2 21 "21 23" _null_ _null_ _null_ int2shr _null_ _null_ _null_ )); DESCR("bitwise shift right"); ! DATA(insert OID = 1898 ( int4and PGNSP PGUID 12 1 0 0 f f t f i 2 23 "23 23" _null_ _null_ _null_ int4and _null_ _null_ _null_ )); DESCR("bitwise and"); ! DATA(insert OID = 1899 ( int4or PGNSP PGUID 12 1 0 0 f f t f i 2 23 "23 23" _null_ _null_ _null_ int4or _null_ _null_ _null_ )); DESCR("bitwise or"); ! DATA(insert OID = 1900 ( int4xor PGNSP PGUID 12 1 0 0 f f t f i 2 23 "23 23" _null_ _null_ _null_ int4xor _null_ _null_ _null_ )); DESCR("bitwise xor"); ! DATA(insert OID = 1901 ( int4not PGNSP PGUID 12 1 0 0 f f t f i 1 23 "23" _null_ _null_ _null_ int4not _null_ _null_ _null_ )); DESCR("bitwise not"); ! DATA(insert OID = 1902 ( int4shl PGNSP PGUID 12 1 0 0 f f t f i 2 23 "23 23" _null_ _null_ _null_ int4shl _null_ _null_ _null_ )); DESCR("bitwise shift left"); ! DATA(insert OID = 1903 ( int4shr PGNSP PGUID 12 1 0 0 f f t f i 2 23 "23 23" _null_ _null_ _null_ int4shr _null_ _null_ _null_ )); DESCR("bitwise shift right"); ! DATA(insert OID = 1904 ( int8and PGNSP PGUID 12 1 0 0 f f t f i 2 20 "20 20" _null_ _null_ _null_ int8and _null_ _null_ _null_ )); DESCR("bitwise and"); ! DATA(insert OID = 1905 ( int8or PGNSP PGUID 12 1 0 0 f f t f i 2 20 "20 20" _null_ _null_ _null_ int8or _null_ _null_ _null_ )); DESCR("bitwise or"); ! DATA(insert OID = 1906 ( int8xor PGNSP PGUID 12 1 0 0 f f t f i 2 20 "20 20" _null_ _null_ _null_ int8xor _null_ _null_ _null_ )); DESCR("bitwise xor"); ! DATA(insert OID = 1907 ( int8not PGNSP PGUID 12 1 0 0 f f t f i 1 20 "20" _null_ _null_ _null_ int8not _null_ _null_ _null_ )); DESCR("bitwise not"); ! DATA(insert OID = 1908 ( int8shl PGNSP PGUID 12 1 0 0 f f t f i 2 20 "20 23" _null_ _null_ _null_ int8shl _null_ _null_ _null_ )); DESCR("bitwise shift left"); ! DATA(insert OID = 1909 ( int8shr PGNSP PGUID 12 1 0 0 f f t f i 2 20 "20 23" _null_ _null_ _null_ int8shr _null_ _null_ _null_ )); DESCR("bitwise shift right"); ! DATA(insert OID = 1910 ( int8up PGNSP PGUID 12 1 0 0 f f t f i 1 20 "20" _null_ _null_ _null_ int8up _null_ _null_ _null_ )); DESCR("unary plus"); ! DATA(insert OID = 1911 ( int2up PGNSP PGUID 12 1 0 0 f f t f i 1 21 "21" _null_ _null_ _null_ int2up _null_ _null_ _null_ )); DESCR("unary plus"); ! DATA(insert OID = 1912 ( int4up PGNSP PGUID 12 1 0 0 f f t f i 1 23 "23" _null_ _null_ _null_ int4up _null_ _null_ _null_ )); DESCR("unary plus"); ! DATA(insert OID = 1913 ( float4up PGNSP PGUID 12 1 0 0 f f t f i 1 700 "700" _null_ _null_ _null_ float4up _null_ _null_ _null_ )); DESCR("unary plus"); ! DATA(insert OID = 1914 ( float8up PGNSP PGUID 12 1 0 0 f f t f i 1 701 "701" _null_ _null_ _null_ float8up _null_ _null_ _null_ )); DESCR("unary plus"); ! DATA(insert OID = 1915 ( numeric_uplus PGNSP PGUID 12 1 0 0 f f t f i 1 1700 "1700" _null_ _null_ _null_ numeric_uplus _null_ _null_ _null_ )); DESCR("unary plus"); ! DATA(insert OID = 1922 ( has_table_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "19 25 25" _null_ _null_ _null_ has_table_privilege_name_name _null_ _null_ _null_ )); DESCR("user privilege on relation by username, rel name"); ! DATA(insert OID = 1923 ( has_table_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "19 26 25" _null_ _null_ _null_ has_table_privilege_name_id _null_ _null_ _null_ )); DESCR("user privilege on relation by username, rel oid"); ! DATA(insert OID = 1924 ( has_table_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "26 25 25" _null_ _null_ _null_ has_table_privilege_id_name _null_ _null_ _null_ )); DESCR("user privilege on relation by user oid, rel name"); ! DATA(insert OID = 1925 ( has_table_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "26 26 25" _null_ _null_ _null_ has_table_privilege_id_id _null_ _null_ _null_ )); DESCR("user privilege on relation by user oid, rel oid"); ! DATA(insert OID = 1926 ( has_table_privilege PGNSP PGUID 12 1 0 0 f f t f s 2 16 "25 25" _null_ _null_ _null_ has_table_privilege_name _null_ _null_ _null_ )); DESCR("current user privilege on relation by rel name"); ! DATA(insert OID = 1927 ( has_table_privilege PGNSP PGUID 12 1 0 0 f f t f s 2 16 "26 25" _null_ _null_ _null_ has_table_privilege_id _null_ _null_ _null_ )); DESCR("current user privilege on relation by rel oid"); ! DATA(insert OID = 1928 ( pg_stat_get_numscans PGNSP PGUID 12 1 0 0 f f t f s 1 20 "26" _null_ _null_ _null_ pg_stat_get_numscans _null_ _null_ _null_ )); DESCR("statistics: number of scans done for table/index"); ! DATA(insert OID = 1929 ( pg_stat_get_tuples_returned PGNSP PGUID 12 1 0 0 f f t f s 1 20 "26" _null_ _null_ _null_ pg_stat_get_tuples_returned _null_ _null_ _null_ )); DESCR("statistics: number of tuples read by seqscan"); ! DATA(insert OID = 1930 ( pg_stat_get_tuples_fetched PGNSP PGUID 12 1 0 0 f f t f s 1 20 "26" _null_ _null_ _null_ pg_stat_get_tuples_fetched _null_ _null_ _null_ )); DESCR("statistics: number of tuples fetched by idxscan"); ! DATA(insert OID = 1931 ( pg_stat_get_tuples_inserted PGNSP PGUID 12 1 0 0 f f t f s 1 20 "26" _null_ _null_ _null_ pg_stat_get_tuples_inserted _null_ _null_ _null_ )); DESCR("statistics: number of tuples inserted"); ! DATA(insert OID = 1932 ( pg_stat_get_tuples_updated PGNSP PGUID 12 1 0 0 f f t f s 1 20 "26" _null_ _null_ _null_ pg_stat_get_tuples_updated _null_ _null_ _null_ )); DESCR("statistics: number of tuples updated"); ! DATA(insert OID = 1933 ( pg_stat_get_tuples_deleted PGNSP PGUID 12 1 0 0 f f t f s 1 20 "26" _null_ _null_ _null_ pg_stat_get_tuples_deleted _null_ _null_ _null_ )); DESCR("statistics: number of tuples deleted"); ! DATA(insert OID = 1972 ( pg_stat_get_tuples_hot_updated PGNSP PGUID 12 1 0 0 f f t f s 1 20 "26" _null_ _null_ _null_ pg_stat_get_tuples_hot_updated _null_ _null_ _null_ )); DESCR("statistics: number of tuples hot updated"); ! DATA(insert OID = 2878 ( pg_stat_get_live_tuples PGNSP PGUID 12 1 0 0 f f t f s 1 20 "26" _null_ _null_ _null_ pg_stat_get_live_tuples _null_ _null_ _null_ )); DESCR("statistics: number of live tuples"); ! DATA(insert OID = 2879 ( pg_stat_get_dead_tuples PGNSP PGUID 12 1 0 0 f f t f s 1 20 "26" _null_ _null_ _null_ pg_stat_get_dead_tuples _null_ _null_ _null_ )); DESCR("statistics: number of dead tuples"); ! DATA(insert OID = 1934 ( pg_stat_get_blocks_fetched PGNSP PGUID 12 1 0 0 f f t f s 1 20 "26" _null_ _null_ _null_ pg_stat_get_blocks_fetched _null_ _null_ _null_ )); DESCR("statistics: number of blocks fetched"); ! DATA(insert OID = 1935 ( pg_stat_get_blocks_hit PGNSP PGUID 12 1 0 0 f f t f s 1 20 "26" _null_ _null_ _null_ pg_stat_get_blocks_hit _null_ _null_ _null_ )); DESCR("statistics: number of blocks found in cache"); ! DATA(insert OID = 2781 ( pg_stat_get_last_vacuum_time PGNSP PGUID 12 1 0 0 f f t f s 1 1184 "26" _null_ _null_ _null_ pg_stat_get_last_vacuum_time _null_ _null_ _null_ )); DESCR("statistics: last manual vacuum time for a table"); ! DATA(insert OID = 2782 ( pg_stat_get_last_autovacuum_time PGNSP PGUID 12 1 0 0 f f t f s 1 1184 "26" _null_ _null_ _null_ pg_stat_get_last_autovacuum_time _null_ _null_ _null_ )); DESCR("statistics: last auto vacuum time for a table"); ! DATA(insert OID = 2783 ( pg_stat_get_last_analyze_time PGNSP PGUID 12 1 0 0 f f t f s 1 1184 "26" _null_ _null_ _null_ pg_stat_get_last_analyze_time _null_ _null_ _null_ )); DESCR("statistics: last manual analyze time for a table"); ! DATA(insert OID = 2784 ( pg_stat_get_last_autoanalyze_time PGNSP PGUID 12 1 0 0 f f t f s 1 1184 "26" _null_ _null_ _null_ pg_stat_get_last_autoanalyze_time _null_ _null_ _null_ )); DESCR("statistics: last auto analyze time for a table"); ! DATA(insert OID = 1936 ( pg_stat_get_backend_idset PGNSP PGUID 12 1 100 0 f f t t s 0 23 "" _null_ _null_ _null_ pg_stat_get_backend_idset _null_ _null_ _null_ )); DESCR("statistics: currently active backend IDs"); ! DATA(insert OID = 2022 ( pg_stat_get_activity PGNSP PGUID 12 1 100 0 f f f t s 1 2249 "23" "{23,26,23,26,25,16,1184,1184,1184,869,23}" "{i,o,o,o,o,o,o,o,o,o,o}" "{pid,datid,procpid,usesysid,current_query,waiting,xact_start,query_start,backend_start,client_addr,client_port}" pg_stat_get_activity _null_ _null_ _null_ )); DESCR("statistics: information about currently active backends"); ! DATA(insert OID = 2026 ( pg_backend_pid PGNSP PGUID 12 1 0 0 f f t f s 0 23 "" _null_ _null_ _null_ pg_backend_pid _null_ _null_ _null_ )); DESCR("statistics: current backend PID"); ! DATA(insert OID = 1937 ( pg_stat_get_backend_pid PGNSP PGUID 12 1 0 0 f f t f s 1 23 "23" _null_ _null_ _null_ pg_stat_get_backend_pid _null_ _null_ _null_ )); DESCR("statistics: PID of backend"); ! DATA(insert OID = 1938 ( pg_stat_get_backend_dbid PGNSP PGUID 12 1 0 0 f f t f s 1 26 "23" _null_ _null_ _null_ pg_stat_get_backend_dbid _null_ _null_ _null_ )); DESCR("statistics: database ID of backend"); ! DATA(insert OID = 1939 ( pg_stat_get_backend_userid PGNSP PGUID 12 1 0 0 f f t f s 1 26 "23" _null_ _null_ _null_ pg_stat_get_backend_userid _null_ _null_ _null_ )); DESCR("statistics: user ID of backend"); ! DATA(insert OID = 1940 ( pg_stat_get_backend_activity PGNSP PGUID 12 1 0 0 f f t f s 1 25 "23" _null_ _null_ _null_ pg_stat_get_backend_activity _null_ _null_ _null_ )); DESCR("statistics: current query of backend"); ! DATA(insert OID = 2853 ( pg_stat_get_backend_waiting PGNSP PGUID 12 1 0 0 f f t f s 1 16 "23" _null_ _null_ _null_ pg_stat_get_backend_waiting _null_ _null_ _null_ )); DESCR("statistics: is backend currently waiting for a lock"); ! DATA(insert OID = 2094 ( pg_stat_get_backend_activity_start PGNSP PGUID 12 1 0 0 f f t f s 1 1184 "23" _null_ _null_ _null_ pg_stat_get_backend_activity_start _null_ _null_ _null_ )); DESCR("statistics: start time for current query of backend"); ! DATA(insert OID = 2857 ( pg_stat_get_backend_xact_start PGNSP PGUID 12 1 0 0 f f t f s 1 1184 "23" _null_ _null_ _null_ pg_stat_get_backend_xact_start _null_ _null_ _null_ )); DESCR("statistics: start time for backend's current transaction"); ! DATA(insert OID = 1391 ( pg_stat_get_backend_start PGNSP PGUID 12 1 0 0 f f t f s 1 1184 "23" _null_ _null_ _null_ pg_stat_get_backend_start _null_ _null_ _null_ )); DESCR("statistics: start time for current backend session"); ! DATA(insert OID = 1392 ( pg_stat_get_backend_client_addr PGNSP PGUID 12 1 0 0 f f t f s 1 869 "23" _null_ _null_ _null_ pg_stat_get_backend_client_addr _null_ _null_ _null_ )); DESCR("statistics: address of client connected to backend"); ! DATA(insert OID = 1393 ( pg_stat_get_backend_client_port PGNSP PGUID 12 1 0 0 f f t f s 1 23 "23" _null_ _null_ _null_ pg_stat_get_backend_client_port _null_ _null_ _null_ )); DESCR("statistics: port number of client connected to backend"); ! DATA(insert OID = 1941 ( pg_stat_get_db_numbackends PGNSP PGUID 12 1 0 0 f f t f s 1 23 "26" _null_ _null_ _null_ pg_stat_get_db_numbackends _null_ _null_ _null_ )); DESCR("statistics: number of backends in database"); ! DATA(insert OID = 1942 ( pg_stat_get_db_xact_commit PGNSP PGUID 12 1 0 0 f f t f s 1 20 "26" _null_ _null_ _null_ pg_stat_get_db_xact_commit _null_ _null_ _null_ )); DESCR("statistics: transactions committed"); ! DATA(insert OID = 1943 ( pg_stat_get_db_xact_rollback PGNSP PGUID 12 1 0 0 f f t f s 1 20 "26" _null_ _null_ _null_ pg_stat_get_db_xact_rollback _null_ _null_ _null_ )); DESCR("statistics: transactions rolled back"); ! DATA(insert OID = 1944 ( pg_stat_get_db_blocks_fetched PGNSP PGUID 12 1 0 0 f f t f s 1 20 "26" _null_ _null_ _null_ pg_stat_get_db_blocks_fetched _null_ _null_ _null_ )); DESCR("statistics: blocks fetched for database"); ! DATA(insert OID = 1945 ( pg_stat_get_db_blocks_hit PGNSP PGUID 12 1 0 0 f f t f s 1 20 "26" _null_ _null_ _null_ pg_stat_get_db_blocks_hit _null_ _null_ _null_ )); DESCR("statistics: blocks found in cache for database"); ! DATA(insert OID = 2758 ( pg_stat_get_db_tuples_returned PGNSP PGUID 12 1 0 0 f f t f s 1 20 "26" _null_ _null_ _null_ pg_stat_get_db_tuples_returned _null_ _null_ _null_ )); DESCR("statistics: tuples returned for database"); ! DATA(insert OID = 2759 ( pg_stat_get_db_tuples_fetched PGNSP PGUID 12 1 0 0 f f t f s 1 20 "26" _null_ _null_ _null_ pg_stat_get_db_tuples_fetched _null_ _null_ _null_ )); DESCR("statistics: tuples fetched for database"); ! DATA(insert OID = 2760 ( pg_stat_get_db_tuples_inserted PGNSP PGUID 12 1 0 0 f f t f s 1 20 "26" _null_ _null_ _null_ pg_stat_get_db_tuples_inserted _null_ _null_ _null_ )); DESCR("statistics: tuples inserted in database"); ! DATA(insert OID = 2761 ( pg_stat_get_db_tuples_updated PGNSP PGUID 12 1 0 0 f f t f s 1 20 "26" _null_ _null_ _null_ pg_stat_get_db_tuples_updated _null_ _null_ _null_ )); DESCR("statistics: tuples updated in database"); ! DATA(insert OID = 2762 ( pg_stat_get_db_tuples_deleted PGNSP PGUID 12 1 0 0 f f t f s 1 20 "26" _null_ _null_ _null_ pg_stat_get_db_tuples_deleted _null_ _null_ _null_ )); DESCR("statistics: tuples deleted in database"); ! DATA(insert OID = 2769 ( pg_stat_get_bgwriter_timed_checkpoints PGNSP PGUID 12 1 0 0 f f t f s 0 20 "" _null_ _null_ _null_ pg_stat_get_bgwriter_timed_checkpoints _null_ _null_ _null_ )); DESCR("statistics: number of timed checkpoints started by the bgwriter"); ! DATA(insert OID = 2770 ( pg_stat_get_bgwriter_requested_checkpoints PGNSP PGUID 12 1 0 0 f f t f s 0 20 "" _null_ _null_ _null_ pg_stat_get_bgwriter_requested_checkpoints _null_ _null_ _null_ )); DESCR("statistics: number of backend requested checkpoints started by the bgwriter"); ! DATA(insert OID = 2771 ( pg_stat_get_bgwriter_buf_written_checkpoints PGNSP PGUID 12 1 0 0 f f t f s 0 20 "" _null_ _null_ _null_ pg_stat_get_bgwriter_buf_written_checkpoints _null_ _null_ _null_ )); DESCR("statistics: number of buffers written by the bgwriter during checkpoints"); ! DATA(insert OID = 2772 ( pg_stat_get_bgwriter_buf_written_clean PGNSP PGUID 12 1 0 0 f f t f s 0 20 "" _null_ _null_ _null_ pg_stat_get_bgwriter_buf_written_clean _null_ _null_ _null_ )); DESCR("statistics: number of buffers written by the bgwriter for cleaning dirty buffers"); ! DATA(insert OID = 2773 ( pg_stat_get_bgwriter_maxwritten_clean PGNSP PGUID 12 1 0 0 f f t f s 0 20 "" _null_ _null_ _null_ pg_stat_get_bgwriter_maxwritten_clean _null_ _null_ _null_ )); DESCR("statistics: number of times the bgwriter stopped processing when it had written too many buffers while cleaning"); ! DATA(insert OID = 2775 ( pg_stat_get_buf_written_backend PGNSP PGUID 12 1 0 0 f f t f s 0 20 "" _null_ _null_ _null_ pg_stat_get_buf_written_backend _null_ _null_ _null_ )); DESCR("statistics: number of buffers written by backends"); ! DATA(insert OID = 2859 ( pg_stat_get_buf_alloc PGNSP PGUID 12 1 0 0 f f t f s 0 20 "" _null_ _null_ _null_ pg_stat_get_buf_alloc _null_ _null_ _null_ )); DESCR("statistics: number of buffer allocations"); ! DATA(insert OID = 2978 ( pg_stat_get_function_calls PGNSP PGUID 12 1 0 0 f f t f s 1 20 "26" _null_ _null_ _null_ pg_stat_get_function_calls _null_ _null_ _null_ )); DESCR("statistics: number of function calls"); ! DATA(insert OID = 2979 ( pg_stat_get_function_time PGNSP PGUID 12 1 0 0 f f t f s 1 20 "26" _null_ _null_ _null_ pg_stat_get_function_time _null_ _null_ _null_ )); DESCR("statistics: execution time of function"); ! DATA(insert OID = 2980 ( pg_stat_get_function_self_time PGNSP PGUID 12 1 0 0 f f t f s 1 20 "26" _null_ _null_ _null_ pg_stat_get_function_self_time _null_ _null_ _null_ )); DESCR("statistics: self execution time of function"); ! DATA(insert OID = 2230 ( pg_stat_clear_snapshot PGNSP PGUID 12 1 0 0 f f f f v 0 2278 "" _null_ _null_ _null_ pg_stat_clear_snapshot _null_ _null_ _null_ )); DESCR("statistics: discard current transaction's statistics snapshot"); ! DATA(insert OID = 2274 ( pg_stat_reset PGNSP PGUID 12 1 0 0 f f f f v 0 2278 "" _null_ _null_ _null_ pg_stat_reset _null_ _null_ _null_ )); DESCR("statistics: reset collected statistics for current database"); ! DATA(insert OID = 1946 ( encode PGNSP PGUID 12 1 0 0 f f t f i 2 25 "17 25" _null_ _null_ _null_ binary_encode _null_ _null_ _null_ )); DESCR("convert bytea value into some ascii-only text string"); ! DATA(insert OID = 1947 ( decode PGNSP PGUID 12 1 0 0 f f t f i 2 17 "25 25" _null_ _null_ _null_ binary_decode _null_ _null_ _null_ )); DESCR("convert ascii-encoded text string into bytea value"); ! DATA(insert OID = 1948 ( byteaeq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "17 17" _null_ _null_ _null_ byteaeq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 1949 ( bytealt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "17 17" _null_ _null_ _null_ bytealt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 1950 ( byteale PGNSP PGUID 12 1 0 0 f f t f i 2 16 "17 17" _null_ _null_ _null_ byteale _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 1951 ( byteagt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "17 17" _null_ _null_ _null_ byteagt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 1952 ( byteage PGNSP PGUID 12 1 0 0 f f t f i 2 16 "17 17" _null_ _null_ _null_ byteage _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 1953 ( byteane PGNSP PGUID 12 1 0 0 f f t f i 2 16 "17 17" _null_ _null_ _null_ byteane _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 1954 ( byteacmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "17 17" _null_ _null_ _null_ byteacmp _null_ _null_ _null_ )); DESCR("less-equal-greater"); ! DATA(insert OID = 1961 ( timestamp PGNSP PGUID 12 1 0 0 f f t f i 2 1114 "1114 23" _null_ _null_ _null_ timestamp_scale _null_ _null_ _null_ )); DESCR("adjust timestamp precision"); ! DATA(insert OID = 1965 ( oidlarger PGNSP PGUID 12 1 0 0 f f t f i 2 26 "26 26" _null_ _null_ _null_ oidlarger _null_ _null_ _null_ )); DESCR("larger of two"); ! DATA(insert OID = 1966 ( oidsmaller PGNSP PGUID 12 1 0 0 f f t f i 2 26 "26 26" _null_ _null_ _null_ oidsmaller _null_ _null_ _null_ )); DESCR("smaller of two"); ! DATA(insert OID = 1967 ( timestamptz PGNSP PGUID 12 1 0 0 f f t f i 2 1184 "1184 23" _null_ _null_ _null_ timestamptz_scale _null_ _null_ _null_ )); DESCR("adjust timestamptz precision"); ! DATA(insert OID = 1968 ( time PGNSP PGUID 12 1 0 0 f f t f i 2 1083 "1083 23" _null_ _null_ _null_ time_scale _null_ _null_ _null_ )); DESCR("adjust time precision"); ! DATA(insert OID = 1969 ( timetz PGNSP PGUID 12 1 0 0 f f t f i 2 1266 "1266 23" _null_ _null_ _null_ timetz_scale _null_ _null_ _null_ )); DESCR("adjust time with time zone precision"); ! DATA(insert OID = 2003 ( textanycat PGNSP PGUID 14 1 0 0 f f t f i 2 25 "25 2776" _null_ _null_ _null_ "select $1 || $2::pg_catalog.text" _null_ _null_ _null_ )); DESCR("concatenate"); ! DATA(insert OID = 2004 ( anytextcat PGNSP PGUID 14 1 0 0 f f t f i 2 25 "2776 25" _null_ _null_ _null_ "select $1::pg_catalog.text || $2" _null_ _null_ _null_ )); DESCR("concatenate"); ! DATA(insert OID = 2005 ( bytealike PGNSP PGUID 12 1 0 0 f f t f i 2 16 "17 17" _null_ _null_ _null_ bytealike _null_ _null_ _null_ )); DESCR("matches LIKE expression"); ! DATA(insert OID = 2006 ( byteanlike PGNSP PGUID 12 1 0 0 f f t f i 2 16 "17 17" _null_ _null_ _null_ byteanlike _null_ _null_ _null_ )); DESCR("does not match LIKE expression"); ! DATA(insert OID = 2007 ( like PGNSP PGUID 12 1 0 0 f f t f i 2 16 "17 17" _null_ _null_ _null_ bytealike _null_ _null_ _null_ )); DESCR("matches LIKE expression"); ! DATA(insert OID = 2008 ( notlike PGNSP PGUID 12 1 0 0 f f t f i 2 16 "17 17" _null_ _null_ _null_ byteanlike _null_ _null_ _null_ )); DESCR("does not match LIKE expression"); ! DATA(insert OID = 2009 ( like_escape PGNSP PGUID 12 1 0 0 f f t f i 2 17 "17 17" _null_ _null_ _null_ like_escape_bytea _null_ _null_ _null_ )); DESCR("convert LIKE pattern to use backslash escapes"); ! DATA(insert OID = 2010 ( length PGNSP PGUID 12 1 0 0 f f t f i 1 23 "17" _null_ _null_ _null_ byteaoctetlen _null_ _null_ _null_ )); DESCR("octet length"); ! DATA(insert OID = 2011 ( byteacat PGNSP PGUID 12 1 0 0 f f t f i 2 17 "17 17" _null_ _null_ _null_ byteacat _null_ _null_ _null_ )); DESCR("concatenate"); ! DATA(insert OID = 2012 ( substring PGNSP PGUID 12 1 0 0 f f t f i 3 17 "17 23 23" _null_ _null_ _null_ bytea_substr _null_ _null_ _null_ )); DESCR("return portion of string"); ! DATA(insert OID = 2013 ( substring PGNSP PGUID 12 1 0 0 f f t f i 2 17 "17 23" _null_ _null_ _null_ bytea_substr_no_len _null_ _null_ _null_ )); DESCR("return portion of string"); ! DATA(insert OID = 2085 ( substr PGNSP PGUID 12 1 0 0 f f t f i 3 17 "17 23 23" _null_ _null_ _null_ bytea_substr _null_ _null_ _null_ )); DESCR("return portion of string"); ! DATA(insert OID = 2086 ( substr PGNSP PGUID 12 1 0 0 f f t f i 2 17 "17 23" _null_ _null_ _null_ bytea_substr_no_len _null_ _null_ _null_ )); DESCR("return portion of string"); ! DATA(insert OID = 2014 ( position PGNSP PGUID 12 1 0 0 f f t f i 2 23 "17 17" _null_ _null_ _null_ byteapos _null_ _null_ _null_ )); DESCR("return position of substring"); ! DATA(insert OID = 2015 ( btrim PGNSP PGUID 12 1 0 0 f f t f i 2 17 "17 17" _null_ _null_ _null_ byteatrim _null_ _null_ _null_ )); DESCR("trim both ends of string"); ! DATA(insert OID = 2019 ( time PGNSP PGUID 12 1 0 0 f f t f s 1 1083 "1184" _null_ _null_ _null_ timestamptz_time _null_ _null_ _null_ )); DESCR("convert timestamptz to time"); ! DATA(insert OID = 2020 ( date_trunc PGNSP PGUID 12 1 0 0 f f t f i 2 1114 "25 1114" _null_ _null_ _null_ timestamp_trunc _null_ _null_ _null_ )); DESCR("truncate timestamp to specified units"); ! DATA(insert OID = 2021 ( date_part PGNSP PGUID 12 1 0 0 f f t f i 2 701 "25 1114" _null_ _null_ _null_ timestamp_part _null_ _null_ _null_ )); DESCR("extract field from timestamp"); ! DATA(insert OID = 2023 ( timestamp PGNSP PGUID 12 1 0 0 f f t f s 1 1114 "702" _null_ _null_ _null_ abstime_timestamp _null_ _null_ _null_ )); DESCR("convert abstime to timestamp"); ! DATA(insert OID = 2024 ( timestamp PGNSP PGUID 12 1 0 0 f f t f i 1 1114 "1082" _null_ _null_ _null_ date_timestamp _null_ _null_ _null_ )); DESCR("convert date to timestamp"); ! DATA(insert OID = 2025 ( timestamp PGNSP PGUID 12 1 0 0 f f t f i 2 1114 "1082 1083" _null_ _null_ _null_ datetime_timestamp _null_ _null_ _null_ )); DESCR("convert date and time to timestamp"); ! DATA(insert OID = 2027 ( timestamp PGNSP PGUID 12 1 0 0 f f t f s 1 1114 "1184" _null_ _null_ _null_ timestamptz_timestamp _null_ _null_ _null_ )); DESCR("convert timestamp with time zone to timestamp"); ! DATA(insert OID = 2028 ( timestamptz PGNSP PGUID 12 1 0 0 f f t f s 1 1184 "1114" _null_ _null_ _null_ timestamp_timestamptz _null_ _null_ _null_ )); DESCR("convert timestamp to timestamp with time zone"); ! DATA(insert OID = 2029 ( date PGNSP PGUID 12 1 0 0 f f t f i 1 1082 "1114" _null_ _null_ _null_ timestamp_date _null_ _null_ _null_ )); DESCR("convert timestamp to date"); ! DATA(insert OID = 2030 ( abstime PGNSP PGUID 12 1 0 0 f f t f s 1 702 "1114" _null_ _null_ _null_ timestamp_abstime _null_ _null_ _null_ )); DESCR("convert timestamp to abstime"); ! DATA(insert OID = 2031 ( timestamp_mi PGNSP PGUID 12 1 0 0 f f t f i 2 1186 "1114 1114" _null_ _null_ _null_ timestamp_mi _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 2032 ( timestamp_pl_interval PGNSP PGUID 12 1 0 0 f f t f i 2 1114 "1114 1186" _null_ _null_ _null_ timestamp_pl_interval _null_ _null_ _null_ )); DESCR("plus"); ! DATA(insert OID = 2033 ( timestamp_mi_interval PGNSP PGUID 12 1 0 0 f f t f i 2 1114 "1114 1186" _null_ _null_ _null_ timestamp_mi_interval _null_ _null_ _null_ )); DESCR("minus"); ! DATA(insert OID = 2035 ( timestamp_smaller PGNSP PGUID 12 1 0 0 f f t f i 2 1114 "1114 1114" _null_ _null_ _null_ timestamp_smaller _null_ _null_ _null_ )); DESCR("smaller of two"); ! DATA(insert OID = 2036 ( timestamp_larger PGNSP PGUID 12 1 0 0 f f t f i 2 1114 "1114 1114" _null_ _null_ _null_ timestamp_larger _null_ _null_ _null_ )); DESCR("larger of two"); ! DATA(insert OID = 2037 ( timezone PGNSP PGUID 12 1 0 0 f f t f v 2 1266 "25 1266" _null_ _null_ _null_ timetz_zone _null_ _null_ _null_ )); DESCR("adjust time with time zone to new zone"); ! DATA(insert OID = 2038 ( timezone PGNSP PGUID 12 1 0 0 f f t f i 2 1266 "1186 1266" _null_ _null_ _null_ timetz_izone _null_ _null_ _null_ )); DESCR("adjust time with time zone to new zone"); ! DATA(insert OID = 2039 ( timestamp_hash PGNSP PGUID 12 1 0 0 f f t f i 1 23 "1114" _null_ _null_ _null_ timestamp_hash _null_ _null_ _null_ )); DESCR("hash"); ! DATA(insert OID = 2041 ( overlaps PGNSP PGUID 12 1 0 0 f f f f i 4 16 "1114 1114 1114 1114" _null_ _null_ _null_ overlaps_timestamp _null_ _null_ _null_ )); DESCR("intervals overlap?"); ! DATA(insert OID = 2042 ( overlaps PGNSP PGUID 14 1 0 0 f f f f i 4 16 "1114 1186 1114 1186" _null_ _null_ _null_ "select ($1, ($1 + $2)) overlaps ($3, ($3 + $4))" _null_ _null_ _null_ )); DESCR("intervals overlap?"); ! DATA(insert OID = 2043 ( overlaps PGNSP PGUID 14 1 0 0 f f f f i 4 16 "1114 1114 1114 1186" _null_ _null_ _null_ "select ($1, $2) overlaps ($3, ($3 + $4))" _null_ _null_ _null_ )); DESCR("intervals overlap?"); ! DATA(insert OID = 2044 ( overlaps PGNSP PGUID 14 1 0 0 f f f f i 4 16 "1114 1186 1114 1114" _null_ _null_ _null_ "select ($1, ($1 + $2)) overlaps ($3, $4)" _null_ _null_ _null_ )); DESCR("intervals overlap?"); ! DATA(insert OID = 2045 ( timestamp_cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "1114 1114" _null_ _null_ _null_ timestamp_cmp _null_ _null_ _null_ )); DESCR("less-equal-greater"); ! DATA(insert OID = 2046 ( time PGNSP PGUID 12 1 0 0 f f t f i 1 1083 "1266" _null_ _null_ _null_ timetz_time _null_ _null_ _null_ )); DESCR("convert time with time zone to time"); ! DATA(insert OID = 2047 ( timetz PGNSP PGUID 12 1 0 0 f f t f s 1 1266 "1083" _null_ _null_ _null_ time_timetz _null_ _null_ _null_ )); DESCR("convert time to timetz"); ! DATA(insert OID = 2048 ( isfinite PGNSP PGUID 12 1 0 0 f f t f i 1 16 "1114" _null_ _null_ _null_ timestamp_finite _null_ _null_ _null_ )); DESCR("finite timestamp?"); ! DATA(insert OID = 2049 ( to_char PGNSP PGUID 12 1 0 0 f f t f s 2 25 "1114 25" _null_ _null_ _null_ timestamp_to_char _null_ _null_ _null_ )); DESCR("format timestamp to text"); ! DATA(insert OID = 2052 ( timestamp_eq PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1114 1114" _null_ _null_ _null_ timestamp_eq _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 2053 ( timestamp_ne PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1114 1114" _null_ _null_ _null_ timestamp_ne _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 2054 ( timestamp_lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1114 1114" _null_ _null_ _null_ timestamp_lt _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 2055 ( timestamp_le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1114 1114" _null_ _null_ _null_ timestamp_le _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 2056 ( timestamp_ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1114 1114" _null_ _null_ _null_ timestamp_ge _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 2057 ( timestamp_gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1114 1114" _null_ _null_ _null_ timestamp_gt _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 2058 ( age PGNSP PGUID 12 1 0 0 f f t f i 2 1186 "1114 1114" _null_ _null_ _null_ timestamp_age _null_ _null_ _null_ )); DESCR("date difference preserving months and years"); ! DATA(insert OID = 2059 ( age PGNSP PGUID 14 1 0 0 f f t f s 1 1186 "1114" _null_ _null_ _null_ "select pg_catalog.age(cast(current_date as timestamp without time zone), $1)" _null_ _null_ _null_ )); DESCR("date difference from today preserving months and years"); ! DATA(insert OID = 2069 ( timezone PGNSP PGUID 12 1 0 0 f f t f i 2 1184 "25 1114" _null_ _null_ _null_ timestamp_zone _null_ _null_ _null_ )); DESCR("adjust timestamp to new time zone"); ! DATA(insert OID = 2070 ( timezone PGNSP PGUID 12 1 0 0 f f t f i 2 1184 "1186 1114" _null_ _null_ _null_ timestamp_izone _null_ _null_ _null_ )); DESCR("adjust timestamp to new time zone"); ! DATA(insert OID = 2071 ( date_pl_interval PGNSP PGUID 12 1 0 0 f f t f i 2 1114 "1082 1186" _null_ _null_ _null_ date_pl_interval _null_ _null_ _null_ )); DESCR("add"); ! DATA(insert OID = 2072 ( date_mi_interval PGNSP PGUID 12 1 0 0 f f t f i 2 1114 "1082 1186" _null_ _null_ _null_ date_mi_interval _null_ _null_ _null_ )); DESCR("subtract"); ! DATA(insert OID = 2073 ( substring PGNSP PGUID 12 1 0 0 f f t f i 2 25 "25 25" _null_ _null_ _null_ textregexsubstr _null_ _null_ _null_ )); DESCR("extracts text matching regular expression"); ! DATA(insert OID = 2074 ( substring PGNSP PGUID 14 1 0 0 f f t f i 3 25 "25 25 25" _null_ _null_ _null_ "select pg_catalog.substring($1, pg_catalog.similar_escape($2, $3))" _null_ _null_ _null_ )); DESCR("extracts text matching SQL99 regular expression"); ! DATA(insert OID = 2075 ( bit PGNSP PGUID 12 1 0 0 f f t f i 2 1560 "20 23" _null_ _null_ _null_ bitfromint8 _null_ _null_ _null_ )); DESCR("int8 to bitstring"); ! DATA(insert OID = 2076 ( int8 PGNSP PGUID 12 1 0 0 f f t f i 1 20 "1560" _null_ _null_ _null_ bittoint8 _null_ _null_ _null_ )); DESCR("bitstring to int8"); ! DATA(insert OID = 2077 ( current_setting PGNSP PGUID 12 1 0 0 f f t f s 1 25 "25" _null_ _null_ _null_ show_config_by_name _null_ _null_ _null_ )); DESCR("SHOW X as a function"); ! DATA(insert OID = 2078 ( set_config PGNSP PGUID 12 1 0 0 f f f f v 3 25 "25 25 16" _null_ _null_ _null_ set_config_by_name _null_ _null_ _null_ )); DESCR("SET X as a function"); ! DATA(insert OID = 2084 ( pg_show_all_settings PGNSP PGUID 12 1 1000 0 f f t t s 0 2249 "" "{25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,23}" "{o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}" "{name,setting,unit,category,short_desc,extra_desc,context,vartype,source,min_val,max_val,enumvals,boot_val,reset_val,sourcefile,sourceline}" show_all_settings _null_ _null_ _null_ )); DESCR("SHOW ALL as a function"); ! DATA(insert OID = 1371 ( pg_lock_status PGNSP PGUID 12 1 1000 0 f f t t v 0 2249 "" "{25,26,26,23,21,25,28,26,26,21,25,23,25,16}" "{o,o,o,o,o,o,o,o,o,o,o,o,o,o}" "{locktype,database,relation,page,tuple,virtualxid,transactionid,classid,objid,objsubid,virtualtransaction,pid,mode,granted}" pg_lock_status _null_ _null_ _null_ )); DESCR("view system lock information"); ! DATA(insert OID = 1065 ( pg_prepared_xact PGNSP PGUID 12 1 1000 0 f f t t v 0 2249 "" "{28,25,1184,26,26}" "{o,o,o,o,o}" "{transaction,gid,prepared,ownerid,dbid}" pg_prepared_xact _null_ _null_ _null_ )); DESCR("view two-phase transactions"); ! DATA(insert OID = 2079 ( pg_table_is_visible PGNSP PGUID 12 1 0 0 f f t f s 1 16 "26" _null_ _null_ _null_ pg_table_is_visible _null_ _null_ _null_ )); DESCR("is table visible in search path?"); ! DATA(insert OID = 2080 ( pg_type_is_visible PGNSP PGUID 12 1 0 0 f f t f s 1 16 "26" _null_ _null_ _null_ pg_type_is_visible _null_ _null_ _null_ )); DESCR("is type visible in search path?"); ! DATA(insert OID = 2081 ( pg_function_is_visible PGNSP PGUID 12 1 0 0 f f t f s 1 16 "26" _null_ _null_ _null_ pg_function_is_visible _null_ _null_ _null_ )); DESCR("is function visible in search path?"); ! DATA(insert OID = 2082 ( pg_operator_is_visible PGNSP PGUID 12 1 0 0 f f t f s 1 16 "26" _null_ _null_ _null_ pg_operator_is_visible _null_ _null_ _null_ )); DESCR("is operator visible in search path?"); ! DATA(insert OID = 2083 ( pg_opclass_is_visible PGNSP PGUID 12 1 0 0 f f t f s 1 16 "26" _null_ _null_ _null_ pg_opclass_is_visible _null_ _null_ _null_ )); DESCR("is opclass visible in search path?"); ! DATA(insert OID = 2093 ( pg_conversion_is_visible PGNSP PGUID 12 1 0 0 f f t f s 1 16 "26" _null_ _null_ _null_ pg_conversion_is_visible _null_ _null_ _null_ )); DESCR("is conversion visible in search path?"); ! DATA(insert OID = 3756 ( pg_ts_parser_is_visible PGNSP PGUID 12 1 0 0 f f t f s 1 16 "26" _null_ _null_ _null_ pg_ts_parser_is_visible _null_ _null_ _null_ )); DESCR("is text search parser visible in search path?"); ! DATA(insert OID = 3757 ( pg_ts_dict_is_visible PGNSP PGUID 12 1 0 0 f f t f s 1 16 "26" _null_ _null_ _null_ pg_ts_dict_is_visible _null_ _null_ _null_ )); DESCR("is text search dictionary visible in search path?"); ! DATA(insert OID = 3768 ( pg_ts_template_is_visible PGNSP PGUID 12 1 0 0 f f t f s 1 16 "26" _null_ _null_ _null_ pg_ts_template_is_visible _null_ _null_ _null_ )); DESCR("is text search template visible in search path?"); ! DATA(insert OID = 3758 ( pg_ts_config_is_visible PGNSP PGUID 12 1 0 0 f f t f s 1 16 "26" _null_ _null_ _null_ pg_ts_config_is_visible _null_ _null_ _null_ )); DESCR("is text search configuration visible in search path?"); ! DATA(insert OID = 2854 ( pg_my_temp_schema PGNSP PGUID 12 1 0 0 f f t f s 0 26 "" _null_ _null_ _null_ pg_my_temp_schema _null_ _null_ _null_ )); DESCR("get OID of current session's temp schema, if any"); ! DATA(insert OID = 2855 ( pg_is_other_temp_schema PGNSP PGUID 12 1 0 0 f f t f s 1 16 "26" _null_ _null_ _null_ pg_is_other_temp_schema _null_ _null_ _null_ )); DESCR("is schema another session's temp schema?"); ! DATA(insert OID = 2171 ( pg_cancel_backend PGNSP PGUID 12 1 0 0 f f t f v 1 16 "23" _null_ _null_ _null_ pg_cancel_backend _null_ _null_ _null_ )); DESCR("cancel a server process' current query"); ! DATA(insert OID = 2096 ( pg_terminate_backend PGNSP PGUID 12 1 0 0 f f t f v 1 16 "23" _null_ _null_ _null_ pg_terminate_backend _null_ _null_ _null_ )); DESCR("terminate a server process"); ! DATA(insert OID = 2172 ( pg_start_backup PGNSP PGUID 12 1 0 0 f f t f v 1 25 "25" _null_ _null_ _null_ pg_start_backup _null_ _null_ _null_ )); DESCR("prepare for taking an online backup"); ! DATA(insert OID = 2173 ( pg_stop_backup PGNSP PGUID 12 1 0 0 f f t f v 0 25 "" _null_ _null_ _null_ pg_stop_backup _null_ _null_ _null_ )); DESCR("finish taking an online backup"); ! DATA(insert OID = 2848 ( pg_switch_xlog PGNSP PGUID 12 1 0 0 f f t f v 0 25 "" _null_ _null_ _null_ pg_switch_xlog _null_ _null_ _null_ )); DESCR("switch to new xlog file"); ! DATA(insert OID = 2849 ( pg_current_xlog_location PGNSP PGUID 12 1 0 0 f f t f v 0 25 "" _null_ _null_ _null_ pg_current_xlog_location _null_ _null_ _null_ )); DESCR("current xlog write location"); ! DATA(insert OID = 2852 ( pg_current_xlog_insert_location PGNSP PGUID 12 1 0 0 f f t f v 0 25 "" _null_ _null_ _null_ pg_current_xlog_insert_location _null_ _null_ _null_ )); DESCR("current xlog insert location"); ! DATA(insert OID = 2850 ( pg_xlogfile_name_offset PGNSP PGUID 12 1 0 0 f f t f i 1 2249 "25" "{25,25,23}" "{i,o,o}" "{wal_location,file_name,file_offset}" pg_xlogfile_name_offset _null_ _null_ _null_ )); DESCR("xlog filename and byte offset, given an xlog location"); ! DATA(insert OID = 2851 ( pg_xlogfile_name PGNSP PGUID 12 1 0 0 f f t f i 1 25 "25" _null_ _null_ _null_ pg_xlogfile_name _null_ _null_ _null_ )); DESCR("xlog filename, given an xlog location"); ! DATA(insert OID = 2621 ( pg_reload_conf PGNSP PGUID 12 1 0 0 f f t f v 0 16 "" _null_ _null_ _null_ pg_reload_conf _null_ _null_ _null_ )); DESCR("reload configuration files"); ! DATA(insert OID = 2622 ( pg_rotate_logfile PGNSP PGUID 12 1 0 0 f f t f v 0 16 "" _null_ _null_ _null_ pg_rotate_logfile _null_ _null_ _null_ )); DESCR("rotate log file"); ! DATA(insert OID = 2623 ( pg_stat_file PGNSP PGUID 12 1 0 0 f f t f v 1 2249 "25" "{25,20,1184,1184,1184,1184,16}" "{i,o,o,o,o,o,o}" "{filename,size,access,modification,change,creation,isdir}" pg_stat_file _null_ _null_ _null_ )); DESCR("return file information"); ! DATA(insert OID = 2624 ( pg_read_file PGNSP PGUID 12 1 0 0 f f t f v 3 25 "25 20 20" _null_ _null_ _null_ pg_read_file _null_ _null_ _null_ )); DESCR("read text from a file"); ! DATA(insert OID = 2625 ( pg_ls_dir PGNSP PGUID 12 1 1000 0 f f t t v 1 25 "25" _null_ _null_ _null_ pg_ls_dir _null_ _null_ _null_ )); DESCR("list all files in a directory"); ! DATA(insert OID = 2626 ( pg_sleep PGNSP PGUID 12 1 0 0 f f t f v 1 2278 "701" _null_ _null_ _null_ pg_sleep _null_ _null_ _null_ )); DESCR("sleep for the specified time in seconds"); ! DATA(insert OID = 2971 ( text PGNSP PGUID 12 1 0 0 f f t f i 1 25 "16" _null_ _null_ _null_ booltext _null_ _null_ _null_ )); DESCR("convert boolean to text"); /* Aggregates (moved here from pg_aggregate for 7.3) */ ! DATA(insert OID = 2100 ( avg PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "20" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("the average (arithmetic mean) as numeric of all bigint values"); ! DATA(insert OID = 2101 ( avg PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "23" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("the average (arithmetic mean) as numeric of all integer values"); ! DATA(insert OID = 2102 ( avg PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "21" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("the average (arithmetic mean) as numeric of all smallint values"); ! DATA(insert OID = 2103 ( avg PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "1700" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("the average (arithmetic mean) as numeric of all numeric values"); ! DATA(insert OID = 2104 ( avg PGNSP PGUID 12 1 0 0 t f f f i 1 701 "700" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("the average (arithmetic mean) as float8 of all float4 values"); ! DATA(insert OID = 2105 ( avg PGNSP PGUID 12 1 0 0 t f f f i 1 701 "701" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("the average (arithmetic mean) as float8 of all float8 values"); ! DATA(insert OID = 2106 ( avg PGNSP PGUID 12 1 0 0 t f f f i 1 1186 "1186" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("the average (arithmetic mean) as interval of all interval values"); ! DATA(insert OID = 2107 ( sum PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "20" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sum as numeric across all bigint input values"); ! DATA(insert OID = 2108 ( sum PGNSP PGUID 12 1 0 0 t f f f i 1 20 "23" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sum as bigint across all integer input values"); ! DATA(insert OID = 2109 ( sum PGNSP PGUID 12 1 0 0 t f f f i 1 20 "21" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sum as bigint across all smallint input values"); ! DATA(insert OID = 2110 ( sum PGNSP PGUID 12 1 0 0 t f f f i 1 700 "700" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sum as float4 across all float4 input values"); ! DATA(insert OID = 2111 ( sum PGNSP PGUID 12 1 0 0 t f f f i 1 701 "701" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sum as float8 across all float8 input values"); ! DATA(insert OID = 2112 ( sum PGNSP PGUID 12 1 0 0 t f f f i 1 790 "790" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sum as money across all money input values"); ! DATA(insert OID = 2113 ( sum PGNSP PGUID 12 1 0 0 t f f f i 1 1186 "1186" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sum as interval across all interval input values"); ! DATA(insert OID = 2114 ( sum PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "1700" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sum as numeric across all numeric input values"); ! DATA(insert OID = 2115 ( max PGNSP PGUID 12 1 0 0 t f f f i 1 20 "20" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("maximum value of all bigint input values"); ! DATA(insert OID = 2116 ( max PGNSP PGUID 12 1 0 0 t f f f i 1 23 "23" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("maximum value of all integer input values"); ! DATA(insert OID = 2117 ( max PGNSP PGUID 12 1 0 0 t f f f i 1 21 "21" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("maximum value of all smallint input values"); ! DATA(insert OID = 2118 ( max PGNSP PGUID 12 1 0 0 t f f f i 1 26 "26" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("maximum value of all oid input values"); ! DATA(insert OID = 2119 ( max PGNSP PGUID 12 1 0 0 t f f f i 1 700 "700" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("maximum value of all float4 input values"); ! DATA(insert OID = 2120 ( max PGNSP PGUID 12 1 0 0 t f f f i 1 701 "701" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("maximum value of all float8 input values"); ! DATA(insert OID = 2121 ( max PGNSP PGUID 12 1 0 0 t f f f i 1 702 "702" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("maximum value of all abstime input values"); ! DATA(insert OID = 2122 ( max PGNSP PGUID 12 1 0 0 t f f f i 1 1082 "1082" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("maximum value of all date input values"); ! DATA(insert OID = 2123 ( max PGNSP PGUID 12 1 0 0 t f f f i 1 1083 "1083" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("maximum value of all time input values"); ! DATA(insert OID = 2124 ( max PGNSP PGUID 12 1 0 0 t f f f i 1 1266 "1266" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("maximum value of all time with time zone input values"); ! DATA(insert OID = 2125 ( max PGNSP PGUID 12 1 0 0 t f f f i 1 790 "790" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("maximum value of all money input values"); ! DATA(insert OID = 2126 ( max PGNSP PGUID 12 1 0 0 t f f f i 1 1114 "1114" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("maximum value of all timestamp input values"); ! DATA(insert OID = 2127 ( max PGNSP PGUID 12 1 0 0 t f f f i 1 1184 "1184" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("maximum value of all timestamp with time zone input values"); ! DATA(insert OID = 2128 ( max PGNSP PGUID 12 1 0 0 t f f f i 1 1186 "1186" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("maximum value of all interval input values"); ! DATA(insert OID = 2129 ( max PGNSP PGUID 12 1 0 0 t f f f i 1 25 "25" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("maximum value of all text input values"); ! DATA(insert OID = 2130 ( max PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "1700" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("maximum value of all numeric input values"); ! DATA(insert OID = 2050 ( max PGNSP PGUID 12 1 0 0 t f f f i 1 2277 "2277" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("maximum value of all anyarray input values"); ! DATA(insert OID = 2244 ( max PGNSP PGUID 12 1 0 0 t f f f i 1 1042 "1042" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("maximum value of all bpchar input values"); ! DATA(insert OID = 2797 ( max PGNSP PGUID 12 1 0 0 t f f f i 1 27 "27" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("maximum value of all tid input values"); ! DATA(insert OID = 2131 ( min PGNSP PGUID 12 1 0 0 t f f f i 1 20 "20" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("minimum value of all bigint input values"); ! DATA(insert OID = 2132 ( min PGNSP PGUID 12 1 0 0 t f f f i 1 23 "23" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("minimum value of all integer input values"); ! DATA(insert OID = 2133 ( min PGNSP PGUID 12 1 0 0 t f f f i 1 21 "21" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("minimum value of all smallint input values"); ! DATA(insert OID = 2134 ( min PGNSP PGUID 12 1 0 0 t f f f i 1 26 "26" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("minimum value of all oid input values"); ! DATA(insert OID = 2135 ( min PGNSP PGUID 12 1 0 0 t f f f i 1 700 "700" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("minimum value of all float4 input values"); ! DATA(insert OID = 2136 ( min PGNSP PGUID 12 1 0 0 t f f f i 1 701 "701" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("minimum value of all float8 input values"); ! DATA(insert OID = 2137 ( min PGNSP PGUID 12 1 0 0 t f f f i 1 702 "702" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("minimum value of all abstime input values"); ! DATA(insert OID = 2138 ( min PGNSP PGUID 12 1 0 0 t f f f i 1 1082 "1082" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("minimum value of all date input values"); ! DATA(insert OID = 2139 ( min PGNSP PGUID 12 1 0 0 t f f f i 1 1083 "1083" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("minimum value of all time input values"); ! DATA(insert OID = 2140 ( min PGNSP PGUID 12 1 0 0 t f f f i 1 1266 "1266" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("minimum value of all time with time zone input values"); ! DATA(insert OID = 2141 ( min PGNSP PGUID 12 1 0 0 t f f f i 1 790 "790" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("minimum value of all money input values"); ! DATA(insert OID = 2142 ( min PGNSP PGUID 12 1 0 0 t f f f i 1 1114 "1114" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("minimum value of all timestamp input values"); ! DATA(insert OID = 2143 ( min PGNSP PGUID 12 1 0 0 t f f f i 1 1184 "1184" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("minimum value of all timestamp with time zone input values"); ! DATA(insert OID = 2144 ( min PGNSP PGUID 12 1 0 0 t f f f i 1 1186 "1186" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("minimum value of all interval input values"); ! DATA(insert OID = 2145 ( min PGNSP PGUID 12 1 0 0 t f f f i 1 25 "25" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("minimum value of all text values"); ! DATA(insert OID = 2146 ( min PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "1700" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("minimum value of all numeric input values"); ! DATA(insert OID = 2051 ( min PGNSP PGUID 12 1 0 0 t f f f i 1 2277 "2277" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("minimum value of all anyarray input values"); ! DATA(insert OID = 2245 ( min PGNSP PGUID 12 1 0 0 t f f f i 1 1042 "1042" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("minimum value of all bpchar input values"); ! DATA(insert OID = 2798 ( min PGNSP PGUID 12 1 0 0 t f f f i 1 27 "27" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("minimum value of all tid input values"); /* count has two forms: count(any) and count(*) */ ! DATA(insert OID = 2147 ( count PGNSP PGUID 12 1 0 0 t f f f i 1 20 "2276" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("number of input rows for which the input expression is not null"); ! DATA(insert OID = 2803 ( count PGNSP PGUID 12 1 0 0 t f f f i 0 20 "" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("number of input rows"); ! DATA(insert OID = 2718 ( var_pop PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "20" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("population variance of bigint input values (square of the population standard deviation)"); ! DATA(insert OID = 2719 ( var_pop PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "23" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("population variance of integer input values (square of the population standard deviation)"); ! DATA(insert OID = 2720 ( var_pop PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "21" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("population variance of smallint input values (square of the population standard deviation)"); ! DATA(insert OID = 2721 ( var_pop PGNSP PGUID 12 1 0 0 t f f f i 1 701 "700" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("population variance of float4 input values (square of the population standard deviation)"); ! DATA(insert OID = 2722 ( var_pop PGNSP PGUID 12 1 0 0 t f f f i 1 701 "701" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("population variance of float8 input values (square of the population standard deviation)"); ! DATA(insert OID = 2723 ( var_pop PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "1700" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("population variance of numeric input values (square of the population standard deviation)"); ! DATA(insert OID = 2641 ( var_samp PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "20" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sample variance of bigint input values (square of the sample standard deviation)"); ! DATA(insert OID = 2642 ( var_samp PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "23" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sample variance of integer input values (square of the sample standard deviation)"); ! DATA(insert OID = 2643 ( var_samp PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "21" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sample variance of smallint input values (square of the sample standard deviation)"); ! DATA(insert OID = 2644 ( var_samp PGNSP PGUID 12 1 0 0 t f f f i 1 701 "700" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sample variance of float4 input values (square of the sample standard deviation)"); ! DATA(insert OID = 2645 ( var_samp PGNSP PGUID 12 1 0 0 t f f f i 1 701 "701" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sample variance of float8 input values (square of the sample standard deviation)"); ! DATA(insert OID = 2646 ( var_samp PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "1700" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sample variance of numeric input values (square of the sample standard deviation)"); ! DATA(insert OID = 2148 ( variance PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "20" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("historical alias for var_samp"); ! DATA(insert OID = 2149 ( variance PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "23" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("historical alias for var_samp"); ! DATA(insert OID = 2150 ( variance PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "21" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("historical alias for var_samp"); ! DATA(insert OID = 2151 ( variance PGNSP PGUID 12 1 0 0 t f f f i 1 701 "700" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("historical alias for var_samp"); ! DATA(insert OID = 2152 ( variance PGNSP PGUID 12 1 0 0 t f f f i 1 701 "701" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("historical alias for var_samp"); ! DATA(insert OID = 2153 ( variance PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "1700" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("historical alias for var_samp"); ! DATA(insert OID = 2724 ( stddev_pop PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "20" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("population standard deviation of bigint input values"); ! DATA(insert OID = 2725 ( stddev_pop PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "23" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("population standard deviation of integer input values"); ! DATA(insert OID = 2726 ( stddev_pop PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "21" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("population standard deviation of smallint input values"); ! DATA(insert OID = 2727 ( stddev_pop PGNSP PGUID 12 1 0 0 t f f f i 1 701 "700" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("population standard deviation of float4 input values"); ! DATA(insert OID = 2728 ( stddev_pop PGNSP PGUID 12 1 0 0 t f f f i 1 701 "701" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("population standard deviation of float8 input values"); ! DATA(insert OID = 2729 ( stddev_pop PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "1700" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("population standard deviation of numeric input values"); ! DATA(insert OID = 2712 ( stddev_samp PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "20" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sample standard deviation of bigint input values"); ! DATA(insert OID = 2713 ( stddev_samp PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "23" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sample standard deviation of integer input values"); ! DATA(insert OID = 2714 ( stddev_samp PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "21" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sample standard deviation of smallint input values"); ! DATA(insert OID = 2715 ( stddev_samp PGNSP PGUID 12 1 0 0 t f f f i 1 701 "700" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sample standard deviation of float4 input values"); ! DATA(insert OID = 2716 ( stddev_samp PGNSP PGUID 12 1 0 0 t f f f i 1 701 "701" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sample standard deviation of float8 input values"); ! DATA(insert OID = 2717 ( stddev_samp PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "1700" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sample standard deviation of numeric input values"); ! DATA(insert OID = 2154 ( stddev PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "20" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("historical alias for stddev_samp"); ! DATA(insert OID = 2155 ( stddev PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "23" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("historical alias for stddev_samp"); ! DATA(insert OID = 2156 ( stddev PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "21" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("historical alias for stddev_samp"); ! DATA(insert OID = 2157 ( stddev PGNSP PGUID 12 1 0 0 t f f f i 1 701 "700" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("historical alias for stddev_samp"); ! DATA(insert OID = 2158 ( stddev PGNSP PGUID 12 1 0 0 t f f f i 1 701 "701" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("historical alias for stddev_samp"); ! DATA(insert OID = 2159 ( stddev PGNSP PGUID 12 1 0 0 t f f f i 1 1700 "1700" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("historical alias for stddev_samp"); ! DATA(insert OID = 2818 ( regr_count PGNSP PGUID 12 1 0 0 t f f f i 2 20 "701 701" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("number of input rows in which both expressions are nonnull"); ! DATA(insert OID = 2819 ( regr_sxx PGNSP PGUID 12 1 0 0 t f f f i 2 701 "701 701" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sum of squares of the independent variable (sum(X^2) - sum(X)^2/N)"); ! DATA(insert OID = 2820 ( regr_syy PGNSP PGUID 12 1 0 0 t f f f i 2 701 "701 701" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sum of squares of the dependent variable (sum(Y^2) - sum(Y)^2/N)"); ! DATA(insert OID = 2821 ( regr_sxy PGNSP PGUID 12 1 0 0 t f f f i 2 701 "701 701" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sum of products of independent times dependent variable (sum(X*Y) - sum(X) * sum(Y)/N)"); ! DATA(insert OID = 2822 ( regr_avgx PGNSP PGUID 12 1 0 0 t f f f i 2 701 "701 701" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("average of the independent variable (sum(X)/N)"); ! DATA(insert OID = 2823 ( regr_avgy PGNSP PGUID 12 1 0 0 t f f f i 2 701 "701 701" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("average of the dependent variable (sum(Y)/N)"); ! DATA(insert OID = 2824 ( regr_r2 PGNSP PGUID 12 1 0 0 t f f f i 2 701 "701 701" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("square of the correlation coefficient"); ! DATA(insert OID = 2825 ( regr_slope PGNSP PGUID 12 1 0 0 t f f f i 2 701 "701 701" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("slope of the least-squares-fit linear equation determined by the (X, Y) pairs"); ! DATA(insert OID = 2826 ( regr_intercept PGNSP PGUID 12 1 0 0 t f f f i 2 701 "701 701" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("y-intercept of the least-squares-fit linear equation determined by the (X, Y) pairs"); ! DATA(insert OID = 2827 ( covar_pop PGNSP PGUID 12 1 0 0 t f f f i 2 701 "701 701" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("population covariance"); ! DATA(insert OID = 2828 ( covar_samp PGNSP PGUID 12 1 0 0 t f f f i 2 701 "701 701" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("sample covariance"); ! DATA(insert OID = 2829 ( corr PGNSP PGUID 12 1 0 0 t f f f i 2 701 "701 701" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("correlation coefficient"); ! DATA(insert OID = 2160 ( text_pattern_lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "25 25" _null_ _null_ _null_ text_pattern_lt _null_ _null_ _null_ )); ! DATA(insert OID = 2161 ( text_pattern_le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "25 25" _null_ _null_ _null_ text_pattern_le _null_ _null_ _null_ )); ! DATA(insert OID = 2163 ( text_pattern_ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "25 25" _null_ _null_ _null_ text_pattern_ge _null_ _null_ _null_ )); ! DATA(insert OID = 2164 ( text_pattern_gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "25 25" _null_ _null_ _null_ text_pattern_gt _null_ _null_ _null_ )); ! DATA(insert OID = 2166 ( bttext_pattern_cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "25 25" _null_ _null_ _null_ bttext_pattern_cmp _null_ _null_ _null_ )); ! DATA(insert OID = 2174 ( bpchar_pattern_lt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1042 1042" _null_ _null_ _null_ bpchar_pattern_lt _null_ _null_ _null_ )); ! DATA(insert OID = 2175 ( bpchar_pattern_le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1042 1042" _null_ _null_ _null_ bpchar_pattern_le _null_ _null_ _null_ )); ! DATA(insert OID = 2177 ( bpchar_pattern_ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1042 1042" _null_ _null_ _null_ bpchar_pattern_ge _null_ _null_ _null_ )); ! DATA(insert OID = 2178 ( bpchar_pattern_gt PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1042 1042" _null_ _null_ _null_ bpchar_pattern_gt _null_ _null_ _null_ )); ! DATA(insert OID = 2180 ( btbpchar_pattern_cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "1042 1042" _null_ _null_ _null_ btbpchar_pattern_cmp _null_ _null_ _null_ )); ! DATA(insert OID = 2188 ( btint48cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "23 20" _null_ _null_ _null_ btint48cmp _null_ _null_ _null_ )); ! DATA(insert OID = 2189 ( btint84cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "20 23" _null_ _null_ _null_ btint84cmp _null_ _null_ _null_ )); ! DATA(insert OID = 2190 ( btint24cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "21 23" _null_ _null_ _null_ btint24cmp _null_ _null_ _null_ )); ! DATA(insert OID = 2191 ( btint42cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "23 21" _null_ _null_ _null_ btint42cmp _null_ _null_ _null_ )); ! DATA(insert OID = 2192 ( btint28cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "21 20" _null_ _null_ _null_ btint28cmp _null_ _null_ _null_ )); ! DATA(insert OID = 2193 ( btint82cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "20 21" _null_ _null_ _null_ btint82cmp _null_ _null_ _null_ )); ! DATA(insert OID = 2194 ( btfloat48cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "700 701" _null_ _null_ _null_ btfloat48cmp _null_ _null_ _null_ )); ! DATA(insert OID = 2195 ( btfloat84cmp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "701 700" _null_ _null_ _null_ btfloat84cmp _null_ _null_ _null_ )); ! DATA(insert OID = 2212 ( regprocedurein PGNSP PGUID 12 1 0 0 f f t f s 1 2202 "2275" _null_ _null_ _null_ regprocedurein _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2213 ( regprocedureout PGNSP PGUID 12 1 0 0 f f t f s 1 2275 "2202" _null_ _null_ _null_ regprocedureout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2214 ( regoperin PGNSP PGUID 12 1 0 0 f f t f s 1 2203 "2275" _null_ _null_ _null_ regoperin _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2215 ( regoperout PGNSP PGUID 12 1 0 0 f f t f s 1 2275 "2203" _null_ _null_ _null_ regoperout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2216 ( regoperatorin PGNSP PGUID 12 1 0 0 f f t f s 1 2204 "2275" _null_ _null_ _null_ regoperatorin _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2217 ( regoperatorout PGNSP PGUID 12 1 0 0 f f t f s 1 2275 "2204" _null_ _null_ _null_ regoperatorout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2218 ( regclassin PGNSP PGUID 12 1 0 0 f f t f s 1 2205 "2275" _null_ _null_ _null_ regclassin _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2219 ( regclassout PGNSP PGUID 12 1 0 0 f f t f s 1 2275 "2205" _null_ _null_ _null_ regclassout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2220 ( regtypein PGNSP PGUID 12 1 0 0 f f t f s 1 2206 "2275" _null_ _null_ _null_ regtypein _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2221 ( regtypeout PGNSP PGUID 12 1 0 0 f f t f s 1 2275 "2206" _null_ _null_ _null_ regtypeout _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 1079 ( regclass PGNSP PGUID 12 1 0 0 f f t f s 1 2205 "25" _null_ _null_ _null_ text_regclass _null_ _null_ _null_ )); DESCR("convert text to regclass"); ! DATA(insert OID = 2246 ( fmgr_internal_validator PGNSP PGUID 12 1 0 0 f f t f s 1 2278 "26" _null_ _null_ _null_ fmgr_internal_validator _null_ _null_ _null_ )); DESCR("(internal)"); ! DATA(insert OID = 2247 ( fmgr_c_validator PGNSP PGUID 12 1 0 0 f f t f s 1 2278 "26" _null_ _null_ _null_ fmgr_c_validator _null_ _null_ _null_ )); DESCR("(internal)"); ! DATA(insert OID = 2248 ( fmgr_sql_validator PGNSP PGUID 12 1 0 0 f f t f s 1 2278 "26" _null_ _null_ _null_ fmgr_sql_validator _null_ _null_ _null_ )); DESCR("(internal)"); ! DATA(insert OID = 2250 ( has_database_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "19 25 25" _null_ _null_ _null_ has_database_privilege_name_name _null_ _null_ _null_ )); DESCR("user privilege on database by username, database name"); ! DATA(insert OID = 2251 ( has_database_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "19 26 25" _null_ _null_ _null_ has_database_privilege_name_id _null_ _null_ _null_ )); DESCR("user privilege on database by username, database oid"); ! DATA(insert OID = 2252 ( has_database_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "26 25 25" _null_ _null_ _null_ has_database_privilege_id_name _null_ _null_ _null_ )); DESCR("user privilege on database by user oid, database name"); ! DATA(insert OID = 2253 ( has_database_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "26 26 25" _null_ _null_ _null_ has_database_privilege_id_id _null_ _null_ _null_ )); DESCR("user privilege on database by user oid, database oid"); ! DATA(insert OID = 2254 ( has_database_privilege PGNSP PGUID 12 1 0 0 f f t f s 2 16 "25 25" _null_ _null_ _null_ has_database_privilege_name _null_ _null_ _null_ )); DESCR("current user privilege on database by database name"); ! DATA(insert OID = 2255 ( has_database_privilege PGNSP PGUID 12 1 0 0 f f t f s 2 16 "26 25" _null_ _null_ _null_ has_database_privilege_id _null_ _null_ _null_ )); DESCR("current user privilege on database by database oid"); ! DATA(insert OID = 2256 ( has_function_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "19 25 25" _null_ _null_ _null_ has_function_privilege_name_name _null_ _null_ _null_ )); DESCR("user privilege on function by username, function name"); ! DATA(insert OID = 2257 ( has_function_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "19 26 25" _null_ _null_ _null_ has_function_privilege_name_id _null_ _null_ _null_ )); DESCR("user privilege on function by username, function oid"); ! DATA(insert OID = 2258 ( has_function_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "26 25 25" _null_ _null_ _null_ has_function_privilege_id_name _null_ _null_ _null_ )); DESCR("user privilege on function by user oid, function name"); ! DATA(insert OID = 2259 ( has_function_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "26 26 25" _null_ _null_ _null_ has_function_privilege_id_id _null_ _null_ _null_ )); DESCR("user privilege on function by user oid, function oid"); ! DATA(insert OID = 2260 ( has_function_privilege PGNSP PGUID 12 1 0 0 f f t f s 2 16 "25 25" _null_ _null_ _null_ has_function_privilege_name _null_ _null_ _null_ )); DESCR("current user privilege on function by function name"); ! DATA(insert OID = 2261 ( has_function_privilege PGNSP PGUID 12 1 0 0 f f t f s 2 16 "26 25" _null_ _null_ _null_ has_function_privilege_id _null_ _null_ _null_ )); DESCR("current user privilege on function by function oid"); ! DATA(insert OID = 2262 ( has_language_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "19 25 25" _null_ _null_ _null_ has_language_privilege_name_name _null_ _null_ _null_ )); DESCR("user privilege on language by username, language name"); ! DATA(insert OID = 2263 ( has_language_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "19 26 25" _null_ _null_ _null_ has_language_privilege_name_id _null_ _null_ _null_ )); DESCR("user privilege on language by username, language oid"); ! DATA(insert OID = 2264 ( has_language_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "26 25 25" _null_ _null_ _null_ has_language_privilege_id_name _null_ _null_ _null_ )); DESCR("user privilege on language by user oid, language name"); ! DATA(insert OID = 2265 ( has_language_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "26 26 25" _null_ _null_ _null_ has_language_privilege_id_id _null_ _null_ _null_ )); DESCR("user privilege on language by user oid, language oid"); ! DATA(insert OID = 2266 ( has_language_privilege PGNSP PGUID 12 1 0 0 f f t f s 2 16 "25 25" _null_ _null_ _null_ has_language_privilege_name _null_ _null_ _null_ )); DESCR("current user privilege on language by language name"); ! DATA(insert OID = 2267 ( has_language_privilege PGNSP PGUID 12 1 0 0 f f t f s 2 16 "26 25" _null_ _null_ _null_ has_language_privilege_id _null_ _null_ _null_ )); DESCR("current user privilege on language by language oid"); ! DATA(insert OID = 2268 ( has_schema_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "19 25 25" _null_ _null_ _null_ has_schema_privilege_name_name _null_ _null_ _null_ )); DESCR("user privilege on schema by username, schema name"); ! DATA(insert OID = 2269 ( has_schema_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "19 26 25" _null_ _null_ _null_ has_schema_privilege_name_id _null_ _null_ _null_ )); DESCR("user privilege on schema by username, schema oid"); ! DATA(insert OID = 2270 ( has_schema_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "26 25 25" _null_ _null_ _null_ has_schema_privilege_id_name _null_ _null_ _null_ )); DESCR("user privilege on schema by user oid, schema name"); ! DATA(insert OID = 2271 ( has_schema_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "26 26 25" _null_ _null_ _null_ has_schema_privilege_id_id _null_ _null_ _null_ )); DESCR("user privilege on schema by user oid, schema oid"); ! DATA(insert OID = 2272 ( has_schema_privilege PGNSP PGUID 12 1 0 0 f f t f s 2 16 "25 25" _null_ _null_ _null_ has_schema_privilege_name _null_ _null_ _null_ )); DESCR("current user privilege on schema by schema name"); ! DATA(insert OID = 2273 ( has_schema_privilege PGNSP PGUID 12 1 0 0 f f t f s 2 16 "26 25" _null_ _null_ _null_ has_schema_privilege_id _null_ _null_ _null_ )); DESCR("current user privilege on schema by schema oid"); ! DATA(insert OID = 2390 ( has_tablespace_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "19 25 25" _null_ _null_ _null_ has_tablespace_privilege_name_name _null_ _null_ _null_ )); DESCR("user privilege on tablespace by username, tablespace name"); ! DATA(insert OID = 2391 ( has_tablespace_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "19 26 25" _null_ _null_ _null_ has_tablespace_privilege_name_id _null_ _null_ _null_ )); DESCR("user privilege on tablespace by username, tablespace oid"); ! DATA(insert OID = 2392 ( has_tablespace_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "26 25 25" _null_ _null_ _null_ has_tablespace_privilege_id_name _null_ _null_ _null_ )); DESCR("user privilege on tablespace by user oid, tablespace name"); ! DATA(insert OID = 2393 ( has_tablespace_privilege PGNSP PGUID 12 1 0 0 f f t f s 3 16 "26 26 25" _null_ _null_ _null_ has_tablespace_privilege_id_id _null_ _null_ _null_ )); DESCR("user privilege on tablespace by user oid, tablespace oid"); ! DATA(insert OID = 2394 ( has_tablespace_privilege PGNSP PGUID 12 1 0 0 f f t f s 2 16 "25 25" _null_ _null_ _null_ has_tablespace_privilege_name _null_ _null_ _null_ )); DESCR("current user privilege on tablespace by tablespace name"); ! DATA(insert OID = 2395 ( has_tablespace_privilege PGNSP PGUID 12 1 0 0 f f t f s 2 16 "26 25" _null_ _null_ _null_ has_tablespace_privilege_id _null_ _null_ _null_ )); DESCR("current user privilege on tablespace by tablespace oid"); ! DATA(insert OID = 2705 ( pg_has_role PGNSP PGUID 12 1 0 0 f f t f s 3 16 "19 19 25" _null_ _null_ _null_ pg_has_role_name_name _null_ _null_ _null_ )); DESCR("user privilege on role by username, role name"); ! DATA(insert OID = 2706 ( pg_has_role PGNSP PGUID 12 1 0 0 f f t f s 3 16 "19 26 25" _null_ _null_ _null_ pg_has_role_name_id _null_ _null_ _null_ )); DESCR("user privilege on role by username, role oid"); ! DATA(insert OID = 2707 ( pg_has_role PGNSP PGUID 12 1 0 0 f f t f s 3 16 "26 19 25" _null_ _null_ _null_ pg_has_role_id_name _null_ _null_ _null_ )); DESCR("user privilege on role by user oid, role name"); ! DATA(insert OID = 2708 ( pg_has_role PGNSP PGUID 12 1 0 0 f f t f s 3 16 "26 26 25" _null_ _null_ _null_ pg_has_role_id_id _null_ _null_ _null_ )); DESCR("user privilege on role by user oid, role oid"); ! DATA(insert OID = 2709 ( pg_has_role PGNSP PGUID 12 1 0 0 f f t f s 2 16 "19 25" _null_ _null_ _null_ pg_has_role_name _null_ _null_ _null_ )); DESCR("current user privilege on role by role name"); ! DATA(insert OID = 2710 ( pg_has_role PGNSP PGUID 12 1 0 0 f f t f s 2 16 "26 25" _null_ _null_ _null_ pg_has_role_id _null_ _null_ _null_ )); DESCR("current user privilege on role by role oid"); ! DATA(insert OID = 1269 ( pg_column_size PGNSP PGUID 12 1 0 0 f f t f s 1 23 "2276" _null_ _null_ _null_ pg_column_size _null_ _null_ _null_ )); DESCR("bytes required to store the value, perhaps with compression"); ! DATA(insert OID = 2322 ( pg_tablespace_size PGNSP PGUID 12 1 0 0 f f t f v 1 20 "26" _null_ _null_ _null_ pg_tablespace_size_oid _null_ _null_ _null_ )); DESCR("total disk space usage for the specified tablespace"); ! DATA(insert OID = 2323 ( pg_tablespace_size PGNSP PGUID 12 1 0 0 f f t f v 1 20 "19" _null_ _null_ _null_ pg_tablespace_size_name _null_ _null_ _null_ )); DESCR("total disk space usage for the specified tablespace"); ! DATA(insert OID = 2324 ( pg_database_size PGNSP PGUID 12 1 0 0 f f t f v 1 20 "26" _null_ _null_ _null_ pg_database_size_oid _null_ _null_ _null_ )); DESCR("total disk space usage for the specified database"); ! DATA(insert OID = 2168 ( pg_database_size PGNSP PGUID 12 1 0 0 f f t f v 1 20 "19" _null_ _null_ _null_ pg_database_size_name _null_ _null_ _null_ )); DESCR("total disk space usage for the specified database"); ! DATA(insert OID = 2325 ( pg_relation_size PGNSP PGUID 14 1 0 0 f f t f v 1 20 "2205" _null_ _null_ _null_ "select pg_catalog.pg_relation_size($1, ''main'')" _null_ _null_ _null_ )); DESCR("disk space usage for the specified table or index"); ! DATA(insert OID = 2332 ( pg_relation_size PGNSP PGUID 12 1 0 0 f f t f v 2 20 "2205 25" _null_ _null_ _null_ pg_relation_size _null_ _null_ _null_ )); DESCR("disk space usage for the specified fork of a table or index"); ! DATA(insert OID = 2286 ( pg_total_relation_size PGNSP PGUID 12 1 0 0 f f t f v 1 20 "2205" _null_ _null_ _null_ pg_total_relation_size _null_ _null_ _null_ )); DESCR("total disk space usage for the specified table and associated indexes and toast tables"); ! DATA(insert OID = 2288 ( pg_size_pretty PGNSP PGUID 12 1 0 0 f f t f v 1 25 "20" _null_ _null_ _null_ pg_size_pretty _null_ _null_ _null_ )); DESCR("convert a long int to a human readable text using size units"); ! DATA(insert OID = 2290 ( record_in PGNSP PGUID 12 1 0 0 f f t f v 3 2249 "2275 26 23" _null_ _null_ _null_ record_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2291 ( record_out PGNSP PGUID 12 1 0 0 f f t f v 1 2275 "2249" _null_ _null_ _null_ record_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2292 ( cstring_in PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "2275" _null_ _null_ _null_ cstring_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2293 ( cstring_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "2275" _null_ _null_ _null_ cstring_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2294 ( any_in PGNSP PGUID 12 1 0 0 f f t f i 1 2276 "2275" _null_ _null_ _null_ any_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2295 ( any_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "2276" _null_ _null_ _null_ any_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2296 ( anyarray_in PGNSP PGUID 12 1 0 0 f f t f i 1 2277 "2275" _null_ _null_ _null_ anyarray_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2297 ( anyarray_out PGNSP PGUID 12 1 0 0 f f t f s 1 2275 "2277" _null_ _null_ _null_ anyarray_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2298 ( void_in PGNSP PGUID 12 1 0 0 f f t f i 1 2278 "2275" _null_ _null_ _null_ void_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2299 ( void_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "2278" _null_ _null_ _null_ void_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2300 ( trigger_in PGNSP PGUID 12 1 0 0 f f t f i 1 2279 "2275" _null_ _null_ _null_ trigger_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2301 ( trigger_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "2279" _null_ _null_ _null_ trigger_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2302 ( language_handler_in PGNSP PGUID 12 1 0 0 f f t f i 1 2280 "2275" _null_ _null_ _null_ language_handler_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2303 ( language_handler_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "2280" _null_ _null_ _null_ language_handler_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2304 ( internal_in PGNSP PGUID 12 1 0 0 f f t f i 1 2281 "2275" _null_ _null_ _null_ internal_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2305 ( internal_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "2281" _null_ _null_ _null_ internal_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2306 ( opaque_in PGNSP PGUID 12 1 0 0 f f t f i 1 2282 "2275" _null_ _null_ _null_ opaque_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2307 ( opaque_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "2282" _null_ _null_ _null_ opaque_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2312 ( anyelement_in PGNSP PGUID 12 1 0 0 f f t f i 1 2283 "2275" _null_ _null_ _null_ anyelement_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2313 ( anyelement_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "2283" _null_ _null_ _null_ anyelement_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2398 ( shell_in PGNSP PGUID 12 1 0 0 f f t f i 1 2282 "2275" _null_ _null_ _null_ shell_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2399 ( shell_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "2282" _null_ _null_ _null_ shell_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2597 ( domain_in PGNSP PGUID 12 1 0 0 f f f f v 3 2276 "2275 26 23" _null_ _null_ _null_ domain_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2598 ( domain_recv PGNSP PGUID 12 1 0 0 f f f f v 3 2276 "2281 26 23" _null_ _null_ _null_ domain_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2777 ( anynonarray_in PGNSP PGUID 12 1 0 0 f f t f i 1 2776 "2275" _null_ _null_ _null_ anynonarray_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2778 ( anynonarray_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "2776" _null_ _null_ _null_ anynonarray_out _null_ _null_ _null_ )); DESCR("I/O"); /* cryptographic */ ! DATA(insert OID = 2311 ( md5 PGNSP PGUID 12 1 0 0 f f t f i 1 25 "25" _null_ _null_ _null_ md5_text _null_ _null_ _null_ )); DESCR("calculates md5 hash"); ! DATA(insert OID = 2321 ( md5 PGNSP PGUID 12 1 0 0 f f t f i 1 25 "17" _null_ _null_ _null_ md5_bytea _null_ _null_ _null_ )); DESCR("calculates md5 hash"); /* crosstype operations for date vs. timestamp and timestamptz */ ! DATA(insert OID = 2338 ( date_lt_timestamp PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1082 1114" _null_ _null_ _null_ date_lt_timestamp _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 2339 ( date_le_timestamp PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1082 1114" _null_ _null_ _null_ date_le_timestamp _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 2340 ( date_eq_timestamp PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1082 1114" _null_ _null_ _null_ date_eq_timestamp _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 2341 ( date_gt_timestamp PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1082 1114" _null_ _null_ _null_ date_gt_timestamp _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 2342 ( date_ge_timestamp PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1082 1114" _null_ _null_ _null_ date_ge_timestamp _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 2343 ( date_ne_timestamp PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1082 1114" _null_ _null_ _null_ date_ne_timestamp _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 2344 ( date_cmp_timestamp PGNSP PGUID 12 1 0 0 f f t f i 2 23 "1082 1114" _null_ _null_ _null_ date_cmp_timestamp _null_ _null_ _null_ )); DESCR("less-equal-greater"); ! DATA(insert OID = 2351 ( date_lt_timestamptz PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1082 1184" _null_ _null_ _null_ date_lt_timestamptz _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 2352 ( date_le_timestamptz PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1082 1184" _null_ _null_ _null_ date_le_timestamptz _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 2353 ( date_eq_timestamptz PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1082 1184" _null_ _null_ _null_ date_eq_timestamptz _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 2354 ( date_gt_timestamptz PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1082 1184" _null_ _null_ _null_ date_gt_timestamptz _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 2355 ( date_ge_timestamptz PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1082 1184" _null_ _null_ _null_ date_ge_timestamptz _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 2356 ( date_ne_timestamptz PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1082 1184" _null_ _null_ _null_ date_ne_timestamptz _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 2357 ( date_cmp_timestamptz PGNSP PGUID 12 1 0 0 f f t f s 2 23 "1082 1184" _null_ _null_ _null_ date_cmp_timestamptz _null_ _null_ _null_ )); DESCR("less-equal-greater"); ! DATA(insert OID = 2364 ( timestamp_lt_date PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1114 1082" _null_ _null_ _null_ timestamp_lt_date _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 2365 ( timestamp_le_date PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1114 1082" _null_ _null_ _null_ timestamp_le_date _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 2366 ( timestamp_eq_date PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1114 1082" _null_ _null_ _null_ timestamp_eq_date _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 2367 ( timestamp_gt_date PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1114 1082" _null_ _null_ _null_ timestamp_gt_date _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 2368 ( timestamp_ge_date PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1114 1082" _null_ _null_ _null_ timestamp_ge_date _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 2369 ( timestamp_ne_date PGNSP PGUID 12 1 0 0 f f t f i 2 16 "1114 1082" _null_ _null_ _null_ timestamp_ne_date _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 2370 ( timestamp_cmp_date PGNSP PGUID 12 1 0 0 f f t f i 2 23 "1114 1082" _null_ _null_ _null_ timestamp_cmp_date _null_ _null_ _null_ )); DESCR("less-equal-greater"); ! DATA(insert OID = 2377 ( timestamptz_lt_date PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1184 1082" _null_ _null_ _null_ timestamptz_lt_date _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 2378 ( timestamptz_le_date PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1184 1082" _null_ _null_ _null_ timestamptz_le_date _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 2379 ( timestamptz_eq_date PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1184 1082" _null_ _null_ _null_ timestamptz_eq_date _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 2380 ( timestamptz_gt_date PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1184 1082" _null_ _null_ _null_ timestamptz_gt_date _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 2381 ( timestamptz_ge_date PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1184 1082" _null_ _null_ _null_ timestamptz_ge_date _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 2382 ( timestamptz_ne_date PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1184 1082" _null_ _null_ _null_ timestamptz_ne_date _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 2383 ( timestamptz_cmp_date PGNSP PGUID 12 1 0 0 f f t f s 2 23 "1184 1082" _null_ _null_ _null_ timestamptz_cmp_date _null_ _null_ _null_ )); DESCR("less-equal-greater"); /* crosstype operations for timestamp vs. timestamptz */ ! DATA(insert OID = 2520 ( timestamp_lt_timestamptz PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1114 1184" _null_ _null_ _null_ timestamp_lt_timestamptz _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 2521 ( timestamp_le_timestamptz PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1114 1184" _null_ _null_ _null_ timestamp_le_timestamptz _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 2522 ( timestamp_eq_timestamptz PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1114 1184" _null_ _null_ _null_ timestamp_eq_timestamptz _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 2523 ( timestamp_gt_timestamptz PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1114 1184" _null_ _null_ _null_ timestamp_gt_timestamptz _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 2524 ( timestamp_ge_timestamptz PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1114 1184" _null_ _null_ _null_ timestamp_ge_timestamptz _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 2525 ( timestamp_ne_timestamptz PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1114 1184" _null_ _null_ _null_ timestamp_ne_timestamptz _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 2526 ( timestamp_cmp_timestamptz PGNSP PGUID 12 1 0 0 f f t f s 2 23 "1114 1184" _null_ _null_ _null_ timestamp_cmp_timestamptz _null_ _null_ _null_ )); DESCR("less-equal-greater"); ! DATA(insert OID = 2527 ( timestamptz_lt_timestamp PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1184 1114" _null_ _null_ _null_ timestamptz_lt_timestamp _null_ _null_ _null_ )); DESCR("less-than"); ! DATA(insert OID = 2528 ( timestamptz_le_timestamp PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1184 1114" _null_ _null_ _null_ timestamptz_le_timestamp _null_ _null_ _null_ )); DESCR("less-than-or-equal"); ! DATA(insert OID = 2529 ( timestamptz_eq_timestamp PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1184 1114" _null_ _null_ _null_ timestamptz_eq_timestamp _null_ _null_ _null_ )); DESCR("equal"); ! DATA(insert OID = 2530 ( timestamptz_gt_timestamp PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1184 1114" _null_ _null_ _null_ timestamptz_gt_timestamp _null_ _null_ _null_ )); DESCR("greater-than"); ! DATA(insert OID = 2531 ( timestamptz_ge_timestamp PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1184 1114" _null_ _null_ _null_ timestamptz_ge_timestamp _null_ _null_ _null_ )); DESCR("greater-than-or-equal"); ! DATA(insert OID = 2532 ( timestamptz_ne_timestamp PGNSP PGUID 12 1 0 0 f f t f s 2 16 "1184 1114" _null_ _null_ _null_ timestamptz_ne_timestamp _null_ _null_ _null_ )); DESCR("not equal"); ! DATA(insert OID = 2533 ( timestamptz_cmp_timestamp PGNSP PGUID 12 1 0 0 f f t f s 2 23 "1184 1114" _null_ _null_ _null_ timestamptz_cmp_timestamp _null_ _null_ _null_ )); DESCR("less-equal-greater"); /* send/receive functions */ ! DATA(insert OID = 2400 ( array_recv PGNSP PGUID 12 1 0 0 f f t f s 3 2277 "2281 26 23" _null_ _null_ _null_ array_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2401 ( array_send PGNSP PGUID 12 1 0 0 f f t f s 1 17 "2277" _null_ _null_ _null_ array_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2402 ( record_recv PGNSP PGUID 12 1 0 0 f f t f v 3 2249 "2281 26 23" _null_ _null_ _null_ record_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2403 ( record_send PGNSP PGUID 12 1 0 0 f f t f v 1 17 "2249" _null_ _null_ _null_ record_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2404 ( int2recv PGNSP PGUID 12 1 0 0 f f t f i 1 21 "2281" _null_ _null_ _null_ int2recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2405 ( int2send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "21" _null_ _null_ _null_ int2send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2406 ( int4recv PGNSP PGUID 12 1 0 0 f f t f i 1 23 "2281" _null_ _null_ _null_ int4recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2407 ( int4send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "23" _null_ _null_ _null_ int4send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2408 ( int8recv PGNSP PGUID 12 1 0 0 f f t f i 1 20 "2281" _null_ _null_ _null_ int8recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2409 ( int8send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "20" _null_ _null_ _null_ int8send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2410 ( int2vectorrecv PGNSP PGUID 12 1 0 0 f f t f i 1 22 "2281" _null_ _null_ _null_ int2vectorrecv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2411 ( int2vectorsend PGNSP PGUID 12 1 0 0 f f t f i 1 17 "22" _null_ _null_ _null_ int2vectorsend _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2412 ( bytearecv PGNSP PGUID 12 1 0 0 f f t f i 1 17 "2281" _null_ _null_ _null_ bytearecv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2413 ( byteasend PGNSP PGUID 12 1 0 0 f f t f i 1 17 "17" _null_ _null_ _null_ byteasend _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2414 ( textrecv PGNSP PGUID 12 1 0 0 f f t f s 1 25 "2281" _null_ _null_ _null_ textrecv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2415 ( textsend PGNSP PGUID 12 1 0 0 f f t f s 1 17 "25" _null_ _null_ _null_ textsend _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2416 ( unknownrecv PGNSP PGUID 12 1 0 0 f f t f i 1 705 "2281" _null_ _null_ _null_ unknownrecv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2417 ( unknownsend PGNSP PGUID 12 1 0 0 f f t f i 1 17 "705" _null_ _null_ _null_ unknownsend _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2418 ( oidrecv PGNSP PGUID 12 1 0 0 f f t f i 1 26 "2281" _null_ _null_ _null_ oidrecv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2419 ( oidsend PGNSP PGUID 12 1 0 0 f f t f i 1 17 "26" _null_ _null_ _null_ oidsend _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2420 ( oidvectorrecv PGNSP PGUID 12 1 0 0 f f t f i 1 30 "2281" _null_ _null_ _null_ oidvectorrecv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2421 ( oidvectorsend PGNSP PGUID 12 1 0 0 f f t f i 1 17 "30" _null_ _null_ _null_ oidvectorsend _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2422 ( namerecv PGNSP PGUID 12 1 0 0 f f t f s 1 19 "2281" _null_ _null_ _null_ namerecv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2423 ( namesend PGNSP PGUID 12 1 0 0 f f t f s 1 17 "19" _null_ _null_ _null_ namesend _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2424 ( float4recv PGNSP PGUID 12 1 0 0 f f t f i 1 700 "2281" _null_ _null_ _null_ float4recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2425 ( float4send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "700" _null_ _null_ _null_ float4send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2426 ( float8recv PGNSP PGUID 12 1 0 0 f f t f i 1 701 "2281" _null_ _null_ _null_ float8recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2427 ( float8send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "701" _null_ _null_ _null_ float8send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2428 ( point_recv PGNSP PGUID 12 1 0 0 f f t f i 1 600 "2281" _null_ _null_ _null_ point_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2429 ( point_send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "600" _null_ _null_ _null_ point_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2430 ( bpcharrecv PGNSP PGUID 12 1 0 0 f f t f s 3 1042 "2281 26 23" _null_ _null_ _null_ bpcharrecv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2431 ( bpcharsend PGNSP PGUID 12 1 0 0 f f t f s 1 17 "1042" _null_ _null_ _null_ bpcharsend _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2432 ( varcharrecv PGNSP PGUID 12 1 0 0 f f t f s 3 1043 "2281 26 23" _null_ _null_ _null_ varcharrecv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2433 ( varcharsend PGNSP PGUID 12 1 0 0 f f t f s 1 17 "1043" _null_ _null_ _null_ varcharsend _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2434 ( charrecv PGNSP PGUID 12 1 0 0 f f t f i 1 18 "2281" _null_ _null_ _null_ charrecv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2435 ( charsend PGNSP PGUID 12 1 0 0 f f t f i 1 17 "18" _null_ _null_ _null_ charsend _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2436 ( boolrecv PGNSP PGUID 12 1 0 0 f f t f i 1 16 "2281" _null_ _null_ _null_ boolrecv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2437 ( boolsend PGNSP PGUID 12 1 0 0 f f t f i 1 17 "16" _null_ _null_ _null_ boolsend _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2438 ( tidrecv PGNSP PGUID 12 1 0 0 f f t f i 1 27 "2281" _null_ _null_ _null_ tidrecv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2439 ( tidsend PGNSP PGUID 12 1 0 0 f f t f i 1 17 "27" _null_ _null_ _null_ tidsend _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2440 ( xidrecv PGNSP PGUID 12 1 0 0 f f t f i 1 28 "2281" _null_ _null_ _null_ xidrecv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2441 ( xidsend PGNSP PGUID 12 1 0 0 f f t f i 1 17 "28" _null_ _null_ _null_ xidsend _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2442 ( cidrecv PGNSP PGUID 12 1 0 0 f f t f i 1 29 "2281" _null_ _null_ _null_ cidrecv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2443 ( cidsend PGNSP PGUID 12 1 0 0 f f t f i 1 17 "29" _null_ _null_ _null_ cidsend _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2444 ( regprocrecv PGNSP PGUID 12 1 0 0 f f t f i 1 24 "2281" _null_ _null_ _null_ regprocrecv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2445 ( regprocsend PGNSP PGUID 12 1 0 0 f f t f i 1 17 "24" _null_ _null_ _null_ regprocsend _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2446 ( regprocedurerecv PGNSP PGUID 12 1 0 0 f f t f i 1 2202 "2281" _null_ _null_ _null_ regprocedurerecv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2447 ( regproceduresend PGNSP PGUID 12 1 0 0 f f t f i 1 17 "2202" _null_ _null_ _null_ regproceduresend _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2448 ( regoperrecv PGNSP PGUID 12 1 0 0 f f t f i 1 2203 "2281" _null_ _null_ _null_ regoperrecv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2449 ( regopersend PGNSP PGUID 12 1 0 0 f f t f i 1 17 "2203" _null_ _null_ _null_ regopersend _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2450 ( regoperatorrecv PGNSP PGUID 12 1 0 0 f f t f i 1 2204 "2281" _null_ _null_ _null_ regoperatorrecv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2451 ( regoperatorsend PGNSP PGUID 12 1 0 0 f f t f i 1 17 "2204" _null_ _null_ _null_ regoperatorsend _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2452 ( regclassrecv PGNSP PGUID 12 1 0 0 f f t f i 1 2205 "2281" _null_ _null_ _null_ regclassrecv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2453 ( regclasssend PGNSP PGUID 12 1 0 0 f f t f i 1 17 "2205" _null_ _null_ _null_ regclasssend _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2454 ( regtyperecv PGNSP PGUID 12 1 0 0 f f t f i 1 2206 "2281" _null_ _null_ _null_ regtyperecv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2455 ( regtypesend PGNSP PGUID 12 1 0 0 f f t f i 1 17 "2206" _null_ _null_ _null_ regtypesend _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2456 ( bit_recv PGNSP PGUID 12 1 0 0 f f t f i 3 1560 "2281 26 23" _null_ _null_ _null_ bit_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2457 ( bit_send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "1560" _null_ _null_ _null_ bit_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2458 ( varbit_recv PGNSP PGUID 12 1 0 0 f f t f i 3 1562 "2281 26 23" _null_ _null_ _null_ varbit_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2459 ( varbit_send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "1562" _null_ _null_ _null_ varbit_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2460 ( numeric_recv PGNSP PGUID 12 1 0 0 f f t f i 3 1700 "2281 26 23" _null_ _null_ _null_ numeric_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2461 ( numeric_send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "1700" _null_ _null_ _null_ numeric_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2462 ( abstimerecv PGNSP PGUID 12 1 0 0 f f t f i 1 702 "2281" _null_ _null_ _null_ abstimerecv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2463 ( abstimesend PGNSP PGUID 12 1 0 0 f f t f i 1 17 "702" _null_ _null_ _null_ abstimesend _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2464 ( reltimerecv PGNSP PGUID 12 1 0 0 f f t f i 1 703 "2281" _null_ _null_ _null_ reltimerecv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2465 ( reltimesend PGNSP PGUID 12 1 0 0 f f t f i 1 17 "703" _null_ _null_ _null_ reltimesend _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2466 ( tintervalrecv PGNSP PGUID 12 1 0 0 f f t f i 1 704 "2281" _null_ _null_ _null_ tintervalrecv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2467 ( tintervalsend PGNSP PGUID 12 1 0 0 f f t f i 1 17 "704" _null_ _null_ _null_ tintervalsend _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2468 ( date_recv PGNSP PGUID 12 1 0 0 f f t f i 1 1082 "2281" _null_ _null_ _null_ date_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2469 ( date_send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "1082" _null_ _null_ _null_ date_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2470 ( time_recv PGNSP PGUID 12 1 0 0 f f t f i 3 1083 "2281 26 23" _null_ _null_ _null_ time_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2471 ( time_send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "1083" _null_ _null_ _null_ time_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2472 ( timetz_recv PGNSP PGUID 12 1 0 0 f f t f i 3 1266 "2281 26 23" _null_ _null_ _null_ timetz_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2473 ( timetz_send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "1266" _null_ _null_ _null_ timetz_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2474 ( timestamp_recv PGNSP PGUID 12 1 0 0 f f t f i 3 1114 "2281 26 23" _null_ _null_ _null_ timestamp_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2475 ( timestamp_send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "1114" _null_ _null_ _null_ timestamp_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2476 ( timestamptz_recv PGNSP PGUID 12 1 0 0 f f t f i 3 1184 "2281 26 23" _null_ _null_ _null_ timestamptz_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2477 ( timestamptz_send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "1184" _null_ _null_ _null_ timestamptz_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2478 ( interval_recv PGNSP PGUID 12 1 0 0 f f t f i 3 1186 "2281 26 23" _null_ _null_ _null_ interval_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2479 ( interval_send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "1186" _null_ _null_ _null_ interval_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2480 ( lseg_recv PGNSP PGUID 12 1 0 0 f f t f i 1 601 "2281" _null_ _null_ _null_ lseg_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2481 ( lseg_send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "601" _null_ _null_ _null_ lseg_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2482 ( path_recv PGNSP PGUID 12 1 0 0 f f t f i 1 602 "2281" _null_ _null_ _null_ path_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2483 ( path_send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "602" _null_ _null_ _null_ path_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2484 ( box_recv PGNSP PGUID 12 1 0 0 f f t f i 1 603 "2281" _null_ _null_ _null_ box_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2485 ( box_send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "603" _null_ _null_ _null_ box_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2486 ( poly_recv PGNSP PGUID 12 1 0 0 f f t f i 1 604 "2281" _null_ _null_ _null_ poly_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2487 ( poly_send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "604" _null_ _null_ _null_ poly_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2488 ( line_recv PGNSP PGUID 12 1 0 0 f f t f i 1 628 "2281" _null_ _null_ _null_ line_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2489 ( line_send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "628" _null_ _null_ _null_ line_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2490 ( circle_recv PGNSP PGUID 12 1 0 0 f f t f i 1 718 "2281" _null_ _null_ _null_ circle_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2491 ( circle_send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "718" _null_ _null_ _null_ circle_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2492 ( cash_recv PGNSP PGUID 12 1 0 0 f f t f i 1 790 "2281" _null_ _null_ _null_ cash_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2493 ( cash_send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "790" _null_ _null_ _null_ cash_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2494 ( macaddr_recv PGNSP PGUID 12 1 0 0 f f t f i 1 829 "2281" _null_ _null_ _null_ macaddr_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2495 ( macaddr_send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "829" _null_ _null_ _null_ macaddr_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2496 ( inet_recv PGNSP PGUID 12 1 0 0 f f t f i 1 869 "2281" _null_ _null_ _null_ inet_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2497 ( inet_send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "869" _null_ _null_ _null_ inet_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2498 ( cidr_recv PGNSP PGUID 12 1 0 0 f f t f i 1 650 "2281" _null_ _null_ _null_ cidr_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2499 ( cidr_send PGNSP PGUID 12 1 0 0 f f t f i 1 17 "650" _null_ _null_ _null_ cidr_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2500 ( cstring_recv PGNSP PGUID 12 1 0 0 f f t f s 1 2275 "2281" _null_ _null_ _null_ cstring_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2501 ( cstring_send PGNSP PGUID 12 1 0 0 f f t f s 1 17 "2275" _null_ _null_ _null_ cstring_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2502 ( anyarray_recv PGNSP PGUID 12 1 0 0 f f t f s 1 2277 "2281" _null_ _null_ _null_ anyarray_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2503 ( anyarray_send PGNSP PGUID 12 1 0 0 f f t f s 1 17 "2277" _null_ _null_ _null_ anyarray_send _null_ _null_ _null_ )); DESCR("I/O"); /* System-view support functions with pretty-print option */ ! DATA(insert OID = 2504 ( pg_get_ruledef PGNSP PGUID 12 1 0 0 f f t f s 2 25 "26 16" _null_ _null_ _null_ pg_get_ruledef_ext _null_ _null_ _null_ )); DESCR("source text of a rule with pretty-print option"); ! DATA(insert OID = 2505 ( pg_get_viewdef PGNSP PGUID 12 1 0 0 f f t f s 2 25 "25 16" _null_ _null_ _null_ pg_get_viewdef_name_ext _null_ _null_ _null_ )); DESCR("select statement of a view with pretty-print option"); ! DATA(insert OID = 2506 ( pg_get_viewdef PGNSP PGUID 12 1 0 0 f f t f s 2 25 "26 16" _null_ _null_ _null_ pg_get_viewdef_ext _null_ _null_ _null_ )); DESCR("select statement of a view with pretty-print option"); ! DATA(insert OID = 2507 ( pg_get_indexdef PGNSP PGUID 12 1 0 0 f f t f s 3 25 "26 23 16" _null_ _null_ _null_ pg_get_indexdef_ext _null_ _null_ _null_ )); DESCR("index description (full create statement or single expression) with pretty-print option"); ! DATA(insert OID = 2508 ( pg_get_constraintdef PGNSP PGUID 12 1 0 0 f f t f s 2 25 "26 16" _null_ _null_ _null_ pg_get_constraintdef_ext _null_ _null_ _null_ )); DESCR("constraint description with pretty-print option"); ! DATA(insert OID = 2509 ( pg_get_expr PGNSP PGUID 12 1 0 0 f f t f s 3 25 "25 26 16" _null_ _null_ _null_ pg_get_expr_ext _null_ _null_ _null_ )); DESCR("deparse an encoded expression with pretty-print option"); ! DATA(insert OID = 2510 ( pg_prepared_statement PGNSP PGUID 12 1 1000 0 f f t t s 0 2249 "" "{25,25,1184,2211,16}" "{o,o,o,o,o}" "{name,statement,prepare_time,parameter_types,from_sql}" pg_prepared_statement _null_ _null_ _null_ )); DESCR("get the prepared statements for this session"); ! DATA(insert OID = 2511 ( pg_cursor PGNSP PGUID 12 1 1000 0 f f t t s 0 2249 "" "{25,25,16,16,16,1184}" "{o,o,o,o,o,o}" "{name,statement,is_holdable,is_binary,is_scrollable,creation_time}" pg_cursor _null_ _null_ _null_ )); DESCR("get the open cursors for this session"); ! DATA(insert OID = 2599 ( pg_timezone_abbrevs PGNSP PGUID 12 1 1000 0 f f t t s 0 2249 "" "{25,1186,16}" "{o,o,o}" "{abbrev,utc_offset,is_dst}" pg_timezone_abbrevs _null_ _null_ _null_ )); DESCR("get the available time zone abbreviations"); ! DATA(insert OID = 2856 ( pg_timezone_names PGNSP PGUID 12 1 1000 0 f f t t s 0 2249 "" "{25,25,1186,16}" "{o,o,o,o}" "{name,abbrev,utc_offset,is_dst}" pg_timezone_names _null_ _null_ _null_ )); DESCR("get the available time zone names"); /* non-persistent series generator */ ! DATA(insert OID = 1066 ( generate_series PGNSP PGUID 12 1 1000 0 f f t t i 3 23 "23 23 23" _null_ _null_ _null_ generate_series_step_int4 _null_ _null_ _null_ )); DESCR("non-persistent series generator"); ! DATA(insert OID = 1067 ( generate_series PGNSP PGUID 12 1 1000 0 f f t t i 2 23 "23 23" _null_ _null_ _null_ generate_series_int4 _null_ _null_ _null_ )); DESCR("non-persistent series generator"); ! DATA(insert OID = 1068 ( generate_series PGNSP PGUID 12 1 1000 0 f f t t i 3 20 "20 20 20" _null_ _null_ _null_ generate_series_step_int8 _null_ _null_ _null_ )); DESCR("non-persistent series generator"); ! DATA(insert OID = 1069 ( generate_series PGNSP PGUID 12 1 1000 0 f f t t i 2 20 "20 20" _null_ _null_ _null_ generate_series_int8 _null_ _null_ _null_ )); DESCR("non-persistent series generator"); ! DATA(insert OID = 938 ( generate_series PGNSP PGUID 12 1 1000 0 f f t t i 3 1114 "1114 1114 1186" _null_ _null_ _null_ generate_series_timestamp _null_ _null_ _null_ )); DESCR("non-persistent series generator"); ! DATA(insert OID = 939 ( generate_series PGNSP PGUID 12 1 1000 0 f f t t s 3 1184 "1184 1184 1186" _null_ _null_ _null_ generate_series_timestamptz _null_ _null_ _null_ )); DESCR("non-persistent series generator"); /* boolean aggregates */ ! DATA(insert OID = 2515 ( booland_statefunc PGNSP PGUID 12 1 0 0 f f t f i 2 16 "16 16" _null_ _null_ _null_ booland_statefunc _null_ _null_ _null_ )); DESCR("boolean-and aggregate transition function"); ! DATA(insert OID = 2516 ( boolor_statefunc PGNSP PGUID 12 1 0 0 f f t f i 2 16 "16 16" _null_ _null_ _null_ boolor_statefunc _null_ _null_ _null_ )); DESCR("boolean-or aggregate transition function"); ! DATA(insert OID = 2517 ( bool_and PGNSP PGUID 12 1 0 0 t f f f i 1 16 "16" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("boolean-and aggregate"); /* ANY, SOME? These names conflict with subquery operators. See doc. */ ! DATA(insert OID = 2518 ( bool_or PGNSP PGUID 12 1 0 0 t f f f i 1 16 "16" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("boolean-or aggregate"); ! DATA(insert OID = 2519 ( every PGNSP PGUID 12 1 0 0 t f f f i 1 16 "16" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("boolean-and aggregate"); /* bitwise integer aggregates */ ! DATA(insert OID = 2236 ( bit_and PGNSP PGUID 12 1 0 0 t f f f i 1 21 "21" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("bitwise-and smallint aggregate"); ! DATA(insert OID = 2237 ( bit_or PGNSP PGUID 12 1 0 0 t f f f i 1 21 "21" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("bitwise-or smallint aggregate"); ! DATA(insert OID = 2238 ( bit_and PGNSP PGUID 12 1 0 0 t f f f i 1 23 "23" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("bitwise-and integer aggregate"); ! DATA(insert OID = 2239 ( bit_or PGNSP PGUID 12 1 0 0 t f f f i 1 23 "23" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("bitwise-or integer aggregate"); ! DATA(insert OID = 2240 ( bit_and PGNSP PGUID 12 1 0 0 t f f f i 1 20 "20" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("bitwise-and bigint aggregate"); ! DATA(insert OID = 2241 ( bit_or PGNSP PGUID 12 1 0 0 t f f f i 1 20 "20" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("bitwise-or bigint aggregate"); ! DATA(insert OID = 2242 ( bit_and PGNSP PGUID 12 1 0 0 t f f f i 1 1560 "1560" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("bitwise-and bit aggregate"); ! DATA(insert OID = 2243 ( bit_or PGNSP PGUID 12 1 0 0 t f f f i 1 1560 "1560" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("bitwise-or bit aggregate"); /* formerly-missing interval + datetime operators */ ! DATA(insert OID = 2546 ( interval_pl_date PGNSP PGUID 14 1 0 0 f f t f i 2 1114 "1186 1082" _null_ _null_ _null_ "select $2 + $1" _null_ _null_ _null_ )); ! DATA(insert OID = 2547 ( interval_pl_timetz PGNSP PGUID 14 1 0 0 f f t f i 2 1266 "1186 1266" _null_ _null_ _null_ "select $2 + $1" _null_ _null_ _null_ )); ! DATA(insert OID = 2548 ( interval_pl_timestamp PGNSP PGUID 14 1 0 0 f f t f i 2 1114 "1186 1114" _null_ _null_ _null_ "select $2 + $1" _null_ _null_ _null_ )); ! DATA(insert OID = 2549 ( interval_pl_timestamptz PGNSP PGUID 14 1 0 0 f f t f s 2 1184 "1186 1184" _null_ _null_ _null_ "select $2 + $1" _null_ _null_ _null_ )); ! DATA(insert OID = 2550 ( integer_pl_date PGNSP PGUID 14 1 0 0 f f t f i 2 1082 "23 1082" _null_ _null_ _null_ "select $2 + $1" _null_ _null_ _null_ )); ! DATA(insert OID = 2556 ( pg_tablespace_databases PGNSP PGUID 12 1 1000 0 f f t t s 1 26 "26" _null_ _null_ _null_ pg_tablespace_databases _null_ _null_ _null_ )); DESCR("returns database oids in a tablespace"); ! DATA(insert OID = 2557 ( bool PGNSP PGUID 12 1 0 0 f f t f i 1 16 "23" _null_ _null_ _null_ int4_bool _null_ _null_ _null_ )); DESCR("convert int4 to boolean"); ! DATA(insert OID = 2558 ( int4 PGNSP PGUID 12 1 0 0 f f t f i 1 23 "16" _null_ _null_ _null_ bool_int4 _null_ _null_ _null_ )); DESCR("convert boolean to int4"); ! DATA(insert OID = 2559 ( lastval PGNSP PGUID 12 1 0 0 f f t f v 0 20 "" _null_ _null_ _null_ lastval _null_ _null_ _null_ )); DESCR("current value from last used sequence"); /* start time function */ ! DATA(insert OID = 2560 ( pg_postmaster_start_time PGNSP PGUID 12 1 0 0 f f t f s 0 1184 "" _null_ _null_ _null_ pg_postmaster_start_time _null_ _null_ _null_ )); DESCR("postmaster start time"); /* config reload time function */ ! DATA(insert OID = 2034 ( pg_conf_load_time PGNSP PGUID 12 1 0 0 f f t f s 0 1184 "" _null_ _null_ _null_ pg_conf_load_time _null_ _null_ _null_ )); DESCR("configuration load time"); /* new functions for Y-direction rtree opclasses */ ! DATA(insert OID = 2562 ( box_below PGNSP PGUID 12 1 0 0 f f t f i 2 16 "603 603" _null_ _null_ _null_ box_below _null_ _null_ _null_ )); DESCR("is below"); ! DATA(insert OID = 2563 ( box_overbelow PGNSP PGUID 12 1 0 0 f f t f i 2 16 "603 603" _null_ _null_ _null_ box_overbelow _null_ _null_ _null_ )); DESCR("overlaps or is below"); ! DATA(insert OID = 2564 ( box_overabove PGNSP PGUID 12 1 0 0 f f t f i 2 16 "603 603" _null_ _null_ _null_ box_overabove _null_ _null_ _null_ )); DESCR("overlaps or is above"); ! DATA(insert OID = 2565 ( box_above PGNSP PGUID 12 1 0 0 f f t f i 2 16 "603 603" _null_ _null_ _null_ box_above _null_ _null_ _null_ )); DESCR("is above"); ! DATA(insert OID = 2566 ( poly_below PGNSP PGUID 12 1 0 0 f f t f i 2 16 "604 604" _null_ _null_ _null_ poly_below _null_ _null_ _null_ )); DESCR("is below"); ! DATA(insert OID = 2567 ( poly_overbelow PGNSP PGUID 12 1 0 0 f f t f i 2 16 "604 604" _null_ _null_ _null_ poly_overbelow _null_ _null_ _null_ )); DESCR("overlaps or is below"); ! DATA(insert OID = 2568 ( poly_overabove PGNSP PGUID 12 1 0 0 f f t f i 2 16 "604 604" _null_ _null_ _null_ poly_overabove _null_ _null_ _null_ )); DESCR("overlaps or is above"); ! DATA(insert OID = 2569 ( poly_above PGNSP PGUID 12 1 0 0 f f t f i 2 16 "604 604" _null_ _null_ _null_ poly_above _null_ _null_ _null_ )); DESCR("is above"); ! DATA(insert OID = 2587 ( circle_overbelow PGNSP PGUID 12 1 0 0 f f t f i 2 16 "718 718" _null_ _null_ _null_ circle_overbelow _null_ _null_ _null_ )); DESCR("overlaps or is below"); ! DATA(insert OID = 2588 ( circle_overabove PGNSP PGUID 12 1 0 0 f f t f i 2 16 "718 718" _null_ _null_ _null_ circle_overabove _null_ _null_ _null_ )); DESCR("overlaps or is above"); /* support functions for GiST r-tree emulation */ ! DATA(insert OID = 2578 ( gist_box_consistent PGNSP PGUID 12 1 0 0 f f t f i 5 16 "2281 603 23 26 2281" _null_ _null_ _null_ gist_box_consistent _null_ _null_ _null_ )); DESCR("GiST support"); ! DATA(insert OID = 2579 ( gist_box_compress PGNSP PGUID 12 1 0 0 f f t f i 1 2281 "2281" _null_ _null_ _null_ gist_box_compress _null_ _null_ _null_ )); DESCR("GiST support"); ! DATA(insert OID = 2580 ( gist_box_decompress PGNSP PGUID 12 1 0 0 f f t f i 1 2281 "2281" _null_ _null_ _null_ gist_box_decompress _null_ _null_ _null_ )); DESCR("GiST support"); ! DATA(insert OID = 2581 ( gist_box_penalty PGNSP PGUID 12 1 0 0 f f t f i 3 2281 "2281 2281 2281" _null_ _null_ _null_ gist_box_penalty _null_ _null_ _null_ )); DESCR("GiST support"); ! DATA(insert OID = 2582 ( gist_box_picksplit PGNSP PGUID 12 1 0 0 f f t f i 2 2281 "2281 2281" _null_ _null_ _null_ gist_box_picksplit _null_ _null_ _null_ )); DESCR("GiST support"); ! DATA(insert OID = 2583 ( gist_box_union PGNSP PGUID 12 1 0 0 f f t f i 2 603 "2281 2281" _null_ _null_ _null_ gist_box_union _null_ _null_ _null_ )); DESCR("GiST support"); ! DATA(insert OID = 2584 ( gist_box_same PGNSP PGUID 12 1 0 0 f f t f i 3 2281 "603 603 2281" _null_ _null_ _null_ gist_box_same _null_ _null_ _null_ )); DESCR("GiST support"); ! DATA(insert OID = 2585 ( gist_poly_consistent PGNSP PGUID 12 1 0 0 f f t f i 5 16 "2281 604 23 26 2281" _null_ _null_ _null_ gist_poly_consistent _null_ _null_ _null_ )); DESCR("GiST support"); ! DATA(insert OID = 2586 ( gist_poly_compress PGNSP PGUID 12 1 0 0 f f t f i 1 2281 "2281" _null_ _null_ _null_ gist_poly_compress _null_ _null_ _null_ )); DESCR("GiST support"); ! DATA(insert OID = 2591 ( gist_circle_consistent PGNSP PGUID 12 1 0 0 f f t f i 5 16 "2281 718 23 26 2281" _null_ _null_ _null_ gist_circle_consistent _null_ _null_ _null_ )); DESCR("GiST support"); ! DATA(insert OID = 2592 ( gist_circle_compress PGNSP PGUID 12 1 0 0 f f t f i 1 2281 "2281" _null_ _null_ _null_ gist_circle_compress _null_ _null_ _null_ )); DESCR("GiST support"); /* GIN */ ! DATA(insert OID = 2730 ( gingettuple PGNSP PGUID 12 1 0 0 f f t f v 2 16 "2281 2281" _null_ _null_ _null_ gingettuple _null_ _null_ _null_ )); DESCR("gin(internal)"); ! DATA(insert OID = 2731 ( gingetbitmap PGNSP PGUID 12 1 0 0 f f t f v 2 20 "2281 2281" _null_ _null_ _null_ gingetbitmap _null_ _null_ _null_ )); DESCR("gin(internal)"); ! DATA(insert OID = 2732 ( gininsert PGNSP PGUID 12 1 0 0 f f t f v 6 16 "2281 2281 2281 2281 2281 2281" _null_ _null_ _null_ gininsert _null_ _null_ _null_ )); DESCR("gin(internal)"); ! DATA(insert OID = 2733 ( ginbeginscan PGNSP PGUID 12 1 0 0 f f t f v 3 2281 "2281 2281 2281" _null_ _null_ _null_ ginbeginscan _null_ _null_ _null_ )); DESCR("gin(internal)"); ! DATA(insert OID = 2734 ( ginrescan PGNSP PGUID 12 1 0 0 f f t f v 2 2278 "2281 2281" _null_ _null_ _null_ ginrescan _null_ _null_ _null_ )); DESCR("gin(internal)"); ! DATA(insert OID = 2735 ( ginendscan PGNSP PGUID 12 1 0 0 f f t f v 1 2278 "2281" _null_ _null_ _null_ ginendscan _null_ _null_ _null_ )); DESCR("gin(internal)"); ! DATA(insert OID = 2736 ( ginmarkpos PGNSP PGUID 12 1 0 0 f f t f v 1 2278 "2281" _null_ _null_ _null_ ginmarkpos _null_ _null_ _null_ )); DESCR("gin(internal)"); ! DATA(insert OID = 2737 ( ginrestrpos PGNSP PGUID 12 1 0 0 f f t f v 1 2278 "2281" _null_ _null_ _null_ ginrestrpos _null_ _null_ _null_ )); DESCR("gin(internal)"); ! DATA(insert OID = 2738 ( ginbuild PGNSP PGUID 12 1 0 0 f f t f v 3 2281 "2281 2281 2281" _null_ _null_ _null_ ginbuild _null_ _null_ _null_ )); DESCR("gin(internal)"); ! DATA(insert OID = 2739 ( ginbulkdelete PGNSP PGUID 12 1 0 0 f f t f v 4 2281 "2281 2281 2281 2281" _null_ _null_ _null_ ginbulkdelete _null_ _null_ _null_ )); DESCR("gin(internal)"); ! DATA(insert OID = 2740 ( ginvacuumcleanup PGNSP PGUID 12 1 0 0 f f t f v 2 2281 "2281 2281" _null_ _null_ _null_ ginvacuumcleanup _null_ _null_ _null_ )); DESCR("gin(internal)"); ! DATA(insert OID = 2741 ( gincostestimate PGNSP PGUID 12 1 0 0 f f t f v 8 2278 "2281 2281 2281 2281 2281 2281 2281 2281" _null_ _null_ _null_ gincostestimate _null_ _null_ _null_ )); DESCR("gin(internal)"); ! DATA(insert OID = 2788 ( ginoptions PGNSP PGUID 12 1 0 0 f f t f s 2 17 "1009 16" _null_ _null_ _null_ ginoptions _null_ _null_ _null_ )); DESCR("gin(internal)"); /* GIN array support */ ! DATA(insert OID = 2743 ( ginarrayextract PGNSP PGUID 12 1 0 0 f f t f i 2 2281 "2277 2281" _null_ _null_ _null_ ginarrayextract _null_ _null_ _null_ )); DESCR("GIN array support"); ! DATA(insert OID = 2774 ( ginqueryarrayextract PGNSP PGUID 12 1 0 0 f f t f i 4 2281 "2277 2281 21 2281" _null_ _null_ _null_ ginqueryarrayextract _null_ _null_ _null_ )); DESCR("GIN array support"); ! DATA(insert OID = 2744 ( ginarrayconsistent PGNSP PGUID 12 1 0 0 f f t f i 4 16 "2281 21 2281 2281" _null_ _null_ _null_ ginarrayconsistent _null_ _null_ _null_ )); DESCR("GIN array support"); /* overlap/contains/contained */ ! DATA(insert OID = 2747 ( arrayoverlap PGNSP PGUID 12 1 0 0 f f t f i 2 16 "2277 2277" _null_ _null_ _null_ arrayoverlap _null_ _null_ _null_ )); DESCR("overlaps"); ! DATA(insert OID = 2748 ( arraycontains PGNSP PGUID 12 1 0 0 f f t f i 2 16 "2277 2277" _null_ _null_ _null_ arraycontains _null_ _null_ _null_ )); DESCR("contains"); ! DATA(insert OID = 2749 ( arraycontained PGNSP PGUID 12 1 0 0 f f t f i 2 16 "2277 2277" _null_ _null_ _null_ arraycontained _null_ _null_ _null_ )); DESCR("is contained by"); /* userlock replacements */ ! DATA(insert OID = 2880 ( pg_advisory_lock PGNSP PGUID 12 1 0 0 f f t f v 1 2278 "20" _null_ _null_ _null_ pg_advisory_lock_int8 _null_ _null_ _null_ )); DESCR("obtain exclusive advisory lock"); ! DATA(insert OID = 2881 ( pg_advisory_lock_shared PGNSP PGUID 12 1 0 0 f f t f v 1 2278 "20" _null_ _null_ _null_ pg_advisory_lock_shared_int8 _null_ _null_ _null_ )); DESCR("obtain shared advisory lock"); ! DATA(insert OID = 2882 ( pg_try_advisory_lock PGNSP PGUID 12 1 0 0 f f t f v 1 16 "20" _null_ _null_ _null_ pg_try_advisory_lock_int8 _null_ _null_ _null_ )); DESCR("obtain exclusive advisory lock if available"); ! DATA(insert OID = 2883 ( pg_try_advisory_lock_shared PGNSP PGUID 12 1 0 0 f f t f v 1 16 "20" _null_ _null_ _null_ pg_try_advisory_lock_shared_int8 _null_ _null_ _null_ )); DESCR("obtain shared advisory lock if available"); ! DATA(insert OID = 2884 ( pg_advisory_unlock PGNSP PGUID 12 1 0 0 f f t f v 1 16 "20" _null_ _null_ _null_ pg_advisory_unlock_int8 _null_ _null_ _null_ )); DESCR("release exclusive advisory lock"); ! DATA(insert OID = 2885 ( pg_advisory_unlock_shared PGNSP PGUID 12 1 0 0 f f t f v 1 16 "20" _null_ _null_ _null_ pg_advisory_unlock_shared_int8 _null_ _null_ _null_ )); DESCR("release shared advisory lock"); ! DATA(insert OID = 2886 ( pg_advisory_lock PGNSP PGUID 12 1 0 0 f f t f v 2 2278 "23 23" _null_ _null_ _null_ pg_advisory_lock_int4 _null_ _null_ _null_ )); DESCR("obtain exclusive advisory lock"); ! DATA(insert OID = 2887 ( pg_advisory_lock_shared PGNSP PGUID 12 1 0 0 f f t f v 2 2278 "23 23" _null_ _null_ _null_ pg_advisory_lock_shared_int4 _null_ _null_ _null_ )); DESCR("obtain shared advisory lock"); ! DATA(insert OID = 2888 ( pg_try_advisory_lock PGNSP PGUID 12 1 0 0 f f t f v 2 16 "23 23" _null_ _null_ _null_ pg_try_advisory_lock_int4 _null_ _null_ _null_ )); DESCR("obtain exclusive advisory lock if available"); ! DATA(insert OID = 2889 ( pg_try_advisory_lock_shared PGNSP PGUID 12 1 0 0 f f t f v 2 16 "23 23" _null_ _null_ _null_ pg_try_advisory_lock_shared_int4 _null_ _null_ _null_ )); DESCR("obtain shared advisory lock if available"); ! DATA(insert OID = 2890 ( pg_advisory_unlock PGNSP PGUID 12 1 0 0 f f t f v 2 16 "23 23" _null_ _null_ _null_ pg_advisory_unlock_int4 _null_ _null_ _null_ )); DESCR("release exclusive advisory lock"); ! DATA(insert OID = 2891 ( pg_advisory_unlock_shared PGNSP PGUID 12 1 0 0 f f t f v 2 16 "23 23" _null_ _null_ _null_ pg_advisory_unlock_shared_int4 _null_ _null_ _null_ )); DESCR("release shared advisory lock"); ! DATA(insert OID = 2892 ( pg_advisory_unlock_all PGNSP PGUID 12 1 0 0 f f t f v 0 2278 "" _null_ _null_ _null_ pg_advisory_unlock_all _null_ _null_ _null_ )); DESCR("release all advisory locks"); /* XML support */ ! DATA(insert OID = 2893 ( xml_in PGNSP PGUID 12 1 0 0 f f t f s 1 142 "2275" _null_ _null_ _null_ xml_in _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2894 ( xml_out PGNSP PGUID 12 1 0 0 f f t f i 1 2275 "142" _null_ _null_ _null_ xml_out _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2895 ( xmlcomment PGNSP PGUID 12 1 0 0 f f t f i 1 142 "25" _null_ _null_ _null_ xmlcomment _null_ _null_ _null_ )); DESCR("generate an XML comment"); ! DATA(insert OID = 2896 ( xml PGNSP PGUID 12 1 0 0 f f t f s 1 142 "25" _null_ _null_ _null_ texttoxml _null_ _null_ _null_ )); DESCR("perform a non-validating parse of a character string to produce an XML value"); ! DATA(insert OID = 2897 ( xmlvalidate PGNSP PGUID 12 1 0 0 f f t f i 2 16 "142 25" _null_ _null_ _null_ xmlvalidate _null_ _null_ _null_ )); DESCR("validate an XML value"); ! DATA(insert OID = 2898 ( xml_recv PGNSP PGUID 12 1 0 0 f f t f s 1 142 "2281" _null_ _null_ _null_ xml_recv _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2899 ( xml_send PGNSP PGUID 12 1 0 0 f f t f s 1 17 "142" _null_ _null_ _null_ xml_send _null_ _null_ _null_ )); DESCR("I/O"); ! DATA(insert OID = 2900 ( xmlconcat2 PGNSP PGUID 12 1 0 0 f f f f i 2 142 "142 142" _null_ _null_ _null_ xmlconcat2 _null_ _null_ _null_ )); DESCR("aggregate transition function"); ! DATA(insert OID = 2901 ( xmlagg PGNSP PGUID 12 1 0 0 t f f f i 1 142 "142" _null_ _null_ _null_ aggregate_dummy _null_ _null_ _null_ )); DESCR("concatenate XML values"); ! DATA(insert OID = 2922 ( text PGNSP PGUID 12 1 0 0 f f t f i 1 25 "142" _null_ _null_ _null_ xmltotext _null_ _null_ _null_ )); DESCR("serialize an XML value to a character string"); ! DATA(insert OID = 2923 ( table_to_xml PGNSP PGUID 12 100 0 0 f f t f s 4 142 "2205 16 16 25" _null_ _null_ "{tbl,nulls,tableforest,targetns}" table_to_xml _null_ _null_ _null_ )); DESCR("map table contents to XML"); ! DATA(insert OID = 2924 ( query_to_xml PGNSP PGUID 12 100 0 0 f f t f s 4 142 "25 16 16 25" _null_ _null_ "{query,nulls,tableforest,targetns}" query_to_xml _null_ _null_ _null_ )); DESCR("map query result to XML"); ! DATA(insert OID = 2925 ( cursor_to_xml PGNSP PGUID 12 100 0 0 f f t f s 5 142 "1790 23 16 16 25" _null_ _null_ "{cursor,count,nulls,tableforest,targetns}" cursor_to_xml _null_ _null_ _null_ )); DESCR("map rows from cursor to XML"); ! DATA(insert OID = 2926 ( table_to_xmlschema PGNSP PGUID 12 100 0 0 f f t f s 4 142 "2205 16 16 25" _null_ _null_ "{tbl,nulls,tableforest,targetns}" table_to_xmlschema _null_ _null_ _null_ )); DESCR("map table structure to XML Schema"); ! DATA(insert OID = 2927 ( query_to_xmlschema PGNSP PGUID 12 100 0 0 f f t f s 4 142 "25 16 16 25" _null_ _null_ "{query,nulls,tableforest,targetns}" query_to_xmlschema _null_ _null_ _null_ )); DESCR("map query result structure to XML Schema"); ! DATA(insert OID = 2928 ( cursor_to_xmlschema PGNSP PGUID 12 100 0 0 f f t f s 4 142 "1790 16 16 25" _null_ _null_ "{cursor,nulls,tableforest,targetns}" cursor_to_xmlschema _null_ _null_ _null_ )); DESCR("map cursor structure to XML Schema"); ! DATA(insert OID = 2929 ( table_to_xml_and_xmlschema PGNSP PGUID 12 100 0 0 f f t f s 4 142 "2205 16 16 25" _null_ _null_ "{tbl,nulls,tableforest,targetns}" table_to_xml_and_xmlschema _null_ _null_ _null_ ));