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
@@ -1,6 +1,7 @@
1
1
  /*--------------------------------------------------------------------
2
2
  * Symbols referenced in this file:
3
3
  * - bms_copy
4
+ * - bms_is_valid_set
4
5
  * - bms_equal
5
6
  * - bms_free
6
7
  * - bms_next_member
@@ -15,11 +16,31 @@
15
16
  *
16
17
  * A bitmap set can represent any set of nonnegative integers, although
17
18
  * it is mainly intended for sets where the maximum value is not large,
18
- * say at most a few hundred. By convention, we always represent the
19
- * empty set by a NULL pointer.
20
- *
21
- *
22
- * Copyright (c) 2003-2023, PostgreSQL Global Development Group
19
+ * say at most a few hundred. By convention, we always represent a set with
20
+ * the minimum possible number of words, i.e, there are never any trailing
21
+ * zero words. Enforcing this requires that an empty set is represented as
22
+ * NULL. Because an empty Bitmapset is represented as NULL, a non-NULL
23
+ * Bitmapset always has at least 1 Bitmapword. We can exploit this fact to
24
+ * speed up various loops over the Bitmapset's words array by using "do while"
25
+ * loops instead of "for" loops. This means the code does not waste time
26
+ * checking the loop condition before the first iteration. For Bitmapsets
27
+ * containing only a single word (likely the majority of them) this halves the
28
+ * number of loop condition checks.
29
+ *
30
+ * Callers must ensure that the set returned by functions in this file which
31
+ * adjust the members of an existing set is assigned to all pointers pointing
32
+ * to that existing set. No guarantees are made that we'll ever modify the
33
+ * existing set in-place and return it.
34
+ *
35
+ * To help find bugs caused by callers failing to record the return value of
36
+ * the function which manipulates an existing set, we support building with
37
+ * REALLOCATE_BITMAPSETS. This results in the set being reallocated each time
38
+ * the set is altered and the existing being pfreed. This is useful as if any
39
+ * references still exist to the old set, we're more likely to notice as
40
+ * any users of the old set will be accessing pfree'd memory. This option is
41
+ * only intended to be used for debugging.
42
+ *
43
+ * Copyright (c) 2003-2024, PostgreSQL Global Development Group
23
44
  *
24
45
  * IDENTIFICATION
25
46
  * src/backend/nodes/bitmapset.c
@@ -61,21 +82,49 @@
61
82
 
62
83
  #define HAS_MULTIPLE_ONES(x) ((bitmapword) RIGHTMOST_ONE(x) != (x))
63
84
 
64
- /* Select appropriate bit-twiddling functions for bitmap word size */
65
- #if BITS_PER_BITMAPWORD == 32
66
- #define bmw_leftmost_one_pos(w) pg_leftmost_one_pos32(w)
67
- #define bmw_rightmost_one_pos(w) pg_rightmost_one_pos32(w)
68
- #define bmw_popcount(w) pg_popcount32(w)
69
- #elif BITS_PER_BITMAPWORD == 64
70
- #define bmw_leftmost_one_pos(w) pg_leftmost_one_pos64(w)
71
- #define bmw_rightmost_one_pos(w) pg_rightmost_one_pos64(w)
72
- #define bmw_popcount(w) pg_popcount64(w)
73
- #else
74
- #error "invalid BITS_PER_BITMAPWORD"
85
+ #ifdef USE_ASSERT_CHECKING
86
+ /*
87
+ * bms_is_valid_set - for cassert builds to check for valid sets
88
+ */
89
+ static bool
90
+ bms_is_valid_set(const Bitmapset *a)
91
+ {
92
+ /* NULL is the correct representation of an empty set */
93
+ if (a == NULL)
94
+ return true;
95
+
96
+ /* check the node tag is set correctly. pfree'd pointer, maybe? */
97
+ if (!IsA(a, Bitmapset))
98
+ return false;
99
+
100
+ /* trailing zero words are not allowed */
101
+ if (a->words[a->nwords - 1] == 0)
102
+ return false;
103
+
104
+ return true;
105
+ }
75
106
  #endif
76
107
 
