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
@@ -18,7 +18,7 @@
18
18
  * and GetExtensibleNodeMethods to get information about a previously
19
19
  * registered type of extensible node.
20
20
  *
21
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
21
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
22
22
  * Portions Copyright (c) 1994, Regents of the University of California
23
23
  *
24
24
  * IDENTIFICATION
@@ -1,11 +1,11 @@
1
1
  /*--------------------------------------------------------------------
2
2
  * Symbols referenced in this file:
3
- * - lappend
3
+ * - list_make1_impl
4
4
  * - new_list
5
+ * - check_list_invariants
6
+ * - lappend
5
7
  * - new_tail_cell
6
8
  * - enlarge_list
7
- * - check_list_invariants
8
- * - list_make1_impl
9
9
  * - list_make2_impl
10
10
  * - list_concat
11
11
  * - list_copy
@@ -31,7 +31,7 @@
31
31
  * See comments in pg_list.h.
32
32
  *
33
33
  *
34
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
34
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
35
35
  * Portions Copyright (c) 1994, Regents of the University of California
36
36
  *
37
37
  *
@@ -302,6 +302,8 @@ list_make4_impl(NodeTag t, ListCell datum1, ListCell datum2,
302
302
  return list;
303
303
  }
304
304
 
305
+
306
+
305
307
  /*
306
308
  * Make room for a new head cell in the given (non-NIL) list.
307
309
  *
@@ -352,7 +354,7 @@ lappend(List *list, void *datum)
352
354
  else
353
355
  new_tail_cell(list);
354
356
 
355
- lfirst(list_tail(list)) = datum;
357
+ llast(list) = datum;
356
358
  check_list_invariants(list);
357
359
  return list;
358
360
  }
@@ -379,6 +381,9 @@ lappend(List *list, void *datum)
379
381
  /*
380
382
  * Insert the given datum at position 'pos' (measured from 0) in the list.
381
383
  * 'pos' must be valid, ie, 0 <= pos <= list's length.
384
+ *
385
+ * Note that this takes time proportional to the distance to the end of the
386
+ * list, since the following entries must be moved.
382
387
  */
383
388
 
384
389
 
@@ -393,6 +398,9 @@ lappend(List *list, void *datum)
393
398
  * value, rather than continuing to use the pointer passed as the
394
399
  * second argument.
395
400
  *
401
+ * Note that this takes time proportional to the length of the list,
402
+ * since the existing entries must be moved.
403
+ *
396
404
  * Caution: before Postgres 8.0, the original List was unmodified and
397
405
  * could be considered to retain its separate identity. This is no longer
398
406
  * the case.
@@ -407,7 +415,7 @@ lcons(void *datum, List *list)
407
415
  else
408
416
  new_head_cell(list);
409
417
 
410
- lfirst(list_head(list)) = datum;
418
+ linitial(list) = datum;
411
419
  check_list_invariants(list);
412
420
  return list;
413
421
  }
@@ -432,6 +440,10 @@ lcons(void *datum, List *list)
432
440
  * Callers should be sure to use the return value as the new pointer to the
433
441
  * concatenated list: the 'list1' input pointer may or may not be the same
434
442
  * as the returned pointer.
443
+ *
444
+ * Note that this takes at least time proportional to the length of list2.
445
+ * It'd typically be the case that we have to enlarge list1's storage,
446
+ * probably adding time proportional to the length of list1.
435
447
  */
436
448
  List *
437
449
  list_concat(List *list1, const List *list2)
@@ -508,6 +520,8 @@ list_truncate(List *list, int new_size)
508
520
  * Return true iff 'datum' is a member of the list. Equality is
509
521
  * determined via equal(), so callers should ensure that they pass a
510
522
  * Node as 'datum'.
523
+ *
524
+ * This does a simple linear search --- avoid using it on long lists.
511
525
  */
512
526
 
513
527
 
@@ -531,6 +545,9 @@ list_truncate(List *list, int new_size)
531
545
  * Delete the n'th cell (counting from 0) in list.
532
546
  *
533
547
  * The List is pfree'd if this was the last member.
548
+ *
549
+ * Note that this takes time proportional to the distance to the end of the
550
+ * list, since the following entries must be moved.
534
551
  */
535
552
  List *
536
553
  list_delete_nth_cell(List *list, int n)
@@ -602,6 +619,9 @@ list_delete_nth_cell(List *list, int n)
602
619
  *
