pg_query 5.1.0 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +30 -0
  3. data/README.md +1 -1
  4. data/Rakefile +4 -4
  5. data/ext/pg_query/ext_symbols_freebsd.sym +1 -0
  6. data/ext/pg_query/ext_symbols_freebsd_with_ruby_abi_version.sym +2 -0
  7. data/ext/pg_query/ext_symbols_openbsd.sym +1 -0
  8. data/ext/pg_query/ext_symbols_openbsd_with_ruby_abi_version.sym +2 -0
  9. data/ext/pg_query/ext_symbols_with_ruby_abi_version.sym +2 -0
  10. data/ext/pg_query/extconf.rb +20 -6
  11. data/ext/pg_query/include/pg_query.h +4 -3
  12. data/ext/pg_query/include/pg_query_enum_defs.c +424 -154
  13. data/ext/pg_query/include/pg_query_fingerprint_conds.c +68 -4
  14. data/ext/pg_query/include/pg_query_fingerprint_defs.c +2952 -1845
  15. data/ext/pg_query/include/pg_query_outfuncs_conds.c +51 -3
  16. data/ext/pg_query/include/pg_query_outfuncs_defs.c +210 -23
  17. data/ext/pg_query/include/pg_query_readfuncs_conds.c +17 -1
  18. data/ext/pg_query/include/pg_query_readfuncs_defs.c +271 -52
  19. data/ext/pg_query/include/postgres/access/amapi.h +14 -3
  20. data/ext/pg_query/include/postgres/access/attmap.h +1 -1
  21. data/ext/pg_query/include/postgres/access/attnum.h +1 -1
  22. data/ext/pg_query/include/postgres/access/brin_internal.h +116 -0
  23. data/ext/pg_query/include/postgres/access/brin_tuple.h +112 -0
  24. data/ext/pg_query/include/postgres/access/clog.h +2 -3
  25. data/ext/pg_query/include/postgres/access/commit_ts.h +2 -3
  26. data/ext/pg_query/include/postgres/access/detoast.h +1 -1
  27. data/ext/pg_query/include/postgres/access/genam.h +17 -4
  28. data/ext/pg_query/include/postgres/access/gin.h +1 -1
  29. data/ext/pg_query/include/postgres/access/htup.h +1 -1
  30. data/ext/pg_query/include/postgres/access/htup_details.h +11 -11
  31. data/ext/pg_query/include/postgres/access/itup.h +3 -3
  32. data/ext/pg_query/include/postgres/access/parallel.h +1 -2
  33. data/ext/pg_query/include/postgres/access/printtup.h +1 -1
  34. data/ext/pg_query/include/postgres/access/relation.h +1 -1
  35. data/ext/pg_query/include/postgres/access/relscan.h +1 -1
  36. data/ext/pg_query/include/postgres/access/rmgrlist.h +1 -1
  37. data/ext/pg_query/include/postgres/access/sdir.h +1 -1
  38. data/ext/pg_query/include/postgres/access/skey.h +1 -1
  39. data/ext/pg_query/include/postgres/access/slru.h +218 -0
  40. data/ext/pg_query/include/postgres/access/stratnum.h +1 -1
  41. data/ext/pg_query/include/postgres/access/sysattr.h +1 -1
  42. data/ext/pg_query/include/postgres/access/table.h +1 -1
  43. data/ext/pg_query/include/postgres/access/tableam.h +35 -25
  44. data/ext/pg_query/include/postgres/access/tidstore.h +50 -0
  45. data/ext/pg_query/include/postgres/access/toast_compression.h +2 -2
  46. data/ext/pg_query/include/postgres/access/transam.h +50 -7
  47. data/ext/pg_query/include/postgres/access/tsmapi.h +1 -1
  48. data/ext/pg_query/include/postgres/access/tupconvert.h +1 -1
  49. data/ext/pg_query/include/postgres/access/tupdesc.h +5 -5
  50. data/ext/pg_query/include/postgres/access/tupmacs.h +1 -1
  51. data/ext/pg_query/include/postgres/access/twophase.h +2 -2
  52. data/ext/pg_query/include/postgres/access/xact.h +5 -5
  53. data/ext/pg_query/include/postgres/access/xlog.h +20 -12
  54. data/ext/pg_query/include/postgres/access/xlog_internal.h +4 -3
  55. data/ext/pg_query/include/postgres/access/xlogbackup.h +3 -1
  56. data/ext/pg_query/include/postgres/access/xlogdefs.h +5 -5
  57. data/ext/pg_query/include/postgres/access/xlogprefetcher.h +2 -2
  58. data/ext/pg_query/include/postgres/access/xlogreader.h +2 -2
  59. data/ext/pg_query/include/postgres/access/xlogrecord.h +3 -3
  60. data/ext/pg_query/include/postgres/access/xlogrecovery.h +4 -4
  61. data/ext/pg_query/include/postgres/archive/archive_module.h +9 -1
  62. data/ext/pg_query/include/postgres/c.h +32 -37
  63. data/ext/pg_query/include/postgres/catalog/catalog.h +3 -1
  64. data/ext/pg_query/include/postgres/catalog/catversion.h +2 -2
  65. data/ext/pg_query/include/postgres/catalog/dependency.h +17 -59
  66. data/ext/pg_query/include/postgres/catalog/genbki.h +12 -6
  67. data/ext/pg_query/include/postgres/catalog/index.h +22 -18
  68. data/ext/pg_query/include/postgres/catalog/indexing.h +1 -1
  69. data/ext/pg_query/include/postgres/catalog/namespace.h +18 -19
  70. data/ext/pg_query/include/postgres/catalog/objectaccess.h +2 -2
  71. data/ext/pg_query/include/postgres/catalog/objectaddress.h +5 -1
  72. data/ext/pg_query/include/postgres/catalog/pg_aggregate.h +4 -2
  73. data/ext/pg_query/include/postgres/catalog/pg_aggregate_d.h +1 -1
  74. data/ext/pg_query/include/postgres/catalog/pg_am.h +6 -3
  75. data/ext/pg_query/include/postgres/catalog/pg_am_d.h +1 -1
  76. data/ext/pg_query/include/postgres/catalog/pg_attribute.h +31 -14
  77. data/ext/pg_query/include/postgres/catalog/pg_attribute_d.h +3 -3
  78. data/ext/pg_query/include/postgres/catalog/pg_authid.h +6 -3
  79. data/ext/pg_query/include/postgres/catalog/pg_authid_d.h +2 -1
  80. data/ext/pg_query/include/postgres/catalog/pg_class.h +10 -5
  81. data/ext/pg_query/include/postgres/catalog/pg_class_d.h +4 -2
  82. data/ext/pg_query/include/postgres/catalog/pg_collation.h +11 -5
  83. data/ext/pg_query/include/postgres/catalog/pg_collation_d.h +5 -2
  84. data/ext/pg_query/include/postgres/catalog/pg_constraint.h +15 -10
  85. data/ext/pg_query/include/postgres/catalog/pg_constraint_d.h +2 -1
  86. data/ext/pg_query/include/postgres/catalog/pg_control.h +5 -3
  87. data/ext/pg_query/include/postgres/catalog/pg_conversion.h +8 -4
  88. data/ext/pg_query/include/postgres/catalog/pg_conversion_d.h +1 -1
  89. data/ext/pg_query/include/postgres/catalog/pg_database.h +9 -4
  90. data/ext/pg_query/include/postgres/catalog/pg_database_d.h +13 -12
  91. data/ext/pg_query/include/postgres/catalog/pg_depend.h +3 -3
  92. data/ext/pg_query/include/postgres/catalog/pg_depend_d.h +1 -1
  93. data/ext/pg_query/include/postgres/catalog/pg_event_trigger.h +6 -3
  94. data/ext/pg_query/include/postgres/catalog/pg_event_trigger_d.h +1 -1
  95. data/ext/pg_query/include/postgres/catalog/pg_index.h +5 -3
  96. data/ext/pg_query/include/postgres/catalog/pg_index_d.h +1 -1
  97. data/ext/pg_query/include/postgres/catalog/pg_language.h +6 -3
  98. data/ext/pg_query/include/postgres/catalog/pg_language_d.h +1 -1
  99. data/ext/pg_query/include/postgres/catalog/pg_namespace.h +6 -3
  100. data/ext/pg_query/include/postgres/catalog/pg_namespace_d.h +1 -1
  101. data/ext/pg_query/include/postgres/catalog/pg_opclass.h +6 -3
  102. data/ext/pg_query/include/postgres/catalog/pg_opclass_d.h +1 -1
  103. data/ext/pg_query/include/postgres/catalog/pg_operator.h +20 -3
  104. data/ext/pg_query/include/postgres/catalog/pg_operator_d.h +1 -1
  105. data/ext/pg_query/include/postgres/catalog/pg_opfamily.h +6 -3
  106. data/ext/pg_query/include/postgres/catalog/pg_opfamily_d.h +1 -1
  107. data/ext/pg_query/include/postgres/catalog/pg_partitioned_table.h +4 -2
  108. data/ext/pg_query/include/postgres/catalog/pg_partitioned_table_d.h +1 -1
  109. data/ext/pg_query/include/postgres/catalog/pg_proc.h +6 -3
  110. data/ext/pg_query/include/postgres/catalog/pg_proc_d.h +1 -1
  111. data/ext/pg_query/include/postgres/catalog/pg_publication.h +6 -3
  112. data/ext/pg_query/include/postgres/catalog/pg_publication_d.h +1 -1
  113. data/ext/pg_query/include/postgres/catalog/pg_replication_origin.h +6 -3
  114. data/ext/pg_query/include/postgres/catalog/pg_replication_origin_d.h +1 -1
  115. data/ext/pg_query/include/postgres/catalog/pg_statistic.h +10 -4
  116. data/ext/pg_query/include/postgres/catalog/pg_statistic_d.h +7 -3
  117. data/ext/pg_query/include/postgres/catalog/pg_statistic_ext.h +10 -7
  118. data/ext/pg_query/include/postgres/catalog/pg_statistic_ext_d.h +3 -3
  119. data/ext/pg_query/include/postgres/catalog/pg_transform.h +6 -3
  120. data/ext/pg_query/include/postgres/catalog/pg_transform_d.h +1 -1
  121. data/ext/pg_query/include/postgres/catalog/pg_trigger.h +4 -4
  122. data/ext/pg_query/include/postgres/catalog/pg_trigger_d.h +1 -1
  123. data/ext/pg_query/include/postgres/catalog/pg_ts_config.h +6 -3
  124. data/ext/pg_query/include/postgres/catalog/pg_ts_config_d.h +1 -1
  125. data/ext/pg_query/include/postgres/catalog/pg_ts_dict.h +6 -3
  126. data/ext/pg_query/include/postgres/catalog/pg_ts_dict_d.h +1 -1
  127. data/ext/pg_query/include/postgres/catalog/pg_ts_parser.h +6 -3
  128. data/ext/pg_query/include/postgres/catalog/pg_ts_parser_d.h +1 -1
  129. data/ext/pg_query/include/postgres/catalog/pg_ts_template.h +6 -3
  130. data/ext/pg_query/include/postgres/catalog/pg_ts_template_d.h +1 -1
  131. data/ext/pg_query/include/postgres/catalog/pg_type.h +6 -3
  132. data/ext/pg_query/include/postgres/catalog/pg_type_d.h +1 -1
  133. data/ext/pg_query/include/postgres/catalog/storage.h +1 -1
  134. data/ext/pg_query/include/postgres/catalog/syscache_ids.h +104 -0
  135. data/ext/pg_query/include/postgres/commands/async.h +2 -6
  136. data/ext/pg_query/include/postgres/commands/dbcommands.h +1 -1
  137. data/ext/pg_query/include/postgres/commands/defrem.h +6 -6
  138. data/ext/pg_query/include/postgres/commands/event_trigger.h +11 -2
  139. data/ext/pg_query/include/postgres/commands/explain.h +19 -3
  140. data/ext/pg_query/include/postgres/commands/prepare.h +1 -1
  141. data/ext/pg_query/include/postgres/commands/tablespace.h +1 -1
  142. data/ext/pg_query/include/postgres/commands/trigger.h +1 -1
  143. data/ext/pg_query/include/postgres/commands/vacuum.h +28 -26
  144. data/ext/pg_query/include/postgres/common/cryptohash.h +2 -2
  145. data/ext/pg_query/include/postgres/common/file_perm.h +1 -1
  146. data/ext/pg_query/include/postgres/common/file_utils.h +65 -0
  147. data/ext/pg_query/include/postgres/common/hashfn.h +16 -1
  148. data/ext/pg_query/include/postgres/common/hashfn_unstable.h +407 -0
  149. data/ext/pg_query/include/postgres/common/int.h +79 -4
  150. data/ext/pg_query/include/postgres/common/keywords.h +1 -1
  151. data/ext/pg_query/include/postgres/common/kwlookup.h +1 -1
  152. data/ext/pg_query/include/postgres/common/pg_prng.h +2 -1
  153. data/ext/pg_query/include/postgres/common/relpath.h +4 -4
  154. data/ext/pg_query/include/postgres/common/scram-common.h +1 -1
  155. data/ext/pg_query/include/postgres/common/sha2.h +1 -1
  156. data/ext/pg_query/include/postgres/common/string.h +1 -1
  157. data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +2 -3
  158. data/ext/pg_query/include/postgres/copyfuncs.funcs.c +278 -30
  159. data/ext/pg_query/include/postgres/copyfuncs.switch.c +55 -4
  160. data/ext/pg_query/include/postgres/datatype/timestamp.h +29 -3
  161. data/ext/pg_query/include/postgres/equalfuncs.funcs.c +239 -26
  162. data/ext/pg_query/include/postgres/equalfuncs.switch.c +55 -4
  163. data/ext/pg_query/include/postgres/executor/execdesc.h +2 -2
  164. data/ext/pg_query/include/postgres/executor/executor.h +6 -5
  165. data/ext/pg_query/include/postgres/executor/functions.h +2 -1
  166. data/ext/pg_query/include/postgres/executor/instrument.h +5 -3
  167. data/ext/pg_query/include/postgres/executor/spi.h +2 -8
  168. data/ext/pg_query/include/postgres/executor/tablefunc.h +1 -1
  169. data/ext/pg_query/include/postgres/executor/tuptable.h +31 -2
  170. data/ext/pg_query/include/postgres/fmgr.h +2 -2
  171. data/ext/pg_query/include/postgres/foreign/fdwapi.h +1 -1
  172. data/ext/pg_query/include/postgres/funcapi.h +2 -2
  173. data/ext/pg_query/include/postgres/gram.h +871 -830
  174. data/ext/pg_query/include/postgres/gramparse.h +1 -1
  175. data/ext/pg_query/include/postgres/jit/jit.h +4 -3
  176. data/ext/pg_query/include/postgres/kwlist_d.h +511 -466
  177. data/ext/pg_query/include/postgres/lib/dshash.h +25 -10
  178. data/ext/pg_query/include/postgres/lib/ilist.h +1 -1
  179. data/ext/pg_query/include/postgres/lib/pairingheap.h +1 -1
  180. data/ext/pg_query/include/postgres/lib/simplehash.h +40 -18
  181. data/ext/pg_query/include/postgres/lib/sort_template.h +14 -1
  182. data/ext/pg_query/include/postgres/lib/stringinfo.h +93 -11
  183. data/ext/pg_query/include/postgres/libpq/auth.h +1 -1
  184. data/ext/pg_query/include/postgres/libpq/crypt.h +2 -2
  185. data/ext/pg_query/include/postgres/libpq/hba.h +4 -4
  186. data/ext/pg_query/include/postgres/libpq/libpq-be.h +35 -28
  187. data/ext/pg_query/include/postgres/libpq/libpq.h +6 -7
  188. data/ext/pg_query/include/postgres/libpq/pqcomm.h +26 -20
  189. data/ext/pg_query/include/postgres/libpq/pqformat.h +2 -3
  190. data/ext/pg_query/include/postgres/libpq/pqsignal.h +1 -1
  191. data/ext/pg_query/include/postgres/libpq/protocol.h +89 -0
  192. data/ext/pg_query/include/postgres/libpq/sasl.h +1 -1
  193. data/ext/pg_query/include/postgres/libpq/scram.h +1 -1
  194. data/ext/pg_query/include/postgres/mb/pg_wchar.h +103 -82
  195. data/ext/pg_query/include/postgres/mb/stringinfo_mb.h +1 -1
  196. data/ext/pg_query/include/postgres/miscadmin.h +72 -52
  197. data/ext/pg_query/include/postgres/nodes/bitmapset.h +17 -3
  198. data/ext/pg_query/include/postgres/nodes/execnodes.h +112 -25
  199. data/ext/pg_query/include/postgres/nodes/extensible.h +1 -1
  200. data/ext/pg_query/include/postgres/nodes/lockoptions.h +4 -4
  201. data/ext/pg_query/include/postgres/nodes/makefuncs.h +8 -2
  202. data/ext/pg_query/include/postgres/nodes/memnodes.h +43 -4
  203. data/ext/pg_query/include/postgres/nodes/miscnodes.h +1 -1
  204. data/ext/pg_query/include/postgres/nodes/nodeFuncs.h +1 -1
  205. data/ext/pg_query/include/postgres/nodes/nodes.h +30 -41
  206. data/ext/pg_query/include/postgres/nodes/nodetags.h +464 -444
  207. data/ext/pg_query/include/postgres/nodes/params.h +1 -1
  208. data/ext/pg_query/include/postgres/nodes/parsenodes.h +358 -175
  209. data/ext/pg_query/include/postgres/nodes/pathnodes.h +64 -10
  210. data/ext/pg_query/include/postgres/nodes/pg_list.h +62 -11
  211. data/ext/pg_query/include/postgres/nodes/plannodes.h +11 -10
  212. data/ext/pg_query/include/postgres/nodes/primnodes.h +352 -54
  213. data/ext/pg_query/include/postgres/nodes/print.h +1 -1
  214. data/ext/pg_query/include/postgres/nodes/queryjumble.h +2 -2
  215. data/ext/pg_query/include/postgres/nodes/replnodes.h +23 -2
  216. data/ext/pg_query/include/postgres/nodes/supportnodes.h +1 -1
  217. data/ext/pg_query/include/postgres/nodes/tidbitmap.h +1 -1
  218. data/ext/pg_query/include/postgres/nodes/value.h +1 -1
  219. data/ext/pg_query/include/postgres/optimizer/cost.h +5 -4
  220. data/ext/pg_query/include/postgres/optimizer/geqo.h +1 -1
  221. data/ext/pg_query/include/postgres/optimizer/geqo_gene.h +1 -1
  222. data/ext/pg_query/include/postgres/optimizer/optimizer.h +5 -2
  223. data/ext/pg_query/include/postgres/optimizer/paths.h +13 -8
  224. data/ext/pg_query/include/postgres/optimizer/planmain.h +7 -1
  225. data/ext/pg_query/include/postgres/parser/analyze.h +3 -1
  226. data/ext/pg_query/include/postgres/parser/kwlist.h +22 -2
  227. data/ext/pg_query/include/postgres/parser/parse_agg.h +1 -1
  228. data/ext/pg_query/include/postgres/parser/parse_coerce.h +5 -2
  229. data/ext/pg_query/include/postgres/parser/parse_expr.h +1 -1
  230. data/ext/pg_query/include/postgres/parser/parse_func.h +2 -2
  231. data/ext/pg_query/include/postgres/parser/parse_node.h +3 -2
  232. data/ext/pg_query/include/postgres/parser/parse_oper.h +4 -1
  233. data/ext/pg_query/include/postgres/parser/parse_relation.h +1 -1
  234. data/ext/pg_query/include/postgres/parser/parse_type.h +2 -2
  235. data/ext/pg_query/include/postgres/parser/parser.h +3 -3
  236. data/ext/pg_query/include/postgres/parser/parsetree.h +1 -1
  237. data/ext/pg_query/include/postgres/parser/scanner.h +1 -1
  238. data/ext/pg_query/include/postgres/parser/scansup.h +1 -1
  239. data/ext/pg_query/include/postgres/partitioning/partdefs.h +1 -1
  240. data/ext/pg_query/include/postgres/pg_config.h +53 -45
  241. data/ext/pg_query/include/postgres/pg_config_manual.h +21 -8
  242. data/ext/pg_query/include/postgres/pg_getopt.h +1 -1
  243. data/ext/pg_query/include/postgres/pg_trace.h +1 -1
  244. data/ext/pg_query/include/postgres/pgstat.h +13 -11
  245. data/ext/pg_query/include/postgres/pgtime.h +1 -1
  246. data/ext/pg_query/include/postgres/pl_reserved_kwlist.h +1 -1
  247. data/ext/pg_query/include/postgres/pl_reserved_kwlist_d.h +1 -1
  248. data/ext/pg_query/include/postgres/pl_unreserved_kwlist.h +1 -1
  249. data/ext/pg_query/include/postgres/pl_unreserved_kwlist_d.h +1 -1
  250. data/ext/pg_query/include/postgres/plerrcodes.h +4 -4
  251. data/ext/pg_query/include/postgres/plpgsql.h +15 -13
  252. data/ext/pg_query/include/postgres/port/atomics/arch-arm.h +1 -1
  253. data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +1 -1
  254. data/ext/pg_query/include/postgres/port/atomics/arch-ppc.h +3 -1
  255. data/ext/pg_query/include/postgres/port/atomics/arch-x86.h +3 -1
  256. data/ext/pg_query/include/postgres/port/atomics/fallback.h +1 -1
  257. data/ext/pg_query/include/postgres/port/atomics/generic-gcc.h +38 -1
  258. data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +19 -1
  259. data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +16 -1
  260. data/ext/pg_query/include/postgres/port/atomics/generic.h +38 -2
  261. data/ext/pg_query/include/postgres/port/atomics.h +93 -6
  262. data/ext/pg_query/include/postgres/port/pg_bitutils.h +91 -9
  263. data/ext/pg_query/include/postgres/port/pg_bswap.h +1 -1
  264. data/ext/pg_query/include/postgres/port/pg_crc32c.h +10 -1
  265. data/ext/pg_query/include/postgres/port/pg_iovec.h +117 -0
  266. data/ext/pg_query/include/postgres/port/simd.h +48 -1
  267. data/ext/pg_query/include/postgres/port/win32/sys/socket.h +8 -0
  268. data/ext/pg_query/include/postgres/port/win32_port.h +1 -13
  269. data/ext/pg_query/include/postgres/port.h +39 -4
  270. data/ext/pg_query/include/postgres/portability/instr_time.h +1 -1
  271. data/ext/pg_query/include/postgres/postgres.h +1 -1
  272. data/ext/pg_query/include/postgres/postmaster/autovacuum.h +5 -16
  273. data/ext/pg_query/include/postgres/postmaster/bgworker.h +8 -6
  274. data/ext/pg_query/include/postgres/postmaster/bgworker_internals.h +3 -7
  275. data/ext/pg_query/include/postgres/postmaster/bgwriter.h +3 -3
  276. data/ext/pg_query/include/postgres/postmaster/interrupt.h +1 -1
  277. data/ext/pg_query/include/postgres/postmaster/pgarch.h +2 -2
  278. data/ext/pg_query/include/postgres/postmaster/postmaster.h +25 -5
  279. data/ext/pg_query/include/postgres/postmaster/startup.h +2 -2
  280. data/ext/pg_query/include/postgres/postmaster/syslogger.h +2 -4
  281. data/ext/pg_query/include/postgres/postmaster/walsummarizer.h +35 -0
  282. data/ext/pg_query/include/postgres/postmaster/walwriter.h +2 -2
  283. data/ext/pg_query/include/postgres/regex/regex.h +92 -9
  284. data/ext/pg_query/include/postgres/replication/logicallauncher.h +1 -1
  285. data/ext/pg_query/include/postgres/replication/logicalproto.h +2 -2
  286. data/ext/pg_query/include/postgres/replication/logicalworker.h +2 -1
  287. data/ext/pg_query/include/postgres/replication/origin.h +1 -1
  288. data/ext/pg_query/include/postgres/replication/reorderbuffer.h +27 -46
  289. data/ext/pg_query/include/postgres/replication/slot.h +45 -5
  290. data/ext/pg_query/include/postgres/replication/slotsync.h +38 -0
  291. data/ext/pg_query/include/postgres/replication/syncrep.h +1 -1
  292. data/ext/pg_query/include/postgres/replication/walreceiver.h +37 -11
  293. data/ext/pg_query/include/postgres/replication/walsender.h +5 -3
  294. data/ext/pg_query/include/postgres/rewrite/prs2lock.h +1 -1
  295. data/ext/pg_query/include/postgres/rewrite/rewriteHandler.h +7 -1
  296. data/ext/pg_query/include/postgres/rewrite/rewriteManip.h +2 -2
  297. data/ext/pg_query/include/postgres/rewrite/rewriteSupport.h +1 -1
  298. data/ext/pg_query/include/postgres/storage/block.h +1 -1
  299. data/ext/pg_query/include/postgres/storage/buf.h +1 -1
  300. data/ext/pg_query/include/postgres/storage/bufmgr.h +59 -41
  301. data/ext/pg_query/include/postgres/storage/bufpage.h +1 -1
  302. data/ext/pg_query/include/postgres/storage/condition_variable.h +1 -1
  303. data/ext/pg_query/include/postgres/storage/dsm.h +1 -1
  304. data/ext/pg_query/include/postgres/storage/dsm_impl.h +2 -2
  305. data/ext/pg_query/include/postgres/storage/fd.h +30 -13
  306. data/ext/pg_query/include/postgres/storage/fileset.h +1 -1
  307. data/ext/pg_query/include/postgres/storage/ipc.h +4 -1
  308. data/ext/pg_query/include/postgres/storage/item.h +1 -1
  309. data/ext/pg_query/include/postgres/storage/itemid.h +1 -1
  310. data/ext/pg_query/include/postgres/storage/itemptr.h +1 -1
  311. data/ext/pg_query/include/postgres/storage/large_object.h +1 -1
  312. data/ext/pg_query/include/postgres/storage/latch.h +4 -2
  313. data/ext/pg_query/include/postgres/storage/lmgr.h +8 -2
  314. data/ext/pg_query/include/postgres/storage/lock.h +19 -19
  315. data/ext/pg_query/include/postgres/storage/lockdefs.h +3 -1
  316. data/ext/pg_query/include/postgres/storage/lwlock.h +17 -9
  317. data/ext/pg_query/include/postgres/storage/lwlocknames.h +7 -10
  318. data/ext/pg_query/include/postgres/storage/off.h +1 -1
  319. data/ext/pg_query/include/postgres/storage/pg_sema.h +1 -1
  320. data/ext/pg_query/include/postgres/storage/pg_shmem.h +5 -4
  321. data/ext/pg_query/include/postgres/storage/pmsignal.h +2 -2
  322. data/ext/pg_query/include/postgres/storage/predicate.h +1 -5
  323. data/ext/pg_query/include/postgres/storage/proc.h +48 -26
  324. data/ext/pg_query/include/postgres/storage/procarray.h +5 -1
  325. data/ext/pg_query/include/postgres/storage/proclist_types.h +11 -9
  326. data/ext/pg_query/include/postgres/storage/procnumber.h +43 -0
  327. data/ext/pg_query/include/postgres/storage/procsignal.h +8 -6
  328. data/ext/pg_query/include/postgres/storage/read_stream.h +65 -0
  329. data/ext/pg_query/include/postgres/storage/relfilelocator.h +16 -15
  330. data/ext/pg_query/include/postgres/storage/s_lock.h +7 -27
  331. data/ext/pg_query/include/postgres/storage/sharedfileset.h +1 -1
  332. data/ext/pg_query/include/postgres/storage/shm_mq.h +2 -2
  333. data/ext/pg_query/include/postgres/storage/shm_toc.h +1 -1
  334. data/ext/pg_query/include/postgres/storage/shmem.h +1 -1
  335. data/ext/pg_query/include/postgres/storage/sinval.h +3 -3
  336. data/ext/pg_query/include/postgres/storage/smgr.h +46 -29
  337. data/ext/pg_query/include/postgres/storage/spin.h +1 -1
  338. data/ext/pg_query/include/postgres/storage/standby.h +13 -3
  339. data/ext/pg_query/include/postgres/storage/standbydefs.h +2 -2
  340. data/ext/pg_query/include/postgres/storage/sync.h +4 -4
  341. data/ext/pg_query/include/postgres/tcop/cmdtag.h +1 -2
  342. data/ext/pg_query/include/postgres/tcop/cmdtaglist.h +3 -2
  343. data/ext/pg_query/include/postgres/tcop/deparse_utility.h +2 -2
  344. data/ext/pg_query/include/postgres/tcop/dest.h +3 -2
  345. data/ext/pg_query/include/postgres/tcop/fastpath.h +1 -1
  346. data/ext/pg_query/include/postgres/tcop/pquery.h +1 -1
  347. data/ext/pg_query/include/postgres/tcop/tcopprot.h +9 -5
  348. data/ext/pg_query/include/postgres/tcop/utility.h +2 -2
  349. data/ext/pg_query/include/postgres/tsearch/ts_cache.h +1 -1
  350. data/ext/pg_query/include/postgres/utils/acl.h +19 -7
  351. data/ext/pg_query/include/postgres/utils/aclchk_internal.h +1 -1
  352. data/ext/pg_query/include/postgres/utils/array.h +1 -2
  353. data/ext/pg_query/include/postgres/utils/ascii.h +84 -0
  354. data/ext/pg_query/include/postgres/utils/backend_progress.h +3 -2
  355. data/ext/pg_query/include/postgres/utils/backend_status.h +8 -10
  356. data/ext/pg_query/include/postgres/utils/builtins.h +4 -1
  357. data/ext/pg_query/include/postgres/utils/bytea.h +2 -2
  358. data/ext/pg_query/include/postgres/utils/catcache.h +6 -6
  359. data/ext/pg_query/include/postgres/utils/date.h +1 -1
  360. data/ext/pg_query/include/postgres/utils/datetime.h +4 -1
  361. data/ext/pg_query/include/postgres/utils/datum.h +1 -1
  362. data/ext/pg_query/include/postgres/utils/dsa.h +44 -5
  363. data/ext/pg_query/include/postgres/utils/elog.h +3 -8
  364. data/ext/pg_query/include/postgres/utils/errcodes.h +1 -3
  365. data/ext/pg_query/include/postgres/utils/expandeddatum.h +1 -1
  366. data/ext/pg_query/include/postgres/utils/expandedrecord.h +1 -1
  367. data/ext/pg_query/include/postgres/utils/float.h +1 -1
  368. data/ext/pg_query/include/postgres/utils/fmgroids.h +49 -16
  369. data/ext/pg_query/include/postgres/utils/fmgrprotos.h +47 -14
  370. data/ext/pg_query/include/postgres/utils/fmgrtab.h +1 -1
  371. data/ext/pg_query/include/postgres/utils/guc.h +20 -6
  372. data/ext/pg_query/include/postgres/utils/guc_hooks.h +23 -2
  373. data/ext/pg_query/include/postgres/utils/guc_tables.h +6 -5
  374. data/ext/pg_query/include/postgres/utils/hsearch.h +2 -2
  375. data/ext/pg_query/include/postgres/utils/injection_point.h +44 -0
  376. data/ext/pg_query/include/postgres/utils/inval.h +1 -1
  377. data/ext/pg_query/include/postgres/utils/logtape.h +5 -5
  378. data/ext/pg_query/include/postgres/utils/lsyscache.h +6 -3
  379. data/ext/pg_query/include/postgres/utils/memdebug.h +1 -1
  380. data/ext/pg_query/include/postgres/utils/memutils.h +12 -5
  381. data/ext/pg_query/include/postgres/utils/memutils_internal.h +53 -13
  382. data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +25 -9
  383. data/ext/pg_query/include/postgres/utils/numeric.h +6 -1
  384. data/ext/pg_query/include/postgres/utils/palloc.h +1 -15
  385. data/ext/pg_query/include/postgres/utils/partcache.h +1 -1
  386. data/ext/pg_query/include/postgres/utils/pg_locale.h +8 -7
  387. data/ext/pg_query/include/postgres/utils/pgstat_internal.h +30 -17
  388. data/ext/pg_query/include/postgres/utils/plancache.h +5 -3
  389. data/ext/pg_query/include/postgres/utils/portal.h +10 -10
  390. data/ext/pg_query/include/postgres/utils/queryenvironment.h +2 -2
  391. data/ext/pg_query/include/postgres/utils/regproc.h +1 -1
  392. data/ext/pg_query/include/postgres/utils/rel.h +14 -15
  393. data/ext/pg_query/include/postgres/utils/relcache.h +2 -5
  394. data/ext/pg_query/include/postgres/utils/reltrigger.h +1 -1
  395. data/ext/pg_query/include/postgres/utils/resowner.h +90 -9
  396. data/ext/pg_query/include/postgres/utils/ruleutils.h +1 -1
  397. data/ext/pg_query/include/postgres/utils/sharedtuplestore.h +1 -1
  398. data/ext/pg_query/include/postgres/utils/snapmgr.h +1 -52
  399. data/ext/pg_query/include/postgres/utils/snapshot.h +2 -2
  400. data/ext/pg_query/include/postgres/utils/sortsupport.h +1 -1
  401. data/ext/pg_query/include/postgres/utils/syscache.h +7 -98
  402. data/ext/pg_query/include/postgres/utils/timeout.h +3 -2
  403. data/ext/pg_query/include/postgres/utils/timestamp.h +1 -1
  404. data/ext/pg_query/include/postgres/utils/tuplesort.h +36 -9
  405. data/ext/pg_query/include/postgres/utils/tuplestore.h +2 -5
  406. data/ext/pg_query/include/postgres/utils/typcache.h +2 -1
  407. data/ext/pg_query/include/postgres/utils/varlena.h +1 -1
  408. data/ext/pg_query/include/postgres/utils/wait_event.h +28 -214
  409. data/ext/pg_query/include/postgres/utils/wait_event_types.h +218 -0
  410. data/ext/pg_query/include/postgres/utils/xml.h +4 -4
  411. data/ext/pg_query/include/postgres/varatt.h +1 -1
  412. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1546 -792
  413. data/ext/pg_query/include/protobuf/pg_query.pb.h +58365 -46595
  414. data/ext/pg_query/pg_query.pb-c.c +6598 -3739
  415. data/ext/pg_query/pg_query_normalize.c +42 -1
  416. data/ext/pg_query/pg_query_outfuncs_json.c +3 -1
  417. data/ext/pg_query/pg_query_parse_plpgsql.c +12 -13
  418. data/ext/pg_query/pg_query_readfuncs_protobuf.c +2 -2
  419. data/ext/pg_query/pg_query_scan.c +1 -1
  420. data/ext/pg_query/postgres_deparse.c +601 -172
  421. data/ext/pg_query/src_backend_catalog_namespace.c +241 -66
  422. data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -3
  423. data/ext/pg_query/src_backend_commands_define.c +2 -3
  424. data/ext/pg_query/src_backend_nodes_bitmapset.c +137 -94
  425. data/ext/pg_query/src_backend_nodes_copyfuncs.c +1 -1
  426. data/ext/pg_query/src_backend_nodes_equalfuncs.c +1 -1
  427. data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
  428. data/ext/pg_query/src_backend_nodes_list.c +3 -7
  429. data/ext/pg_query/src_backend_nodes_makefuncs.c +59 -20
  430. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +109 -2
  431. data/ext/pg_query/src_backend_nodes_value.c +1 -1
  432. data/ext/pg_query/src_backend_parser_gram.c +34491 -32136
  433. data/ext/pg_query/src_backend_parser_parser.c +8 -8
  434. data/ext/pg_query/src_backend_parser_scan.c +5637 -3028
  435. data/ext/pg_query/src_backend_parser_scansup.c +2 -1
  436. data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
  437. data/ext/pg_query/src_backend_tcop_postgres.c +34 -10
  438. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +2 -2
  439. data/ext/pg_query/src_backend_utils_adt_datum.c +8 -6
  440. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  441. data/ext/pg_query/src_backend_utils_adt_format_type.c +1 -1
  442. data/ext/pg_query/src_backend_utils_adt_numutils.c +4 -5
  443. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +101 -28
  444. data/ext/pg_query/src_backend_utils_error_assert.c +1 -1
  445. data/ext/pg_query/src_backend_utils_error_elog.c +47 -42
  446. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +4 -2
  447. data/ext/pg_query/src_backend_utils_init_globals.c +15 -3
  448. data/ext/pg_query/src_backend_utils_mb_mbutils.c +11 -18
  449. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +16 -6
  450. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +8 -5
  451. data/ext/pg_query/src_backend_utils_mmgr_aset.c +308 -238
  452. data/ext/pg_query/src_backend_utils_mmgr_bump.c +728 -0
  453. data/ext/pg_query/src_backend_utils_mmgr_generation.c +273 -197
  454. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +270 -215
  455. data/ext/pg_query/src_backend_utils_mmgr_slab.c +154 -96
  456. data/ext/pg_query/src_common_encnames.c +43 -44
  457. data/ext/pg_query/src_common_hashfn.c +1 -1
  458. data/ext/pg_query/src_common_keywords.c +1 -1
  459. data/ext/pg_query/src_common_kwlist_d.h +511 -466
  460. data/ext/pg_query/src_common_kwlookup.c +1 -1
  461. data/ext/pg_query/src_common_psprintf.c +3 -3
  462. data/ext/pg_query/src_common_stringinfo.c +18 -1
  463. data/ext/pg_query/src_common_wchar.c +92 -109
  464. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +99 -5
  465. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -1
  466. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +242 -143
  467. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  468. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +1 -1
  469. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +19 -1
  470. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +1 -1
  471. data/ext/pg_query/src_port_pg_bitutils.c +173 -28
  472. data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
  473. data/ext/pg_query/src_port_snprintf.c +15 -18
  474. data/ext/pg_query/src_port_strerror.c +1 -3
  475. data/ext/pg_query/src_port_strlcpy.c +1 -1
  476. data/lib/pg_query/fingerprint.rb +3 -5
  477. data/lib/pg_query/param_refs.rb +2 -2
  478. data/lib/pg_query/parse.rb +5 -7
  479. data/lib/pg_query/parse_error.rb +1 -0
  480. data/lib/pg_query/pg_query_pb.rb +27 -25
  481. data/lib/pg_query/scan.rb +1 -0
  482. data/lib/pg_query/treewalker.rb +38 -15
  483. data/lib/pg_query/truncate.rb +18 -20
  484. data/lib/pg_query/version.rb +1 -1
  485. metadata +31 -82
  486. data/ext/pg_query/include/postgres/storage/backendid.h +0 -37
  487. data/ext/pg_query/include/postgres/storage/sinvaladt.h +0 -45
  488. data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -2
  489. data/ext/pg_query/src_backend_nodes_nodes.c +0 -38
  490. /data/ext/pg_query/{pg_query_ruby.sym → ext_symbols.sym} +0 -0
