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
@@ -3,7 +3,7 @@
3
3
  * walreceiver.h
4
4
  * Exports from replication/walreceiverfuncs.c.
5
5
  *
6
- * Portions Copyright (c) 2010-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 2010-2022, PostgreSQL Global Development Group
7
7
  *
8
8
  * src/include/replication/walreceiver.h
9
9
  *
@@ -19,14 +19,15 @@
19
19
  #include "port/atomics.h"
20
20
  #include "replication/logicalproto.h"
21
21
  #include "replication/walsender.h"
22
+ #include "storage/condition_variable.h"
22
23
  #include "storage/latch.h"
23
24
  #include "storage/spin.h"
24
25
  #include "utils/tuplestore.h"
25
26
 
26
27
  /* user-settable parameters */
27
- extern int wal_receiver_status_interval;
28
- extern int wal_receiver_timeout;
29
- extern bool hot_standby_feedback;
28
+ extern PGDLLIMPORT int wal_receiver_status_interval;
29
+ extern PGDLLIMPORT int wal_receiver_timeout;
30
+ extern PGDLLIMPORT bool hot_standby_feedback;
30
31
 
31
32
  /*
32
33
  * MAXCONNINFO: maximum size of a connection string.
@@ -62,6 +63,7 @@ typedef struct
62
63
  */
63
64
  pid_t pid;
64
65
  WalRcvState walRcvState;
66
+ ConditionVariable walRcvStoppedCV;
65
67
  pg_time_t startTime;
66
68
 
67
69
  /*
@@ -158,7 +160,7 @@ typedef struct
158
160
  sig_atomic_t force_reply; /* used as a bool */
159
161
  } WalRcvData;
160
162
 
161
- extern WalRcvData *WalRcv;
163
+ extern PGDLLIMPORT WalRcvData *WalRcv;
162
164
 
163
165
  typedef struct
164
166
  {
@@ -177,6 +179,10 @@ typedef struct
177
179
  {
178
180
  uint32 proto_version; /* Logical protocol version */
179
181
  List *publication_names; /* String list of publications */
182
+ bool binary; /* Ask publisher to use binary */
183
+ bool streaming; /* Streaming of large transactions */
184
+ bool twophase; /* Streaming of two-phase transactions at
185
+ * prepare time */
180
186
  } logical;
181
187
  } proto;
182
188
  } WalRcvStreamOptions;
@@ -208,44 +214,170 @@ typedef enum
208
214
  typedef struct WalRcvExecResult
209
215
  {
210
216
  WalRcvExecStatus status;
217
+ int sqlstate;
211
218
  char *err;
212
219
  Tuplestorestate *tuplestore;
213
220
  TupleDesc tupledesc;
214
221
  } WalRcvExecResult;
215
222
 
