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
@@ -7,7 +7,7 @@
7
7
  * and join trees.
8
8
  *
9
9
  *
10
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
10
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
11
11
  * Portions Copyright (c) 1994, Regents of the University of California
12
12
  *
13
13
  * src/include/nodes/primnodes.h
@@ -32,7 +32,7 @@
32
32
  * specifies an alias for a range variable; the alias might also
33
33
  * specify renaming of columns within the table.
34
34
  *
35
- * Note: colnames is a list of Value nodes (always strings). In Alias structs
35
+ * Note: colnames is a list of String nodes. In Alias structs
36
36
  * associated with RTEs, there may be entries corresponding to dropped
37
37
  * columns; these are normally empty strings (""). See parsenodes.h for info.
38
38
  */
@@ -76,7 +76,7 @@ typedef struct RangeVar
76
76
  /*
77
77
  * TableFunc - node for a table function, such as XMLTABLE.
78
78
  *
79
- * Entries in the ns_names list are either string Value nodes containing
79
+ * Entries in the ns_names list are either String nodes containing
80
80
  * literal namespace names, or NULL pointers to represent DEFAULT.
81
81
  */
82
82
  typedef struct TableFunc
@@ -158,6 +158,10 @@ typedef struct Expr
158
158
  * than a heap column. (In ForeignScan and CustomScan plan nodes, INDEX_VAR
159
159
  * is abused to signify references to columns of a custom scan tuple type.)
160
160
  *
161
+ * ROWID_VAR is used in the planner to identify nonce variables that carry
162
+ * row identity information during UPDATE/DELETE/MERGE. This value should
163
+ * never be seen outside the planner.
164
+ *
161
165
  * In the parser, varnosyn and varattnosyn are either identical to
162
166
  * varno/varattno, or they specify the column's position in an aliased JOIN
163
167
  * RTE that hides the semantic referent RTE's refname. This is a syntactic
@@ -168,11 +172,12 @@ typedef struct Expr
168
172
  * in the planner and doesn't correspond to any simple relation column may
169
173
  * have varnosyn = varattnosyn = 0.
170
174
  */
171
- #define INNER_VAR 65000 /* reference to inner subplan */
172
- #define OUTER_VAR 65001 /* reference to outer subplan */
173
- #define INDEX_VAR 65002 /* reference to index column */
175
+ #define INNER_VAR (-1) /* reference to inner subplan */
176
+ #define OUTER_VAR (-2) /* reference to outer subplan */
177
+ #define INDEX_VAR (-3) /* reference to index column */
178
+ #define ROWID_VAR (-4) /* row identity column during planning */
174
179
 
175
- #define IS_SPECIAL_VARNO(varno) ((varno) >= INNER_VAR)
180
+ #define IS_SPECIAL_VARNO(varno) ((int) (varno) < 0)
176
181
 
177
182
  /* Symbols for the indexes of the special RTE entries in rules */
178
183
  #define PRS2_OLD_VARNO 1
@@ -181,8 +186,8 @@ typedef struct Expr
181
186
  typedef struct Var
182
187
  {
183
188
  Expr xpr;
184
- Index varno; /* index of this var's relation in the range
185
- * table, or INNER_VAR/OUTER_VAR/INDEX_VAR */
189
+ int varno; /* index of this var's relation in the range
190
+ * table, or INNER_VAR/OUTER_VAR/etc */
186
191
  AttrNumber varattno; /* attribute number of this var, or zero for
187
192
  * all attrs ("whole-row Var") */
188
193
  Oid vartype; /* pg_type OID for the type of this var */
@@ -305,6 +310,12 @@ typedef struct Param
305
310
  * a crosscheck that the Aggrefs match the plan; but note that when aggsplit
306
311
  * indicates a non-final mode, aggtype reflects the transition data type
307
312
  * not the SQL-level output type of the aggregate.
313
+ *
314
+ * aggno and aggtransno are -1 in the parse stage, and are set in planning.
315
+ * Aggregates with the same 'aggno' represent the same aggregate expression,
316
+ * and can share the result. Aggregates with same 'transno' but different
317
+ * 'aggno' can share the same transition state, only the final function needs
318
+ * to be called separately.
308
319
  */
309
320
  typedef struct Aggref
310
321
  {
@@ -326,6 +337,8 @@ typedef struct Aggref
326
337
  char aggkind; /* aggregate kind (see pg_aggregate.h) */
327
338
  Index agglevelsup; /* > 0 if agg belongs to outer query */
328
339
  AggSplit aggsplit; /* expected agg-splitting mode of parent Agg */
340
+ int aggno; /* unique ID within the Agg node */
341
+ int aggtransno; /* unique ID of transition state in the Agg */
329
342
  int location; /* token location, or -1 if unknown */
330
343
  } Aggref;
331
344
 
@@ -382,14 +395,14 @@ typedef struct WindowFunc
382
395
  int location; /* token location, or -1 if unknown */
383
396
  } WindowFunc;
