Skip to content

Add Postgres19 support #243

@sibowu-aws

Description

@sibowu-aws
pg_hint_plan.c:605:8: error: unknown type name ‘get_relation_info_hook_type’
  605 | static get_relation_info_hook_type prev_get_relation_info_hook = NULL;
      |        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
pg_hint_plan.c:605:66: warning: initialization of ‘int’ from ‘void *’ makes integer from pointer without a cast [-Wint-conversion]
  605 | static get_relation_info_hook_type prev_get_relation_info_hook = NULL;
      |                                                                  ^~~~
pg_hint_plan.c: In function ‘_PG_init’:
pg_hint_plan.c:813:33: warning: assignment to ‘post_parse_analyze_hook_type’ {aka ‘void (*)(struct ParseState *, struct Query *, const JumbleState *)’} from incompatible pointer type ‘void (*)(ParseState *, Query *, JumbleState *)’ {aka ‘void (*)(struct ParseState *, struct Query *, JumbleState *)’} [-Wincompatible-pointer-types]
  813 |         post_parse_analyze_hook = pg_hint_plan_post_parse_analyze;
      |                                 ^
pg_hint_plan.c:815:22: warning: assignment to ‘planner_hook_type’ {aka ‘struct PlannedStmt * (*)(struct Query *, const char *, int,  struct ParamListInfoData *, struct ExplainState *)’} from incompatible pointer type ‘PlannedStmt * (*)(Query *, const char *, int,  struct ParamListInfoData *)’ {aka ‘struct PlannedStmt * (*)(struct Query *, const char *, int,  struct ParamListInfoData *)’} [-Wincompatible-pointer-types]
  815 |         planner_hook = pg_hint_plan_planner;
      |                      ^
pg_hint_plan.c:826:39: error: ‘get_relation_info_hook’ undeclared (first use in this function); did you mean ‘prev_get_relation_info_hook’?
  826 |         prev_get_relation_info_hook = get_relation_info_hook;
      |                                       ^~~~~~~~~~~~~~~~~~~~~~
      |                                       prev_get_relation_info_hook
pg_hint_plan.c:826:39: note: each undeclared identifier is reported only once for each function it appears in
pg_hint_plan.c: In function ‘get_hints_from_comment’:
pg_hint_plan.c:2048:42: error: ‘standard_conforming_strings’ undeclared (first use in this function)
 2048 |                                          standard_conforming_strings,
      |                                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~
