pg_query 4.2.3 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (486) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/README.md +6 -8
  4. data/Rakefile +3 -3
  5. data/ext/pg_query/extconf.rb +1 -3
  6. data/ext/pg_query/include/access/amapi.h +3 -1
  7. data/ext/pg_query/include/access/attmap.h +5 -3
  8. data/ext/pg_query/include/access/attnum.h +1 -1
  9. data/ext/pg_query/include/access/clog.h +1 -1
  10. data/ext/pg_query/include/access/commit_ts.h +1 -1
  11. data/ext/pg_query/include/access/detoast.h +1 -1
  12. data/ext/pg_query/include/access/genam.h +7 -5
  13. data/ext/pg_query/include/access/gin.h +16 -3
  14. data/ext/pg_query/include/access/htup.h +1 -1
  15. data/ext/pg_query/include/access/htup_details.h +6 -2
  16. data/ext/pg_query/include/access/itup.h +61 -58
  17. data/ext/pg_query/include/access/parallel.h +2 -2
  18. data/ext/pg_query/include/access/printtup.h +1 -1
  19. data/ext/pg_query/include/access/relation.h +1 -1
  20. data/ext/pg_query/include/access/relscan.h +1 -1
  21. data/ext/pg_query/include/access/rmgrlist.h +2 -2
  22. data/ext/pg_query/include/access/sdir.h +12 -3
  23. data/ext/pg_query/include/access/skey.h +1 -1
  24. data/ext/pg_query/include/access/stratnum.h +1 -1
  25. data/ext/pg_query/include/access/sysattr.h +1 -1
  26. data/ext/pg_query/include/access/table.h +1 -1
  27. data/ext/pg_query/include/access/tableam.h +68 -45
  28. data/ext/pg_query/include/access/toast_compression.h +1 -1
  29. data/ext/pg_query/include/access/transam.h +1 -1
  30. data/ext/pg_query/include/access/tsmapi.h +82 -0
  31. data/ext/pg_query/include/access/tupconvert.h +5 -2
  32. data/ext/pg_query/include/access/tupdesc.h +2 -2
  33. data/ext/pg_query/include/access/tupmacs.h +58 -98
  34. data/ext/pg_query/include/access/twophase.h +2 -2
  35. data/ext/pg_query/include/access/xact.h +25 -18
  36. data/ext/pg_query/include/access/xlog.h +15 -16
  37. data/ext/pg_query/include/access/xlog_internal.h +100 -62
  38. data/ext/pg_query/include/access/xlogbackup.h +41 -0
  39. data/ext/pg_query/include/access/xlogdefs.h +6 -25
  40. data/ext/pg_query/include/access/xlogprefetcher.h +1 -1
  41. data/ext/pg_query/include/access/xlogreader.h +7 -6
  42. data/ext/pg_query/include/access/xlogrecord.h +17 -5
  43. data/ext/pg_query/include/access/xlogrecovery.h +4 -3
  44. data/ext/pg_query/include/archive/archive_module.h +59 -0
  45. data/ext/pg_query/include/c.h +144 -156
  46. data/ext/pg_query/include/catalog/catalog.h +4 -3
  47. data/ext/pg_query/include/catalog/catversion.h +6 -2
  48. data/ext/pg_query/include/catalog/dependency.h +5 -4
  49. data/ext/pg_query/include/catalog/genbki.h +7 -6
  50. data/ext/pg_query/include/catalog/index.h +4 -4
  51. data/ext/pg_query/include/catalog/indexing.h +1 -1
  52. data/ext/pg_query/include/catalog/namespace.h +2 -2
  53. data/ext/pg_query/include/catalog/objectaccess.h +10 -8
  54. data/ext/pg_query/include/catalog/objectaddress.h +3 -3
  55. data/ext/pg_query/include/catalog/pg_aggregate.h +1 -1
  56. data/ext/pg_query/include/catalog/pg_aggregate_d.h +1 -1
  57. data/ext/pg_query/include/catalog/pg_am.h +1 -1
  58. data/ext/pg_query/include/catalog/pg_am_d.h +1 -1
  59. data/ext/pg_query/include/catalog/pg_attribute.h +19 -17
  60. data/ext/pg_query/include/catalog/pg_attribute_d.h +19 -19
  61. data/ext/pg_query/include/catalog/pg_authid.h +1 -1
  62. data/ext/pg_query/include/catalog/pg_authid_d.h +3 -1
  63. data/ext/pg_query/include/catalog/pg_class.h +1 -1
  64. data/ext/pg_query/include/catalog/pg_class_d.h +1 -1
  65. data/ext/pg_query/include/catalog/pg_collation.h +3 -1
  66. data/ext/pg_query/include/catalog/pg_collation_d.h +4 -3
  67. data/ext/pg_query/include/catalog/pg_constraint.h +2 -2
  68. data/ext/pg_query/include/catalog/pg_constraint_d.h +1 -1
  69. data/ext/pg_query/include/catalog/pg_control.h +9 -1
  70. data/ext/pg_query/include/catalog/pg_conversion.h +2 -2
  71. data/ext/pg_query/include/catalog/pg_conversion_d.h +1 -1
  72. data/ext/pg_query/include/catalog/pg_database.h +124 -0
  73. data/ext/pg_query/include/catalog/pg_database_d.h +52 -0
  74. data/ext/pg_query/include/catalog/pg_depend.h +1 -1
  75. data/ext/pg_query/include/catalog/pg_depend_d.h +1 -1
  76. data/ext/pg_query/include/catalog/pg_event_trigger.h +1 -1
  77. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +1 -1
  78. data/ext/pg_query/include/catalog/pg_index.h +1 -1
  79. data/ext/pg_query/include/catalog/pg_index_d.h +1 -1
  80. data/ext/pg_query/include/catalog/pg_language.h +1 -1
  81. data/ext/pg_query/include/catalog/pg_language_d.h +1 -1
  82. data/ext/pg_query/include/catalog/pg_namespace.h +1 -1
  83. data/ext/pg_query/include/catalog/pg_namespace_d.h +1 -1
  84. data/ext/pg_query/include/catalog/pg_opclass.h +1 -1
  85. data/ext/pg_query/include/catalog/pg_opclass_d.h +1 -1
  86. data/ext/pg_query/include/catalog/pg_operator.h +1 -1
  87. data/ext/pg_query/include/catalog/pg_operator_d.h +1 -1
  88. data/ext/pg_query/include/catalog/pg_opfamily.h +3 -2
  89. data/ext/pg_query/include/catalog/pg_opfamily_d.h +4 -2
  90. data/ext/pg_query/include/catalog/pg_partitioned_table.h +1 -1
  91. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +1 -1
  92. data/ext/pg_query/include/catalog/pg_proc.h +1 -1
  93. data/ext/pg_query/include/catalog/pg_proc_d.h +1 -1
  94. data/ext/pg_query/include/catalog/pg_publication.h +2 -5
  95. data/ext/pg_query/include/catalog/pg_publication_d.h +1 -1
  96. data/ext/pg_query/include/catalog/pg_replication_origin.h +1 -1
  97. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +1 -1
  98. data/ext/pg_query/include/catalog/pg_statistic.h +1 -1
  99. data/ext/pg_query/include/catalog/pg_statistic_d.h +1 -1
  100. data/ext/pg_query/include/catalog/pg_statistic_ext.h +1 -1
  101. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +1 -1
  102. data/ext/pg_query/include/catalog/pg_transform.h +1 -1
  103. data/ext/pg_query/include/catalog/pg_transform_d.h +1 -1
  104. data/ext/pg_query/include/catalog/pg_trigger.h +1 -1
  105. data/ext/pg_query/include/catalog/pg_trigger_d.h +1 -1
  106. data/ext/pg_query/include/catalog/pg_ts_config.h +1 -1
  107. data/ext/pg_query/include/catalog/pg_ts_config_d.h +1 -1
  108. data/ext/pg_query/include/catalog/pg_ts_dict.h +1 -1
  109. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +1 -1
  110. data/ext/pg_query/include/catalog/pg_ts_parser.h +1 -1
  111. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +1 -1
  112. data/ext/pg_query/include/catalog/pg_ts_template.h +1 -1
  113. data/ext/pg_query/include/catalog/pg_ts_template_d.h +1 -1
  114. data/ext/pg_query/include/catalog/pg_type.h +1 -1
  115. data/ext/pg_query/include/catalog/pg_type_d.h +1 -1
  116. data/ext/pg_query/include/catalog/storage.h +6 -6
  117. data/ext/pg_query/include/commands/async.h +1 -1
  118. data/ext/pg_query/include/commands/dbcommands.h +2 -1
  119. data/ext/pg_query/include/commands/defrem.h +2 -1
  120. data/ext/pg_query/include/commands/event_trigger.h +1 -1
  121. data/ext/pg_query/include/commands/explain.h +3 -1
  122. data/ext/pg_query/include/commands/prepare.h +1 -1
  123. data/ext/pg_query/include/commands/tablespace.h +4 -4
  124. data/ext/pg_query/include/commands/trigger.h +15 -14
  125. data/ext/pg_query/include/commands/user.h +9 -3
  126. data/ext/pg_query/include/commands/vacuum.h +60 -14
  127. data/ext/pg_query/include/common/cryptohash.h +39 -0
  128. data/ext/pg_query/include/common/file_perm.h +1 -1
  129. data/ext/pg_query/include/common/hashfn.h +1 -1
  130. data/ext/pg_query/include/common/int.h +437 -0
  131. data/ext/pg_query/include/common/ip.h +4 -2
  132. data/ext/pg_query/include/common/keywords.h +1 -1
  133. data/ext/pg_query/include/common/kwlookup.h +2 -2
  134. data/ext/pg_query/include/common/pg_prng.h +3 -2
  135. data/ext/pg_query/include/common/relpath.h +20 -13
  136. data/ext/pg_query/include/common/scram-common.h +70 -0
  137. data/ext/pg_query/include/common/sha2.h +32 -0
  138. data/ext/pg_query/include/common/string.h +5 -3
  139. data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +10 -10
  140. data/ext/pg_query/include/common/{unicode_combining_table.h → unicode_nonspacing_table.h} +31 -13
  141. data/ext/pg_query/include/copyfuncs.funcs.c +5013 -0
  142. data/ext/pg_query/include/copyfuncs.switch.c +938 -0
  143. data/ext/pg_query/include/datatype/timestamp.h +11 -4
  144. data/ext/pg_query/include/equalfuncs.funcs.c +3097 -0
  145. data/ext/pg_query/include/equalfuncs.switch.c +785 -0
  146. data/ext/pg_query/include/executor/execdesc.h +1 -1
  147. data/ext/pg_query/include/executor/executor.h +34 -17
  148. data/ext/pg_query/include/executor/functions.h +1 -1
  149. data/ext/pg_query/include/executor/instrument.h +1 -1
  150. data/ext/pg_query/include/executor/spi.h +2 -2
  151. data/ext/pg_query/include/executor/tablefunc.h +1 -1
  152. data/ext/pg_query/include/executor/tuptable.h +18 -11
  153. data/ext/pg_query/include/fmgr.h +21 -2
  154. data/ext/pg_query/include/foreign/fdwapi.h +294 -0
  155. data/ext/pg_query/include/funcapi.h +12 -12
  156. data/ext/pg_query/include/gram.h +1127 -0
  157. data/ext/pg_query/include/{parser/gramparse.h → gramparse.h} +4 -4
  158. data/ext/pg_query/include/jit/jit.h +2 -2
  159. data/ext/pg_query/include/kwlist_d.h +534 -510
  160. data/ext/pg_query/include/lib/dshash.h +4 -1
  161. data/ext/pg_query/include/lib/ilist.h +435 -22
  162. data/ext/pg_query/include/lib/pairingheap.h +1 -1
  163. data/ext/pg_query/include/lib/simplehash.h +9 -9
  164. data/ext/pg_query/include/lib/sort_template.h +1 -1
  165. data/ext/pg_query/include/lib/stringinfo.h +3 -3
  166. data/ext/pg_query/include/libpq/auth.h +8 -2
  167. data/ext/pg_query/include/libpq/crypt.h +1 -1
  168. data/ext/pg_query/include/libpq/hba.h +24 -17
  169. data/ext/pg_query/include/libpq/libpq-be.h +36 -25
  170. data/ext/pg_query/include/libpq/libpq.h +1 -1
  171. data/ext/pg_query/include/libpq/pqcomm.h +10 -41
  172. data/ext/pg_query/include/libpq/pqformat.h +2 -2
  173. data/ext/pg_query/include/libpq/pqsignal.h +22 -10
  174. data/ext/pg_query/include/libpq/sasl.h +136 -0
  175. data/ext/pg_query/include/libpq/scram.h +37 -0
  176. data/ext/pg_query/include/mb/pg_wchar.h +35 -18
  177. data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
  178. data/ext/pg_query/include/miscadmin.h +26 -14
  179. data/ext/pg_query/include/nodes/bitmapset.h +11 -7
  180. data/ext/pg_query/include/nodes/execnodes.h +83 -30
  181. data/ext/pg_query/include/nodes/extensible.h +5 -3
  182. data/ext/pg_query/include/nodes/lockoptions.h +1 -1
  183. data/ext/pg_query/include/nodes/makefuncs.h +14 -2
  184. data/ext/pg_query/include/nodes/memnodes.h +7 -4
  185. data/ext/pg_query/include/nodes/miscnodes.h +56 -0
  186. data/ext/pg_query/include/nodes/nodeFuncs.h +89 -29
  187. data/ext/pg_query/include/nodes/nodes.h +95 -510
  188. data/ext/pg_query/include/nodes/nodetags.h +471 -0
  189. data/ext/pg_query/include/nodes/params.h +3 -3
  190. data/ext/pg_query/include/nodes/parsenodes.h +377 -139
  191. data/ext/pg_query/include/nodes/pathnodes.h +1090 -440
  192. data/ext/pg_query/include/nodes/pg_list.h +30 -7
  193. data/ext/pg_query/include/nodes/plannodes.h +367 -124
  194. data/ext/pg_query/include/nodes/primnodes.h +670 -222
  195. data/ext/pg_query/include/nodes/print.h +1 -1
  196. data/ext/pg_query/include/{utils → nodes}/queryjumble.h +5 -7
  197. data/ext/pg_query/include/nodes/replnodes.h +111 -0
  198. data/ext/pg_query/include/nodes/supportnodes.h +346 -0
  199. data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
  200. data/ext/pg_query/include/nodes/value.h +12 -2
  201. data/ext/pg_query/include/optimizer/cost.h +6 -4
  202. data/ext/pg_query/include/optimizer/geqo.h +1 -1
  203. data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
  204. data/ext/pg_query/include/optimizer/optimizer.h +8 -8
  205. data/ext/pg_query/include/optimizer/paths.h +16 -7
  206. data/ext/pg_query/include/optimizer/planmain.h +3 -6
  207. data/ext/pg_query/include/parser/analyze.h +4 -3
  208. data/ext/pg_query/include/parser/kwlist.h +12 -1
  209. data/ext/pg_query/include/parser/parse_agg.h +4 -2
  210. data/ext/pg_query/include/parser/parse_coerce.h +3 -1
  211. data/ext/pg_query/include/parser/parse_expr.h +1 -1
  212. data/ext/pg_query/include/parser/parse_func.h +1 -1
  213. data/ext/pg_query/include/parser/parse_node.h +22 -4
  214. data/ext/pg_query/include/parser/parse_oper.h +3 -3
  215. data/ext/pg_query/include/parser/parse_relation.h +8 -3
  216. data/ext/pg_query/include/parser/parse_type.h +4 -3
  217. data/ext/pg_query/include/parser/parser.h +1 -1
  218. data/ext/pg_query/include/parser/parsetree.h +1 -1
  219. data/ext/pg_query/include/parser/scanner.h +2 -2
  220. data/ext/pg_query/include/parser/scansup.h +1 -1
  221. data/ext/pg_query/include/partitioning/partdefs.h +1 -1
  222. data/ext/pg_query/include/pg_config.h +21 -216
  223. data/ext/pg_query/include/pg_config_manual.h +8 -46
  224. data/ext/pg_query/include/pg_getopt.h +1 -1
  225. data/ext/pg_query/include/pg_query.h +27 -3
  226. data/ext/pg_query/include/pg_query_enum_defs.c +311 -149
  227. data/ext/pg_query/include/pg_query_fingerprint_conds.c +545 -489
  228. data/ext/pg_query/include/pg_query_fingerprint_defs.c +5092 -4432
  229. data/ext/pg_query/include/pg_query_outfuncs_conds.c +385 -343
  230. data/ext/pg_query/include/pg_query_outfuncs_defs.c +1294 -1161
  231. data/ext/pg_query/include/pg_query_readfuncs_conds.c +137 -123
  232. data/ext/pg_query/include/pg_query_readfuncs_defs.c +1657 -1496
  233. data/ext/pg_query/include/pg_trace.h +1 -1
  234. data/ext/pg_query/include/pgstat.h +172 -93
  235. data/ext/pg_query/include/pgtime.h +3 -3
  236. data/ext/pg_query/include/pl_gram.h +64 -62
  237. data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
  238. data/ext/pg_query/include/pl_reserved_kwlist_d.h +1 -1
  239. data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -1
  240. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +48 -46
  241. data/ext/pg_query/include/plpgsql.h +17 -22
  242. data/ext/pg_query/include/port/atomics/arch-arm.h +3 -3
  243. data/ext/pg_query/include/port/atomics/arch-ppc.h +21 -21
  244. data/ext/pg_query/include/port/atomics/arch-x86.h +2 -2
  245. data/ext/pg_query/include/port/atomics/fallback.h +3 -3
  246. data/ext/pg_query/include/port/atomics/generic-gcc.h +1 -1
  247. data/ext/pg_query/include/port/atomics/generic.h +1 -1
  248. data/ext/pg_query/include/port/atomics.h +2 -7
  249. data/ext/pg_query/include/port/pg_bitutils.h +62 -25
  250. data/ext/pg_query/include/port/pg_bswap.h +1 -1
  251. data/ext/pg_query/include/port/pg_crc32c.h +1 -1
  252. data/ext/pg_query/include/port/simd.h +375 -0
  253. data/ext/pg_query/include/port.h +42 -75
  254. data/ext/pg_query/include/portability/instr_time.h +81 -140
  255. data/ext/pg_query/include/postgres.h +205 -434
  256. data/ext/pg_query/include/postgres_ext.h +0 -1
  257. data/ext/pg_query/include/postmaster/autovacuum.h +1 -4
  258. data/ext/pg_query/include/postmaster/auxprocess.h +1 -1
  259. data/ext/pg_query/include/postmaster/bgworker.h +2 -2
  260. data/ext/pg_query/include/postmaster/bgworker_internals.h +1 -1
  261. data/ext/pg_query/include/postmaster/bgwriter.h +2 -2
  262. data/ext/pg_query/include/postmaster/fork_process.h +1 -1
  263. data/ext/pg_query/include/postmaster/interrupt.h +1 -1
  264. data/ext/pg_query/include/postmaster/pgarch.h +1 -38
  265. data/ext/pg_query/include/postmaster/postmaster.h +5 -2
  266. data/ext/pg_query/include/postmaster/startup.h +3 -1
  267. data/ext/pg_query/include/postmaster/syslogger.h +2 -2
  268. data/ext/pg_query/include/postmaster/walwriter.h +3 -1
  269. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +6186 -5585
  270. data/ext/pg_query/include/protobuf/pg_query.pb.h +112443 -91222
  271. data/ext/pg_query/include/regex/regex.h +9 -6
  272. data/ext/pg_query/include/replication/logicallauncher.h +6 -1
  273. data/ext/pg_query/include/replication/logicalproto.h +30 -10
  274. data/ext/pg_query/include/replication/logicalworker.h +14 -1
  275. data/ext/pg_query/include/replication/origin.h +4 -4
  276. data/ext/pg_query/include/replication/reorderbuffer.h +113 -45
  277. data/ext/pg_query/include/replication/slot.h +25 -6
  278. data/ext/pg_query/include/replication/syncrep.h +2 -8
  279. data/ext/pg_query/include/replication/walreceiver.h +15 -9
  280. data/ext/pg_query/include/replication/walsender.h +13 -13
  281. data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
  282. data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -4
  283. data/ext/pg_query/include/rewrite/rewriteManip.h +11 -2
  284. data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
  285. data/ext/pg_query/include/src_backend_nodes_copyfuncs.funcs.c +5321 -0
  286. data/ext/pg_query/include/src_backend_nodes_equalfuncs.funcs.c +3354 -0
  287. data/ext/pg_query/include/storage/backendid.h +1 -1
  288. data/ext/pg_query/include/storage/block.h +24 -31
  289. data/ext/pg_query/include/storage/buf.h +1 -1
  290. data/ext/pg_query/include/storage/bufmgr.h +183 -87
  291. data/ext/pg_query/include/storage/bufpage.h +146 -93
  292. data/ext/pg_query/include/storage/condition_variable.h +2 -2
  293. data/ext/pg_query/include/storage/dsm.h +3 -6
  294. data/ext/pg_query/include/storage/dsm_impl.h +4 -1
  295. data/ext/pg_query/include/storage/fd.h +24 -20
  296. data/ext/pg_query/include/storage/fileset.h +1 -1
  297. data/ext/pg_query/include/storage/ipc.h +1 -1
  298. data/ext/pg_query/include/storage/item.h +1 -1
  299. data/ext/pg_query/include/storage/itemid.h +1 -1
  300. data/ext/pg_query/include/storage/itemptr.h +94 -57
  301. data/ext/pg_query/include/storage/large_object.h +1 -1
  302. data/ext/pg_query/include/storage/latch.h +9 -1
  303. data/ext/pg_query/include/storage/lmgr.h +6 -1
  304. data/ext/pg_query/include/storage/lock.h +21 -13
  305. data/ext/pg_query/include/storage/lockdefs.h +3 -3
  306. data/ext/pg_query/include/storage/lwlock.h +16 -2
  307. data/ext/pg_query/include/storage/off.h +1 -1
  308. data/ext/pg_query/include/storage/pg_sema.h +1 -1
  309. data/ext/pg_query/include/storage/pg_shmem.h +1 -1
  310. data/ext/pg_query/include/storage/pmsignal.h +1 -1
  311. data/ext/pg_query/include/storage/predicate.h +2 -2
  312. data/ext/pg_query/include/storage/proc.h +22 -17
  313. data/ext/pg_query/include/storage/procarray.h +3 -2
  314. data/ext/pg_query/include/storage/proclist_types.h +1 -1
  315. data/ext/pg_query/include/storage/procsignal.h +3 -1
  316. data/ext/pg_query/include/storage/relfilelocator.h +99 -0
  317. data/ext/pg_query/include/storage/s_lock.h +66 -309
  318. data/ext/pg_query/include/storage/sharedfileset.h +1 -1
  319. data/ext/pg_query/include/storage/shm_mq.h +1 -1
  320. data/ext/pg_query/include/storage/shm_toc.h +1 -1
  321. data/ext/pg_query/include/storage/shmem.h +1 -23
  322. data/ext/pg_query/include/storage/sinval.h +3 -3
  323. data/ext/pg_query/include/storage/sinvaladt.h +4 -2
  324. data/ext/pg_query/include/storage/smgr.h +12 -10
  325. data/ext/pg_query/include/storage/spin.h +1 -1
  326. data/ext/pg_query/include/storage/standby.h +9 -8
  327. data/ext/pg_query/include/storage/standbydefs.h +1 -1
  328. data/ext/pg_query/include/storage/sync.h +3 -3
  329. data/ext/pg_query/include/tcop/cmdtag.h +7 -2
  330. data/ext/pg_query/include/tcop/cmdtaglist.h +1 -1
  331. data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
  332. data/ext/pg_query/include/tcop/dest.h +1 -3
  333. data/ext/pg_query/include/tcop/fastpath.h +1 -1
  334. data/ext/pg_query/include/tcop/pquery.h +1 -1
  335. data/ext/pg_query/include/tcop/tcopprot.h +1 -4
  336. data/ext/pg_query/include/tcop/utility.h +1 -1
  337. data/ext/pg_query/include/tsearch/ts_cache.h +2 -4
  338. data/ext/pg_query/include/utils/acl.h +26 -81
  339. data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
  340. data/ext/pg_query/include/utils/array.h +19 -1
  341. data/ext/pg_query/include/utils/backend_progress.h +2 -1
  342. data/ext/pg_query/include/utils/backend_status.h +24 -3
  343. data/ext/pg_query/include/utils/builtins.h +14 -5
  344. data/ext/pg_query/include/utils/bytea.h +1 -1
  345. data/ext/pg_query/include/utils/catcache.h +1 -1
  346. data/ext/pg_query/include/utils/date.h +37 -9
  347. data/ext/pg_query/include/utils/datetime.h +41 -21
  348. data/ext/pg_query/include/utils/datum.h +1 -1
  349. data/ext/pg_query/include/utils/dsa.h +5 -1
  350. data/ext/pg_query/include/utils/elog.h +101 -26
  351. data/ext/pg_query/include/utils/expandeddatum.h +14 -3
  352. data/ext/pg_query/include/utils/expandedrecord.h +14 -4
  353. data/ext/pg_query/include/utils/float.h +7 -6
  354. data/ext/pg_query/include/utils/fmgroids.h +54 -1
  355. data/ext/pg_query/include/utils/fmgrprotos.h +45 -3
  356. data/ext/pg_query/include/utils/fmgrtab.h +1 -1
  357. data/ext/pg_query/include/utils/guc.h +55 -82
  358. data/ext/pg_query/include/utils/guc_hooks.h +163 -0
  359. data/ext/pg_query/include/utils/guc_tables.h +49 -3
  360. data/ext/pg_query/include/utils/hsearch.h +1 -1
  361. data/ext/pg_query/include/utils/inval.h +3 -3
  362. data/ext/pg_query/include/utils/logtape.h +77 -0
  363. data/ext/pg_query/include/utils/lsyscache.h +5 -1
  364. data/ext/pg_query/include/utils/memdebug.h +1 -1
  365. data/ext/pg_query/include/utils/memutils.h +5 -49
  366. data/ext/pg_query/include/utils/memutils_internal.h +136 -0
  367. data/ext/pg_query/include/utils/memutils_memorychunk.h +237 -0
  368. data/ext/pg_query/include/utils/numeric.h +20 -5
  369. data/ext/pg_query/include/utils/palloc.h +8 -1
  370. data/ext/pg_query/include/utils/partcache.h +3 -2
  371. data/ext/pg_query/include/utils/pg_locale.h +22 -14
  372. data/ext/pg_query/include/utils/pgstat_internal.h +37 -7
  373. data/ext/pg_query/include/utils/pidfile.h +1 -1
  374. data/ext/pg_query/include/utils/plancache.h +1 -1
  375. data/ext/pg_query/include/utils/portal.h +1 -1
  376. data/ext/pg_query/include/utils/probes.h +6 -6
  377. data/ext/pg_query/include/utils/ps_status.h +23 -1
  378. data/ext/pg_query/include/utils/queryenvironment.h +1 -1
  379. data/ext/pg_query/include/utils/regproc.h +3 -3
  380. data/ext/pg_query/include/utils/rel.h +60 -43
  381. data/ext/pg_query/include/utils/relcache.h +13 -8
  382. data/ext/pg_query/include/utils/reltrigger.h +1 -1
  383. data/ext/pg_query/include/utils/resowner.h +1 -1
  384. data/ext/pg_query/include/utils/ruleutils.h +6 -1
  385. data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
  386. data/ext/pg_query/include/utils/snapmgr.h +4 -2
  387. data/ext/pg_query/include/utils/snapshot.h +1 -1
  388. data/ext/pg_query/include/utils/sortsupport.h +2 -2
  389. data/ext/pg_query/include/utils/syscache.h +4 -1
  390. data/ext/pg_query/include/utils/timeout.h +1 -1
  391. data/ext/pg_query/include/utils/timestamp.h +41 -11
  392. data/ext/pg_query/include/utils/tuplesort.h +189 -35
  393. data/ext/pg_query/include/utils/tuplestore.h +1 -1
  394. data/ext/pg_query/include/utils/typcache.h +1 -1
  395. data/ext/pg_query/include/utils/varlena.h +13 -1
  396. data/ext/pg_query/include/utils/wait_event.h +9 -4
  397. data/ext/pg_query/include/utils/xml.h +15 -5
  398. data/ext/pg_query/include/varatt.h +358 -0
  399. data/ext/pg_query/pg_query.c +1 -1
  400. data/ext/pg_query/pg_query.pb-c.c +19755 -17757
  401. data/ext/pg_query/pg_query_fingerprint.c +8 -3
  402. data/ext/pg_query/pg_query_fingerprint.h +1 -1
  403. data/ext/pg_query/pg_query_internal.h +1 -1
  404. data/ext/pg_query/pg_query_json_plpgsql.c +1 -0
  405. data/ext/pg_query/pg_query_normalize.c +1 -1
  406. data/ext/pg_query/pg_query_outfuncs_protobuf.c +2 -2
  407. data/ext/pg_query/pg_query_parse.c +46 -4
  408. data/ext/pg_query/pg_query_parse_plpgsql.c +1 -1
  409. data/ext/pg_query/pg_query_scan.c +1 -1
  410. data/ext/pg_query/pg_query_split.c +2 -2
  411. data/ext/pg_query/postgres_deparse.c +503 -105
  412. data/ext/pg_query/src_backend_catalog_namespace.c +7 -2
  413. data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -1
  414. data/ext/pg_query/src_backend_commands_define.c +1 -1
  415. data/ext/pg_query/src_backend_nodes_bitmapset.c +11 -70
  416. data/ext/pg_query/src_backend_nodes_copyfuncs.c +96 -6202
  417. data/ext/pg_query/src_backend_nodes_equalfuncs.c +95 -4068
  418. data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
  419. data/ext/pg_query/src_backend_nodes_list.c +14 -2
  420. data/ext/pg_query/src_backend_nodes_makefuncs.c +95 -1
  421. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +283 -132
  422. data/ext/pg_query/src_backend_nodes_value.c +1 -1
  423. data/ext/pg_query/src_backend_parser_gram.c +33208 -31806
  424. data/ext/pg_query/src_backend_parser_parser.c +28 -2
  425. data/ext/pg_query/src_backend_parser_scan.c +4318 -3329
  426. data/ext/pg_query/src_backend_parser_scansup.c +1 -1
  427. data/ext/pg_query/src_backend_postmaster_postmaster.c +129 -110
  428. data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
  429. data/ext/pg_query/src_backend_tcop_postgres.c +66 -87
  430. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +1 -1
  431. data/ext/pg_query/src_backend_utils_adt_datum.c +5 -7
  432. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  433. data/ext/pg_query/src_backend_utils_adt_format_type.c +1 -1
  434. data/ext/pg_query/src_backend_utils_adt_numutils.c +489 -0
  435. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +79 -5
  436. data/ext/pg_query/src_backend_utils_error_assert.c +4 -7
  437. data/ext/pg_query/src_backend_utils_error_elog.c +354 -97
  438. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +33 -1
  439. data/ext/pg_query/src_backend_utils_init_globals.c +5 -2
  440. data/ext/pg_query/src_backend_utils_mb_mbutils.c +13 -4
  441. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +494 -0
  442. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +163 -0
  443. data/ext/pg_query/src_backend_utils_mmgr_aset.c +449 -312
  444. data/ext/pg_query/src_backend_utils_mmgr_generation.c +1039 -0
  445. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +398 -49
  446. data/ext/pg_query/src_backend_utils_mmgr_slab.c +1021 -0
  447. data/ext/pg_query/src_common_encnames.c +4 -1
  448. data/ext/pg_query/src_common_hashfn.c +1 -1
  449. data/ext/pg_query/src_common_keywords.c +1 -1
  450. data/ext/pg_query/src_common_kwlist_d.h +534 -510
  451. data/ext/pg_query/src_common_kwlookup.c +1 -1
  452. data/ext/pg_query/src_common_psprintf.c +1 -1
  453. data/ext/pg_query/src_common_stringinfo.c +4 -4
  454. data/ext/pg_query/src_common_wchar.c +9 -8
  455. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +1 -1
  456. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -1
  457. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +661 -694
  458. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  459. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +1 -1
  460. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +1 -1
  461. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +48 -46
  462. data/ext/pg_query/src_port_pg_bitutils.c +1 -1
  463. data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
  464. data/ext/pg_query/src_port_snprintf.c +3 -7
  465. data/ext/pg_query/src_port_strerror.c +1 -1
  466. data/ext/pg_query/src_port_strnlen.c +1 -1
  467. data/lib/pg_query/pg_query_pb.rb +166 -3191
  468. data/lib/pg_query/treewalker.rb +7 -2
  469. data/lib/pg_query/version.rb +1 -1
  470. metadata +43 -24
  471. data/ext/pg_query/include/catalog/pg_parameter_acl.h +0 -60
  472. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +0 -34
  473. data/ext/pg_query/include/commands/variable.h +0 -38
  474. data/ext/pg_query/include/getaddrinfo.h +0 -162
  475. data/ext/pg_query/include/parser/gram.h +0 -1101
  476. data/ext/pg_query/include/storage/relfilenode.h +0 -99
  477. data/ext/pg_query/include/utils/dynahash.h +0 -20
  478. data/ext/pg_query/include/utils/pg_lsn.h +0 -29
  479. data/ext/pg_query/include/utils/rls.h +0 -50
  480. data/ext/pg_query/include/utils/tzparser.h +0 -39
  481. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -371
  482. data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1116
  483. data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1993
  484. data/ext/pg_query/src_common_pg_prng.c +0 -152
  485. data/ext/pg_query/src_common_string.c +0 -92
  486. data/ext/pg_query/src_port_pgsleep.c +0 -69