77
- static bool bms_is_empty_internal(const Bitmapset *a);
108
+ #ifdef REALLOCATE_BITMAPSETS
109
+ /*
110
+ * bms_copy_and_free
111
+ * Only required in REALLOCATE_BITMAPSETS builds. Provide a simple way
112
+ * to return a freshly allocated set and pfree the original.
113
+ *
114
+ * Note: callers which accept multiple sets must be careful when calling this
115
+ * function to clone one parameter as other parameters may point to the same
116
+ * set. A good option is to call this just before returning the resulting
117
+ * set.
118
+ */
119
+ static Bitmapset *
120
+ bms_copy_and_free(Bitmapset *a)
121
+ {
122
+ Bitmapset *c = bms_copy(a);
78
123
 
124
+ bms_free(a);
125
+ return c;
126
+ }
127
+ #endif
79
128
 
80
129
  /*
81
130
  * bms_copy - make a palloc'd copy of a bitmapset
@@ -86,8 +135,11 @@ bms_copy(const Bitmapset *a)
86
135
  Bitmapset *result;
87
136
  size_t size;
88
137
 
138
+ Assert(bms_is_valid_set(a));
139
+
89
140
  if (a == NULL)
90
141
  return NULL;
142
+
91
143
  size = BITMAPSET_SIZE(a->nwords);
92
144
  result = (Bitmapset *) palloc(size);
93
145
  memcpy(result, a, size);
@@ -95,20 +147,16 @@ bms_copy(const Bitmapset *a)
95
147
  }
96
148
 
97
149
  /*
98
- * bms_equal - are two bitmapsets equal?
99
- *
100
- * This is logical not physical equality; in particular, a NULL pointer will
101
- * be reported as equal to a palloc'd value containing no members.
150
+ * bms_equal - are two bitmapsets equal? or both NULL?
102
151
  */
103
152
  bool
104
153
  bms_equal(const Bitmapset *a, const Bitmapset *b)
105
154
  {
106
- const Bitmapset *shorter;
107
- const Bitmapset *longer;
108
- int shortlen;
109
- int longlen;
110
155
  int i;
111
156
 
157
+ Assert(bms_is_valid_set(a));
158
+ Assert(bms_is_valid_set(b));
159
+
112
160
  /* Handle cases where either input is NULL */
113
161
  if (a == NULL)
114
162
  {
@@ -118,30 +166,19 @@ bms_equal(const Bitmapset *a, const Bitmapset *b)
118
166
  }
119
167
  else if (b == NULL)
120
168
  return false;
121
- /* Identify shorter and longer input */
122
- if (a->nwords <= b->nwords)
123
- {
124
- shorter = a;
125
- longer = b;
126
- }
127
- else
128
- {
129
- shorter = b;
130
- longer = a;
131
- }
132
- /* And process */
133
- shortlen = shorter->nwords;
134
- for (i = 0; i < shortlen; i++)
135
- {
136
- if (shorter->words[i] != longer->words[i])
137
- return false;
138
- }
139
- longlen = longer->nwords;
140
- for (; i < longlen; i++)
169
+
170
+ /* can't be equal if the word counts don't match */
171
+ if (a->nwords != b->nwords)
172
+ return false;
173
+
174
+ /* check each word matches */
175
+ i = 0;
176
+ do
141
177
  {
142
- if (longer->words[i] != 0)
178
+ if (a->words[i] != b->words[i])
143
179
  return false;
144
- }
180
+ } while (++i < a->nwords);
181
+
145
182
  return true;
146
183
  }
147
184
 
@@ -174,23 +211,20 @@ bms_free(Bitmapset *a)
174
211
 
175
212
 
176
213
  /*
177
- * These operations all make a freshly palloc'd result,
178
- * leaving their inputs untouched
179
- */
180
-
181
-
182
- /*
183
- * bms_union - set union
214
+ * bms_union - create and return a new set containing all members from both
215
+ * input sets. Both inputs are left unmodified.
184
216
  */
185
217
 
186
218
 
187
219
  /*
188
- * bms_intersect - set intersection
220
+ * bms_intersect - create and return a new set containing members which both
221
+ * input sets have in common. Both inputs are left unmodified.
189
222
  */
190
223
 
191
224
 