@@ -2,8 +2,11 @@
2
2
  * Symbols referenced in this file:
3
3
  * - SlabAlloc
4
4
  * - SlabBlocklistIndex
5
+ * - SlabAllocInvalidSize
6
+ * - SlabAllocFromNewBlock
5
7
  * - SlabGetNextFreeChunk
6
8
  * - SlabFindNextBlockListIndex
9
+ * - SlabAllocSetupNewChunk
7
10
  * - SlabFree
8
11
  * - SlabRealloc
9
12
  * - SlabReset
@@ -26,7 +29,7 @@
26
29
  * with minimal memory wastage and fragmentation.
27
30
  *
28
31
  *
29
- * Portions Copyright (c) 2017-2023, PostgreSQL Global Development Group
32
+ * Portions Copyright (c) 2017-2024, PostgreSQL Global Development Group
30
33
  *
31
34
  * IDENTIFICATION
32
35
  * src/backend/utils/mmgr/slab.c
@@ -89,8 +92,8 @@
89
92
  #include "lib/ilist.h"
90
93
  #include "utils/memdebug.h"
91
94
  #include "utils/memutils.h"
92
- #include "utils/memutils_memorychunk.h"
93
95
  #include "utils/memutils_internal.h"
96
+ #include "utils/memutils_memorychunk.h"
94
97
 
