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
@@ -16,7 +16,7 @@
16
16
  * and implementing search-path-controlled searches.
17
17
  *
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
@@ -31,6 +31,7 @@
31
31
  #include "access/xact.h"
32
32
  #include "access/xlog.h"
33
33
  #include "catalog/dependency.h"
34
+ #include "catalog/namespace.h"
34
35
  #include "catalog/objectaccess.h"
35
36
  #include "catalog/pg_authid.h"
36
37
  #include "catalog/pg_collation.h"
@@ -48,14 +49,14 @@
48
49
  #include "catalog/pg_ts_template.h"
49
50
  #include "catalog/pg_type.h"
50
51
  #include "commands/dbcommands.h"
52
+ #include "common/hashfn_unstable.h"
51
53
  #include "funcapi.h"
52
54
  #include "mb/pg_wchar.h"
53
55
  #include "miscadmin.h"
54
56
  #include "nodes/makefuncs.h"
55
- #include "parser/parse_func.h"
56
57
  #include "storage/ipc.h"
57
58
  #include "storage/lmgr.h"
58
- #include "storage/sinvaladt.h"
59
+ #include "storage/procarray.h"
59
60
  #include "utils/acl.h"
60
61
  #include "utils/builtins.h"
61
62
  #include "utils/catcache.h"
@@ -74,9 +75,7 @@
74
75
  * may be included:
75
76
  *
76
77
  * 1. If a TEMP table namespace has been initialized in this session, it
77
- * is implicitly searched first. (The only time this doesn't happen is
78
- * when we are obeying an override search path spec that says not to use the
79
- * temp namespace, or the temp namespace is included in the explicit list.)
78
+ * is implicitly searched first.
80
79
  *
81
80
  * 2. The system catalog namespace is always searched. If the system
82
81
  * namespace is present in the explicit path then it will be searched in
@@ -115,19 +114,16 @@
115
114
  * namespace (if it exists), preceded by the user's personal namespace
116
115
  * (if one exists).
117
116
  *
118
- * We support a stack of "override" search path settings for use within
119
- * specific sections of backend code. namespace_search_path is ignored
120
- * whenever the override stack is nonempty. activeSearchPath is always
121
- * the actually active path; it points either to the search list of the
122
- * topmost stack entry, or to baseSearchPath which is the list derived
123
- * from namespace_search_path.
117
+ * activeSearchPath is always the actually active path; it points to
118
+ * baseSearchPath which is the list derived from namespace_search_path.
124
119
  *
125
- * If baseSearchPathValid is false, then baseSearchPath (and other
126
- * derived variables) need to be recomputed from namespace_search_path.
127
- * We mark it invalid upon an assignment to namespace_search_path or receipt
128
- * of a syscache invalidation event for pg_namespace. The recomputation
129
- * is done during the next non-overridden lookup attempt. Note that an
130
- * override spec is never subject to recomputation.
120
+ * If baseSearchPathValid is false, then baseSearchPath (and other derived
121
+ * variables) need to be recomputed from namespace_search_path, or retrieved
122
+ * from the search path cache if there haven't been any syscache
123
+ * invalidations. We mark it invalid upon an assignment to
124
+ * namespace_search_path or receipt of a syscache invalidation event for
125
+ * pg_namespace or pg_authid. The recomputation is done during the next
126
+ * lookup attempt.
131
127
  *
132
128
  * Any namespaces mentioned in namespace_search_path that are not readable
133
129
  * by the current user ID are simply left out of baseSearchPath; so
@@ -168,16 +164,31 @@
168
164
  /* The above four values are valid only if baseSearchPathValid */
169
165
 
170
166
 
171
- /* Override requests are remembered in a stack of OverrideStackEntry structs */
167
+ /*
168
+ * Storage for search path cache. Clear searchPathCacheValid as a simple
169
+ * way to invalidate *all* the cache entries, not just the active one.
170
+ */
171
+
172
+
172
173
 
