pg_query 4.2.2 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (486) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -0
  3. data/README.md +6 -8
  4. data/Rakefile +3 -3
  5. data/ext/pg_query/extconf.rb +1 -3
  6. data/ext/pg_query/include/access/amapi.h +3 -1
  7. data/ext/pg_query/include/access/attmap.h +5 -3
  8. data/ext/pg_query/include/access/attnum.h +1 -1
  9. data/ext/pg_query/include/access/clog.h +1 -1
  10. data/ext/pg_query/include/access/commit_ts.h +1 -1
  11. data/ext/pg_query/include/access/detoast.h +1 -1
  12. data/ext/pg_query/include/access/genam.h +7 -5
  13. data/ext/pg_query/include/access/gin.h +16 -3
  14. data/ext/pg_query/include/access/htup.h +1 -1
  15. data/ext/pg_query/include/access/htup_details.h +6 -2
  16. data/ext/pg_query/include/access/itup.h +61 -58
  17. data/ext/pg_query/include/access/parallel.h +2 -2
  18. data/ext/pg_query/include/access/printtup.h +1 -1
  19. data/ext/pg_query/include/access/relation.h +1 -1
  20. data/ext/pg_query/include/access/relscan.h +1 -1
  21. data/ext/pg_query/include/access/rmgrlist.h +2 -2
  22. data/ext/pg_query/include/access/sdir.h +12 -3
  23. data/ext/pg_query/include/access/skey.h +1 -1
  24. data/ext/pg_query/include/access/stratnum.h +1 -1
  25. data/ext/pg_query/include/access/sysattr.h +1 -1
  26. data/ext/pg_query/include/access/table.h +1 -1
  27. data/ext/pg_query/include/access/tableam.h +68 -45
  28. data/ext/pg_query/include/access/toast_compression.h +1 -1
  29. data/ext/pg_query/include/access/transam.h +1 -1
  30. data/ext/pg_query/include/access/tsmapi.h +82 -0
  31. data/ext/pg_query/include/access/tupconvert.h +5 -2
  32. data/ext/pg_query/include/access/tupdesc.h +2 -2
  33. data/ext/pg_query/include/access/tupmacs.h +58 -98
  34. data/ext/pg_query/include/access/twophase.h +2 -2
  35. data/ext/pg_query/include/access/xact.h +25 -18
  36. data/ext/pg_query/include/access/xlog.h +15 -16
  37. data/ext/pg_query/include/access/xlog_internal.h +100 -62
  38. data/ext/pg_query/include/access/xlogbackup.h +41 -0
  39. data/ext/pg_query/include/access/xlogdefs.h +6 -25
  40. data/ext/pg_query/include/access/xlogprefetcher.h +1 -1
  41. data/ext/pg_query/include/access/xlogreader.h +7 -6
  42. data/ext/pg_query/include/access/xlogrecord.h +17 -5
  43. data/ext/pg_query/include/access/xlogrecovery.h +4 -3
  44. data/ext/pg_query/include/archive/archive_module.h +59 -0
  45. data/ext/pg_query/include/c.h +144 -156
  46. data/ext/pg_query/include/catalog/catalog.h +4 -3
  47. data/ext/pg_query/include/catalog/catversion.h +6 -2
  48. data/ext/pg_query/include/catalog/dependency.h +5 -4
  49. data/ext/pg_query/include/catalog/genbki.h +7 -6
  50. data/ext/pg_query/include/catalog/index.h +4 -4
  51. data/ext/pg_query/include/catalog/indexing.h +1 -1
  52. data/ext/pg_query/include/catalog/namespace.h +2 -2
  53. data/ext/pg_query/include/catalog/objectaccess.h +10 -8
  54. data/ext/pg_query/include/catalog/objectaddress.h +3 -3
  55. data/ext/pg_query/include/catalog/pg_aggregate.h +1 -1
  56. data/ext/pg_query/include/catalog/pg_aggregate_d.h +1 -1
  57. data/ext/pg_query/include/catalog/pg_am.h +1 -1
  58. data/ext/pg_query/include/catalog/pg_am_d.h +1 -1
  59. data/ext/pg_query/include/catalog/pg_attribute.h +19 -17
  60. data/ext/pg_query/include/catalog/pg_attribute_d.h +19 -19
  61. data/ext/pg_query/include/catalog/pg_authid.h +1 -1
  62. data/ext/pg_query/include/catalog/pg_authid_d.h +3 -1
  63. data/ext/pg_query/include/catalog/pg_class.h +1 -1
  64. data/ext/pg_query/include/catalog/pg_class_d.h +1 -1
  65. data/ext/pg_query/include/catalog/pg_collation.h +3 -1
  66. data/ext/pg_query/include/catalog/pg_collation_d.h +4 -3
  67. data/ext/pg_query/include/catalog/pg_constraint.h +2 -2
  68. data/ext/pg_query/include/catalog/pg_constraint_d.h +1 -1
  69. data/ext/pg_query/include/catalog/pg_control.h +9 -1
  70. data/ext/pg_query/include/catalog/pg_conversion.h +2 -2
  71. data/ext/pg_query/include/catalog/pg_conversion_d.h +1 -1
  72. data/ext/pg_query/include/catalog/pg_database.h +124 -0
  73. data/ext/pg_query/include/catalog/pg_database_d.h +52 -0
  74. data/ext/pg_query/include/catalog/pg_depend.h +1 -1
  75. data/ext/pg_query/include/catalog/pg_depend_d.h +1 -1
  76. data/ext/pg_query/include/catalog/pg_event_trigger.h +1 -1
  77. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +1 -1
  78. data/ext/pg_query/include/catalog/pg_index.h +1 -1
  79. data/ext/pg_query/include/catalog/pg_index_d.h +1 -1
  80. data/ext/pg_query/include/catalog/pg_language.h +1 -1
  81. data/ext/pg_query/include/catalog/pg_language_d.h +1 -1
  82. data/ext/pg_query/include/catalog/pg_namespace.h +1 -1
  83. data/ext/pg_query/include/catalog/pg_namespace_d.h +1 -1
  84. data/ext/pg_query/include/catalog/pg_opclass.h +1 -1
  85. data/ext/pg_query/include/catalog/pg_opclass_d.h +1 -1
  86. data/ext/pg_query/include/catalog/pg_operator.h +1 -1
  87. data/ext/pg_query/include/catalog/pg_operator_d.h +1 -1
  88. data/ext/pg_query/include/catalog/pg_opfamily.h +3 -2
  89. data/ext/pg_query/include/catalog/pg_opfamily_d.h +4 -2
  90. data/ext/pg_query/include/catalog/pg_partitioned_table.h +1 -1
  91. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +1 -1
  92. data/ext/pg_query/include/catalog/pg_proc.h +1 -1
  93. data/ext/pg_query/include/catalog/pg_proc_d.h +1 -1
  94. data/ext/pg_query/include/catalog/pg_publication.h +2 -5
  95. data/ext/pg_query/include/catalog/pg_publication_d.h +1 -1
  96. data/ext/pg_query/include/catalog/pg_replication_origin.h +1 -1
  97. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +1 -1
  98. data/ext/pg_query/include/catalog/pg_statistic.h +1 -1
  99. data/ext/pg_query/include/catalog/pg_statistic_d.h +1 -1
  100. data/ext/pg_query/include/catalog/pg_statistic_ext.h +1 -1
  101. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +1 -1
  102. data/ext/pg_query/include/catalog/pg_transform.h +1 -1
  103. data/ext/pg_query/include/catalog/pg_transform_d.h +1 -1
  104. data/ext/pg_query/include/catalog/pg_trigger.h +1 -1
  105. data/ext/pg_query/include/catalog/pg_trigger_d.h +1 -1
  106. data/ext/pg_query/include/catalog/pg_ts_config.h +1 -1
  107. data/ext/pg_query/include/catalog/pg_ts_config_d.h +1 -1
  108. data/ext/pg_query/include/catalog/pg_ts_dict.h +1 -1
  109. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +1 -1
  110. data/ext/pg_query/include/catalog/pg_ts_parser.h +1 -1
  111. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +1 -1
  112. data/ext/pg_query/include/catalog/pg_ts_template.h +1 -1
  113. data/ext/pg_query/include/catalog/pg_ts_template_d.h +1 -1
  114. data/ext/pg_query/include/catalog/pg_type.h +1 -1
  115. data/ext/pg_query/include/catalog/pg_type_d.h +1 -1
  116. data/ext/pg_query/include/catalog/storage.h +6 -6
  117. data/ext/pg_query/include/commands/async.h +1 -1
  118. data/ext/pg_query/include/commands/dbcommands.h +2 -1
  119. data/ext/pg_query/include/commands/defrem.h +2 -1
  120. data/ext/pg_query/include/commands/event_trigger.h +1 -1
  121. data/ext/pg_query/include/commands/explain.h +3 -1
  122. data/ext/pg_query/include/commands/prepare.h +1 -1
  123. data/ext/pg_query/include/commands/tablespace.h +4 -4
  124. data/ext/pg_query/include/commands/trigger.h +15 -14
  125. data/ext/pg_query/include/commands/user.h +9 -3
  126. data/ext/pg_query/include/commands/vacuum.h +60 -14
  127. data/ext/pg_query/include/common/cryptohash.h +39 -0
  128. data/ext/pg_query/include/common/file_perm.h +1 -1
  129. data/ext/pg_query/include/common/hashfn.h +1 -1
  130. data/ext/pg_query/include/common/int.h +437 -0
  131. data/ext/pg_query/include/common/ip.h +4 -2
  132. data/ext/pg_query/include/common/keywords.h +1 -1
  133. data/ext/pg_query/include/common/kwlookup.h +2 -2
  134. data/ext/pg_query/include/common/pg_prng.h +3 -2
  135. data/ext/pg_query/include/common/relpath.h +20 -13
  136. data/ext/pg_query/include/common/scram-common.h +70 -0
  137. data/ext/pg_query/include/common/sha2.h +32 -0
  138. data/ext/pg_query/include/common/string.h +5 -3
  139. data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +10 -10
  140. data/ext/pg_query/include/common/{unicode_combining_table.h → unicode_nonspacing_table.h} +31 -13
  141. data/ext/pg_query/include/copyfuncs.funcs.c +5013 -0
  142. data/ext/pg_query/include/copyfuncs.switch.c +938 -0
  143. data/ext/pg_query/include/datatype/timestamp.h +11 -4
  144. data/ext/pg_query/include/equalfuncs.funcs.c +3097 -0
  145. data/ext/pg_query/include/equalfuncs.switch.c +785 -0
  146. data/ext/pg_query/include/executor/execdesc.h +1 -1
  147. data/ext/pg_query/include/executor/executor.h +34 -17
  148. data/ext/pg_query/include/executor/functions.h +1 -1
  149. data/ext/pg_query/include/executor/instrument.h +1 -1
  150. data/ext/pg_query/include/executor/spi.h +2 -2
  151. data/ext/pg_query/include/executor/tablefunc.h +1 -1
  152. data/ext/pg_query/include/executor/tuptable.h +18 -11
  153. data/ext/pg_query/include/fmgr.h +21 -2
  154. data/ext/pg_query/include/foreign/fdwapi.h +294 -0
  155. data/ext/pg_query/include/funcapi.h +12 -12
  156. data/ext/pg_query/include/gram.h +1127 -0
  157. data/ext/pg_query/include/{parser/gramparse.h → gramparse.h} +4 -4
  158. data/ext/pg_query/include/jit/jit.h +2 -2
  159. data/ext/pg_query/include/kwlist_d.h +534 -510
  160. data/ext/pg_query/include/lib/dshash.h +4 -1
  161. data/ext/pg_query/include/lib/ilist.h +435 -22
  162. data/ext/pg_query/include/lib/pairingheap.h +1 -1
  163. data/ext/pg_query/include/lib/simplehash.h +9 -9
  164. data/ext/pg_query/include/lib/sort_template.h +1 -1
  165. data/ext/pg_query/include/lib/stringinfo.h +3 -3
  166. data/ext/pg_query/include/libpq/auth.h +8 -2
  167. data/ext/pg_query/include/libpq/crypt.h +1 -1
  168. data/ext/pg_query/include/libpq/hba.h +24 -17
  169. data/ext/pg_query/include/libpq/libpq-be.h +36 -25
  170. data/ext/pg_query/include/libpq/libpq.h +1 -1
  171. data/ext/pg_query/include/libpq/pqcomm.h +10 -41
  172. data/ext/pg_query/include/libpq/pqformat.h +2 -2
  173. data/ext/pg_query/include/libpq/pqsignal.h +22 -10
  174. data/ext/pg_query/include/libpq/sasl.h +136 -0
  175. data/ext/pg_query/include/libpq/scram.h +37 -0
  176. data/ext/pg_query/include/mb/pg_wchar.h +35 -18
  177. data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
  178. data/ext/pg_query/include/miscadmin.h +26 -14
  179. data/ext/pg_query/include/nodes/bitmapset.h +11 -7
  180. data/ext/pg_query/include/nodes/execnodes.h +83 -30
  181. data/ext/pg_query/include/nodes/extensible.h +5 -3
  182. data/ext/pg_query/include/nodes/lockoptions.h +1 -1
  183. data/ext/pg_query/include/nodes/makefuncs.h +14 -2
  184. data/ext/pg_query/include/nodes/memnodes.h +7 -4
  185. data/ext/pg_query/include/nodes/miscnodes.h +56 -0
  186. data/ext/pg_query/include/nodes/nodeFuncs.h +89 -29
  187. data/ext/pg_query/include/nodes/nodes.h +95 -510
  188. data/ext/pg_query/include/nodes/nodetags.h +471 -0
  189. data/ext/pg_query/include/nodes/params.h +3 -3
  190. data/ext/pg_query/include/nodes/parsenodes.h +377 -139
  191. data/ext/pg_query/include/nodes/pathnodes.h +1090 -440
  192. data/ext/pg_query/include/nodes/pg_list.h +30 -7
  193. data/ext/pg_query/include/nodes/plannodes.h +367 -124
  194. data/ext/pg_query/include/nodes/primnodes.h +670 -222
  195. data/ext/pg_query/include/nodes/print.h +1 -1
  196. data/ext/pg_query/include/{utils → nodes}/queryjumble.h +5 -7
  197. data/ext/pg_query/include/nodes/replnodes.h +111 -0
  198. data/ext/pg_query/include/nodes/supportnodes.h +346 -0
  199. data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
  200. data/ext/pg_query/include/nodes/value.h +12 -2
  201. data/ext/pg_query/include/optimizer/cost.h +6 -4
  202. data/ext/pg_query/include/optimizer/geqo.h +1 -1
  203. data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
  204. data/ext/pg_query/include/optimizer/optimizer.h +8 -8
  205. data/ext/pg_query/include/optimizer/paths.h +16 -7
  206. data/ext/pg_query/include/optimizer/planmain.h +3 -6
  207. data/ext/pg_query/include/parser/analyze.h +4 -3
  208. data/ext/pg_query/include/parser/kwlist.h +12 -1
  209. data/ext/pg_query/include/parser/parse_agg.h +4 -2
  210. data/ext/pg_query/include/parser/parse_coerce.h +3 -1
  211. data/ext/pg_query/include/parser/parse_expr.h +1 -1
  212. data/ext/pg_query/include/parser/parse_func.h +1 -1
  213. data/ext/pg_query/include/parser/parse_node.h +22 -4
  214. data/ext/pg_query/include/parser/parse_oper.h +3 -3
  215. data/ext/pg_query/include/parser/parse_relation.h +8 -3
  216. data/ext/pg_query/include/parser/parse_type.h +4 -3
  217. data/ext/pg_query/include/parser/parser.h +1 -1
  218. data/ext/pg_query/include/parser/parsetree.h +1 -1
  219. data/ext/pg_query/include/parser/scanner.h +2 -2
  220. data/ext/pg_query/include/parser/scansup.h +1 -1
  221. data/ext/pg_query/include/partitioning/partdefs.h +1 -1
  222. data/ext/pg_query/include/pg_config.h +23 -217
  223. data/ext/pg_query/include/pg_config_manual.h +8 -46
  224. data/ext/pg_query/include/pg_getopt.h +1 -1
  225. data/ext/pg_query/include/pg_query.h +27 -3
  226. data/ext/pg_query/include/pg_query_enum_defs.c +311 -149
  227. data/ext/pg_query/include/pg_query_fingerprint_conds.c +545 -489
  228. data/ext/pg_query/include/pg_query_fingerprint_defs.c +5092 -4432
  229. data/ext/pg_query/include/pg_query_outfuncs_conds.c +385 -343
  230. data/ext/pg_query/include/pg_query_outfuncs_defs.c +1294 -1161
  231. data/ext/pg_query/include/pg_query_readfuncs_conds.c +137 -123
  232. data/ext/pg_query/include/pg_query_readfuncs_defs.c +1657 -1496
  233. data/ext/pg_query/include/pg_trace.h +1 -1
  234. data/ext/pg_query/include/pgstat.h +172 -93
  235. data/ext/pg_query/include/pgtime.h +3 -3
  236. data/ext/pg_query/include/pl_gram.h +64 -62
  237. data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
  238. data/ext/pg_query/include/pl_reserved_kwlist_d.h +1 -1
  239. data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -1
  240. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +48 -46
  241. data/ext/pg_query/include/plpgsql.h +17 -22
  242. data/ext/pg_query/include/port/atomics/arch-arm.h +3 -3
  243. data/ext/pg_query/include/port/atomics/arch-ppc.h +21 -21
  244. data/ext/pg_query/include/port/atomics/arch-x86.h +2 -2
  245. data/ext/pg_query/include/port/atomics/fallback.h +3 -3
  246. data/ext/pg_query/include/port/atomics/generic-gcc.h +1 -1
  247. data/ext/pg_query/include/port/atomics/generic.h +1 -1
  248. data/ext/pg_query/include/port/atomics.h +2 -7
  249. data/ext/pg_query/include/port/pg_bitutils.h +62 -25
  250. data/ext/pg_query/include/port/pg_bswap.h +1 -1
  251. data/ext/pg_query/include/port/pg_crc32c.h +1 -1
  252. data/ext/pg_query/include/port/simd.h +375 -0
  253. data/ext/pg_query/include/port.h +42 -75
  254. data/ext/pg_query/include/portability/instr_time.h +81 -140
  255. data/ext/pg_query/include/postgres.h +205 -434
  256. data/ext/pg_query/include/postgres_ext.h +0 -1
  257. data/ext/pg_query/include/postmaster/autovacuum.h +1 -4
  258. data/ext/pg_query/include/postmaster/auxprocess.h +1 -1
  259. data/ext/pg_query/include/postmaster/bgworker.h +2 -2
  260. data/ext/pg_query/include/postmaster/bgworker_internals.h +1 -1
  261. data/ext/pg_query/include/postmaster/bgwriter.h +2 -2
  262. data/ext/pg_query/include/postmaster/fork_process.h +1 -1
  263. data/ext/pg_query/include/postmaster/interrupt.h +1 -1
  264. data/ext/pg_query/include/postmaster/pgarch.h +1 -38
  265. data/ext/pg_query/include/postmaster/postmaster.h +5 -2
  266. data/ext/pg_query/include/postmaster/startup.h +3 -1
  267. data/ext/pg_query/include/postmaster/syslogger.h +2 -2
  268. data/ext/pg_query/include/postmaster/walwriter.h +3 -1
  269. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +6186 -5585
  270. data/ext/pg_query/include/protobuf/pg_query.pb.h +112443 -91222
  271. data/ext/pg_query/include/regex/regex.h +9 -6
  272. data/ext/pg_query/include/replication/logicallauncher.h +6 -1
  273. data/ext/pg_query/include/replication/logicalproto.h +30 -10
  274. data/ext/pg_query/include/replication/logicalworker.h +14 -1
  275. data/ext/pg_query/include/replication/origin.h +4 -4
  276. data/ext/pg_query/include/replication/reorderbuffer.h +113 -45
  277. data/ext/pg_query/include/replication/slot.h +25 -6
  278. data/ext/pg_query/include/replication/syncrep.h +2 -8
  279. data/ext/pg_query/include/replication/walreceiver.h +15 -9
  280. data/ext/pg_query/include/replication/walsender.h +13 -13
  281. data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
  282. data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -4
  283. data/ext/pg_query/include/rewrite/rewriteManip.h +11 -2
  284. data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
  285. data/ext/pg_query/include/src_backend_nodes_copyfuncs.funcs.c +5321 -0
  286. data/ext/pg_query/include/src_backend_nodes_equalfuncs.funcs.c +3354 -0
  287. data/ext/pg_query/include/storage/backendid.h +1 -1
  288. data/ext/pg_query/include/storage/block.h +24 -31
  289. data/ext/pg_query/include/storage/buf.h +1 -1
  290. data/ext/pg_query/include/storage/bufmgr.h +183 -87
  291. data/ext/pg_query/include/storage/bufpage.h +146 -93
  292. data/ext/pg_query/include/storage/condition_variable.h +2 -2
  293. data/ext/pg_query/include/storage/dsm.h +3 -6
  294. data/ext/pg_query/include/storage/dsm_impl.h +4 -1
  295. data/ext/pg_query/include/storage/fd.h +24 -20
  296. data/ext/pg_query/include/storage/fileset.h +1 -1
  297. data/ext/pg_query/include/storage/ipc.h +1 -1
  298. data/ext/pg_query/include/storage/item.h +1 -1
  299. data/ext/pg_query/include/storage/itemid.h +1 -1
  300. data/ext/pg_query/include/storage/itemptr.h +94 -57
  301. data/ext/pg_query/include/storage/large_object.h +1 -1
  302. data/ext/pg_query/include/storage/latch.h +9 -1
  303. data/ext/pg_query/include/storage/lmgr.h +6 -1
  304. data/ext/pg_query/include/storage/lock.h +21 -13
  305. data/ext/pg_query/include/storage/lockdefs.h +3 -3
  306. data/ext/pg_query/include/storage/lwlock.h +16 -2
  307. data/ext/pg_query/include/storage/off.h +1 -1
  308. data/ext/pg_query/include/storage/pg_sema.h +1 -1
  309. data/ext/pg_query/include/storage/pg_shmem.h +1 -1
  310. data/ext/pg_query/include/storage/pmsignal.h +1 -1
  311. data/ext/pg_query/include/storage/predicate.h +2 -2
  312. data/ext/pg_query/include/storage/proc.h +22 -17
  313. data/ext/pg_query/include/storage/procarray.h +3 -2
  314. data/ext/pg_query/include/storage/proclist_types.h +1 -1
  315. data/ext/pg_query/include/storage/procsignal.h +3 -1
  316. data/ext/pg_query/include/storage/relfilelocator.h +99 -0
  317. data/ext/pg_query/include/storage/s_lock.h +66 -309
  318. data/ext/pg_query/include/storage/sharedfileset.h +1 -1
  319. data/ext/pg_query/include/storage/shm_mq.h +1 -1
  320. data/ext/pg_query/include/storage/shm_toc.h +1 -1
  321. data/ext/pg_query/include/storage/shmem.h +1 -23
  322. data/ext/pg_query/include/storage/sinval.h +3 -3
  323. data/ext/pg_query/include/storage/sinvaladt.h +4 -2
  324. data/ext/pg_query/include/storage/smgr.h +12 -10
  325. data/ext/pg_query/include/storage/spin.h +1 -1
  326. data/ext/pg_query/include/storage/standby.h +9 -8
  327. data/ext/pg_query/include/storage/standbydefs.h +1 -1
  328. data/ext/pg_query/include/storage/sync.h +3 -3
  329. data/ext/pg_query/include/tcop/cmdtag.h +7 -2
  330. data/ext/pg_query/include/tcop/cmdtaglist.h +1 -1
  331. data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
  332. data/ext/pg_query/include/tcop/dest.h +1 -3
  333. data/ext/pg_query/include/tcop/fastpath.h +1 -1
  334. data/ext/pg_query/include/tcop/pquery.h +1 -1
  335. data/ext/pg_query/include/tcop/tcopprot.h +1 -4
  336. data/ext/pg_query/include/tcop/utility.h +1 -1
  337. data/ext/pg_query/include/tsearch/ts_cache.h +2 -4
  338. data/ext/pg_query/include/utils/acl.h +26 -81
  339. data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
  340. data/ext/pg_query/include/utils/array.h +19 -1
  341. data/ext/pg_query/include/utils/backend_progress.h +2 -1
  342. data/ext/pg_query/include/utils/backend_status.h +24 -3
  343. data/ext/pg_query/include/utils/builtins.h +14 -5
  344. data/ext/pg_query/include/utils/bytea.h +1 -1
  345. data/ext/pg_query/include/utils/catcache.h +1 -1
  346. data/ext/pg_query/include/utils/date.h +37 -9
  347. data/ext/pg_query/include/utils/datetime.h +41 -21
  348. data/ext/pg_query/include/utils/datum.h +1 -1
  349. data/ext/pg_query/include/utils/dsa.h +5 -1
  350. data/ext/pg_query/include/utils/elog.h +101 -26
  351. data/ext/pg_query/include/utils/expandeddatum.h +14 -3
  352. data/ext/pg_query/include/utils/expandedrecord.h +14 -4
  353. data/ext/pg_query/include/utils/float.h +7 -6
  354. data/ext/pg_query/include/utils/fmgroids.h +54 -1
  355. data/ext/pg_query/include/utils/fmgrprotos.h +45 -3
  356. data/ext/pg_query/include/utils/fmgrtab.h +1 -1
  357. data/ext/pg_query/include/utils/guc.h +55 -82
  358. data/ext/pg_query/include/utils/guc_hooks.h +163 -0
  359. data/ext/pg_query/include/utils/guc_tables.h +49 -3
  360. data/ext/pg_query/include/utils/hsearch.h +1 -1
  361. data/ext/pg_query/include/utils/inval.h +3 -3
  362. data/ext/pg_query/include/utils/logtape.h +77 -0
  363. data/ext/pg_query/include/utils/lsyscache.h +5 -1
  364. data/ext/pg_query/include/utils/memdebug.h +1 -1
  365. data/ext/pg_query/include/utils/memutils.h +5 -49
  366. data/ext/pg_query/include/utils/memutils_internal.h +136 -0
  367. data/ext/pg_query/include/utils/memutils_memorychunk.h +237 -0
  368. data/ext/pg_query/include/utils/numeric.h +20 -5
  369. data/ext/pg_query/include/utils/palloc.h +8 -1
  370. data/ext/pg_query/include/utils/partcache.h +3 -2
  371. data/ext/pg_query/include/utils/pg_locale.h +22 -14
  372. data/ext/pg_query/include/utils/pgstat_internal.h +37 -7
  373. data/ext/pg_query/include/utils/pidfile.h +1 -1
  374. data/ext/pg_query/include/utils/plancache.h +1 -1
  375. data/ext/pg_query/include/utils/portal.h +1 -1
  376. data/ext/pg_query/include/utils/probes.h +6 -6
  377. data/ext/pg_query/include/utils/ps_status.h +23 -1
  378. data/ext/pg_query/include/utils/queryenvironment.h +1 -1
  379. data/ext/pg_query/include/utils/regproc.h +3 -3
  380. data/ext/pg_query/include/utils/rel.h +60 -43
  381. data/ext/pg_query/include/utils/relcache.h +13 -8
  382. data/ext/pg_query/include/utils/reltrigger.h +1 -1
  383. data/ext/pg_query/include/utils/resowner.h +1 -1
  384. data/ext/pg_query/include/utils/ruleutils.h +6 -1
  385. data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
  386. data/ext/pg_query/include/utils/snapmgr.h +4 -2
  387. data/ext/pg_query/include/utils/snapshot.h +1 -1
  388. data/ext/pg_query/include/utils/sortsupport.h +2 -2
  389. data/ext/pg_query/include/utils/syscache.h +4 -1
  390. data/ext/pg_query/include/utils/timeout.h +1 -1
  391. data/ext/pg_query/include/utils/timestamp.h +41 -11
  392. data/ext/pg_query/include/utils/tuplesort.h +189 -35
  393. data/ext/pg_query/include/utils/tuplestore.h +1 -1
  394. data/ext/pg_query/include/utils/typcache.h +1 -1
  395. data/ext/pg_query/include/utils/varlena.h +13 -1
  396. data/ext/pg_query/include/utils/wait_event.h +9 -4
  397. data/ext/pg_query/include/utils/xml.h +15 -5
  398. data/ext/pg_query/include/varatt.h +358 -0
  399. data/ext/pg_query/pg_query.c +1 -1
  400. data/ext/pg_query/pg_query.pb-c.c +19755 -17757
  401. data/ext/pg_query/pg_query_fingerprint.c +8 -3
  402. data/ext/pg_query/pg_query_fingerprint.h +1 -1
  403. data/ext/pg_query/pg_query_internal.h +1 -1
  404. data/ext/pg_query/pg_query_json_plpgsql.c +1 -0
  405. data/ext/pg_query/pg_query_normalize.c +1 -1
  406. data/ext/pg_query/pg_query_outfuncs_protobuf.c +2 -2
  407. data/ext/pg_query/pg_query_parse.c +46 -4
  408. data/ext/pg_query/pg_query_parse_plpgsql.c +1 -1
  409. data/ext/pg_query/pg_query_scan.c +1 -1
  410. data/ext/pg_query/pg_query_split.c +2 -2
  411. data/ext/pg_query/postgres_deparse.c +511 -109
  412. data/ext/pg_query/src_backend_catalog_namespace.c +7 -2
  413. data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -1
  414. data/ext/pg_query/src_backend_commands_define.c +1 -1
  415. data/ext/pg_query/src_backend_nodes_bitmapset.c +11 -70
  416. data/ext/pg_query/src_backend_nodes_copyfuncs.c +96 -6202
  417. data/ext/pg_query/src_backend_nodes_equalfuncs.c +95 -4068
  418. data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
  419. data/ext/pg_query/src_backend_nodes_list.c +14 -2
  420. data/ext/pg_query/src_backend_nodes_makefuncs.c +95 -1
  421. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +283 -132
  422. data/ext/pg_query/src_backend_nodes_value.c +1 -1
  423. data/ext/pg_query/src_backend_parser_gram.c +33208 -31806
  424. data/ext/pg_query/src_backend_parser_parser.c +28 -2
  425. data/ext/pg_query/src_backend_parser_scan.c +4318 -3329
  426. data/ext/pg_query/src_backend_parser_scansup.c +1 -1
  427. data/ext/pg_query/src_backend_postmaster_postmaster.c +129 -110
  428. data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
  429. data/ext/pg_query/src_backend_tcop_postgres.c +66 -87
  430. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +1 -1
  431. data/ext/pg_query/src_backend_utils_adt_datum.c +5 -7
  432. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  433. data/ext/pg_query/src_backend_utils_adt_format_type.c +1 -1
  434. data/ext/pg_query/src_backend_utils_adt_numutils.c +489 -0
  435. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +79 -5
  436. data/ext/pg_query/src_backend_utils_error_assert.c +4 -7
  437. data/ext/pg_query/src_backend_utils_error_elog.c +354 -97
  438. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +33 -1
  439. data/ext/pg_query/src_backend_utils_init_globals.c +5 -2
  440. data/ext/pg_query/src_backend_utils_mb_mbutils.c +13 -4
  441. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +494 -0
  442. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +163 -0
  443. data/ext/pg_query/src_backend_utils_mmgr_aset.c +449 -312
  444. data/ext/pg_query/src_backend_utils_mmgr_generation.c +1039 -0
  445. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +398 -49
  446. data/ext/pg_query/src_backend_utils_mmgr_slab.c +1021 -0
  447. data/ext/pg_query/src_common_encnames.c +4 -1
  448. data/ext/pg_query/src_common_hashfn.c +1 -1
  449. data/ext/pg_query/src_common_keywords.c +1 -1
  450. data/ext/pg_query/src_common_kwlist_d.h +534 -510
  451. data/ext/pg_query/src_common_kwlookup.c +1 -1
  452. data/ext/pg_query/src_common_psprintf.c +1 -1
  453. data/ext/pg_query/src_common_stringinfo.c +4 -4
  454. data/ext/pg_query/src_common_wchar.c +9 -8
  455. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +1 -1
  456. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -1
  457. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +661 -694
  458. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  459. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +1 -1
  460. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +1 -1
  461. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +48 -46
  462. data/ext/pg_query/src_port_pg_bitutils.c +1 -1
  463. data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
  464. data/ext/pg_query/src_port_snprintf.c +3 -7
  465. data/ext/pg_query/src_port_strerror.c +1 -1
  466. data/ext/pg_query/src_port_strnlen.c +1 -1
  467. data/lib/pg_query/pg_query_pb.rb +166 -3191
  468. data/lib/pg_query/treewalker.rb +7 -2
  469. data/lib/pg_query/version.rb +1 -1
  470. metadata +43 -24
  471. data/ext/pg_query/include/catalog/pg_parameter_acl.h +0 -60
  472. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +0 -34
  473. data/ext/pg_query/include/commands/variable.h +0 -38
  474. data/ext/pg_query/include/getaddrinfo.h +0 -162
  475. data/ext/pg_query/include/parser/gram.h +0 -1101
  476. data/ext/pg_query/include/storage/relfilenode.h +0 -99
  477. data/ext/pg_query/include/utils/dynahash.h +0 -20
  478. data/ext/pg_query/include/utils/pg_lsn.h +0 -29
  479. data/ext/pg_query/include/utils/rls.h +0 -50
  480. data/ext/pg_query/include/utils/tzparser.h +0 -39
  481. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -371
  482. data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1116
  483. data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1993
  484. data/ext/pg_query/src_common_pg_prng.c +0 -152
  485. data/ext/pg_query/src_common_string.c +0 -92
  486. data/ext/pg_query/src_port_pgsleep.c +0 -69
