pg_query 2.2.0 → 4.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (467) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +25 -0
  3. data/README.md +59 -31
  4. data/Rakefile +2 -2
  5. data/ext/pg_query/include/access/amapi.h +45 -1
  6. data/ext/pg_query/include/access/attmap.h +1 -1
  7. data/ext/pg_query/include/access/attnum.h +2 -2
  8. data/ext/pg_query/include/access/clog.h +4 -2
  9. data/ext/pg_query/include/access/commit_ts.h +6 -9
  10. data/ext/pg_query/include/access/detoast.h +1 -11
  11. data/ext/pg_query/include/access/genam.h +15 -12
  12. data/ext/pg_query/include/access/gin.h +2 -2
  13. data/ext/pg_query/include/access/htup.h +1 -1
  14. data/ext/pg_query/include/access/htup_details.h +75 -87
  15. data/ext/pg_query/include/access/itup.h +7 -1
  16. data/ext/pg_query/include/access/parallel.h +2 -2
  17. data/ext/pg_query/include/access/printtup.h +1 -1
  18. data/ext/pg_query/include/access/relation.h +1 -1
  19. data/ext/pg_query/include/access/relscan.h +17 -2
  20. data/ext/pg_query/include/access/rmgr.h +30 -3
  21. data/ext/pg_query/include/access/rmgrlist.h +23 -23
  22. data/ext/pg_query/include/access/sdir.h +1 -1
  23. data/ext/pg_query/include/access/skey.h +1 -1
  24. data/ext/pg_query/include/access/stratnum.h +4 -2
  25. data/ext/pg_query/include/access/sysattr.h +1 -1
  26. data/ext/pg_query/include/access/table.h +2 -1
  27. data/ext/pg_query/include/access/tableam.h +272 -20
  28. data/ext/pg_query/include/access/toast_compression.h +73 -0
  29. data/ext/pg_query/include/access/transam.h +123 -13
  30. data/ext/pg_query/include/access/tupconvert.h +1 -1
  31. data/ext/pg_query/include/access/tupdesc.h +1 -1
  32. data/ext/pg_query/include/access/tupmacs.h +3 -3
  33. data/ext/pg_query/include/access/twophase.h +3 -1
  34. data/ext/pg_query/include/access/xact.h +73 -19
  35. data/ext/pg_query/include/access/xlog.h +60 -155
  36. data/ext/pg_query/include/access/xlog_internal.h +40 -13
  37. data/ext/pg_query/include/access/xlogdefs.h +8 -16
  38. data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
  39. data/ext/pg_query/include/access/xlogreader.h +145 -39
  40. data/ext/pg_query/include/access/xlogrecord.h +18 -9
  41. data/ext/pg_query/include/access/xlogrecovery.h +157 -0
  42. data/ext/pg_query/include/c.h +101 -44
  43. data/ext/pg_query/include/catalog/catalog.h +3 -1
  44. data/ext/pg_query/include/catalog/catversion.h +2 -2
  45. data/ext/pg_query/include/catalog/dependency.h +8 -16
  46. data/ext/pg_query/include/catalog/genbki.h +83 -5
  47. data/ext/pg_query/include/catalog/index.h +18 -3
  48. data/ext/pg_query/include/catalog/indexing.h +12 -324
  49. data/ext/pg_query/include/catalog/namespace.h +4 -2
  50. data/ext/pg_query/include/catalog/objectaccess.h +70 -2
  51. data/ext/pg_query/include/catalog/objectaddress.h +11 -6
  52. data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
  53. data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
  54. data/ext/pg_query/include/catalog/pg_am.h +4 -1
  55. data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
  56. data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
  57. data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
  58. data/ext/pg_query/include/catalog/pg_authid.h +7 -2
  59. data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
  60. data/ext/pg_query/include/catalog/pg_class.h +44 -14
  61. data/ext/pg_query/include/catalog/pg_class_d.h +30 -1
  62. data/ext/pg_query/include/catalog/pg_collation.h +33 -8
  63. data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
  64. data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
  65. data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
  66. data/ext/pg_query/include/catalog/pg_control.h +3 -5
  67. data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
  68. data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
  69. data/ext/pg_query/include/catalog/pg_depend.h +11 -7
  70. data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
  71. data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
  72. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
  73. data/ext/pg_query/include/catalog/pg_index.h +17 -7
  74. data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
  75. data/ext/pg_query/include/catalog/pg_language.h +10 -5
  76. data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
  77. data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
  78. data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
  79. data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
  80. data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
  81. data/ext/pg_query/include/catalog/pg_operator.h +18 -15
  82. data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
  83. data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
  84. data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
  85. data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
  86. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
  87. data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
  88. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
  89. data/ext/pg_query/include/catalog/pg_proc.h +20 -11
  90. data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
  91. data/ext/pg_query/include/catalog/pg_publication.h +50 -7
  92. data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
  93. data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
  94. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
  95. data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
  96. data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
  97. data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
  98. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
  99. data/ext/pg_query/include/catalog/pg_transform.h +8 -5
  100. data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
  101. data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
  102. data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
  103. data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
  104. data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
  105. data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
  106. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
  107. data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
  108. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
  109. data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
  110. data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
  111. data/ext/pg_query/include/catalog/pg_type.h +55 -24
  112. data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
  113. data/ext/pg_query/include/catalog/storage.h +5 -3
  114. data/ext/pg_query/include/commands/async.h +3 -4
  115. data/ext/pg_query/include/commands/dbcommands.h +2 -1
  116. data/ext/pg_query/include/commands/defrem.h +11 -24
  117. data/ext/pg_query/include/commands/event_trigger.h +2 -2
  118. data/ext/pg_query/include/commands/explain.h +1 -1
  119. data/ext/pg_query/include/commands/prepare.h +1 -1
  120. data/ext/pg_query/include/commands/tablespace.h +2 -2
  121. data/ext/pg_query/include/commands/trigger.h +18 -16
  122. data/ext/pg_query/include/commands/user.h +2 -2
  123. data/ext/pg_query/include/commands/vacuum.h +88 -41
  124. data/ext/pg_query/include/commands/variable.h +1 -1
  125. data/ext/pg_query/include/common/file_perm.h +4 -4
  126. data/ext/pg_query/include/common/hashfn.h +1 -1
  127. data/ext/pg_query/include/common/ip.h +1 -7
  128. data/ext/pg_query/include/common/keywords.h +2 -6
  129. data/ext/pg_query/include/common/kwlookup.h +1 -1
  130. data/ext/pg_query/include/common/pg_prng.h +60 -0
  131. data/ext/pg_query/include/common/relpath.h +2 -2
  132. data/ext/pg_query/include/common/string.h +24 -1
  133. data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
  134. data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
  135. data/ext/pg_query/include/datatype/timestamp.h +40 -1
  136. data/ext/pg_query/include/executor/execdesc.h +1 -1
  137. data/ext/pg_query/include/executor/executor.h +65 -22
  138. data/ext/pg_query/include/executor/functions.h +17 -3
  139. data/ext/pg_query/include/executor/instrument.h +33 -16
  140. data/ext/pg_query/include/executor/spi.h +41 -3
  141. data/ext/pg_query/include/executor/tablefunc.h +1 -1
  142. data/ext/pg_query/include/executor/tuptable.h +1 -1
  143. data/ext/pg_query/include/fmgr.h +13 -7
  144. data/ext/pg_query/include/funcapi.h +16 -4
  145. data/ext/pg_query/include/getaddrinfo.h +1 -1
  146. data/ext/pg_query/include/jit/jit.h +11 -11
  147. data/ext/pg_query/include/kwlist_d.h +517 -494
  148. data/ext/pg_query/include/lib/dshash.h +112 -0
  149. data/ext/pg_query/include/lib/ilist.h +20 -1
  150. data/ext/pg_query/include/lib/pairingheap.h +1 -1
  151. data/ext/pg_query/include/lib/simplehash.h +140 -15
  152. data/ext/pg_query/include/lib/sort_template.h +432 -0
  153. data/ext/pg_query/include/lib/stringinfo.h +1 -1
  154. data/ext/pg_query/include/libpq/auth.h +6 -4
  155. data/ext/pg_query/include/libpq/crypt.h +5 -4
  156. data/ext/pg_query/include/libpq/hba.h +43 -4
  157. data/ext/pg_query/include/libpq/libpq-be.h +23 -6
  158. data/ext/pg_query/include/libpq/libpq.h +30 -20
  159. data/ext/pg_query/include/libpq/pqcomm.h +17 -31
  160. data/ext/pg_query/include/libpq/pqformat.h +1 -1
  161. data/ext/pg_query/include/libpq/pqsignal.h +4 -4
  162. data/ext/pg_query/include/mb/pg_wchar.h +105 -23
  163. data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
  164. data/ext/pg_query/include/miscadmin.h +47 -41
  165. data/ext/pg_query/include/nodes/bitmapset.h +1 -1
  166. data/ext/pg_query/include/nodes/execnodes.h +270 -78
  167. data/ext/pg_query/include/nodes/extensible.h +4 -2
  168. data/ext/pg_query/include/nodes/lockoptions.h +1 -1
  169. data/ext/pg_query/include/nodes/makefuncs.h +7 -6
  170. data/ext/pg_query/include/nodes/memnodes.h +5 -3
  171. data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
  172. data/ext/pg_query/include/nodes/nodes.h +30 -11
  173. data/ext/pg_query/include/nodes/params.h +1 -1
  174. data/ext/pg_query/include/nodes/parsenodes.h +322 -90
  175. data/ext/pg_query/include/nodes/pathnodes.h +243 -66
  176. data/ext/pg_query/include/nodes/pg_list.h +75 -69
  177. data/ext/pg_query/include/nodes/plannodes.h +111 -28
  178. data/ext/pg_query/include/nodes/primnodes.h +99 -47
  179. data/ext/pg_query/include/nodes/print.h +1 -1
  180. data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
  181. data/ext/pg_query/include/nodes/value.h +58 -39
  182. data/ext/pg_query/include/optimizer/cost.h +9 -2
  183. data/ext/pg_query/include/optimizer/geqo.h +9 -7
  184. data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
  185. data/ext/pg_query/include/optimizer/optimizer.h +25 -17
  186. data/ext/pg_query/include/optimizer/paths.h +6 -6
  187. data/ext/pg_query/include/optimizer/planmain.h +15 -14
  188. data/ext/pg_query/include/parser/analyze.h +19 -5
  189. data/ext/pg_query/include/parser/gram.h +947 -913
  190. data/ext/pg_query/include/parser/gramparse.h +1 -1
  191. data/ext/pg_query/include/parser/kwlist.h +463 -453
  192. data/ext/pg_query/include/parser/parse_agg.h +2 -7
  193. data/ext/pg_query/include/parser/parse_coerce.h +3 -1
  194. data/ext/pg_query/include/parser/parse_expr.h +2 -3
  195. data/ext/pg_query/include/parser/parse_func.h +2 -1
  196. data/ext/pg_query/include/parser/parse_node.h +21 -9
  197. data/ext/pg_query/include/parser/parse_oper.h +1 -3
  198. data/ext/pg_query/include/parser/parse_relation.h +5 -4
  199. data/ext/pg_query/include/parser/parse_type.h +1 -1
  200. data/ext/pg_query/include/parser/parser.h +31 -4
  201. data/ext/pg_query/include/parser/parsetree.h +1 -1
  202. data/ext/pg_query/include/parser/scanner.h +1 -1
  203. data/ext/pg_query/include/parser/scansup.h +2 -5
  204. data/ext/pg_query/include/partitioning/partdefs.h +1 -1
  205. data/ext/pg_query/include/pg_config.h +83 -41
  206. data/ext/pg_query/include/pg_config_manual.h +74 -21
  207. data/ext/pg_query/include/pg_getopt.h +6 -6
  208. data/ext/pg_query/include/pg_query.h +5 -4
  209. data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
  210. data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
  211. data/ext/pg_query/include/pg_query_fingerprint_defs.c +939 -113
  212. data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
  213. data/ext/pg_query/include/pg_query_outfuncs_defs.c +151 -26
  214. data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
  215. data/ext/pg_query/include/pg_query_readfuncs_defs.c +173 -30
  216. data/ext/pg_query/include/pg_trace.h +1 -1
  217. data/ext/pg_query/include/pgstat.h +449 -1238
  218. data/ext/pg_query/include/pgtime.h +14 -4
  219. data/ext/pg_query/include/pl_gram.h +126 -128
  220. data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
  221. data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
  222. data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
  223. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
  224. data/ext/pg_query/include/plerrcodes.h +9 -1
  225. data/ext/pg_query/include/plpgsql.h +52 -54
  226. data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
  227. data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
  228. data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
  229. data/ext/pg_query/include/port/atomics/fallback.h +1 -1
  230. data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
  231. data/ext/pg_query/include/port/atomics/generic.h +1 -1
  232. data/ext/pg_query/include/port/atomics.h +1 -1
  233. data/ext/pg_query/include/port/pg_bitutils.h +40 -10
  234. data/ext/pg_query/include/port/pg_bswap.h +1 -1
  235. data/ext/pg_query/include/port/pg_crc32c.h +1 -1
  236. data/ext/pg_query/include/port.h +71 -46
  237. data/ext/pg_query/include/portability/instr_time.h +1 -1
  238. data/ext/pg_query/include/postgres.h +60 -16
  239. data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
  240. data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
  241. data/ext/pg_query/include/postmaster/bgworker.h +2 -1
  242. data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
  243. data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
  244. data/ext/pg_query/include/postmaster/fork_process.h +1 -1
  245. data/ext/pg_query/include/postmaster/interrupt.h +1 -1
  246. data/ext/pg_query/include/postmaster/pgarch.h +42 -8
  247. data/ext/pg_query/include/postmaster/postmaster.h +18 -17
  248. data/ext/pg_query/include/postmaster/startup.h +39 -0
  249. data/ext/pg_query/include/postmaster/syslogger.h +15 -10
  250. data/ext/pg_query/include/postmaster/walwriter.h +3 -3
  251. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1419 -914
  252. data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
  253. data/ext/pg_query/include/regex/regex.h +18 -16
  254. data/ext/pg_query/include/replication/logicallauncher.h +3 -5
  255. data/ext/pg_query/include/replication/logicalproto.h +161 -17
  256. data/ext/pg_query/include/replication/logicalworker.h +1 -1
  257. data/ext/pg_query/include/replication/origin.h +7 -7
  258. data/ext/pg_query/include/replication/reorderbuffer.h +259 -42
  259. data/ext/pg_query/include/replication/slot.h +22 -11
  260. data/ext/pg_query/include/replication/syncrep.h +5 -5
  261. data/ext/pg_query/include/replication/walreceiver.h +145 -13
  262. data/ext/pg_query/include/replication/walsender.h +8 -8
  263. data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
  264. data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
  265. data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
  266. data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
  267. data/ext/pg_query/include/storage/backendid.h +3 -3
  268. data/ext/pg_query/include/storage/block.h +4 -10
  269. data/ext/pg_query/include/storage/buf.h +1 -1
  270. data/ext/pg_query/include/storage/bufmgr.h +19 -14
  271. data/ext/pg_query/include/storage/bufpage.h +6 -8
  272. data/ext/pg_query/include/storage/condition_variable.h +13 -2
  273. data/ext/pg_query/include/storage/dsm.h +4 -1
  274. data/ext/pg_query/include/storage/dsm_impl.h +3 -2
  275. data/ext/pg_query/include/storage/fd.h +33 -3
  276. data/ext/pg_query/include/storage/fileset.h +40 -0
  277. data/ext/pg_query/include/storage/ipc.h +4 -1
  278. data/ext/pg_query/include/storage/item.h +1 -1
  279. data/ext/pg_query/include/storage/itemid.h +1 -1
  280. data/ext/pg_query/include/storage/itemptr.h +3 -1
  281. data/ext/pg_query/include/storage/large_object.h +2 -2
  282. data/ext/pg_query/include/storage/latch.h +9 -13
  283. data/ext/pg_query/include/storage/lmgr.h +2 -1
  284. data/ext/pg_query/include/storage/lock.h +11 -8
  285. data/ext/pg_query/include/storage/lockdefs.h +2 -2
  286. data/ext/pg_query/include/storage/lwlock.h +5 -32
  287. data/ext/pg_query/include/storage/lwlocknames.h +0 -1
  288. data/ext/pg_query/include/storage/off.h +1 -1
  289. data/ext/pg_query/include/storage/pg_sema.h +1 -1
  290. data/ext/pg_query/include/storage/pg_shmem.h +9 -7
  291. data/ext/pg_query/include/storage/pmsignal.h +15 -4
  292. data/ext/pg_query/include/storage/predicate.h +4 -4
  293. data/ext/pg_query/include/storage/proc.h +173 -59
  294. data/ext/pg_query/include/storage/procarray.h +98 -0
  295. data/ext/pg_query/include/storage/proclist_types.h +1 -1
  296. data/ext/pg_query/include/storage/procsignal.h +3 -7
  297. data/ext/pg_query/include/storage/relfilenode.h +1 -1
  298. data/ext/pg_query/include/storage/s_lock.h +60 -21
  299. data/ext/pg_query/include/storage/sharedfileset.h +3 -11
  300. data/ext/pg_query/include/storage/shm_mq.h +5 -4
  301. data/ext/pg_query/include/storage/shm_toc.h +1 -1
  302. data/ext/pg_query/include/storage/shmem.h +1 -1
  303. data/ext/pg_query/include/storage/sinval.h +3 -3
  304. data/ext/pg_query/include/storage/sinvaladt.h +1 -1
  305. data/ext/pg_query/include/storage/smgr.h +10 -8
  306. data/ext/pg_query/include/storage/spin.h +2 -2
  307. data/ext/pg_query/include/storage/standby.h +13 -6
  308. data/ext/pg_query/include/storage/standbydefs.h +2 -2
  309. data/ext/pg_query/include/storage/sync.h +7 -3
  310. data/ext/pg_query/include/tcop/cmdtag.h +1 -1
  311. data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
  312. data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
  313. data/ext/pg_query/include/tcop/dest.h +1 -1
  314. data/ext/pg_query/include/tcop/fastpath.h +1 -2
  315. data/ext/pg_query/include/tcop/pquery.h +1 -1
  316. data/ext/pg_query/include/tcop/tcopprot.h +19 -11
  317. data/ext/pg_query/include/tcop/utility.h +7 -3
  318. data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
  319. data/ext/pg_query/include/utils/acl.h +24 -3
  320. data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
  321. data/ext/pg_query/include/utils/array.h +7 -2
  322. data/ext/pg_query/include/utils/backend_progress.h +44 -0
  323. data/ext/pg_query/include/utils/backend_status.h +321 -0
  324. data/ext/pg_query/include/utils/builtins.h +10 -11
  325. data/ext/pg_query/include/utils/bytea.h +3 -2
  326. data/ext/pg_query/include/utils/catcache.h +1 -1
  327. data/ext/pg_query/include/utils/date.h +1 -1
  328. data/ext/pg_query/include/utils/datetime.h +8 -7
  329. data/ext/pg_query/include/utils/datum.h +9 -1
  330. data/ext/pg_query/include/utils/dsa.h +1 -1
  331. data/ext/pg_query/include/utils/dynahash.h +4 -3
  332. data/ext/pg_query/include/utils/elog.h +52 -21
  333. data/ext/pg_query/include/utils/errcodes.h +2 -0
  334. data/ext/pg_query/include/utils/expandeddatum.h +1 -1
  335. data/ext/pg_query/include/utils/expandedrecord.h +1 -1
  336. data/ext/pg_query/include/utils/float.h +7 -7
  337. data/ext/pg_query/include/utils/fmgroids.h +1300 -696
  338. data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
  339. data/ext/pg_query/include/utils/fmgrtab.h +6 -5
  340. data/ext/pg_query/include/utils/guc.h +69 -43
  341. data/ext/pg_query/include/utils/guc_tables.h +23 -19
  342. data/ext/pg_query/include/utils/hsearch.h +15 -11
  343. data/ext/pg_query/include/utils/inval.h +4 -1
  344. data/ext/pg_query/include/utils/lsyscache.h +11 -1
  345. data/ext/pg_query/include/utils/memdebug.h +1 -1
  346. data/ext/pg_query/include/utils/memutils.h +8 -3
  347. data/ext/pg_query/include/utils/numeric.h +19 -5
  348. data/ext/pg_query/include/utils/palloc.h +25 -3
  349. data/ext/pg_query/include/utils/partcache.h +1 -1
  350. data/ext/pg_query/include/utils/pg_locale.h +17 -9
  351. data/ext/pg_query/include/utils/pg_lsn.h +1 -1
  352. data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
  353. data/ext/pg_query/include/utils/pidfile.h +1 -1
  354. data/ext/pg_query/include/utils/plancache.h +6 -5
  355. data/ext/pg_query/include/utils/portal.h +10 -12
  356. data/ext/pg_query/include/utils/ps_status.h +1 -1
  357. data/ext/pg_query/include/utils/queryenvironment.h +1 -1
  358. data/ext/pg_query/include/utils/queryjumble.h +88 -0
  359. data/ext/pg_query/include/utils/regproc.h +14 -3
  360. data/ext/pg_query/include/utils/rel.h +71 -19
  361. data/ext/pg_query/include/utils/relcache.h +8 -5
  362. data/ext/pg_query/include/utils/reltrigger.h +1 -1
  363. data/ext/pg_query/include/utils/resowner.h +1 -1
  364. data/ext/pg_query/include/utils/rls.h +2 -2
  365. data/ext/pg_query/include/utils/ruleutils.h +4 -1
  366. data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
  367. data/ext/pg_query/include/utils/snapmgr.h +34 -14
  368. data/ext/pg_query/include/utils/snapshot.h +14 -1
  369. data/ext/pg_query/include/utils/sortsupport.h +117 -2
  370. data/ext/pg_query/include/utils/syscache.h +6 -1
  371. data/ext/pg_query/include/utils/timeout.h +11 -4
  372. data/ext/pg_query/include/utils/timestamp.h +6 -5
  373. data/ext/pg_query/include/utils/tuplesort.h +25 -11
  374. data/ext/pg_query/include/utils/tuplestore.h +2 -2
  375. data/ext/pg_query/include/utils/typcache.h +24 -17
  376. data/ext/pg_query/include/utils/tzparser.h +1 -1
  377. data/ext/pg_query/include/utils/varlena.h +5 -3
  378. data/ext/pg_query/include/utils/wait_event.h +289 -0
  379. data/ext/pg_query/include/utils/xml.h +4 -4
  380. data/ext/pg_query/pg_query.pb-c.c +4302 -2304
  381. data/ext/pg_query/pg_query_deparse.c +1106 -373
  382. data/ext/pg_query/pg_query_fingerprint.c +30 -10
  383. data/ext/pg_query/pg_query_json_plpgsql.c +0 -25
  384. data/ext/pg_query/pg_query_normalize.c +1 -1
  385. data/ext/pg_query/pg_query_outfuncs_json.c +54 -16
  386. data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
  387. data/ext/pg_query/pg_query_parse.c +1 -1
  388. data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
  389. data/ext/pg_query/pg_query_scan.c +2 -1
  390. data/ext/pg_query/pg_query_split.c +3 -2
  391. data/ext/pg_query/src_backend_catalog_namespace.c +20 -9
  392. data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
  393. data/ext/pg_query/src_backend_commands_define.c +11 -1
  394. data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
  395. data/ext/pg_query/src_backend_nodes_copyfuncs.c +401 -76
  396. data/ext/pg_query/src_backend_nodes_equalfuncs.c +290 -46
  397. data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
  398. data/ext/pg_query/src_backend_nodes_list.c +74 -11
  399. data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
  400. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
  401. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  402. data/ext/pg_query/src_backend_parser_gram.c +33874 -31261
  403. data/ext/pg_query/src_backend_parser_parser.c +26 -7
  404. data/ext/pg_query/src_backend_parser_scan.c +172 -209
  405. data/ext/pg_query/src_backend_parser_scansup.c +4 -28
  406. data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
  407. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  408. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
  409. data/ext/pg_query/src_backend_tcop_postgres.c +62 -23
  410. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  411. data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
  412. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  413. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  414. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +71 -5
  415. data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
  416. data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
  417. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
  418. data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
  419. data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
  420. data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
  421. data/ext/pg_query/src_backend_utils_misc_guc.c +206 -45
  422. data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
  423. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
  424. data/ext/pg_query/src_common_encnames.c +1 -1
  425. data/ext/pg_query/src_common_hashfn.c +3 -3
  426. data/ext/pg_query/src_common_keywords.c +15 -2
  427. data/ext/pg_query/src_common_kwlist_d.h +517 -494
  428. data/ext/pg_query/src_common_kwlookup.c +1 -1
  429. data/ext/pg_query/src_common_pg_prng.c +152 -0
  430. data/ext/pg_query/src_common_psprintf.c +1 -1
  431. data/ext/pg_query/src_common_string.c +7 -1
  432. data/ext/pg_query/src_common_stringinfo.c +1 -1
  433. data/ext/pg_query/src_common_wchar.c +701 -109
  434. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +45 -20
  435. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
  436. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1233 -1259
  437. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  438. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  439. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
  440. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
  441. data/ext/pg_query/src_port_pg_bitutils.c +41 -31
  442. data/ext/pg_query/src_port_pgsleep.c +1 -1
  443. data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
  444. data/ext/pg_query/src_port_qsort.c +12 -224
  445. data/ext/pg_query/src_port_snprintf.c +37 -13
  446. data/ext/pg_query/src_port_strerror.c +9 -19
  447. data/ext/pg_query/src_port_strnlen.c +1 -1
  448. data/lib/pg_query/filter_columns.rb +1 -1
  449. data/lib/pg_query/fingerprint.rb +5 -1
  450. data/lib/pg_query/node.rb +2 -2
  451. data/lib/pg_query/param_refs.rb +1 -1
  452. data/lib/pg_query/parse.rb +20 -8
  453. data/lib/pg_query/pg_query_pb.rb +1108 -942
  454. data/lib/pg_query/treewalker.rb +6 -0
  455. data/lib/pg_query/truncate.rb +1 -1
  456. data/lib/pg_query/version.rb +1 -1
  457. metadata +27 -17
  458. data/ext/pg_query/include/access/xloginsert.h +0 -64
  459. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  460. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  461. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  462. data/ext/pg_query/include/parser/parse_target.h +0 -46
  463. data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -2
  464. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -659
  465. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  466. data/ext/pg_query/src_port_erand48.c +0 -127
  467. data/ext/pg_query/src_port_random.c +0 -31
