libpq PQexec("SELECT * FROM pg_class;") PQsendQuery() pqPutMsgStart('Q') pqPuts("SELECT * FROM pg_class;") pqPutMsgEnd() -> "QSELECT * FROM pg_class;" postgres PostgresMain('Q') exec_simple_query() pg_parse_query("SELECT * FROM pg_class;") raw_parser() scanner_init() parser_init("SELECT", "*", "FROM", "pg_class") -> SelectStmt pg_analyze_and_rewrite(SelectStmt) parse_analyze transformStmt() pg_rewrite_query() QueryRewrite -> Query pg_plan_queries(Query) pg_plan_query() planner() standard_planner() subquery_planner() grouping_planner() query_planner() -> Plan PortalRun(Plan) PortalRunSelect() ExecutorRun() standard_ExecutorRun() ExecutePlan() ExecProcNode(T_SeqScan) ExecSelect() printtup() pq_beginmessage('D') pq_sendint(22) OutputFunctionCall() pq_sendcountedtext() pq_endmessage() -> 247 rows libpq PQexec() PQexecFinish() PQgetResult() parseInput() pqParseInput3('D') getAnotherTuple() pqGetInt() pqGetnchar() pqAddTuple() -> 247 rows