173
- typedef struct
174
+ typedef struct SearchPathCacheKey
174
175
  {
175
- List *searchPath; /* the desired search path */
176
- Oid creationNamespace; /* the desired creation namespace */
177
- int nestLevel; /* subtransaction nesting level */
178
- } OverrideStackEntry;
176
+ const char *searchPath;
177
+ Oid roleid;
178
+ } SearchPathCacheKey;
179
179
 
180
+ typedef struct SearchPathCacheEntry
181
+ {
182
+ SearchPathCacheKey key;
183
+ List *oidlist; /* namespace OIDs that pass ACL checks */
184
+ List *finalPath; /* cached final computed search path */
185
+ Oid firstNS; /* first explicitly-listed namespace */
186
+ bool temp_missing;
187
+ bool forceRecompute; /* force recompute of finalPath */
180
188
 
189
+ /* needed for simplehash */
190
+ char status;
191
+ } SearchPathCacheEntry;
181
192
 
182
193
  /*
183
194
  * myTempNamespace is InvalidOid until and unless a TEMP namespace is set up
@@ -208,16 +219,88 @@ typedef struct
208
219
 
209
220
 
210
221
  /* Local functions */
222
+ static bool RelationIsVisibleExt(Oid relid, bool *is_missing);
223
+ static bool TypeIsVisibleExt(Oid typid, bool *is_missing);
224
+ static bool FunctionIsVisibleExt(Oid funcid, bool *is_missing);
225
+ static bool OperatorIsVisibleExt(Oid oprid, bool *is_missing);
226
+ static bool OpclassIsVisibleExt(Oid opcid, bool *is_missing);
227
+ static bool OpfamilyIsVisibleExt(Oid opfid, bool *is_missing);
228
+ static bool CollationIsVisibleExt(Oid collid, bool *is_missing);
229
+ static bool ConversionIsVisibleExt(Oid conid, bool *is_missing);
230
+ static bool StatisticsObjIsVisibleExt(Oid stxid, bool *is_missing);
231
+ static bool TSParserIsVisibleExt(Oid prsId, bool *is_missing);
232
+ static bool TSDictionaryIsVisibleExt(Oid dictId, bool *is_missing);
233
+ static bool TSTemplateIsVisibleExt(Oid tmplId, bool *is_missing);
234
+ static bool TSConfigIsVisibleExt(Oid cfgid, bool *is_missing);
211
235
  static void recomputeNamespacePath(void);
212
236
  static void AccessTempTableNamespace(bool force);
213
237
  static void InitTempTableNamespace(void);
214
238
  static void RemoveTempRelations(Oid tempNamespaceId);
215
239
  static void RemoveTempRelationsCallback(int code, Datum arg);
216
- static void NamespaceCallback(Datum arg, int cacheid, uint32 hashvalue);
240
+ static void InvalidationCallback(Datum arg, int cacheid, uint32 hashvalue);
217
241
  static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
218
242
  bool include_out_arguments, int pronargs,
219
243
  int **argnumbers);
220
244
 
