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
@@ -0,0 +1,125 @@
1
+ /* generated by src/common/unicode/generate-unicode_east_asian_fw_table.pl, do not edit */
2
+
3
+ static const struct mbinterval east_asian_fw[] = {
4
+ {0x1100, 0x115F},
5
+ {0x231A, 0x231B},
6
+ {0x2329, 0x232A},
7
+ {0x23E9, 0x23EC},
8
+ {0x23F0, 0x23F0},
9
+ {0x23F3, 0x23F3},
10
+ {0x25FD, 0x25FE},
11
+ {0x2614, 0x2615},
12
+ {0x2648, 0x2653},
13
+ {0x267F, 0x267F},
14
+ {0x2693, 0x2693},
15
+ {0x26A1, 0x26A1},
16
+ {0x26AA, 0x26AB},
17
+ {0x26BD, 0x26BE},
18
+ {0x26C4, 0x26C5},
19
+ {0x26CE, 0x26CE},
20
+ {0x26D4, 0x26D4},
21
+ {0x26EA, 0x26EA},
22
+ {0x26F2, 0x26F3},
23
+ {0x26F5, 0x26F5},
24
+ {0x26FA, 0x26FA},
25
+ {0x26FD, 0x26FD},
26
+ {0x2705, 0x2705},
27
+ {0x270A, 0x270B},
28
+ {0x2728, 0x2728},
29
+ {0x274C, 0x274C},
30
+ {0x274E, 0x274E},
31
+ {0x2753, 0x2755},
32
+ {0x2757, 0x2757},
33
+ {0x2795, 0x2797},
34
+ {0x27B0, 0x27B0},
35
+ {0x27BF, 0x27BF},
36
+ {0x2B1B, 0x2B1C},
37
+ {0x2B50, 0x2B50},
38
+ {0x2B55, 0x2B55},
39
+ {0x2E80, 0x2E99},
40
+ {0x2E9B, 0x2EF3},
41
+ {0x2F00, 0x2FD5},
42
+ {0x2FF0, 0x2FFB},
43
+ {0x3000, 0x303E},
44
+ {0x3041, 0x3096},
45
+ {0x3099, 0x30FF},
46
+ {0x3105, 0x312F},
47
+ {0x3131, 0x318E},
48
+ {0x3190, 0x31E3},
49
+ {0x31F0, 0x321E},
50
+ {0x3220, 0x3247},
51
+ {0x3250, 0x4DBF},
52
+ {0x4E00, 0xA48C},
53
+ {0xA490, 0xA4C6},
54
+ {0xA960, 0xA97C},
55
+ {0xAC00, 0xD7A3},
56
+ {0xF900, 0xFAFF},
57
+ {0xFE10, 0xFE19},
58
+ {0xFE30, 0xFE52},
59
+ {0xFE54, 0xFE66},
60
+ {0xFE68, 0xFE6B},
61
+ {0xFF01, 0xFF60},
62
+ {0xFFE0, 0xFFE6},
63
+ {0x16FE0, 0x16FE4},
64
+ {0x16FF0, 0x16FF1},
65
+ {0x17000, 0x187F7},
66
+ {0x18800, 0x18CD5},
67
+ {0x18D00, 0x18D08},
68
+ {0x1AFF0, 0x1AFF3},
69
+ {0x1AFF5, 0x1AFFB},
70
+ {0x1AFFD, 0x1AFFE},
71
+ {0x1B000, 0x1B122},
72
+ {0x1B150, 0x1B152},
73
+ {0x1B164, 0x1B167},
74
+ {0x1B170, 0x1B2FB},
75
+ {0x1F004, 0x1F004},
76
+ {0x1F0CF, 0x1F0CF},
77
+ {0x1F18E, 0x1F18E},
78
+ {0x1F191, 0x1F19A},
79
+ {0x1F200, 0x1F202},
80
+ {0x1F210, 0x1F23B},
81
+ {0x1F240, 0x1F248},
82
+ {0x1F250, 0x1F251},
83
+ {0x1F260, 0x1F265},
84
+ {0x1F300, 0x1F320},
85
+ {0x1F32D, 0x1F335},
86
+ {0x1F337, 0x1F37C},
87
+ {0x1F37E, 0x1F393},
88
+ {0x1F3A0, 0x1F3CA},
89
+ {0x1F3CF, 0x1F3D3},
90
+ {0x1F3E0, 0x1F3F0},
91
+ {0x1F3F4, 0x1F3F4},
92
+ {0x1F3F8, 0x1F43E},
93
+ {0x1F440, 0x1F440},
94
+ {0x1F442, 0x1F4FC},
95
+ {0x1F4FF, 0x1F53D},
96
+ {0x1F54B, 0x1F54E},
97
+ {0x1F550, 0x1F567},
98
+ {0x1F57A, 0x1F57A},
99
+ {0x1F595, 0x1F596},
100
+ {0x1F5A4, 0x1F5A4},
101
+ {0x1F5FB, 0x1F64F},
102
+ {0x1F680, 0x1F6C5},
103
+ {0x1F6CC, 0x1F6CC},
104
+ {0x1F6D0, 0x1F6D2},
105
+ {0x1F6D5, 0x1F6D7},
106
+ {0x1F6DD, 0x1F6DF},
107
+ {0x1F6EB, 0x1F6EC},
108
+ {0x1F6F4, 0x1F6FC},
109
+ {0x1F7E0, 0x1F7EB},
110
+ {0x1F7F0, 0x1F7F0},
111
+ {0x1F90C, 0x1F93A},
112
+ {0x1F93C, 0x1F945},
113
+ {0x1F947, 0x1F9FF},
114
+ {0x1FA70, 0x1FA74},
115
+ {0x1FA78, 0x1FA7C},
116
+ {0x1FA80, 0x1FA86},
117
+ {0x1FA90, 0x1FAAC},
118
+ {0x1FAB0, 0x1FABA},
119
+ {0x1FAC0, 0x1FAC5},
120
+ {0x1FAD0, 0x1FAD9},
121
+ {0x1FAE0, 0x1FAE7},
122
+ {0x1FAF0, 0x1FAF6},
123
+ {0x20000, 0x2FFFD},
124
+ {0x30000, 0x3FFFD},
125
+ };
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Note: this file must be includable in both frontend and backend contexts.
7
7
  *