95
98
  #define Slab_BLOCKHDRSZ MAXALIGN(sizeof(SlabBlock))
96
99
 
@@ -122,9 +125,9 @@ typedef struct SlabContext
122
125
  {
123
126
  MemoryContextData header; /* Standard memory-context fields */
124
127
  /* Allocation parameters for this context: */
125
- Size chunkSize; /* the requested (non-aligned) chunk size */
126
- Size fullChunkSize; /* chunk size with chunk header and alignment */
127
- Size blockSize; /* the size to make each block of chunks */
128
+ uint32 chunkSize; /* the requested (non-aligned) chunk size */
129
+ uint32 fullChunkSize; /* chunk size with chunk header and alignment */
130
+ uint32 blockSize; /* the size to make each block of chunks */
128
131
  int32 chunksPerBlock; /* number of chunks that fit in 1 block */
129
132
  int32 curBlocklistIndex; /* index into the blocklist[] element
130
133
  * containing the fullest, blocks */
@@ -332,7 +335,9 @@ SlabGetNextFreeChunk(SlabContext *slab, SlabBlock *block)
332
335
  * blockSize: allocation block size
333
336
  * chunkSize: allocation chunk size
334
337
  *
335
- * The MAXALIGN(chunkSize) may not exceed MEMORYCHUNK_MAX_VALUE
338
+ * The Slab_CHUNKHDRSZ + MAXALIGN(chunkSize + 1) may not exceed
339
+ * MEMORYCHUNK_MAX_VALUE.
340
+ * 'blockSize' may not exceed MEMORYCHUNK_MAX_BLOCKOFFSET.
336
341
  */
337
342
  #ifdef MEMORY_CONTEXT_CHECKING
338
343
  #else
@@ -411,85 +416,169 @@ SlabDelete(MemoryContext context)
411
416
  }