@@ -4,7 +4,7 @@
4
4
  * POSTGRES disk item pointer definitions.
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/storage/itemptr.h
@@ -71,7 +71,7 @@ typedef ItemPointerData *ItemPointer;
71
71
 
72
72
 
73
73
  /* ----------------
74
- * support macros
74
+ * support functions
75
75
  * ----------------
76
76
  */
77
77
 
@@ -79,77 +79,87 @@ typedef ItemPointerData *ItemPointer;
79
79
  * ItemPointerIsValid
80
80
  * True iff the disk item pointer is not NULL.
81
81
  */
82
- #define ItemPointerIsValid(pointer) \
83
- ((bool) (PointerIsValid(pointer) && ((pointer)->ip_posid != 0)))
82
+ static inline bool
83
+ ItemPointerIsValid(const ItemPointerData *pointer)
84
+ {
85
+ return PointerIsValid(pointer) && pointer->ip_posid != 0;
86
+ }
84
87
 
85
88
  /*
86
89
  * ItemPointerGetBlockNumberNoCheck
87
90
  * Returns the block number of a disk item pointer.
88
91
  */
89
- #define ItemPointerGetBlockNumberNoCheck(pointer) \
90
- ( \
91
- BlockIdGetBlockNumber(&(pointer)->ip_blkid) \
92
- )
92
+ static inline BlockNumber
93
+ ItemPointerGetBlockNumberNoCheck(const ItemPointerData *pointer)
94
+ {
95
+ return BlockIdGetBlockNumber(&pointer->ip_blkid);
96
+ }
93
97
 