@@ -12,7 +12,7 @@
12
12
  * scansup.c
13
13
  * scanner support routines used by the core lexer
14
14
  *
15
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
15
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
16
16
  * Portions Copyright (c) 1994, Regents of the University of California
17
17
  *
18
18
  *
@@ -38,7 +38,7 @@
38
38
  * clients.
39
39
  *
40
40
  *
41
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
41
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
42
42
  * Portions Copyright (c) 1994, Regents of the University of California
43
43
  *
44
44
  *
@@ -83,10 +83,6 @@
83
83
  #include <netdb.h>
84
84
  #include <limits.h>
85
85
 
86
- #ifdef HAVE_SYS_SELECT_H
87
- #include <sys/select.h>
88
- #endif
89
-
90
86
  #ifdef USE_BONJOUR
91
87
  #include <dns_sd.h>
92
88
  #endif
@@ -112,6 +108,7 @@
112
108
  #include "libpq/libpq.h"
113
109
  #include "libpq/pqformat.h"
114
110
  #include "libpq/pqsignal.h"
111
+ #include "nodes/queryjumble.h"
115
112
  #include "pg_getopt.h"
116
113
  #include "pgstat.h"
117
114
  #include "port/pg_bswap.h"
@@ -136,7 +133,6 @@
136
133
  #include "utils/memutils.h"