412
417
 
413
418
  /*
414
- * SlabAlloc
415
- * Returns a pointer to allocated memory of given size or NULL if
416
- * request could not be completed; memory is added to the slab.
419
+ * Small helper for allocating a new chunk from a chunk, to avoid duplicating
420
+ * the code between SlabAlloc() and SlabAllocFromNewBlock().
417
421
  */
418
- void *
419
- SlabAlloc(MemoryContext context, Size size)
422
+ static inline void *
423
+ SlabAllocSetupNewChunk(MemoryContext context, SlabBlock *block,
424
+ MemoryChunk *chunk, Size size)
425
+ {
426
+ SlabContext *slab = (SlabContext *) context;
427
+
428
+ /*
429
+ * Check that the chunk pointer is actually somewhere on the block and is
430
+ * aligned as expected.
431
+ */
432
+ Assert(chunk >= SlabBlockGetChunk(slab, block, 0));
433
+ Assert(chunk <= SlabBlockGetChunk(slab, block, slab->chunksPerBlock - 1));
434
+ Assert(SlabChunkMod(slab, block, chunk) == 0);
435
+
436
+ /* Prepare to initialize the chunk header. */
437
+ VALGRIND_MAKE_MEM_UNDEFINED(chunk, Slab_CHUNKHDRSZ);
438
+
439
+ MemoryChunkSetHdrMask(chunk, block, MAXALIGN(slab->chunkSize), MCTX_SLAB_ID);
440
+
441
+ #ifdef MEMORY_CONTEXT_CHECKING
442
+ /* slab mark to catch clobber of "unused" space */
443
+ Assert(slab->chunkSize < (slab->fullChunkSize - Slab_CHUNKHDRSZ));
444
+ set_sentinel(MemoryChunkGetPointer(chunk), size);
445
+ VALGRIND_MAKE_MEM_NOACCESS(((char *) chunk) + Slab_CHUNKHDRSZ +
446
+ slab->chunkSize,
447
+ slab->fullChunkSize -
448
+ (slab->chunkSize + Slab_CHUNKHDRSZ));
449
+ #endif
450
+
451
+ #ifdef RANDOMIZE_ALLOCATED_MEMORY
452
+ /* fill the allocated space with junk */
453
+ randomize_mem((char *) MemoryChunkGetPointer(chunk), size);
454
+ #endif
455
+
456
+ /* Disallow access to the chunk header. */
457
+ VALGRIND_MAKE_MEM_NOACCESS(chunk, Slab_CHUNKHDRSZ);
458
+
459
+ return MemoryChunkGetPointer(chunk);
460
+ }
461
+
462
+ pg_noinline
463
+ static void *
464
+ SlabAllocFromNewBlock(MemoryContext context, Size size, int flags)
420
465
  {
421
466
  SlabContext *slab = (SlabContext *) context;
422
467
  SlabBlock *block;
423
468
  MemoryChunk *chunk;
469
+ dlist_head *blocklist;
470
+ int blocklist_idx;
424
471
 
425
- Assert(SlabIsValid(slab));
472
+ /* to save allocating a new one, first check the empty blocks list */
473
+ if (dclist_count(&slab->emptyblocks) > 0)
474
+ {
475
+ dlist_node *node = dclist_pop_head_node(&slab->emptyblocks);
426
476
 
427
- /* sanity check that this is pointing to a valid blocklist */
428
- Assert(slab->curBlocklistIndex >= 0);
429
- Assert(slab->curBlocklistIndex <= SlabBlocklistIndex(slab, slab->chunksPerBlock));
477
+ block = dlist_container(SlabBlock, node, node);
430
478
 
431
- /* make sure we only allow correct request size */
432
- if (unlikely(size != slab->chunkSize))
433
- elog(ERROR, "unexpected alloc chunk size %zu (expected %zu)",
434
- size, slab->chunkSize);
479
+ /*
480
+ * SlabFree() should have left this block in a valid state with all
481
+ * chunks free. Ensure that's the case.
482
+ */
483
+ Assert(block->nfree == slab->chunksPerBlock);
435
484
 
436
- /*
437
- * Handle the case when there are no partially filled blocks available.
438
- * SlabFree() will have updated the curBlocklistIndex setting it to zero
439
- * to indicate that it has freed the final block. Also later in
440
- * SlabAlloc() we will set the curBlocklistIndex to zero if we end up
441
- * filling the final block.
442
- */
443
- if (unlikely(slab->curBlocklistIndex == 0))
485
+ /* fetch the next chunk from this block */
486
+ chunk = SlabGetNextFreeChunk(slab, block);
487
+ }
488
+ else
444
489
  {
445
- dlist_head *blocklist;
446
- int blocklist_idx;
490
+ block = (SlabBlock *) malloc(slab->blockSize);
447
491
 
448
- /* to save allocating a new one, first check the empty blocks list */
449
- if (dclist_count(&slab->emptyblocks) > 0)
450
- {
451
- dlist_node *node = dclist_pop_head_node(&slab->emptyblocks);
492
+ if (unlikely(block == NULL))
493
+ return MemoryContextAllocationFailure(context, size, flags);
452
494
 
453
- block = dlist_container(SlabBlock, node, node);
495
+ block->slab = slab;
496
+ context->mem_allocated += slab->blockSize;
454
497
 
455
- /*
456
- * SlabFree() should have left this block in a valid state with
457
- * all chunks free. Ensure that's the case.
458
- */
459
- Assert(block->nfree == slab->chunksPerBlock);
498
+ /* use the first chunk in the new block */
499
+ chunk = SlabBlockGetChunk(slab, block, 0);
460
500
 
461
- /* fetch the next chunk from this block */
462
- chunk = SlabGetNextFreeChunk(slab, block);
463
- }
464
- else
465
- {
466
- block = (SlabBlock *) malloc(slab->blockSize);
501
+ block->nfree = slab->chunksPerBlock - 1;
502
+ block->unused = SlabBlockGetChunk(slab, block, 1);
503
+ block->freehead = NULL;
504
+ block->nunused = slab->chunksPerBlock - 1;
505
+ }
467
506
 
468
- if (unlikely(block == NULL))
469
- return NULL;
507
+ /* find the blocklist element for storing blocks with 1 used chunk */
508
+ blocklist_idx = SlabBlocklistIndex(slab, block->nfree);
509
+ blocklist = &slab->blocklist[blocklist_idx];
470
510
 
471
- block->slab = slab;
472
- context->mem_allocated += slab->blockSize;
511
+ /* this better be empty. We just added a block thinking it was */
512
+ Assert(dlist_is_empty(blocklist));
473
513
 
474
- /* use the first chunk in the new block */
475
- chunk = SlabBlockGetChunk(slab, block, 0);
514
+ dlist_push_head(blocklist, &block->node);
476
515
 
477
- block->nfree = slab->chunksPerBlock - 1;
478
- block->unused = SlabBlockGetChunk(slab, block, 1);
479
- block->freehead = NULL;
480
- block->nunused = slab->chunksPerBlock - 1;
481
- }
516
+ slab->curBlocklistIndex = blocklist_idx;
517
+
518
+ return SlabAllocSetupNewChunk(context, block, chunk, size);
519
+ }
520
+
521
+ /*
522
+ * SlabAllocInvalidSize
523
+ * Handle raising an ERROR for an invalid size request. We don't do this
524
+ * in slab alloc as calling the elog functions would force the compiler
525
+ * to setup the stack frame in SlabAlloc. For performance reasons, we
526
+ * want to avoid that.
527
+ */
528
+ pg_noinline
529
+ static void
530
+ pg_attribute_noreturn()
531
+ SlabAllocInvalidSize(MemoryContext context, Size size)
532
+ {
533
+ SlabContext *slab = (SlabContext *) context;
534
+
535
+ elog(ERROR, "unexpected alloc chunk size %zu (expected %u)", size,
536
+ slab->chunkSize);
537
+ }
538
+
539
+ /*
540
+ * SlabAlloc
541
+ * Returns a pointer to a newly allocated memory chunk or raises an ERROR
542
+ * on allocation failure, or returns NULL when flags contains
543
+ * MCXT_ALLOC_NO_OOM. 'size' must be the same size as was specified
544
+ * during SlabContextCreate().
545
+ *
546
+ * This function should only contain the most common code paths. Everything
547
+ * else should be in pg_noinline helper functions, thus avoiding the overhead
548
+ * of creating a stack frame for the common cases. Allocating memory is often
549
+ * a bottleneck in many workloads, so avoiding stack frame setup is
550
+ * worthwhile. Helper functions should always directly return the newly
551
+ * allocated memory so that we can just return that address directly as a tail
552
+ * call.
553
+ */
554
+ void *
555
+ SlabAlloc(MemoryContext context, Size size, int flags)
556
+ {
557
+ SlabContext *slab = (SlabContext *) context;
558
+ SlabBlock *block;
559
+ MemoryChunk *chunk;
482
560
 
483
- /* find the blocklist element for storing blocks with 1 used chunk */
484
- blocklist_idx = SlabBlocklistIndex(slab, block->nfree);
485
- blocklist = &slab->blocklist[blocklist_idx];
561
+ Assert(SlabIsValid(slab));
486
562
 
487
- /* this better be empty. We just added a block thinking it was */
488
- Assert(dlist_is_empty(blocklist));
563
+ /* sanity check that this is pointing to a valid blocklist */
564
+ Assert(slab->curBlocklistIndex >= 0);
565
+ Assert(slab->curBlocklistIndex <= SlabBlocklistIndex(slab, slab->chunksPerBlock));
489
566
 
490
- dlist_push_head(blocklist, &block->node);
567
+ /*
568
+ * Make sure we only allow correct request size. This doubles as the
569
+ * MemoryContextCheckSize check.
570
+ */
571
+ if (unlikely(size != slab->chunkSize))
572
+ SlabAllocInvalidSize(context, size);
491
573
 
492
- slab->curBlocklistIndex = blocklist_idx;
574
+ if (unlikely(slab->curBlocklistIndex == 0))
575
+ {
576
+ /*
577
+ * Handle the case when there are no partially filled blocks
578
+ * available. This happens either when the last allocation took the
579
+ * last chunk in the block, or when SlabFree() free'd the final block.
580
+ */
581
+ return SlabAllocFromNewBlock(context, size, flags);
493
582
  }
494
583
  else
495
584
  {
@@ -526,38 +615,7 @@ SlabAlloc(MemoryContext context, Size size)
526
615
  }
527
616
  }
