pg_query 2.1.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 (472) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +104 -0
  3. data/README.md +59 -31
  4. data/Rakefile +2 -2
  5. data/ext/pg_query/extconf.rb +8 -2
  6. data/ext/pg_query/include/access/amapi.h +45 -1
  7. data/ext/pg_query/include/access/attmap.h +1 -1
  8. data/ext/pg_query/include/access/attnum.h +2 -2
  9. data/ext/pg_query/include/access/clog.h +4 -2
  10. data/ext/pg_query/include/access/commit_ts.h +6 -9
  11. data/ext/pg_query/include/access/detoast.h +1 -11
  12. data/ext/pg_query/include/access/genam.h +15 -12
  13. data/ext/pg_query/include/access/gin.h +2 -2
  14. data/ext/pg_query/include/access/htup.h +1 -1
  15. data/ext/pg_query/include/access/htup_details.h +75 -87
  16. data/ext/pg_query/include/access/itup.h +7 -1
  17. data/ext/pg_query/include/access/parallel.h +2 -2
  18. data/ext/pg_query/include/access/printtup.h +1 -1
  19. data/ext/pg_query/include/access/relation.h +1 -1
  20. data/ext/pg_query/include/access/relscan.h +17 -2
  21. data/ext/pg_query/include/access/rmgr.h +30 -3
  22. data/ext/pg_query/include/access/rmgrlist.h +23 -23
  23. data/ext/pg_query/include/access/sdir.h +1 -1
  24. data/ext/pg_query/include/access/skey.h +1 -1
  25. data/ext/pg_query/include/access/stratnum.h +4 -2
  26. data/ext/pg_query/include/access/sysattr.h +1 -1
  27. data/ext/pg_query/include/access/table.h +2 -1
  28. data/ext/pg_query/include/access/tableam.h +272 -20
  29. data/ext/pg_query/include/access/toast_compression.h +73 -0
  30. data/ext/pg_query/include/access/transam.h +123 -13
  31. data/ext/pg_query/include/access/tupconvert.h +1 -1
  32. data/ext/pg_query/include/access/tupdesc.h +1 -1
  33. data/ext/pg_query/include/access/tupmacs.h +3 -3
  34. data/ext/pg_query/include/access/twophase.h +5 -1
  35. data/ext/pg_query/include/access/xact.h +79 -19
  36. data/ext/pg_query/include/access/xlog.h +60 -155
  37. data/ext/pg_query/include/access/xlog_internal.h +50 -14
  38. data/ext/pg_query/include/access/xlogdefs.h +8 -16
  39. data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
  40. data/ext/pg_query/include/access/xlogreader.h +148 -32
  41. data/ext/pg_query/include/access/xlogrecord.h +18 -9
  42. data/ext/pg_query/include/access/xlogrecovery.h +157 -0
  43. data/ext/pg_query/include/c.h +101 -44
  44. data/ext/pg_query/include/catalog/catalog.h +3 -1
  45. data/ext/pg_query/include/catalog/catversion.h +2 -2
  46. data/ext/pg_query/include/catalog/dependency.h +10 -16
  47. data/ext/pg_query/include/catalog/genbki.h +83 -5
  48. data/ext/pg_query/include/catalog/index.h +18 -3
  49. data/ext/pg_query/include/catalog/indexing.h +12 -324
  50. data/ext/pg_query/include/catalog/namespace.h +4 -2
  51. data/ext/pg_query/include/catalog/objectaccess.h +70 -2
  52. data/ext/pg_query/include/catalog/objectaddress.h +11 -6
  53. data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
  54. data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
  55. data/ext/pg_query/include/catalog/pg_am.h +4 -1
  56. data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
  57. data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
  58. data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
  59. data/ext/pg_query/include/catalog/pg_authid.h +7 -2
  60. data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
  61. data/ext/pg_query/include/catalog/pg_class.h +45 -15
  62. data/ext/pg_query/include/catalog/pg_class_d.h +31 -2
  63. data/ext/pg_query/include/catalog/pg_collation.h +33 -8
  64. data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
  65. data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
  66. data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
  67. data/ext/pg_query/include/catalog/pg_control.h +5 -5
  68. data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
  69. data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
  70. data/ext/pg_query/include/catalog/pg_depend.h +11 -7
  71. data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
  72. data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
  73. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
  74. data/ext/pg_query/include/catalog/pg_index.h +17 -7
  75. data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
  76. data/ext/pg_query/include/catalog/pg_language.h +10 -5
  77. data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
  78. data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
  79. data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
  80. data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
  81. data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
  82. data/ext/pg_query/include/catalog/pg_operator.h +21 -16
  83. data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
  84. data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
  85. data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
  86. data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
  87. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
  88. data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
  89. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
  90. data/ext/pg_query/include/catalog/pg_proc.h +20 -11
  91. data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
  92. data/ext/pg_query/include/catalog/pg_publication.h +50 -4
  93. data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
  94. data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
  95. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
  96. data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
  97. data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
  98. data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
  99. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
  100. data/ext/pg_query/include/catalog/pg_transform.h +8 -5
  101. data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
  102. data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
  103. data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
  104. data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
  105. data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
  106. data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
  107. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
  108. data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
  109. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
  110. data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
  111. data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
  112. data/ext/pg_query/include/catalog/pg_type.h +56 -24
  113. data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
  114. data/ext/pg_query/include/catalog/storage.h +5 -3
  115. data/ext/pg_query/include/commands/async.h +4 -5
  116. data/ext/pg_query/include/commands/dbcommands.h +2 -1
  117. data/ext/pg_query/include/commands/defrem.h +11 -24
  118. data/ext/pg_query/include/commands/event_trigger.h +2 -2
  119. data/ext/pg_query/include/commands/explain.h +1 -1
  120. data/ext/pg_query/include/commands/prepare.h +1 -1
  121. data/ext/pg_query/include/commands/tablespace.h +3 -1
  122. data/ext/pg_query/include/commands/trigger.h +27 -17
  123. data/ext/pg_query/include/commands/user.h +2 -2
  124. data/ext/pg_query/include/commands/vacuum.h +88 -41
  125. data/ext/pg_query/include/commands/variable.h +1 -1
  126. data/ext/pg_query/include/common/file_perm.h +4 -4
  127. data/ext/pg_query/include/common/hashfn.h +1 -1
  128. data/ext/pg_query/include/common/ip.h +1 -7
  129. data/ext/pg_query/include/common/keywords.h +2 -6
  130. data/ext/pg_query/include/common/kwlookup.h +1 -1
  131. data/ext/pg_query/include/common/pg_prng.h +60 -0
  132. data/ext/pg_query/include/common/relpath.h +2 -2
  133. data/ext/pg_query/include/common/string.h +24 -1
  134. data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
  135. data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
  136. data/ext/pg_query/include/datatype/timestamp.h +40 -1
  137. data/ext/pg_query/include/executor/execdesc.h +1 -1
  138. data/ext/pg_query/include/executor/executor.h +65 -22
  139. data/ext/pg_query/include/executor/functions.h +17 -3
  140. data/ext/pg_query/include/executor/instrument.h +33 -16
  141. data/ext/pg_query/include/executor/spi.h +41 -3
  142. data/ext/pg_query/include/executor/tablefunc.h +1 -1
  143. data/ext/pg_query/include/executor/tuptable.h +1 -1
  144. data/ext/pg_query/include/fmgr.h +13 -7
  145. data/ext/pg_query/include/funcapi.h +16 -4
  146. data/ext/pg_query/include/getaddrinfo.h +1 -1
  147. data/ext/pg_query/include/jit/jit.h +11 -11
  148. data/ext/pg_query/include/kwlist_d.h +517 -494
  149. data/ext/pg_query/include/lib/dshash.h +112 -0
  150. data/ext/pg_query/include/lib/ilist.h +20 -1
  151. data/ext/pg_query/include/lib/pairingheap.h +1 -1
  152. data/ext/pg_query/include/lib/simplehash.h +150 -25
  153. data/ext/pg_query/include/lib/sort_template.h +432 -0
  154. data/ext/pg_query/include/lib/stringinfo.h +1 -1
  155. data/ext/pg_query/include/libpq/auth.h +6 -4
  156. data/ext/pg_query/include/libpq/crypt.h +5 -4
  157. data/ext/pg_query/include/libpq/hba.h +43 -4
  158. data/ext/pg_query/include/libpq/libpq-be.h +23 -6
  159. data/ext/pg_query/include/libpq/libpq.h +31 -20
  160. data/ext/pg_query/include/libpq/pqcomm.h +17 -31
  161. data/ext/pg_query/include/libpq/pqformat.h +1 -1
  162. data/ext/pg_query/include/libpq/pqsignal.h +4 -4
  163. data/ext/pg_query/include/mb/pg_wchar.h +106 -23
  164. data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
  165. data/ext/pg_query/include/miscadmin.h +71 -52
  166. data/ext/pg_query/include/nodes/bitmapset.h +1 -1
  167. data/ext/pg_query/include/nodes/execnodes.h +272 -80
  168. data/ext/pg_query/include/nodes/extensible.h +4 -2
  169. data/ext/pg_query/include/nodes/lockoptions.h +1 -1
  170. data/ext/pg_query/include/nodes/makefuncs.h +7 -6
  171. data/ext/pg_query/include/nodes/memnodes.h +5 -3
  172. data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
  173. data/ext/pg_query/include/nodes/nodes.h +30 -11
  174. data/ext/pg_query/include/nodes/params.h +1 -1
  175. data/ext/pg_query/include/nodes/parsenodes.h +327 -94
  176. data/ext/pg_query/include/nodes/pathnodes.h +245 -67
  177. data/ext/pg_query/include/nodes/pg_list.h +75 -68
  178. data/ext/pg_query/include/nodes/plannodes.h +128 -30
  179. data/ext/pg_query/include/nodes/primnodes.h +99 -47
  180. data/ext/pg_query/include/nodes/print.h +1 -1
  181. data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
  182. data/ext/pg_query/include/nodes/value.h +58 -39
  183. data/ext/pg_query/include/optimizer/cost.h +9 -2
  184. data/ext/pg_query/include/optimizer/geqo.h +9 -7
  185. data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
  186. data/ext/pg_query/include/optimizer/optimizer.h +25 -22
  187. data/ext/pg_query/include/optimizer/paths.h +6 -6
  188. data/ext/pg_query/include/optimizer/planmain.h +15 -14
  189. data/ext/pg_query/include/parser/analyze.h +19 -5
  190. data/ext/pg_query/include/parser/gram.h +947 -913
  191. data/ext/pg_query/include/parser/gramparse.h +1 -1
  192. data/ext/pg_query/include/parser/kwlist.h +463 -453
  193. data/ext/pg_query/include/parser/parse_agg.h +2 -7
  194. data/ext/pg_query/include/parser/parse_coerce.h +4 -1
  195. data/ext/pg_query/include/parser/parse_expr.h +2 -3
  196. data/ext/pg_query/include/parser/parse_func.h +2 -1
  197. data/ext/pg_query/include/parser/parse_node.h +21 -9
  198. data/ext/pg_query/include/parser/parse_oper.h +1 -3
  199. data/ext/pg_query/include/parser/parse_relation.h +5 -4
  200. data/ext/pg_query/include/parser/parse_type.h +1 -1
  201. data/ext/pg_query/include/parser/parser.h +31 -4
  202. data/ext/pg_query/include/parser/parsetree.h +1 -1
  203. data/ext/pg_query/include/parser/scanner.h +1 -1
  204. data/ext/pg_query/include/parser/scansup.h +2 -5
  205. data/ext/pg_query/include/partitioning/partdefs.h +1 -1
  206. data/ext/pg_query/include/pg_config.h +94 -46
  207. data/ext/pg_query/include/pg_config_manual.h +74 -21
  208. data/ext/pg_query/include/pg_getopt.h +6 -6
  209. data/ext/pg_query/include/pg_query.h +5 -4
  210. data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
  211. data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
  212. data/ext/pg_query/include/pg_query_fingerprint_defs.c +1220 -422
  213. data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
  214. data/ext/pg_query/include/pg_query_outfuncs_defs.c +152 -26
  215. data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
  216. data/ext/pg_query/include/pg_query_readfuncs_defs.c +174 -30
  217. data/ext/pg_query/include/pg_trace.h +1 -1
  218. data/ext/pg_query/include/pgstat.h +449 -1237
  219. data/ext/pg_query/include/pgtime.h +14 -4
  220. data/ext/pg_query/include/pl_gram.h +126 -128
  221. data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
  222. data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
  223. data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
  224. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
  225. data/ext/pg_query/include/plerrcodes.h +9 -1
  226. data/ext/pg_query/include/plpgsql.h +52 -54
  227. data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
  228. data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
  229. data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
  230. data/ext/pg_query/include/port/atomics/fallback.h +1 -1
  231. data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
  232. data/ext/pg_query/include/port/atomics/generic.h +1 -1
  233. data/ext/pg_query/include/port/atomics.h +1 -1
  234. data/ext/pg_query/include/port/pg_bitutils.h +88 -12
  235. data/ext/pg_query/include/port/pg_bswap.h +1 -1
  236. data/ext/pg_query/include/port/pg_crc32c.h +1 -1
  237. data/ext/pg_query/include/port.h +72 -43
  238. data/ext/pg_query/include/portability/instr_time.h +1 -1
  239. data/ext/pg_query/include/postgres.h +60 -16
  240. data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
  241. data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
  242. data/ext/pg_query/include/postmaster/bgworker.h +2 -1
  243. data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
  244. data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
  245. data/ext/pg_query/include/postmaster/fork_process.h +1 -1
  246. data/ext/pg_query/include/postmaster/interrupt.h +1 -1
  247. data/ext/pg_query/include/postmaster/pgarch.h +42 -8
  248. data/ext/pg_query/include/postmaster/postmaster.h +18 -17
  249. data/ext/pg_query/include/postmaster/startup.h +39 -0
  250. data/ext/pg_query/include/postmaster/syslogger.h +15 -10
  251. data/ext/pg_query/include/postmaster/walwriter.h +3 -3
  252. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1422 -916
  253. data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
  254. data/ext/pg_query/include/regex/regex.h +18 -16
  255. data/ext/pg_query/include/replication/logicallauncher.h +3 -5
  256. data/ext/pg_query/include/replication/logicalproto.h +161 -17
  257. data/ext/pg_query/include/replication/logicalworker.h +1 -1
  258. data/ext/pg_query/include/replication/origin.h +7 -7
  259. data/ext/pg_query/include/replication/reorderbuffer.h +262 -44
  260. data/ext/pg_query/include/replication/slot.h +23 -12
  261. data/ext/pg_query/include/replication/syncrep.h +5 -5
  262. data/ext/pg_query/include/replication/walreceiver.h +145 -13
  263. data/ext/pg_query/include/replication/walsender.h +8 -8
  264. data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
  265. data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
  266. data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
  267. data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
  268. data/ext/pg_query/include/storage/backendid.h +3 -3
  269. data/ext/pg_query/include/storage/block.h +4 -10
  270. data/ext/pg_query/include/storage/buf.h +1 -1
  271. data/ext/pg_query/include/storage/bufmgr.h +19 -14
  272. data/ext/pg_query/include/storage/bufpage.h +6 -8
  273. data/ext/pg_query/include/storage/condition_variable.h +13 -2
  274. data/ext/pg_query/include/storage/dsm.h +4 -1
  275. data/ext/pg_query/include/storage/dsm_impl.h +3 -2
  276. data/ext/pg_query/include/storage/fd.h +33 -3
  277. data/ext/pg_query/include/storage/fileset.h +40 -0
  278. data/ext/pg_query/include/storage/ipc.h +4 -1
  279. data/ext/pg_query/include/storage/item.h +1 -1
  280. data/ext/pg_query/include/storage/itemid.h +1 -1
  281. data/ext/pg_query/include/storage/itemptr.h +3 -1
  282. data/ext/pg_query/include/storage/large_object.h +2 -2
  283. data/ext/pg_query/include/storage/latch.h +9 -13
  284. data/ext/pg_query/include/storage/lmgr.h +2 -1
  285. data/ext/pg_query/include/storage/lock.h +17 -13
  286. data/ext/pg_query/include/storage/lockdefs.h +2 -2
  287. data/ext/pg_query/include/storage/lwlock.h +6 -32
  288. data/ext/pg_query/include/storage/lwlocknames.h +0 -1
  289. data/ext/pg_query/include/storage/off.h +1 -1
  290. data/ext/pg_query/include/storage/pg_sema.h +1 -1
  291. data/ext/pg_query/include/storage/pg_shmem.h +9 -7
  292. data/ext/pg_query/include/storage/pmsignal.h +15 -4
  293. data/ext/pg_query/include/storage/predicate.h +4 -4
  294. data/ext/pg_query/include/storage/proc.h +183 -55
  295. data/ext/pg_query/include/storage/procarray.h +98 -0
  296. data/ext/pg_query/include/storage/proclist_types.h +1 -1
  297. data/ext/pg_query/include/storage/procsignal.h +3 -7
  298. data/ext/pg_query/include/storage/relfilenode.h +1 -1
  299. data/ext/pg_query/include/storage/s_lock.h +67 -4
  300. data/ext/pg_query/include/storage/sharedfileset.h +3 -11
  301. data/ext/pg_query/include/storage/shm_mq.h +5 -4
  302. data/ext/pg_query/include/storage/shm_toc.h +1 -1
  303. data/ext/pg_query/include/storage/shmem.h +1 -1
  304. data/ext/pg_query/include/storage/sinval.h +3 -3
  305. data/ext/pg_query/include/storage/sinvaladt.h +1 -1
  306. data/ext/pg_query/include/storage/smgr.h +10 -8
  307. data/ext/pg_query/include/storage/spin.h +2 -2
  308. data/ext/pg_query/include/storage/standby.h +13 -6
  309. data/ext/pg_query/include/storage/standbydefs.h +2 -2
  310. data/ext/pg_query/include/storage/sync.h +7 -3
  311. data/ext/pg_query/include/tcop/cmdtag.h +1 -1
  312. data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
  313. data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
  314. data/ext/pg_query/include/tcop/dest.h +1 -1
  315. data/ext/pg_query/include/tcop/fastpath.h +1 -2
  316. data/ext/pg_query/include/tcop/pquery.h +7 -1
  317. data/ext/pg_query/include/tcop/tcopprot.h +19 -11
  318. data/ext/pg_query/include/tcop/utility.h +7 -3
  319. data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
  320. data/ext/pg_query/include/utils/acl.h +24 -3
  321. data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
  322. data/ext/pg_query/include/utils/array.h +7 -2
  323. data/ext/pg_query/include/utils/backend_progress.h +44 -0
  324. data/ext/pg_query/include/utils/backend_status.h +321 -0
  325. data/ext/pg_query/include/utils/builtins.h +11 -11
  326. data/ext/pg_query/include/utils/bytea.h +3 -2
  327. data/ext/pg_query/include/utils/catcache.h +1 -1
  328. data/ext/pg_query/include/utils/date.h +1 -1
  329. data/ext/pg_query/include/utils/datetime.h +8 -7
  330. data/ext/pg_query/include/utils/datum.h +9 -1
  331. data/ext/pg_query/include/utils/dsa.h +1 -1
  332. data/ext/pg_query/include/utils/dynahash.h +4 -3
  333. data/ext/pg_query/include/utils/elog.h +52 -21
  334. data/ext/pg_query/include/utils/errcodes.h +2 -0
  335. data/ext/pg_query/include/utils/expandeddatum.h +1 -1
  336. data/ext/pg_query/include/utils/expandedrecord.h +1 -1
  337. data/ext/pg_query/include/utils/float.h +7 -7
  338. data/ext/pg_query/include/utils/fmgroids.h +1300 -696
  339. data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
  340. data/ext/pg_query/include/utils/fmgrtab.h +6 -5
  341. data/ext/pg_query/include/utils/guc.h +69 -43
  342. data/ext/pg_query/include/utils/guc_tables.h +23 -19
  343. data/ext/pg_query/include/utils/hsearch.h +15 -11
  344. data/ext/pg_query/include/utils/inval.h +5 -1
  345. data/ext/pg_query/include/utils/lsyscache.h +11 -1
  346. data/ext/pg_query/include/utils/memdebug.h +1 -1
  347. data/ext/pg_query/include/utils/memutils.h +8 -3
  348. data/ext/pg_query/include/utils/numeric.h +19 -5
  349. data/ext/pg_query/include/utils/palloc.h +25 -3
  350. data/ext/pg_query/include/utils/partcache.h +1 -1
  351. data/ext/pg_query/include/utils/pg_locale.h +17 -9
  352. data/ext/pg_query/include/utils/pg_lsn.h +1 -1
  353. data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
  354. data/ext/pg_query/include/utils/pidfile.h +1 -1
  355. data/ext/pg_query/include/utils/plancache.h +6 -5
  356. data/ext/pg_query/include/utils/portal.h +12 -1
  357. data/ext/pg_query/include/utils/ps_status.h +1 -1
  358. data/ext/pg_query/include/utils/queryenvironment.h +1 -1
  359. data/ext/pg_query/include/utils/queryjumble.h +88 -0
  360. data/ext/pg_query/include/utils/regproc.h +14 -3
  361. data/ext/pg_query/include/utils/rel.h +71 -20
  362. data/ext/pg_query/include/utils/relcache.h +9 -7
  363. data/ext/pg_query/include/utils/reltrigger.h +1 -1
  364. data/ext/pg_query/include/utils/resowner.h +1 -1
  365. data/ext/pg_query/include/utils/rls.h +2 -2
  366. data/ext/pg_query/include/utils/ruleutils.h +4 -1
  367. data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
  368. data/ext/pg_query/include/utils/snapmgr.h +35 -14
  369. data/ext/pg_query/include/utils/snapshot.h +14 -1
  370. data/ext/pg_query/include/utils/sortsupport.h +117 -2
  371. data/ext/pg_query/include/utils/syscache.h +6 -1
  372. data/ext/pg_query/include/utils/timeout.h +11 -4
  373. data/ext/pg_query/include/utils/timestamp.h +6 -5
  374. data/ext/pg_query/include/utils/tuplesort.h +25 -11
  375. data/ext/pg_query/include/utils/tuplestore.h +2 -2
  376. data/ext/pg_query/include/utils/typcache.h +24 -17
  377. data/ext/pg_query/include/utils/tzparser.h +1 -1
  378. data/ext/pg_query/include/utils/varlena.h +5 -3
  379. data/ext/pg_query/include/utils/wait_event.h +289 -0
  380. data/ext/pg_query/include/utils/xml.h +4 -4
  381. data/ext/pg_query/pg_query.pb-c.c +4318 -2307
  382. data/ext/pg_query/pg_query_deparse.c +1114 -381
  383. data/ext/pg_query/pg_query_fingerprint.c +46 -10
  384. data/ext/pg_query/pg_query_fingerprint.h +3 -1
  385. data/ext/pg_query/pg_query_json_plpgsql.c +55 -12
  386. data/ext/pg_query/pg_query_normalize.c +163 -20
  387. data/ext/pg_query/pg_query_outfuncs.h +1 -0
  388. data/ext/pg_query/pg_query_outfuncs_json.c +65 -16
  389. data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
  390. data/ext/pg_query/pg_query_parse.c +1 -1
  391. data/ext/pg_query/pg_query_parse_plpgsql.c +79 -16
  392. data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
  393. data/ext/pg_query/pg_query_ruby.c +1 -1
  394. data/ext/pg_query/pg_query_scan.c +2 -1
  395. data/ext/pg_query/pg_query_split.c +3 -2
  396. data/ext/pg_query/src_backend_catalog_namespace.c +21 -9
  397. data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
  398. data/ext/pg_query/src_backend_commands_define.c +11 -1
  399. data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
  400. data/ext/pg_query/src_backend_nodes_copyfuncs.c +424 -109
  401. data/ext/pg_query/src_backend_nodes_equalfuncs.c +291 -46
  402. data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
  403. data/ext/pg_query/src_backend_nodes_list.c +86 -11
  404. data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
  405. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
  406. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  407. data/ext/pg_query/src_backend_parser_gram.c +33890 -31262
  408. data/ext/pg_query/src_backend_parser_parser.c +26 -7
  409. data/ext/pg_query/src_backend_parser_scan.c +644 -441
  410. data/ext/pg_query/src_backend_parser_scansup.c +4 -28
  411. data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
  412. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  413. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
  414. data/ext/pg_query/src_backend_tcop_postgres.c +73 -24
  415. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  416. data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
  417. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  418. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  419. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +109 -15
  420. data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
  421. data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
  422. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
  423. data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
  424. data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
  425. data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
  426. data/ext/pg_query/src_backend_utils_misc_guc.c +207 -45
  427. data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
  428. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
  429. data/ext/pg_query/src_common_encnames.c +1 -1
  430. data/ext/pg_query/src_common_hashfn.c +3 -3
  431. data/ext/pg_query/src_common_keywords.c +15 -2
  432. data/ext/pg_query/src_common_kwlist_d.h +517 -494
  433. data/ext/pg_query/src_common_kwlookup.c +1 -1
  434. data/ext/pg_query/src_common_pg_prng.c +152 -0
  435. data/ext/pg_query/src_common_psprintf.c +1 -1
  436. data/ext/pg_query/src_common_string.c +7 -1
  437. data/ext/pg_query/src_common_stringinfo.c +1 -1
  438. data/ext/pg_query/src_common_wchar.c +712 -109
  439. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +49 -22
  440. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
  441. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1235 -1261
  442. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  443. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  444. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
  445. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
  446. data/ext/pg_query/src_port_pg_bitutils.c +41 -52
  447. data/ext/pg_query/src_port_pgsleep.c +1 -1
  448. data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
  449. data/ext/pg_query/src_port_qsort.c +12 -224
  450. data/ext/pg_query/src_port_snprintf.c +46 -20
  451. data/ext/pg_query/src_port_strerror.c +9 -19
  452. data/ext/pg_query/src_port_strnlen.c +1 -1
  453. data/lib/pg_query/deparse.rb +7 -1
  454. data/lib/pg_query/filter_columns.rb +6 -4
  455. data/lib/pg_query/fingerprint.rb +18 -3
  456. data/lib/pg_query/node.rb +2 -2
  457. data/lib/pg_query/param_refs.rb +1 -1
  458. data/lib/pg_query/parse.rb +87 -51
  459. data/lib/pg_query/pg_query_pb.rb +1109 -942
  460. data/lib/pg_query/treewalker.rb +6 -0
  461. data/lib/pg_query/truncate.rb +54 -8
  462. data/lib/pg_query/version.rb +1 -1
  463. metadata +29 -18
  464. data/ext/pg_query/include/access/xloginsert.h +0 -64
  465. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  466. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  467. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  468. data/ext/pg_query/include/parser/parse_target.h +0 -46
  469. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -651
  470. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  471. data/ext/pg_query/src_port_erand48.c +0 -127
  472. data/ext/pg_query/src_port_random.c +0 -31