94
98
  /*
95
99
  * ItemPointerGetBlockNumber
96
100
  * As above, but verifies that the item pointer looks valid.
97
101
  */
98
- #define ItemPointerGetBlockNumber(pointer) \
99
- ( \
100
- AssertMacro(ItemPointerIsValid(pointer)), \
101
- ItemPointerGetBlockNumberNoCheck(pointer) \
102
- )
102
+ static inline BlockNumber
103
+ ItemPointerGetBlockNumber(const ItemPointerData *pointer)
104
+ {
105
+ Assert(ItemPointerIsValid(pointer));
106
+ return ItemPointerGetBlockNumberNoCheck(pointer);
107
+ }
103
108
 
104
109
  /*
105
110
  * ItemPointerGetOffsetNumberNoCheck
106
111
  * Returns the offset number of a disk item pointer.
107
112
  */
108
- #define ItemPointerGetOffsetNumberNoCheck(pointer) \
109
- ( \
110
- (pointer)->ip_posid \
111
- )
113
+ static inline OffsetNumber
114
+ ItemPointerGetOffsetNumberNoCheck(const ItemPointerData *pointer)
115
+ {
116
+ return pointer->ip_posid;
117
+ }
112
118
 
113
119
  /*
114
120
  * ItemPointerGetOffsetNumber
115
121
  * As above, but verifies that the item pointer looks valid.
116
122
  */