192
225
  /*
193
- * bms_difference - set difference (ie, A without members of B)
226
+ * bms_difference - create and return a new set containing all the members of
227
+ * 'a' without the members of 'b'.
194
228
  */
195
229
 
196
230
 
@@ -266,17 +300,21 @@ bms_num_members(const Bitmapset *a)
266
300
  int nwords;
267
301
  int wordnum;
268
302
 
303
+ Assert(bms_is_valid_set(a));
304
+
269
305
  if (a == NULL)
270
306
  return 0;
307
+
271
308
  nwords = a->nwords;
272
- for (wordnum = 0; wordnum < nwords; wordnum++)
309
+ wordnum = 0;
310
+ do
273
311
  {
274
312
  bitmapword w = a->words[wordnum];
275
313
 
276
314
  /* No need to count the bits in a zero word */
277
315
  if (w != 0)
278
316
  result += bmw_popcount(w);
279
- }
317
+ } while (++wordnum < nwords);
280
318
  return result;
281
319
  }
282
320
 
@@ -287,46 +325,40 @@ bms_num_members(const Bitmapset *a)
287
325
  */
288
326
 
289
327
 
290
- /*
291
- * bms_is_empty_internal - is a set empty?
292
- *
293
- * This is now used only locally, to detect cases where a function has
294
- * computed an empty set that we must now get rid of. Hence, we can
295
- * assume the input isn't NULL.
296
- */
297
-
298
-
299
-
300
- /*
301
- * These operations all "recycle" their non-const inputs, ie, either
302
- * return the modified input or pfree it if it can't hold the result.
303
- *
304
- * These should generally be used in the style
305
- *
306
- * foo = bms_add_member(foo, x);
307
- */
308
-
309
328
 
310
329
  /*
311
330
  * bms_add_member - add a specified member to set
312
331
  *
313
- * Input set is modified or recycled!
332
+ * 'a' is recycled when possible.
314
333
  */
315
-
334
+ #ifdef REALLOCATE_BITMAPSETS
335
+ #endif
316
336
 
317
337
  /*
318
338
  * bms_del_member - remove a specified member from set
319
339
  *
320
340
  * No error if x is not currently a member of set
321
341
  *
322
- * Input set is modified in-place!
342
+ * 'a' is recycled when possible.
323
343
  */
324
-
344
+ #ifdef REALLOCATE_BITMAPSETS
345
+ #endif
325
346
 
326
347
  /*
327
- * bms_add_members - like bms_union, but left input is recycled
348
+ * bms_add_members - like bms_union, but left input is recycled when possible
328
349
  */
350
+ #ifdef REALLOCATE_BITMAPSETS
351
+ #endif
352
+ #ifdef REALLOCATE_BITMAPSETS
353
+ #endif
329
354
 
355
+ /*
356
+ * bms_replace_members
357
+ * Remove all existing members from 'a' and repopulate the set with members
358
+ * from 'b', recycling 'a', when possible.
359
+ */
360
+ #ifdef REALLOCATE_BITMAPSETS
361
+ #endif
330
362
 
331
363
  /*
332
364
  * bms_add_range
@@ -336,22 +368,36 @@ bms_num_members(const Bitmapset *a)
336
368
  * using this function will be faster when the range is large as we work at
337
369
  * the bitmapword level rather than at bit level.
338
370
  */
339
-
371
+ #ifdef REALLOCATE_BITMAPSETS
372
+ #endif
373
+ #ifdef REALLOCATE_BITMAPSETS
374
+ #endif
340
375
 
341
376
  /*
342
- * bms_int_members - like bms_intersect, but left input is recycled
377
+ * bms_int_members - like bms_intersect, but left input is recycled when
378
+ * possible
343
379
  */
344
-
380
+ #ifdef REALLOCATE_BITMAPSETS
381
+ #endif
345
382
 
346
383
  /*
347
- * bms_del_members - like bms_difference, but left input is recycled
384
+ * bms_del_members - delete members in 'a' that are set in 'b'. 'a' is
385
+ * recycled when possible.
348
386
  */
349
-
387
+ #ifdef REALLOCATE_BITMAPSETS
388
+ #endif
389
+ #ifdef REALLOCATE_BITMAPSETS
390
+ #endif
350
391
 