137
134
  #include "utils/pidfile.h"
138
135
  #include "utils/ps_status.h"
139
- #include "utils/queryjumble.h"
140
136
  #include "utils/timeout.h"
141
137
  #include "utils/timestamp.h"
142
138
  #include "utils/varlena.h"
@@ -214,30 +210,30 @@ static Backend *ShmemBackendArray;
214
210
 
215
211
 
216
212
  /*
217
- * ReservedBackends is the number of backends reserved for superuser use.
218
- * This number is taken out of the pool size given by MaxConnections so
219
- * number of backend slots available to non-superusers is
220
- * (MaxConnections - ReservedBackends). Note what this really means is
221
- * "if there are <= ReservedBackends connections available, only superusers
222
- * can make new connections" --- pre-existing superuser connections don't
223
- * count against the limit.
213
+ * SuperuserReservedConnections is the number of backends reserved for
214
+ * superuser use, and ReservedConnections is the number of backends reserved
215
+ * for use by roles with privileges of the pg_use_reserved_connections
216
+ * predefined role. These are taken out of the pool of MaxConnections backend
217
+ * slots, so the number of backend slots available for roles that are neither
218
+ * superuser nor have privileges of pg_use_reserved_connections is
219
+ * (MaxConnections - SuperuserReservedConnections - ReservedConnections).
220
+ *
221
+ * If the number of remaining slots is less than or equal to
222
+ * SuperuserReservedConnections, only superusers can make new connections. If
223
+ * the number of remaining slots is greater than SuperuserReservedConnections
224
+ * but less than or equal to
225
+ * (SuperuserReservedConnections + ReservedConnections), only superusers and
226
+ * roles with privileges of pg_use_reserved_connections can make new
227
+ * connections. Note that pre-existing superuser and
228
+ * pg_use_reserved_connections connections don't count against the limits.
224
229
  */