8
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
8
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
9
9
  * Portions Copyright (c) 1994, Regents of the University of California
10
10
  *
11
11
  * src/include/datatype/timestamp.h
@@ -40,6 +40,10 @@ typedef int64 TimestampTz;
40
40
  typedef int64 TimeOffset;
41
41
  typedef int32 fsec_t; /* fractional seconds (in microseconds) */
42
42
 
43
+
44
+ /*
45
+ * Storage format for type interval.
46
+ */
43
47
  typedef struct
44
48
  {
45
49
  TimeOffset time; /* all time units other than days, months and
@@ -48,6 +52,41 @@ typedef struct
48
52
  int32 month; /* months and years, after time for alignment */
49
53
  } Interval;
50
54
 
55
+ /*
56
+ * Data structure representing a broken-down interval.
57
+ *
58
+ * For historical reasons, this is modeled on struct pg_tm for timestamps.
59
+ * Unlike the situation for timestamps, there's no magic interpretation
60
+ * needed for months or years: they're just zero or not. Note that fields
61
+ * can be negative; however, because of the divisions done while converting
62
+ * from struct Interval, only tm_mday could be INT_MIN. This is important
63
+ * because we may need to negate the values in some code paths.
64
+ */
65
+ struct pg_itm
66
+ {
67
+ int tm_usec;
68
+ int tm_sec;
69
+ int tm_min;
70
+ int64 tm_hour; /* needs to be wide */
71
+ int tm_mday;
72
+ int tm_mon;
73
+ int tm_year;
74
+ };
75
+
76
+ /*
77
+ * Data structure for decoding intervals. We could just use struct pg_itm,
78
+ * but then the requirement for tm_usec to be 64 bits would propagate to
79
+ * places where it's not really needed. Also, omitting the fields that
80
+ * aren't used during decoding seems like a good error-prevention measure.
81
+ */
82
+ struct pg_itm_in
83
+ {
84
+ int64 tm_usec; /* needs to be wide */
85
+ int tm_mday;
86
+ int tm_mon;
87
+ int tm_year;
88
+ };
89
+
51
90
 