351
392
  /*
352
- * bms_join - like bms_union, but *both* inputs are recycled
393
+ * bms_join - like bms_union, but *either* input *may* be recycled
353
394
  */
354
-
395
+ #ifdef REALLOCATE_BITMAPSETS
396
+ #endif
397
+ #ifdef REALLOCATE_BITMAPSETS
398
+ #endif
399
+ #ifdef REALLOCATE_BITMAPSETS
400
+ #endif
355
401
 
356
402
  /*
357
403
  * bms_next_member - find next member of a set
@@ -379,6 +425,8 @@ bms_next_member(const Bitmapset *a, int prevbit)
379
425
  int wordnum;
380
426
  bitmapword mask;
381
427
 
428
+ Assert(bms_is_valid_set(a));
429
+
382
430
  if (a == NULL)
383
431
  return -2;
384
432
  nwords = a->nwords;
@@ -435,11 +483,6 @@ bms_next_member(const Bitmapset *a, int prevbit)
435
483
 
436
484
  /*
437
485
  * bms_hash_value - compute a hash key for a Bitmapset
438
- *
439
- * Note: we must ensure that any two bitmapsets that are bms_equal() will
440
- * hash to the same value; in practice this means that trailing all-zero
441
- * words must not affect the result. Hence we strip those before applying
442
- * hash_any().
443
486
  */
444
487
 
445
488
 
@@ -14,7 +14,7 @@
14
14
  * Copy functions for Postgres tree nodes.
15
15
  *
16
16
  *
17
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
17
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
18
18
  * Portions Copyright (c) 1994, Regents of the University of California
19
19
  *
20
20
  * IDENTIFICATION
@@ -19,7 +19,7 @@
19
19
  * "x" to be considered equal() to another reference to "x" in the query.
20
20
  *
21
21
  *
22
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
22
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
23
23
  * Portions Copyright (c) 1994, Regents of the University of California
24
24
  *
25
25
  * IDENTIFICATION
@@ -16,7 +16,7 @@
16
16
  * and GetExtensibleNodeMethods to get information about a previously
17
17
  * registered type of extensible node.
18
18
  *
19
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
19
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
20
20
  * Portions Copyright (c) 1994, Regents of the University of California
21
21
  *
22
22
  * IDENTIFICATION
@@ -13,7 +13,6 @@
13
13
  * - new_head_cell
14
14
  * - list_make3_impl
15
15
  * - list_make4_impl
16
- * - list_delete_cell
17
16
  * - list_delete_nth_cell
18
17
  * - list_free
19
18
  * - list_free_private
@@ -31,7 +30,7 @@
31
30
  * See comments in pg_list.h.
32
31
  *
33
32
  *
34
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
33
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
35
34
  * Portions Copyright (c) 1994, Regents of the University of California
36
35
  *
37
36
  *
@@ -42,6 +41,7 @@
42
41
  */
43
42
  #include "postgres.h"
44
43
 
44
+ #include "common/int.h"
45
45
  #include "nodes/pg_list.h"
46
46
  #include "port/pg_bitutils.h"
47
47
  #include "utils/memdebug.h"
@@ -635,11 +635,7 @@ list_delete_nth_cell(List *list, int n)
635
635
  * Note that this takes time proportional to the distance to the end of the
636
636
  * list, since the following entries must be moved.
637
637
  */
638
- List *
639
- list_delete_cell(List *list, ListCell *cell)
640
- {
641
- return list_delete_nth_cell(list, cell - list->elements);
642
- }
638
+
643
639
 