225
230
 
226
231
 
232
+
227
233
  /* The socket(s) we're listening to. */
228
234
  #define MAXLISTEN 64
229
235
 
230
236
 
231
- /*
232
- * These globals control the behavior of the postmaster in case some
233
- * backend dumps core. Normally, it kills all peers of the dead backend
234
- * and reinitializes shared memory. By specifying -s or -n, we can have
235
- * the postmaster stop (rather than kill) peers and not reinitialize
236
- * shared data structures. (Reinit is currently dead code, though.)
237
- */
238
-
239
-
240
-
241
237
  /* still more option variables */
242
238
 
243
239
 
@@ -253,6 +249,8 @@ static Backend *ShmemBackendArray;
253
249
 
254
250
 
255
251
 
252
+
253
+
256
254
  /* PIDs of special child processes; 0 when not running */
257
255
 
258
256
 
@@ -380,6 +378,17 @@ __thread bool ClientAuthInProgress = false;
380
378
 
381
379
 
382
380
 
381
+ /* set when signals arrive */
382
+
383
+
384
+
385
+
386
+
387
+
388
+
389
+ /* event multiplexing object */
390
+
391
+
383
392
  #ifdef USE_SSL
384
393
  /* Set when and if SSL has been initialized properly */
385
394
  static bool LoadedSSL = false;