@@ -27,7 +27,7 @@
27
27
  * always be so; try to be careful to maintain the distinction.)
28
28
  *
29
29
  *
30
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
30
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
31
31
  * Portions Copyright (c) 1994, Regents of the University of California
32
32
  *
33
33
  * src/include/nodes/pg_list.h
@@ -144,26 +144,6 @@ list_second_cell(const List *l)
144
144
  return NULL;
145
145
  }
146
146
 
147
- /* Fetch address of list's third cell, if it has one, else NULL */
148
- static inline ListCell *
149
- list_third_cell(const List *l)
150
- {
151
- if (l && l->length >= 3)
152
- return &l->elements[2];
153
- else
154
- return NULL;
155
- }
156
-
157
- /* Fetch address of list's fourth cell, if it has one, else NULL */
158
- static inline ListCell *
159
- list_fourth_cell(const List *l)
160
- {
161
- if (l && l->length >= 4)
162
- return &l->elements[3];
163
- else
164
- return NULL;
165
- }
166
-
167
147
  /* Fetch list's length */
168
148
  static inline int
169
149
  list_length(const List *l)
@@ -186,35 +166,34 @@ list_length(const List *l)
186
166
  * linitial() than lfirst(): given a List, lsecond() returns the data
187
167
  * in the second list cell.
