parse_oper.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /*-------------------------------------------------------------------------
  2. *
  3. * parse_oper.h
  4. * handle operator things for parser
  5. *
  6. *
  7. * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
  8. * Portions Copyright (c) 1994, Regents of the University of California
  9. *
  10. * src/include/parser/parse_oper.h
  11. *
  12. *-------------------------------------------------------------------------
  13. */
  14. #ifndef PARSE_OPER_H
  15. #define PARSE_OPER_H
  16. #include "access/htup.h"
  17. #include "nodes/parsenodes.h"
  18. #include "parser/parse_node.h"
  19. typedef HeapTuple Operator;
  20. /* Routines to look up an operator given name and exact input type(s) */
  21. extern Oid LookupOperName(ParseState *pstate, List *opername,
  22. Oid oprleft, Oid oprright,
  23. bool noError, int location);
  24. extern Oid LookupOperWithArgs(ObjectWithArgs *oper, bool noError);
  25. /* Routines to find operators matching a name and given input types */
  26. /* NB: the selected operator may require coercion of the input types! */
  27. extern Operator oper(ParseState *pstate, List *op, Oid arg1, Oid arg2,
  28. bool noError, int location);
  29. extern Operator left_oper(ParseState *pstate, List *op, Oid arg,
  30. bool noError, int location);
  31. /* Routines to find operators that DO NOT require coercion --- ie, their */
  32. /* input types are either exactly as given, or binary-compatible */
  33. extern Operator compatible_oper(ParseState *pstate, List *op,
  34. Oid arg1, Oid arg2,
  35. bool noError, int location);
  36. /* currently no need for compatible_left_oper/compatible_right_oper */
  37. /* Routines for identifying "<", "=", ">" operators for a type */
  38. extern void get_sort_group_operators(Oid argtype,
  39. bool needLT, bool needEQ, bool needGT,
  40. Oid *ltOpr, Oid *eqOpr, Oid *gtOpr,
  41. bool *isHashable);
  42. /* Convenience routines for common calls on the above */
  43. extern Oid compatible_oper_opid(List *op, Oid arg1, Oid arg2, bool noError);
  44. /* Extract operator OID or underlying-function OID from an Operator tuple */
  45. extern Oid oprid(Operator op);
  46. extern Oid oprfuncid(Operator op);
  47. /* Build expression tree for an operator invocation */
  48. extern Expr *make_op(ParseState *pstate, List *opname,
  49. Node *ltree, Node *rtree, Node *last_srf, int location);
  50. extern Expr *make_scalar_array_op(ParseState *pstate, List *opname,
  51. bool useOr,
  52. Node *ltree, Node *rtree, int location);
  53. #endif /* PARSE_OPER_H */