216
- /* libpqwalreceiver hooks */
217
- typedef WalReceiverConn *(*walrcv_connect_fn) (const char *conninfo, bool logical,
223
+ /* WAL receiver - libpqwalreceiver hooks */
224
+
225
+ /*
226
+ * walrcv_connect_fn
227
+ *
228
+ * Establish connection to a cluster. 'logical' is true if the
229
+ * connection is logical, and false if the connection is physical.
230
+ * 'appname' is a name associated to the connection, to use for example
231
+ * with fallback_application_name or application_name. Returns the
232
+ * details about the connection established, as defined by
233
+ * WalReceiverConn for each WAL receiver module. On error, NULL is
234
+ * returned with 'err' including the error generated.
235
+ */
236
+ typedef WalReceiverConn *(*walrcv_connect_fn) (const char *conninfo,
237
+ bool logical,
218
238
  const char *appname,
219
239
  char **err);
240
+
241
+ /*
242
+ * walrcv_check_conninfo_fn
243
+ *
244
+ * Parse and validate the connection string given as of 'conninfo'.
245
+ */
220
246
  typedef void (*walrcv_check_conninfo_fn) (const char *conninfo);
247
+
248
+ /*
249
+ * walrcv_get_conninfo_fn
250
+ *
251
+ * Returns a user-displayable conninfo string. Note that any
252
+ * security-sensitive fields should be obfuscated.
253
+ */
221
254
  typedef char *(*walrcv_get_conninfo_fn) (WalReceiverConn *conn);
255
+
256
+ /*
257
+ * walrcv_get_senderinfo_fn
258
+ *
259
+ * Provide information of the WAL sender this WAL receiver is connected
260
+ * to, as of 'sender_host' for the host of the sender and 'sender_port'
261
+ * for its port.
262
+ */
222
263
  typedef void (*walrcv_get_senderinfo_fn) (WalReceiverConn *conn,
223
264
  char **sender_host,
224
265
  int *sender_port);
266
+
267
+ /*
268
+ * walrcv_identify_system_fn
269
+ *
270
+ * Run IDENTIFY_SYSTEM on the cluster connected to and validate the
271
+ * identity of the cluster. Returns the system ID of the cluster
272
+ * connected to. 'primary_tli' is the timeline ID of the sender.
273
+ */
225
274
  typedef char *(*walrcv_identify_system_fn) (WalReceiverConn *conn,
226
275
  TimeLineID *primary_tli);
276
+
277
+ /*
278
+ * walrcv_server_version_fn
279
+ *
280
+ * Returns the version number of the cluster connected to.
281
+ */
227
282
  typedef int (*walrcv_server_version_fn) (WalReceiverConn *conn);
283
+
284
+ /*
285
+ * walrcv_readtimelinehistoryfile_fn
286
+ *
287
+ * Fetch from cluster the timeline history file for timeline 'tli'.
288
+ * Returns the name of the timeline history file as of 'filename', its
289
+ * contents as of 'content' and its 'size'.
290
+ */
228
291
  typedef void (*walrcv_readtimelinehistoryfile_fn) (WalReceiverConn *conn,
229
292
  TimeLineID tli,
230
293
  char **filename,
231
- char **content, int *size);
294
+ char **content,
295
+ int *size);
296
+
297
+ /*
298
+ * walrcv_startstreaming_fn
299
+ *
300
+ * Start streaming WAL data from given streaming options. Returns true
301
+ * if the connection has switched successfully to copy-both mode and false
302
+ * if the server received the command and executed it successfully, but
303
+ * didn't switch to copy-mode.
304
+ */
232
305
  typedef bool (*walrcv_startstreaming_fn) (WalReceiverConn *conn,
233
306
  const WalRcvStreamOptions *options);
307
+
308
+ /*
309
+ * walrcv_endstreaming_fn
310
+ *
311
+ * Stop streaming of WAL data. Returns the next timeline ID of the cluster
312
+ * connected to in 'next_tli', or 0 if there was no report.
313
+ */
234
314
  typedef void (*walrcv_endstreaming_fn) (WalReceiverConn *conn,
235
315
  TimeLineID *next_tli);