52
91
  /* Limits on the "precision" option (typmod) for these data types */
53
92
  #define MAX_TIMESTAMP_PRECISION 6
@@ -5,7 +5,7 @@
5
5
  * and related modules.
6
6
  *
7
7
  *
8
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
8
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
9
9
  * Portions Copyright (c) 1994, Regents of the University of California
10
10
  *
11
11
  * src/include/executor/execdesc.h
@@ -4,7 +4,7 @@
4
4
  * support for the POSTGRES executor module
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/executor/executor.h
@@ -156,9 +156,6 @@ extern void ResetTupleHashTable(TupleHashTable hashtable);
156
156
  */
157
157
  extern JunkFilter *ExecInitJunkFilter(List *targetList,
158
158
  TupleTableSlot *slot);
159
- extern JunkFilter *ExecInitJunkFilterInsertion(List *targetList,
160
- TupleDesc cleanTupType,
161
- TupleTableSlot *slot);
162
159
  extern JunkFilter *ExecInitJunkFilterConversion(List *targetList,
163
160
  TupleDesc cleanTupType,
164
161
  TupleTableSlot *slot);
@@ -166,11 +163,24 @@ extern AttrNumber ExecFindJunkAttribute(JunkFilter *junkfilter,
166
163
  const char *attrName);
167
164
  extern AttrNumber ExecFindJunkAttributeInTlist(List *targetlist,
168
165
  const char *attrName);
169
- extern Datum ExecGetJunkAttribute(TupleTableSlot *slot, AttrNumber attno,
170
- bool *isNull);
171
166
  extern TupleTableSlot *ExecFilterJunk(JunkFilter *junkfilter,
172
167
  TupleTableSlot *slot);
173
168
 
169
+ /*
170
+ * ExecGetJunkAttribute
171
+ *
172
+ * Given a junk filter's input tuple (slot) and a junk attribute's number
173
+ * previously found by ExecFindJunkAttribute, extract & return the value and
174
+ * isNull flag of the attribute.
175
+ */
176
+ #ifndef FRONTEND
177
+ static inline Datum
178
+ ExecGetJunkAttribute(TupleTableSlot *slot, AttrNumber attno, bool *isNull)
179
+ {
180
+ Assert(attno > 0);
181
+ return slot_getattr(slot, attno, isNull);
182
+ }
183
+ #endif
174
184
 