188
168
  */
189
-
190
169
  #define lfirst(lc) ((lc)->ptr_value)
191
170
  #define lfirst_int(lc) ((lc)->int_value)
192
171
  #define lfirst_oid(lc) ((lc)->oid_value)
193
172
  #define lfirst_node(type,lc) castNode(type, lfirst(lc))
194
173
 
195
- #define linitial(l) lfirst(list_head(l))
196
- #define linitial_int(l) lfirst_int(list_head(l))
197
- #define linitial_oid(l) lfirst_oid(list_head(l))
174
+ #define linitial(l) lfirst(list_nth_cell(l, 0))
175
+ #define linitial_int(l) lfirst_int(list_nth_cell(l, 0))
176
+ #define linitial_oid(l) lfirst_oid(list_nth_cell(l, 0))
198
177
  #define linitial_node(type,l) castNode(type, linitial(l))
199
178
 
200
- #define lsecond(l) lfirst(list_second_cell(l))
201
- #define lsecond_int(l) lfirst_int(list_second_cell(l))
202
- #define lsecond_oid(l) lfirst_oid(list_second_cell(l))
179
+ #define lsecond(l) lfirst(list_nth_cell(l, 1))
180
+ #define lsecond_int(l) lfirst_int(list_nth_cell(l, 1))
181
+ #define lsecond_oid(l) lfirst_oid(list_nth_cell(l, 1))
203
182
  #define lsecond_node(type,l) castNode(type, lsecond(l))