528
617
 
529
- /*
530
- * Check that the chunk pointer is actually somewhere on the block and is
531
- * aligned as expected.
532
- */
533
- Assert(chunk >= SlabBlockGetChunk(slab, block, 0));
534
- Assert(chunk <= SlabBlockGetChunk(slab, block, slab->chunksPerBlock - 1));
535
- Assert(SlabChunkMod(slab, block, chunk) == 0);
536
-
537
- /* Prepare to initialize the chunk header. */
538
- VALGRIND_MAKE_MEM_UNDEFINED(chunk, Slab_CHUNKHDRSZ);
539
-
540
- MemoryChunkSetHdrMask(chunk, block, MAXALIGN(slab->chunkSize),
541
- MCTX_SLAB_ID);
542
- #ifdef MEMORY_CONTEXT_CHECKING
543
- /* slab mark to catch clobber of "unused" space */
544
- Assert(slab->chunkSize < (slab->fullChunkSize - Slab_CHUNKHDRSZ));
545
- set_sentinel(MemoryChunkGetPointer(chunk), size);
546
- VALGRIND_MAKE_MEM_NOACCESS(((char *) chunk) +
547
- Slab_CHUNKHDRSZ + slab->chunkSize,
548
- slab->fullChunkSize -
549
- (slab->chunkSize + Slab_CHUNKHDRSZ));
550
- #endif
551
-
552
- #ifdef RANDOMIZE_ALLOCATED_MEMORY
553
- /* fill the allocated space with junk */
554
- randomize_mem((char *) MemoryChunkGetPointer(chunk), size);
555
- #endif
556
-
557
- /* Disallow access to the chunk header. */
558
- VALGRIND_MAKE_MEM_NOACCESS(chunk, Slab_CHUNKHDRSZ);
559
-
560
- return MemoryChunkGetPointer(chunk);
618
+ return SlabAllocSetupNewChunk(context, block, chunk, size);
561
619
  }