@@ -398,11 +407,14 @@ static void getInstallationPaths(const char *argv0);
398
407
  static void checkControlFile(void);
399
408
  static Port *ConnCreate(int serverFd);
400
409
  static void ConnFree(Port *port);
401
- static void reset_shared(void);
402
- static void SIGHUP_handler(SIGNAL_ARGS);
403
- static void pmdie(SIGNAL_ARGS);
404
- static void reaper(SIGNAL_ARGS);
405
- static void sigusr1_handler(SIGNAL_ARGS);
410
+ static void handle_pm_pmsignal_signal(SIGNAL_ARGS);
411
+ static void handle_pm_child_exit_signal(SIGNAL_ARGS);
412
+ static void handle_pm_reload_request_signal(SIGNAL_ARGS);
413
+ static void handle_pm_shutdown_request_signal(SIGNAL_ARGS);
414
+ static void process_pm_pmsignal(void);
415
+ static void process_pm_child_exit(void);
416
+ static void process_pm_reload_request(void);
417
+ static void process_pm_shutdown_request(void);
406
418
  static void process_startup_packet_die(SIGNAL_ARGS);
407
419
  static void dummy_handler(SIGNAL_ARGS);
408
420
  static void StartupPacketTimeoutHandler(void);
@@ -420,12 +432,12 @@ static int BackendStartup(Port *port);
420
432
  static int ProcessStartupPacket(Port *port, bool ssl_done, bool gss_done);
