#include "catalog/genbki.h"
#include "nodes/pg_list.h"
Go to the source code of this file.
Defines | |
#define | OperatorRelationId 2617 |
#define | Natts_pg_operator 14 |
#define | Anum_pg_operator_oprname 1 |
#define | Anum_pg_operator_oprnamespace 2 |
#define | Anum_pg_operator_oprowner 3 |
#define | Anum_pg_operator_oprkind 4 |
#define | Anum_pg_operator_oprcanmerge 5 |
#define | Anum_pg_operator_oprcanhash 6 |
#define | Anum_pg_operator_oprleft 7 |
#define | Anum_pg_operator_oprright 8 |
#define | Anum_pg_operator_oprresult 9 |
#define | Anum_pg_operator_oprcom 10 |
#define | Anum_pg_operator_oprnegate 11 |
#define | Anum_pg_operator_oprcode 12 |
#define | Anum_pg_operator_oprrest 13 |
#define | Anum_pg_operator_oprjoin 14 |
#define | BooleanNotEqualOperator 85 |
#define | BooleanEqualOperator 91 |
#define | TextEqualOperator 98 |
#define | TIDEqualOperator 387 |
#define | TIDLessOperator 2799 |
#define | OID_NAME_REGEXEQ_OP 639 |
#define | OID_TEXT_REGEXEQ_OP 641 |
#define | Float8LessOperator 672 |
#define | OID_BPCHAR_REGEXEQ_OP 1055 |
#define | ARRAY_EQ_OP 1070 |
#define | ARRAY_LT_OP 1072 |
#define | ARRAY_GT_OP 1073 |
#define | OID_NAME_LIKE_OP 1207 |
#define | OID_TEXT_LIKE_OP 1209 |
#define | OID_BPCHAR_LIKE_OP 1211 |
#define | OID_NAME_ICREGEXEQ_OP 1226 |
#define | OID_TEXT_ICREGEXEQ_OP 1228 |
#define | OID_BPCHAR_ICREGEXEQ_OP 1234 |
#define | OID_INET_SUB_OP 931 |
#define | OID_INET_SUBEQ_OP 932 |
#define | OID_INET_SUP_OP 933 |
#define | OID_INET_SUPEQ_OP 934 |
#define | OID_NAME_ICLIKE_OP 1625 |
#define | OID_TEXT_ICLIKE_OP 1627 |
#define | OID_BPCHAR_ICLIKE_OP 1629 |
#define | OID_BYTEA_LIKE_OP 2016 |
#define | OID_ARRAY_OVERLAP_OP 2750 |
#define | OID_ARRAY_CONTAINS_OP 2751 |
#define | OID_ARRAY_CONTAINED_OP 2752 |
#define | RECORD_EQ_OP 2988 |
#define | RECORD_LT_OP 2990 |
#define | RECORD_GT_OP 2991 |
#define | OID_RANGE_LESS_OP 3884 |
#define | OID_RANGE_LESS_EQUAL_OP 3885 |
#define | OID_RANGE_GREATER_OP 3886 |
#define | OID_RANGE_GREATER_EQUAL_OP 3887 |
#define | OID_RANGE_OVERLAP_OP 3888 |
#define | OID_RANGE_CONTAINS_ELEM_OP 3889 |
#define | OID_RANGE_CONTAINS_OP 3890 |
#define | OID_RANGE_ELEM_CONTAINED_OP 3891 |
#define | OID_RANGE_CONTAINED_OP 3892 |
#define | OID_RANGE_LEFT_OP 3893 |
#define | OID_RANGE_RIGHT_OP 3894 |
#define | OID_RANGE_OVERLAPS_LEFT_OP 3895 |
#define | OID_RANGE_OVERLAPS_RIGHT_OP 3896 |
Typedefs | |
typedef FormData_pg_operator* | Form_pg_operator |
Functions | |
CATALOG (pg_operator, 2617) | |
DATA (insert OID=15("="PGNSP PGUID b t t 23 20 16 416 36 int48eq eqsel eqjoinsel)) | |
DESCR ("equal") | |
DESCR ("not equal") | |
DESCR ("less than") | |
DESCR ("greater than") | |
DESCR ("less than or equal") | |
DESCR ("greater than or equal") | |
DESCR ("append element onto end of array") | |
DESCR ("prepend element onto front of array") | |
DESCR ("concatenate") | |
DESCR ("factorial") | |
DESCR ("deprecated, use ! instead") | |
DESCR ("modulus") | |
DESCR ("absolute value") | |
DESCR ("negate") | |
DESCR ("is left of") | |
DESCR ("overlaps or is left of") | |
DESCR ("overlaps or is right of") | |
DESCR ("is right of") | |
DESCR ("is contained by") | |
DESCR ("contains") | |
DESCR ("same as") | |
DESCR ("overlaps") | |
DESCR ("greater than or equal by area") | |
DESCR ("greater than by area") | |
DESCR ("equal by area") | |
DESCR ("less than by area") | |
DESCR ("less than or equal by area") | |
DESCR ("is above") | |
DESCR ("is below") | |
DESCR ("point inside box") | |
DESCR ("point within closed path, or point on open path") | |
DESCR ("center of") | |
DESCR ("multiply") | |
DESCR ("distance between") | |
DESCR ("divide") | |
DESCR ("add") | |
DESCR ("subtract") | |
DESCR ("equal by length") | |
DESCR ("not equal by length") | |
DESCR ("less than by length") | |
DESCR ("greater than by length") | |
DESCR ("less than or equal by length") | |
DESCR ("greater than or equal by length") | |
DESCR ("square root") | |
DESCR ("cube root") | |
DESCR ("start of interval") | |
DESCR ("convert to tinterval") | |
DESCR ("matches regular expression, case-sensitive") | |
DESCR ("does not match regular expression, case-sensitive") | |
DESCR ("add points (translate)") | |
DESCR ("subtract points (translate)") | |
DESCR ("multiply points (scale/rotate)") | |
DESCR ("divide points (scale/rotate)") | |
DESCR ("add (translate path)") | |
DESCR ("subtract (translate path)") | |
DESCR ("multiply (rotate/scale path)") | |
DESCR ("divide (rotate/scale path)") | |
DESCR ("number of points") | |
DESCR ("intersect") | |
DESCR ("sum of path segment lengths") | |
DESCR ("is above (allows touching)") | |
DESCR ("is below (allows touching)") | |
DESCR ("deprecated, use && instead") | |
DESCR ("box intersection") | |
DESCR ("add point to box (translate)") | |
DESCR ("subtract point from box (translate)") | |
DESCR ("multiply box by point (scale)") | |
DESCR ("divide box by point (scale)") | |
DESCR ("horizontally aligned") | |
DESCR ("vertically aligned") | |
DESCR ("exponentiation") | |
DESCR ("add/update ACL item") | |
DESCR ("remove ACL item") | |
DESCR ("matches LIKE expression") | |
DESCR ("does not match LIKE expression") | |
DESCR ("matches regular expression, case-insensitive") | |
DESCR ("does not match regular expression, case-insensitive") | |
DESCR ("convert date and time to timestamp") | |
DESCR ("convert date and time with time zone to timestamp with time zone") | |
DESCR ("convert time and date to timestamp") | |
DESCR ("convert time with time zone and date to timestamp with time zone") | |
DESCR ("not equal by area") | |
DESCR ("parallel") | |
DESCR ("perpendicular") | |
DESCR ("horizontal") | |
DESCR ("vertical") | |
DESCR ("intersection point") | |
DESCR ("point on line") | |
DESCR ("lseg on line") | |
DESCR ("closest point to A on B") | |
DESCR ("distance between endpoints") | |
DESCR ("bitwise not") | |
DESCR ("bitwise and") | |
DESCR ("bitwise or") | |
DESCR ("is subnet") | |
DESCR ("is subnet or equal") | |
DESCR ("is supernet") | |
DESCR ("is supernet or equal") | |
DESCR ("matches LIKE expression, case-insensitive") | |
DESCR ("does not match LIKE expression, case-insensitive") | |
DESCR ("bitwise exclusive or") | |
DESCR ("bitwise shift left") | |
DESCR ("bitwise shift right") | |
DESCR ("unary plus") | |
DESCR ("overlaps or is below") | |
DESCR ("overlaps or is above") | |
DESCR ("deprecated, use <@ instead") | |
DESCR ("deprecated, use @> instead") | |
DESCR ("text search match") | |
DESCR ("deprecated, use @@ instead") | |
DESCR ("AND-concatenate") | |
DESCR ("OR-concatenate") | |
DESCR ("NOT tsquery") | |
DESCR ("is adjacent to") | |
DESCR ("range union") | |
DESCR ("range difference") | |
DESCR ("range intersection") | |
DESCR ("get json object field") | |
DESCR ("get json object field as text") | |
DESCR ("get json array element") | |
DESCR ("get json array element as text") | |
DESCR ("get value from json with path elements") | |
DESCR ("get value from json as text with path elements") | |
Oid | OperatorCreate (const char *operatorName, Oid operatorNamespace, Oid leftTypeId, Oid rightTypeId, Oid procedureId, List *commutatorName, List *negatorName, Oid restrictionId, Oid joinId, bool canMerge, bool canHash) |
Variables | |
FormData_pg_operator |
#define Anum_pg_operator_oprcanhash 6 |
Definition at line 71 of file pg_operator.h.
Referenced by OperatorCreate(), and OperatorShellMake().
#define Anum_pg_operator_oprcanmerge 5 |
Definition at line 70 of file pg_operator.h.
Referenced by OperatorCreate(), and OperatorShellMake().
#define Anum_pg_operator_oprcode 12 |
Definition at line 77 of file pg_operator.h.
Referenced by OperatorCreate(), and OperatorShellMake().
#define Anum_pg_operator_oprcom 10 |
Definition at line 75 of file pg_operator.h.
Referenced by OperatorCreate(), OperatorShellMake(), and OperatorUpd().
#define Anum_pg_operator_oprjoin 14 |
Definition at line 79 of file pg_operator.h.
Referenced by OperatorCreate(), and OperatorShellMake().
#define Anum_pg_operator_oprkind 4 |
Definition at line 69 of file pg_operator.h.
Referenced by OperatorCreate(), and OperatorShellMake().
#define Anum_pg_operator_oprleft 7 |
Definition at line 72 of file pg_operator.h.
Referenced by OperatorCreate(), and OperatorShellMake().
#define Anum_pg_operator_oprname 1 |
Definition at line 66 of file pg_operator.h.
Referenced by OperatorCreate(), OperatorShellMake(), and regoperin().
#define Anum_pg_operator_oprnamespace 2 |
Definition at line 67 of file pg_operator.h.
Referenced by OperatorCreate(), and OperatorShellMake().
#define Anum_pg_operator_oprnegate 11 |
Definition at line 76 of file pg_operator.h.
Referenced by OperatorCreate(), OperatorShellMake(), and OperatorUpd().
#define Anum_pg_operator_oprowner 3 |
Definition at line 68 of file pg_operator.h.
Referenced by OperatorCreate(), and OperatorShellMake().
#define Anum_pg_operator_oprrest 13 |
Definition at line 78 of file pg_operator.h.
Referenced by OperatorCreate(), and OperatorShellMake().
#define Anum_pg_operator_oprresult 9 |
Definition at line 74 of file pg_operator.h.
Referenced by OperatorCreate(), and OperatorShellMake().
#define Anum_pg_operator_oprright 8 |
Definition at line 73 of file pg_operator.h.
Referenced by OperatorCreate(), and OperatorShellMake().
#define ARRAY_EQ_OP 1070 |
Definition at line 766 of file pg_operator.h.
Referenced by hash_ok_operator(), lookup_type_cache(), op_hashjoinable(), and op_mergejoinable().
#define ARRAY_GT_OP 1073 |
Definition at line 774 of file pg_operator.h.
Referenced by lookup_type_cache().
#define ARRAY_LT_OP 1072 |
Definition at line 771 of file pg_operator.h.
Referenced by lookup_type_cache().
#define BooleanEqualOperator 91 |
Definition at line 115 of file pg_operator.h.
Referenced by clause_selectivity(), eval_const_expressions_mutator(), expand_boolean_index_clause(), and simplify_boolean_equality().
#define BooleanNotEqualOperator 85 |
Definition at line 112 of file pg_operator.h.
Referenced by eval_const_expressions_mutator().
#define Float8LessOperator 672 |
Definition at line 530 of file pg_operator.h.
#define Natts_pg_operator 14 |
Definition at line 65 of file pg_operator.h.
#define OID_ARRAY_CONTAINED_OP 2752 |
Definition at line 1532 of file pg_operator.h.
Referenced by arraycontsel(), calc_arraycontsel(), mcelem_array_selec(), and scalararraysel_containment().
#define OID_ARRAY_CONTAINS_OP 2751 |
Definition at line 1529 of file pg_operator.h.
Referenced by arraycontsel(), mcelem_array_contain_overlap_selec(), mcelem_array_selec(), and scalararraysel_containment().
#define OID_ARRAY_OVERLAP_OP 2750 |
Definition at line 1526 of file pg_operator.h.
Referenced by mcelem_array_selec().
#define OID_BPCHAR_ICLIKE_OP 1629 |
Definition at line 1181 of file pg_operator.h.
Referenced by expand_indexqual_opclause(), and match_special_index_operator().
#define OID_BPCHAR_ICREGEXEQ_OP 1234 |
Definition at line 907 of file pg_operator.h.
Referenced by expand_indexqual_opclause(), and match_special_index_operator().
#define OID_BPCHAR_LIKE_OP 1211 |
Definition at line 890 of file pg_operator.h.
Referenced by expand_indexqual_opclause(), and match_special_index_operator().
#define OID_BPCHAR_REGEXEQ_OP 1055 |
Definition at line 749 of file pg_operator.h.
Referenced by expand_indexqual_opclause(), and match_special_index_operator().
#define OID_BYTEA_LIKE_OP 2016 |
Definition at line 1361 of file pg_operator.h.
Referenced by expand_indexqual_opclause(), and match_special_index_operator().
#define OID_INET_SUB_OP 931 |
Definition at line 1142 of file pg_operator.h.
Referenced by expand_indexqual_opclause(), match_special_index_operator(), and network_prefix_quals().
#define OID_INET_SUBEQ_OP 932 |
Definition at line 1145 of file pg_operator.h.
Referenced by expand_indexqual_opclause(), match_special_index_operator(), and network_prefix_quals().
#define OID_INET_SUP_OP 933 |
Definition at line 1148 of file pg_operator.h.
#define OID_INET_SUPEQ_OP 934 |
Definition at line 1151 of file pg_operator.h.
#define OID_NAME_ICLIKE_OP 1625 |
Definition at line 1171 of file pg_operator.h.
Referenced by expand_indexqual_opclause(), and match_special_index_operator().
#define OID_NAME_ICREGEXEQ_OP 1226 |
Definition at line 897 of file pg_operator.h.
Referenced by expand_indexqual_opclause(), and match_special_index_operator().
#define OID_NAME_LIKE_OP 1207 |
Definition at line 880 of file pg_operator.h.
Referenced by expand_indexqual_opclause(), and match_special_index_operator().
#define OID_NAME_REGEXEQ_OP 639 |
Definition at line 494 of file pg_operator.h.
Referenced by expand_indexqual_opclause(), and match_special_index_operator().
#define OID_RANGE_CONTAINED_OP 3892 |
Definition at line 1706 of file pg_operator.h.
Referenced by calc_hist_selectivity(), calc_rangesel(), and default_range_selectivity().
#define OID_RANGE_CONTAINS_ELEM_OP 3889 |
Definition at line 1697 of file pg_operator.h.
Referenced by calc_hist_selectivity(), calc_rangesel(), default_range_selectivity(), and rangesel().
#define OID_RANGE_CONTAINS_OP 3890 |
Definition at line 1700 of file pg_operator.h.
Referenced by calc_hist_selectivity(), calc_rangesel(), and default_range_selectivity().
#define OID_RANGE_ELEM_CONTAINED_OP 3891 |
Definition at line 1703 of file pg_operator.h.
#define OID_RANGE_GREATER_EQUAL_OP 3887 |
Definition at line 1691 of file pg_operator.h.
Referenced by calc_hist_selectivity(), calc_rangesel(), and default_range_selectivity().
#define OID_RANGE_GREATER_OP 3886 |
Definition at line 1688 of file pg_operator.h.
Referenced by calc_hist_selectivity(), and default_range_selectivity().
#define OID_RANGE_LEFT_OP 3893 |
Definition at line 1709 of file pg_operator.h.
Referenced by calc_hist_selectivity(), calc_rangesel(), and default_range_selectivity().
#define OID_RANGE_LESS_EQUAL_OP 3885 |
Definition at line 1685 of file pg_operator.h.
Referenced by calc_hist_selectivity(), calc_rangesel(), and default_range_selectivity().
#define OID_RANGE_LESS_OP 3884 |
Definition at line 1682 of file pg_operator.h.
Referenced by calc_hist_selectivity(), and default_range_selectivity().
#define OID_RANGE_OVERLAP_OP 3888 |
Definition at line 1694 of file pg_operator.h.
Referenced by calc_hist_selectivity(), calc_rangesel(), and default_range_selectivity().
#define OID_RANGE_OVERLAPS_LEFT_OP 3895 |
Definition at line 1715 of file pg_operator.h.
Referenced by calc_hist_selectivity(), and calc_rangesel().
#define OID_RANGE_OVERLAPS_RIGHT_OP 3896 |
Definition at line 1718 of file pg_operator.h.
Referenced by calc_hist_selectivity(), and calc_rangesel().
#define OID_RANGE_RIGHT_OP 3894 |
Definition at line 1712 of file pg_operator.h.
Referenced by calc_hist_selectivity(), calc_rangesel(), and default_range_selectivity().
#define OID_TEXT_ICLIKE_OP 1627 |
Definition at line 1176 of file pg_operator.h.
Referenced by expand_indexqual_opclause(), and match_special_index_operator().
#define OID_TEXT_ICREGEXEQ_OP 1228 |
Definition at line 902 of file pg_operator.h.
Referenced by expand_indexqual_opclause(), and match_special_index_operator().
#define OID_TEXT_LIKE_OP 1209 |
Definition at line 885 of file pg_operator.h.
Referenced by expand_indexqual_opclause(), and match_special_index_operator().
#define OID_TEXT_REGEXEQ_OP 641 |
Definition at line 499 of file pg_operator.h.
Referenced by expand_indexqual_opclause(), and match_special_index_operator().
#define OperatorRelationId 2617 |
Definition at line 33 of file pg_operator.h.
Referenced by getObjectClass(), makeOperatorDependencies(), OperatorCreate(), OperatorShellMake(), OperatorUpd(), regoperin(), RemoveOperatorById(), and shdepReassignOwned().
#define RECORD_EQ_OP 2988 |
Definition at line 1661 of file pg_operator.h.
Referenced by lookup_type_cache(), and op_mergejoinable().
#define RECORD_GT_OP 2991 |
Definition at line 1669 of file pg_operator.h.
Referenced by lookup_type_cache().
#define RECORD_LT_OP 2990 |
Definition at line 1666 of file pg_operator.h.
Referenced by lookup_type_cache().
#define TextEqualOperator 98 |
Definition at line 135 of file pg_operator.h.
#define TIDEqualOperator 387 |
Definition at line 159 of file pg_operator.h.
Referenced by IsTidEqualAnyClause(), and IsTidEqualClause().
#define TIDLessOperator 2799 |
Definition at line 164 of file pg_operator.h.
Referenced by validate_index().
typedef FormData_pg_operator* Form_pg_operator |
Definition at line 58 of file pg_operator.h.
CATALOG | ( | pg_operator | , | |
2617 | ||||
) |
Definition at line 35 of file pg_operator.h.
{ NameData oprname; /* name of operator */ Oid oprnamespace; /* OID of namespace containing this oper */ Oid oprowner; /* operator owner */ char oprkind; /* 'l', 'r', or 'b' */ bool oprcanmerge; /* can be used in merge join? */ bool oprcanhash; /* can be used in hash join? */ Oid oprleft; /* left arg type, or 0 if 'l' oprkind */ Oid oprright; /* right arg type, or 0 if 'r' oprkind */ Oid oprresult; /* result datatype */ Oid oprcom; /* OID of commutator oper, or 0 if none */ Oid oprnegate; /* OID of negator oper, or 0 if none */ regproc oprcode; /* OID of underlying function */ regproc oprrest; /* OID of restriction estimator, or 0 */ regproc oprjoin; /* OID of join estimator, or 0 */ } FormData_pg_operator;
DATA | ( | insert | OID = 15("="PGNSP PGUID b t t 23 20 16 416 36 int48eq eqsel eqjoinsel) |
) |
DESCR | ( | "get value from json with path elements" | ) |
DESCR | ( | "get json array element as text" | ) |
DESCR | ( | "get json array element" | ) |
DESCR | ( | "get json object field as text" | ) |
DESCR | ( | "get json object field" | ) |
DESCR | ( | "range intersection" | ) |
DESCR | ( | "range difference" | ) |
DESCR | ( | "range union" | ) |
DESCR | ( | "is adjacent to" | ) |
DESCR | ( | "NOT tsquery" | ) |
DESCR | ( | "OR-concatenate" | ) |
DESCR | ( | "AND-concatenate" | ) |
DESCR | ( | " | deprecated, | |
use @@instead" | ||||
) |
DESCR | ( | "text search match" | ) |
DESCR | ( | " | deprecated, | |
use @ | , | |||
instead" | ||||
) |
DESCR | ( | " | deprecated | ) |
DESCR | ( | "overlaps or is above" | ) |
DESCR | ( | "overlaps or is below" | ) |
DESCR | ( | "unary plus" | ) |
DESCR | ( | "bitwise shift right" | ) |
DESCR | ( | "bitwise shift left" | ) |
DESCR | ( | "bitwise exclusive or" | ) |
DESCR | ( | "does not match LIKE | expression, | |
case-insensitive" | ||||
) |
DESCR | ( | "matches LIKE | expression, | |
case-insensitive" | ||||
) |
DESCR | ( | "is supernet or equal" | ) |
DESCR | ( | "is supernet" | ) |
DESCR | ( | "is subnet or equal" | ) |
DESCR | ( | "is subnet" | ) |
DESCR | ( | "bitwise or" | ) |
DESCR | ( | "bitwise and" | ) |
DESCR | ( | "bitwise not" | ) |
DESCR | ( | "distance between endpoints" | ) |
DESCR | ( | "closest point to A on B" | ) |
DESCR | ( | "lseg on line" | ) |
DESCR | ( | "point on line" | ) |
DESCR | ( | "intersection point" | ) |
DESCR | ( | "vertical" | ) |
DESCR | ( | "horizontal" | ) |
DESCR | ( | "perpendicular" | ) |
DESCR | ( | "parallel" | ) |
DESCR | ( | "not equal by area" | ) |
DESCR | ( | "does not match regular | expression, | |
case-insensitive" | ||||
) |
DESCR | ( | "matches regular | expression, | |
case-insensitive" | ||||
) |
DESCR | ( | "does not match LIKE expression" | ) |
DESCR | ( | "matches LIKE expression" | ) |
DESCR | ( | "remove ACL item" | ) |
DESCR | ( | "add/update ACL item" | ) |
DESCR | ( | "exponentiation" | ) |
DESCR | ( | "vertically aligned" | ) |
DESCR | ( | "horizontally aligned" | ) |
DESCR | ( | "divide box by point (scale)" | ) |
DESCR | ( | "multiply box by point (scale)" | ) |
DESCR | ( | "subtract point from box (translate)" | ) |
DESCR | ( | "add point to box (translate)" | ) |
DESCR | ( | "box intersection" | ) |
DESCR | ( | " | deprecated, | |
use &&instead" | ||||
) |
DESCR | ( | "not equal" | ) |
DESCR | ( | "is above (allows touching)" | ) |
DESCR | ( | "sum of path segment lengths" | ) |
DESCR | ( | "intersect" | ) |
DESCR | ( | "number of points" | ) |
DESCR | ( | "divide (rotate/scale path)" | ) |
DESCR | ( | "multiply (rotate/scale path)" | ) |
DESCR | ( | "subtract (translate path)" | ) |
DESCR | ( | "add (translate path)" | ) |
DESCR | ( | "divide points (scale/rotate)" | ) |
DESCR | ( | "multiply points (scale/rotate)" | ) |
DESCR | ( | "subtract points (translate)" | ) |
DESCR | ( | "add points (translate)" | ) |
DESCR | ( | "does not match regular | expression, | |
case-sensitive" | ||||
) |
DESCR | ( | "matches regular | expression, | |
case-sensitive" | ||||
) |
DESCR | ( | "convert to tinterval" | ) |
DESCR | ( | "start of interval" | ) |
DESCR | ( | "cube root" | ) |
DESCR | ( | "square root" | ) |
DESCR | ( | "greater than or equal by length" | ) |
DESCR | ( | "less than or equal by length" | ) |
DESCR | ( | "greater than by length" | ) |
DESCR | ( | "less than by length" | ) |
DESCR | ( | "not equal by length" | ) |
DESCR | ( | "equal by length" | ) |
DESCR | ( | "subtract" | ) |
DESCR | ( | "add" | ) |
DESCR | ( | "divide" | ) |
DESCR | ( | "distance between" | ) |
DESCR | ( | "multiply" | ) |
DESCR | ( | "center of" | ) |
DESCR | ( | "point within closed | path, | |
or point on open path" | ||||
) |
DESCR | ( | "greater than or equal" | ) |
DESCR | ( | "is below" | ) |
DESCR | ( | "is above" | ) |
DESCR | ( | "less than or equal by area" | ) |
DESCR | ( | "less than by area" | ) |
DESCR | ( | "equal by area" | ) |
DESCR | ( | "greater than by area" | ) |
DESCR | ( | "greater than or equal by area" | ) |
DESCR | ( | "overlaps" | ) |
DESCR | ( | "same as" | ) |
DESCR | ( | "contains" | ) |
DESCR | ( | "is contained by" | ) |
DESCR | ( | "is right of" | ) |
DESCR | ( | "overlaps or is right of" | ) |
DESCR | ( | "overlaps or is left of" | ) |
DESCR | ( | "is left of" | ) |
DESCR | ( | "negate" | ) |
DESCR | ( | "absolute value" | ) |
DESCR | ( | "modulus" | ) |
DESCR | ( | " | deprecated, | |
use!instead" | ||||
) |
DESCR | ( | "factorial" | ) |
DESCR | ( | "concatenate" | ) |
DESCR | ( | "prepend element onto front of array" | ) |
DESCR | ( | "append element onto end of array" | ) |
DESCR | ( | "point inside box" | ) |
DESCR | ( | "less than or equal" | ) |
DESCR | ( | "greater than" | ) |
DESCR | ( | "less than" | ) |
DESCR | ( | "is below (allows touching)" | ) |
DESCR | ( | "equal" | ) |
Oid OperatorCreate | ( | const char * | operatorName, | |
Oid | operatorNamespace, | |||
Oid | leftTypeId, | |||
Oid | rightTypeId, | |||
Oid | procedureId, | |||
List * | commutatorName, | |||
List * | negatorName, | |||
Oid | restrictionId, | |||
Oid | joinId, | |||
bool | canMerge, | |||
bool | canHash | |||
) |
Definition at line 329 of file pg_operator.c.
References ACL_KIND_OPER, aclcheck_error(), ACLCHECK_NOT_OWNER, Anum_pg_operator_oprcanhash, Anum_pg_operator_oprcanmerge, Anum_pg_operator_oprcode, Anum_pg_operator_oprcom, Anum_pg_operator_oprjoin, Anum_pg_operator_oprkind, Anum_pg_operator_oprleft, Anum_pg_operator_oprname, Anum_pg_operator_oprnamespace, Anum_pg_operator_oprnegate, Anum_pg_operator_oprowner, Anum_pg_operator_oprrest, Anum_pg_operator_oprresult, Anum_pg_operator_oprright, BoolGetDatum, BOOLOID, CatalogUpdateIndexes(), CharGetDatum, elog, ereport, errcode(), errmsg(), ERROR, get_func_rettype(), get_other_operator(), GetUserId(), heap_close, heap_form_tuple(), heap_modify_tuple(), heap_open(), HeapTupleIsValid, i, InvokeObjectPostCreateHook, makeOperatorDependencies(), NameGetDatum, NameListToString(), namestrcpy(), NULL, ObjectIdGetDatum, OidIsValid, OperatorRelationId, OperatorUpd(), OPEROID, pg_oper_ownercheck(), RelationData::rd_att, RelationGetDescr, RowExclusiveLock, SearchSysCacheCopy1, simple_heap_update(), HeapTupleData::t_self, validOperatorName(), and values.
Referenced by DefineOperator().
{ Relation pg_operator_desc; HeapTuple tup; bool nulls[Natts_pg_operator]; bool replaces[Natts_pg_operator]; Datum values[Natts_pg_operator]; Oid operatorObjectId; bool operatorAlreadyDefined; Oid operResultType; Oid commutatorId, negatorId; bool selfCommutator = false; NameData oname; TupleDesc tupDesc; int i; /* * Sanity checks */ if (!validOperatorName(operatorName)) ereport(ERROR, (errcode(ERRCODE_INVALID_NAME), errmsg("\"%s\" is not a valid operator name", operatorName))); if (!(OidIsValid(leftTypeId) && OidIsValid(rightTypeId))) { /* If it's not a binary op, these things mustn't be set: */ if (commutatorName) ereport(ERROR, (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), errmsg("only binary operators can have commutators"))); if (OidIsValid(joinId)) ereport(ERROR, (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), errmsg("only binary operators can have join selectivity"))); if (canMerge) ereport(ERROR, (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), errmsg("only binary operators can merge join"))); if (canHash) ereport(ERROR, (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), errmsg("only binary operators can hash"))); } operResultType = get_func_rettype(procedureId); if (operResultType != BOOLOID) { /* If it's not a boolean op, these things mustn't be set: */ if (negatorName) ereport(ERROR, (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), errmsg("only boolean operators can have negators"))); if (OidIsValid(restrictionId)) ereport(ERROR, (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), errmsg("only boolean operators can have restriction selectivity"))); if (OidIsValid(joinId)) ereport(ERROR, (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), errmsg("only boolean operators can have join selectivity"))); if (canMerge) ereport(ERROR, (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), errmsg("only boolean operators can merge join"))); if (canHash) ereport(ERROR, (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION), errmsg("only boolean operators can hash"))); } operatorObjectId = OperatorGet(operatorName, operatorNamespace, leftTypeId, rightTypeId, &operatorAlreadyDefined); if (operatorAlreadyDefined) ereport(ERROR, (errcode(ERRCODE_DUPLICATE_FUNCTION), errmsg("operator %s already exists", operatorName))); /* * At this point, if operatorObjectId is not InvalidOid then we are * filling in a previously-created shell. Insist that the user own any * such shell. */ if (OidIsValid(operatorObjectId) && !pg_oper_ownercheck(operatorObjectId, GetUserId())) aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_OPER, operatorName); /* * Set up the other operators. If they do not currently exist, create * shells in order to get ObjectId's. */ if (commutatorName) { /* commutator has reversed arg types */ commutatorId = get_other_operator(commutatorName, rightTypeId, leftTypeId, operatorName, operatorNamespace, leftTypeId, rightTypeId, true); /* Permission check: must own other operator */ if (OidIsValid(commutatorId) && !pg_oper_ownercheck(commutatorId, GetUserId())) aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_OPER, NameListToString(commutatorName)); /* * self-linkage to this operator; will fix below. Note that only * self-linkage for commutation makes sense. */ if (!OidIsValid(commutatorId)) selfCommutator = true; } else commutatorId = InvalidOid; if (negatorName) { /* negator has same arg types */ negatorId = get_other_operator(negatorName, leftTypeId, rightTypeId, operatorName, operatorNamespace, leftTypeId, rightTypeId, false); /* Permission check: must own other operator */ if (OidIsValid(negatorId) && !pg_oper_ownercheck(negatorId, GetUserId())) aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_OPER, NameListToString(negatorName)); } else negatorId = InvalidOid; /* * set up values in the operator tuple */ for (i = 0; i < Natts_pg_operator; ++i) { values[i] = (Datum) NULL; replaces[i] = true; nulls[i] = false; } namestrcpy(&oname, operatorName); values[Anum_pg_operator_oprname - 1] = NameGetDatum(&oname); values[Anum_pg_operator_oprnamespace - 1] = ObjectIdGetDatum(operatorNamespace); values[Anum_pg_operator_oprowner - 1] = ObjectIdGetDatum(GetUserId()); values[Anum_pg_operator_oprkind - 1] = CharGetDatum(leftTypeId ? (rightTypeId ? 'b' : 'r') : 'l'); values[Anum_pg_operator_oprcanmerge - 1] = BoolGetDatum(canMerge); values[Anum_pg_operator_oprcanhash - 1] = BoolGetDatum(canHash); values[Anum_pg_operator_oprleft - 1] = ObjectIdGetDatum(leftTypeId); values[Anum_pg_operator_oprright - 1] = ObjectIdGetDatum(rightTypeId); values[Anum_pg_operator_oprresult - 1] = ObjectIdGetDatum(operResultType); values[Anum_pg_operator_oprcom - 1] = ObjectIdGetDatum(commutatorId); values[Anum_pg_operator_oprnegate - 1] = ObjectIdGetDatum(negatorId); values[Anum_pg_operator_oprcode - 1] = ObjectIdGetDatum(procedureId); values[Anum_pg_operator_oprrest - 1] = ObjectIdGetDatum(restrictionId); values[Anum_pg_operator_oprjoin - 1] = ObjectIdGetDatum(joinId); pg_operator_desc = heap_open(OperatorRelationId, RowExclusiveLock); /* * If we are replacing an operator shell, update; else insert */ if (operatorObjectId) { tup = SearchSysCacheCopy1(OPEROID, ObjectIdGetDatum(operatorObjectId)); if (!HeapTupleIsValid(tup)) elog(ERROR, "cache lookup failed for operator %u", operatorObjectId); tup = heap_modify_tuple(tup, RelationGetDescr(pg_operator_desc), values, nulls, replaces); simple_heap_update(pg_operator_desc, &tup->t_self, tup); } else { tupDesc = pg_operator_desc->rd_att; tup = heap_form_tuple(tupDesc, values, nulls); operatorObjectId = simple_heap_insert(pg_operator_desc, tup); } /* Must update the indexes in either case */ CatalogUpdateIndexes(pg_operator_desc, tup); /* Add dependencies for the entry */ makeOperatorDependencies(tup); /* Post creation hook for new operator */ InvokeObjectPostCreateHook(OperatorRelationId, operatorObjectId, 0); heap_close(pg_operator_desc, RowExclusiveLock); /* * If a commutator and/or negator link is provided, update the other * operator(s) to point at this one, if they don't already have a link. * This supports an alternative style of operator definition wherein the * user first defines one operator without giving negator or commutator, * then defines the other operator of the pair with the proper commutator * or negator attribute. That style doesn't require creation of a shell, * and it's the only style that worked right before Postgres version 6.5. * This code also takes care of the situation where the new operator is * its own commutator. */ if (selfCommutator) commutatorId = operatorObjectId; if (OidIsValid(commutatorId) || OidIsValid(negatorId)) OperatorUpd(operatorObjectId, commutatorId, negatorId); return operatorObjectId; }
Definition at line 51 of file pg_operator.h.