175
185
  /*
176
186
  * prototypes from functions in execMain.c
@@ -193,8 +203,9 @@ extern void InitResultRelInfo(ResultRelInfo *resultRelInfo,
193
203
  Index resultRelationIndex,
194
204
  ResultRelInfo *partition_root_rri,
195
205
  int instrument_options);
196
- extern ResultRelInfo *ExecGetTriggerResultRel(EState *estate, Oid relid);
197
- extern void ExecCleanUpTriggerState(EState *estate);
206
+ extern ResultRelInfo *ExecGetTriggerResultRel(EState *estate, Oid relid,
207
+ ResultRelInfo *rootRelInfo);
208
+ extern List *ExecGetAncestorResultRels(EState *estate, ResultRelInfo *resultRelInfo);
198
209
  extern void ExecConstraints(ResultRelInfo *resultRelInfo,
199
210
  TupleTableSlot *slot, EState *estate);
200
211
  extern bool ExecPartitionCheck(ResultRelInfo *resultRelInfo,
@@ -266,17 +277,25 @@ extern ExprState *ExecBuildGroupingEqual(TupleDesc ldesc, TupleDesc rdesc,
266
277
  const Oid *eqfunctions,
267
278
  const Oid *collations,
268
279
  PlanState *parent);
280
+ extern ExprState *ExecBuildParamSetEqual(TupleDesc desc,
281
+ const TupleTableSlotOps *lops,
282
+ const TupleTableSlotOps *rops,
283
+ const Oid *eqfunctions,
284
+ const Oid *collations,
285
+ const List *param_exprs,
286
+ PlanState *parent);
269
287
  extern ProjectionInfo *ExecBuildProjectionInfo(List *targetList,
270
288
  ExprContext *econtext,
271
289
  TupleTableSlot *slot,
272
290
  PlanState *parent,
273
291
  TupleDesc inputDesc);
274
- extern ProjectionInfo *ExecBuildProjectionInfoExt(List *targetList,
275
- ExprContext *econtext,
276
- TupleTableSlot *slot,
277
- bool assignJunkEntries,
278
- PlanState *parent,
279
- TupleDesc inputDesc);
292
+ extern ProjectionInfo *ExecBuildUpdateProjection(List *targetList,
293
+ bool evalTargetList,
294
+ List *targetColnos,
295
+ TupleDesc relDesc,
296
+ ExprContext *econtext,
297
+ TupleTableSlot *slot,
298
+ PlanState *parent);
280
299
  extern ExprState *ExecPrepareExpr(Expr *node, EState *estate);
281
300
  extern ExprState *ExecPrepareQual(List *qual, EState *estate);
282
301
  extern ExprState *ExecPrepareCheck(List *qual, EState *estate);
@@ -442,7 +461,7 @@ typedef bool (*ExecScanRecheckMtd) (ScanState *node, TupleTableSlot *slot);
442
461
  extern TupleTableSlot *ExecScan(ScanState *node, ExecScanAccessMtd accessMtd,
443
462
  ExecScanRecheckMtd recheckMtd);
444
463
  extern void ExecAssignScanProjectionInfo(ScanState *node);
445
- extern void ExecAssignScanProjectionInfoWithVarno(ScanState *node, Index varno);
464
+ extern void ExecAssignScanProjectionInfoWithVarno(ScanState *node, int varno);
446
465
  extern void ExecScanReScan(ScanState *node);
447
466
 
448
467
  /*
@@ -535,7 +554,7 @@ extern const TupleTableSlotOps *ExecGetResultSlotOps(PlanState *planstate,
535
554
  extern void ExecAssignProjectionInfo(PlanState *planstate,
536
555
  TupleDesc inputDesc);
537
556
  extern void ExecConditionalAssignProjectionInfo(PlanState *planstate,
538
- TupleDesc inputDesc, Index varno);
557
+ TupleDesc inputDesc, int varno);
539
558
  extern void ExecFreeExprContext(PlanState *planstate);
540
559
  extern void ExecAssignScanType(ScanState *scanstate, TupleDesc tupDesc);
541
560
  extern void ExecCreateScanSlotFromOuterPlan(EState *estate,
@@ -547,6 +566,8 @@ extern bool ExecRelationIsTargetRelation(EState *estate, Index scanrelid);
547
566
  extern Relation ExecOpenScanRelation(EState *estate, Index scanrelid, int eflags);
548
567
 
549
568
  extern void ExecInitRangeTable(EState *estate, List *rangeTable);
569
+ extern void ExecCloseRangeTableRelations(EState *estate);
570
+ extern void ExecCloseResultRelations(EState *estate);
550
571
 
551
572
  static inline RangeTblEntry *
552
573
  exec_rt_fetch(Index rti, EState *estate)
@@ -555,6 +576,8 @@ exec_rt_fetch(Index rti, EState *estate)
555
576
  }
556
577
 
557
578
  extern Relation ExecGetRangeTableRelation(EState *estate, Index rti);
579
+ extern void ExecInitResultRelation(EState *estate, ResultRelInfo *resultRelInfo,
580
+ Index rti);
558
581
 
559
582
  extern int executor_errposition(EState *estate, int location);
560
583
 
@@ -576,6 +599,7 @@ extern int ExecCleanTargetListLength(List *targetlist);
576
599
  extern TupleTableSlot *ExecGetTriggerOldSlot(EState *estate, ResultRelInfo *relInfo);
577
600
  extern TupleTableSlot *ExecGetTriggerNewSlot(EState *estate, ResultRelInfo *relInfo);
578
601
  extern TupleTableSlot *ExecGetReturningSlot(EState *estate, ResultRelInfo *relInfo);
602
+ extern TupleConversionMap *ExecGetChildToRootMap(ResultRelInfo *resultRelInfo);
579
603
 
580
604
  extern Bitmapset *ExecGetInsertedCols(ResultRelInfo *relinfo, EState *estate);
581
605
  extern Bitmapset *ExecGetUpdatedCols(ResultRelInfo *relinfo, EState *estate);
@@ -587,10 +611,15 @@ extern Bitmapset *ExecGetAllUpdatedCols(ResultRelInfo *relinfo, EState *estate);
587
611
  */