245
+ /*
246
+ * Recomputing the namespace path can be costly when done frequently, such as
247
+ * when a function has search_path set in proconfig. Add a search path cache
248
+ * that can be used by recomputeNamespacePath().
249
+ *
250
+ * The cache is also used to remember already-validated strings in
251
+ * check_search_path() to avoid the need to call SplitIdentifierString()
252
+ * repeatedly.
253
+ *
254
+ * The search path cache is based on a wrapper around a simplehash hash table
255
+ * (nsphash, defined below). The spcache wrapper deals with OOM while trying
256
+ * to initialize a key, optimizes repeated lookups of the same key, and also
257
+ * offers a more convenient API.
258
+ */
259
+
260
+
261
+
262
+
263
+
264
+ #define SH_PREFIX nsphash
265
+ #define SH_ELEMENT_TYPE SearchPathCacheEntry
266
+ #define SH_KEY_TYPE SearchPathCacheKey
267
+ #define SH_KEY key
268
+ #define SH_HASH_KEY(tb, key) spcachekey_hash(key)
269
+ #define SH_EQUAL(tb, a, b) spcachekey_equal(a, b)
270
+ #define SH_SCOPE static inline
271
+ #define SH_DECLARE
272
+ // #define SH_DEFINE
273
+ #include "lib/simplehash.h"
274
+
275
+ /*
276
+ * We only expect a small number of unique search_path strings to be used. If
277
+ * this cache grows to an unreasonable size, reset it to avoid steady-state
278
+ * memory growth. Most likely, only a few of those entries will benefit from
279
+ * the cache, and the cache will be quickly repopulated with such entries.
280
+ */
281
+ #define SPCACHE_RESET_THRESHOLD 256
282
+
283
+
284
+
285
+
286
+ /*
287
+ * Create or reset search_path cache as necessary.
288
+ */
289
+
290
+
291
+ /*
292
+ * Look up entry in search path cache without inserting. Returns NULL if not
293
+ * present.
294
+ */
295
+
296
+
297
+ /*
298
+ * Look up or insert entry in search path cache.
299
+ *
300
+ * Initialize key safely, so that OOM does not leave an entry without a valid
301
+ * key. Caller must ensure that non-key contents are properly initialized.
302
+ */
303
+
221
304
 
222
305
  /*
223
306
  * RangeVarGetRelidExtended
@@ -305,6 +388,14 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
305
388
  */
306
389
 
307
390
 
391
+ /*
392
+ * RelationIsVisibleExt
393
+ * As above, but if the relation isn't found and is_missing is not NULL,
394
+ * then set *is_missing = true and return false instead of throwing
395
+ * an error. (Caller must initialize *is_missing = false.)
396
+ */
397
+
398
+
308
399
 
309
400
  /*
310
401
  * TypenameGetTypid
@@ -329,6 +420,14 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
329
420
  */
330
421
 
331
422
 
423
+ /*
424
+ * TypeIsVisibleExt
425
+ * As above, but if the type isn't found and is_missing is not NULL,
426
+ * then set *is_missing = true and return false instead of throwing
427
+ * an error. (Caller must initialize *is_missing = false.)
428
+ */
429
+
430
+
332
431
 
333
432
  /*
334
433
  * FuncnameGetCandidates
@@ -435,6 +534,14 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
435
534
  */
436
535
 
437
536
 
537
+ /*
538
+ * FunctionIsVisibleExt
539
+ * As above, but if the function isn't found and is_missing is not NULL,
540
+ * then set *is_missing = true and return false instead of throwing
541
+ * an error. (Caller must initialize *is_missing = false.)
542
+ */
543
+
544
+
438
545
 
439
546
  /*
440
547
  * OpernameGetOprid
@@ -477,6 +584,14 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
477
584
  */
478
585
 
479
586
 
587
+ /*
588
+ * OperatorIsVisibleExt
589
+ * As above, but if the operator isn't found and is_missing is not NULL,
590
+ * then set *is_missing = true and return false instead of throwing
591
+ * an error. (Caller must initialize *is_missing = false.)
592
+ */
593
+
594
+
480
595
 
481
596
  /*
482
597
  * OpclassnameGetOpcid
@@ -496,6 +611,14 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
496
611
  */
497
612
 
498
613
 
614
+ /*
615
+ * OpclassIsVisibleExt
616
+ * As above, but if the opclass isn't found and is_missing is not NULL,
617
+ * then set *is_missing = true and return false instead of throwing
618
+ * an error. (Caller must initialize *is_missing = false.)
619
+ */
620
+
621
+
499
622
  /*
500
623
  * OpfamilynameGetOpfid
501
624
  * Try to resolve an unqualified index opfamily name.
@@ -514,6 +637,14 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
514
637
  */
515
638
 
516
639
 