204
183
 
205
- #define lthird(l) lfirst(list_third_cell(l))
206
- #define lthird_int(l) lfirst_int(list_third_cell(l))
207
- #define lthird_oid(l) lfirst_oid(list_third_cell(l))
184
+ #define lthird(l) lfirst(list_nth_cell(l, 2))
185
+ #define lthird_int(l) lfirst_int(list_nth_cell(l, 2))
186
+ #define lthird_oid(l) lfirst_oid(list_nth_cell(l, 2))
208
187
  #define lthird_node(type,l) castNode(type, lthird(l))
209
188
 
210
- #define lfourth(l) lfirst(list_fourth_cell(l))
211
- #define lfourth_int(l) lfirst_int(list_fourth_cell(l))
212
- #define lfourth_oid(l) lfirst_oid(list_fourth_cell(l))
189
+ #define lfourth(l) lfirst(list_nth_cell(l, 3))
190
+ #define lfourth_int(l) lfirst_int(list_nth_cell(l, 3))
191
+ #define lfourth_oid(l) lfirst_oid(list_nth_cell(l, 3))
213
192
  #define lfourth_node(type,l) castNode(type, lfourth(l))
214
193
 
215
- #define llast(l) lfirst(list_tail(l))
216
- #define llast_int(l) lfirst_int(list_tail(l))
217
- #define llast_oid(l) lfirst_oid(list_tail(l))
194
+ #define llast(l) lfirst(list_last_cell(l))
195
+ #define llast_int(l) lfirst_int(list_last_cell(l))
196
+ #define llast_oid(l) lfirst_oid(list_last_cell(l))
218
197
  #define llast_node(type,l) castNode(type, llast(l))
