원천:https://git.postgresql.org/cgit/postgresql.git/tree/src/backend/optimizer/plan/planner.c
(gdb) n
3556 if (root->group_pathkeys)
(gdb) s
3558 else if (root->window_pathkeys)
(gdb) print root->group_pathkeys==NULL
No symbol "NULL" in current context.
(gdb) s
3559 root->query_pathkeys = root->window_pathkeys;
(gdb) s
query_planner (root=root@entry=0x55ffb53fdb70, qp_callback=qp_callback@entry=0x55ffb3299ee0 <standard_qp_callback>, qp_extra=qp_extra@entry=0x7ffc5db45260) at ../../Desktop/pg_sources/main/postgres/src/backend/optimizer/plan/planmain.c:219
219 fix_placeholder_input_needed_levels(root);
위 내용을 토대로 추측 root->group_pathkeys == NULL
하고 root->query_pathkeys != NULL
print를 활용하여 표현을 평가할 수 있습니다. 그런 print (root->group_pathkeys==NULL)
다음 1을 반환합니다.
답변1
print root->group_pathkeys
일반적으로 0인지 확인하는 것으로 충분합니다.
NULL
일반적으로 디버거는 선언되지 않았지만 정의되었기 때문에 이에 대해 알지 못합니다(아마도 #define NULL 0
jian이 말했듯이 void로 캐스팅되었을 것입니다.). (이것은 크기가 비싼 컴파일 플래그에 의해 변경될 수 있습니다.)
( 또한 디버거는 유형에 크게 신경 쓰지 않습니다. NULL
)0
위의 if는 ==
정상이어야 합니다 ==
. 그렇지 않으면 매우 흥미로운 내용을 작성해야 합니다.