pg_query 2.0.3 → 5.1.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 (557) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +165 -0
  3. data/README.md +67 -29
  4. data/Rakefile +8 -23
  5. data/ext/pg_query/extconf.rb +21 -3
  6. data/ext/pg_query/include/pg_query.h +29 -4
  7. data/ext/pg_query/include/pg_query_enum_defs.c +551 -272
  8. data/ext/pg_query/include/pg_query_fingerprint_conds.c +563 -470
  9. data/ext/pg_query/include/pg_query_fingerprint_defs.c +5403 -3945
  10. data/ext/pg_query/include/pg_query_outfuncs_conds.c +402 -330
  11. data/ext/pg_query/include/pg_query_outfuncs_defs.c +1319 -1059
  12. data/ext/pg_query/include/pg_query_readfuncs_conds.c +141 -118
  13. data/ext/pg_query/include/pg_query_readfuncs_defs.c +1685 -1379
  14. data/ext/pg_query/include/{access → postgres/access}/amapi.h +47 -1
  15. data/ext/pg_query/include/{access → postgres/access}/attmap.h +5 -3
  16. data/ext/pg_query/include/{access → postgres/access}/attnum.h +2 -2
  17. data/ext/pg_query/include/{access → postgres/access}/clog.h +4 -2
  18. data/ext/pg_query/include/{access → postgres/access}/commit_ts.h +6 -9
  19. data/ext/pg_query/include/{access → postgres/access}/detoast.h +1 -11
  20. data/ext/pg_query/include/{access → postgres/access}/genam.h +21 -16
  21. data/ext/pg_query/include/{access → postgres/access}/gin.h +17 -4
  22. data/ext/pg_query/include/{access → postgres/access}/htup.h +1 -1
  23. data/ext/pg_query/include/{access → postgres/access}/htup_details.h +80 -88
  24. data/ext/pg_query/include/{access → postgres/access}/itup.h +61 -52
  25. data/ext/pg_query/include/{access → postgres/access}/parallel.h +2 -2
  26. data/ext/pg_query/include/{access → postgres/access}/printtup.h +1 -1
  27. data/ext/pg_query/include/{access → postgres/access}/relation.h +1 -1
  28. data/ext/pg_query/include/{access → postgres/access}/relscan.h +17 -2
  29. data/ext/pg_query/include/postgres/access/rmgr.h +62 -0
  30. data/ext/pg_query/include/{access → postgres/access}/rmgrlist.h +24 -24
  31. data/ext/pg_query/include/{access → postgres/access}/sdir.h +12 -3
  32. data/ext/pg_query/include/{access → postgres/access}/skey.h +1 -1
  33. data/ext/pg_query/include/{access → postgres/access}/stratnum.h +4 -2
  34. data/ext/pg_query/include/{access → postgres/access}/sysattr.h +1 -1
  35. data/ext/pg_query/include/{access → postgres/access}/table.h +2 -1
  36. data/ext/pg_query/include/{access → postgres/access}/tableam.h +337 -62
  37. data/ext/pg_query/include/postgres/access/toast_compression.h +73 -0
  38. data/ext/pg_query/include/{access → postgres/access}/transam.h +123 -13
  39. data/ext/pg_query/include/postgres/access/tsmapi.h +82 -0
  40. data/ext/pg_query/include/{access → postgres/access}/tupconvert.h +5 -2
  41. data/ext/pg_query/include/{access → postgres/access}/tupdesc.h +2 -2
  42. data/ext/pg_query/include/{access → postgres/access}/tupmacs.h +60 -100
  43. data/ext/pg_query/include/{access → postgres/access}/twophase.h +5 -1
  44. data/ext/pg_query/include/{access → postgres/access}/xact.h +99 -32
  45. data/ext/pg_query/include/{access → postgres/access}/xlog.h +69 -165
  46. data/ext/pg_query/include/{access → postgres/access}/xlog_internal.h +147 -73
  47. data/ext/pg_query/include/postgres/access/xlogbackup.h +41 -0
  48. data/ext/pg_query/include/{access → postgres/access}/xlogdefs.h +13 -40
  49. data/ext/pg_query/include/postgres/access/xlogprefetcher.h +55 -0
  50. data/ext/pg_query/include/{access → postgres/access}/xlogreader.h +154 -37
  51. data/ext/pg_query/include/{access → postgres/access}/xlogrecord.h +34 -13
  52. data/ext/pg_query/include/postgres/access/xlogrecovery.h +158 -0
  53. data/ext/pg_query/include/postgres/archive/archive_module.h +59 -0
  54. data/ext/pg_query/include/{c.h → postgres/c.h} +245 -188
  55. data/ext/pg_query/include/{catalog → postgres/catalog}/catalog.h +6 -3
  56. data/ext/pg_query/include/{catalog → postgres/catalog}/catversion.h +6 -2
  57. data/ext/pg_query/include/{catalog → postgres/catalog}/dependency.h +14 -19
  58. data/ext/pg_query/include/postgres/catalog/genbki.h +143 -0
  59. data/ext/pg_query/include/{catalog → postgres/catalog}/index.h +20 -5
  60. data/ext/pg_query/include/postgres/catalog/indexing.h +54 -0
  61. data/ext/pg_query/include/{catalog → postgres/catalog}/namespace.h +5 -3
  62. data/ext/pg_query/include/{catalog → postgres/catalog}/objectaccess.h +73 -3
  63. data/ext/pg_query/include/{catalog → postgres/catalog}/objectaddress.h +12 -7
  64. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate.h +14 -10
  65. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate_d.h +2 -1
  66. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am.h +4 -1
  67. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am_d.h +3 -1
  68. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute.h +45 -26
  69. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute_d.h +19 -16
  70. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid.h +7 -2
  71. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid_d.h +19 -9
  72. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class.h +45 -15
  73. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class_d.h +31 -2
  74. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation.h +35 -8
  75. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation_d.h +21 -3
  76. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint.h +39 -13
  77. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint_d.h +10 -4
  78. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_control.h +13 -5
  79. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion.h +8 -5
  80. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion_d.h +4 -1
  81. data/ext/pg_query/include/postgres/catalog/pg_database.h +124 -0
  82. data/ext/pg_query/include/postgres/catalog/pg_database_d.h +52 -0
  83. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend.h +11 -7
  84. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend_d.h +3 -1
  85. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger.h +9 -3
  86. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger_d.h +3 -1
  87. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index.h +17 -7
  88. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index_d.h +20 -17
  89. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language.h +10 -5
  90. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language_d.h +3 -1
  91. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace.h +7 -2
  92. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace_d.h +3 -1
  93. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass.h +8 -5
  94. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass_d.h +3 -1
  95. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator.h +21 -16
  96. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator_d.h +37 -1
  97. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily.h +8 -4
  98. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily_d.h +6 -2
  99. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table.h +20 -9
  100. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table_d.h +2 -1
  101. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc.h +20 -11
  102. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc_d.h +10 -8
  103. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication.h +49 -6
  104. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication_d.h +3 -1
  105. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin.h +6 -1
  106. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin_d.h +5 -1
  107. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic.h +19 -12
  108. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_d.h +2 -1
  109. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext.h +19 -5
  110. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext_d.h +7 -2
  111. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform.h +8 -5
  112. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform_d.h +3 -1
  113. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger.h +24 -8
  114. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger_d.h +4 -1
  115. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config.h +6 -3
  116. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config_d.h +3 -1
  117. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict.h +8 -3
  118. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict_d.h +3 -1
  119. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser.h +6 -3
  120. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser_d.h +3 -1
  121. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template.h +6 -3
  122. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template_d.h +3 -1
  123. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type.h +56 -24
  124. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type_d.h +70 -31
  125. data/ext/pg_query/include/{catalog → postgres/catalog}/storage.h +9 -7
  126. data/ext/pg_query/include/{commands → postgres/commands}/async.h +4 -5
  127. data/ext/pg_query/include/{commands → postgres/commands}/dbcommands.h +3 -1
  128. data/ext/pg_query/include/{commands → postgres/commands}/defrem.h +12 -24
  129. data/ext/pg_query/include/{commands → postgres/commands}/event_trigger.h +2 -2
  130. data/ext/pg_query/include/{commands → postgres/commands}/explain.h +3 -1
  131. data/ext/pg_query/include/{commands → postgres/commands}/prepare.h +1 -1
  132. data/ext/pg_query/include/{commands → postgres/commands}/tablespace.h +6 -4
  133. data/ext/pg_query/include/{commands → postgres/commands}/trigger.h +36 -25
  134. data/ext/pg_query/include/{commands → postgres/commands}/user.h +10 -4
  135. data/ext/pg_query/include/{commands → postgres/commands}/vacuum.h +140 -47
  136. data/ext/pg_query/include/postgres/common/cryptohash.h +39 -0
  137. data/ext/pg_query/include/{common → postgres/common}/file_perm.h +4 -4
  138. data/ext/pg_query/include/{common → postgres/common}/hashfn.h +1 -1
  139. data/ext/pg_query/include/postgres/common/int.h +437 -0
  140. data/ext/pg_query/include/{common → postgres/common}/keywords.h +2 -6
  141. data/ext/pg_query/include/{common → postgres/common}/kwlookup.h +2 -2
  142. data/ext/pg_query/include/postgres/common/pg_prng.h +61 -0
  143. data/ext/pg_query/include/{common → postgres/common}/relpath.h +21 -14
  144. data/ext/pg_query/include/postgres/common/scram-common.h +70 -0
  145. data/ext/pg_query/include/postgres/common/sha2.h +32 -0
  146. data/ext/pg_query/include/postgres/common/string.h +44 -0
  147. data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +125 -0
  148. data/ext/pg_query/include/{common/unicode_combining_table.h → postgres/common/unicode_nonspacing_table.h} +138 -8
  149. data/ext/pg_query/include/postgres/copyfuncs.funcs.c +5013 -0
  150. data/ext/pg_query/include/postgres/copyfuncs.switch.c +938 -0
  151. data/ext/pg_query/include/{datatype → postgres/datatype}/timestamp.h +50 -4
  152. data/ext/pg_query/include/postgres/equalfuncs.funcs.c +3097 -0
  153. data/ext/pg_query/include/postgres/equalfuncs.switch.c +785 -0
  154. data/ext/pg_query/include/{executor → postgres/executor}/execdesc.h +1 -1
  155. data/ext/pg_query/include/{executor → postgres/executor}/executor.h +98 -32
  156. data/ext/pg_query/include/{executor → postgres/executor}/functions.h +17 -3
  157. data/ext/pg_query/include/{executor → postgres/executor}/instrument.h +33 -16
  158. data/ext/pg_query/include/{executor → postgres/executor}/spi.h +42 -4
  159. data/ext/pg_query/include/{executor → postgres/executor}/tablefunc.h +1 -1
  160. data/ext/pg_query/include/{executor → postgres/executor}/tuptable.h +18 -11
  161. data/ext/pg_query/include/{fmgr.h → postgres/fmgr.h} +33 -8
  162. data/ext/pg_query/include/postgres/foreign/fdwapi.h +294 -0
  163. data/ext/pg_query/include/{funcapi.h → postgres/funcapi.h} +22 -10
  164. data/ext/pg_query/include/postgres/gram.h +1127 -0
  165. data/ext/pg_query/include/{parser → postgres}/gramparse.h +4 -4
  166. data/ext/pg_query/include/{jit → postgres/jit}/jit.h +12 -12
  167. data/ext/pg_query/include/postgres/kwlist_d.h +1119 -0
  168. data/ext/pg_query/include/postgres/lib/dshash.h +115 -0
  169. data/ext/pg_query/include/{lib → postgres/lib}/ilist.h +454 -22
  170. data/ext/pg_query/include/{lib → postgres/lib}/pairingheap.h +1 -1
  171. data/ext/pg_query/include/{lib → postgres/lib}/simplehash.h +158 -33
  172. data/ext/pg_query/include/postgres/lib/sort_template.h +432 -0
  173. data/ext/pg_query/include/{lib → postgres/lib}/stringinfo.h +3 -3
  174. data/ext/pg_query/include/{libpq → postgres/libpq}/auth.h +12 -4
  175. data/ext/pg_query/include/{libpq → postgres/libpq}/crypt.h +5 -4
  176. data/ext/pg_query/include/{libpq → postgres/libpq}/hba.h +54 -8
  177. data/ext/pg_query/include/{libpq → postgres/libpq}/libpq-be.h +45 -17
  178. data/ext/pg_query/include/{libpq → postgres/libpq}/libpq.h +31 -20
  179. data/ext/pg_query/include/{libpq → postgres/libpq}/pqcomm.h +26 -71
  180. data/ext/pg_query/include/{libpq → postgres/libpq}/pqformat.h +2 -2
  181. data/ext/pg_query/include/{libpq → postgres/libpq}/pqsignal.h +25 -13
  182. data/ext/pg_query/include/postgres/libpq/sasl.h +136 -0
  183. data/ext/pg_query/include/postgres/libpq/scram.h +37 -0
  184. data/ext/pg_query/include/{mb → postgres/mb}/pg_wchar.h +125 -25
  185. data/ext/pg_query/include/{mb → postgres/mb}/stringinfo_mb.h +1 -1
  186. data/ext/pg_query/include/{miscadmin.h → postgres/miscadmin.h} +96 -65
  187. data/ext/pg_query/include/{nodes → postgres/nodes}/bitmapset.h +11 -7
  188. data/ext/pg_query/include/{nodes → postgres/nodes}/execnodes.h +351 -103
  189. data/ext/pg_query/include/{nodes → postgres/nodes}/extensible.h +8 -4
  190. data/ext/pg_query/include/{nodes → postgres/nodes}/lockoptions.h +1 -1
  191. data/ext/pg_query/include/{nodes → postgres/nodes}/makefuncs.h +19 -6
  192. data/ext/pg_query/include/{nodes → postgres/nodes}/memnodes.h +11 -6
  193. data/ext/pg_query/include/postgres/nodes/miscnodes.h +56 -0
  194. data/ext/pg_query/include/{nodes → postgres/nodes}/nodeFuncs.h +89 -29
  195. data/ext/pg_query/include/{nodes → postgres/nodes}/nodes.h +100 -496
  196. data/ext/pg_query/include/postgres/nodes/nodetags.h +471 -0
  197. data/ext/pg_query/include/{nodes → postgres/nodes}/params.h +3 -3
  198. data/ext/pg_query/include/{nodes → postgres/nodes}/parsenodes.h +678 -207
  199. data/ext/pg_query/include/{nodes → postgres/nodes}/pathnodes.h +1282 -454
  200. data/ext/pg_query/include/{nodes → postgres/nodes}/pg_list.h +103 -73
  201. data/ext/pg_query/include/{nodes → postgres/nodes}/plannodes.h +474 -133
  202. data/ext/pg_query/include/{nodes → postgres/nodes}/primnodes.h +754 -254
  203. data/ext/pg_query/include/{nodes → postgres/nodes}/print.h +1 -1
  204. data/ext/pg_query/include/postgres/nodes/queryjumble.h +86 -0
  205. data/ext/pg_query/include/postgres/nodes/replnodes.h +111 -0
  206. data/ext/pg_query/include/postgres/nodes/supportnodes.h +346 -0
  207. data/ext/pg_query/include/{nodes → postgres/nodes}/tidbitmap.h +1 -1
  208. data/ext/pg_query/include/postgres/nodes/value.h +90 -0
  209. data/ext/pg_query/include/{optimizer → postgres/optimizer}/cost.h +14 -5
  210. data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo.h +9 -7
  211. data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo_gene.h +1 -1
  212. data/ext/pg_query/include/{optimizer → postgres/optimizer}/optimizer.h +31 -28
  213. data/ext/pg_query/include/{optimizer → postgres/optimizer}/paths.h +29 -12
  214. data/ext/pg_query/include/{optimizer → postgres/optimizer}/planmain.h +15 -17
  215. data/ext/pg_query/include/{parser → postgres/parser}/analyze.h +20 -5
  216. data/ext/pg_query/include/postgres/parser/kwlist.h +498 -0
  217. data/ext/pg_query/include/{parser → postgres/parser}/parse_agg.h +5 -8
  218. data/ext/pg_query/include/{parser → postgres/parser}/parse_coerce.h +6 -1
  219. data/ext/pg_query/include/{parser → postgres/parser}/parse_expr.h +2 -3
  220. data/ext/pg_query/include/{parser → postgres/parser}/parse_func.h +2 -1
  221. data/ext/pg_query/include/{parser → postgres/parser}/parse_node.h +41 -11
  222. data/ext/pg_query/include/{parser → postgres/parser}/parse_oper.h +3 -5
  223. data/ext/pg_query/include/{parser → postgres/parser}/parse_relation.h +11 -5
  224. data/ext/pg_query/include/{parser → postgres/parser}/parse_type.h +4 -3
  225. data/ext/pg_query/include/postgres/parser/parser.h +68 -0
  226. data/ext/pg_query/include/{parser → postgres/parser}/parsetree.h +1 -1
  227. data/ext/pg_query/include/{parser → postgres/parser}/scanner.h +2 -2
  228. data/ext/pg_query/include/{parser → postgres/parser}/scansup.h +2 -5
  229. data/ext/pg_query/include/{partitioning → postgres/partitioning}/partdefs.h +1 -1
  230. data/ext/pg_query/include/{pg_config.h → postgres/pg_config.h} +216 -228
  231. data/ext/pg_query/include/{pg_config_manual.h → postgres/pg_config_manual.h} +80 -58
  232. data/ext/pg_query/include/postgres/pg_config_os.h +8 -0
  233. data/ext/pg_query/include/{pg_getopt.h → postgres/pg_getopt.h} +6 -6
  234. data/ext/pg_query/include/{pg_trace.h → postgres/pg_trace.h} +1 -1
  235. data/ext/pg_query/include/postgres/pgstat.h +778 -0
  236. data/ext/pg_query/include/{pgtime.h → postgres/pgtime.h} +16 -6
  237. data/ext/pg_query/include/{pl_gram.h → postgres/pl_gram.h} +116 -116
  238. data/ext/pg_query/include/{pl_reserved_kwlist.h → postgres/pl_reserved_kwlist.h} +1 -1
  239. data/ext/pg_query/include/{pl_reserved_kwlist_d.h → postgres/pl_reserved_kwlist_d.h} +10 -10
  240. data/ext/pg_query/include/{pl_unreserved_kwlist.h → postgres/pl_unreserved_kwlist.h} +3 -3
  241. data/ext/pg_query/include/{pl_unreserved_kwlist_d.h → postgres/pl_unreserved_kwlist_d.h} +60 -60
  242. data/ext/pg_query/include/{plerrcodes.h → postgres/plerrcodes.h} +9 -1
  243. data/ext/pg_query/include/{plpgsql.h → postgres/plpgsql.h} +79 -86
  244. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-arm.h +9 -3
  245. data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +17 -0
  246. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-ppc.h +21 -21
  247. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-x86.h +2 -2
  248. data/ext/pg_query/include/{port → postgres/port}/atomics/fallback.h +3 -3
  249. data/ext/pg_query/include/{port → postgres/port}/atomics/generic-gcc.h +3 -3
  250. data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +101 -0
  251. data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +106 -0
  252. data/ext/pg_query/include/{port → postgres/port}/atomics/generic.h +1 -1
  253. data/ext/pg_query/include/{port → postgres/port}/atomics.h +2 -7
  254. data/ext/pg_query/include/{port → postgres/port}/pg_bitutils.h +129 -16
  255. data/ext/pg_query/include/{port → postgres/port}/pg_bswap.h +1 -1
  256. data/ext/pg_query/include/{port → postgres/port}/pg_crc32c.h +1 -1
  257. data/ext/pg_query/include/postgres/port/simd.h +375 -0
  258. data/ext/pg_query/include/postgres/port/win32/arpa/inet.h +3 -0
  259. data/ext/pg_query/include/postgres/port/win32/dlfcn.h +1 -0
  260. data/ext/pg_query/include/postgres/port/win32/grp.h +1 -0
  261. data/ext/pg_query/include/postgres/port/win32/netdb.h +7 -0
  262. data/ext/pg_query/include/postgres/port/win32/netinet/in.h +3 -0
  263. data/ext/pg_query/include/postgres/port/win32/netinet/tcp.h +7 -0
  264. data/ext/pg_query/include/postgres/port/win32/pwd.h +3 -0
  265. data/ext/pg_query/include/postgres/port/win32/sys/resource.h +20 -0
  266. data/ext/pg_query/include/postgres/port/win32/sys/select.h +3 -0
  267. data/ext/pg_query/include/postgres/port/win32/sys/socket.h +26 -0
  268. data/ext/pg_query/include/postgres/port/win32/sys/un.h +17 -0
  269. data/ext/pg_query/include/postgres/port/win32/sys/wait.h +3 -0
  270. data/ext/pg_query/include/postgres/port/win32.h +59 -0
  271. data/ext/pg_query/include/postgres/port/win32_msvc/dirent.h +34 -0
  272. data/ext/pg_query/include/postgres/port/win32_msvc/sys/file.h +1 -0
  273. data/ext/pg_query/include/postgres/port/win32_msvc/sys/param.h +1 -0
  274. data/ext/pg_query/include/postgres/port/win32_msvc/sys/time.h +1 -0
  275. data/ext/pg_query/include/postgres/port/win32_msvc/unistd.h +9 -0
  276. data/ext/pg_query/include/postgres/port/win32_msvc/utime.h +3 -0
  277. data/ext/pg_query/include/postgres/port/win32_port.h +594 -0
  278. data/ext/pg_query/include/{port.h → postgres/port.h} +107 -111
  279. data/ext/pg_query/include/postgres/portability/instr_time.h +197 -0
  280. data/ext/pg_query/include/postgres/postgres.h +579 -0
  281. data/ext/pg_query/include/{postgres_ext.h → postgres/postgres_ext.h} +0 -1
  282. data/ext/pg_query/include/{postmaster → postgres/postmaster}/autovacuum.h +17 -20
  283. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker.h +3 -2
  284. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker_internals.h +2 -2
  285. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgwriter.h +6 -6
  286. data/ext/pg_query/include/{postmaster → postgres/postmaster}/interrupt.h +1 -1
  287. data/ext/pg_query/include/{postmaster → postgres/postmaster}/pgarch.h +7 -10
  288. data/ext/pg_query/include/{postmaster → postgres/postmaster}/postmaster.h +21 -17
  289. data/ext/pg_query/include/postgres/postmaster/startup.h +41 -0
  290. data/ext/pg_query/include/{postmaster → postgres/postmaster}/syslogger.h +16 -11
  291. data/ext/pg_query/include/{postmaster → postgres/postmaster}/walwriter.h +5 -3
  292. data/ext/pg_query/include/{regex → postgres/regex}/regex.h +27 -22
  293. data/ext/pg_query/include/{replication → postgres/replication}/logicallauncher.h +8 -5
  294. data/ext/pg_query/include/postgres/replication/logicalproto.h +274 -0
  295. data/ext/pg_query/include/postgres/replication/logicalworker.h +32 -0
  296. data/ext/pg_query/include/{replication → postgres/replication}/origin.h +8 -8
  297. data/ext/pg_query/include/postgres/replication/reorderbuffer.h +753 -0
  298. data/ext/pg_query/include/{replication → postgres/replication}/slot.h +42 -12
  299. data/ext/pg_query/include/{replication → postgres/replication}/syncrep.h +6 -12
  300. data/ext/pg_query/include/{replication → postgres/replication}/walreceiver.h +158 -20
  301. data/ext/pg_query/include/{replication → postgres/replication}/walsender.h +20 -20
  302. data/ext/pg_query/include/{rewrite → postgres/rewrite}/prs2lock.h +1 -1
  303. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteHandler.h +1 -6
  304. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteManip.h +11 -2
  305. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteSupport.h +1 -1
  306. data/ext/pg_query/include/{storage → postgres/storage}/backendid.h +3 -3
  307. data/ext/pg_query/include/{storage → postgres/storage}/block.h +24 -37
  308. data/ext/pg_query/include/{storage → postgres/storage}/buf.h +1 -1
  309. data/ext/pg_query/include/{storage → postgres/storage}/bufmgr.h +196 -95
  310. data/ext/pg_query/include/{storage → postgres/storage}/bufpage.h +152 -101
  311. data/ext/pg_query/include/{storage → postgres/storage}/condition_variable.h +14 -3
  312. data/ext/pg_query/include/{storage → postgres/storage}/dsm.h +6 -6
  313. data/ext/pg_query/include/{storage → postgres/storage}/dsm_impl.h +6 -2
  314. data/ext/pg_query/include/{storage → postgres/storage}/fd.h +48 -14
  315. data/ext/pg_query/include/postgres/storage/fileset.h +40 -0
  316. data/ext/pg_query/include/{storage → postgres/storage}/ipc.h +5 -2
  317. data/ext/pg_query/include/{storage → postgres/storage}/item.h +1 -1
  318. data/ext/pg_query/include/{storage → postgres/storage}/itemid.h +1 -1
  319. data/ext/pg_query/include/{storage → postgres/storage}/itemptr.h +96 -57
  320. data/ext/pg_query/include/{storage → postgres/storage}/large_object.h +2 -2
  321. data/ext/pg_query/include/{storage → postgres/storage}/latch.h +17 -13
  322. data/ext/pg_query/include/{storage → postgres/storage}/lmgr.h +7 -1
  323. data/ext/pg_query/include/{storage → postgres/storage}/lock.h +37 -25
  324. data/ext/pg_query/include/{storage → postgres/storage}/lockdefs.h +4 -4
  325. data/ext/pg_query/include/{storage → postgres/storage}/lwlock.h +21 -33
  326. data/ext/pg_query/include/{storage → postgres/storage}/lwlocknames.h +0 -1
  327. data/ext/pg_query/include/{storage → postgres/storage}/off.h +1 -1
  328. data/ext/pg_query/include/{storage → postgres/storage}/pg_sema.h +1 -1
  329. data/ext/pg_query/include/{storage → postgres/storage}/pg_shmem.h +9 -7
  330. data/ext/pg_query/include/{storage → postgres/storage}/pmsignal.h +15 -4
  331. data/ext/pg_query/include/{storage → postgres/storage}/predicate.h +5 -5
  332. data/ext/pg_query/include/{storage → postgres/storage}/proc.h +200 -67
  333. data/ext/pg_query/include/postgres/storage/procarray.h +99 -0
  334. data/ext/pg_query/include/{storage → postgres/storage}/proclist_types.h +1 -1
  335. data/ext/pg_query/include/{storage → postgres/storage}/procsignal.h +5 -7
  336. data/ext/pg_query/include/postgres/storage/relfilelocator.h +99 -0
  337. data/ext/pg_query/include/{storage → postgres/storage}/s_lock.h +118 -298
  338. data/ext/pg_query/include/{storage → postgres/storage}/sharedfileset.h +3 -11
  339. data/ext/pg_query/include/{storage → postgres/storage}/shm_mq.h +5 -4
  340. data/ext/pg_query/include/{storage → postgres/storage}/shm_toc.h +1 -1
  341. data/ext/pg_query/include/{storage → postgres/storage}/shmem.h +1 -23
  342. data/ext/pg_query/include/{storage → postgres/storage}/sinval.h +5 -5
  343. data/ext/pg_query/include/{storage → postgres/storage}/sinvaladt.h +4 -2
  344. data/ext/pg_query/include/{storage → postgres/storage}/smgr.h +21 -17
  345. data/ext/pg_query/include/{storage → postgres/storage}/spin.h +2 -2
  346. data/ext/pg_query/include/{storage → postgres/storage}/standby.h +17 -9
  347. data/ext/pg_query/include/{storage → postgres/storage}/standbydefs.h +2 -2
  348. data/ext/pg_query/include/{storage → postgres/storage}/sync.h +9 -5
  349. data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtag.h +7 -2
  350. data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtaglist.h +3 -2
  351. data/ext/pg_query/include/{tcop → postgres/tcop}/deparse_utility.h +1 -1
  352. data/ext/pg_query/include/{tcop → postgres/tcop}/dest.h +1 -3
  353. data/ext/pg_query/include/{tcop → postgres/tcop}/fastpath.h +1 -2
  354. data/ext/pg_query/include/{tcop → postgres/tcop}/pquery.h +7 -1
  355. data/ext/pg_query/include/{tcop → postgres/tcop}/tcopprot.h +19 -14
  356. data/ext/pg_query/include/{tcop → postgres/tcop}/utility.h +7 -3
  357. data/ext/pg_query/include/{tsearch → postgres/tsearch}/ts_cache.h +3 -5
  358. data/ext/pg_query/include/{utils → postgres/utils}/acl.h +37 -71
  359. data/ext/pg_query/include/{utils → postgres/utils}/aclchk_internal.h +1 -1
  360. data/ext/pg_query/include/{utils → postgres/utils}/array.h +26 -2
  361. data/ext/pg_query/include/postgres/utils/backend_progress.h +45 -0
  362. data/ext/pg_query/include/postgres/utils/backend_status.h +342 -0
  363. data/ext/pg_query/include/{utils → postgres/utils}/builtins.h +20 -11
  364. data/ext/pg_query/include/{utils → postgres/utils}/bytea.h +3 -2
  365. data/ext/pg_query/include/{utils → postgres/utils}/catcache.h +1 -1
  366. data/ext/pg_query/include/{utils → postgres/utils}/date.h +37 -9
  367. data/ext/pg_query/include/{utils → postgres/utils}/datetime.h +48 -27
  368. data/ext/pg_query/include/{utils → postgres/utils}/datum.h +9 -1
  369. data/ext/pg_query/include/{utils → postgres/utils}/dsa.h +5 -1
  370. data/ext/pg_query/include/{utils → postgres/utils}/elog.h +154 -48
  371. data/ext/pg_query/include/{utils → postgres/utils}/errcodes.h +2 -0
  372. data/ext/pg_query/include/{utils → postgres/utils}/expandeddatum.h +14 -3
  373. data/ext/pg_query/include/{utils → postgres/utils}/expandedrecord.h +14 -4
  374. data/ext/pg_query/include/{utils → postgres/utils}/float.h +13 -12
  375. data/ext/pg_query/include/{utils → postgres/utils}/fmgroids.h +1353 -696
  376. data/ext/pg_query/include/{utils → postgres/utils}/fmgrprotos.h +243 -18
  377. data/ext/pg_query/include/{utils → postgres/utils}/fmgrtab.h +6 -5
  378. data/ext/pg_query/include/{utils → postgres/utils}/guc.h +120 -121
  379. data/ext/pg_query/include/postgres/utils/guc_hooks.h +163 -0
  380. data/ext/pg_query/include/{utils → postgres/utils}/guc_tables.h +71 -21
  381. data/ext/pg_query/include/{utils → postgres/utils}/hsearch.h +15 -11
  382. data/ext/pg_query/include/{utils → postgres/utils}/inval.h +7 -3
  383. data/ext/pg_query/include/postgres/utils/logtape.h +77 -0
  384. data/ext/pg_query/include/{utils → postgres/utils}/lsyscache.h +16 -1
  385. data/ext/pg_query/include/{utils → postgres/utils}/memdebug.h +1 -1
  386. data/ext/pg_query/include/{utils → postgres/utils}/memutils.h +14 -53
  387. data/ext/pg_query/include/postgres/utils/memutils_internal.h +136 -0
  388. data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +237 -0
  389. data/ext/pg_query/include/{utils → postgres/utils}/numeric.h +38 -9
  390. data/ext/pg_query/include/{utils → postgres/utils}/palloc.h +33 -4
  391. data/ext/pg_query/include/{utils → postgres/utils}/partcache.h +3 -2
  392. data/ext/pg_query/include/{utils → postgres/utils}/pg_locale.h +37 -21
  393. data/ext/pg_query/include/postgres/utils/pgstat_internal.h +814 -0
  394. data/ext/pg_query/include/{utils → postgres/utils}/plancache.h +6 -5
  395. data/ext/pg_query/include/{utils → postgres/utils}/portal.h +12 -1
  396. data/ext/pg_query/include/{utils → postgres/utils}/probes.h +59 -59
  397. data/ext/pg_query/include/postgres/utils/ps_status.h +47 -0
  398. data/ext/pg_query/include/{utils → postgres/utils}/queryenvironment.h +1 -1
  399. data/ext/pg_query/include/postgres/utils/regproc.h +39 -0
  400. data/ext/pg_query/include/{utils → postgres/utils}/rel.h +129 -61
  401. data/ext/pg_query/include/{utils → postgres/utils}/relcache.h +21 -14
  402. data/ext/pg_query/include/{utils → postgres/utils}/reltrigger.h +1 -1
  403. data/ext/pg_query/include/{utils → postgres/utils}/resowner.h +1 -1
  404. data/ext/pg_query/include/{utils → postgres/utils}/ruleutils.h +9 -1
  405. data/ext/pg_query/include/{utils → postgres/utils}/sharedtuplestore.h +1 -1
  406. data/ext/pg_query/include/{utils → postgres/utils}/snapmgr.h +38 -15
  407. data/ext/pg_query/include/{utils → postgres/utils}/snapshot.h +14 -1
  408. data/ext/pg_query/include/{utils → postgres/utils}/sortsupport.h +117 -2
  409. data/ext/pg_query/include/{utils → postgres/utils}/syscache.h +9 -1
  410. data/ext/pg_query/include/{utils → postgres/utils}/timeout.h +11 -4
  411. data/ext/pg_query/include/{utils → postgres/utils}/timestamp.h +46 -15
  412. data/ext/pg_query/include/{utils → postgres/utils}/tuplesort.h +209 -41
  413. data/ext/pg_query/include/{utils → postgres/utils}/tuplestore.h +2 -2
  414. data/ext/pg_query/include/{utils → postgres/utils}/typcache.h +24 -17
  415. data/ext/pg_query/include/{utils → postgres/utils}/varlena.h +17 -3
  416. data/ext/pg_query/include/postgres/utils/wait_event.h +294 -0
  417. data/ext/pg_query/include/{utils → postgres/utils}/xml.h +18 -8
  418. data/ext/pg_query/include/{postgres.h → postgres/varatt.h} +65 -471
  419. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +7494 -6382
  420. data/ext/pg_query/include/protobuf/pg_query.pb.h +116922 -84792
  421. data/ext/pg_query/include/protobuf-c/protobuf-c.h +7 -3
  422. data/ext/pg_query/include/protobuf-c.h +7 -3
  423. data/ext/pg_query/pg_query.c +10 -1
  424. data/ext/pg_query/pg_query.pb-c.c +21026 -17002
  425. data/ext/pg_query/pg_query_deparse.c +1 -9896
  426. data/ext/pg_query/pg_query_fingerprint.c +162 -50
  427. data/ext/pg_query/pg_query_fingerprint.h +3 -1
  428. data/ext/pg_query/pg_query_internal.h +1 -1
  429. data/ext/pg_query/pg_query_json_plpgsql.c +56 -12
  430. data/ext/pg_query/pg_query_normalize.c +259 -64
  431. data/ext/pg_query/pg_query_outfuncs.h +1 -0
  432. data/ext/pg_query/pg_query_outfuncs_json.c +71 -16
  433. data/ext/pg_query/pg_query_outfuncs_protobuf.c +73 -12
  434. data/ext/pg_query/pg_query_parse.c +47 -5
  435. data/ext/pg_query/pg_query_parse_plpgsql.c +86 -21
  436. data/ext/pg_query/pg_query_readfuncs_protobuf.c +43 -8
  437. data/ext/pg_query/pg_query_ruby.c +6 -1
  438. data/ext/pg_query/pg_query_ruby_freebsd.sym +2 -0
  439. data/ext/pg_query/pg_query_scan.c +3 -2
  440. data/ext/pg_query/pg_query_split.c +6 -5
  441. data/ext/pg_query/postgres_deparse.c +11067 -0
  442. data/ext/pg_query/postgres_deparse.h +9 -0
  443. data/ext/pg_query/protobuf-c.c +34 -27
  444. data/ext/pg_query/src_backend_catalog_namespace.c +27 -10
  445. data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
  446. data/ext/pg_query/src_backend_commands_define.c +11 -1
  447. data/ext/pg_query/src_backend_nodes_bitmapset.c +13 -70
  448. data/ext/pg_query/src_backend_nodes_copyfuncs.c +103 -5894
  449. data/ext/pg_query/src_backend_nodes_equalfuncs.c +102 -3830
  450. data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
  451. data/ext/pg_query/src_backend_nodes_list.c +99 -12
  452. data/ext/pg_query/src_backend_nodes_makefuncs.c +99 -4
  453. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +325 -131
  454. data/ext/pg_query/src_backend_nodes_nodes.c +38 -0
  455. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  456. data/ext/pg_query/src_backend_parser_gram.c +36104 -32074
  457. data/ext/pg_query/src_backend_parser_parser.c +53 -8
  458. data/ext/pg_query/src_backend_parser_scan.c +4893 -3701
  459. data/ext/pg_query/src_backend_parser_scansup.c +4 -28
  460. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  461. data/ext/pg_query/src_backend_tcop_postgres.c +133 -105
  462. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  463. data/ext/pg_query/src_backend_utils_adt_datum.c +17 -7
  464. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  465. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  466. data/ext/pg_query/src_backend_utils_adt_numutils.c +489 -0
  467. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +187 -19
  468. data/ext/pg_query/src_backend_utils_error_assert.c +17 -18
  469. data/ext/pg_query/src_backend_utils_error_elog.c +513 -318
  470. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +44 -17
  471. data/ext/pg_query/src_backend_utils_init_globals.c +9 -6
  472. data/ext/pg_query/src_backend_utils_mb_mbutils.c +74 -131
  473. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +492 -0
  474. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +163 -0
  475. data/ext/pg_query/src_backend_utils_mmgr_aset.c +453 -314
  476. data/ext/pg_query/src_backend_utils_mmgr_generation.c +1039 -0
  477. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +549 -76
  478. data/ext/pg_query/src_backend_utils_mmgr_slab.c +1021 -0
  479. data/ext/pg_query/src_common_encnames.c +4 -1
  480. data/ext/pg_query/src_common_hashfn.c +420 -0
  481. data/ext/pg_query/src_common_keywords.c +15 -2
  482. data/ext/pg_query/src_common_kwlist_d.h +545 -498
  483. data/ext/pg_query/src_common_kwlookup.c +1 -1
  484. data/ext/pg_query/src_common_psprintf.c +1 -1
  485. data/ext/pg_query/src_common_stringinfo.c +4 -4
  486. data/ext/pg_query/src_common_wchar.c +717 -113
  487. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +49 -22
  488. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -18
  489. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1136 -1195
  490. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  491. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  492. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
  493. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +60 -60
  494. data/ext/pg_query/src_port_pg_bitutils.c +103 -40
  495. data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
  496. data/ext/pg_query/src_port_qsort.c +12 -224
  497. data/ext/pg_query/src_port_snprintf.c +51 -29
  498. data/ext/pg_query/src_port_strerror.c +9 -19
  499. data/ext/pg_query/src_port_strlcpy.c +79 -0
  500. data/lib/pg_query/deparse.rb +7 -1
  501. data/lib/pg_query/filter_columns.rb +7 -5
  502. data/lib/pg_query/fingerprint.rb +21 -9
  503. data/lib/pg_query/node.rb +18 -13
  504. data/lib/pg_query/param_refs.rb +1 -1
  505. data/lib/pg_query/parse.rb +141 -50
  506. data/lib/pg_query/pg_query_pb.rb +175 -3031
  507. data/lib/pg_query/treewalker.rb +26 -2
  508. data/lib/pg_query/truncate.rb +54 -8
  509. data/lib/pg_query/version.rb +1 -1
  510. data/lib/pg_query.rb +0 -1
  511. metadata +443 -380
  512. data/ext/pg_query/guc-file.c +0 -0
  513. data/ext/pg_query/include/access/rmgr.h +0 -35
  514. data/ext/pg_query/include/access/xloginsert.h +0 -64
  515. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  516. data/ext/pg_query/include/catalog/genbki.h +0 -64
  517. data/ext/pg_query/include/catalog/indexing.h +0 -366
  518. data/ext/pg_query/include/commands/variable.h +0 -38
  519. data/ext/pg_query/include/common/ip.h +0 -37
  520. data/ext/pg_query/include/common/string.h +0 -19
  521. data/ext/pg_query/include/getaddrinfo.h +0 -162
  522. data/ext/pg_query/include/kwlist_d.h +0 -1072
  523. data/ext/pg_query/include/nodes/value.h +0 -61
  524. data/ext/pg_query/include/parser/gram.h +0 -1067
  525. data/ext/pg_query/include/parser/kwlist.h +0 -477
  526. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  527. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  528. data/ext/pg_query/include/parser/parse_target.h +0 -46
  529. data/ext/pg_query/include/parser/parser.h +0 -41
  530. data/ext/pg_query/include/pg_config_os.h +0 -8
  531. data/ext/pg_query/include/pgstat.h +0 -1487
  532. data/ext/pg_query/include/portability/instr_time.h +0 -256
  533. data/ext/pg_query/include/postmaster/fork_process.h +0 -17
  534. data/ext/pg_query/include/replication/logicalproto.h +0 -110
  535. data/ext/pg_query/include/replication/logicalworker.h +0 -19
  536. data/ext/pg_query/include/replication/reorderbuffer.h +0 -467
  537. data/ext/pg_query/include/storage/relfilenode.h +0 -99
  538. data/ext/pg_query/include/utils/dynahash.h +0 -19
  539. data/ext/pg_query/include/utils/pg_lsn.h +0 -29
  540. data/ext/pg_query/include/utils/pidfile.h +0 -56
  541. data/ext/pg_query/include/utils/ps_status.h +0 -25
  542. data/ext/pg_query/include/utils/regproc.h +0 -28
  543. data/ext/pg_query/include/utils/rls.h +0 -50
  544. data/ext/pg_query/include/utils/tzparser.h +0 -39
  545. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -651
  546. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  547. data/ext/pg_query/src_backend_postmaster_postmaster.c +0 -2230
  548. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -370
  549. data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1086
  550. data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1831
  551. data/ext/pg_query/src_common_string.c +0 -86
  552. data/ext/pg_query/src_port_erand48.c +0 -127
  553. data/ext/pg_query/src_port_pgsleep.c +0 -69
  554. data/ext/pg_query/src_port_random.c +0 -31
  555. data/ext/pg_query/src_port_strnlen.c +0 -39
  556. data/lib/pg_query/json_field_names.rb +0 -1402
  557. /data/ext/pg_query/include/{pg_config_ext.h → postgres/pg_config_ext.h} +0 -0
@@ -4,7 +4,7 @@
4
4
  * per-process shared memory data structures
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/storage/proc.h
@@ -32,35 +32,49 @@
32
32
  * If none of the caches have overflowed, we can assume that an XID that's not
33
33
  * listed anywhere in the PGPROC array is not a running transaction. Else we
34
34
  * have to look at pg_subtrans.
35
+ *
36
+ * See src/test/isolation/specs/subxid-overflow.spec if you change this.
35
37
  */
36
38
  #define PGPROC_MAX_CACHED_SUBXIDS 64 /* XXX guessed-at value */
37
39
 
40
+ typedef struct XidCacheStatus
41
+ {
42
+ /* number of cached subxids, never more than PGPROC_MAX_CACHED_SUBXIDS */
43
+ uint8 count;
44
+ /* has PGPROC->subxids overflowed */
45
+ bool overflowed;
46
+ } XidCacheStatus;
47
+
38
48
  struct XidCache
39
49
  {
40
50
  TransactionId xids[PGPROC_MAX_CACHED_SUBXIDS];
41
51
  };
42
52
 
43
53
  /*
44
- * Flags for PGXACT->vacuumFlags
45
- *
46
- * Note: If you modify these flags, you need to modify PROCARRAY_XXX flags
47
- * in src/include/storage/procarray.h.
48
- *
49
- * PROC_RESERVED may later be assigned for use in vacuumFlags, but its value is
50
- * used for PROCARRAY_SLOTS_XMIN in procarray.h, so GetOldestXmin won't be able
51
- * to match and ignore processes with this flag set.
54
+ * Flags for PGPROC->statusFlags and PROC_HDR->statusFlags[]
52
55
  */
53
56
  #define PROC_IS_AUTOVACUUM 0x01 /* is it an autovac worker? */
54
57
  #define PROC_IN_VACUUM 0x02 /* currently running lazy vacuum */
55
- #define PROC_IN_ANALYZE 0x04 /* currently running analyze */
58
+ #define PROC_IN_SAFE_IC 0x04 /* currently running CREATE INDEX
59
+ * CONCURRENTLY or REINDEX
60
+ * CONCURRENTLY on non-expressional,
61
+ * non-partial index */
56
62
  #define PROC_VACUUM_FOR_WRAPAROUND 0x08 /* set by autovac only */
57
63
  #define PROC_IN_LOGICAL_DECODING 0x10 /* currently doing logical
58
64
  * decoding outside xact */
59
- #define PROC_RESERVED 0x20 /* reserved for procarray */
65
+ #define PROC_AFFECTS_ALL_HORIZONS 0x20 /* this proc's xmin must be
66
+ * included in vacuum horizons
67
+ * in all databases */
60
68
 
61
69
  /* flags reset at EOXact */
62
70
  #define PROC_VACUUM_STATE_MASK \
63
- (PROC_IN_VACUUM | PROC_IN_ANALYZE | PROC_VACUUM_FOR_WRAPAROUND)
71
+ (PROC_IN_VACUUM | PROC_IN_SAFE_IC | PROC_VACUUM_FOR_WRAPAROUND)
72
+
73
+ /*
74
+ * Xmin-related flags. Make sure any flags that affect how the process' Xmin
75
+ * value is interpreted by VACUUM are included here.
76
+ */
77
+ #define PROC_XMIN_FLAGS (PROC_IN_VACUUM | PROC_IN_SAFE_IC)
64
78
 
65
79
  /*
66
80
  * We allow a small number of "weak" relation locks (AccessShareLock,
@@ -76,6 +90,48 @@ struct XidCache
76
90
  */
77
91
  #define INVALID_PGPROCNO PG_INT32_MAX
78
92
 
93
+ /*
94
+ * Flags for PGPROC.delayChkptFlags
95
+ *
96
+ * These flags can be used to delay the start or completion of a checkpoint
97
+ * for short periods. A flag is in effect if the corresponding bit is set in
98
+ * the PGPROC of any backend.
99
+ *
100
+ * For our purposes here, a checkpoint has three phases: (1) determine the
101
+ * location to which the redo pointer will be moved, (2) write all the
102
+ * data durably to disk, and (3) WAL-log the checkpoint.
103
+ *
104
+ * Setting DELAY_CHKPT_START prevents the system from moving from phase 1
105
+ * to phase 2. This is useful when we are performing a WAL-logged modification
106
+ * of data that will be flushed to disk in phase 2. By setting this flag
107
+ * before writing WAL and clearing it after we've both written WAL and
108
+ * performed the corresponding modification, we ensure that if the WAL record
109
+ * is inserted prior to the new redo point, the corresponding data changes will
110
+ * also be flushed to disk before the checkpoint can complete. (In the
111
+ * extremely common case where the data being modified is in shared buffers
112
+ * and we acquire an exclusive content lock on the relevant buffers before
113
+ * writing WAL, this mechanism is not needed, because phase 2 will block
114
+ * until we release the content lock and then flush the modified data to
115
+ * disk.)
116
+ *
117
+ * Setting DELAY_CHKPT_COMPLETE prevents the system from moving from phase 2
118
+ * to phase 3. This is useful if we are performing a WAL-logged operation that
119
+ * might invalidate buffers, such as relation truncation. In this case, we need
120
+ * to ensure that any buffers which were invalidated and thus not flushed by
121
+ * the checkpoint are actually destroyed on disk. Replay can cope with a file
122
+ * or block that doesn't exist, but not with a block that has the wrong
123
+ * contents.
124
+ */
125
+ #define DELAY_CHKPT_START (1<<0)
126
+ #define DELAY_CHKPT_COMPLETE (1<<1)
127
+
128
+ typedef enum
129
+ {
130
+ PROC_WAIT_STATUS_OK,
131
+ PROC_WAIT_STATUS_WAITING,
132
+ PROC_WAIT_STATUS_ERROR,
133
+ } ProcWaitStatus;
134
+
79
135
  /*
80
136
  * Each backend has a PGPROC struct in shared memory. There is also a list of
81
137
  * currently-unused PGPROC structs that will be reallocated to new backends.
@@ -91,23 +147,57 @@ struct XidCache
91
147
  * distinguished from a real one at need by the fact that it has pid == 0.
92
148
  * The semaphore and lock-activity fields in a prepared-xact PGPROC are unused,
93
149
  * but its myProcLocks[] lists are valid.
150
+ *
151
+ * We allow many fields of this struct to be accessed without locks, such as
152
+ * delayChkptFlags and isBackgroundWorker. However, keep in mind that writing
153
+ * mirrored ones (see below) requires holding ProcArrayLock or XidGenLock in
154
+ * at least shared mode, so that pgxactoff does not change concurrently.
155
+ *
156
+ * Mirrored fields:
157
+ *
158
+ * Some fields in PGPROC (see "mirrored in ..." comment) are mirrored into an
159
+ * element of more densely packed ProcGlobal arrays. These arrays are indexed
160
+ * by PGPROC->pgxactoff. Both copies need to be maintained coherently.
161
+ *
162
+ * NB: The pgxactoff indexed value can *never* be accessed without holding
163
+ * locks.
164
+ *
165
+ * See PROC_HDR for details.
94
166
  */
95
167
  struct PGPROC
96
168
  {
97
169
  /* proc->links MUST BE FIRST IN STRUCT (see ProcSleep,ProcWakeup,etc) */
98
- SHM_QUEUE links; /* list link if process is in a list */
99
- PGPROC **procgloballist; /* procglobal list that owns this PGPROC */
170
+ dlist_node links; /* list link if process is in a list */
171
+ dlist_head *procgloballist; /* procglobal list that owns this PGPROC */
100
172
 
101
173
  PGSemaphore sem; /* ONE semaphore to sleep on */
102
- int waitStatus; /* STATUS_WAITING, STATUS_OK or STATUS_ERROR */
174
+ ProcWaitStatus waitStatus;
103
175
 
104
176
  Latch procLatch; /* generic latch for process */
105
177
 
178
+
179
+ TransactionId xid; /* id of top-level transaction currently being
180
+ * executed by this proc, if running and XID
181
+ * is assigned; else InvalidTransactionId.
182
+ * mirrored in ProcGlobal->xids[pgxactoff] */
183
+
184
+ TransactionId xmin; /* minimal running XID as it was when we were
185
+ * starting our xact, excluding LAZY VACUUM:
186
+ * vacuum must not remove tuples deleted by
187
+ * xid >= xmin ! */
188
+
106
189
  LocalTransactionId lxid; /* local id of top-level transaction currently
107
190
  * being executed by this proc, if running;
108
191
  * else InvalidLocalTransactionId */
109
192
  int pid; /* Backend's process ID; 0 if prepared xact */
110
- int pgprocno;
193
+
194
+ int pgxactoff; /* offset into various ProcGlobal->arrays with
195
+ * data mirrored from this PGPROC */
196
+
197
+ int pgprocno; /* Number of this PGPROC in
198
+ * ProcGlobal->allProcs array. This is set
199
+ * once by InitProcGlobal().
200
+ * ProcGlobal->allProcs[n].pgprocno == n */
111
201
 
112
202
  /* These fields are zero while a backend is still starting up: */
113
203
  BackendId backendId; /* This backend's backend ID (if assigned) */
@@ -127,7 +217,7 @@ struct PGPROC
127
217
  bool recoveryConflictPending;
128
218
 
129
219
  /* Info about LWLock the process is currently waiting for, if any. */
130
- bool lwWaiting; /* true if waiting for an LW lock */
220
+ uint8 lwWaiting; /* see LWLockWaitState */
131
221
  uint8 lwWaitMode; /* lwlock mode being waited for */
132
222
  proclist_node lwWaitLink; /* position in LW lock wait list */
133
223
 
@@ -141,8 +231,14 @@ struct PGPROC
141
231
  LOCKMODE waitLockMode; /* type of lock we're waiting for */
142
232
  LOCKMASK heldLocks; /* bitmask for lock types already held on this
143
233
  * lock object by this backend */
234
+ pg_atomic_uint64 waitStart; /* time at which wait for lock acquisition
235
+ * started */
236
+
237
+ int delayChkptFlags; /* for DELAY_CHKPT_* flags */
144
238
 
145
- bool delayChkpt; /* true if this proc delays checkpoint start */
239
+ uint8 statusFlags; /* this backend's status flags, see PROC_*
240
+ * above. mirrored in
241
+ * ProcGlobal->statusFlags[pgxactoff] */
146
242
 
147
243
  /*
148
244
  * Info to allow us to wait for synchronous replication, if needed.
@@ -152,15 +248,17 @@ struct PGPROC
152
248
  */
153
249
  XLogRecPtr waitLSN; /* waiting for this LSN or higher */
154
250
  int syncRepState; /* wait state for sync rep */
155
- SHM_QUEUE syncRepLinks; /* list link if process is in syncrep queue */
251
+ dlist_node syncRepLinks; /* list link if process is in syncrep queue */
156
252
 
157
253
  /*
158
254
  * All PROCLOCK objects for locks held or awaited by this backend are
159
255
  * linked into one of these lists, according to the partition number of
160
256
  * their lock.
161
257
  */
162
- SHM_QUEUE myProcLocks[NUM_LOCK_PARTITIONS];
258
+ dlist_head myProcLocks[NUM_LOCK_PARTITIONS];
163
259
 
260
+ XidCacheStatus subxidStatus; /* mirrored with
261
+ * ProcGlobal->subxidStates[i] */
164
262
  struct XidCache subxids; /* cache for subtransaction XIDs */
165
263
 
166
264
  /* Support for group XID clearing. */
@@ -209,52 +307,91 @@ struct PGPROC
209
307
 
210
308
 
211
309
  extern PGDLLIMPORT PGPROC *MyProc;
212
- extern PGDLLIMPORT struct PGXACT *MyPgXact;
213
-
214
- /*
215
- * Prior to PostgreSQL 9.2, the fields below were stored as part of the
216
- * PGPROC. However, benchmarking revealed that packing these particular
217
- * members into a separate array as tightly as possible sped up GetSnapshotData
218
- * considerably on systems with many CPU cores, by reducing the number of
219
- * cache lines needing to be fetched. Thus, think very carefully before adding
220
- * anything else here.
221
- */
222
- typedef struct PGXACT
223
- {
224
- TransactionId xid; /* id of top-level transaction currently being
225
- * executed by this proc, if running and XID
226
- * is assigned; else InvalidTransactionId */
227
-
228
- TransactionId xmin; /* minimal running XID as it was when we were
229
- * starting our xact, excluding LAZY VACUUM:
230
- * vacuum must not remove tuples deleted by
231
- * xid >= xmin ! */
232
-
233
- uint8 vacuumFlags; /* vacuum-related flags, see above */
234
- bool overflowed;
235
-
236
- uint8 nxids;
237
- } PGXACT;
238
310
 
239
311
  /*
240
312
  * There is one ProcGlobal struct for the whole database cluster.
313
+ *
314
+ * Adding/Removing an entry into the procarray requires holding *both*
315
+ * ProcArrayLock and XidGenLock in exclusive mode (in that order). Both are
316
+ * needed because the dense arrays (see below) are accessed from
317
+ * GetNewTransactionId() and GetSnapshotData(), and we don't want to add
318
+ * further contention by both using the same lock. Adding/Removing a procarray
319
+ * entry is much less frequent.
320
+ *
321
+ * Some fields in PGPROC are mirrored into more densely packed arrays (e.g.
322
+ * xids), with one entry for each backend. These arrays only contain entries
323
+ * for PGPROCs that have been added to the shared array with ProcArrayAdd()
324
+ * (in contrast to PGPROC array which has unused PGPROCs interspersed).
325
+ *
326
+ * The dense arrays are indexed by PGPROC->pgxactoff. Any concurrent
327
+ * ProcArrayAdd() / ProcArrayRemove() can lead to pgxactoff of a procarray
328
+ * member to change. Therefore it is only safe to use PGPROC->pgxactoff to
329
+ * access the dense array while holding either ProcArrayLock or XidGenLock.
330
+ *
331
+ * As long as a PGPROC is in the procarray, the mirrored values need to be
332
+ * maintained in both places in a coherent manner.
333
+ *
334
+ * The denser separate arrays are beneficial for three main reasons: First, to
335
+ * allow for as tight loops accessing the data as possible. Second, to prevent
336
+ * updates of frequently changing data (e.g. xmin) from invalidating
337
+ * cachelines also containing less frequently changing data (e.g. xid,
338
+ * statusFlags). Third to condense frequently accessed data into as few
339
+ * cachelines as possible.
340
+ *
341
+ * There are two main reasons to have the data mirrored between these dense
342
+ * arrays and PGPROC. First, as explained above, a PGPROC's array entries can
343
+ * only be accessed with either ProcArrayLock or XidGenLock held, whereas the
344
+ * PGPROC entries do not require that (obviously there may still be locking
345
+ * requirements around the individual field, separate from the concerns
346
+ * here). That is particularly important for a backend to efficiently checks
347
+ * it own values, which it often can safely do without locking. Second, the
348
+ * PGPROC fields allow to avoid unnecessary accesses and modification to the
349
+ * dense arrays. A backend's own PGPROC is more likely to be in a local cache,
350
+ * whereas the cachelines for the dense array will be modified by other
351
+ * backends (often removing it from the cache for other cores/sockets). At
352
+ * commit/abort time a check of the PGPROC value can avoid accessing/dirtying
353
+ * the corresponding array value.
354
+ *
355
+ * Basically it makes sense to access the PGPROC variable when checking a
356
+ * single backend's data, especially when already looking at the PGPROC for
357
+ * other reasons already. It makes sense to look at the "dense" arrays if we
358
+ * need to look at many / most entries, because we then benefit from the
359
+ * reduced indirection and better cross-process cache-ability.
360
+ *
361
+ * When entering a PGPROC for 2PC transactions with ProcArrayAdd(), the data
362
+ * in the dense arrays is initialized from the PGPROC while it already holds
363
+ * ProcArrayLock.
241
364
  */
242
365
  typedef struct PROC_HDR
243
366
  {
244
367
  /* Array of PGPROC structures (not including dummies for prepared txns) */
245
368
  PGPROC *allProcs;
246
- /* Array of PGXACT structures (not including dummies for prepared txns) */
247
- PGXACT *allPgXact;
369
+
370
+ /* Array mirroring PGPROC.xid for each PGPROC currently in the procarray */
371
+ TransactionId *xids;
372
+
373
+ /*
374
+ * Array mirroring PGPROC.subxidStatus for each PGPROC currently in the
375
+ * procarray.
376
+ */
377
+ XidCacheStatus *subxidStates;
378
+
379
+ /*
380
+ * Array mirroring PGPROC.statusFlags for each PGPROC currently in the
381
+ * procarray.
382
+ */
383
+ uint8 *statusFlags;
384
+
248
385
  /* Length of allProcs array */
249
386
  uint32 allProcCount;
250
387
  /* Head of list of free PGPROC structures */
251
- PGPROC *freeProcs;
388
+ dlist_head freeProcs;
252
389
  /* Head of list of autovacuum's free PGPROC structures */
253
- PGPROC *autovacFreeProcs;
390
+ dlist_head autovacFreeProcs;
254
391
  /* Head of list of bgworker free PGPROC structures */
255
- PGPROC *bgworkerFreeProcs;
392
+ dlist_head bgworkerFreeProcs;
256
393
  /* Head of list of walsender free PGPROC structures */
257
- PGPROC *walsenderFreeProcs;
394
+ dlist_head walsenderFreeProcs;
258
395
  /* First pgproc waiting for group XID clear */
259
396
  pg_atomic_uint32 procArrayGroupFirst;
260
397
  /* First pgproc waiting for group transaction status update */
@@ -265,16 +402,13 @@ typedef struct PROC_HDR
265
402
  Latch *checkpointerLatch;
266
403
  /* Current shared estimate of appropriate spins_per_delay value */
267
404
  int spins_per_delay;
268
- /* The proc of the Startup process, since not in ProcArray */
269
- PGPROC *startupProc;
270
- int startupProcPid;
271
405
  /* Buffer id of the buffer that Startup process waits for pin on, or -1 */
272
406
  int startupBufferPinWaitBufId;
273
407
  } PROC_HDR;
274
408
 
275
409
  extern PGDLLIMPORT PROC_HDR *ProcGlobal;
276
410
 
277
- extern PGPROC *PreparedXactProcs;
411
+ extern PGDLLIMPORT PGPROC *PreparedXactProcs;
278
412
 
279
413
  /* Accessor for PGPROC given a pgprocno. */
280
414
  #define GetPGProcByNumber(n) (&ProcGlobal->allProcs[(n)])
@@ -283,18 +417,19 @@ extern PGPROC *PreparedXactProcs;
283
417
  * We set aside some extra PGPROC structures for auxiliary processes,
284
418
  * ie things that aren't full-fledged backends but need shmem access.
285
419
  *
286
- * Background writer, checkpointer and WAL writer run during normal operation.
287
- * Startup process and WAL receiver also consume 2 slots, but WAL writer is
288
- * launched only after startup has exited, so we only need 4 slots.
420
+ * Background writer, checkpointer, WAL writer and archiver run during normal
421
+ * operation. Startup process and WAL receiver also consume 2 slots, but WAL
422
+ * writer is launched only after startup has exited, so we only need 5 slots.
289
423
  */
290
- #define NUM_AUXILIARY_PROCS 4
424
+ #define NUM_AUXILIARY_PROCS 5
291
425
 
292
426
  /* configurable options */
293
427
  extern PGDLLIMPORT int DeadlockTimeout;
294
428
  extern PGDLLIMPORT int StatementTimeout;
295
429
  extern PGDLLIMPORT int LockTimeout;
296
430
  extern PGDLLIMPORT int IdleInTransactionSessionTimeout;
297
- extern bool log_lock_waits;
431
+ extern PGDLLIMPORT int IdleSessionTimeout;
432
+ extern PGDLLIMPORT bool log_lock_waits;
298
433
 
299
434
 
300
435
  /*
@@ -307,23 +442,21 @@ extern void InitProcess(void);
307
442
  extern void InitProcessPhase2(void);
308
443
  extern void InitAuxiliaryProcess(void);
309
444
 
310
- extern void PublishStartupProcessInformation(void);
311
445
  extern void SetStartupBufferPinWaitBufId(int bufid);
312
446
  extern int GetStartupBufferPinWaitBufId(void);
313
447
 
314
- extern bool HaveNFreeProcs(int n);
448
+ extern bool HaveNFreeProcs(int n, int *nfree);
315
449
  extern void ProcReleaseLocks(bool isCommit);
316
450
 
317
- extern void ProcQueueInit(PROC_QUEUE *queue);
318
- extern int ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable);
319
- extern PGPROC *ProcWakeup(PGPROC *proc, int waitStatus);
451
+ extern ProcWaitStatus ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable);
452
+ extern void ProcWakeup(PGPROC *proc, ProcWaitStatus waitStatus);
320
453
  extern void ProcLockWakeup(LockMethod lockMethodTable, LOCK *lock);
321
454
  extern void CheckDeadLockAlert(void);
322
455
  extern bool IsWaitingForLock(void);
323
456
  extern void LockErrorCleanup(void);
324
457
 
325
458
  extern void ProcWaitForSignal(uint32 wait_event_info);
326
- extern void ProcSendSignal(int pid);
459
+ extern void ProcSendSignal(int pgprocno);
327
460
 
328
461
  extern PGPROC *AuxiliaryPidGetProc(int pid);
329
462
 
@@ -0,0 +1,99 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * procarray.h
4
+ * POSTGRES process array definitions.
5
+ *
6
+ *
7
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
8
+ * Portions Copyright (c) 1994, Regents of the University of California
9
+ *
10
+ * src/include/storage/procarray.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef PROCARRAY_H
15
+ #define PROCARRAY_H
16
+
17
+ #include "storage/lock.h"
18
+ #include "storage/standby.h"
19
+ #include "utils/relcache.h"
20
+ #include "utils/snapshot.h"
21
+
22
+
23
+ extern Size ProcArrayShmemSize(void);
24
+ extern void CreateSharedProcArray(void);
25
+ extern void ProcArrayAdd(PGPROC *proc);
26
+ extern void ProcArrayRemove(PGPROC *proc, TransactionId latestXid);
27
+
28
+ extern void ProcArrayEndTransaction(PGPROC *proc, TransactionId latestXid);
29
+ extern void ProcArrayClearTransaction(PGPROC *proc);
30
+
31
+ extern void ProcArrayInitRecovery(TransactionId initializedUptoXID);
32
+ extern void ProcArrayApplyRecoveryInfo(RunningTransactions running);
33
+ extern void ProcArrayApplyXidAssignment(TransactionId topxid,
34
+ int nsubxids, TransactionId *subxids);
35
+
36
+ extern void RecordKnownAssignedTransactionIds(TransactionId xid);
37
+ extern void ExpireTreeKnownAssignedTransactionIds(TransactionId xid,
38
+ int nsubxids, TransactionId *subxids,
39
+ TransactionId max_xid);
40
+ extern void ExpireAllKnownAssignedTransactionIds(void);
41
+ extern void ExpireOldKnownAssignedTransactionIds(TransactionId xid);
42
+ extern void KnownAssignedTransactionIdsIdleMaintenance(void);
43
+
44
+ extern int GetMaxSnapshotXidCount(void);
45
+ extern int GetMaxSnapshotSubxidCount(void);
46
+
47
+ extern Snapshot GetSnapshotData(Snapshot snapshot);
48
+
49
+ extern bool ProcArrayInstallImportedXmin(TransactionId xmin,
50
+ VirtualTransactionId *sourcevxid);
51
+ extern bool ProcArrayInstallRestoredXmin(TransactionId xmin, PGPROC *proc);
52
+
53
+ extern RunningTransactions GetRunningTransactionData(void);
54
+
55
+ extern bool TransactionIdIsInProgress(TransactionId xid);
56
+ extern bool TransactionIdIsActive(TransactionId xid);
57
+ extern TransactionId GetOldestNonRemovableTransactionId(Relation rel);
58
+ extern TransactionId GetOldestTransactionIdConsideredRunning(void);
59
+ extern TransactionId GetOldestActiveTransactionId(void);
60
+ extern TransactionId GetOldestSafeDecodingTransactionId(bool catalogOnly);
61
+ extern void GetReplicationHorizons(TransactionId *xmin, TransactionId *catalog_xmin);
62
+
63
+ extern VirtualTransactionId *GetVirtualXIDsDelayingChkpt(int *nvxids, int type);
64
+ extern bool HaveVirtualXIDsDelayingChkpt(VirtualTransactionId *vxids,
65
+ int nvxids, int type);
66
+
67
+ extern PGPROC *BackendPidGetProc(int pid);
68
+ extern PGPROC *BackendPidGetProcWithLock(int pid);
69
+ extern int BackendXidGetPid(TransactionId xid);
70
+ extern bool IsBackendPid(int pid);
71
+
72
+ extern VirtualTransactionId *GetCurrentVirtualXIDs(TransactionId limitXmin,
73
+ bool excludeXmin0, bool allDbs, int excludeVacuum,
74
+ int *nvxids);
75
+ extern VirtualTransactionId *GetConflictingVirtualXIDs(TransactionId limitXmin, Oid dbOid);
76
+ extern pid_t CancelVirtualTransaction(VirtualTransactionId vxid, ProcSignalReason sigmode);
77
+ extern pid_t SignalVirtualTransaction(VirtualTransactionId vxid, ProcSignalReason sigmode,
78
+ bool conflictPending);
79
+
80
+ extern bool MinimumActiveBackends(int min);
81
+ extern int CountDBBackends(Oid databaseid);
82
+ extern int CountDBConnections(Oid databaseid);
83
+ extern void CancelDBBackends(Oid databaseid, ProcSignalReason sigmode, bool conflictPending);
84
+ extern int CountUserBackends(Oid roleid);
85
+ extern bool CountOtherDBBackends(Oid databaseId,
86
+ int *nbackends, int *nprepared);
87
+ extern void TerminateOtherDBBackends(Oid databaseId);
88
+
89
+ extern void XidCacheRemoveRunningXids(TransactionId xid,
90
+ int nxids, const TransactionId *xids,
91
+ TransactionId latestXid);
92
+
93
+ extern void ProcArraySetReplicationSlotXmin(TransactionId xmin,
94
+ TransactionId catalog_xmin, bool already_locked);
95
+
96
+ extern void ProcArrayGetReplicationSlotXmin(TransactionId *xmin,
97
+ TransactionId *catalog_xmin);
98
+
99
+ #endif /* PROCARRAY_H */
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * See proclist.h for functions that operate on these types.
7
7
  *
8
- * Portions Copyright (c) 2016-2020, PostgreSQL Global Development Group
8
+ * Portions Copyright (c) 2016-2023, PostgreSQL Global Development Group
9
9
  *
10
10
  * IDENTIFICATION
11
11
  * src/include/storage/proclist_types.h
@@ -4,7 +4,7 @@
4
4
  * Routines for interprocess signaling
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/storage/procsignal.h
@@ -34,12 +34,15 @@ typedef enum
34
34
  PROCSIG_PARALLEL_MESSAGE, /* message from cooperating parallel backend */
35
35
  PROCSIG_WALSND_INIT_STOPPING, /* ask walsenders to prepare for shutdown */
36
36
  PROCSIG_BARRIER, /* global barrier interrupt */
37
+ PROCSIG_LOG_MEMORY_CONTEXT, /* ask backend to log the memory contexts */
38
+ PROCSIG_PARALLEL_APPLY_MESSAGE, /* Message from parallel apply workers */
37
39
 
38
40
  /* Recovery conflict reasons */
39
41
  PROCSIG_RECOVERY_CONFLICT_DATABASE,
40
42
  PROCSIG_RECOVERY_CONFLICT_TABLESPACE,
41
43
  PROCSIG_RECOVERY_CONFLICT_LOCK,
42
44
  PROCSIG_RECOVERY_CONFLICT_SNAPSHOT,
45
+ PROCSIG_RECOVERY_CONFLICT_LOGICALSLOT,
43
46
  PROCSIG_RECOVERY_CONFLICT_BUFFERPIN,
44
47
  PROCSIG_RECOVERY_CONFLICT_STARTUP_DEADLOCK,
45
48
 
@@ -48,12 +51,7 @@ typedef enum
48
51
 
49
52
  typedef enum
50
53
  {
51
- /*
52
- * XXX. PROCSIGNAL_BARRIER_PLACEHOLDER should be replaced when the first
53
- * real user of the ProcSignalBarrier mechanism is added. It's just here
54
- * for now because we can't have an empty enum.
55
- */
56
- PROCSIGNAL_BARRIER_PLACEHOLDER = 0
54
+ PROCSIGNAL_BARRIER_SMGRRELEASE /* ask smgr to close files */
57
55
  } ProcSignalBarrierType;
58
56
 
59
57
  /*
@@ -0,0 +1,99 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * relfilelocator.h
4
+ * Physical access information for relations.
5
+ *
6
+ *
7
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
8
+ * Portions Copyright (c) 1994, Regents of the University of California
9
+ *
10
+ * src/include/storage/relfilelocator.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef RELFILELOCATOR_H
15
+ #define RELFILELOCATOR_H
16
+
17
+ #include "common/relpath.h"
18
+ #include "storage/backendid.h"
19
+
20
+ /*
21
+ * RelFileLocator must provide all that we need to know to physically access
22
+ * a relation, with the exception of the backend ID, which can be provided
23
+ * separately. Note, however, that a "physical" relation is comprised of
24
+ * multiple files on the filesystem, as each fork is stored as a separate
25
+ * file, and each fork can be divided into multiple segments. See md.c.
26
+ *
27
+ * spcOid identifies the tablespace of the relation. It corresponds to
28
+ * pg_tablespace.oid.
29
+ *
30
+ * dbOid identifies the database of the relation. It is zero for
31
+ * "shared" relations (those common to all databases of a cluster).
32
+ * Nonzero dbOid values correspond to pg_database.oid.
33
+ *
34
+ * relNumber identifies the specific relation. relNumber corresponds to
35
+ * pg_class.relfilenode (NOT pg_class.oid, because we need to be able
36
+ * to assign new physical files to relations in some situations).
37
+ * Notice that relNumber is only unique within a database in a particular
38
+ * tablespace.
39
+ *
40
+ * Note: spcOid must be GLOBALTABLESPACE_OID if and only if dbOid is
41
+ * zero. We support shared relations only in the "global" tablespace.
42
+ *
43
+ * Note: in pg_class we allow reltablespace == 0 to denote that the
44
+ * relation is stored in its database's "default" tablespace (as
45
+ * identified by pg_database.dattablespace). However this shorthand
46
+ * is NOT allowed in RelFileLocator structs --- the real tablespace ID
47
+ * must be supplied when setting spcOid.
48
+ *
49
+ * Note: in pg_class, relfilenode can be zero to denote that the relation
50
+ * is a "mapped" relation, whose current true filenode number is available
51
+ * from relmapper.c. Again, this case is NOT allowed in RelFileLocators.
52
+ *
53
+ * Note: various places use RelFileLocator in hashtable keys. Therefore,
54
+ * there *must not* be any unused padding bytes in this struct. That
55
+ * should be safe as long as all the fields are of type Oid.
56
+ */
57
+ typedef struct RelFileLocator
58
+ {
59
+ Oid spcOid; /* tablespace */
60
+ Oid dbOid; /* database */
61
+ RelFileNumber relNumber; /* relation */
62
+ } RelFileLocator;
63
+
64
+ /*
65
+ * Augmenting a relfilelocator with the backend ID provides all the information
66
+ * we need to locate the physical storage. The backend ID is InvalidBackendId
67
+ * for regular relations (those accessible to more than one backend), or the
68
+ * owning backend's ID for backend-local relations. Backend-local relations
69
+ * are always transient and removed in case of a database crash; they are
70
+ * never WAL-logged or fsync'd.
71
+ */
72
+ typedef struct RelFileLocatorBackend
73
+ {
74
+ RelFileLocator locator;
75
+ BackendId backend;
76
+ } RelFileLocatorBackend;
77
+
78
+ #define RelFileLocatorBackendIsTemp(rlocator) \
79
+ ((rlocator).backend != InvalidBackendId)
80
+
81
+ /*
82
+ * Note: RelFileLocatorEquals and RelFileLocatorBackendEquals compare relNumber
83
+ * first since that is most likely to be different in two unequal
84
+ * RelFileLocators. It is probably redundant to compare spcOid if the other
85
+ * fields are found equal, but do it anyway to be sure. Likewise for checking
86
+ * the backend ID in RelFileLocatorBackendEquals.
87
+ */
88
+ #define RelFileLocatorEquals(locator1, locator2) \
89
+ ((locator1).relNumber == (locator2).relNumber && \
90
+ (locator1).dbOid == (locator2).dbOid && \
91
+ (locator1).spcOid == (locator2).spcOid)
92
+
93
+ #define RelFileLocatorBackendEquals(locator1, locator2) \
94
+ ((locator1).locator.relNumber == (locator2).locator.relNumber && \
95
+ (locator1).locator.dbOid == (locator2).locator.dbOid && \
96
+ (locator1).backend == (locator2).backend && \
97
+ (locator1).locator.spcOid == (locator2).locator.spcOid)
98
+
99
+ #endif /* RELFILELOCATOR_H */