219
198
 
220
199
  /*
@@ -234,6 +213,10 @@ list_length(const List *l)
234
213
  #define list_make4(x1,x2,x3,x4) \
235
214
  list_make4_impl(T_List, list_make_ptr_cell(x1), list_make_ptr_cell(x2), \
236
215
  list_make_ptr_cell(x3), list_make_ptr_cell(x4))
216
+ #define list_make5(x1,x2,x3,x4,x5) \
217
+ list_make5_impl(T_List, list_make_ptr_cell(x1), list_make_ptr_cell(x2), \
218
+ list_make_ptr_cell(x3), list_make_ptr_cell(x4), \
219
+ list_make_ptr_cell(x5))
237
220
 
238
221
  #define list_make1_int(x1) \
239
222
  list_make1_impl(T_IntList, list_make_int_cell(x1))
@@ -245,6 +228,10 @@ list_length(const List *l)
245
228
  #define list_make4_int(x1,x2,x3,x4) \
246
229
  list_make4_impl(T_IntList, list_make_int_cell(x1), list_make_int_cell(x2), \
247
230
  list_make_int_cell(x3), list_make_int_cell(x4))
231
+ #define list_make5_int(x1,x2,x3,x4,x5) \
232
+ list_make5_impl(T_IntList, list_make_int_cell(x1), list_make_int_cell(x2), \
233
+ list_make_int_cell(x3), list_make_int_cell(x4), \
234
+ list_make_int_cell(x5))
248
235
 
249
236
  #define list_make1_oid(x1) \
250
237
  list_make1_impl(T_OidList, list_make_oid_cell(x1))
@@ -256,6 +243,10 @@ list_length(const List *l)
256
243
  #define list_make4_oid(x1,x2,x3,x4) \
257
244
  list_make4_impl(T_OidList, list_make_oid_cell(x1), list_make_oid_cell(x2), \
258
245
  list_make_oid_cell(x3), list_make_oid_cell(x4))
246
+ #define list_make5_oid(x1,x2,x3,x4,x5) \
247
+ list_make5_impl(T_OidList, list_make_oid_cell(x1), list_make_oid_cell(x2), \
248
+ list_make_oid_cell(x3), list_make_oid_cell(x4), \
249
+ list_make_oid_cell(x5))
259
250
 
260
251
  /*
261
252
  * Locate the n'th cell (counting from 0) of the list.
@@ -269,6 +260,16 @@ list_nth_cell(const List *list, int n)
269
260
  return &list->elements[n];
270
261
  }
271
262
 
263
+ /*
264
+ * Return the last cell in a non-NIL List.
265
+ */
266
+ static inline ListCell *
267
+ list_last_cell(const List *list)
268
+ {
269
+ Assert(list != NIL);
270
+ return &list->elements[list->length - 1];
271
+ }
272
+
272
273
  /*
273
274
  * Return the pointer value contained in the n'th element of the
274
275
  * specified list. (List elements begin at 0.)
@@ -531,38 +532,41 @@ extern List *list_make3_impl(NodeTag t, ListCell datum1, ListCell datum2,
531
532
  ListCell datum3);
532
533
  extern List *list_make4_impl(NodeTag t, ListCell datum1, ListCell datum2,
533
534
  ListCell datum3, ListCell datum4);
535
+ extern List *list_make5_impl(NodeTag t, ListCell datum1, ListCell datum2,
536
+ ListCell datum3, ListCell datum4,
537
+ ListCell datum5);
534
538
 
535
- extern List *lappend(List *list, void *datum);
536
- extern List *lappend_int(List *list, int datum);
537
- extern List *lappend_oid(List *list, Oid datum);
539
+ extern pg_nodiscard List *lappend(List *list, void *datum);
540
+ extern pg_nodiscard List *lappend_int(List *list, int datum);
541
+ extern pg_nodiscard List *lappend_oid(List *list, Oid datum);
538
542
 
539
- extern List *list_insert_nth(List *list, int pos, void *datum);
540
- extern List *list_insert_nth_int(List *list, int pos, int datum);
541
- extern List *list_insert_nth_oid(List *list, int pos, Oid datum);
543
+ extern pg_nodiscard List *list_insert_nth(List *list, int pos, void *datum);
544
+ extern pg_nodiscard List *list_insert_nth_int(List *list, int pos, int datum);
545
+ extern pg_nodiscard List *list_insert_nth_oid(List *list, int pos, Oid datum);
542
546
 
543
- extern List *lcons(void *datum, List *list);
544
- extern List *lcons_int(int datum, List *list);
545
- extern List *lcons_oid(Oid datum, List *list);
547
+ extern pg_nodiscard List *lcons(void *datum, List *list);
548
+ extern pg_nodiscard List *lcons_int(int datum, List *list);
549
+ extern pg_nodiscard List *lcons_oid(Oid datum, List *list);
546
550
 
547
- extern List *list_concat(List *list1, const List *list2);
548
- extern List *list_concat_copy(const List *list1, const List *list2);
551
+ extern pg_nodiscard List *list_concat(List *list1, const List *list2);
552
+ extern pg_nodiscard List *list_concat_copy(const List *list1, const List *list2);
549
553
 
550
- extern List *list_truncate(List *list, int new_size);
554
+ extern pg_nodiscard List *list_truncate(List *list, int new_size);
551
555
 
552
556
  extern bool list_member(const List *list, const void *datum);
553
557
  extern bool list_member_ptr(const List *list, const void *datum);
554
558
  extern bool list_member_int(const List *list, int datum);
555
559
  extern bool list_member_oid(const List *list, Oid datum);
556
560
 
557
- extern List *list_delete(List *list, void *datum);
558
- extern List *list_delete_ptr(List *list, void *datum);
559
- extern List *list_delete_int(List *list, int datum);
560
- extern List *list_delete_oid(List *list, Oid datum);
561
- extern List *list_delete_first(List *list);
562
- extern List *list_delete_last(List *list);
563
- extern List *list_delete_first_n(List *list, int n);
564
- extern List *list_delete_nth_cell(List *list, int n);
565
- extern List *list_delete_cell(List *list, ListCell *cell);
561
+ extern pg_nodiscard List *list_delete(List *list, void *datum);
562
+ extern pg_nodiscard List *list_delete_ptr(List *list, void *datum);
563
+ extern pg_nodiscard List *list_delete_int(List *list, int datum);
564
+ extern pg_nodiscard List *list_delete_oid(List *list, Oid datum);
565
+ extern pg_nodiscard List *list_delete_first(List *list);
566
+ extern pg_nodiscard List *list_delete_last(List *list);
567
+ extern pg_nodiscard List *list_delete_first_n(List *list, int n);
568
+ extern pg_nodiscard List *list_delete_nth_cell(List *list, int n);
569
+ extern pg_nodiscard List *list_delete_cell(List *list, ListCell *cell);
566
570
 
567
571
  extern List *list_union(const List *list1, const List *list2);
568
572
  extern List *list_union_ptr(const List *list1, const List *list2);
@@ -579,28 +583,30 @@ extern List *list_difference_ptr(const List *list1, const List *list2);
579
583
  extern List *list_difference_int(const List *list1, const List *list2);
580
584
  extern List *list_difference_oid(const List *list1, const List *list2);
581
585
 
582
- extern List *list_append_unique(List *list, void *datum);
583
- extern List *list_append_unique_ptr(List *list, void *datum);
584
- extern List *list_append_unique_int(List *list, int datum);
585
- extern List *list_append_unique_oid(List *list, Oid datum);
586
+ extern pg_nodiscard List *list_append_unique(List *list, void *datum);
587
+ extern pg_nodiscard List *list_append_unique_ptr(List *list, void *datum);
588
+ extern pg_nodiscard List *list_append_unique_int(List *list, int datum);
589
+ extern pg_nodiscard List *list_append_unique_oid(List *list, Oid datum);
586
590
 
587
- extern List *list_concat_unique(List *list1, const List *list2);
588
- extern List *list_concat_unique_ptr(List *list1, const List *list2);
589
- extern List *list_concat_unique_int(List *list1, const List *list2);
590
- extern List *list_concat_unique_oid(List *list1, const List *list2);
591
+ extern pg_nodiscard List *list_concat_unique(List *list1, const List *list2);
592
+ extern pg_nodiscard List *list_concat_unique_ptr(List *list1, const List *list2);
593
+ extern pg_nodiscard List *list_concat_unique_int(List *list1, const List *list2);
594
+ extern pg_nodiscard List *list_concat_unique_oid(List *list1, const List *list2);
591
595
 
592
596
  extern void list_deduplicate_oid(List *list);
593
597
 
594
598
  extern void list_free(List *list);
595
599
  extern void list_free_deep(List *list);
596
600
 
597
- extern List *list_copy(const List *list);
598
- extern List *list_copy_tail(const List *list, int nskip);
599
- extern List *list_copy_deep(const List *oldlist);
601
+ extern pg_nodiscard List *list_copy(const List *list);
602
+ extern pg_nodiscard List *list_copy_head(const List *oldlist, int len);
603
+ extern pg_nodiscard List *list_copy_tail(const List *list, int nskip);
604
+ extern pg_nodiscard List *list_copy_deep(const List *oldlist);
600
605
 
601
606
  typedef int (*list_sort_comparator) (const ListCell *a, const ListCell *b);
602
607
  extern void list_sort(List *list, list_sort_comparator cmp);
603
608
 
609
+ extern int list_int_cmp(const ListCell *p1, const ListCell *p2);
604
610
  extern int list_oid_cmp(const ListCell *p1, const ListCell *p2);
605
611
 
606
612
  #endif /* PG_LIST_H */