pg_hint_plan.c: In function ‘pg_hint_plan_planner’:
pg_hint_plan.c:3242:35: error: too few arguments to function ‘prev_planner’
 3242 |                         result = (*prev_planner) (parse, query_string,
      |                                  ~^~~~~~~~~~~~~~
pg_hint_plan.c:3245:34: error: too few arguments to function ‘standard_planner’
 3245 |                         result = standard_planner(parse, query_string,
      |                                  ^~~~~~~~~~~~~~~~
In file included from pg_hint_plan.c:35:
postgres/include/server/optimizer/planner.h:58:21: note: declared here
   58 | extern PlannedStmt *standard_planner(Query *parse, const char *query_string,
      |                     ^~~~~~~~~~~~~~~~
pg_hint_plan.c:3303:27: error: too few arguments to function ‘prev_planner’
 3303 |                 result = (*prev_planner) (parse, query_string,
      |                          ~^~~~~~~~~~~~~~
pg_hint_plan.c:3306:26: error: too few arguments to function ‘standard_planner’
 3306 |                 result = standard_planner(parse, query_string,
      |                          ^~~~~~~~~~~~~~~~
postgres/include/server/optimizer/planner.h:58:21: note: declared here
   58 | extern PlannedStmt *standard_planner(Query *parse, const char *query_string,
      |                     ^~~~~~~~~~~~~~~~
pg_hint_plan.c: In function ‘pg_hint_plan_get_relation_info_hook’:
pg_hint_plan.c:5133:17: error: called object ‘prev_get_relation_info_hook’ is not a function or function pointer
 5133 |                 prev_get_relation_info_hook(root, relationObjectId, inhparent, rel);
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~
pg_hint_plan.c:605:36: note: declared here
  605 | static get_relation_info_hook_type prev_get_relation_info_hook = NULL;
      |                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from pg_hint_plan.c:5279:
core.c: In function ‘join_is_legal’:
core.c:622:73: warning: passing argument 4 of ‘create_unique_path’ makes integer from pointer without a cast [-Wint-conversion]
  622 |                                                                     sjinfo) != NULL)
      |                                                                     ^~~~~~
      |                                                                     |
      |                                                                     SpecialJoinInfo * {aka struct SpecialJoinInfo *}In file included from pg_hint_plan.c:32:
postgres/include/server/optimizer/pathnode.h:260:79: note: expected ‘int’ but argument is of type ‘SpecialJoinInfo *’ {aka ‘struct SpecialJoinInfo *’}
  260 |                                                                    int numCols,
      |                                                                    ~~~~^~~~~~~core.c:621:34: error: too few arguments to function ‘create_unique_path’
  621 |                                  create_unique_path(root, rel2, rel2->cheapest_total_path,
      |                                  ^~~~~~~~~~~~~~~~~~
postgres/include/server/optimizer/pathnode.h:257:20: note: declared here
  257 | extern UniquePath *create_unique_path(PlannerInfo *root,
      |                    ^~~~~~~~~~~~~~~~~~
core.c:655:73: warning: passing argument 4 of ‘create_unique_path’ makes integer from pointer without a cast [-Wint-conversion]
  655 |                                                                     sjinfo) != NULL)
      |                                                                     ^~~~~~
      |                                                                     |
      |                                                                     SpecialJoinInfo * {aka struct SpecialJoinInfo *}postgres/include/server/optimizer/pathnode.h:260:79: note: expected ‘int’ but argument is of type ‘SpecialJoinInfo *’ {aka ‘struct SpecialJoinInfo *’}
  260 |                                                                    int numCols,
      |                                                                    ~~~~^~~~~~~core.c:654:34: error: too few arguments to function ‘create_unique_path’
  654 |                                  create_unique_path(root, rel1, rel1->cheapest_total_path,
      |                                  ^~~~~~~~~~~~~~~~~~
postgres/include/server/optimizer/pathnode.h:257:20: note: declared here
  257 | extern UniquePath *create_unique_path(PlannerInfo *root,
      |                    ^~~~~~~~~~~~~~~~~~
In file included from pg_hint_plan.c:5284:
make_join_rel.c: In function ‘populate_joinrel_with_paths’:
make_join_rel.c:349:68: warning: passing argument 4 of ‘create_unique_path’ makes integer from pointer without a cast [-Wint-conversion]
  349 |                                                                    sjinfo) != NULL)
      |                                                                    ^~~~~~
      |                                                                    |
      |                                                                    SpecialJoinInfo * {aka struct SpecialJoinInfo *}
postgres/include/server/optimizer/pathnode.h:260:79: note: expected ‘int’ but argument is of type ‘SpecialJoinInfo *’ {aka ‘struct SpecialJoinInfo *’}
  260 |                                                                    int numCols,
      |                                                                    ~~~~^~~~~~~make_join_rel.c:348:33: error: too few arguments to function ‘create_unique_path’
  348 |                                 create_unique_path(root, rel2, rel2->cheapest_total_path,
      |                                 ^~~~~~~~~~~~~~~~~~
/postgres/include/server/optimizer/pathnode.h:257:20: note: declared here
  257 | extern UniquePath *create_unique_path(PlannerInfo *root,
      |                    ^~~~~~~~~~~~~~~~~~
make: *** [<builtin>: pg_hint_plan.o] Error 1
make: *** Waiting for unfinished jobs....
pg_hint_plan.c:605:8: error: unknown type name 'get_relation_info_hook_type'
  605 | static get_relation_info_hook_type prev_get_relation_info_hook = NULL;
      |        ^
pg_hint_plan.c:813:26: error: incompatible function pointer types assigning to 'post_parse_analyze_hook_type' (aka 'void (*)(struct ParseState *, struct Query *, const struct JumbleState *)') from 'void (ParseState *, Query *, JumbleState *)' (aka 'void (struct ParseState *, struct Query *, struct JumbleState *)') [-Wincompatible-function-pointer-types]
  813 |         post_parse_analyze_hook = pg_hint_plan_post_parse_analyze;
      |                                 ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pg_hint_plan.c:815:15: error: incompatible function pointer types assigning to 'planner_hook_type' (aka 'struct PlannedStmt *(*)(struct Query *, const char *, int, struct ParamListInfoData *, struct ExplainState *)') from 'PlannedStmt *(Query *, const char *, int, ParamListInfo)' (aka 'struct PlannedStmt *(struct Query *, const char *, int, struct ParamListInfoData *)') [-Wincompatible-function-pointer-types]
  815 |         planner_hook = pg_hint_plan_planner;
      |                      ^ ~~~~~~~~~~~~~~~~~~~~
pg_hint_plan.c:826:32: error: use of undeclared identifier 'get_relation_info_hook'; did you mean 'get_relation_info'?
  826 |         prev_get_relation_info_hook = get_relation_info_hook;
      |                                       ^~~~~~~~~~~~~~~~~~~~~~
      |                                       get_relation_info
postgres/include/server/optimizer/plancat.h:20:13: note: 'get_relation_info' declared here
   20 | extern void get_relation_info(PlannerInfo *root, Oid relationObjectId,
      |             ^
pg_hint_plan.c:827:2: error: use of undeclared identifier 'get_relation_info_hook'; did you mean 'prev_get_relation_info_hook'?
  827 |         get_relation_info_hook = pg_hint_plan_get_relation_info_hook;
      |         ^~~~~~~~~~~~~~~~~~~~~~
      |         prev_get_relation_info_hook
pg_hint_plan.c:605:36: note: 'prev_get_relation_info_hook' declared here
  605 | static get_relation_info_hook_type prev_get_relation_info_hook = NULL;
      |                                    ^
pg_hint_plan.c:2048:7: error: use of undeclared identifier 'standard_conforming_strings'
 2048 |                                          standard_conforming_strings,
      |                                          ^
pg_hint_plan.c:3243:38: error: too few arguments to function call, expected 5, have 4
 3242 |                         result = (*prev_planner) (parse, query_string,
      |                                  ~~~~~~~~~~~~~~~
 3243 |                                                                           cursorOptions, boundParams);
      |                                                                                                     ^
pg_hint_plan.c:3246:38: error: too few arguments to function call, expected 5, have 4
 3245 |                         result = standard_planner(parse, query_string,
      |                                  ~~~~~~~~~~~~~~~~
 3246 |                                                                           cursorOptions, boundParams);
      |                                                                                                     ^
/postgres/include/server/optimizer/planner.h:58:21: note: 'standard_planner' declared here
   58 | extern PlannedStmt *standard_planner(Query *parse, const char *query_string,
      |                     ^                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   59 |                                                                          int cursorOptions,
      |                                                                          ~~~~~~~~~~~~~~~~~~
   60 |                                                                          ParamListInfo boundParams,
      |                                                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~
   61 |                                                                          ExplainState *es);
      |                                                                          ~~~~~~~~~~~~~~~~
pg_hint_plan.c:3304:37: error: too few arguments to function call, expected 5, have 4
 3303 |                 result = (*prev_planner) (parse, query_string,
      |                          ~~~~~~~~~~~~~~~
 3304 |                                                                   cursorOptions, boundParams);
      |                                                                                             ^
pg_hint_plan.c:3307:37: error: too few arguments to function call, expected 5, have 4
 3306 |                 result = standard_planner(parse, query_string,
      |                          ~~~~~~~~~~~~~~~~
 3307 |                                                                   cursorOptions, boundParams);
      |                                                                                             ^
/postgres/include/server/optimizer/planner.h:58:21: note: 'standard_planner' declared here
   58 | extern PlannedStmt *standard_planner(Query *parse, const char *query_string,
      |                     ^                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   59 |                                                                          int cursorOptions,
      |                                                                          ~~~~~~~~~~~~~~~~~~
   60 |                                                                          ParamListInfo boundParams,
      |                                                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~
   61 |                                                                          ExplainState *es);
      |                                                                          ~~~~~~~~~~~~~~~~
In file included from pg_hint_plan.c:5279:
./core.c:622:16: error: too few arguments to function call, expected 5, have 4
  621 |                                  create_unique_path(root, rel2, rel2->cheapest_total_path,
      |                                  ~~~~~~~~~~~~~~~~~~
  622 |                                                                         sjinfo) != NULL)
      |                                                                               ^
/postgres/include/server/optimizer/pathnode.h:257:20: note: 'create_unique_path' declared here
  257 | extern UniquePath *create_unique_path(PlannerInfo *root,
      |                    ^                  ~~~~~~~~~~~~~~~~~~
  258 |                                                                           RelOptInfo *rel,
      |                                                                           ~~~~~~~~~~~~~~~~
  259 |                                                                           Path *subpath,
      |                                                                           ~~~~~~~~~~~~~~
  260 |                                                                           int numCols,
      |                                                                           ~~~~~~~~~~~~
  261 |                                                                           double numGroups);
      |                                                                           ~~~~~~~~~~~~~~~~
In file included from pg_hint_plan.c:5279:
./core.c:655:16: error: too few arguments to function call, expected 5, have 4
  654 |                                  create_unique_path(root, rel1, rel1->cheapest_total_path,
      |                                  ~~~~~~~~~~~~~~~~~~
  655 |                                                                         sjinfo) != NULL)
      |                                                                               ^
/postgres/include/server/optimizer/pathnode.h:257:20: note: 'create_unique_path' declared here
  257 | extern UniquePath *create_unique_path(PlannerInfo *root,
      |                    ^                  ~~~~~~~~~~~~~~~~~~
  258 |                                                                           RelOptInfo *rel,
      |                                                                           ~~~~~~~~~~~~~~~~
  259 |                                                                           Path *subpath,
      |                                                                           ~~~~~~~~~~~~~~
  260 |                                                                           int numCols,
      |                                                                           ~~~~~~~~~~~~
  261 |                                                                           double numGroups);
      |                                                                           ~~~~~~~~~~~~~~~~
In file included from pg_hint_plan.c:5284:
./make_join_rel.c:349:18: error: too few arguments to function call, expected 5, have 4
  348 |                                 create_unique_path(root, rel2, rel2->cheapest_total_path,
      |                                 ~~~~~~~~~~~~~~~~~~
  349 |                                                                    sjinfo) != NULL)
      |                                                                          ^
/postgres/include/server/optimizer/pathnode.h:257:20: note: 'create_unique_path' declared here
  257 | extern UniquePath *create_unique_path(PlannerInfo *root,
      |                    ^                  ~~~~~~~~~~~~~~~~~~
  258 |                                                                           RelOptInfo *rel,
      |                                                                           ~~~~~~~~~~~~~~~~
  259 |                                                                           Path *subpath,
      |                                                                           ~~~~~~~~~~~~~~
  260 |                                                                           int numCols,
      |                                                                           ~~~~~~~~~~~~
  261 |                                                                           double numGroups);
      |                                                                           ~~~~~~~~~~~~~~~~

we have massive API breakage due to postrges19 change, do we have a timeline for this?

monitored

get_relation_info_hook — removed entirely (same as HypoPG)

standard_planner — new signature adds ExplainState *es as 5th parameter planner_hook_type — changed to match new standard_planner signature post_parse_analyze_hook_type — JumbleState is now const

create_unique_path — signature changed from (root, rel, path, sjinfo) to (root, rel, path, numCols, numGroups)

standard_conforming_strings — removed/moved

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions