pg_query 2.1.0 → 4.2.1

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 (472) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +104 -0
  3. data/README.md +59 -31
  4. data/Rakefile +2 -2
  5. data/ext/pg_query/extconf.rb +8 -2
  6. data/ext/pg_query/include/access/amapi.h +45 -1
  7. data/ext/pg_query/include/access/attmap.h +1 -1
  8. data/ext/pg_query/include/access/attnum.h +2 -2
  9. data/ext/pg_query/include/access/clog.h +4 -2
  10. data/ext/pg_query/include/access/commit_ts.h +6 -9
  11. data/ext/pg_query/include/access/detoast.h +1 -11
  12. data/ext/pg_query/include/access/genam.h +15 -12
  13. data/ext/pg_query/include/access/gin.h +2 -2
  14. data/ext/pg_query/include/access/htup.h +1 -1
  15. data/ext/pg_query/include/access/htup_details.h +75 -87
  16. data/ext/pg_query/include/access/itup.h +7 -1
  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 +17 -2
  21. data/ext/pg_query/include/access/rmgr.h +30 -3
  22. data/ext/pg_query/include/access/rmgrlist.h +23 -23
  23. data/ext/pg_query/include/access/sdir.h +1 -1
  24. data/ext/pg_query/include/access/skey.h +1 -1
  25. data/ext/pg_query/include/access/stratnum.h +4 -2
  26. data/ext/pg_query/include/access/sysattr.h +1 -1
  27. data/ext/pg_query/include/access/table.h +2 -1
  28. data/ext/pg_query/include/access/tableam.h +272 -20
  29. data/ext/pg_query/include/access/toast_compression.h +73 -0
  30. data/ext/pg_query/include/access/transam.h +123 -13
  31. data/ext/pg_query/include/access/tupconvert.h +1 -1
  32. data/ext/pg_query/include/access/tupdesc.h +1 -1
  33. data/ext/pg_query/include/access/tupmacs.h +3 -3
  34. data/ext/pg_query/include/access/twophase.h +5 -1
  35. data/ext/pg_query/include/access/xact.h +79 -19
  36. data/ext/pg_query/include/access/xlog.h +60 -155
  37. data/ext/pg_query/include/access/xlog_internal.h +50 -14
  38. data/ext/pg_query/include/access/xlogdefs.h +8 -16
  39. data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
  40. data/ext/pg_query/include/access/xlogreader.h +148 -32
  41. data/ext/pg_query/include/access/xlogrecord.h +18 -9
  42. data/ext/pg_query/include/access/xlogrecovery.h +157 -0
  43. data/ext/pg_query/include/c.h +101 -44
  44. data/ext/pg_query/include/catalog/catalog.h +3 -1
  45. data/ext/pg_query/include/catalog/catversion.h +2 -2
  46. data/ext/pg_query/include/catalog/dependency.h +10 -16
  47. data/ext/pg_query/include/catalog/genbki.h +83 -5
  48. data/ext/pg_query/include/catalog/index.h +18 -3
  49. data/ext/pg_query/include/catalog/indexing.h +12 -324
  50. data/ext/pg_query/include/catalog/namespace.h +4 -2
  51. data/ext/pg_query/include/catalog/objectaccess.h +70 -2
  52. data/ext/pg_query/include/catalog/objectaddress.h +11 -6
  53. data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
  54. data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
  55. data/ext/pg_query/include/catalog/pg_am.h +4 -1
  56. data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
  57. data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
  58. data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
  59. data/ext/pg_query/include/catalog/pg_authid.h +7 -2
  60. data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
  61. data/ext/pg_query/include/catalog/pg_class.h +45 -15
  62. data/ext/pg_query/include/catalog/pg_class_d.h +31 -2
  63. data/ext/pg_query/include/catalog/pg_collation.h +33 -8
  64. data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
  65. data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
  66. data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
  67. data/ext/pg_query/include/catalog/pg_control.h +5 -5
  68. data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
  69. data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
  70. data/ext/pg_query/include/catalog/pg_depend.h +11 -7
  71. data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
  72. data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
  73. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
  74. data/ext/pg_query/include/catalog/pg_index.h +17 -7
  75. data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
  76. data/ext/pg_query/include/catalog/pg_language.h +10 -5
  77. data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
  78. data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
  79. data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
  80. data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
  81. data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
  82. data/ext/pg_query/include/catalog/pg_operator.h +21 -16
  83. data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
  84. data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
  85. data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
  86. data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
  87. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
  88. data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
  89. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
  90. data/ext/pg_query/include/catalog/pg_proc.h +20 -11
  91. data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
  92. data/ext/pg_query/include/catalog/pg_publication.h +50 -4
  93. data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
  94. data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
  95. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
  96. data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
  97. data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
  98. data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
  99. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
  100. data/ext/pg_query/include/catalog/pg_transform.h +8 -5
  101. data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
  102. data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
  103. data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
  104. data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
  105. data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
  106. data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
  107. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
  108. data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
  109. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
  110. data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
  111. data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
  112. data/ext/pg_query/include/catalog/pg_type.h +56 -24
  113. data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
  114. data/ext/pg_query/include/catalog/storage.h +5 -3
  115. data/ext/pg_query/include/commands/async.h +4 -5
  116. data/ext/pg_query/include/commands/dbcommands.h +2 -1
  117. data/ext/pg_query/include/commands/defrem.h +11 -24
  118. data/ext/pg_query/include/commands/event_trigger.h +2 -2
  119. data/ext/pg_query/include/commands/explain.h +1 -1
  120. data/ext/pg_query/include/commands/prepare.h +1 -1
  121. data/ext/pg_query/include/commands/tablespace.h +3 -1
  122. data/ext/pg_query/include/commands/trigger.h +27 -17
  123. data/ext/pg_query/include/commands/user.h +2 -2
  124. data/ext/pg_query/include/commands/vacuum.h +88 -41
  125. data/ext/pg_query/include/commands/variable.h +1 -1
  126. data/ext/pg_query/include/common/file_perm.h +4 -4
  127. data/ext/pg_query/include/common/hashfn.h +1 -1
  128. data/ext/pg_query/include/common/ip.h +1 -7
  129. data/ext/pg_query/include/common/keywords.h +2 -6
  130. data/ext/pg_query/include/common/kwlookup.h +1 -1
  131. data/ext/pg_query/include/common/pg_prng.h +60 -0
  132. data/ext/pg_query/include/common/relpath.h +2 -2
  133. data/ext/pg_query/include/common/string.h +24 -1
  134. data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
  135. data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
  136. data/ext/pg_query/include/datatype/timestamp.h +40 -1
  137. data/ext/pg_query/include/executor/execdesc.h +1 -1
  138. data/ext/pg_query/include/executor/executor.h +65 -22
  139. data/ext/pg_query/include/executor/functions.h +17 -3
  140. data/ext/pg_query/include/executor/instrument.h +33 -16
  141. data/ext/pg_query/include/executor/spi.h +41 -3
  142. data/ext/pg_query/include/executor/tablefunc.h +1 -1
  143. data/ext/pg_query/include/executor/tuptable.h +1 -1
  144. data/ext/pg_query/include/fmgr.h +13 -7
  145. data/ext/pg_query/include/funcapi.h +16 -4
  146. data/ext/pg_query/include/getaddrinfo.h +1 -1
  147. data/ext/pg_query/include/jit/jit.h +11 -11
  148. data/ext/pg_query/include/kwlist_d.h +517 -494
  149. data/ext/pg_query/include/lib/dshash.h +112 -0
  150. data/ext/pg_query/include/lib/ilist.h +20 -1
  151. data/ext/pg_query/include/lib/pairingheap.h +1 -1
  152. data/ext/pg_query/include/lib/simplehash.h +150 -25
  153. data/ext/pg_query/include/lib/sort_template.h +432 -0
  154. data/ext/pg_query/include/lib/stringinfo.h +1 -1
  155. data/ext/pg_query/include/libpq/auth.h +6 -4
  156. data/ext/pg_query/include/libpq/crypt.h +5 -4
  157. data/ext/pg_query/include/libpq/hba.h +43 -4
  158. data/ext/pg_query/include/libpq/libpq-be.h +23 -6
  159. data/ext/pg_query/include/libpq/libpq.h +31 -20
  160. data/ext/pg_query/include/libpq/pqcomm.h +17 -31
  161. data/ext/pg_query/include/libpq/pqformat.h +1 -1
  162. data/ext/pg_query/include/libpq/pqsignal.h +4 -4
  163. data/ext/pg_query/include/mb/pg_wchar.h +106 -23
  164. data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
  165. data/ext/pg_query/include/miscadmin.h +71 -52
  166. data/ext/pg_query/include/nodes/bitmapset.h +1 -1
  167. data/ext/pg_query/include/nodes/execnodes.h +272 -80
  168. data/ext/pg_query/include/nodes/extensible.h +4 -2
  169. data/ext/pg_query/include/nodes/lockoptions.h +1 -1
  170. data/ext/pg_query/include/nodes/makefuncs.h +7 -6
  171. data/ext/pg_query/include/nodes/memnodes.h +5 -3
  172. data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
  173. data/ext/pg_query/include/nodes/nodes.h +30 -11
  174. data/ext/pg_query/include/nodes/params.h +1 -1
  175. data/ext/pg_query/include/nodes/parsenodes.h +327 -94
  176. data/ext/pg_query/include/nodes/pathnodes.h +245 -67
  177. data/ext/pg_query/include/nodes/pg_list.h +75 -68
  178. data/ext/pg_query/include/nodes/plannodes.h +128 -30
  179. data/ext/pg_query/include/nodes/primnodes.h +99 -47
  180. data/ext/pg_query/include/nodes/print.h +1 -1
  181. data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
  182. data/ext/pg_query/include/nodes/value.h +58 -39
  183. data/ext/pg_query/include/optimizer/cost.h +9 -2
  184. data/ext/pg_query/include/optimizer/geqo.h +9 -7
  185. data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
  186. data/ext/pg_query/include/optimizer/optimizer.h +25 -22
  187. data/ext/pg_query/include/optimizer/paths.h +6 -6
  188. data/ext/pg_query/include/optimizer/planmain.h +15 -14
  189. data/ext/pg_query/include/parser/analyze.h +19 -5
  190. data/ext/pg_query/include/parser/gram.h +947 -913
  191. data/ext/pg_query/include/parser/gramparse.h +1 -1
  192. data/ext/pg_query/include/parser/kwlist.h +463 -453
  193. data/ext/pg_query/include/parser/parse_agg.h +2 -7
  194. data/ext/pg_query/include/parser/parse_coerce.h +4 -1
  195. data/ext/pg_query/include/parser/parse_expr.h +2 -3
  196. data/ext/pg_query/include/parser/parse_func.h +2 -1
  197. data/ext/pg_query/include/parser/parse_node.h +21 -9
  198. data/ext/pg_query/include/parser/parse_oper.h +1 -3
  199. data/ext/pg_query/include/parser/parse_relation.h +5 -4
  200. data/ext/pg_query/include/parser/parse_type.h +1 -1
  201. data/ext/pg_query/include/parser/parser.h +31 -4
  202. data/ext/pg_query/include/parser/parsetree.h +1 -1
  203. data/ext/pg_query/include/parser/scanner.h +1 -1
  204. data/ext/pg_query/include/parser/scansup.h +2 -5
  205. data/ext/pg_query/include/partitioning/partdefs.h +1 -1
  206. data/ext/pg_query/include/pg_config.h +94 -46
  207. data/ext/pg_query/include/pg_config_manual.h +74 -21
  208. data/ext/pg_query/include/pg_getopt.h +6 -6
  209. data/ext/pg_query/include/pg_query.h +5 -4
  210. data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
  211. data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
  212. data/ext/pg_query/include/pg_query_fingerprint_defs.c +1220 -422
  213. data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
  214. data/ext/pg_query/include/pg_query_outfuncs_defs.c +152 -26
  215. data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
  216. data/ext/pg_query/include/pg_query_readfuncs_defs.c +174 -30
  217. data/ext/pg_query/include/pg_trace.h +1 -1
  218. data/ext/pg_query/include/pgstat.h +449 -1237
  219. data/ext/pg_query/include/pgtime.h +14 -4
  220. data/ext/pg_query/include/pl_gram.h +126 -128
  221. data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
  222. data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
  223. data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
  224. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
  225. data/ext/pg_query/include/plerrcodes.h +9 -1
  226. data/ext/pg_query/include/plpgsql.h +52 -54
  227. data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
  228. data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
  229. data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
  230. data/ext/pg_query/include/port/atomics/fallback.h +1 -1
  231. data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
  232. data/ext/pg_query/include/port/atomics/generic.h +1 -1
  233. data/ext/pg_query/include/port/atomics.h +1 -1
  234. data/ext/pg_query/include/port/pg_bitutils.h +88 -12
  235. data/ext/pg_query/include/port/pg_bswap.h +1 -1
  236. data/ext/pg_query/include/port/pg_crc32c.h +1 -1
  237. data/ext/pg_query/include/port.h +72 -43
  238. data/ext/pg_query/include/portability/instr_time.h +1 -1
  239. data/ext/pg_query/include/postgres.h +60 -16
  240. data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
  241. data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
  242. data/ext/pg_query/include/postmaster/bgworker.h +2 -1
  243. data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
  244. data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
  245. data/ext/pg_query/include/postmaster/fork_process.h +1 -1
  246. data/ext/pg_query/include/postmaster/interrupt.h +1 -1
  247. data/ext/pg_query/include/postmaster/pgarch.h +42 -8
  248. data/ext/pg_query/include/postmaster/postmaster.h +18 -17
  249. data/ext/pg_query/include/postmaster/startup.h +39 -0
  250. data/ext/pg_query/include/postmaster/syslogger.h +15 -10
  251. data/ext/pg_query/include/postmaster/walwriter.h +3 -3
  252. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1422 -916
  253. data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
  254. data/ext/pg_query/include/regex/regex.h +18 -16
  255. data/ext/pg_query/include/replication/logicallauncher.h +3 -5
  256. data/ext/pg_query/include/replication/logicalproto.h +161 -17
  257. data/ext/pg_query/include/replication/logicalworker.h +1 -1
  258. data/ext/pg_query/include/replication/origin.h +7 -7
  259. data/ext/pg_query/include/replication/reorderbuffer.h +262 -44
  260. data/ext/pg_query/include/replication/slot.h +23 -12
  261. data/ext/pg_query/include/replication/syncrep.h +5 -5
  262. data/ext/pg_query/include/replication/walreceiver.h +145 -13
  263. data/ext/pg_query/include/replication/walsender.h +8 -8
  264. data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
  265. data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
  266. data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
  267. data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
  268. data/ext/pg_query/include/storage/backendid.h +3 -3
  269. data/ext/pg_query/include/storage/block.h +4 -10
  270. data/ext/pg_query/include/storage/buf.h +1 -1
  271. data/ext/pg_query/include/storage/bufmgr.h +19 -14
  272. data/ext/pg_query/include/storage/bufpage.h +6 -8
  273. data/ext/pg_query/include/storage/condition_variable.h +13 -2
  274. data/ext/pg_query/include/storage/dsm.h +4 -1
  275. data/ext/pg_query/include/storage/dsm_impl.h +3 -2
  276. data/ext/pg_query/include/storage/fd.h +33 -3
  277. data/ext/pg_query/include/storage/fileset.h +40 -0
  278. data/ext/pg_query/include/storage/ipc.h +4 -1
  279. data/ext/pg_query/include/storage/item.h +1 -1
  280. data/ext/pg_query/include/storage/itemid.h +1 -1
  281. data/ext/pg_query/include/storage/itemptr.h +3 -1
  282. data/ext/pg_query/include/storage/large_object.h +2 -2
  283. data/ext/pg_query/include/storage/latch.h +9 -13
  284. data/ext/pg_query/include/storage/lmgr.h +2 -1
  285. data/ext/pg_query/include/storage/lock.h +17 -13
  286. data/ext/pg_query/include/storage/lockdefs.h +2 -2
  287. data/ext/pg_query/include/storage/lwlock.h +6 -32
  288. data/ext/pg_query/include/storage/lwlocknames.h +0 -1
  289. data/ext/pg_query/include/storage/off.h +1 -1
  290. data/ext/pg_query/include/storage/pg_sema.h +1 -1
  291. data/ext/pg_query/include/storage/pg_shmem.h +9 -7
  292. data/ext/pg_query/include/storage/pmsignal.h +15 -4
  293. data/ext/pg_query/include/storage/predicate.h +4 -4
  294. data/ext/pg_query/include/storage/proc.h +183 -55
  295. data/ext/pg_query/include/storage/procarray.h +98 -0
  296. data/ext/pg_query/include/storage/proclist_types.h +1 -1
  297. data/ext/pg_query/include/storage/procsignal.h +3 -7
  298. data/ext/pg_query/include/storage/relfilenode.h +1 -1
  299. data/ext/pg_query/include/storage/s_lock.h +67 -4
  300. data/ext/pg_query/include/storage/sharedfileset.h +3 -11
  301. data/ext/pg_query/include/storage/shm_mq.h +5 -4
  302. data/ext/pg_query/include/storage/shm_toc.h +1 -1
  303. data/ext/pg_query/include/storage/shmem.h +1 -1
  304. data/ext/pg_query/include/storage/sinval.h +3 -3
  305. data/ext/pg_query/include/storage/sinvaladt.h +1 -1
  306. data/ext/pg_query/include/storage/smgr.h +10 -8
  307. data/ext/pg_query/include/storage/spin.h +2 -2
  308. data/ext/pg_query/include/storage/standby.h +13 -6
  309. data/ext/pg_query/include/storage/standbydefs.h +2 -2
  310. data/ext/pg_query/include/storage/sync.h +7 -3
  311. data/ext/pg_query/include/tcop/cmdtag.h +1 -1
  312. data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
  313. data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
  314. data/ext/pg_query/include/tcop/dest.h +1 -1
  315. data/ext/pg_query/include/tcop/fastpath.h +1 -2
  316. data/ext/pg_query/include/tcop/pquery.h +7 -1
  317. data/ext/pg_query/include/tcop/tcopprot.h +19 -11
  318. data/ext/pg_query/include/tcop/utility.h +7 -3
  319. data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
  320. data/ext/pg_query/include/utils/acl.h +24 -3
  321. data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
  322. data/ext/pg_query/include/utils/array.h +7 -2
  323. data/ext/pg_query/include/utils/backend_progress.h +44 -0
  324. data/ext/pg_query/include/utils/backend_status.h +321 -0
  325. data/ext/pg_query/include/utils/builtins.h +11 -11
  326. data/ext/pg_query/include/utils/bytea.h +3 -2
  327. data/ext/pg_query/include/utils/catcache.h +1 -1
  328. data/ext/pg_query/include/utils/date.h +1 -1
  329. data/ext/pg_query/include/utils/datetime.h +8 -7
  330. data/ext/pg_query/include/utils/datum.h +9 -1
  331. data/ext/pg_query/include/utils/dsa.h +1 -1
  332. data/ext/pg_query/include/utils/dynahash.h +4 -3
  333. data/ext/pg_query/include/utils/elog.h +52 -21
  334. data/ext/pg_query/include/utils/errcodes.h +2 -0
  335. data/ext/pg_query/include/utils/expandeddatum.h +1 -1
  336. data/ext/pg_query/include/utils/expandedrecord.h +1 -1
  337. data/ext/pg_query/include/utils/float.h +7 -7
  338. data/ext/pg_query/include/utils/fmgroids.h +1300 -696
  339. data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
  340. data/ext/pg_query/include/utils/fmgrtab.h +6 -5
  341. data/ext/pg_query/include/utils/guc.h +69 -43
  342. data/ext/pg_query/include/utils/guc_tables.h +23 -19
  343. data/ext/pg_query/include/utils/hsearch.h +15 -11
  344. data/ext/pg_query/include/utils/inval.h +5 -1
  345. data/ext/pg_query/include/utils/lsyscache.h +11 -1
  346. data/ext/pg_query/include/utils/memdebug.h +1 -1
  347. data/ext/pg_query/include/utils/memutils.h +8 -3
  348. data/ext/pg_query/include/utils/numeric.h +19 -5
  349. data/ext/pg_query/include/utils/palloc.h +25 -3
  350. data/ext/pg_query/include/utils/partcache.h +1 -1
  351. data/ext/pg_query/include/utils/pg_locale.h +17 -9
  352. data/ext/pg_query/include/utils/pg_lsn.h +1 -1
  353. data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
  354. data/ext/pg_query/include/utils/pidfile.h +1 -1
  355. data/ext/pg_query/include/utils/plancache.h +6 -5
  356. data/ext/pg_query/include/utils/portal.h +12 -1
  357. data/ext/pg_query/include/utils/ps_status.h +1 -1
  358. data/ext/pg_query/include/utils/queryenvironment.h +1 -1
  359. data/ext/pg_query/include/utils/queryjumble.h +88 -0
  360. data/ext/pg_query/include/utils/regproc.h +14 -3
  361. data/ext/pg_query/include/utils/rel.h +71 -20
  362. data/ext/pg_query/include/utils/relcache.h +9 -7
  363. data/ext/pg_query/include/utils/reltrigger.h +1 -1
  364. data/ext/pg_query/include/utils/resowner.h +1 -1
  365. data/ext/pg_query/include/utils/rls.h +2 -2
  366. data/ext/pg_query/include/utils/ruleutils.h +4 -1
  367. data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
  368. data/ext/pg_query/include/utils/snapmgr.h +35 -14
  369. data/ext/pg_query/include/utils/snapshot.h +14 -1
  370. data/ext/pg_query/include/utils/sortsupport.h +117 -2
  371. data/ext/pg_query/include/utils/syscache.h +6 -1
  372. data/ext/pg_query/include/utils/timeout.h +11 -4
  373. data/ext/pg_query/include/utils/timestamp.h +6 -5
  374. data/ext/pg_query/include/utils/tuplesort.h +25 -11
  375. data/ext/pg_query/include/utils/tuplestore.h +2 -2
  376. data/ext/pg_query/include/utils/typcache.h +24 -17
  377. data/ext/pg_query/include/utils/tzparser.h +1 -1
  378. data/ext/pg_query/include/utils/varlena.h +5 -3
  379. data/ext/pg_query/include/utils/wait_event.h +289 -0
  380. data/ext/pg_query/include/utils/xml.h +4 -4
  381. data/ext/pg_query/pg_query.pb-c.c +4318 -2307
  382. data/ext/pg_query/pg_query_deparse.c +1114 -381
  383. data/ext/pg_query/pg_query_fingerprint.c +46 -10
  384. data/ext/pg_query/pg_query_fingerprint.h +3 -1
  385. data/ext/pg_query/pg_query_json_plpgsql.c +55 -12
  386. data/ext/pg_query/pg_query_normalize.c +163 -20
  387. data/ext/pg_query/pg_query_outfuncs.h +1 -0
  388. data/ext/pg_query/pg_query_outfuncs_json.c +65 -16
  389. data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
  390. data/ext/pg_query/pg_query_parse.c +1 -1
  391. data/ext/pg_query/pg_query_parse_plpgsql.c +79 -16
  392. data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
  393. data/ext/pg_query/pg_query_ruby.c +1 -1
  394. data/ext/pg_query/pg_query_scan.c +2 -1
  395. data/ext/pg_query/pg_query_split.c +3 -2
  396. data/ext/pg_query/src_backend_catalog_namespace.c +21 -9
  397. data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
  398. data/ext/pg_query/src_backend_commands_define.c +11 -1
  399. data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
  400. data/ext/pg_query/src_backend_nodes_copyfuncs.c +424 -109
  401. data/ext/pg_query/src_backend_nodes_equalfuncs.c +291 -46
  402. data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
  403. data/ext/pg_query/src_backend_nodes_list.c +86 -11
  404. data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
  405. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
  406. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  407. data/ext/pg_query/src_backend_parser_gram.c +33890 -31262
  408. data/ext/pg_query/src_backend_parser_parser.c +26 -7
  409. data/ext/pg_query/src_backend_parser_scan.c +644 -441
  410. data/ext/pg_query/src_backend_parser_scansup.c +4 -28
  411. data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
  412. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  413. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
  414. data/ext/pg_query/src_backend_tcop_postgres.c +73 -24
  415. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  416. data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
  417. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  418. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  419. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +109 -15
  420. data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
  421. data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
  422. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
  423. data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
  424. data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
  425. data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
  426. data/ext/pg_query/src_backend_utils_misc_guc.c +207 -45
  427. data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
  428. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
  429. data/ext/pg_query/src_common_encnames.c +1 -1
  430. data/ext/pg_query/src_common_hashfn.c +3 -3
  431. data/ext/pg_query/src_common_keywords.c +15 -2
  432. data/ext/pg_query/src_common_kwlist_d.h +517 -494
  433. data/ext/pg_query/src_common_kwlookup.c +1 -1
  434. data/ext/pg_query/src_common_pg_prng.c +152 -0
  435. data/ext/pg_query/src_common_psprintf.c +1 -1
  436. data/ext/pg_query/src_common_string.c +7 -1
  437. data/ext/pg_query/src_common_stringinfo.c +1 -1
  438. data/ext/pg_query/src_common_wchar.c +712 -109
  439. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +49 -22
  440. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
  441. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1235 -1261
  442. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  443. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  444. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
  445. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
  446. data/ext/pg_query/src_port_pg_bitutils.c +41 -52
  447. data/ext/pg_query/src_port_pgsleep.c +1 -1
  448. data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
  449. data/ext/pg_query/src_port_qsort.c +12 -224
  450. data/ext/pg_query/src_port_snprintf.c +46 -20
  451. data/ext/pg_query/src_port_strerror.c +9 -19
  452. data/ext/pg_query/src_port_strnlen.c +1 -1
  453. data/lib/pg_query/deparse.rb +7 -1
  454. data/lib/pg_query/filter_columns.rb +6 -4
  455. data/lib/pg_query/fingerprint.rb +18 -3
  456. data/lib/pg_query/node.rb +2 -2
  457. data/lib/pg_query/param_refs.rb +1 -1
  458. data/lib/pg_query/parse.rb +87 -51
  459. data/lib/pg_query/pg_query_pb.rb +1109 -942
  460. data/lib/pg_query/treewalker.rb +6 -0
  461. data/lib/pg_query/truncate.rb +54 -8
  462. data/lib/pg_query/version.rb +1 -1
  463. metadata +29 -18
  464. data/ext/pg_query/include/access/xloginsert.h +0 -64
  465. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  466. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  467. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  468. data/ext/pg_query/include/parser/parse_target.h +0 -46
  469. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -651
  470. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  471. data/ext/pg_query/src_port_erand48.c +0 -127
  472. data/ext/pg_query/src_port_random.c +0 -31
@@ -4,7 +4,7 @@
4
4
  * Virtual file descriptor definitions.
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/storage/fd.h
@@ -45,6 +45,13 @@
45
45
 
46
46
  #include <dirent.h>
47
47
 
48
+ typedef enum RecoveryInitSyncMethod
49
+ {
50
+ RECOVERY_INIT_SYNC_METHOD_FSYNC,
51
+ RECOVERY_INIT_SYNC_METHOD_SYNCFS
52
+ } RecoveryInitSyncMethod;
53
+
54
+ struct iovec; /* avoid including port/pg_iovec.h here */
48
55
 
49
56
  typedef int File;
50
57
 
@@ -52,11 +59,12 @@ typedef int File;
52
59
  /* GUC parameter */
53
60
  extern PGDLLIMPORT int max_files_per_process;
54
61
  extern PGDLLIMPORT bool data_sync_retry;
62
+ extern PGDLLIMPORT int recovery_init_sync_method;
55
63
 
56
64
  /*
57
65
  * This is private to fd.c, but exported for save/restore_backend_variables()
58
66
  */
59
- extern int max_safe_fds;
67
+ extern PGDLLIMPORT int max_safe_fds;
60
68
 
61
69
  /*
62
70
  * On Windows, we have to interpret EACCES as possibly meaning the same as
@@ -71,6 +79,22 @@ extern int max_safe_fds;
71
79
  #define FILE_POSSIBLY_DELETED(err) ((err) == ENOENT || (err) == EACCES)
72
80
  #endif
73
81
 
82
+ /*
83
+ * O_DIRECT is not standard, but almost every Unix has it. We translate it
84
+ * to the appropriate Windows flag in src/port/open.c. We simulate it with
85
+ * fcntl(F_NOCACHE) on macOS inside fd.c's open() wrapper. We use the name
86
+ * PG_O_DIRECT rather than defining O_DIRECT in that case (probably not a good
87
+ * idea on a Unix).
88
+ */
89
+ #if defined(O_DIRECT)
90
+ #define PG_O_DIRECT O_DIRECT
91
+ #elif defined(F_NOCACHE)
92
+ #define PG_O_DIRECT 0x80000000
93
+ #define PG_O_DIRECT_USE_F_NOCACHE
94
+ #else
95
+ #define PG_O_DIRECT 0
96
+ #endif
97
+
74
98
  /*
75
99
  * prototypes for functions in fd.c
76
100
  */
@@ -94,7 +118,7 @@ extern mode_t FileGetRawMode(File file);
94
118
 
95
119
  /* Operations used for sharing named temporary files */
96
120
  extern File PathNameCreateTemporaryFile(const char *name, bool error_on_failure);
97
- extern File PathNameOpenTemporaryFile(const char *name);
121
+ extern File PathNameOpenTemporaryFile(const char *path, int mode);
98
122
  extern bool PathNameDeleteTemporaryFile(const char *name, bool error_on_failure);
99
123
  extern void PathNameCreateTemporaryDir(const char *base, const char *name);
100
124
  extern void PathNameDeleteTemporaryDir(const char *name);
@@ -134,6 +158,7 @@ extern int MakePGDirectory(const char *directoryName);
134
158
 
135
159
  /* Miscellaneous support routines */
136
160
  extern void InitFileAccess(void);
161
+ extern void InitTemporaryFileAccess(void);
137
162
  extern void set_max_safe_fds(void);
138
163
  extern void closeAllVfds(void);
139
164
  extern void SetTempTablespaces(Oid *tableSpaces, int numSpaces);
@@ -153,6 +178,11 @@ extern int pg_fsync_no_writethrough(int fd);
153
178
  extern int pg_fsync_writethrough(int fd);
154
179
  extern int pg_fdatasync(int fd);
155
180
  extern void pg_flush_data(int fd, off_t offset, off_t amount);
181
+ extern ssize_t pg_pwritev_with_retry(int fd,
182
+ const struct iovec *iov,
183
+ int iovcnt,
184
+ off_t offset);
185
+ extern int pg_truncate(const char *path, off_t length);
156
186
  extern void fsync_fname(const char *fname, bool isdir);
157
187
  extern int fsync_fname_ext(const char *fname, bool isdir, bool ignore_perm, int elevel);
158
188
  extern int durable_rename(const char *oldfile, const char *newfile, int loglevel);
@@ -0,0 +1,40 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * fileset.h
4
+ * Management of named temporary files.
5
+ *
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1994, Regents of the University of California
8
+ *
9
+ * src/include/storage/fileset.h
10
+ *
11
+ *-------------------------------------------------------------------------
12
+ */
13
+
14
+ #ifndef FILESET_H
15
+ #define FILESET_H
16
+
17
+ #include "storage/fd.h"
18
+
19
+ /*
20
+ * A set of temporary files.
21
+ */
22
+ typedef struct FileSet
23
+ {
24
+ pid_t creator_pid; /* PID of the creating process */
25
+ uint32 number; /* per-PID identifier */
26
+ int ntablespaces; /* number of tablespaces to use */
27
+ Oid tablespaces[8]; /* OIDs of tablespaces to use. Assumes that
28
+ * it's rare that there more than temp
29
+ * tablespaces. */
30
+ } FileSet;
31
+
32
+ extern void FileSetInit(FileSet *fileset);
33
+ extern File FileSetCreate(FileSet *fileset, const char *name);
34
+ extern File FileSetOpen(FileSet *fileset, const char *name,
35
+ int mode);
36
+ extern bool FileSetDelete(FileSet *fileset, const char *name,
37
+ bool error_on_failure);
38
+ extern void FileSetDeleteAll(FileSet *fileset);
39
+
40
+ #endif
@@ -8,7 +8,7 @@
8
8
  * exit-time cleanup for either a postmaster or a backend.
9
9
  *
10
10
  *
11
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
11
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
12
12
  * Portions Copyright (c) 1994, Regents of the University of California
13
13
  *
14
14
  * src/include/storage/ipc.h
@@ -72,10 +72,13 @@ extern void on_shmem_exit(pg_on_exit_callback function, Datum arg);
72
72
  extern void before_shmem_exit(pg_on_exit_callback function, Datum arg);
73
73
  extern void cancel_before_shmem_exit(pg_on_exit_callback function, Datum arg);
74
74
  extern void on_exit_reset(void);
75
+ extern void check_on_shmem_exit_lists_are_empty(void);
75
76
 
76
77
  /* ipci.c */
77
78
  extern PGDLLIMPORT shmem_startup_hook_type shmem_startup_hook;
78
79
 
80
+ extern Size CalculateShmemSize(int *num_semaphores);
79
81
  extern void CreateSharedMemoryAndSemaphores(void);
82
+ extern void InitializeShmemGUCs(void);
80
83
 
81
84
  #endif /* IPC_H */
@@ -4,7 +4,7 @@
4
4
  * POSTGRES disk item definitions.
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/storage/item.h
@@ -4,7 +4,7 @@
4
4
  * Standard POSTGRES buffer page item identifier/line pointer definitions.
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/storage/itemid.h
@@ -4,7 +4,7 @@
4
4
  * POSTGRES disk item pointer definitions.
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/storage/itemptr.h
@@ -202,5 +202,7 @@ typedef ItemPointerData *ItemPointer;
202
202
 
203
203
  extern bool ItemPointerEquals(ItemPointer pointer1, ItemPointer pointer2);
204
204
  extern int32 ItemPointerCompare(ItemPointer arg1, ItemPointer arg2);
205
+ extern void ItemPointerInc(ItemPointer pointer);
206
+ extern void ItemPointerDec(ItemPointer pointer);
205
207
 
206
208
  #endif /* ITEMPTR_H */
@@ -5,7 +5,7 @@
5
5
  * zillions of large objects (internal, external, jaquith, inversion).
6
6
  * Now we only support inversion.
7
7
  *
8
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
8
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
9
9
  * Portions Copyright (c) 1994, Regents of the University of California
10
10
  *
11
11
  * src/include/storage/large_object.h
@@ -79,7 +79,7 @@ typedef struct LargeObjectDesc
79
79
  /*
80
80
  * GUC: backwards-compatibility flag to suppress LO permission checks
81
81
  */
82
- extern bool lo_compat_privileges;
82
+ extern PGDLLIMPORT bool lo_compat_privileges;
83
83
 
84
84
  /*
85
85
  * Function definitions...
@@ -90,7 +90,7 @@
90
90
  * efficient than using WaitLatch or WaitLatchOrSocket.
91
91
  *
92
92
  *
93
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
93
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
94
94
  * Portions Copyright (c) 1994, Regents of the University of California
95
95
  *
96
96
  * src/include/storage/latch.h
@@ -110,6 +110,7 @@
110
110
  typedef struct Latch
111
111
  {
112
112
  sig_atomic_t is_set;
113
+ sig_atomic_t maybe_sleeping;
113
114
  bool is_shared;
114
115
  int owner_pid;
115
116
  #ifdef WIN32
@@ -133,10 +134,11 @@ typedef struct Latch
133
134
  /* avoid having to deal with case on platforms not requiring it */
134
135
  #define WL_SOCKET_CONNECTED WL_SOCKET_WRITEABLE
135
136
  #endif
136
-
137
+ #define WL_SOCKET_CLOSED (1 << 7)
137
138
  #define WL_SOCKET_MASK (WL_SOCKET_READABLE | \
138
139
  WL_SOCKET_WRITEABLE | \
139
- WL_SOCKET_CONNECTED)
140
+ WL_SOCKET_CONNECTED | \
141
+ WL_SOCKET_CLOSED)
140
142
 
141
143
  typedef struct WaitEvent
142
144
  {
@@ -162,6 +164,7 @@ extern void OwnLatch(Latch *latch);
162
164
  extern void DisownLatch(Latch *latch);
163
165
  extern void SetLatch(Latch *latch);
164
166
  extern void ResetLatch(Latch *latch);
167
+ extern void ShutdownLatchSupport(void);
165
168
 
166
169
  extern WaitEventSet *CreateWaitEventSet(MemoryContext context, int nevents);
167
170
  extern void FreeWaitEventSet(WaitEventSet *set);
@@ -176,15 +179,8 @@ extern int WaitLatch(Latch *latch, int wakeEvents, long timeout,
176
179
  uint32 wait_event_info);
177
180
  extern int WaitLatchOrSocket(Latch *latch, int wakeEvents,
178
181
  pgsocket sock, long timeout, uint32 wait_event_info);
179
-
180
- /*
181
- * Unix implementation uses SIGUSR1 for inter-process signaling.
182
- * Win32 doesn't need this.
183
- */
184
- #ifndef WIN32
185
- extern void latch_sigusr1_handler(void);
186
- #else
187
- #define latch_sigusr1_handler() ((void) 0)
188
- #endif
182
+ extern void InitializeLatchWaitSet(void);
183
+ extern int GetNumRegisteredWaitEvents(WaitEventSet *set);
184
+ extern bool WaitEventSetCanReportClosed(void);
189
185
 
190
186
  #endif /* LATCH_H */
@@ -4,7 +4,7 @@
4
4
  * POSTGRES lock manager definitions.
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/storage/lmgr.h
@@ -38,6 +38,7 @@ extern void RelationInitLockInfo(Relation relation);
38
38
 
39
39
  /* Lock a relation */
40
40
  extern void LockRelationOid(Oid relid, LOCKMODE lockmode);
41
+ extern void LockRelationId(LockRelId *relid, LOCKMODE lockmode);
41
42
  extern bool ConditionalLockRelationOid(Oid relid, LOCKMODE lockmode);
42
43
  extern void UnlockRelationId(LockRelId *relid, LOCKMODE lockmode);
43
44
  extern void UnlockRelationOid(Oid relid, LOCKMODE lockmode);
@@ -4,7 +4,7 @@
4
4
  * POSTGRES low-level lock mechanism
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/storage/lock.h
@@ -22,6 +22,7 @@
22
22
  #include "storage/lockdefs.h"
23
23
  #include "storage/lwlock.h"
24
24
  #include "storage/shmem.h"
25
+ #include "utils/timestamp.h"
25
26
 
26
27
  /* struct PGPROC is declared in proc.h, but must forward-reference it */
27
28
  typedef struct PGPROC PGPROC;
@@ -33,23 +34,24 @@ typedef struct PROC_QUEUE
33
34
  } PROC_QUEUE;
34
35
 
35
36
  /* GUC variables */
36
- extern int max_locks_per_xact;
37
+ extern PGDLLIMPORT int max_locks_per_xact;
37
38
 
38
39
  #ifdef LOCK_DEBUG
39
- extern int Trace_lock_oidmin;
40
- extern bool Trace_locks;
41
- extern bool Trace_userlocks;
42
- extern int Trace_lock_table;
43
- extern bool Debug_deadlocks;
40
+ extern PGDLLIMPORT int Trace_lock_oidmin;
41
+ extern PGDLLIMPORT bool Trace_locks;
42
+ extern PGDLLIMPORT bool Trace_userlocks;
43
+ extern PGDLLIMPORT int Trace_lock_table;
44
+ extern PGDLLIMPORT bool Debug_deadlocks;
44
45
  #endif /* LOCK_DEBUG */
45
46
 
46
47
 
47
48
  /*
48
49
  * Top-level transactions are identified by VirtualTransactionIDs comprising
49
- * PGPROC fields backendId and lxid. For prepared transactions, the
50
- * LocalTransactionId is an ordinary XID. These are guaranteed unique over
51
- * the short term, but will be reused after a database restart or XID
52
- * wraparound; hence they should never be stored on disk.
50
+ * PGPROC fields backendId and lxid. For recovered prepared transactions, the
51
+ * LocalTransactionId is an ordinary XID; LOCKTAG_VIRTUALTRANSACTION never
52
+ * refers to that kind. These are guaranteed unique over the short term, but
53
+ * will be reused after a database restart or XID wraparound; hence they
54
+ * should never be stored on disk.
53
55
  *
54
56
  * Note that struct VirtualTransactionId can not be assumed to be atomically
55
57
  * assignable as a whole. However, type LocalTransactionId is assumed to
@@ -69,7 +71,7 @@ typedef struct
69
71
  #define LocalTransactionIdIsValid(lxid) ((lxid) != InvalidLocalTransactionId)
70
72
  #define VirtualTransactionIdIsValid(vxid) \
71
73
  (LocalTransactionIdIsValid((vxid).localTransactionId))
72
- #define VirtualTransactionIdIsPreparedXact(vxid) \
74
+ #define VirtualTransactionIdIsRecoveredPreparedXact(vxid) \
73
75
  ((vxid).backendId == InvalidBackendId)
74
76
  #define VirtualTransactionIdEquals(vxid1, vxid2) \
75
77
  ((vxid1).backendId == (vxid2).backendId && \
@@ -152,7 +154,7 @@ typedef enum LockTagType
152
154
 
153
155
  #define LOCKTAG_LAST_TYPE LOCKTAG_ADVISORY
154
156
 
155
- extern const char *const LockTagTypeNames[];
157
+ extern PGDLLIMPORT const char *const LockTagTypeNames[];
156
158
 
157
159
  /*
158
160
  * The LOCKTAG struct is defined with malice aforethought to fit into 16
@@ -446,6 +448,8 @@ typedef struct LockInstanceData
446
448
  LOCKMODE waitLockMode; /* lock awaited by this PGPROC, if any */
447
449
  BackendId backend; /* backend ID of this PGPROC */
448
450
  LocalTransactionId lxid; /* local transaction ID of this PGPROC */
451
+ TimestampTz waitStart; /* time at which this PGPROC started waiting
452
+ * for lock */
449
453
  int pid; /* pid of this PGPROC */
450
454
  int leaderPid; /* pid of group leader; = pid if no group */
451
455
  bool fastpath; /* taken via fastpath? */
@@ -7,7 +7,7 @@
7
7
  * contains definition that have to (indirectly) be available when included by
8
8
  * FRONTEND code.
9
9
  *
10
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
10
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
11
11
  * Portions Copyright (c) 1994, Regents of the University of California
12
12
  *
13
13
  * src/include/storage/lockdefs.h
@@ -45,7 +45,7 @@ typedef int LOCKMODE;
45
45
  #define AccessExclusiveLock 8 /* ALTER TABLE, DROP TABLE, VACUUM FULL,
46
46
  * and unqualified LOCK TABLE */
47
47
 
48
- #define MaxLockMode 8
48
+ #define MaxLockMode 8 /* highest standard lock mode */
49
49
 
50
50
 
51
51
  /* WAL representation of an AccessExclusiveLock on a table */
@@ -4,7 +4,7 @@
4
4
  * Lightweight lock manager
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/storage/lwlock.h
@@ -20,7 +20,6 @@
20
20
 
21
21
  #include "port/atomics.h"
22
22
  #include "storage/proclist_types.h"
23
- #include "storage/s_lock.h"
24
23
 
25
24
  struct PGPROC;
26
25
 
@@ -49,29 +48,8 @@ typedef struct LWLock
49
48
  * even more padding so that each LWLock takes up an entire cache line; this is
50
49
  * useful, for example, in the main LWLock array, where the overall number of
51
50
  * locks is small but some are heavily contended.
52
- *
53
- * When allocating a tranche that contains data other than LWLocks, it is
54
- * probably best to include a bare LWLock and then pad the resulting structure
55
- * as necessary for performance. For an array that contains only LWLocks,
56
- * LWLockMinimallyPadded can be used for cases where we just want to ensure
57
- * that we don't cross cache line boundaries within a single lock, while
58
- * LWLockPadded can be used for cases where we want each lock to be an entire
59
- * cache line.
60
- *
61
- * An LWLockMinimallyPadded might contain more than the absolute minimum amount
62
- * of padding required to keep a lock from crossing a cache line boundary,
63
- * because an unpadded LWLock will normally fit into 16 bytes. We ignore that
64
- * possibility when determining the minimal amount of padding. Older releases
65
- * had larger LWLocks, so 32 really was the minimum, and packing them in
66
- * tighter might hurt performance.
67
- *
68
- * LWLOCK_MINIMAL_SIZE should be 32 on basically all common platforms, but
69
- * because pg_atomic_uint32 is more than 4 bytes on some obscure platforms, we
70
- * allow for the possibility that it might be 64. Even on those platforms,
71
- * we probably won't exceed 32 bytes unless LOCK_DEBUG is defined.
72
51
  */
73
52
  #define LWLOCK_PADDED_SIZE PG_CACHE_LINE_SIZE
74
- #define LWLOCK_MINIMAL_SIZE (sizeof(LWLock) <= 32 ? 32 : 64)
75
53
 
76
54
  /* LWLock, padded to a full cache line size */
77
55
  typedef union LWLockPadded
@@ -80,13 +58,6 @@ typedef union LWLockPadded
80
58
  char pad[LWLOCK_PADDED_SIZE];
81
59
  } LWLockPadded;
82
60
 
83
- /* LWLock, minimally padded */
84
- typedef union LWLockMinimallyPadded
85
- {
86
- LWLock lock;
87
- char pad[LWLOCK_MINIMAL_SIZE];
88
- } LWLockMinimallyPadded;
89
-
90
61
  extern PGDLLIMPORT LWLockPadded *MainLWLockArray;
91
62
 
92
63
  /* struct for storing named tranche information */
@@ -139,7 +110,7 @@ typedef enum LWLockMode
139
110
 
140
111
 
141
112
  #ifdef LOCK_DEBUG
142
- extern bool Trace_lwlocks;
113
+ extern PGDLLIMPORT bool Trace_lwlocks;
143
114
  #endif
144
115
 
145
116
  extern bool LWLockAcquire(LWLock *lock, LWLockMode mode);
@@ -149,6 +120,7 @@ extern void LWLockRelease(LWLock *lock);
149
120
  extern void LWLockReleaseClearVar(LWLock *lock, uint64 *valptr, uint64 val);
150
121
  extern void LWLockReleaseAll(void);
151
122
  extern bool LWLockHeldByMe(LWLock *lock);
123
+ extern bool LWLockAnyHeldByMe(LWLock *lock, int nlocks, size_t stride);
152
124
  extern bool LWLockHeldByMeInMode(LWLock *lock, LWLockMode mode);
153
125
 
154
126
  extern bool LWLockWaitForVar(LWLock *lock, uint64 *valptr, uint64 oldval, uint64 *newval);
@@ -203,7 +175,6 @@ typedef enum BuiltinTrancheIds
203
175
  LWTRANCHE_SERIAL_BUFFER,
204
176
  LWTRANCHE_WAL_INSERT,
205
177
  LWTRANCHE_BUFFER_CONTENT,
206
- LWTRANCHE_BUFFER_IO,
207
178
  LWTRANCHE_REPLICATION_ORIGIN_STATE,
208
179
  LWTRANCHE_REPLICATION_SLOT_IO,
209
180
  LWTRANCHE_LOCK_FASTPATH,
@@ -219,6 +190,9 @@ typedef enum BuiltinTrancheIds
219
190
  LWTRANCHE_SHARED_TIDBITMAP,
220
191
  LWTRANCHE_PARALLEL_APPEND,
221
192
  LWTRANCHE_PER_XACT_PREDICATE_LIST,
193
+ LWTRANCHE_PGSTATS_DSA,
194
+ LWTRANCHE_PGSTATS_HASH,
195
+ LWTRANCHE_PGSTATS_DATA,
222
196
  LWTRANCHE_FIRST_USER_DEFINED
223
197
  } BuiltinTrancheIds;
224
198
 
@@ -10,7 +10,6 @@
10
10
  #define WALBufMappingLock (&MainLWLockArray[7].lock)
11
11
  #define WALWriteLock (&MainLWLockArray[8].lock)
12
12
  #define ControlFileLock (&MainLWLockArray[9].lock)
13
- #define CheckpointLock (&MainLWLockArray[10].lock)
14
13
  #define XactSLRULock (&MainLWLockArray[11].lock)
15
14
  #define SubtransSLRULock (&MainLWLockArray[12].lock)
16
15
  #define MultiXactGenLock (&MainLWLockArray[13].lock)
@@ -4,7 +4,7 @@
4
4
  * POSTGRES disk "offset" definitions.
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/storage/off.h
@@ -10,7 +10,7 @@
10
10
  * be provided by each port.
11
11
  *
12
12
  *
13
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
13
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
14
14
  * Portions Copyright (c) 1994, Regents of the University of California
15
15
  *
16
16
  * src/include/storage/pg_sema.h
@@ -14,7 +14,7 @@
14
14
  * only one ID number.
15
15
  *
16
16
  *
17
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
17
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
18
18
  * Portions Copyright (c) 1994, Regents of the University of California
19
19
  *
20
20
  * src/include/storage/pg_shmem.h
@@ -42,8 +42,9 @@ typedef struct PGShmemHeader /* standard header for all Postgres shmem */
42
42
  } PGShmemHeader;
43
43
 
44
44
  /* GUC variables */
45
- extern int shared_memory_type;
46
- extern int huge_pages;
45
+ extern PGDLLIMPORT int shared_memory_type;
46
+ extern PGDLLIMPORT int huge_pages;
47
+ extern PGDLLIMPORT int huge_page_size;
47
48
 
48
49
  /* Possible values for huge_pages */
49
50
  typedef enum
@@ -62,12 +63,12 @@ typedef enum
62
63
  } PGShmemType;
63
64
 
64
65
  #ifndef WIN32
65
- extern unsigned long UsedShmemSegID;
66
+ extern PGDLLIMPORT unsigned long UsedShmemSegID;
66
67
  #else
67
- extern HANDLE UsedShmemSegID;
68
- extern void *ShmemProtectiveRegion;
68
+ extern PGDLLIMPORT HANDLE UsedShmemSegID;
69
+ extern PGDLLIMPORT void *ShmemProtectiveRegion;
69
70
  #endif
70
- extern void *UsedShmemSegAddr;
71
+ extern PGDLLIMPORT void *UsedShmemSegAddr;
71
72
 
72
73
  #if !defined(WIN32) && !defined(EXEC_BACKEND)
73
74
  #define DEFAULT_SHARED_MEMORY_TYPE SHMEM_TYPE_MMAP
@@ -86,5 +87,6 @@ extern PGShmemHeader *PGSharedMemoryCreate(Size size,
86
87
  PGShmemHeader **shim);
87
88
  extern bool PGSharedMemoryIsInUse(unsigned long id1, unsigned long id2);
88
89
  extern void PGSharedMemoryDetach(void);
90
+ extern void GetHugePageSize(Size *hugepagesize, int *mmap_flags);
89
91
 
90
92
  #endif /* PG_SHMEM_H */
@@ -1,10 +1,10 @@
1
1
  /*-------------------------------------------------------------------------
2
2
  *
3
3
  * pmsignal.h
4
- * routines for signaling the postmaster from its child processes
4
+ * routines for signaling between the postmaster and its child processes
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/storage/pmsignal.h
@@ -34,7 +34,6 @@ typedef enum
34
34
  {
35
35
  PMSIGNAL_RECOVERY_STARTED, /* recovery has started */
36
36
  PMSIGNAL_BEGIN_HOT_STANDBY, /* begin Hot Standby */
37
- PMSIGNAL_WAKEN_ARCHIVER, /* send a NOTIFY signal to xlog archiver */
38
37
  PMSIGNAL_ROTATE_LOGFILE, /* send SIGUSR1 to syslogger to rotate logfile */
39
38
  PMSIGNAL_START_AUTOVAC_LAUNCHER, /* start an autovacuum launcher */
40
39
  PMSIGNAL_START_AUTOVAC_WORKER, /* start an autovacuum worker */
@@ -45,6 +44,16 @@ typedef enum
45
44
  NUM_PMSIGNALS /* Must be last value of enum! */
46
45
  } PMSignalReason;
47
46
 
47
+ /*
48
+ * Reasons why the postmaster would send SIGQUIT to its children.
49
+ */
50
+ typedef enum
51
+ {
52
+ PMQUIT_NOT_SENT = 0, /* postmaster hasn't sent SIGQUIT */
53
+ PMQUIT_FOR_CRASH, /* some other backend bought the farm */
54
+ PMQUIT_FOR_STOP /* immediate stop was commanded */
55
+ } QuitSignalReason;
56
+
48
57
  /* PMSignalData is an opaque struct, details known only within pmsignal.c */
49
58
  typedef struct PMSignalData PMSignalData;
50
59
 
@@ -55,6 +64,8 @@ extern Size PMSignalShmemSize(void);
55
64
  extern void PMSignalShmemInit(void);
56
65
  extern void SendPostmasterSignal(PMSignalReason reason);
57
66
  extern bool CheckPostmasterSignal(PMSignalReason reason);
67
+ extern void SetQuitSignalReason(QuitSignalReason reason);
68
+ extern QuitSignalReason GetQuitSignalReason(void);
58
69
  extern int AssignPostmasterChildSlot(void);
59
70
  extern bool ReleasePostmasterChildSlot(int slot);
60
71
  extern bool IsPostmasterChildWalSender(int slot);
@@ -78,7 +89,7 @@ extern void PostmasterDeathSignalInit(void);
78
89
  #endif
79
90
 
80
91
  #ifdef USE_POSTMASTER_DEATH_SIGNAL
81
- extern volatile sig_atomic_t postmaster_possibly_dead;
92
+ extern PGDLLIMPORT volatile sig_atomic_t postmaster_possibly_dead;
82
93
 
83
94
  static inline bool
84
95
  PostmasterIsAlive(void)
@@ -4,7 +4,7 @@
4
4
  * POSTGRES public predicate locking definitions.
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/storage/predicate.h
@@ -22,9 +22,9 @@
22
22
  /*
23
23
  * GUC variables
24
24
  */
25
- extern int max_predicate_locks_per_xact;
26
- extern int max_predicate_locks_per_relation;
27
- extern int max_predicate_locks_per_page;
25
+ extern PGDLLIMPORT int max_predicate_locks_per_xact;
26
+ extern PGDLLIMPORT int max_predicate_locks_per_relation;
27
+ extern PGDLLIMPORT int max_predicate_locks_per_page;
28
28
 
29
29
 
30
30
  /* Number of SLRU buffers to use for Serial SLRU */