xfunc.h
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * xfunc.h
  4.  *   prototypes for xfunc.c and predmig.c.
  5.  *
  6.  *
  7.  * Copyright (c) 1994, Regents of the University of California
  8.  *
  9.  * $Id: xfunc.h,v 1.18 1999/05/25 22:43:14 momjian Exp $
  10.  *
  11.  *-------------------------------------------------------------------------
  12.  */
  13. #ifndef XFUNC_H
  14. #define XFUNC_H
  15. #include <utils/rel.h>
  16. #include <nodes/relation.h>
  17. /* command line arg flags */
  18. #define XFUNC_OFF -1 /* do no optimization of expensive preds */
  19. #define XFUNC_NOR 2 /* do no optimization of OR clauses */
  20. #define XFUNC_NOPULL 4 /* never pull restrictions above joins */
  21. #define XFUNC_NOPM 8 /* don't do predicate migration */
  22. #define XFUNC_WAIT 16 /* don't do pullup until predicate
  23.  * migration */
  24. #define XFUNC_PULLALL 32 /* pull all expensive restrictions up,
  25.  * always */
  26. /* constants for local and join predicates */
  27. #define XFUNC_LOCPRD 1
  28. #define XFUNC_JOINPRD 2
  29. #define XFUNC_UNKNOWN 0
  30. extern int XfuncMode; /* defined in tcop/postgres.c */
  31. /* defaults for function attributes used for expensive function calculations */
  32. #define BYTE_PCT 100
  33. #define PERBYTE_CPU 0
  34. #define PERCALL_CPU 0
  35. #define OUTIN_RATIO 100
  36. /* default width assumed for variable length attributes */
  37. #define VARLEN_DEFAULT 128;
  38. /* Macro to get group rank out of group cost and group sel */
  39. #define get_grouprank(a) ((get_groupsel(a) - 1) / get_groupcost(a))
  40. /* Macro to see if a path node is actually a Join */
  41. #define is_join(pathnode) (length(get_relids(get_parent(pathnode))) > 1 ? 1 : 0)
  42. /* function prototypes from planner/path/xfunc.c */
  43. extern void xfunc_trypullup(RelOptInfo *rel);
  44. extern int xfunc_shouldpull(Path *childpath, JoinPath *parentpath,
  45.  int whichchild, RestrictInfo *maxcinfopt);
  46. extern RestrictInfo *xfunc_pullup(Path *childpath, JoinPath *parentpath, RestrictInfo *cinfo,
  47.  int whichchild, int clausetype);
  48. extern Cost xfunc_rank(Expr *clause);
  49. extern Cost xfunc_expense(Query *queryInfo, Expr *clause);
  50. extern Cost xfunc_join_expense(JoinPath *path, int whichchild);
  51. extern Cost xfunc_local_expense(Expr *clause);
  52. extern Cost xfunc_func_expense(Expr *node, List *args);
  53. extern int xfunc_width(Expr *clause);
  54. /* static, moved to xfunc.c */
  55. /* extern int xfunc_card_unreferenced(Expr *clause, Relids referenced); */
  56. extern int xfunc_card_product(Relids relids);
  57. extern List *xfunc_find_references(List *clause);
  58. extern List *xfunc_primary_join(JoinPath *pathnode);
  59. extern Cost xfunc_get_path_cost(Path *pathnode);
  60. extern Cost xfunc_total_path_cost(JoinPath *pathnode);
  61. extern Cost xfunc_expense_per_tuple(JoinPath *joinnode, int whichchild);
  62. extern void xfunc_fixvars(Expr *clause, RelOptInfo *rel, int varno);
  63. extern int xfunc_cinfo_compare(void *arg1, void *arg2);
  64. extern int xfunc_clause_compare(void *arg1, void *arg2);
  65. extern void xfunc_disjunct_sort(List *clause_list);
  66. extern int xfunc_disjunct_compare(void *arg1, void *arg2);
  67. extern int xfunc_func_width(RegProcedure funcid, List *args);
  68. extern int xfunc_tuple_width(Relation rd);
  69. extern int xfunc_num_join_clauses(JoinPath *path);
  70. extern List *xfunc_LispRemove(List *foo, List *bar);
  71. extern bool xfunc_copyrel(RelOptInfo *from, RelOptInfo **to);
  72. /*
  73.  * function prototypes for path/predmig.c
  74.  */
  75. extern bool xfunc_do_predmig(Path root);
  76. #endif  /* XFUNC_H */