117
- #define ItemPointerGetOffsetNumber(pointer) \
118
- ( \
119
- AssertMacro(ItemPointerIsValid(pointer)), \
120
- ItemPointerGetOffsetNumberNoCheck(pointer) \
121
- )
123
+ static inline OffsetNumber
124
+ ItemPointerGetOffsetNumber(const ItemPointerData *pointer)
125
+ {
126
+ Assert(ItemPointerIsValid(pointer));
127
+ return ItemPointerGetOffsetNumberNoCheck(pointer);
128
+ }
122
129
 
123
130
  /*
124
131
  * ItemPointerSet
125
132
  * Sets a disk item pointer to the specified block and offset.
126
133
  */
127
- #define ItemPointerSet(pointer, blockNumber, offNum) \
128
- ( \
129
- AssertMacro(PointerIsValid(pointer)), \
130
- BlockIdSet(&((pointer)->ip_blkid), blockNumber), \
131
- (pointer)->ip_posid = offNum \
132
- )
134
+ static inline void
135
+ ItemPointerSet(ItemPointerData *pointer, BlockNumber blockNumber, OffsetNumber offNum)
136
+ {
137
+ Assert(PointerIsValid(pointer));
138
+ BlockIdSet(&pointer->ip_blkid, blockNumber);
139
+ pointer->ip_posid = offNum;
140
+ }
133
141
 