588
612
  extern void ExecOpenIndices(ResultRelInfo *resultRelInfo, bool speculative);
589
613
  extern void ExecCloseIndices(ResultRelInfo *resultRelInfo);
590
- extern List *ExecInsertIndexTuples(TupleTableSlot *slot, EState *estate, bool noDupErr,
614
+ extern List *ExecInsertIndexTuples(ResultRelInfo *resultRelInfo,
615
+ TupleTableSlot *slot, EState *estate,
616
+ bool update,
617
+ bool noDupErr,
591
618
  bool *specConflict, List *arbiterIndexes);
592
- extern bool ExecCheckIndexConstraints(TupleTableSlot *slot, EState *estate,
593
- ItemPointer conflictTid, List *arbiterIndexes);
619
+ extern bool ExecCheckIndexConstraints(ResultRelInfo *resultRelInfo,
620
+ TupleTableSlot *slot,
621
+ EState *estate, ItemPointer conflictTid,
622
+ List *arbiterIndexes);
594
623
  extern void check_exclusion_constraint(Relation heap, Relation index,
595
624
  IndexInfo *indexInfo,
596
625
  ItemPointer tupleid,
@@ -607,14 +636,28 @@ extern bool RelationFindReplTupleByIndex(Relation rel, Oid idxoid,
607
636
  extern bool RelationFindReplTupleSeq(Relation rel, LockTupleMode lockmode,
608
637
  TupleTableSlot *searchslot, TupleTableSlot *outslot);
609
638
 
610
- extern void ExecSimpleRelationInsert(EState *estate, TupleTableSlot *slot);
611
- extern void ExecSimpleRelationUpdate(EState *estate, EPQState *epqstate,
639
+ extern void ExecSimpleRelationInsert(ResultRelInfo *resultRelInfo,
640
+ EState *estate, TupleTableSlot *slot);
641
+ extern void ExecSimpleRelationUpdate(ResultRelInfo *resultRelInfo,
642
+ EState *estate, EPQState *epqstate,
612
643
  TupleTableSlot *searchslot, TupleTableSlot *slot);
613
- extern void ExecSimpleRelationDelete(EState *estate, EPQState *epqstate,
644
+ extern void ExecSimpleRelationDelete(ResultRelInfo *resultRelInfo,
645
+ EState *estate, EPQState *epqstate,
614
646
  TupleTableSlot *searchslot);
615
647
  extern void CheckCmdReplicaIdentity(Relation rel, CmdType cmd);
616
648
 
617
649
  extern void CheckSubscriptionRelkind(char relkind, const char *nspname,
618
650
  const char *relname);
619
651
 
652
+ /*
653
+ * prototypes from functions in nodeModifyTable.c
654
+ */
655
+ extern TupleTableSlot *ExecGetUpdateNewTuple(ResultRelInfo *relinfo,
656
+ TupleTableSlot *planSlot,
657
+ TupleTableSlot *oldSlot);
658
+ extern ResultRelInfo *ExecLookupResultRelByOid(ModifyTableState *node,
659
+ Oid resultoid,
660
+ bool missing_ok,
661
+ bool update_cache);
662
+
620
663
  #endif /* EXECUTOR_H */
@@ -4,7 +4,7 @@
4
4
  * Declarations for execution of SQL-language functions.
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/executor/functions.h
@@ -17,8 +17,22 @@
17
17
  #include "nodes/execnodes.h"
18
18
  #include "tcop/dest.h"
19
19
 
20
- /* This struct is known only within executor/functions.c */
21
- typedef struct SQLFunctionParseInfo *SQLFunctionParseInfoPtr;
20
+ /*
21
+ * Data structure needed by the parser callback hooks to resolve parameter
22
+ * references during parsing of a SQL function's body. This is separate from
23
+ * SQLFunctionCache since we sometimes do parsing separately from execution.
24
+ */
25
+ typedef struct SQLFunctionParseInfo
26
+ {
27
+ char *fname; /* function's name */
28
+ int nargs; /* number of input arguments */
29
+ Oid *argtypes; /* resolved types of input arguments */
30
+ char **argnames; /* names of input arguments; NULL if none */
31
+ /* Note that argnames[i] can be NULL, if some args are unnamed */
32
+ Oid collation; /* function's input collation, if known */
33
+ } SQLFunctionParseInfo;
34
+
35
+ typedef SQLFunctionParseInfo *SQLFunctionParseInfoPtr;
22
36
 
23
37
  extern Datum fmgr_sql(PG_FUNCTION_ARGS);
24
38
 
@@ -4,7 +4,7 @@
4
4
  * definitions for run-time statistics collection
5
5
  *
6
6
  *
7
- * Copyright (c) 2001-2020, PostgreSQL Global Development Group
7
+ * Copyright (c) 2001-2022, PostgreSQL Global Development Group
8
8
  *
9
9
  * src/include/executor/instrument.h
10
10
  *
@@ -16,26 +16,40 @@
16
16
  #include "portability/instr_time.h"
17
17
 
18
18
 
19
+ /*
20
+ * BufferUsage and WalUsage counters keep being incremented infinitely,
21
+ * i.e., must never be reset to zero, so that we can calculate how much
22
+ * the counters are incremented in an arbitrary period.
23
+ */
19
24
  typedef struct BufferUsage
20
25
  {
21
- long shared_blks_hit; /* # of shared buffer hits */
22
- long shared_blks_read; /* # of shared disk blocks read */
23
- long shared_blks_dirtied; /* # of shared blocks dirtied */
24
- long shared_blks_written; /* # of shared disk blocks written */
25
- long local_blks_hit; /* # of local buffer hits */
26
- long local_blks_read; /* # of local disk blocks read */
27
- long local_blks_dirtied; /* # of shared blocks dirtied */
28
- long local_blks_written; /* # of local disk blocks written */
29
- long temp_blks_read; /* # of temp blocks read */
30
- long temp_blks_written; /* # of temp blocks written */
31
- instr_time blk_read_time; /* time spent reading */
32
- instr_time blk_write_time; /* time spent writing */
26
+ int64 shared_blks_hit; /* # of shared buffer hits */
27
+ int64 shared_blks_read; /* # of shared disk blocks read */
28
+ int64 shared_blks_dirtied; /* # of shared blocks dirtied */
29
+ int64 shared_blks_written; /* # of shared disk blocks written */
30
+ int64 local_blks_hit; /* # of local buffer hits */
31
+ int64 local_blks_read; /* # of local disk blocks read */
32
+ int64 local_blks_dirtied; /* # of local blocks dirtied */
33
+ int64 local_blks_written; /* # of local disk blocks written */
34
+ int64 temp_blks_read; /* # of temp blocks read */
35
+ int64 temp_blks_written; /* # of temp blocks written */
36
+ instr_time blk_read_time; /* time spent reading blocks */
37
+ instr_time blk_write_time; /* time spent writing blocks */
38
+ instr_time temp_blk_read_time; /* time spent reading temp blocks */
39
+ instr_time temp_blk_write_time; /* time spent writing temp blocks */
33
40
  } BufferUsage;
34
41
 
42
+ /*
43
+ * WalUsage tracks only WAL activity like WAL records generation that
44
+ * can be measured per query and is displayed by EXPLAIN command,
45
+ * pg_stat_statements extension, etc. It does not track other WAL activity
46
+ * like WAL writes that it's not worth measuring per query. That's tracked
47
+ * by WAL global statistics counters in WalStats, instead.
48
+ */
35
49
  typedef struct WalUsage
36
50
  {
37
- long wal_records; /* # of WAL records produced */
38
- long wal_fpi; /* # of WAL full page images produced */
51
+ int64 wal_records; /* # of WAL records produced */
52
+ int64 wal_fpi; /* # of WAL full page images produced */
39
53
  uint64 wal_bytes; /* size of WAL records produced */
40
54
  } WalUsage;
41
55
 
@@ -55,6 +69,7 @@ typedef struct Instrumentation
55
69
  bool need_timer; /* true if we need timer data */
56
70
  bool need_bufusage; /* true if we need buffer usage data */
57
71
  bool need_walusage; /* true if we need WAL usage data */
72
+ bool async_mode; /* true if node is in async mode */
58
73
  /* Info about current plan cycle: */
59
74
  bool running; /* true if we've completed first tuple */
60
75
  instr_time starttime; /* start time of current iteration of node */
@@ -84,10 +99,12 @@ typedef struct WorkerInstrumentation
84
99
  extern PGDLLIMPORT BufferUsage pgBufferUsage;
85
100
  extern PGDLLIMPORT WalUsage pgWalUsage;
86
101
 
87
- extern Instrumentation *InstrAlloc(int n, int instrument_options);
102
+ extern Instrumentation *InstrAlloc(int n, int instrument_options,
103
+ bool async_mode);
88
104
  extern void InstrInit(Instrumentation *instr, int instrument_options);
89
105
  extern void InstrStartNode(Instrumentation *instr);
90
106
  extern void InstrStopNode(Instrumentation *instr, double nTuples);
107
+ extern void InstrUpdateTupleCount(Instrumentation *instr, double nTuples);
91
108
  extern void InstrEndLoop(Instrumentation *instr);
92
109
  extern void InstrAggNode(Instrumentation *dst, Instrumentation *add);
93
110
  extern void InstrStartParallelQuery(void);
@@ -3,7 +3,7 @@
3
3
  * spi.h
4
4
  * Server Programming Interface public declarations
5
5
  *
6
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/executor/spi.h
@@ -15,7 +15,7 @@
15
15
 
16
16
  #include "commands/trigger.h"
17
17
  #include "lib/ilist.h"
18
- #include "nodes/parsenodes.h"
18
+ #include "parser/parser.h"
19
19
  #include "utils/portal.h"
20
20
 
21
21
 
@@ -33,6 +33,35 @@ typedef struct SPITupleTable
33
33
  SubTransactionId subid; /* subxact in which tuptable was created */
34
34
  } SPITupleTable;
35
35
 
36
+ /* Optional arguments for SPI_prepare_extended */
37
+ typedef struct SPIPrepareOptions
38
+ {
39
+ ParserSetupHook parserSetup;
40
+ void *parserSetupArg;
41
+ RawParseMode parseMode;
42
+ int cursorOptions;
43
+ } SPIPrepareOptions;
44
+
45
+ /* Optional arguments for SPI_execute[_plan]_extended */
46
+ typedef struct SPIExecuteOptions
47
+ {
48
+ ParamListInfo params;
49
+ bool read_only;
50
+ bool allow_nonatomic;
51
+ bool must_return_tuples;
52
+ uint64 tcount;
53
+ DestReceiver *dest;
54
+ ResourceOwner owner;
55
+ } SPIExecuteOptions;
56
+
57
+ /* Optional arguments for SPI_cursor_parse_open */
58
+ typedef struct SPIParseOpenOptions
59
+ {
60
+ ParamListInfo params;
61
+ int cursorOptions;
62
+ bool read_only;
63
+ } SPIParseOpenOptions;
64
+
36
65
  /* Plans are opaque structs for standard users of SPI */
37
66
  typedef struct _SPI_plan *SPIPlanPtr;
38
67
 
@@ -67,6 +96,7 @@ typedef struct _SPI_plan *SPIPlanPtr;
67
96
  #define SPI_OK_REL_REGISTER 15
68
97
  #define SPI_OK_REL_UNREGISTER 16
69
98
  #define SPI_OK_TD_REGISTER 17
99
+ #define SPI_OK_MERGE 18
70
100
 
71
101
  #define SPI_OPT_NONATOMIC (1 << 0)
72
102
 
@@ -85,8 +115,12 @@ extern int SPI_connect(void);
85
115
  extern int SPI_connect_ext(int options);
86
116
  extern int SPI_finish(void);
87
117
  extern int SPI_execute(const char *src, bool read_only, long tcount);
118
+ extern int SPI_execute_extended(const char *src,
119
+ const SPIExecuteOptions *options);
88
120
  extern int SPI_execute_plan(SPIPlanPtr plan, Datum *Values, const char *Nulls,
89
121
  bool read_only, long tcount);
122
+ extern int SPI_execute_plan_extended(SPIPlanPtr plan,
123
+ const SPIExecuteOptions *options);
90
124
  extern int SPI_execute_plan_with_paramlist(SPIPlanPtr plan,
91
125
  ParamListInfo params,
92
126
  bool read_only, long tcount);
@@ -105,6 +139,8 @@ extern int SPI_execute_with_args(const char *src,
105
139
  extern SPIPlanPtr SPI_prepare(const char *src, int nargs, Oid *argtypes);
106
140
  extern SPIPlanPtr SPI_prepare_cursor(const char *src, int nargs, Oid *argtypes,
107
141
  int cursorOptions);
142
+ extern SPIPlanPtr SPI_prepare_extended(const char *src,
143
+ const SPIPrepareOptions *options);
108
144
  extern SPIPlanPtr SPI_prepare_params(const char *src,
109
145
  ParserSetupHook parserSetup,
110
146
  void *parserSetupArg,
@@ -150,6 +186,9 @@ extern Portal SPI_cursor_open_with_args(const char *name,
150
186
  bool read_only, int cursorOptions);
151
187
  extern Portal SPI_cursor_open_with_paramlist(const char *name, SPIPlanPtr plan,
152
188
  ParamListInfo params, bool read_only);
189
+ extern Portal SPI_cursor_parse_open(const char *name,
190
+ const char *src,
191
+ const SPIParseOpenOptions *options);
153
192
  extern Portal SPI_cursor_find(const char *name);
154
193
  extern void SPI_cursor_fetch(Portal portal, bool forward, long count);
155
194
  extern void SPI_cursor_move(Portal portal, bool forward, long count);
@@ -167,7 +206,6 @@ extern void SPI_commit_and_chain(void);
167
206
  extern void SPI_rollback(void);
168
207
  extern void SPI_rollback_and_chain(void);
169
208
 
170
- extern void SPICleanup(void);
171
209
  extern void AtEOXact_SPI(bool isCommit);
172
210
  extern void AtEOSubXact_SPI(bool isCommit, SubTransactionId mySubid);
173
211
  extern bool SPI_inside_nonatomic_context(void);
@@ -3,7 +3,7 @@
3
3
  * tablefunc.h
4
4
  * interface for TableFunc executor node
5
5
  *
6
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/executor/tablefunc.h
@@ -4,7 +4,7 @@
4
4
  * tuple table support stuff
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/executor/tuptable.h