@@ -4,7 +4,7 @@
4
4
  * definitions for query plan nodes
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/nodes/plannodes.h
@@ -19,6 +19,7 @@
19
19
  #include "lib/stringinfo.h"
20
20
  #include "nodes/bitmapset.h"
21
21
  #include "nodes/lockoptions.h"
22
+ #include "nodes/parsenodes.h"
22
23
  #include "nodes/primnodes.h"
23
24
 
24
25
 
@@ -43,7 +44,7 @@ typedef struct PlannedStmt
43
44
  {
44
45
  NodeTag type;
45
46
 
46
- CmdType commandType; /* select|insert|update|delete|utility */
47
+ CmdType commandType; /* select|insert|update|delete|merge|utility */
47
48
 
48
49
  uint64 queryId; /* query identifier (copied from Query) */
49
50
 
@@ -65,15 +66,9 @@ typedef struct PlannedStmt
65
66
 
66
67
  List *rtable; /* list of RangeTblEntry nodes */
67
68
 
68
- /* rtable indexes of target relations for INSERT/UPDATE/DELETE */
69
+ /* rtable indexes of target relations for INSERT/UPDATE/DELETE/MERGE */
69
70
  List *resultRelations; /* integer list of RT indexes, or NIL */
70
71
 
71
- /*
72
- * rtable indexes of partitioned table roots that are UPDATE/DELETE
73
- * targets; needed for trigger firing.
74
- */
75
- List *rootResultRelations;
76
-
77
72
  List *appendRelations; /* list of AppendRelInfo nodes */
78
73
 
79
74
  List *subplans; /* Plan trees for SubPlan expressions; note
@@ -126,7 +121,7 @@ typedef struct Plan
126
121
  /*
127
122
  * planner's estimate of result size of this plan step
128
123
  */
129
- double plan_rows; /* number of rows plan is expected to emit */
124
+ Cardinality plan_rows; /* number of rows plan is expected to emit */
130
125
  int plan_width; /* average row width in bytes */
131
126
 
132
127
  /*
@@ -135,6 +130,11 @@ typedef struct Plan
135
130
  bool parallel_aware; /* engage parallel-aware logic? */
136
131
  bool parallel_safe; /* OK to use as part of parallel plan? */
137
132
 
133
+ /*
134
+ * information needed for asynchronous execution
135
+ */
136
+ bool async_capable; /* engage asynchronous-capable logic? */
137
+
138
138
  /*
139
139
  * Common structural data for all Plan types.
140
140
  */
@@ -202,31 +202,29 @@ typedef struct ProjectSet
202
202
 
203
203
  /* ----------------
204
204
  * ModifyTable node -
205
- * Apply rows produced by subplan(s) to result table(s),
205
+ * Apply rows produced by outer plan to result table(s),
206
206
  * by inserting, updating, or deleting.
207
207
  *
208
208
  * If the originally named target table is a partitioned table, both
209
209
  * nominalRelation and rootRelation contain the RT index of the partition
210
210
  * root, which is not otherwise mentioned in the plan. Otherwise rootRelation
211
211
  * is zero. However, nominalRelation will always be set, as it's the rel that
212
- * EXPLAIN should claim is the INSERT/UPDATE/DELETE target.
212
+ * EXPLAIN should claim is the INSERT/UPDATE/DELETE/MERGE target.
213
213
  *
214
214
  * Note that rowMarks and epqParam are presumed to be valid for all the
215
- * subplan(s); they can't contain any info that varies across subplans.
215
+ * table(s); they can't contain any info that varies across tables.
216
216
  * ----------------
217
217
  */
218
218
  typedef struct ModifyTable
219
219
  {
220
220
  Plan plan;
221
- CmdType operation; /* INSERT, UPDATE, or DELETE */
221
+ CmdType operation; /* INSERT, UPDATE, DELETE, or MERGE */
222
222
  bool canSetTag; /* do we set the command tag/es_processed? */
223
223
  Index nominalRelation; /* Parent RT index for use of EXPLAIN */
224
224
  Index rootRelation; /* Root RT index, if target is partitioned */
225
- bool partColsUpdated; /* some part key in hierarchy updated */
225
+ bool partColsUpdated; /* some part key in hierarchy updated? */
226
226
  List *resultRelations; /* integer list of RT indexes */
227
- int resultRelIndex; /* index of first resultRel in plan's list */
228
- int rootResultRelIndex; /* index of the partitioned table root */
229
- List *plans; /* plan(s) producing source data */
227
+ List *updateColnosLists; /* per-target-table update_colnos lists */
230
228
  List *withCheckOptionLists; /* per-target-table WCO lists */
231
229
  List *returningLists; /* per-target-table RETURNING tlists */
232
230
  List *fdwPrivLists; /* per-target-table FDW private data lists */
@@ -235,10 +233,13 @@ typedef struct ModifyTable
235
233
  int epqParam; /* ID of Param for EvalPlanQual re-eval */
236
234
  OnConflictAction onConflictAction; /* ON CONFLICT action */
237
235
  List *arbiterIndexes; /* List of ON CONFLICT arbiter index OIDs */
238
- List *onConflictSet; /* SET for INSERT ON CONFLICT DO UPDATE */
236
+ List *onConflictSet; /* INSERT ON CONFLICT DO UPDATE targetlist */
237
+ List *onConflictCols; /* target column numbers for onConflictSet */
239
238
  Node *onConflictWhere; /* WHERE for ON CONFLICT UPDATE */
240
239
  Index exclRelRTI; /* RTI of the EXCLUDED pseudo relation */
241
240
  List *exclRelTlist; /* tlist of the EXCLUDED pseudo relation */
241
+ List *mergeActionLists; /* per-target-table lists of actions for
242
+ * MERGE */
242
243
  } ModifyTable;
243
244
 
244
245
  struct PartitionPruneInfo; /* forward reference to struct below */
@@ -253,6 +254,7 @@ typedef struct Append
253
254
  Plan plan;
254
255
  Bitmapset *apprelids; /* RTIs of appendrel(s) formed by this node */
255
256
  List *appendplans;
257
+ int nasyncplans; /* # of asynchronous plans */
256
258
 
257
259
  /*
258
260
  * All 'appendplans' preceding this index are non-partial plans. All
@@ -349,7 +351,10 @@ typedef struct Scan
349
351
  * sequential scan node
350
352
  * ----------------
351
353
  */
352
- typedef Scan SeqScan;
354
+ typedef struct SeqScan
355
+ {
356
+ Scan scan;
357
+ } SeqScan;
353
358
 
354
359
  /* ----------------
355
360
  * table sample scan node
@@ -447,10 +452,10 @@ typedef struct IndexOnlyScan
447
452
  Scan scan;
448
453
  Oid indexid; /* OID of index to scan */
449
454
  List *indexqual; /* list of index quals (usually OpExprs) */
455
+ List *recheckqual; /* index quals in recheckable form */
450
456
  List *indexorderby; /* list of index ORDER BY exprs */
451
457
  List *indextlist; /* TargetEntry list describing index's cols */
452
458
  ScanDirection indexorderdir; /* forward or backward or don't care */
453
- List *recheckqual; /* index quals in recheckable form */
454
459
  } IndexOnlyScan;