134
142
  /*
135
143
  * ItemPointerSetBlockNumber
136
144
  * Sets a disk item pointer to the specified block.
137
145
  */
138
- #define ItemPointerSetBlockNumber(pointer, blockNumber) \
139
- ( \
140
- AssertMacro(PointerIsValid(pointer)), \
141
- BlockIdSet(&((pointer)->ip_blkid), blockNumber) \
142
- )
146
+ static inline void
147
+ ItemPointerSetBlockNumber(ItemPointerData *pointer, BlockNumber blockNumber)
148
+ {
149
+ Assert(PointerIsValid(pointer));
150
+ BlockIdSet(&pointer->ip_blkid, blockNumber);
151
+ }
143
152
 
144
153
  /*
145
154
  * ItemPointerSetOffsetNumber
146
155
  * Sets a disk item pointer to the specified offset.
147
156
  */
148
- #define ItemPointerSetOffsetNumber(pointer, offsetNumber) \
149
- ( \
150
- AssertMacro(PointerIsValid(pointer)), \
151
- (pointer)->ip_posid = (offsetNumber) \
152
- )
157
+ static inline void
158
+ ItemPointerSetOffsetNumber(ItemPointerData *pointer, OffsetNumber offsetNumber)
159
+ {
160
+ Assert(PointerIsValid(pointer));
161
+ pointer->ip_posid = offsetNumber;
162
+ }
153
163
 
154
164
  /*
155
165
  * ItemPointerCopy
@@ -158,42 +168,49 @@ typedef ItemPointerData *ItemPointer;
158
168
  * Should there ever be padding in an ItemPointer this would need to be handled
159
169
  * differently as it's used as hash key.
160
170
  */