236
- typedef int (*walrcv_receive_fn) (WalReceiverConn *conn, char **buffer,
316
+
317
+ /*
318
+ * walrcv_receive_fn
319
+ *
320
+ * Receive a message available from the WAL stream. 'buffer' is a pointer
321
+ * to a buffer holding the message received. Returns the length of the data,
322
+ * 0 if no data is available yet ('wait_fd' is a socket descriptor which can
323
+ * be waited on before a retry), and -1 if the cluster ended the COPY.
324
+ */
325
+ typedef int (*walrcv_receive_fn) (WalReceiverConn *conn,
326
+ char **buffer,
237
327
  pgsocket *wait_fd);
238
- typedef void (*walrcv_send_fn) (WalReceiverConn *conn, const char *buffer,
328
+
329
+ /*
330
+ * walrcv_send_fn
331
+ *
332
+ * Send a message of size 'nbytes' to the WAL stream with 'buffer' as
333
+ * contents.
334
+ */
335
+ typedef void (*walrcv_send_fn) (WalReceiverConn *conn,
336
+ const char *buffer,
239
337
  int nbytes);
338
+
339
+ /*
340
+ * walrcv_create_slot_fn
341
+ *
342
+ * Create a new replication slot named 'slotname'. 'temporary' defines
343
+ * if the slot is temporary. 'snapshot_action' defines the behavior wanted
344
+ * for an exported snapshot (see replication protocol for more details).
345
+ * 'lsn' includes the LSN position at which the created slot became
346
+ * consistent. Returns the name of the exported snapshot for a logical
347
+ * slot, or NULL for a physical slot.
348
+ */
240
349
  typedef char *(*walrcv_create_slot_fn) (WalReceiverConn *conn,
241
- const char *slotname, bool temporary,
350
+ const char *slotname,
351
+ bool temporary,
352
+ bool two_phase,
242
353
  CRSSnapshotAction snapshot_action,
243
354
  XLogRecPtr *lsn);
355
+
356
+ /*
357
+ * walrcv_get_backend_pid_fn
358
+ *
359
+ * Returns the PID of the remote backend process.
360
+ */
244
361
  typedef pid_t (*walrcv_get_backend_pid_fn) (WalReceiverConn *conn);
362
+
363
+ /*
364
+ * walrcv_exec_fn
365
+ *
366
+ * Send generic queries (and commands) to the remote cluster. 'nRetTypes'
367
+ * is the expected number of returned attributes, and 'retTypes' an array
368
+ * including their type OIDs. Returns the status of the execution and
369
+ * tuples if any.
370
+ */
245
371
  typedef WalRcvExecResult *(*walrcv_exec_fn) (WalReceiverConn *conn,
246
372
  const char *query,
247
373
  const int nRetTypes,
248
374
  const Oid *retTypes);
375
+
376
+ /*
377
+ * walrcv_disconnect_fn
378
+ *
379
+ * Disconnect with the cluster.
380
+ */
249
381
  typedef void (*walrcv_disconnect_fn) (WalReceiverConn *conn);
250
382
 
251
383
  typedef struct WalReceiverFunctionsType
@@ -291,8 +423,8 @@ extern PGDLLIMPORT WalReceiverFunctionsType *WalReceiverFunctions;
291
423
  WalReceiverFunctions->walrcv_receive(conn, buffer, wait_fd)
292
424
  #define walrcv_send(conn, buffer, nbytes) \
293
425
  WalReceiverFunctions->walrcv_send(conn, buffer, nbytes)
294
- #define walrcv_create_slot(conn, slotname, temporary, snapshot_action, lsn) \
295
- WalReceiverFunctions->walrcv_create_slot(conn, slotname, temporary, snapshot_action, lsn)
426
+ #define walrcv_create_slot(conn, slotname, temporary, two_phase, snapshot_action, lsn) \
427
+ WalReceiverFunctions->walrcv_create_slot(conn, slotname, temporary, two_phase, snapshot_action, lsn)
296
428
  #define walrcv_get_backend_pid(conn) \
297
429
  WalReceiverFunctions->walrcv_get_backend_pid(conn)
298
430
  #define walrcv_exec(conn, exec, nRetTypes, retTypes) \
@@ -3,7 +3,7 @@
3
3
  * walsender.h
4
4
  * Exports from replication/walsender.c.
5
5
  *
6
- * Portions Copyright (c) 2010-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 2010-2022, PostgreSQL Global Development Group
7
7
  *
8
8
  * src/include/replication/walsender.h
9
9
  *
@@ -25,15 +25,15 @@ typedef enum
25
25
  } CRSSnapshotAction;
26
26
 
27
27
  /* global state */
28
- extern bool am_walsender;
29
- extern bool am_cascading_walsender;
30
- extern bool am_db_walsender;
31
- extern bool wake_wal_senders;
28
+ extern PGDLLIMPORT bool am_walsender;
29
+ extern PGDLLIMPORT bool am_cascading_walsender;
30
+ extern PGDLLIMPORT bool am_db_walsender;
31
+ extern PGDLLIMPORT bool wake_wal_senders;
32
32
 
33
33
  /* user-settable parameters */
34
- extern int max_wal_senders;
35
- extern int wal_sender_timeout;
36
- extern bool log_replication_commands;
34
+ extern PGDLLIMPORT int max_wal_senders;
35
+ extern PGDLLIMPORT int wal_sender_timeout;
36
+ extern PGDLLIMPORT bool log_replication_commands;
37
37
 
38
38
  extern void InitWalSender(void);
39
39
  extern bool exec_replication_command(const char *query_string);
@@ -3,7 +3,7 @@
3
3
  * prs2lock.h
4
4
  * data structures for POSTGRES Rule System II (rewrite rules only)
5
5
  *
6
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/rewrite/prs2lock.h
@@ -4,7 +4,7 @@
4
4
  * External interface to query rewriter.
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/rewrite/rewriteHandler.h
@@ -23,8 +23,6 @@ extern void AcquireRewriteLocks(Query *parsetree,
23
23
  bool forUpdatePushedDown);
24
24
 
25
25
  extern Node *build_column_default(Relation rel, int attrno);
26
- extern void rewriteTargetListUD(Query *parsetree, RangeTblEntry *target_rte,
27
- Relation target_relation);
28
26
 
29
27
  extern void fill_extraUpdatedCols(RangeTblEntry *target_rte,
30
28
  Relation target_relation);
@@ -4,7 +4,7 @@
4
4
  * Querytree manipulation subroutines for query rewriter.
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/rewrite/rewriteManip.h
@@ -4,7 +4,7 @@
4
4
  *
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/rewrite/rewriteSupport.h
@@ -4,7 +4,7 @@
4
4
  * POSTGRES backend id communication 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/backendid.h
@@ -25,13 +25,13 @@ typedef int BackendId; /* unique currently active backend identifier */
25
25
  extern PGDLLIMPORT BackendId MyBackendId; /* backend id of this backend */
26
26
 
27
27
  /* backend id of our parallel session leader, or InvalidBackendId if none */
28
- extern PGDLLIMPORT BackendId ParallelMasterBackendId;
28
+ extern PGDLLIMPORT BackendId ParallelLeaderBackendId;
29
29
 
30
30
  /*
31
31
  * The BackendId to use for our session's temp relations is normally our own,
32
32
  * but parallel workers should use their leader's ID.
33
33
  */
34
34
  #define BackendIdForTempRelations() \
35
- (ParallelMasterBackendId == InvalidBackendId ? MyBackendId : ParallelMasterBackendId)
35
+ (ParallelLeaderBackendId == InvalidBackendId ? MyBackendId : ParallelLeaderBackendId)
36
36
 
37
37
  #endif /* BACKENDID_H */
@@ -4,7 +4,7 @@
4
4
  * POSTGRES disk block 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/block.h
@@ -68,14 +68,14 @@ typedef BlockIdData *BlockId; /* block identifier */
68
68
  * True iff blockNumber is valid.
69
69
  */
70
70
  #define BlockNumberIsValid(blockNumber) \
71
- ((bool) ((BlockNumber) (blockNumber) != InvalidBlockNumber))
71
+ ((BlockNumber) (blockNumber) != InvalidBlockNumber)
72
72
 
73
73
  /*
74
74
  * BlockIdIsValid
75
75
  * True iff the block identifier is valid.
76
76
  */
77
77
  #define BlockIdIsValid(blockId) \
78
- ((bool) PointerIsValid(blockId))
78
+ PointerIsValid(blockId)
79
79
 
80
80
  /*
81
81
  * BlockIdSet
@@ -83,7 +83,6 @@ typedef BlockIdData *BlockId; /* block identifier */
83
83
  */
84
84
  #define BlockIdSet(blockId, blockNumber) \
85
85
  ( \
86
- AssertMacro(PointerIsValid(blockId)), \
87
86
  (blockId)->bi_hi = (blockNumber) >> 16, \
88
87
  (blockId)->bi_lo = (blockNumber) & 0xffff \
89
88
  )
@@ -94,8 +93,6 @@ typedef BlockIdData *BlockId; /* block identifier */
94
93
  */
95
94
  #define BlockIdCopy(toBlockId, fromBlockId) \
96
95
  ( \
97
- AssertMacro(PointerIsValid(toBlockId)), \
98
- AssertMacro(PointerIsValid(fromBlockId)), \
99
96
  (toBlockId)->bi_hi = (fromBlockId)->bi_hi, \
100
97
  (toBlockId)->bi_lo = (fromBlockId)->bi_lo \
101
98
  )
@@ -113,9 +110,6 @@ typedef BlockIdData *BlockId; /* block identifier */
113
110
  * Retrieve the block number from a block identifier.
114
111
  */
115
112
  #define BlockIdGetBlockNumber(blockId) \
116
- ( \
117
- AssertMacro(BlockIdIsValid(blockId)), \
118
- (BlockNumber) (((blockId)->bi_hi << 16) | ((uint16) (blockId)->bi_lo)) \
119
- )
113
+ ((((BlockNumber) (blockId)->bi_hi) << 16) | ((BlockNumber) (blockId)->bi_lo))
120
114
 
121
115
  #endif /* BLOCK_H */
@@ -4,7 +4,7 @@
4
4
  * Basic buffer manager data types.
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/buf.h
@@ -4,7 +4,7 @@
4
4
  * POSTGRES buffer 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/bufmgr.h
@@ -65,16 +65,16 @@ struct SMgrRelationData;
65
65
  extern PGDLLIMPORT int NBuffers;
66
66
 
67
67
  /* in bufmgr.c */
68
- extern bool zero_damaged_pages;
69
- extern int bgwriter_lru_maxpages;
70
- extern double bgwriter_lru_multiplier;
71
- extern bool track_io_timing;
72
- extern int effective_io_concurrency;
73
- extern int maintenance_io_concurrency;
68
+ extern PGDLLIMPORT bool zero_damaged_pages;
69
+ extern PGDLLIMPORT int bgwriter_lru_maxpages;
70
+ extern PGDLLIMPORT double bgwriter_lru_multiplier;
71
+ extern PGDLLIMPORT bool track_io_timing;
72
+ extern PGDLLIMPORT int effective_io_concurrency;
73
+ extern PGDLLIMPORT int maintenance_io_concurrency;
74
74
 
75
- extern int checkpoint_flush_after;
76
- extern int backend_flush_after;
77
- extern int bgwriter_flush_after;
75
+ extern PGDLLIMPORT int checkpoint_flush_after;
76
+ extern PGDLLIMPORT int backend_flush_after;
77
+ extern PGDLLIMPORT int bgwriter_flush_after;
78
78
 
79
79
  /* in buf_init.c */
80
80
  extern PGDLLIMPORT char *BufferBlocks;
@@ -176,13 +176,16 @@ extern PrefetchBufferResult PrefetchSharedBuffer(struct SMgrRelationData *smgr_r
176
176
  BlockNumber blockNum);
177
177
  extern PrefetchBufferResult PrefetchBuffer(Relation reln, ForkNumber forkNum,
178
178
  BlockNumber blockNum);
179
+ extern bool ReadRecentBuffer(RelFileNode rnode, ForkNumber forkNum,
180
+ BlockNumber blockNum, Buffer recent_buffer);
179
181
  extern Buffer ReadBuffer(Relation reln, BlockNumber blockNum);
180
182
  extern Buffer ReadBufferExtended(Relation reln, ForkNumber forkNum,
181
183
  BlockNumber blockNum, ReadBufferMode mode,
182
184
  BufferAccessStrategy strategy);
183
185
  extern Buffer ReadBufferWithoutRelcache(RelFileNode rnode,
184
186
  ForkNumber forkNum, BlockNumber blockNum,
185
- ReadBufferMode mode, BufferAccessStrategy strategy);
187
+ ReadBufferMode mode, BufferAccessStrategy strategy,
188
+ bool permanent);
186
189
  extern void ReleaseBuffer(Buffer buffer);