421
433
  static void SendNegotiateProtocolVersion(List *unrecognized_protocol_options);
422
434
  static void processCancelRequest(Port *port, void *pkt);
423
- static int initMasks(fd_set *rmask);
424
435
  static void report_fork_failure_to_client(Port *port, int errnum);
425
436
  static CAC_state canAcceptConnections(int backend_type);
426
437
  static bool RandomCancelKey(int32 *cancel_key);
427
438
  static void signal_child(pid_t pid, int signal);
428
- static bool SignalSomeChildren(int signal, int targets);
439
+ static void sigquit_child(pid_t pid);
440
+ static bool SignalSomeChildren(int signal, int target);
429
441
  static void TerminateChildren(int signal);
430
442
 
431
443
  #define SignalChildren(sig) SignalSomeChildren(sig, BACKEND_TYPE_ALL)
@@ -579,8 +591,6 @@ HANDLE PostmasterHandle;
579
591
  */
580
592
  #ifdef WIN32
581
593
  #endif
582
- #ifdef SIGURG
583
- #endif
584
594
  #ifdef SIGTTIN
585
595
  #endif
586
596
  #ifdef SIGTTOU
@@ -597,8 +607,6 @@ HANDLE PostmasterHandle;
597
607
  #endif
598
608
  #ifdef USE_BONJOUR