161
- #define ItemPointerCopy(fromPointer, toPointer) \
162
- ( \
163
- AssertMacro(PointerIsValid(toPointer)), \
164
- AssertMacro(PointerIsValid(fromPointer)), \
165
- *(toPointer) = *(fromPointer) \
166
- )
171
+ static inline void
172
+ ItemPointerCopy(const ItemPointerData *fromPointer, ItemPointerData *toPointer)
173
+ {
174
+ Assert(PointerIsValid(toPointer));
175
+ Assert(PointerIsValid(fromPointer));
176
+ *toPointer = *fromPointer;
177
+ }
167
178
 
168
179
  /*
169
180
  * ItemPointerSetInvalid
170
181
  * Sets a disk item pointer to be invalid.
171
182
  */
172
- #define ItemPointerSetInvalid(pointer) \
173
- ( \
174
- AssertMacro(PointerIsValid(pointer)), \
175
- BlockIdSet(&((pointer)->ip_blkid), InvalidBlockNumber), \
176
- (pointer)->ip_posid = InvalidOffsetNumber \
177
- )
183
+ static inline void
184
+ ItemPointerSetInvalid(ItemPointerData *pointer)
185
+ {
186
+ Assert(PointerIsValid(pointer));
187
+ BlockIdSet(&pointer->ip_blkid, InvalidBlockNumber);
188
+ pointer->ip_posid = InvalidOffsetNumber;
189
+ }
178
190
 
179
191
  /*
180
192
  * ItemPointerIndicatesMovedPartitions
181
193
  * True iff the block number indicates the tuple has moved to another
182
194
  * partition.
183
195
  */
184
- #define ItemPointerIndicatesMovedPartitions(pointer) \
185
- ( \
186
- ItemPointerGetOffsetNumber(pointer) == MovedPartitionsOffsetNumber && \
187
- ItemPointerGetBlockNumberNoCheck(pointer) == MovedPartitionsBlockNumber \
188
- )
196
+ static inline bool
197
+ ItemPointerIndicatesMovedPartitions(const ItemPointerData *pointer)
198
+ {
199
+ return
200
+ ItemPointerGetOffsetNumber(pointer) == MovedPartitionsOffsetNumber &&
201
+ ItemPointerGetBlockNumberNoCheck(pointer) == MovedPartitionsBlockNumber;
202
+ }
189
203
 
190
204
  /*
191
205
  * ItemPointerSetMovedPartitions
192
206
  * Indicate that the item referenced by the itempointer has moved into a
193
207
  * different partition.
194
208
  */
195
- #define ItemPointerSetMovedPartitions(pointer) \
196
- ItemPointerSet((pointer), MovedPartitionsBlockNumber, MovedPartitionsOffsetNumber)
209
+ static inline void
210
+ ItemPointerSetMovedPartitions(ItemPointerData *pointer)
211
+ {
212
+ ItemPointerSet(pointer, MovedPartitionsBlockNumber, MovedPartitionsOffsetNumber);
213
+ }
197
214
 
198
215
  /* ----------------
199
216
  * externs
@@ -205,4 +222,24 @@ extern int32 ItemPointerCompare(ItemPointer arg1, ItemPointer arg2);
205
222
  extern void ItemPointerInc(ItemPointer pointer);
206
223
  extern void ItemPointerDec(ItemPointer pointer);
207
224
 
225
+ /* ----------------
226
+ * Datum conversion functions
227
+ * ----------------
228
+ */
229
+
230
+ static inline ItemPointer
231
+ DatumGetItemPointer(Datum X)
232
+ {
233
+ return (ItemPointer) DatumGetPointer(X);
234
+ }
235
+
236
+ static inline Datum
237
+ ItemPointerGetDatum(const ItemPointerData *X)
238
+ {
239
+ return PointerGetDatum(X);
240
+ }
241
+
242
+ #define PG_GETARG_ITEMPOINTER(n) DatumGetItemPointer(PG_GETARG_DATUM(n))
243
+ #define PG_RETURN_ITEMPOINTER(x) return ItemPointerGetDatum(x)
244
+
208
245
  #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-2022, PostgreSQL Global Development Group
8
+ * Portions Copyright (c) 1996-2023, 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
@@ -90,7 +90,7 @@
90
90
  * efficient than using WaitLatch or WaitLatchOrSocket.
91
91
  *
92
92
  *
93
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
93
+ * Portions Copyright (c) 1996-2023, 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
@@ -135,9 +135,16 @@ typedef struct Latch
135
135
  #define WL_SOCKET_CONNECTED WL_SOCKET_WRITEABLE
136
136
  #endif
137
137
  #define WL_SOCKET_CLOSED (1 << 7)
138
+ #ifdef WIN32
139
+ #define WL_SOCKET_ACCEPT (1 << 8)
140
+ #else
141
+ /* avoid having to deal with case on platforms not requiring it */
142
+ #define WL_SOCKET_ACCEPT WL_SOCKET_READABLE
143
+ #endif
138
144
  #define WL_SOCKET_MASK (WL_SOCKET_READABLE | \
139
145
  WL_SOCKET_WRITEABLE | \
140
146
  WL_SOCKET_CONNECTED | \
147
+ WL_SOCKET_ACCEPT | \
141
148
  WL_SOCKET_CLOSED)
142
149
 
143
150
  typedef struct WaitEvent
@@ -168,6 +175,7 @@ extern void ShutdownLatchSupport(void);
168
175
 
169
176
  extern WaitEventSet *CreateWaitEventSet(MemoryContext context, int nevents);
170
177
  extern void FreeWaitEventSet(WaitEventSet *set);
178
+ extern void FreeWaitEventSetAfterFork(WaitEventSet *set);
171
179
  extern int AddWaitEventToSet(WaitEventSet *set, uint32 events, pgsocket fd,
172
180
  Latch *latch, void *user_data);
173
181
  extern void ModifyWaitEvent(WaitEventSet *set, int pos, uint32 events, Latch *latch);
@@ -4,7 +4,7 @@
4
4
  * POSTGRES lock manager definitions.
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/storage/lmgr.h
@@ -107,6 +107,11 @@ extern void LockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid,
107
107
  extern void UnlockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid,
108
108
  LOCKMODE lockmode);
109
109
 
110
+ extern void LockApplyTransactionForSession(Oid suboid, TransactionId xid, uint16 objid,
111
+ LOCKMODE lockmode);
112
+ extern void UnlockApplyTransactionForSession(Oid suboid, TransactionId xid, uint16 objid,
113
+ LOCKMODE lockmode);
114
+
110
115
  /* Describe a locktag for error messages */
111
116
  extern void DescribeLockTag(StringInfo buf, const LOCKTAG *tag);
112
117
 
@@ -4,7 +4,7 @@
4
4
  * POSTGRES low-level lock mechanism
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/storage/lock.h
@@ -18,6 +18,7 @@
18
18
  #error "lock.h may not be included from frontend code"
19
19
  #endif
20
20
 
21
+ #include "lib/ilist.h"
21
22
  #include "storage/backendid.h"
22
23
  #include "storage/lockdefs.h"
23
24
  #include "storage/lwlock.h"
@@ -27,12 +28,6 @@
27
28
  /* struct PGPROC is declared in proc.h, but must forward-reference it */
28
29
  typedef struct PGPROC PGPROC;
29
30
 
30
- typedef struct PROC_QUEUE
31
- {
32
- SHM_QUEUE links; /* head of list of PGPROC objects */
33
- int size; /* number of entries in list */
34
- } PROC_QUEUE;
35
-
36
31
  /* GUC variables */
37
32
  extern PGDLLIMPORT int max_locks_per_xact;
38
33
 
@@ -149,10 +144,12 @@ typedef enum LockTagType
149
144
  LOCKTAG_SPECULATIVE_TOKEN, /* speculative insertion Xid and token */
150
145
  LOCKTAG_OBJECT, /* non-relation database object */
151
146
  LOCKTAG_USERLOCK, /* reserved for old contrib/userlock code */
152
- LOCKTAG_ADVISORY /* advisory user locks */
147
+ LOCKTAG_ADVISORY, /* advisory user locks */
148
+ LOCKTAG_APPLY_TRANSACTION /* transaction being applied on a logical
149
+ * replication subscriber */
153
150
  } LockTagType;
154
151
 