603
620
  * The List is pfree'd if this was the last member. However, we do not
604
621
  * touch any data the cell might've been pointing to.
622
+ *
623
+ * Note that this takes time proportional to the distance to the end of the
624
+ * list, since the following entries must be moved.
605
625
  */
606
626
  List *
607
627
  list_delete_cell(List *list, ListCell *cell)
@@ -612,6 +632,8 @@ list_delete_cell(List *list, ListCell *cell)
612
632
  /*
613
633
  * Delete the first cell in list that matches datum, if any.
614
634
  * Equality is determined via equal().
635
+ *
636
+ * This does a simple linear search --- avoid using it on long lists.
615
637
  */
616
638
 
617
639
 
@@ -631,17 +653,36 @@ list_delete_cell(List *list, ListCell *cell)
631
653
  * where the intent is to alter the list rather than just traverse it.
632
654
  * Beware that the list is modified, whereas the Lisp-y coding leaves
633
655
  * the original list head intact in case there's another pointer to it.
656
+ *
657
+ * Note that this takes time proportional to the length of the list,
658
+ * since the remaining entries must be moved. Consider reversing the
659
+ * list order so that you can use list_delete_last() instead. However,
660
+ * if that causes you to replace lappend() with lcons(), you haven't
661
+ * improved matters. (In short, you can make an efficient stack from
662
+ * a List, but not an efficient FIFO queue.)
634
663
  */
635
664
 
636
665
 
637
666
  /*
638
667
  * Delete the last element of the list.
639
- *
640
- * This is the opposite of list_delete_first(), but is noticeably cheaper
641
- * with a long list, since no data need be moved.
642
668
  */
643
669
 
644
670
 
671
+ /*
672
+ * Delete the first N cells of the list.
673
+ *
674
+ * The List is pfree'd if the request causes all cells to be deleted.
675
+ *
676
+ * Note that this takes time proportional to the distance to the end of the
677
+ * list, since the following entries must be moved.
678
+ */
679
+ #ifndef DEBUG_LIST_MEMORY_USAGE
680
+ #else
681
+ #ifdef CLOBBER_FREED_MEMORY
682
+ #else
683
+ #endif
684
+ #endif
685
+
645
686
  /*
646
687
  * Generate the union of two lists. This is calculated by copying
647
688
  * list1 via list_copy(), then adding to it all the members of list2
@@ -659,8 +700,10 @@ list_delete_cell(List *list, ListCell *cell)
659
700
  * you probably want to use list_concat_unique() instead to avoid wasting
660
701
  * the storage of the old x list.
661
702
  *
662
- * This function could probably be implemented a lot faster if it is a
663
- * performance bottleneck.
703
+ * Note that this takes time proportional to the product of the list
704
+ * lengths, so beware of using it on long lists. (We could probably
705
+ * improve that, but really you should be using some other data structure
706
+ * if this'd be a performance bottleneck.)
664
707
  */
665
708
 
666
709
 
@@ -692,6 +735,11 @@ list_delete_cell(List *list, ListCell *cell)
692
735
  * This variant works on lists of pointers, and determines list
693
736
  * membership via equal(). Note that the list1 member will be pointed
694
737
  * to in the result.