384
397
 
385
- /* ----------------
386
- * SubscriptingRef: describes a subscripting operation over a container
387
- * (array, etc).
398
+ /*
399
+ * SubscriptingRef: describes a subscripting operation over a container
400
+ * (array, etc).
388
401
  *
389
402
  * A SubscriptingRef can describe fetching a single element from a container,
390
- * fetching a part of container (e.g. array slice), storing a single element into
391
- * a container, or storing a slice. The "store" cases work with an
392
- * initial container value and a source value that is inserted into the
403
+ * fetching a part of a container (e.g. an array slice), storing a single
404
+ * element into a container, or storing a slice. The "store" cases work with
405
+ * an initial container value and a source value that is inserted into the
393
406
  * appropriate part of the container; the result of the operation is an
394
407
  * entire new modified container value.
395
408
  *
@@ -402,23 +415,32 @@ typedef struct WindowFunc
402
415
  *
403
416
  * In the slice case, individual expressions in the subscript lists can be
404
417
  * NULL, meaning "substitute the array's current lower or upper bound".
405
- *
406
- * Note: the result datatype is the element type when fetching a single
407
- * element; but it is the array type when doing subarray fetch or either
408
- * type of store.
418
+ * (Non-array containers may or may not support this.)
419
+ *
420
+ * refcontainertype is the actual container type that determines the
421
+ * subscripting semantics. (This will generally be either the exposed type of
422
+ * refexpr, or the base type if that is a domain.) refelemtype is the type of
423
+ * the container's elements; this is saved for the use of the subscripting
424
+ * functions, but is not used by the core code. refrestype, reftypmod, and
425
+ * refcollid describe the type of the SubscriptingRef's result. In a store
426
+ * expression, refrestype will always match refcontainertype; in a fetch,
427
+ * it could be refelemtype for an element fetch, or refcontainertype for a
428
+ * slice fetch, or possibly something else as determined by type-specific
429
+ * subscripting logic. Likewise, reftypmod and refcollid will match the
430
+ * container's properties in a store, but could be different in a fetch.
409
431
  *
410
432
  * Note: for the cases where a container is returned, if refexpr yields a R/W
411
- * expanded container, then the implementation is allowed to modify that object
412
- * in-place and return the same object.)
413
- * ----------------
433
+ * expanded container, then the implementation is allowed to modify that
434
+ * object in-place and return the same object.
414
435
  */
415
436
  typedef struct SubscriptingRef
416
437
  {
417
438
  Expr xpr;
418
439
  Oid refcontainertype; /* type of the container proper */
419
- Oid refelemtype; /* type of the container elements */
420
- int32 reftypmod; /* typmod of the container (and elements too) */
421
- Oid refcollid; /* OID of collation, or InvalidOid if none */
440
+ Oid refelemtype; /* the container type's pg_type.typelem */
441
+ Oid refrestype; /* type of the SubscriptingRef's result */
442
+ int32 reftypmod; /* typmod of the result */
443
+ Oid refcollid; /* collation of result, or InvalidOid if none */
422
444
  List *refupperindexpr; /* expressions that evaluate to upper
423
445
  * container indexes */
424
446
  List *reflowerindexpr; /* expressions that evaluate to lower
@@ -426,7 +448,6 @@ typedef struct SubscriptingRef
426
448
  * container element */
427
449
  Expr *refexpr; /* the expression that evaluates to a
428
450
  * container value */
429
-
430
451
  Expr *refassgnexpr; /* expression for the source value, or NULL if
431
452
  * fetch */
432
453
  } SubscriptingRef;