455
460
 
456
461
  /* ----------------
@@ -508,6 +513,19 @@ typedef struct TidScan
508
513
  List *tidquals; /* qual(s) involving CTID = something */
509
514
  } TidScan;
510
515
 
516
+ /* ----------------
517
+ * tid range scan node
518
+ *
519
+ * tidrangequals is an implicitly AND'ed list of qual expressions of the form
520
+ * "CTID relop pseudoconstant", where relop is one of >,>=,<,<=.
521
+ * ----------------
522
+ */
523
+ typedef struct TidRangeScan
524
+ {
525
+ Scan scan;
526
+ List *tidrangequals; /* qual(s) involving CTID op something */
527
+ } TidRangeScan;
528
+
511
529
  /* ----------------
512
530
  * subquery scan node
513
531
  *
@@ -518,16 +536,28 @@ typedef struct TidScan
518
536
  * relation, we make this a descendant of Scan anyway for code-sharing
519
537
  * purposes.
520
538
  *
539
+ * SubqueryScanStatus caches the trivial_subqueryscan property of the node.
540
+ * SUBQUERY_SCAN_UNKNOWN means not yet determined. This is only used during
541
+ * planning.
542
+ *
521
543
  * Note: we store the sub-plan in the type-specific subplan field, not in
522
544
  * the generic lefttree field as you might expect. This is because we do
523
545
  * not want plan-tree-traversal routines to recurse into the subplan without
524
546
  * knowing that they are changing Query contexts.
525
547
  * ----------------
526
548
  */
549
+ typedef enum SubqueryScanStatus
550
+ {
551
+ SUBQUERY_SCAN_UNKNOWN,
552
+ SUBQUERY_SCAN_TRIVIAL,
553
+ SUBQUERY_SCAN_NONTRIVIAL
554
+ } SubqueryScanStatus;
555
+
527
556
  typedef struct SubqueryScan
528
557
  {
529
558
  Scan scan;
530
559
  Plan *subplan;
560
+ SubqueryScanStatus scanstatus;
531
561
  } SubqueryScan;
532
562
 