187
190
  extern void UnlockReleaseBuffer(Buffer buffer);
188
191
  extern void MarkBufferDirty(Buffer buffer);
@@ -192,7 +195,6 @@ extern Buffer ReleaseAndReadBuffer(Buffer buffer, Relation relation,
192
195
 
193
196
  extern void InitBufferPool(void);
194
197
  extern void InitBufferPoolAccess(void);
195
- extern void InitBufferPoolBackend(void);
196
198
  extern void AtEOXact_Buffers(bool isCommit);
197
199
  extern void PrintBufferLeakWarning(Buffer buffer);
198
200
  extern void CheckPointBuffers(int flags);
@@ -202,10 +204,13 @@ extern BlockNumber RelationGetNumberOfBlocksInFork(Relation relation,
202
204
  extern void FlushOneBuffer(Buffer buffer);
203
205
  extern void FlushRelationBuffers(Relation rel);
204
206
  extern void FlushRelationsAllBuffers(struct SMgrRelationData **smgrs, int nrels);
207
+ extern void CreateAndCopyRelationData(RelFileNode src_rnode,
208
+ RelFileNode dst_rnode,
209
+ bool permanent);
205
210
  extern void FlushDatabaseBuffers(Oid dbid);
206
- extern void DropRelFileNodeBuffers(RelFileNodeBackend rnode, ForkNumber *forkNum,
211
+ extern void DropRelFileNodeBuffers(struct SMgrRelationData *smgr_reln, ForkNumber *forkNum,
207
212
  int nforks, BlockNumber *firstDelBlock);
208
- extern void DropRelFileNodesAllBuffers(RelFileNodeBackend *rnodes, int nnodes);
213
+ extern void DropRelFileNodesAllBuffers(struct SMgrRelationData **smgr_reln, int nnodes);
209
214
  extern void DropDatabaseBuffers(Oid dbid);
210
215
 
211
216
  #define RelationGetNumberOfBlocks(reln) \
@@ -4,7 +4,7 @@
4
4
  * Standard POSTGRES buffer page 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/bufpage.h
@@ -389,12 +389,6 @@ PageValidateSpecialPointer(Page page)
389
389
  #define PageClearAllVisible(page) \
390
390
  (((PageHeader) (page))->pd_flags &= ~PD_ALL_VISIBLE)
391
391
 
392
- #define PageIsPrunable(page, oldestxmin) \
393
- ( \
394
- AssertMacro(TransactionIdIsNormal(oldestxmin)), \
395
- TransactionIdIsValid(((PageHeader) (page))->pd_prune_xid) && \
396
- TransactionIdPrecedes(((PageHeader) (page))->pd_prune_xid, oldestxmin) \
397
- )
398
392
  #define PageSetPrunable(page, xid) \
399
393
  do { \
400
394
  Assert(TransactionIdIsNormal(xid)); \
@@ -424,6 +418,10 @@ do { \
424
418
  ((overwrite) ? PAI_OVERWRITE : 0) | \
425
419
  ((is_heap) ? PAI_IS_HEAP : 0))
426
420
 
421
+ #define PageIsVerified(page, blkno) \
422
+ PageIsVerifiedExtended(page, blkno, \
423
+ PIV_LOG_WARNING | PIV_REPORT_STAT)
424
+
427
425
  /*
428
426
  * Check that BLCKSZ is a multiple of sizeof(size_t). In
429
427
  * PageIsVerifiedExtended(), it is much faster to check if a page is
@@ -435,7 +433,6 @@ StaticAssertDecl(BLCKSZ == ((BLCKSZ / sizeof(size_t)) * sizeof(size_t)),
435
433
  "BLCKSZ has to be a multiple of sizeof(size_t)");
436
434
 
437
435
  extern void PageInit(Page page, Size pageSize, Size specialSize);
438
- extern bool PageIsVerified(Page page, BlockNumber blkno);
439
436
  extern bool PageIsVerifiedExtended(Page page, BlockNumber blkno, int flags);
440
437
  extern OffsetNumber PageAddItemExtended(Page page, Item item, Size size,
441
438
  OffsetNumber offsetNumber, int flags);
@@ -444,6 +441,7 @@ extern Page PageGetTempPageCopy(Page page);
444
441
  extern Page PageGetTempPageCopySpecial(Page page);
445
442
  extern void PageRestoreTempPage(Page tempPage, Page oldPage);
446
443
  extern void PageRepairFragmentation(Page page);
444
+ extern void PageTruncateLinePointerArray(Page page);
447
445
  extern Size PageGetFreeSpace(Page page);
448
446
  extern Size PageGetFreeSpaceForMultipleTuples(Page page, int ntups);
449
447
  extern Size PageGetExactFreeSpace(Page page);
@@ -12,7 +12,7 @@
12
12
  * can be canceled prior to the fulfillment of the condition) and do not
13
13
  * use pointers internally (so that they are safe to use within DSMs).
14
14
  *
15
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
15
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
16
16
  * Portions Copyright (c) 1994, Regents of the University of California
17
17
  *
18
18
  * src/include/storage/condition_variable.h
@@ -23,7 +23,7 @@
23
23
  #define CONDITION_VARIABLE_H
24
24
 
25
25
  #include "storage/proclist_types.h"
26
- #include "storage/s_lock.h"
26
+ #include "storage/spin.h"
27
27
 
28
28
  typedef struct
29
29
  {
@@ -31,6 +31,17 @@ typedef struct
31
31
  proclist_head wakeup; /* list of wake-able processes */
32
32
  } ConditionVariable;
33
33
 
34
+ /*
35
+ * Pad a condition variable to a power-of-two size so that an array of
36
+ * condition variables does not cross a cache line boundary.
37
+ */
38
+ #define CV_MINIMAL_SIZE (sizeof(ConditionVariable) <= 16 ? 16 : 32)
39
+ typedef union ConditionVariableMinimallyPadded
40
+ {
41
+ ConditionVariable cv;
42
+ char pad[CV_MINIMAL_SIZE];
43
+ } ConditionVariableMinimallyPadded;
44
+
34
45
  /* Initialize a condition variable. */
35
46
  extern void ConditionVariableInit(ConditionVariable *cv);
36
47
 
@@ -3,7 +3,7 @@
3
3
  * dsm.h
4
4
  * manage dynamic shared memory segments
5
5
  *
6
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/storage/dsm.h
@@ -29,6 +29,9 @@ extern void dsm_postmaster_startup(struct PGShmemHeader *);
29
29
  extern void dsm_backend_shutdown(void);
30
30
  extern void dsm_detach_all(void);
31
31
 
32
+ extern size_t dsm_estimate_size(void);
33
+ extern void dsm_shmem_init(void);
34
+
32
35
  #ifdef EXEC_BACKEND
33
36
  extern void dsm_set_control_handle(dsm_handle h);
34
37
  #endif
@@ -3,7 +3,7 @@
3
3
  * dsm_impl.h
4
4
  * low-level dynamic shared memory primitives
5
5
  *
6
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/storage/dsm_impl.h
@@ -39,7 +39,8 @@
39
39
  #endif
40
40
 
41
41
  /* GUC. */
42
- extern int dynamic_shared_memory_type;
42
+ extern PGDLLIMPORT int dynamic_shared_memory_type;
43
+ extern PGDLLIMPORT int min_dynamic_shared_memory;
43
44
 
44
45
  /*
45
46
  * Directory for on-disk state.