@@ -441,11 +462,15 @@ typedef enum CoercionContext
441
462
  {
442
463
  COERCION_IMPLICIT, /* coercion in context of expression */
443
464
  COERCION_ASSIGNMENT, /* coercion in context of assignment */
465
+ COERCION_PLPGSQL, /* if no assignment cast, use CoerceViaIO */
444
466
  COERCION_EXPLICIT /* explicit cast operation */
445
467
  } CoercionContext;
446
468
 
447
469
  /*
448
- * CoercionForm - how to display a node that could have come from a cast
470
+ * CoercionForm - how to display a FuncExpr or related node
471
+ *
472
+ * "Coercion" is a bit of a misnomer, since this value records other
473
+ * special syntaxes besides casts, but for now we'll keep this naming.
449
474
  *
450
475
  * NB: equal() ignores CoercionForm fields, therefore this *must* not carry
451
476
  * any semantically significant information. We need that behavior so that
@@ -457,7 +482,8 @@ typedef enum CoercionForm
457
482
  {
458
483
  COERCE_EXPLICIT_CALL, /* display as a function call */
459
484
  COERCE_EXPLICIT_CAST, /* display as an explicit cast */
460
- COERCE_IMPLICIT_CAST /* implicit cast, so hide it */
485
+ COERCE_IMPLICIT_CAST, /* implicit cast, so hide it */
486
+ COERCE_SQL_SYNTAX /* display with SQL-mandated special syntax */
461
487
  } CoercionForm;
462
488
 
463
489
  /*
@@ -552,12 +578,29 @@ typedef OpExpr NullIfExpr;
552
578
  * is almost the same as for the underlying operator, but we need a useOr
553
579
  * flag to remember whether it's ANY or ALL, and we don't have to store
554
580
  * the result type (or the collation) because it must be boolean.
581
+ *
582
+ * A ScalarArrayOpExpr with a valid hashfuncid is evaluated during execution
583
+ * by building a hash table containing the Const values from the RHS arg.
584
+ * This table is probed during expression evaluation. The planner will set
585
+ * hashfuncid to the hash function which must be used to build and probe the
586
+ * hash table. The executor determines if it should use hash-based checks or
587
+ * the more traditional means based on if the hashfuncid is set or not.
588
+ *
589
+ * When performing hashed NOT IN, the negfuncid will also be set to the
590
+ * equality function which the hash table must use to build and probe the hash
591
+ * table. opno and opfuncid will remain set to the <> operator and its
592
+ * corresponding function and won't be used during execution. For
593
+ * non-hashtable based NOT INs, negfuncid will be set to InvalidOid. See
594
+ * convert_saop_to_hashed_saop().
555
595
  */
556
596
  typedef struct ScalarArrayOpExpr