155
- #define LOCKTAG_LAST_TYPE LOCKTAG_ADVISORY
152
+ #define LOCKTAG_LAST_TYPE LOCKTAG_APPLY_TRANSACTION
156
153
 
157
154
  extern PGDLLIMPORT const char *const LockTagTypeNames[];
158
155
 
@@ -278,6 +275,17 @@ typedef struct LOCKTAG
278
275
  (locktag).locktag_type = LOCKTAG_ADVISORY, \
279
276
  (locktag).locktag_lockmethodid = USER_LOCKMETHOD)
280
277
 
278
+ /*
279
+ * ID info for a remote transaction on a logical replication subscriber is: DB
280
+ * OID + SUBSCRIPTION OID + TRANSACTION ID + OBJID
281
+ */
282
+ #define SET_LOCKTAG_APPLY_TRANSACTION(locktag,dboid,suboid,xid,objid) \
283
+ ((locktag).locktag_field1 = (dboid), \
284
+ (locktag).locktag_field2 = (suboid), \
285
+ (locktag).locktag_field3 = (xid), \
286
+ (locktag).locktag_field4 = (objid), \
287
+ (locktag).locktag_type = LOCKTAG_APPLY_TRANSACTION, \
288
+ (locktag).locktag_lockmethodid = DEFAULT_LOCKMETHOD)
281
289
 
282
290
  /*
283
291
  * Per-locked-object lock information:
@@ -305,8 +313,8 @@ typedef struct LOCK
305
313
  /* data */
306
314
  LOCKMASK grantMask; /* bitmask for lock types already granted */
307
315
  LOCKMASK waitMask; /* bitmask for lock types awaited */
308
- SHM_QUEUE procLocks; /* list of PROCLOCK objects assoc. with lock */
309
- PROC_QUEUE waitProcs; /* list of PGPROC objects waiting on lock */
316
+ dlist_head procLocks; /* list of PROCLOCK objects assoc. with lock */
317
+ dclist_head waitProcs; /* list of PGPROC objects waiting on lock */
310
318
  int requested[MAX_LOCKMODES]; /* counts of requested locks */
311
319
  int nRequested; /* total of requested[] array */
312
320
  int granted[MAX_LOCKMODES]; /* counts of granted locks */
@@ -367,8 +375,8 @@ typedef struct PROCLOCK
367
375
  PGPROC *groupLeader; /* proc's lock group leader, or proc itself */
368
376
  LOCKMASK holdMask; /* bitmask for lock types currently held */
369
377
  LOCKMASK releaseMask; /* bitmask for lock types to be released */
370
- SHM_QUEUE lockLink; /* list link in LOCK's list of proclocks */
371
- SHM_QUEUE procLink; /* list link in PGPROC's list of proclocks */
378
+ dlist_node lockLink; /* list link in LOCK's list of proclocks */
379
+ dlist_node procLink; /* list link in PGPROC's list of proclocks */
372
380
  } PROCLOCK;
373
381
 
374
382
  #define PROCLOCK_LOCKMETHOD(proclock) \
@@ -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-2022, PostgreSQL Global Development Group
10
+ * Portions Copyright (c) 1996-2023, 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
@@ -36,8 +36,8 @@ typedef int LOCKMODE;
36
36
  #define AccessShareLock 1 /* SELECT */
37
37
  #define RowShareLock 2 /* SELECT FOR UPDATE/FOR SHARE */
38
38
  #define RowExclusiveLock 3 /* INSERT, UPDATE, DELETE */
39
- #define ShareUpdateExclusiveLock 4 /* VACUUM (non-FULL),ANALYZE, CREATE INDEX
40
- * CONCURRENTLY */
39
+ #define ShareUpdateExclusiveLock 4 /* VACUUM (non-FULL), ANALYZE, CREATE
40
+ * INDEX CONCURRENTLY */
41
41
  #define ShareLock 5 /* CREATE INDEX (WITHOUT CONCURRENTLY) */
42
42
  #define ShareRowExclusiveLock 6 /* like EXCLUSIVE MODE, but allows ROW
43
43
  * SHARE */
@@ -4,7 +4,7 @@
4
4
  * Lightweight lock manager
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/storage/lwlock.h
@@ -23,6 +23,15 @@
23
23
 
24
24
  struct PGPROC;
25
25
 
26
+ /* what state of the wait process is a backend in */
27
+ typedef enum LWLockWaitState
28
+ {
29
+ LW_WS_NOT_WAITING, /* not currently waiting / woken up */
30
+ LW_WS_WAITING, /* currently waiting */
31
+ LW_WS_PENDING_WAKEUP, /* removed from waitlist, but not yet
32
+ * signalled */
33
+ } LWLockWaitState;
34
+
26
35
  /*
27
36
  * Code outside of lwlock.c should not manipulate the contents of this
28
37
  * structure directly, but we have to declare it here to allow LWLocks to be
@@ -51,6 +60,9 @@ typedef struct LWLock
51
60
  */
52
61
  #define LWLOCK_PADDED_SIZE PG_CACHE_LINE_SIZE
53
62
 
63
+ StaticAssertDecl(sizeof(LWLock) <= LWLOCK_PADDED_SIZE,
64
+ "Miscalculated LWLock padding");
65
+
54
66
  /* LWLock, padded to a full cache line size */
55
67
  typedef union LWLockPadded
56
68
  {
@@ -124,7 +136,7 @@ extern bool LWLockAnyHeldByMe(LWLock *lock, int nlocks, size_t stride);
124
136
  extern bool LWLockHeldByMeInMode(LWLock *lock, LWLockMode mode);
125
137
 
126
138
  extern bool LWLockWaitForVar(LWLock *lock, uint64 *valptr, uint64 oldval, uint64 *newval);
127
- extern void LWLockUpdateVar(LWLock *lock, uint64 *valptr, uint64 value);
139
+ extern void LWLockUpdateVar(LWLock *lock, uint64 *valptr, uint64 val);
128
140
 
129
141
  extern Size LWLockShmemSize(void);
130
142
  extern void CreateLWLocks(void);
@@ -193,6 +205,8 @@ typedef enum BuiltinTrancheIds
193
205
  LWTRANCHE_PGSTATS_DSA,
194
206
  LWTRANCHE_PGSTATS_HASH,
195
207
  LWTRANCHE_PGSTATS_DATA,
208
+ LWTRANCHE_LAUNCHER_DSA,
209
+ LWTRANCHE_LAUNCHER_HASH,
196
210
  LWTRANCHE_FIRST_USER_DEFINED
197
211
  } BuiltinTrancheIds;
198
212
 
@@ -4,7 +4,7 @@
4
4
  * POSTGRES disk "offset" definitions.
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/storage/off.h
@@ -10,7 +10,7 @@
10
10
  * be provided by each port.
11
11
  *
12
12
  *
13
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
13
+ * Portions Copyright (c) 1996-2023, 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-2022, PostgreSQL Global Development Group
17
+ * Portions Copyright (c) 1996-2023, 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
@@ -4,7 +4,7 @@
4
4
  * routines for signaling between the postmaster and its child processes
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/storage/pmsignal.h
@@ -4,7 +4,7 @@
4
4
  * POSTGRES public predicate locking definitions.
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/storage/predicate.h
@@ -58,7 +58,7 @@ extern void RegisterPredicateLockingXid(TransactionId xid);
58
58
  extern void PredicateLockRelation(Relation relation, Snapshot snapshot);
59
59
  extern void PredicateLockPage(Relation relation, BlockNumber blkno, Snapshot snapshot);
60
60
  extern void PredicateLockTID(Relation relation, ItemPointer tid, Snapshot snapshot,
61
- TransactionId insert_xid);
61
+ TransactionId tuple_xid);
62
62
  extern void PredicateLockPageSplit(Relation relation, BlockNumber oldblkno, BlockNumber newblkno);
63
63
  extern void PredicateLockPageCombine(Relation relation, BlockNumber oldblkno, BlockNumber newblkno);
64
64
  extern void TransferPredicateLocksToHeapRelation(Relation relation);
@@ -4,7 +4,7 @@
4
4
  * per-process shared memory data structures
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/storage/proc.h
@@ -32,6 +32,8 @@
32
32
  * If none of the caches have overflowed, we can assume that an XID that's not