533
563
  /* ----------------
@@ -622,12 +652,20 @@ typedef struct WorkTableScan
622
652
  * When the plan node represents a foreign join, scan.scanrelid is zero and
623
653
  * fs_relids must be consulted to identify the join relation. (fs_relids
624
654
  * is valid for simple scans as well, but will always match scan.scanrelid.)
655
+ *
656
+ * If the FDW's PlanDirectModify() callback decides to repurpose a ForeignScan
657
+ * node to perform the UPDATE or DELETE operation directly in the remote
658
+ * server, it sets 'operation' and 'resultRelation' to identify the operation
659
+ * type and target relation. Note that these fields are only set if the
660
+ * modification is performed *fully* remotely; otherwise, the modification is
661
+ * driven by a local ModifyTable node and 'operation' is left to CMD_SELECT.
625
662
  * ----------------
626
663
  */
627
664
  typedef struct ForeignScan
628
665
  {
629
666
  Scan scan;
630
667
  CmdType operation; /* SELECT/INSERT/UPDATE/DELETE */
668
+ Index resultRelation; /* direct modification target's RT index */
631
669
  Oid fs_server; /* OID of foreign server */
632
670
  List *fdw_exprs; /* expressions that FDW may evaluate */
633
671
  List *fdw_private; /* private data for FDW */
@@ -775,6 +813,31 @@ typedef struct Material
775
813
  Plan plan;
776
814
  } Material;
777
815
 
816
+ /* ----------------
817
+ * memoize node
818
+ * ----------------
819
+ */
820
+ typedef struct Memoize
821
+ {
822
+ Plan plan;
823
+
824
+ int numKeys; /* size of the two arrays below */
825
+
826
+ Oid *hashOperators; /* hash operators for each key */
827
+ Oid *collations; /* collations for each key */
828
+ List *param_exprs; /* cache keys in the form of exprs containing
829
+ * parameters */
830
+ bool singlerow; /* true if the cache entry should be marked as
831
+ * complete after we store the first tuple in
832
+ * it. */
833
+ bool binary_mode; /* true when cache key should be compared bit
834
+ * by bit, false when using hash equality ops */
835
+ uint32 est_entries; /* The maximum number of entries that the
836
+ * planner expects will fit in the cache, or 0
837
+ * if unknown */
838
+ Bitmapset *keyparamids; /* paramids from param_exprs */
839
+ } Memoize;
840
+
778
841
  /* ----------------
779
842
  * sort node
780
843
  * ----------------
@@ -864,12 +927,16 @@ typedef struct WindowAgg
864
927
  int frameOptions; /* frame_clause options, see WindowDef */
865
928
  Node *startOffset; /* expression for starting bound, if any */
866
929
  Node *endOffset; /* expression for ending bound, if any */
930
+ List *runCondition; /* qual to help short-circuit execution */
931
+ List *runConditionOrig; /* runCondition for display in EXPLAIN */
867
932
  /* these fields are used with RANGE offset PRECEDING/FOLLOWING: */
868
933
  Oid startInRangeFunc; /* in_range function for startOffset */
869
934
  Oid endInRangeFunc; /* in_range function for endOffset */
870
935
  Oid inRangeColl; /* collation for in_range tests */
871
936
  bool inRangeAsc; /* use ASC sort order for in_range tests? */
872
937
  bool inRangeNullsFirst; /* nulls sort first for in_range tests? */
938
+ bool topWindow; /* false for all apart from the WindowAgg
939
+ * that's closest to the root of the plan */
873
940
  } WindowAgg;
874
941
 
875
942
  /* ----------------
@@ -947,7 +1014,7 @@ typedef struct Hash
947
1014
  AttrNumber skewColumn; /* outer join key's column #, or zero */
948
1015
  bool skewInherit; /* is outer join rel an inheritance tree? */
949
1016
  /* all other info is in the parent HashJoin node */
950
- double rows_total; /* estimate total rows if parallel_aware */
1017
+ Cardinality rows_total; /* estimate total rows if parallel_aware */
951
1018
  } Hash;
952
1019
 
953
1020
  /* ----------------
@@ -1060,9 +1127,9 @@ typedef enum RowMarkType
1060
1127
  * When the planner discovers that a relation is the root of an inheritance
1061
1128
  * tree, it sets isParent true, and adds an additional PlanRowMark to the
1062
1129
  * list for each child relation (including the target rel itself in its role
1063
- * as a child). isParent is also set to true for the partitioned child
1064
- * relations, which are not scanned just like the root parent. The child
1065
- * entries have rti == child rel's RT index and prti == parent's RT index,
1130
+ * as a child, if it is not a partitioned table). Any non-leaf partitioned
1131
+ * child relations will also have entries with isParent = true. The child
1132
+ * entries have rti == child rel's RT index and prti == top parent's RT index,
1066
1133
  * and can therefore be recognized as children by the fact that prti != rti.
1067
1134
  * The parent's allMarkTypes field gets the OR of (1<<markType) across all
1068
1135
  * its children (this definition allows children to use different markTypes).
@@ -1083,8 +1150,7 @@ typedef enum RowMarkType
1083
1150
  * means we needn't renumber rowmarkIds when flattening subqueries, which
1084
1151
  * would require finding and renaming the resjunk columns as well.)
1085
1152
  * Note this means that all tables in an inheritance hierarchy share the
1086
- * same resjunk column names. However, in an inherited UPDATE/DELETE the
1087
- * columns could have different physical column numbers in each subplan.
1153
+ * same resjunk column names.
1088
1154
  */
1089
1155
  typedef struct PlanRowMark
1090
1156
  {
@@ -1190,7 +1256,7 @@ typedef struct PartitionPruneStep
1190
1256
  } PartitionPruneStep;
1191
1257
 
1192
1258
  /*
1193
- * PartitionPruneStepOp - Information to prune using a set of mutually AND'd
1259
+ * PartitionPruneStepOp - Information to prune using a set of mutually ANDed
1194
1260
  * OpExpr clauses
1195
1261
  *
1196
1262
  * This contains information extracted from up to partnatts OpExpr clauses,
@@ -1263,4 +1329,21 @@ typedef struct PlanInvalItem
1263
1329
  uint32 hashValue; /* hash value of object's cache lookup key */
1264
1330
  } PlanInvalItem;
1265
1331
 
1332
+ /*
1333
+ * MonotonicFunction
1334
+ *
1335
+ * Allows the planner to track monotonic properties of functions. A function
1336
+ * is monotonically increasing if a subsequent call cannot yield a lower value
1337
+ * than the previous call. A monotonically decreasing function cannot yield a
1338
+ * higher value on subsequent calls, and a function which is both must return
1339
+ * the same value on each call.
1340
+ */
1341
+ typedef enum MonotonicFunction
1342
+ {
1343
+ MONOTONICFUNC_NONE = 0,
1344
+ MONOTONICFUNC_INCREASING = (1 << 0),
1345
+ MONOTONICFUNC_DECREASING = (1 << 1),
1346
+ MONOTONICFUNC_BOTH = MONOTONICFUNC_INCREASING | MONOTONICFUNC_DECREASING
1347
+ } MonotonicFunction;
1348
+
1266
1349
  #endif /* PLANNODES_H */