644
640
  /*
645
641
  * Delete the first cell in list that matches datum, if any.
@@ -1,6 +1,7 @@
1
1
  /*--------------------------------------------------------------------
2
2
  * Symbols referenced in this file:
3
3
  * - makeDefElem
4
+ * - makeStringConst
4
5
  * - makeTypeNameFromNameList
5
6
  * - makeDefElemExtended
6
7
  * - makeRangeVar
@@ -8,13 +9,14 @@
8
9
  * - makeAlias
9
10
  * - makeSimpleA_Expr
10
11
  * - makeGroupingSet
12
+ * - makeJsonTablePathSpec
13
+ * - makeJsonFormat
11
14
  * - makeTypeName
12
15
  * - makeFuncCall
13
16
  * - makeA_Expr
14
- * - makeJsonFormat
15
17
  * - makeJsonIsPredicate
18
+ * - makeJsonBehavior
16
19
  * - makeJsonValueExpr
17
- * - makeJsonEncoding
18
20
  * - makeJsonKeyValue
19
21
  * - makeBoolExpr
20
22
  *--------------------------------------------------------------------
@@ -26,7 +28,7 @@
26
28
  * creator functions for various nodes. The functions here are for the
27
29
  * most frequently created nodes.
28
30
  *
29
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
31
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
30
32
  * Portions Copyright (c) 1994, Regents of the University of California
31
33
  *
32
34
  *
@@ -41,7 +43,6 @@
41
43
  #include "catalog/pg_type.h"
42
44
  #include "nodes/makefuncs.h"
43
45
  #include "nodes/nodeFuncs.h"
44
- #include "utils/errcodes.h"
45
46
  #include "utils/lsyscache.h"
46
47
 
47
48
 
@@ -268,6 +269,22 @@ makeTypeNameFromNameList(List *names)
268
269
  */
269
270
 
270
271
 
272
+ /*
273
+ * makeStringConst -
274
+ * build a A_Const node of type T_String for given string
275
+ */
276
+ Node *
277
+ makeStringConst(char *str, int location)
278
+ {
279
+ A_Const *n = makeNode(A_Const);
280
+
281
+ n->val.sval.type = T_String;
282
+ n->val.sval.sval = str;
283
+ n->location = location;
284
+
285
+ return (Node *) n;
286
+ }
287
+
271
288
  /*
272
289
  * makeDefElem -
273
290
  * build a DefElem node
@@ -457,24 +474,19 @@ makeJsonValueExpr(Expr *raw_expr, Expr *formatted_expr,
457
474
  }
458
475
 
459
476
  /*
460
- * makeJsonEncoding -
461
- * converts JSON encoding name to enum JsonEncoding
477
+ * makeJsonBehavior -
478
+ * creates a JsonBehavior node
462
479
  */
463
- JsonEncoding
464
- makeJsonEncoding(char *name)
480
+ JsonBehavior *
481
+ makeJsonBehavior(JsonBehaviorType btype, Node *expr, int location)
465
482
  {
466
- if (!pg_strcasecmp(name, "utf8"))
467
- return JS_ENC_UTF8;
468
- if (!pg_strcasecmp(name, "utf16"))
469
- return JS_ENC_UTF16;
470
- if (!pg_strcasecmp(name, "utf32"))
471
- return JS_ENC_UTF32;
472
-
473
- ereport(ERROR,
474
- errcode(ERRCODE_INVALID_PARAMETER_VALUE),
475
- errmsg("unrecognized JSON encoding: %s", name));
476
-
477
- return JS_ENC_DEFAULT;
483
+ JsonBehavior *behavior = makeNode(JsonBehavior);
484
+
485
+ behavior->btype = btype;
486
+ behavior->expr = expr;
487
+ behavior->location = location;
488
+
489
+ return behavior;
478
490
  }
479
491
 
480
492
  /*
@@ -510,3 +522,30 @@ makeJsonIsPredicate(Node *expr, JsonFormat *format, JsonValueType item_type,
510
522
 
511
523
  return (Node *) n;
512
524
  }
525
+
526
+ /*
527
+ * makeJsonTablePathSpec -
528
+ * Make JsonTablePathSpec node from given path string and name (if any)
529
+ */
530
+ JsonTablePathSpec *
531
+ makeJsonTablePathSpec(char *string, char *name, int string_location,
532
+ int name_location)
533
+ {
534
+ JsonTablePathSpec *pathspec = makeNode(JsonTablePathSpec);
535
+
536
+ Assert(string != NULL);
537
+ pathspec->string = makeStringConst(string, string_location);
538
+ if (name != NULL)
539
+ pathspec->name = pstrdup(name);
540
+
541
+ pathspec->name_location = name_location;
542
+ pathspec->location = string_location;
543
+
544
+ return pathspec;
545
+ }
546
+
547
+ /*
548
+ * makeJsonTablePath -
549
+ * Make JsonTablePath node for given path string and name
550
+ */
551
+