33
33
  * listed anywhere in the PGPROC array is not a running transaction. Else we
34
34
  * have to look at pg_subtrans.
35
+ *
36
+ * See src/test/isolation/specs/subxid-overflow.spec if you change this.
35
37
  */
36
38
  #define PGPROC_MAX_CACHED_SUBXIDS 64 /* XXX guessed-at value */
37
39
 
@@ -89,7 +91,7 @@ struct XidCache
89
91
  #define INVALID_PGPROCNO PG_INT32_MAX
90
92
 
91
93
  /*
92
- * Flags for PGPROC.delayChkpt
94
+ * Flags for PGPROC.delayChkptFlags
93
95
  *
94
96
  * These flags can be used to delay the start or completion of a checkpoint
95
97
  * for short periods. A flag is in effect if the corresponding bit is set in
@@ -116,7 +118,7 @@ struct XidCache
116
118
  * to phase 3. This is useful if we are performing a WAL-logged operation that
117
119
  * might invalidate buffers, such as relation truncation. In this case, we need
118
120
  * to ensure that any buffers which were invalidated and thus not flushed by
119
- * the checkpoint are actaully destroyed on disk. Replay can cope with a file
121
+ * the checkpoint are actually destroyed on disk. Replay can cope with a file
120
122
  * or block that doesn't exist, but not with a block that has the wrong
121
123
  * contents.
122
124
  */
@@ -147,7 +149,7 @@ typedef enum
147
149
  * but its myProcLocks[] lists are valid.
148
150
  *
149
151
  * We allow many fields of this struct to be accessed without locks, such as
150
- * delayChkpt and isBackgroundWorker. However, keep in mind that writing
152
+ * delayChkptFlags and isBackgroundWorker. However, keep in mind that writing
151
153
  * mirrored ones (see below) requires holding ProcArrayLock or XidGenLock in
152
154
  * at least shared mode, so that pgxactoff does not change concurrently.
153
155
  *
@@ -165,8 +167,8 @@ typedef enum
165
167
  struct PGPROC
166
168
  {
167
169
  /* proc->links MUST BE FIRST IN STRUCT (see ProcSleep,ProcWakeup,etc) */
168
- SHM_QUEUE links; /* list link if process is in a list */
169
- PGPROC **procgloballist; /* procglobal list that owns this PGPROC */
170
+ dlist_node links; /* list link if process is in a list */
171
+ dlist_head *procgloballist; /* procglobal list that owns this PGPROC */
170
172
 
171
173
  PGSemaphore sem; /* ONE semaphore to sleep on */
172
174
  ProcWaitStatus waitStatus;
@@ -191,7 +193,11 @@ struct PGPROC
191
193
 
192
194
  int pgxactoff; /* offset into various ProcGlobal->arrays with
193
195
  * data mirrored from this PGPROC */
194
- int pgprocno;
196
+
197
+ int pgprocno; /* Number of this PGPROC in
198
+ * ProcGlobal->allProcs array. This is set
199
+ * once by InitProcGlobal().
200
+ * ProcGlobal->allProcs[n].pgprocno == n */
195
201
 
196
202
  /* These fields are zero while a backend is still starting up: */
197
203
  BackendId backendId; /* This backend's backend ID (if assigned) */
@@ -211,7 +217,7 @@ struct PGPROC
211
217
  bool recoveryConflictPending;
212
218
 
213
219
  /* Info about LWLock the process is currently waiting for, if any. */
214
- bool lwWaiting; /* true if waiting for an LW lock */
220
+ uint8 lwWaiting; /* see LWLockWaitState */
215
221
  uint8 lwWaitMode; /* lwlock mode being waited for */
216
222
  proclist_node lwWaitLink; /* position in LW lock wait list */
217
223
 
@@ -242,14 +248,14 @@ struct PGPROC
242
248
  */
243
249
  XLogRecPtr waitLSN; /* waiting for this LSN or higher */
244
250
  int syncRepState; /* wait state for sync rep */
245
- SHM_QUEUE syncRepLinks; /* list link if process is in syncrep queue */
251
+ dlist_node syncRepLinks; /* list link if process is in syncrep queue */
246
252
 
247
253
  /*
248
254
  * All PROCLOCK objects for locks held or awaited by this backend are
249
255
  * linked into one of these lists, according to the partition number of
250
256
  * their lock.
251
257
  */
252
- SHM_QUEUE myProcLocks[NUM_LOCK_PARTITIONS];
258
+ dlist_head myProcLocks[NUM_LOCK_PARTITIONS];
253
259
 
254
260
  XidCacheStatus subxidStatus; /* mirrored with
255
261
  * ProcGlobal->subxidStates[i] */
@@ -379,13 +385,13 @@ typedef struct PROC_HDR
379
385
  /* Length of allProcs array */
380
386
  uint32 allProcCount;
381
387
  /* Head of list of free PGPROC structures */
382
- PGPROC *freeProcs;
388
+ dlist_head freeProcs;
383
389
  /* Head of list of autovacuum's free PGPROC structures */
384
- PGPROC *autovacFreeProcs;
390
+ dlist_head autovacFreeProcs;
385
391
  /* Head of list of bgworker free PGPROC structures */
386
- PGPROC *bgworkerFreeProcs;
392
+ dlist_head bgworkerFreeProcs;
387
393
  /* Head of list of walsender free PGPROC structures */
388
- PGPROC *walsenderFreeProcs;
394
+ dlist_head walsenderFreeProcs;
389
395
  /* First pgproc waiting for group XID clear */
390
396
  pg_atomic_uint32 procArrayGroupFirst;
391
397
  /* First pgproc waiting for group transaction status update */
@@ -439,12 +445,11 @@ extern void InitAuxiliaryProcess(void);
439
445
  extern void SetStartupBufferPinWaitBufId(int bufid);
440
446
  extern int GetStartupBufferPinWaitBufId(void);
441
447
 
442
- extern bool HaveNFreeProcs(int n);
448
+ extern bool HaveNFreeProcs(int n, int *nfree);
443
449
  extern void ProcReleaseLocks(bool isCommit);
444
450
 
445
- extern void ProcQueueInit(PROC_QUEUE *queue);
446
451
  extern ProcWaitStatus ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable);
447
- extern PGPROC *ProcWakeup(PGPROC *proc, ProcWaitStatus waitStatus);
452
+ extern void ProcWakeup(PGPROC *proc, ProcWaitStatus waitStatus);
448
453
  extern void ProcLockWakeup(LockMethod lockMethodTable, LOCK *lock);
449
454
  extern void CheckDeadLockAlert(void);
450
455
  extern bool IsWaitingForLock(void);
@@ -4,7 +4,7 @@
4
4
  * POSTGRES process array definitions.
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/storage/procarray.h
@@ -39,6 +39,7 @@ extern void ExpireTreeKnownAssignedTransactionIds(TransactionId xid,
39
39
  TransactionId max_xid);
40
40
  extern void ExpireAllKnownAssignedTransactionIds(void);
41
41
  extern void ExpireOldKnownAssignedTransactionIds(TransactionId xid);
42
+ extern void KnownAssignedTransactionIdsIdleMaintenance(void);
42
43
 
43
44
  extern int GetMaxSnapshotXidCount(void);
44
45
  extern int GetMaxSnapshotSubxidCount(void);
@@ -57,7 +58,7 @@ extern TransactionId GetOldestNonRemovableTransactionId(Relation rel);
57
58
  extern TransactionId GetOldestTransactionIdConsideredRunning(void);
58
59
  extern TransactionId GetOldestActiveTransactionId(void);
59
60
  extern TransactionId GetOldestSafeDecodingTransactionId(bool catalogOnly);
60
- extern void GetReplicationHorizons(TransactionId *slot_xmin, TransactionId *catalog_xmin);
61
+ extern void GetReplicationHorizons(TransactionId *xmin, TransactionId *catalog_xmin);
61
62
 
62
63
  extern VirtualTransactionId *GetVirtualXIDsDelayingChkpt(int *nvxids, int type);
63
64
  extern bool HaveVirtualXIDsDelayingChkpt(VirtualTransactionId *vxids,