640
+ /*
641
+ * OpfamilyIsVisibleExt
642
+ * As above, but if the opfamily isn't found and is_missing is not NULL,
643
+ * then set *is_missing = true and return false instead of throwing
644
+ * an error. (Caller must initialize *is_missing = false.)
645
+ */
646
+
647
+
517
648
  /*
518
649
  * lookup_collation
519
650
  * If there's a collation of the given name/namespace, and it works
@@ -542,6 +673,14 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
542
673
  */
543
674
 
544
675
 
676
+ /*
677
+ * CollationIsVisibleExt
678
+ * As above, but if the collation isn't found and is_missing is not NULL,
679
+ * then set *is_missing = true and return false instead of throwing
680
+ * an error. (Caller must initialize *is_missing = false.)
681
+ */
682
+
683
+
545
684
 
546
685
  /*
547
686
  * ConversionGetConid
@@ -560,6 +699,14 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
560
699
  */
561
700
 
562
701
 
702
+ /*
703
+ * ConversionIsVisibleExt
704
+ * As above, but if the conversion isn't found and is_missing is not NULL,
705
+ * then set *is_missing = true and return false instead of throwing
706
+ * an error. (Caller must initialize *is_missing = false.)
707
+ */
708
+
709
+
563
710
  /*
564
711
  * get_statistics_object_oid - find a statistics object by possibly qualified name
565
712
  *
@@ -575,6 +722,14 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
575
722
  */
576
723
 
577
724
 
725
+ /*
726
+ * StatisticsObjIsVisibleExt
727
+ * As above, but if the statistics object isn't found and is_missing is
728
+ * not NULL, then set *is_missing = true and return false instead of
729
+ * throwing an error. (Caller must initialize *is_missing = false.)
730
+ */
731
+
732
+
578
733
  /*
579
734
  * get_ts_parser_oid - find a TS parser by possibly qualified name
580
735
  *
@@ -590,6 +745,14 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
590
745
  */
591
746
 
592
747
 
748
+ /*
749
+ * TSParserIsVisibleExt
750
+ * As above, but if the parser isn't found and is_missing is not NULL,
751
+ * then set *is_missing = true and return false instead of throwing
752
+ * an error. (Caller must initialize *is_missing = false.)
753
+ */
754
+
755
+
593
756
  /*
594
757
  * get_ts_dict_oid - find a TS dictionary by possibly qualified name
595
758
  *
@@ -605,6 +768,14 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
605
768
  */
606
769
 
607
770
 
771
+ /*
772
+ * TSDictionaryIsVisibleExt
773
+ * As above, but if the dictionary isn't found and is_missing is not NULL,
774
+ * then set *is_missing = true and return false instead of throwing
775
+ * an error. (Caller must initialize *is_missing = false.)
776
+ */
777
+
778
+
608
779
  /*
609
780
  * get_ts_template_oid - find a TS template by possibly qualified name
610
781
  *
@@ -620,6 +791,14 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
620
791
  */
621
792
 
622
793
 
794
+ /*
795
+ * TSTemplateIsVisibleExt
796
+ * As above, but if the template isn't found and is_missing is not NULL,
797
+ * then set *is_missing = true and return false instead of throwing
798
+ * an error. (Caller must initialize *is_missing = false.)
799
+ */
800
+
801
+
623
802
  /*
624
803
  * get_ts_config_oid - find a TS config by possibly qualified name
625
804
  *
@@ -635,6 +814,14 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
635
814
  */
636
815
 
637
816
 
817
+ /*
818
+ * TSConfigIsVisibleExt
819
+ * As above, but if the configuration isn't found and is_missing is not
820
+ * NULL, then set *is_missing = true and return false instead of throwing
821
+ * an error. (Caller must initialize *is_missing = false.)
822
+ */
823
+
824
+
638
825
 