562
620
 
563
621
  /*
@@ -690,7 +748,7 @@ SlabFree(void *pointer)
690
748
  * realloc is usually used to enlarge the chunk.
691
749
  */
692
750
  void *
693
- SlabRealloc(void *pointer, Size size)
751
+ SlabRealloc(void *pointer, Size size, int flags)
694
752
  {
695
753
  MemoryChunk *chunk = PointerGetMemoryChunk(pointer);
696
754
  SlabBlock *block;
@@ -9,7 +9,7 @@
9
9
  * encnames.c
10
10
  * Encoding names and routines for working with them.
11
11
  *
12
- * Portions Copyright (c) 2001-2023, PostgreSQL Global Development Group
12
+ * Portions Copyright (c) 2001-2024, PostgreSQL Global Development Group
13
13
  *
14
14
  * IDENTIFICATION
15
15
  * src/common/encnames.c
@@ -46,7 +46,6 @@ typedef struct pg_encname
46
46
 
47
47
  /* ----------
48
48
  * These are "official" encoding names.
49
- * XXX must be sorted by the same order as enum pg_enc (in mb/pg_wchar.h)
50
49
  * ----------
51
50
  */
52
51
  #ifndef WIN32
@@ -57,48 +56,48 @@ typedef struct pg_encname
57
56
 
58
57
  const pg_enc2name pg_enc2name_tbl[] =
59
58
  {
60
- DEF_ENC2NAME(SQL_ASCII, 0),
61
- DEF_ENC2NAME(EUC_JP, 20932),
62
- DEF_ENC2NAME(EUC_CN, 20936),
63
- DEF_ENC2NAME(EUC_KR, 51949),
64
- DEF_ENC2NAME(EUC_TW, 0),
65
- DEF_ENC2NAME(EUC_JIS_2004, 20932),
66
- DEF_ENC2NAME(UTF8, 65001),
67
- DEF_ENC2NAME(MULE_INTERNAL, 0),
68
- DEF_ENC2NAME(LATIN1, 28591),
69
- DEF_ENC2NAME(LATIN2, 28592),
70
- DEF_ENC2NAME(LATIN3, 28593),
71
- DEF_ENC2NAME(LATIN4, 28594),
72
- DEF_ENC2NAME(LATIN5, 28599),
73
- DEF_ENC2NAME(LATIN6, 0),
74
- DEF_ENC2NAME(LATIN7, 0),
75
- DEF_ENC2NAME(LATIN8, 0),
76
- DEF_ENC2NAME(LATIN9, 28605),
77
- DEF_ENC2NAME(LATIN10, 0),
78
- DEF_ENC2NAME(WIN1256, 1256),
79
- DEF_ENC2NAME(WIN1258, 1258),
80
- DEF_ENC2NAME(WIN866, 866),
81
- DEF_ENC2NAME(WIN874, 874),
82
- DEF_ENC2NAME(KOI8R, 20866),
83
- DEF_ENC2NAME(WIN1251, 1251),
84
- DEF_ENC2NAME(WIN1252, 1252),
85
- DEF_ENC2NAME(ISO_8859_5, 28595),
86
- DEF_ENC2NAME(ISO_8859_6, 28596),
87
- DEF_ENC2NAME(ISO_8859_7, 28597),
88
- DEF_ENC2NAME(ISO_8859_8, 28598),
89
- DEF_ENC2NAME(WIN1250, 1250),
90
- DEF_ENC2NAME(WIN1253, 1253),
91
- DEF_ENC2NAME(WIN1254, 1254),
92
- DEF_ENC2NAME(WIN1255, 1255),
93
- DEF_ENC2NAME(WIN1257, 1257),
94
- DEF_ENC2NAME(KOI8U, 21866),
95
- DEF_ENC2NAME(SJIS, 932),
96
- DEF_ENC2NAME(BIG5, 950),
97
- DEF_ENC2NAME(GBK, 936),
98
- DEF_ENC2NAME(UHC, 949),
99
- DEF_ENC2NAME(GB18030, 54936),
100
- DEF_ENC2NAME(JOHAB, 0),
101
- DEF_ENC2NAME(SHIFT_JIS_2004, 932)
59
+ [PG_SQL_ASCII] = DEF_ENC2NAME(SQL_ASCII, 0),
60
+ [PG_EUC_JP] = DEF_ENC2NAME(EUC_JP, 20932),
61
+ [PG_EUC_CN] = DEF_ENC2NAME(EUC_CN, 20936),
62
+ [PG_EUC_KR] = DEF_ENC2NAME(EUC_KR, 51949),
63
+ [PG_EUC_TW] = DEF_ENC2NAME(EUC_TW, 0),
64
+ [PG_EUC_JIS_2004] = DEF_ENC2NAME(EUC_JIS_2004, 20932),
65
+ [PG_UTF8] = DEF_ENC2NAME(UTF8, 65001),
66
+ [PG_MULE_INTERNAL] = DEF_ENC2NAME(MULE_INTERNAL, 0),
67
+ [PG_LATIN1] = DEF_ENC2NAME(LATIN1, 28591),
68
+ [PG_LATIN2] = DEF_ENC2NAME(LATIN2, 28592),
69
+ [PG_LATIN3] = DEF_ENC2NAME(LATIN3, 28593),
70
+ [PG_LATIN4] = DEF_ENC2NAME(LATIN4, 28594),
71
+ [PG_LATIN5] = DEF_ENC2NAME(LATIN5, 28599),
72
+ [PG_LATIN6] = DEF_ENC2NAME(LATIN6, 0),
73
+ [PG_LATIN7] = DEF_ENC2NAME(LATIN7, 0),
74
+ [PG_LATIN8] = DEF_ENC2NAME(LATIN8, 0),
75
+ [PG_LATIN9] = DEF_ENC2NAME(LATIN9, 28605),
76
+ [PG_LATIN10] = DEF_ENC2NAME(LATIN10, 0),
77
+ [PG_WIN1256] = DEF_ENC2NAME(WIN1256, 1256),
78
+ [PG_WIN1258] = DEF_ENC2NAME(WIN1258, 1258),
79
+ [PG_WIN866] = DEF_ENC2NAME(WIN866, 866),
80
+ [PG_WIN874] = DEF_ENC2NAME(WIN874, 874),
81
+ [PG_KOI8R] = DEF_ENC2NAME(KOI8R, 20866),
82
+ [PG_WIN1251] = DEF_ENC2NAME(WIN1251, 1251),
83
+ [PG_WIN1252] = DEF_ENC2NAME(WIN1252, 1252),
84
+ [PG_ISO_8859_5] = DEF_ENC2NAME(ISO_8859_5, 28595),
85
+ [PG_ISO_8859_6] = DEF_ENC2NAME(ISO_8859_6, 28596),
86
+ [PG_ISO_8859_7] = DEF_ENC2NAME(ISO_8859_7, 28597),
87
+ [PG_ISO_8859_8] = DEF_ENC2NAME(ISO_8859_8, 28598),
88
+ [PG_WIN1250] = DEF_ENC2NAME(WIN1250, 1250),
89
+ [PG_WIN1253] = DEF_ENC2NAME(WIN1253, 1253),
90
+ [PG_WIN1254] = DEF_ENC2NAME(WIN1254, 1254),
91
+ [PG_WIN1255] = DEF_ENC2NAME(WIN1255, 1255),
92
+ [PG_WIN1257] = DEF_ENC2NAME(WIN1257, 1257),
93
+ [PG_KOI8U] = DEF_ENC2NAME(KOI8U, 21866),
94
+ [PG_SJIS] = DEF_ENC2NAME(SJIS, 932),
95
+ [PG_BIG5] = DEF_ENC2NAME(BIG5, 950),
96
+ [PG_GBK] = DEF_ENC2NAME(GBK, 936),
97
+ [PG_UHC] = DEF_ENC2NAME(UHC, 949),
98
+ [PG_GB18030] = DEF_ENC2NAME(GB18030, 54936),
99
+ [PG_JOHAB] = DEF_ENC2NAME(JOHAB, 0),
100
+ [PG_SHIFT_JIS_2004] = DEF_ENC2NAME(SHIFT_JIS_2004, 932),
102
101
  };
103
102
 
104
103
  /* ----------
@@ -11,7 +11,7 @@
11
11
  * hashtables
12
12
  *
13
13
  *
14
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
14
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
15
15
  * Portions Copyright (c) 1994, Regents of the University of California
16
16
  *
17
17
  *
@@ -10,7 +10,7 @@
10
10
  * PostgreSQL's list of SQL keywords
11
11
  *
12
12
  *
13
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
13
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
14
14
  * Portions Copyright (c) 1994, Regents of the University of California
15
15
  *
16
16
  *