557
597
  {
558
598
  Expr xpr;
559
599
  Oid opno; /* PG_OPERATOR OID of the operator */
560
- Oid opfuncid; /* PG_PROC OID of underlying function */
600
+ Oid opfuncid; /* PG_PROC OID of comparison function */
601
+ Oid hashfuncid; /* PG_PROC OID of hash func or InvalidOid */
602
+ Oid negfuncid; /* PG_PROC OID of negator of opfuncid function
603
+ * or InvalidOid. See above */
561
604
  bool useOr; /* true for ANY, false for ALL */
562
605
  Oid inputcollid; /* OID of collation that operator should use */
563
606
  List *args; /* the scalar and array operands */
@@ -736,6 +779,9 @@ typedef struct SubPlan
736
779
  /*
737
780
  * AlternativeSubPlan - expression node for a choice among SubPlans
738
781
  *
782
+ * This is used only transiently during planning: by the time the plan
783
+ * reaches the executor, all AlternativeSubPlan nodes have been removed.
784
+ *
739
785
  * The subplans are given as a List so that the node definition need not
740
786
  * change if there's ever more than two alternatives. For the moment,
741
787
  * though, there are always exactly two; and the first one is the fast-start
@@ -1006,15 +1052,13 @@ typedef struct ArrayExpr
1006
1052
  * than vice versa.) It is important not to assume that length(args) is
1007
1053
  * the same as the number of columns logically present in the rowtype.
1008
1054
  *
1009
- * colnames provides field names in cases where the names can't easily be
1010
- * obtained otherwise. Names *must* be provided if row_typeid is RECORDOID.
1011
- * If row_typeid identifies a known composite type, colnames can be NIL to
1012
- * indicate the type's cataloged field names apply. Note that colnames can
1013
- * be non-NIL even for a composite type, and typically is when the RowExpr
1014
- * was created by expanding a whole-row Var. This is so that we can retain
1015
- * the column alias names of the RTE that the Var referenced (which would
1016
- * otherwise be very difficult to extract from the parsetree). Like the
1017
- * args list, colnames is one-for-one with physical fields of the rowtype.
1055
+ * colnames provides field names if the ROW() result is of type RECORD.
1056
+ * Names *must* be provided if row_typeid is RECORDOID; but if it is a
1057
+ * named composite type, colnames will be ignored in favor of using the
1058
+ * type's cataloged field names, so colnames should be NIL. Like the
1059
+ * args list, colnames is defined to be one-for-one with physical fields
1060
+ * of the rowtype (although dropped columns shouldn't appear in the
1061
+ * RECORD case, so this fine point is currently moot).
1018
1062
  */
1019
1063
  typedef struct RowExpr
1020
1064
  {
@@ -1169,7 +1213,7 @@ typedef enum XmlExprOp
1169
1213
  IS_DOCUMENT /* xmlval IS DOCUMENT */
1170
1214
  } XmlExprOp;
1171
1215
 
1172
- typedef enum
1216
+ typedef enum XmlOptionType
1173
1217
  {
1174
1218
  XMLOPTION_DOCUMENT,
1175
1219
  XMLOPTION_CONTENT
@@ -1181,7 +1225,7 @@ typedef struct XmlExpr
1181
1225
  XmlExprOp op; /* xml function ID */
1182
1226
  char *name; /* name in xml(NAME foo ...) syntaxes */
1183
1227
  List *named_args; /* non-XML expressions for xml_attributes */
1184
- List *arg_names; /* parallel list of Value strings */
1228
+ List *arg_names; /* parallel list of String values */
1185
1229
  List *args; /* list of expressions */
1186
1230
  XmlOptionType xmloption; /* DOCUMENT or CONTENT */
1187
1231
  Oid type; /* target type/typmod for XMLSERIALIZE */
@@ -1305,6 +1349,7 @@ typedef struct SetToDefault
1305
1349
  * of the target relation being constrained; this aids placing the expression
1306
1350
  * correctly during planning. We can assume however that its "levelsup" is
1307
1351
  * always zero, due to the syntactic constraints on where it can appear.
1352
+ * Also, cvarno will always be a true RT index, never INNER_VAR etc.
1308
1353
  *
1309
1354
  * The referenced cursor can be represented either as a hardwired string
1310
1355
  * or as a reference to a run-time parameter of type REFCURSOR. The latter
@@ -1362,13 +1407,14 @@ typedef struct InferenceElem
1362
1407
  * column for the item; so there may be missing or out-of-order resnos.
1363
1408
  * It is even legal to have duplicated resnos; consider
1364
1409
  * UPDATE table SET arraycol[1] = ..., arraycol[2] = ..., ...
1365
- * The two meanings come together in the executor, because the planner
1366
- * transforms INSERT/UPDATE tlists into a normalized form with exactly
1367
- * one entry for each column of the destination table. Before that's
1368
- * happened, however, it is risky to assume that resno == position.
1369
- * Generally get_tle_by_resno() should be used rather than list_nth()
1370
- * to fetch tlist entries by resno, and only in SELECT should you assume
1371
- * that resno is a unique identifier.
1410
+ * In an INSERT, the rewriter and planner will normalize the tlist by
1411
+ * reordering it into physical column order and filling in default values
1412
+ * for any columns not assigned values by the original query. In an UPDATE,
1413
+ * after the rewriter merges multiple assignments for the same column, the
1414
+ * planner extracts the target-column numbers into a separate "update_colnos"
1415
+ * list, and then renumbers the tlist elements serially. Thus, tlist resnos
1416
+ * match ordinal position in all tlists seen by the executor; but it is wrong
1417
+ * to assume that before planning has happened.
1372
1418
  *
1373
1419
  * resname is required to represent the correct column name in non-resjunk
1374
1420
  * entries of top-level SELECT targetlists, since it will be used as the
@@ -1475,6 +1521,11 @@ typedef struct RangeTblRef
1475
1521
  * alias has a critical impact on semantics, because a join with an alias
1476
1522
  * restricts visibility of the tables/columns inside it.
1477
1523
  *
1524
+ * join_using_alias is an Alias node representing the join correlation
1525
+ * name that SQL:2016 and later allow to be attached to JOIN/USING.
1526
+ * Its column alias list includes only the common column names from USING,
1527
+ * and it does not restrict visibility of the join's input tables.
1528
+ *
1478
1529
  * During parse analysis, an RTE is created for the Join, and its index
1479
1530
  * is filled into rtindex. This RTE is present mainly so that Vars can
1480
1531
  * be created that refer to the outputs of the join. The planner sometimes
@@ -1490,6 +1541,7 @@ typedef struct JoinExpr
1490
1541
  Node *larg; /* left subtree */
1491
1542
  Node *rarg; /* right subtree */
1492
1543
  List *usingClause; /* USING clause, if any (list of String) */
1544
+ Alias *join_using_alias; /* alias attached to USING clause, if any */
1493
1545
  Node *quals; /* qualifiers on join, if any */
1494
1546
  Alias *alias; /* user-written alias clause, if any */
1495
1547
  int rtindex; /* RT index assigned for join, or 0 */
@@ -4,7 +4,7 @@
4
4
  * definitions for nodes/print.c
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/nodes/print.h
@@ -13,7 +13,7 @@
13
13
  * fact that a particular page needs to be visited.
14
14
  *
15
15
  *
16
- * Copyright (c) 2003-2020, PostgreSQL Global Development Group
16
+ * Copyright (c) 2003-2022, PostgreSQL Global Development Group
17
17
  *
18
18
  * src/include/nodes/tidbitmap.h
19
19
  *
@@ -1,10 +1,10 @@
1
1
  /*-------------------------------------------------------------------------
2
2
  *
3
3
  * value.h
4
- * interface for Value nodes
4
+ * interface for value nodes
5
5
  *
6
6
  *
7
- * Copyright (c) 2003-2020, PostgreSQL Global Development Group
7
+ * Copyright (c) 2003-2022, PostgreSQL Global Development Group
8
8
  *
9
9
  * src/include/nodes/value.h
10
10
  *
@@ -16,46 +16,65 @@
16
16
 
17
17
  #include "nodes/nodes.h"
18
18
 
19
- /*----------------------
20
- * Value node
19
+ /*
20
+ * The node types Integer, Float, String, and BitString are used to represent
21
+ * literals in the lexer and are also used to pass constants around in the
22
+ * parser. One difference between these node types and, say, a plain int or
23
+ * char * is that the nodes can be put into a List.
21
24
  *
22
- * The same Value struct is used for five node types: T_Integer,
23
- * T_Float, T_String, T_BitString, T_Null.
24
- *
25
- * Integral values are actually represented by a machine integer,
26
- * but both floats and strings are represented as strings.
27
- * Using T_Float as the node type simply indicates that
28
- * the contents of the string look like a valid numeric literal.
29
- *
30
- * (Before Postgres 7.0, we used a double to represent T_Float,
31
- * but that creates loss-of-precision problems when the value is
32
- * ultimately destined to be converted to NUMERIC. Since Value nodes
33
- * are only used in the parsing process, not for runtime data, it's
34
- * better to use the more general representation.)
35
- *
36
- * Note that an integer-looking string will get lexed as T_Float if
37
- * the value is too large to fit in an 'int'.
25
+ * (There used to be a Value node, which encompassed all these different node types. Hence the name of this file.)
26
+ */
27
+
28
+ typedef struct Integer
29
+ {
30
+ NodeTag type;
31
+ int ival;
32
+ } Integer;
33
+
34
+ /*
35
+ * Float is internally represented as string. Using T_Float as the node type
36
+ * simply indicates that the contents of the string look like a valid numeric
37
+ * literal. The value might end up being converted to NUMERIC, so we can't
38
+ * store it internally as a C double, since that could lose precision. Since
39
+ * these nodes are generally only used in the parsing process, not for runtime
40
+ * data, it's better to use the more general representation.
38
41
  *
39
- * Nulls, of course, don't need the value part at all.
40
- *----------------------
42
+ * Note that an integer-looking string will get lexed as T_Float if the value
43
+ * is too large to fit in an 'int'.
41
44
  */
42
- typedef struct Value
45
+ typedef struct Float
43
46
  {
44
- NodeTag type; /* tag appropriately (eg. T_String) */
45
- union ValUnion
46
- {
47
- int ival; /* machine integer */
48
- char *str; /* string */
49
- } val;
50
- } Value;
51
-
52
- #define intVal(v) (((Value *)(v))->val.ival)
53
- #define floatVal(v) atof(((Value *)(v))->val.str)
54
- #define strVal(v) (((Value *)(v))->val.str)
55
-
56
- extern Value *makeInteger(int i);
57
- extern Value *makeFloat(char *numericStr);
58
- extern Value *makeString(char *str);
59
- extern Value *makeBitString(char *str);
47
+ NodeTag type;
48
+ char *fval;
49
+ } Float;
50
+
51
+ typedef struct Boolean
52
+ {
53
+ NodeTag type;
54
+ bool boolval;
55
+ } Boolean;
56
+
57
+ typedef struct String
58
+ {
59
+ NodeTag type;
60
+ char *sval;
61
+ } String;
62
+
63
+ typedef struct BitString
64
+ {
65
+ NodeTag type;
66
+ char *bsval;
67
+ } BitString;
68
+
69
+ #define intVal(v) (castNode(Integer, v)->ival)
70
+ #define floatVal(v) atof(castNode(Float, v)->fval)
71
+ #define boolVal(v) (castNode(Boolean, v)->boolval)
72
+ #define strVal(v) (castNode(String, v)->sval)
73
+
74
+ extern Integer *makeInteger(int i);
75
+ extern Float *makeFloat(char *numericStr);
76
+ extern Boolean *makeBoolean(bool var);
77
+ extern String *makeString(char *str);
78
+ extern BitString *makeBitString(char *str);
60
79
 
61
80
  #endif /* VALUE_H */
@@ -4,7 +4,7 @@
4
4
  * prototypes for costsize.c and clausesel.c.
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/optimizer/cost.h
@@ -20,7 +20,7 @@
20
20
 
21
21
  /* defaults for costsize.c's Cost parameters */
22
22
  /* NB: cost-estimation code should use the variables, not these constants! */
23
- /* If you change these, update backend/utils/misc/postgresql.sample.conf */
23
+ /* If you change these, update backend/utils/misc/postgresql.conf.sample */
24
24
  #define DEFAULT_SEQ_PAGE_COST 1.0
25
25
  #define DEFAULT_RANDOM_PAGE_COST 4.0
26
26
  #define DEFAULT_CPU_TUPLE_COST 0.01
@@ -29,6 +29,8 @@
29
29
  #define DEFAULT_PARALLEL_TUPLE_COST 0.1
30
30
  #define DEFAULT_PARALLEL_SETUP_COST 1000.0
31
31
 
32
+ /* defaults for non-Cost parameters */
33
+ #define DEFAULT_RECURSIVE_WORKTABLE_FACTOR 10.0
32
34
  #define DEFAULT_EFFECTIVE_CACHE_SIZE 524288 /* measured in pages */
33
35
 
34
36
  typedef enum
@@ -57,6 +59,7 @@ extern PGDLLIMPORT bool enable_incremental_sort;
57
59
  extern PGDLLIMPORT bool enable_hashagg;
58
60
  extern PGDLLIMPORT bool enable_nestloop;
59
61
  extern PGDLLIMPORT bool enable_material;
62
+ extern PGDLLIMPORT bool enable_memoize;
60
63
  extern PGDLLIMPORT bool enable_mergejoin;
61
64
  extern PGDLLIMPORT bool enable_hashjoin;
62
65
  extern PGDLLIMPORT bool enable_gathermerge;
@@ -65,6 +68,7 @@ extern PGDLLIMPORT bool enable_partitionwise_aggregate;
65
68
  extern PGDLLIMPORT bool enable_parallel_append;
66
69
  extern PGDLLIMPORT bool enable_parallel_hash;
67
70
  extern PGDLLIMPORT bool enable_partition_pruning;
71
+ extern PGDLLIMPORT bool enable_async_append;
68
72
  extern PGDLLIMPORT int constraint_exclusion;
69
73
 
70
74
  extern double index_pages_fetched(double tuples_fetched, BlockNumber pages,
@@ -83,6 +87,9 @@ extern void cost_bitmap_or_node(BitmapOrPath *path, PlannerInfo *root);
83
87
  extern void cost_bitmap_tree_node(Path *path, Cost *cost, Selectivity *selec);
84
88
  extern void cost_tidscan(Path *path, PlannerInfo *root,
85
89
  RelOptInfo *baserel, List *tidquals, ParamPathInfo *param_info);
90
+ extern void cost_tidrangescan(Path *path, PlannerInfo *root,
91
+ RelOptInfo *baserel, List *tidrangequals,
92
+ ParamPathInfo *param_info);
86
93
  extern void cost_subqueryscan(SubqueryScanPath *path, PlannerInfo *root,
87
94
  RelOptInfo *baserel, ParamPathInfo *param_info);
88
95
  extern void cost_functionscan(Path *path, PlannerInfo *root,
@@ -3,7 +3,7 @@
3
3
  * geqo.h
4
4
  * prototypes for various files in optimizer/geqo
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/optimizer/geqo.h
@@ -22,6 +22,7 @@
22
22
  #ifndef GEQO_H
23
23
  #define GEQO_H
24
24
 
25
+ #include "common/pg_prng.h"
25
26
  #include "nodes/pathnodes.h"
26
27
  #include "optimizer/geqo_gene.h"
27
28
 
@@ -48,23 +49,24 @@
48
49
  *
49
50
  * If you change these, update backend/utils/misc/postgresql.conf.sample
50
51
  */
51
- extern int Geqo_effort; /* 1 .. 10, knob for adjustment of defaults */
52
+ extern PGDLLIMPORT int Geqo_effort; /* 1 .. 10, knob for adjustment of
53
+ * defaults */
52
54
 
53
55
  #define DEFAULT_GEQO_EFFORT 5
54
56
  #define MIN_GEQO_EFFORT 1
55
57
  #define MAX_GEQO_EFFORT 10
56
58
 
57
- extern int Geqo_pool_size; /* 2 .. inf, or 0 to use default */
59
+ extern PGDLLIMPORT int Geqo_pool_size; /* 2 .. inf, or 0 to use default */
58
60
 
59
- extern int Geqo_generations; /* 1 .. inf, or 0 to use default */
61
+ extern PGDLLIMPORT int Geqo_generations; /* 1 .. inf, or 0 to use default */
60
62
 
61
- extern double Geqo_selection_bias;
63
+ extern PGDLLIMPORT double Geqo_selection_bias;
62
64
 
63
65
  #define DEFAULT_GEQO_SELECTION_BIAS 2.0
64
66
  #define MIN_GEQO_SELECTION_BIAS 1.5
65
67
  #define MAX_GEQO_SELECTION_BIAS 2.0
66
68
 
67
- extern double Geqo_seed; /* 0 .. 1 */
69
+ extern PGDLLIMPORT double Geqo_seed; /* 0 .. 1 */
68
70
 
69
71
 
70
72
  /*
@@ -73,7 +75,7 @@ extern double Geqo_seed; /* 0 .. 1 */
73
75
  typedef struct
74
76
  {
75
77
  List *initial_rels; /* the base relations we are joining */
76
- unsigned short random_state[3]; /* state for pg_erand48() */
78
+ pg_prng_state random_state; /* PRNG state */
77
79
  } GeqoPrivateData;
78
80
 
79
81
 
@@ -3,7 +3,7 @@
3
3
  * geqo_gene.h
4
4
  * genome representation in optimizer/geqo
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/optimizer/geqo_gene.h