639
826
  /*
640
827
  * DeconstructQualifiedName
@@ -726,7 +913,7 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
726
913
  * but we also allow A_Star for the convenience of ColumnRef processing.
727
914
  */
728
915
  char *
729
- NameListToString(List *names)
916
+ NameListToString(const List *names)
730
917
  {
731
918
  StringInfoData string;
732
919
  ListCell *l;
@@ -806,10 +993,10 @@ NameListToString(List *names)
806
993
 
807
994
 
808
995
  /*
809
- * GetTempNamespaceBackendId - if the given namespace is a temporary-table
810
- * namespace (either my own, or another backend's), return the BackendId
996
+ * GetTempNamespaceProcNumber - if the given namespace is a temporary-table
997
+ * namespace (either my own, or another backend's), return the proc number
811
998
  * that owns it. Temporary-toast-table namespaces are included, too.
812
- * If it isn't a temp namespace, return InvalidBackendId.
999
+ * If it isn't a temp namespace, return INVALID_PROC_NUMBER.
813
1000
  */
814
1001
 
815
1002
 
@@ -841,8 +1028,7 @@ NameListToString(List *names)
841
1028
 
842
1029
 
843
1030
  /*
844
- * GetOverrideSearchPath - fetch current search path definition in form
845
- * used by PushOverrideSearchPath.
1031
+ * GetSearchPathMatcher - fetch current search path definition.
846
1032
  *
847
1033
  * The result structure is allocated in the specified memory context
848
1034
  * (which might or might not be equal to CurrentMemoryContext); but any
@@ -851,14 +1037,14 @@ NameListToString(List *names)
851
1037
 
852
1038
 
853
1039
  /*
854
- * CopyOverrideSearchPath - copy the specified OverrideSearchPath.
1040
+ * CopySearchPathMatcher - copy the specified SearchPathMatcher.
855
1041
  *
856
1042
  * The result structure is allocated in CurrentMemoryContext.
857
1043
  */
858
1044
 
859
1045
 
860
1046
  /*
861
- * OverrideSearchPathMatchesCurrent - does path match current setting?
1047
+ * SearchPathMatchesCurrentEnvironment - does path match current environment?
862
1048
  *
863
1049
  * This is tested over and over in some common code paths, and in the typical
864
1050
  * scenario where the active search path seldom changes, it'll always succeed.
@@ -868,53 +1054,44 @@ NameListToString(List *names)
868
1054
 
869
1055
 
870
1056
  /*
871
- * PushOverrideSearchPath - temporarily override the search path
872
- *
873
- * Do not use this function; almost any usage introduces a security
874
- * vulnerability. It exists for the benefit of legacy code running in
875
- * non-security-sensitive environments.
876
- *
877
- * We allow nested overrides, hence the push/pop terminology. The GUC
878
- * search_path variable is ignored while an override is active.
879
- *
880
- * It's possible that newpath->useTemp is set but there is no longer any
881
- * active temp namespace, if the path was saved during a transaction that
882
- * created a temp namespace and was later rolled back. In that case we just
883
- * ignore useTemp. A plausible alternative would be to create a new temp
884
- * namespace, but for existing callers that's not necessary because an empty
885
- * temp namespace wouldn't affect their results anyway.
1057
+ * get_collation_oid - find a collation by possibly qualified name
886
1058
  *
887
- * It's also worth noting that other schemas listed in newpath might not
888
- * exist anymore either. We don't worry about this because OIDs that match
889
- * no existing namespace will simply not produce any hits during searches.
1059
+ * Note that this will only find collations that work with the current
1060
+ * database's encoding.
890
1061
  */
1062
+ Oid get_collation_oid(List *name, bool missing_ok) { return DEFAULT_COLLATION_OID; }
891
1063
 
892
1064
 
893
1065
  /*
894
- * PopOverrideSearchPath - undo a previous PushOverrideSearchPath
895
- *
896
- * Any push during a (sub)transaction will be popped automatically at abort.
897
- * But it's caller error if a push isn't popped in normal control flow.
1066
+ * get_conversion_oid - find a conversion by possibly qualified name
898
1067
  */
899
1068
 
900
1069
 
1070
+ /*
1071
+ * FindDefaultConversionProc - find default encoding conversion proc
1072
+ */
1073
+
901
1074
 
902
1075
  /*
903
- * get_collation_oid - find a collation by possibly qualified name
904
- *
905
- * Note that this will only find collations that work with the current
906
- * database's encoding.
1076
+ * Look up namespace IDs and perform ACL checks. Return newly-allocated list.
907
1077
  */
908
- Oid get_collation_oid(List *name, bool missing_ok) { return -1; }
909
1078
 
910
1079
 
911
1080
  /*
912
- * get_conversion_oid - find a conversion by possibly qualified name
1081
+ * Remove duplicates, run namespace search hooks, and prepend
1082
+ * implicitly-searched namespaces. Return newly-allocated list.
1083
+ *
1084
+ * If an object_access_hook is present, this must always be recalculated. It
1085
+ * may seem that duplicate elimination is not dependent on the result of the
1086
+ * hook, but if a hook returns different results on different calls for the
1087
+ * same namespace ID, then it could affect the order in which that namespace
1088
+ * appears in the final list.
913
1089
  */
914
1090
 
915
1091
 
916
1092
  /*
917
- * FindDefaultConversionProc - find default encoding conversion proc
1093
+ * Retrieve search path information from the cache; or if not there, fill
1094
+ * it. The returned entry is valid only until the next call to this function.
918
1095
  */
919
1096
 
920
1097
 
@@ -993,7 +1170,7 @@ Oid get_collation_oid(List *name, bool missing_ok) { return -1; }
993
1170
 
994
1171
 
995
1172
  /*
996
- * NamespaceCallback
1173
+ * InvalidationCallback
997
1174
  * Syscache inval callback function
998
1175
  */
999
1176
 
@@ -1032,9 +1209,7 @@ Oid get_collation_oid(List *name, bool missing_ok) { return -1; }
1032
1209
  * condition errors when a query that's scanning a catalog using an MVCC
1033
1210
  * snapshot uses one of these functions. The underlying IsVisible functions
1034
1211
  * always use an up-to-date snapshot and so might see the object as already
1035
- * gone when it's still visible to the transaction snapshot. (There is no race
1036
- * condition in the current coding because we don't accept sinval messages
1037
- * between the SearchSysCacheExists test and the subsequent lookup.)
1212
+ * gone when it's still visible to the transaction snapshot.
1038
1213
  */