599
609
  #endif
600
- #ifdef HAVE_UNIX_SOCKETS
601
- #endif
602
610
  #ifdef HAVE_PTHREAD_IS_THREADED_NP
603
611
  #endif
604
612
 
@@ -630,7 +638,7 @@ HANDLE PostmasterHandle;
630
638
 
631
639
 
632
640
  /*
633
- * Determine how long should we let ServerLoop sleep.
641
+ * Determine how long should we let ServerLoop sleep, in milliseconds.
634
642
  *
635
643
  * In normal conditions we wait at most one minute, to ensure that the other
636
644
  * background tasks handled by ServerLoop get done even when no requests are
@@ -641,19 +649,21 @@ HANDLE PostmasterHandle;
641
649
 
642
650
 
643
651
  /*
644
- * Main idle loop of postmaster
645
- *
646
- * NB: Needs to be called with signals blocked
652
+ * Activate or deactivate notifications of server socket events. Since we
653
+ * don't currently have a way to remove events from an existing WaitEventSet,
654
+ * we'll just destroy and recreate the whole thing. This is called during
655
+ * shutdown so we can wait for backends to exit without accepting new
656
+ * connections, and during crash reinitialization when we need to start
657
+ * listening for new connections again. The WaitEventSet will be freed in fork
658
+ * children by ClosePostmasterPorts().
647
659
  */
648
- #ifdef HAVE_PTHREAD_IS_THREADED_NP
649
- #endif
660
+
650
661
 
651
662
  /*
652
- * Initialise the masks for select() for the ports we are listening on.
653
- * Return the number of sockets to listen on.
663
+ * Main idle loop of postmaster
654
664
  */
655
-
656
-
665
+ #ifdef HAVE_PTHREAD_IS_THREADED_NP
666
+ #endif
657
667
 
658
668
  /*
659
669
  * Read a client's startup packet and do something according to it.
@@ -766,49 +776,48 @@ HANDLE PostmasterHandle;
766
776
  #ifndef WIN32
767
777
  #endif
768
778
 
769
-
770
779
  /*
771
- * reset_shared -- reset shared memory and semaphores
780
+ * Child processes use SIGUSR1 to notify us of 'pmsignals'. pg_ctl uses
781
+ * SIGUSR1 to ask postmaster to check for logrotate and promote files.
772
782
  */
773
783
 
774
784
 
785
+ /*
786
+ * pg_ctl uses SIGHUP to request a reload of the configuration files.
787
+ */
788
+
775
789
 
776
790
  /*
777
- * SIGHUP -- reread config files, and tell children to do same
791
+ * Re-read config files, and tell children to do same.
778
792
  */
779
- #ifdef WIN32
780
- #endif
781
793
  #ifdef USE_SSL
782
794
  #endif
783
795
  #ifdef EXEC_BACKEND
784
796
  #endif
785
- #ifdef WIN32
786
- #endif
797
+
798
+ /*
799
+ * pg_ctl uses SIGTERM, SIGINT and SIGQUIT to request different types of
800
+ * shutdown.
801
+ */
787
802
 
788
803
 
789
804
  /*
790
- * pmdie -- signal handler for processing various postmaster signals.
805
+ * Process shutdown request.
791
806
  */
792
- #ifdef WIN32
793
- #endif
794
807
  #ifdef USE_SYSTEMD
795
808
  #endif
796
809
  #ifdef USE_SYSTEMD
797
810
  #endif
798
811
  #ifdef USE_SYSTEMD
799
812
  #endif
800
- #ifdef WIN32
801
- #endif
813
+
814
+
802
815
 
803
816
  /*
804
- * Reaper -- signal handler to cleanup after a child process dies.
817
+ * Cleanup after a child process dies.
805
818
  */
806
- #ifdef WIN32
807
- #endif
808
819
  #ifdef USE_SYSTEMD
809
820
  #endif
810
- #ifdef WIN32
811
- #endif
812
821
 
813
822
  /*
814
823
  * Scan the bgworkers list and see if the given PID (which has just stopped
@@ -858,8 +867,9 @@ HANDLE PostmasterHandle;
858
867
  /*
859
868
  * Advance the postmaster's state machine and take actions as appropriate
860
869
  *
861
- * This is common code for pmdie(), reaper() and sigusr1_handler(), which
862
- * receive the signals that might mean we need to change state.
870
+ * This is common code for process_pm_shutdown_request(),
871
+ * process_pm_child_exit() and process_pm_pmsignal(), which process the signals
872
+ * that might mean we need to change state.
863
873
  */
864
874
 
865
875
 
@@ -883,6 +893,16 @@ HANDLE PostmasterHandle;
883
893
  #ifdef HAVE_SETSID
884
894
  #endif
885
895
 
896
+ /*
897
+ * Convenience function for killing a child process after a crash of some
898
+ * other child process. We log the action at a higher level than we would
899
+ * otherwise do, and we apply send_abort_for_crash to decide which signal
900
+ * to send. Normally it's SIGQUIT -- and most other comments in this file
901
+ * are written on the assumption that it is -- but developers might prefer
902
+ * to use SIGABRT to collect per-child core dumps.
903
+ */
904
+
905
+
886
906
  /*
887
907
  * Send a signal to the targeted children (but NOT special children;
888
908
  * dead_end children are never signaled, either).
@@ -1267,18 +1287,10 @@ retry:
1267
1287
 
1268
1288
  /*
1269
1289
  * Queue a waiter to signal when this child dies. The wait will be handled
1270
- * automatically by an operating system thread pool.
1271
- *
1272
- * Note: use malloc instead of palloc, since it needs to be thread-safe.
1273
- * Struct will be free():d from the callback function that runs on a
1274
- * different thread.
1290
+ * automatically by an operating system thread pool. The memory will be
1291
+ * freed by a later call to waitpid().
1275
1292
  */
