pg_query 2.1.0 → 4.2.1

Sign up to get free protection for your applications and to get access to all the features.
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