1039
1214
 
1040
1215
 
@@ -9,7 +9,7 @@
9
9
  * pg_proc.c
10
10
  * routines to support manipulation of the pg_proc relation
11
11
  *
12
- * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
12
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
13
13
  * Portions Copyright (c) 1994, Regents of the University of California
14
14
  *
15
15
  *
@@ -38,9 +38,7 @@
38
38
  #include "mb/pg_wchar.h"
39
39
  #include "miscadmin.h"
40
40
  #include "nodes/nodeFuncs.h"
41
- #include "parser/analyze.h"
42
41
  #include "parser/parse_coerce.h"
43
- #include "parser/parse_type.h"
44
42
  #include "pgstat.h"
45
43
  #include "rewrite/rewriteHandler.h"
46
44
  #include "tcop/pquery.h"
@@ -10,7 +10,7 @@
10
10
  * Support routines for various kinds of object creation.
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
  *
@@ -45,8 +45,7 @@
45
45
  #include "commands/defrem.h"
46
46
  #include "nodes/makefuncs.h"
47
47
  #include "parser/parse_type.h"
48
- #include "parser/scansup.h"
49
- #include "utils/builtins.h"
48
+ #include "utils/fmgrprotos.h"
50
49
 
51
50
  /*
52
51
  * Extract a string value (otherwise uninterpreted) from a DefElem.