1276
- childinfo = malloc(sizeof(win32_deadchild_waitinfo));
1277
- if (!childinfo)
1278
- ereport(FATAL,
1279
- (errcode(ERRCODE_OUT_OF_MEMORY),
1280
- errmsg("out of memory")));
1281
-
1293
+ childinfo = palloc(sizeof(win32_deadchild_waitinfo));
1282
1294
  childinfo->procHandle = pi.hProcess;
1283
1295
  childinfo->procId = pi.dwProcessId;
1284
1296
 
@@ -1292,7 +1304,7 @@ retry:
1292
1304
  (errmsg_internal("could not register process for wait: error code %lu",
1293
1305
  GetLastError())));
1294
1306
 
1295
- /* Don't close pi.hProcess here - the wait thread needs access to it */
1307
+ /* Don't close pi.hProcess here - waitpid() needs access to it */
1296
1308
 
1297
1309
  CloseHandle(pi.hThread);
1298
1310
 
@@ -1532,16 +1544,13 @@ SubPostmasterMain(int argc, char *argv[])
1532
1544
  #endif
1533
1545
 
1534
1546
  /*
1535
- * sigusr1_handler - handle signal conditions from child processes
1547
+ * Handle pmsignal conditions representing requests from backends,
1548
+ * and check for promote and logrotate requests from pg_ctl.
1536
1549
  */
1537
- #ifdef WIN32
1538
- #endif
1539
1550
  #ifdef USE_SYSTEMD
1540
1551
  #endif
1541
1552
  #ifdef USE_SYSTEMD
1542
1553
  #endif
1543
- #ifdef WIN32
1544
- #endif
1545
1554
 
1546
1555
  /*
1547
1556
  * SIGTERM while processing startup packet.
@@ -2124,36 +2133,21 @@ ShmemBackendArrayRemove(Backend *bn)
2124
2133
  static pid_t
2125
2134
  waitpid(pid_t pid, int *exitstatus, int options)
2126
2135
  {
2136
+ win32_deadchild_waitinfo *childinfo;
2137
+ DWORD exitcode;
2127
2138
  DWORD dwd;
2128
2139
  ULONG_PTR key;
2129
2140
  OVERLAPPED *ovl;
2130
2141
 
2131
- /*
2132
- * Check if there are any dead children. If there are, return the pid of
2133
- * the first one that died.
2134
- */
2135
- if (GetQueuedCompletionStatus(win32ChildQueue, &dwd, &key, &ovl, 0))
2142
+ /* Try to consume one win32_deadchild_waitinfo from the queue. */
2143
+ if (!GetQueuedCompletionStatus(win32ChildQueue, &dwd, &key, &ovl, 0))
2136
2144
  {
2137
- *exitstatus = (int) key;
2138
- return dwd;
2145
+ errno = EAGAIN;
2146
+ return -1;
2139
2147
  }
2140
2148
 
2141
- return -1;
2142
- }
2143
-
2144
- /*
2145
- * Note! Code below executes on a thread pool! All operations must
2146
- * be thread safe! Note that elog() and friends must *not* be used.
2147
- */
2148
- static void WINAPI
2149
- pgwin32_deadchild_callback(PVOID lpParameter, BOOLEAN TimerOrWaitFired)
2150
- {
2151
- win32_deadchild_waitinfo *childinfo = (win32_deadchild_waitinfo *) lpParameter;
2152
- DWORD exitcode;
2153
-
2154
- if (TimerOrWaitFired)
2155
- return; /* timeout. Should never happen, since we use
2156
- * INFINITE as timeout value. */
2149
+ childinfo = (win32_deadchild_waitinfo *) key;
2150
+ pid = childinfo->procId;
2157
2151
 
2158
2152
  /*
2159
2153
  * Remove handle from wait - required even though it's set to wait only
@@ -2169,13 +2163,11 @@ pgwin32_deadchild_callback(PVOID lpParameter, BOOLEAN TimerOrWaitFired)
2169
2163
  write_stderr("could not read exit code for process\n");
2170
2164
  exitcode = 255;
2171
2165
  }
2172
-
2173
- if (!PostQueuedCompletionStatus(win32ChildQueue, childinfo->procId, (ULONG_PTR) exitcode, NULL))
2174
- write_stderr("could not post child completion status\n");
2166
+ *exitstatus = exitcode;
2175
2167
 
2176
2168
  /*
2177
- * Handle is per-process, so we close it here instead of in the
2178
- * originating thread
2169
+ * Close the process handle. Only after this point can the PID can be
2170
+ * recycled by the kernel.
2179
2171
  */
2180
2172
  CloseHandle(childinfo->procHandle);
2181
2173
 
@@ -2183,9 +2175,36 @@ pgwin32_deadchild_callback(PVOID lpParameter, BOOLEAN TimerOrWaitFired)
2183
2175
  * Free struct that was allocated before the call to
2184
2176
  * RegisterWaitForSingleObject()
2185
2177
  */
2186
- free(childinfo);
2178
+ pfree(childinfo);
2179
+
2180
+ return pid;
2181
+ }
2182
+
2183
+ /*
2184
+ * Note! Code below executes on a thread pool! All operations must
2185
+ * be thread safe! Note that elog() and friends must *not* be used.
2186
+ */
2187
+ static void WINAPI
2188
+ pgwin32_deadchild_callback(PVOID lpParameter, BOOLEAN TimerOrWaitFired)
2189
+ {
2190
+ /* Should never happen, since we use INFINITE as timeout value. */
2191
+ if (TimerOrWaitFired)
2192
+ return;
2193
+
2194
+ /*
2195
+ * Post the win32_deadchild_waitinfo object for waitpid() to deal with. If
2196
+ * that fails, we leak the object, but we also leak a whole process and
2197
+ * get into an unrecoverable state, so there's not much point in worrying
2198
+ * about that. We'd like to panic, but we can't use that infrastructure
2199
+ * from this thread.
2200
+ */
2201
+ if (!PostQueuedCompletionStatus(win32ChildQueue,
2202
+ 0,
2203
+ (ULONG_PTR) lpParameter,
2204
+ NULL))
2205
+ write_stderr("could not post child completion status\n");
2187
2206
 
2188
- /* Queue SIGCHLD signal */
2207
+ /* Queue SIGCHLD signal. */
2189
2208
  pg_queue_signal(SIGCHLD);
2190
2209
  }
2191
2210
  #endif /* WIN32 */
@@ -15,7 +15,7 @@
15
15
  * exit-time cleanup for either a postmaster or a backend.
16
16
  *
17
17
  *
18
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
18
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
19
19
  * Portions Copyright (c) 1994, Regents of the University of California
20
20
  *
21
21
  *