tlist.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /*-------------------------------------------------------------------------
  2. *
  3. * tlist.h
  4. * prototypes for tlist.c.
  5. *
  6. *
  7. * Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group
  8. * Portions Copyright (c) 1994, Regents of the University of California
  9. *
  10. * src/include/optimizer/tlist.h
  11. *
  12. *-------------------------------------------------------------------------
  13. */
  14. #ifndef TLIST_H
  15. #define TLIST_H
  16. #include "nodes/relation.h"
  17. extern TargetEntry *tlist_member(Node *node, List *targetlist);
  18. extern TargetEntry *tlist_member_ignore_relabel(Node *node, List *targetlist);
  19. extern List *add_to_flat_tlist(List *tlist, List *exprs);
  20. extern List *get_tlist_exprs(List *tlist, bool includeJunk);
  21. extern int count_nonjunk_tlist_entries(List *tlist);
  22. extern bool tlist_same_exprs(List *tlist1, List *tlist2);
  23. extern bool tlist_same_datatypes(List *tlist, List *colTypes, bool junkOK);
  24. extern bool tlist_same_collations(List *tlist, List *colCollations, bool junkOK);
  25. extern void apply_tlist_labeling(List *dest_tlist, List *src_tlist);
  26. extern TargetEntry *get_sortgroupref_tle(Index sortref,
  27. List *targetList);
  28. extern TargetEntry *get_sortgroupclause_tle(SortGroupClause *sgClause,
  29. List *targetList);
  30. extern Node *get_sortgroupclause_expr(SortGroupClause *sgClause,
  31. List *targetList);
  32. extern List *get_sortgrouplist_exprs(List *sgClauses,
  33. List *targetList);
  34. extern SortGroupClause *get_sortgroupref_clause(Index sortref,
  35. List *clauses);
  36. extern SortGroupClause *get_sortgroupref_clause_noerr(Index sortref,
  37. List *clauses);
  38. extern Oid *extract_grouping_ops(List *groupClause);
  39. extern AttrNumber *extract_grouping_cols(List *groupClause, List *tlist);
  40. extern bool grouping_is_sortable(List *groupClause);
  41. extern bool grouping_is_hashable(List *groupClause);
  42. extern PathTarget *make_pathtarget_from_tlist(List *tlist);
  43. extern List *make_tlist_from_pathtarget(PathTarget *target);
  44. extern PathTarget *copy_pathtarget(PathTarget *src);
  45. extern PathTarget *create_empty_pathtarget(void);
  46. extern void add_column_to_pathtarget(PathTarget *target,
  47. Expr *expr, Index sortgroupref);
  48. extern void add_new_column_to_pathtarget(PathTarget *target, Expr *expr);
  49. extern void add_new_columns_to_pathtarget(PathTarget *target, List *exprs);
  50. extern void apply_pathtarget_labeling_to_tlist(List *tlist, PathTarget *target);
  51. /* Convenience macro to get a PathTarget with valid cost/width fields */
  52. #define create_pathtarget(root, tlist) \
  53. set_pathtarget_cost_width(root, make_pathtarget_from_tlist(tlist))
  54. #endif /* TLIST_H */