@@ -25,7 +25,8 @@ static const struct mbinterval combining[] = {
25
25
  {0x0825, 0x0827},
26
26
  {0x0829, 0x082D},
27
27
  {0x0859, 0x085B},
28
- {0x08D3, 0x08E1},
28
+ {0x0898, 0x089F},
29
+ {0x08CA, 0x08E1},
29
30
  {0x08E3, 0x0902},
30
31
  {0x093A, 0x093A},
31
32
  {0x093C, 0x093C},
@@ -59,6 +60,7 @@ static const struct mbinterval combining[] = {
59
60
  {0x0BCD, 0x0BCD},
60
61
  {0x0C00, 0x0C00},
61
62
  {0x0C04, 0x0C04},
63
+ {0x0C3C, 0x0C3C},
62
64
  {0x0C3E, 0x0C40},
63
65
  {0x0C46, 0x0C56},
64
66
  {0x0C62, 0x0C63},
@@ -104,7 +106,7 @@ static const struct mbinterval combining[] = {
104
106
  {0x109D, 0x109D},
105
107
  {0x135D, 0x135F},
106
108
  {0x1712, 0x1714},
107
- {0x1732, 0x1734},
109
+ {0x1732, 0x1733},
108
110
  {0x1752, 0x1753},
109
111
  {0x1772, 0x1773},
110
112
  {0x17B4, 0x17B5},
@@ -113,6 +115,7 @@ static const struct mbinterval combining[] = {
113
115
  {0x17C9, 0x17D3},
114
116
  {0x17DD, 0x17DD},
115
117
  {0x180B, 0x180D},
118
+ {0x180F, 0x180F},
116
119
  {0x1885, 0x1886},
117
120
  {0x18A9, 0x18A9},
118
121
  {0x1920, 0x1922},
@@ -193,4 +196,113 @@ static const struct mbinterval combining[] = {
193
196
  {0xFB1E, 0xFB1E},
194
197
  {0xFE00, 0xFE0F},
195
198
  {0xFE20, 0xFE2F},
199
+ {0x101FD, 0x101FD},
200
+ {0x102E0, 0x102E0},
201
+ {0x10376, 0x1037A},
202
+ {0x10A01, 0x10A0F},
203
+ {0x10A38, 0x10A3F},
204
+ {0x10AE5, 0x10AE6},
205
+ {0x10D24, 0x10D27},
206
+ {0x10EAB, 0x10EAC},
207
+ {0x10F46, 0x10F50},
208
+ {0x10F82, 0x10F85},
209
+ {0x11001, 0x11001},
210
+ {0x11038, 0x11046},
211
+ {0x11070, 0x11070},
212
+ {0x11073, 0x11074},
213
+ {0x1107F, 0x11081},
214
+ {0x110B3, 0x110B6},
215
+ {0x110B9, 0x110BA},
216
+ {0x110C2, 0x110C2},
217
+ {0x11100, 0x11102},
218
+ {0x11127, 0x1112B},
219
+ {0x1112D, 0x11134},
220
+ {0x11173, 0x11173},
221
+ {0x11180, 0x11181},
222
+ {0x111B6, 0x111BE},
223
+ {0x111C9, 0x111CC},
224
+ {0x111CF, 0x111CF},
225
+ {0x1122F, 0x11231},
226
+ {0x11234, 0x11234},
227
+ {0x11236, 0x11237},
228
+ {0x1123E, 0x1123E},
229
+ {0x112DF, 0x112DF},
230
+ {0x112E3, 0x112EA},
231
+ {0x11300, 0x11301},
232
+ {0x1133B, 0x1133C},
233
+ {0x11340, 0x11340},
234
+ {0x11366, 0x11374},
235
+ {0x11438, 0x1143F},
236
+ {0x11442, 0x11444},
237
+ {0x11446, 0x11446},
238
+ {0x1145E, 0x1145E},
239
+ {0x114B3, 0x114B8},
240
+ {0x114BA, 0x114BA},
241
+ {0x114BF, 0x114C0},
242
+ {0x114C2, 0x114C3},
243
+ {0x115B2, 0x115B5},
244
+ {0x115BC, 0x115BD},
245
+ {0x115BF, 0x115C0},
246
+ {0x115DC, 0x115DD},
247
+ {0x11633, 0x1163A},
248
+ {0x1163D, 0x1163D},
249
+ {0x1163F, 0x11640},
250
+ {0x116AB, 0x116AB},
251
+ {0x116AD, 0x116AD},
252
+ {0x116B0, 0x116B5},
253
+ {0x116B7, 0x116B7},
254
+ {0x1171D, 0x1171F},
255
+ {0x11722, 0x11725},
256
+ {0x11727, 0x1172B},
257
+ {0x1182F, 0x11837},
258
+ {0x11839, 0x1183A},
259
+ {0x1193B, 0x1193C},
260
+ {0x1193E, 0x1193E},
261
+ {0x11943, 0x11943},
262
+ {0x119D4, 0x119DB},
263
+ {0x119E0, 0x119E0},
264
+ {0x11A01, 0x11A0A},
265
+ {0x11A33, 0x11A38},
266
+ {0x11A3B, 0x11A3E},
267
+ {0x11A47, 0x11A47},
268
+ {0x11A51, 0x11A56},
269
+ {0x11A59, 0x11A5B},
270
+ {0x11A8A, 0x11A96},
271
+ {0x11A98, 0x11A99},
272
+ {0x11C30, 0x11C3D},
273
+ {0x11C3F, 0x11C3F},
274
+ {0x11C92, 0x11CA7},
275
+ {0x11CAA, 0x11CB0},
276
+ {0x11CB2, 0x11CB3},
277
+ {0x11CB5, 0x11CB6},
278
+ {0x11D31, 0x11D45},
279
+ {0x11D47, 0x11D47},
280
+ {0x11D90, 0x11D91},
281
+ {0x11D95, 0x11D95},
282
+ {0x11D97, 0x11D97},
283
+ {0x11EF3, 0x11EF4},
284
+ {0x16AF0, 0x16AF4},
285
+ {0x16B30, 0x16B36},
286
+ {0x16F4F, 0x16F4F},
287
+ {0x16F8F, 0x16F92},
288
+ {0x16FE4, 0x16FE4},
289
+ {0x1BC9D, 0x1BC9E},
290
+ {0x1CF00, 0x1CF46},
291
+ {0x1D167, 0x1D169},
292
+ {0x1D17B, 0x1D182},
293
+ {0x1D185, 0x1D18B},
294
+ {0x1D1AA, 0x1D1AD},
295
+ {0x1D242, 0x1D244},
296
+ {0x1DA00, 0x1DA36},
297
+ {0x1DA3B, 0x1DA6C},
298
+ {0x1DA75, 0x1DA75},
299
+ {0x1DA84, 0x1DA84},
300
+ {0x1DA9B, 0x1DAAF},
301
+ {0x1E000, 0x1E02A},
302
+ {0x1E130, 0x1E136},
303
+ {0x1E2AE, 0x1E2AE},
304
+ {0x1E2EC, 0x1E2EF},
305
+ {0x1E8D0, 0x1E8D6},
306
+ {0x1E944, 0x1E94A},
307
+ {0xE0100, 0xE01EF},
196
308
  };
@@ -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);