738
+ *
739
+ * Note that this takes time proportional to the product of the list
740
+ * lengths, so beware of using it on long lists. (We could probably
741
+ * improve that, but really you should be using some other data structure
742
+ * if this'd be a performance bottleneck.)
695
743
  */
696
744
 
697
745
 
@@ -708,6 +756,11 @@ list_delete_cell(List *list, ListCell *cell)
708
756
  *
709
757
  * This variant works on lists of pointers, and determines list
710
758
  * membership via equal()
759
+ *
760
+ * Note that this takes time proportional to the product of the list
761
+ * lengths, so beware of using it on long lists. (We could probably
762
+ * improve that, but really you should be using some other data structure
763
+ * if this'd be a performance bottleneck.)
711
764
  */
712
765
 
713
766
 
@@ -732,6 +785,8 @@ list_delete_cell(List *list, ListCell *cell)
732
785
  *
733
786
  * Whether an element is already a member of the list is determined
734
787
  * via equal().
788
+ *
789
+ * This does a simple linear search --- avoid using it on long lists.
735
790
  */
736
791
 
737
792
 
@@ -761,6 +816,11 @@ list_delete_cell(List *list, ListCell *cell)
761
816
  * modified in-place rather than being copied. However, callers of this
762
817
  * function may have strict ordering expectations -- i.e. that the relative
763
818
  * order of those list2 elements that are not duplicates is preserved.
819
+ *
820
+ * Note that this takes time proportional to the product of the list
821
+ * lengths, so beware of using it on long lists. (We could probably
822
+ * improve that, but really you should be using some other data structure
823
+ * if this'd be a performance bottleneck.)
764
824
  */
765
825
 
766
826
 
@@ -785,6 +845,8 @@ list_delete_cell(List *list, ListCell *cell)
785
845
  *
786
846
  * It is caller's responsibility to have sorted the list to bring duplicates
787
847
  * together, perhaps via list_sort(list, list_oid_cmp).
848
+ *
849
+ * Note that this takes time proportional to the length of the list.
788
850
  */
789
851
 
790
852
 
@@ -852,6 +914,12 @@ list_copy(const List *oldlist)
852
914
  return newlist;
853
915
  }
854
916
 
917
+ /*
918
+ * Return a shallow copy of the specified list containing only the first 'len'
919
+ * elements. If oldlist is shorter than 'len' then we copy the entire list.
920
+ */
921
+
922
+
855
923
  /*
856
924
  * Return a shallow copy of the specified list, without the first N elements.
857
925
  */
@@ -913,6 +981,13 @@ list_copy_deep(const List *oldlist)
913
981
  *
914
982
  * Like qsort(), this provides no guarantees about sort stability
915
983
  * for equal keys.
984
+ *
985
+ * This is based on qsort(), so it likewise has O(N log N) runtime.
986
+ */
987
+
988
+
989
+ /*
990
+ * list_sort comparator for sorting a list into ascending int order.
916
991
  */
917
992
 
918
993
 
@@ -3,6 +3,7 @@
3
3
  * - makeDefElem
4
4
  * - makeTypeNameFromNameList
5
5
  * - makeDefElemExtended
6
+ * - makeRangeVar
6
7
  * - makeVacuumRelation
7
8
  * - makeAlias
8
9
  * - makeSimpleA_Expr
@@ -10,7 +11,6 @@
10
11
  * - makeTypeName
11
12
  * - makeFuncCall
12
13
  * - makeA_Expr
13
- * - makeRangeVar
14
14
  * - makeBoolExpr
15
15
  *--------------------------------------------------------------------
16
16
  */
@@ -21,7 +21,7 @@
21
21
  * creator functions for various nodes. The functions here are for the
22
22
  * most frequently created nodes.
23
23
  *
24
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
24
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
25
25
  * Portions Copyright (c) 1994, Regents of the University of California
26
26
  *
27
27
  *
@@ -309,7 +309,7 @@ makeDefElemExtended(char *nameSpace, char *name, Node *arg,
309
309
  * supply. Any non-default parameters have to be inserted by the caller.
310
310
  */
311
311
  FuncCall *
312
- makeFuncCall(List *name, List *args, int location)
312
+ makeFuncCall(List *name, List *args, CoercionForm funcformat, int location)
313
313
  {
314
314
  FuncCall *n = makeNode(FuncCall);
315
315
 
@@ -317,11 +317,12 @@ makeFuncCall(List *name, List *args, int location)
317
317
  n->args = args;
318
318
  n->agg_order = NIL;
319
319
  n->agg_filter = NULL;
320
+ n->over = NULL;
320
321
  n->agg_within_group = false;
321
322
  n->agg_star = false;
322
323
  n->agg_distinct = false;
323
324
  n->func_variadic = false;
324
- n->over = NULL;
325
+ n->funcformat = funcformat;
325
326
  n->location = location;
326
327
  return n;
327
328
  }
@@ -11,7 +11,7 @@
11
11
  * nodeFuncs.c
12
12
  * Various general-purpose manipulations of Node trees
13
13
  *
14
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
14
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
15
15
  * Portions Copyright (c) 1994, Regents of the University of California
16
16
  *
17
17
  *
@@ -523,6 +523,12 @@ exprLocation(const Node *expr)
523
523
  case T_OnConflictClause:
524
524
  loc = ((const OnConflictClause *) expr)->location;
525
525
  break;
526
+ case T_CTESearchClause:
527
+ loc = ((const CTESearchClause *) expr)->location;
528
+ break;
529
+ case T_CTECycleClause:
530
+ loc = ((const CTECycleClause *) expr)->location;
531
+ break;
526
532
  case T_CommonTableExpr:
527
533
  loc = ((const CommonTableExpr *) expr)->location;
528
534
  break;
@@ -812,10 +818,6 @@ leftmostLoc(int loc1, int loc2)
812
818
  #define FLATCOPY(newnode, node, nodetype) \
813
819
  ( (newnode) = (nodetype *) palloc(sizeof(nodetype)), \
814
820
  memcpy((newnode), (node), sizeof(nodetype)) )
815
- #define CHECKFLATCOPY(newnode, node, nodetype) \
816
- ( AssertMacro(IsA((node), nodetype)), \
817
- (newnode) = (nodetype *) palloc(sizeof(nodetype)), \
818
- memcpy((newnode), (node), sizeof(nodetype)) )
819
821
  #define MUTATE(newfield, oldfield, fieldtype) \
820
822
  ( (newfield) = (fieldtype) mutator((Node *) (oldfield), context) )
821
823
 
@@ -835,9 +837,9 @@ leftmostLoc(int loc1, int loc2)
835
837
  * which is the bitwise OR of flag values to suppress mutating of
836
838
  * indicated items. (More flag bits may be added as needed.)
837
839
  *
838
- * Normally the Query node itself is copied, but some callers want it to be
839
- * modified in-place; they must pass QTW_DONT_COPY_QUERY in flags. All
840
- * modified substructure is safely copied in any case.
840
+ * Normally the top-level Query node itself is copied, but some callers want
841
+ * it to be modified in-place; they must pass QTW_DONT_COPY_QUERY in flags.
842
+ * All modified substructure is safely copied in any case.
841
843
  */
842
844
 
843
845
 
@@ -880,9 +882,9 @@ leftmostLoc(int loc1, int loc2)
880
882
  * boundaries: we descend to everything that's possibly interesting.
881
883
  *
882
884
  * Currently, the node type coverage here extends only to DML statements
883
- * (SELECT/INSERT/UPDATE/DELETE) and nodes that can appear in them, because
884
- * this is used mainly during analysis of CTEs, and only DML statements can
885
- * appear in CTEs.
885
+ * (SELECT/INSERT/UPDATE/DELETE/MERGE) and nodes that can appear in them,
886
+ * because this is used mainly during analysis of CTEs, and only DML
887
+ * statements can appear in CTEs.
886
888
  */
887
889
  bool
888
890
  raw_expression_tree_walker(Node *node,
@@ -908,9 +910,9 @@ raw_expression_tree_walker(Node *node,
908
910
  case T_SQLValueFunction:
909
911
  case T_Integer:
910
912
  case T_Float:
913
+ case T_Boolean:
911
914
  case T_String:
912
915
  case T_BitString:
913
- case T_Null:
914
916
  case T_ParamRef:
915
917
  case T_A_Const:
916
918
  case T_A_Star:
@@ -1062,6 +1064,34 @@ raw_expression_tree_walker(Node *node,
1062
1064
  return true;
1063
1065
  }
1064
1066
  break;
1067
+ case T_MergeStmt:
1068
+ {
1069
+ MergeStmt *stmt = (MergeStmt *) node;
1070
+
1071
+ if (walker(stmt->relation, context))
1072
+ return true;
1073
+ if (walker(stmt->sourceRelation, context))
1074
+ return true;
1075
+ if (walker(stmt->joinCondition, context))
1076
+ return true;
1077
+ if (walker(stmt->mergeWhenClauses, context))
1078
+ return true;
1079
+ if (walker(stmt->withClause, context))
1080
+ return true;
1081
+ }
1082
+ break;
1083
+ case T_MergeWhenClause:
1084
+ {
1085
+ MergeWhenClause *mergeWhenClause = (MergeWhenClause *) node;
1086
+
1087
+ if (walker(mergeWhenClause->condition, context))
1088
+ return true;
1089
+ if (walker(mergeWhenClause->targetList, context))
1090
+ return true;
1091
+ if (walker(mergeWhenClause->values, context))
1092
+ return true;
1093
+ }
1094
+ break;
1065
1095
  case T_SelectStmt:
1066
1096
  {
1067
1097
  SelectStmt *stmt = (SelectStmt *) node;
@@ -1100,6 +1130,16 @@ raw_expression_tree_walker(Node *node,
1100
1130
  return true;
1101
1131
  }
1102
1132
  break;
1133
+ case T_PLAssignStmt:
1134
+ {
1135
+ PLAssignStmt *stmt = (PLAssignStmt *) node;
1136
+
1137
+ if (walker(stmt->indirection, context))
1138
+ return true;
1139
+ if (walker(stmt->val, context))
1140
+ return true;
1141
+ }
1142
+ break;
1103
1143
  case T_A_Expr:
1104
1144
  {
1105
1145
  A_Expr *expr = (A_Expr *) node;
@@ -1279,6 +1319,8 @@ raw_expression_tree_walker(Node *node,
1279
1319
 
1280
1320
  if (walker(coldef->typeName, context))
1281
1321
  return true;
1322
+ if (walker(coldef->compression, context))
1323
+ return true;
1282
1324
  if (walker(coldef->raw_default, context))
1283
1325
  return true;
1284
1326
  if (walker(coldef->collClause, context))
@@ -1334,6 +1376,7 @@ raw_expression_tree_walker(Node *node,
1334
1376
  }
1335
1377
  break;
1336
1378
  case T_CommonTableExpr:
1379
+ /* search_clause and cycle_clause are not interesting here */
1337
1380
  return walker(((CommonTableExpr *) node)->ctequery, context);
1338
1381
  default:
1339
1382
  elog(ERROR, "unrecognized node type: %d",
@@ -1,6 +1,7 @@
1
1
  /*--------------------------------------------------------------------
2
2
  * Symbols referenced in this file:
3
3
  * - makeString
4
+ * - makeBoolean
4
5
  * - makeInteger
5
6
  * - makeFloat
6
7
  * - makeBitString
@@ -10,10 +11,10 @@
10
11
  /*-------------------------------------------------------------------------
11
12
  *
12
13
  * value.c
13
- * implementation of Value nodes
14
+ * implementation of value nodes
14
15
  *
15
16
  *
16
- * Copyright (c) 2003-2020, PostgreSQL Global Development Group
17
+ * Copyright (c) 2003-2022, PostgreSQL Global Development Group
17
18
  *
18
19
  *
19
20
  * IDENTIFICATION
@@ -23,18 +24,17 @@
23
24
  */
24
25
  #include "postgres.h"
25
26
 
26
- #include "nodes/parsenodes.h"
27
+ #include "nodes/value.h"
27
28
 
28
29
  /*
29
30
  * makeInteger
30
31
  */
31
- Value *
32
+ Integer *
32
33
  makeInteger(int i)
33
34
  {
34
- Value *v = makeNode(Value);
35
+ Integer *v = makeNode(Integer);
35
36
 
36
- v->type = T_Integer;
37
- v->val.ival = i;
37
+ v->ival = i;
38
38
  return v;
39
39
  }
40
40
 
@@ -43,13 +43,24 @@ makeInteger(int i)
43
43
  *
44
44
  * Caller is responsible for passing a palloc'd string.
45
45
  */
46
- Value *
46
+ Float *
47
47
  makeFloat(char *numericStr)
48
48
  {
49
- Value *v = makeNode(Value);
49
+ Float *v = makeNode(Float);
50
50
 
51
- v->type = T_Float;
52
- v->val.str = numericStr;
51
+ v->fval = numericStr;
52
+ return v;
53
+ }
54
+
55
+ /*
56
+ * makeBoolean
57
+ */
58
+ Boolean *
59
+ makeBoolean(bool val)
60
+ {
61
+ Boolean *v = makeNode(Boolean);
62
+
63
+ v->boolval = val;
53
64
  return v;
54
65
  }
55
66
 
@@ -58,13 +69,12 @@ makeFloat(char *numericStr)
58
69
  *
59
70
  * Caller is responsible for passing a palloc'd string.
60
71
  */
61
- Value *
72
+ String *
62
73
  makeString(char *str)
63
74
  {
64
- Value *v = makeNode(Value);
75
+ String *v = makeNode(String);
65
76
 
66
- v->type = T_String;
67
- v->val.str = str;
77
+ v->sval = str;
68
78
  return v;
69
79
  }
70
80
 
@@ -73,12 +83,11 @@ makeString(char *str)
73
83
  *
74
84
  * Caller is responsible for passing a palloc'd string.
75
85
  */
76
- Value *
86
+ BitString *
77
87
  makeBitString(char *str)
78
88
  {
79
- Value *v = makeNode(Value);
89
+ BitString *v = makeNode(BitString);
80
90
 
81
- v->type = T_BitString;
82
- v->val.str = str;
91
+ v->bsval = str;
83
92
  return v;
84
93
  }