pg_query 2.0.3 → 5.1.0

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 (557) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +165 -0
  3. data/README.md +67 -29
  4. data/Rakefile +8 -23
  5. data/ext/pg_query/extconf.rb +21 -3
  6. data/ext/pg_query/include/pg_query.h +29 -4
  7. data/ext/pg_query/include/pg_query_enum_defs.c +551 -272
  8. data/ext/pg_query/include/pg_query_fingerprint_conds.c +563 -470
  9. data/ext/pg_query/include/pg_query_fingerprint_defs.c +5403 -3945
  10. data/ext/pg_query/include/pg_query_outfuncs_conds.c +402 -330
  11. data/ext/pg_query/include/pg_query_outfuncs_defs.c +1319 -1059
  12. data/ext/pg_query/include/pg_query_readfuncs_conds.c +141 -118
  13. data/ext/pg_query/include/pg_query_readfuncs_defs.c +1685 -1379
  14. data/ext/pg_query/include/{access → postgres/access}/amapi.h +47 -1
  15. data/ext/pg_query/include/{access → postgres/access}/attmap.h +5 -3
  16. data/ext/pg_query/include/{access → postgres/access}/attnum.h +2 -2
  17. data/ext/pg_query/include/{access → postgres/access}/clog.h +4 -2
  18. data/ext/pg_query/include/{access → postgres/access}/commit_ts.h +6 -9
  19. data/ext/pg_query/include/{access → postgres/access}/detoast.h +1 -11
  20. data/ext/pg_query/include/{access → postgres/access}/genam.h +21 -16
  21. data/ext/pg_query/include/{access → postgres/access}/gin.h +17 -4
  22. data/ext/pg_query/include/{access → postgres/access}/htup.h +1 -1
  23. data/ext/pg_query/include/{access → postgres/access}/htup_details.h +80 -88
  24. data/ext/pg_query/include/{access → postgres/access}/itup.h +61 -52
  25. data/ext/pg_query/include/{access → postgres/access}/parallel.h +2 -2
  26. data/ext/pg_query/include/{access → postgres/access}/printtup.h +1 -1
  27. data/ext/pg_query/include/{access → postgres/access}/relation.h +1 -1
  28. data/ext/pg_query/include/{access → postgres/access}/relscan.h +17 -2
  29. data/ext/pg_query/include/postgres/access/rmgr.h +62 -0
  30. data/ext/pg_query/include/{access → postgres/access}/rmgrlist.h +24 -24
  31. data/ext/pg_query/include/{access → postgres/access}/sdir.h +12 -3
  32. data/ext/pg_query/include/{access → postgres/access}/skey.h +1 -1
  33. data/ext/pg_query/include/{access → postgres/access}/stratnum.h +4 -2
  34. data/ext/pg_query/include/{access → postgres/access}/sysattr.h +1 -1
  35. data/ext/pg_query/include/{access → postgres/access}/table.h +2 -1
  36. data/ext/pg_query/include/{access → postgres/access}/tableam.h +337 -62
  37. data/ext/pg_query/include/postgres/access/toast_compression.h +73 -0
  38. data/ext/pg_query/include/{access → postgres/access}/transam.h +123 -13
  39. data/ext/pg_query/include/postgres/access/tsmapi.h +82 -0
  40. data/ext/pg_query/include/{access → postgres/access}/tupconvert.h +5 -2
  41. data/ext/pg_query/include/{access → postgres/access}/tupdesc.h +2 -2
  42. data/ext/pg_query/include/{access → postgres/access}/tupmacs.h +60 -100
  43. data/ext/pg_query/include/{access → postgres/access}/twophase.h +5 -1
  44. data/ext/pg_query/include/{access → postgres/access}/xact.h +99 -32
  45. data/ext/pg_query/include/{access → postgres/access}/xlog.h +69 -165
  46. data/ext/pg_query/include/{access → postgres/access}/xlog_internal.h +147 -73
  47. data/ext/pg_query/include/postgres/access/xlogbackup.h +41 -0
  48. data/ext/pg_query/include/{access → postgres/access}/xlogdefs.h +13 -40
  49. data/ext/pg_query/include/postgres/access/xlogprefetcher.h +55 -0
  50. data/ext/pg_query/include/{access → postgres/access}/xlogreader.h +154 -37
  51. data/ext/pg_query/include/{access → postgres/access}/xlogrecord.h +34 -13
  52. data/ext/pg_query/include/postgres/access/xlogrecovery.h +158 -0
  53. data/ext/pg_query/include/postgres/archive/archive_module.h +59 -0
  54. data/ext/pg_query/include/{c.h → postgres/c.h} +245 -188
  55. data/ext/pg_query/include/{catalog → postgres/catalog}/catalog.h +6 -3
  56. data/ext/pg_query/include/{catalog → postgres/catalog}/catversion.h +6 -2
  57. data/ext/pg_query/include/{catalog → postgres/catalog}/dependency.h +14 -19
  58. data/ext/pg_query/include/postgres/catalog/genbki.h +143 -0
  59. data/ext/pg_query/include/{catalog → postgres/catalog}/index.h +20 -5
  60. data/ext/pg_query/include/postgres/catalog/indexing.h +54 -0
  61. data/ext/pg_query/include/{catalog → postgres/catalog}/namespace.h +5 -3
  62. data/ext/pg_query/include/{catalog → postgres/catalog}/objectaccess.h +73 -3
  63. data/ext/pg_query/include/{catalog → postgres/catalog}/objectaddress.h +12 -7
  64. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate.h +14 -10
  65. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate_d.h +2 -1
  66. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am.h +4 -1
  67. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am_d.h +3 -1
  68. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute.h +45 -26
  69. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute_d.h +19 -16
  70. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid.h +7 -2
  71. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid_d.h +19 -9
  72. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class.h +45 -15
  73. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class_d.h +31 -2
  74. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation.h +35 -8
  75. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation_d.h +21 -3
  76. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint.h +39 -13
  77. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint_d.h +10 -4
  78. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_control.h +13 -5
  79. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion.h +8 -5
  80. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion_d.h +4 -1
  81. data/ext/pg_query/include/postgres/catalog/pg_database.h +124 -0
  82. data/ext/pg_query/include/postgres/catalog/pg_database_d.h +52 -0
  83. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend.h +11 -7
  84. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend_d.h +3 -1
  85. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger.h +9 -3
  86. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger_d.h +3 -1
  87. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index.h +17 -7
  88. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index_d.h +20 -17
  89. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language.h +10 -5
  90. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language_d.h +3 -1
  91. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace.h +7 -2
  92. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace_d.h +3 -1
  93. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass.h +8 -5
  94. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass_d.h +3 -1
  95. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator.h +21 -16
  96. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator_d.h +37 -1
  97. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily.h +8 -4
  98. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily_d.h +6 -2
  99. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table.h +20 -9
  100. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table_d.h +2 -1
  101. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc.h +20 -11
  102. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc_d.h +10 -8
  103. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication.h +49 -6
  104. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication_d.h +3 -1
  105. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin.h +6 -1
  106. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin_d.h +5 -1
  107. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic.h +19 -12
  108. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_d.h +2 -1
  109. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext.h +19 -5
  110. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext_d.h +7 -2
  111. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform.h +8 -5
  112. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform_d.h +3 -1
  113. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger.h +24 -8
  114. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger_d.h +4 -1
  115. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config.h +6 -3
  116. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config_d.h +3 -1
  117. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict.h +8 -3
  118. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict_d.h +3 -1
  119. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser.h +6 -3
  120. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser_d.h +3 -1
  121. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template.h +6 -3
  122. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template_d.h +3 -1
  123. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type.h +56 -24
  124. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type_d.h +70 -31
  125. data/ext/pg_query/include/{catalog → postgres/catalog}/storage.h +9 -7
  126. data/ext/pg_query/include/{commands → postgres/commands}/async.h +4 -5
  127. data/ext/pg_query/include/{commands → postgres/commands}/dbcommands.h +3 -1
  128. data/ext/pg_query/include/{commands → postgres/commands}/defrem.h +12 -24
  129. data/ext/pg_query/include/{commands → postgres/commands}/event_trigger.h +2 -2
  130. data/ext/pg_query/include/{commands → postgres/commands}/explain.h +3 -1
  131. data/ext/pg_query/include/{commands → postgres/commands}/prepare.h +1 -1
  132. data/ext/pg_query/include/{commands → postgres/commands}/tablespace.h +6 -4
  133. data/ext/pg_query/include/{commands → postgres/commands}/trigger.h +36 -25
  134. data/ext/pg_query/include/{commands → postgres/commands}/user.h +10 -4
  135. data/ext/pg_query/include/{commands → postgres/commands}/vacuum.h +140 -47
  136. data/ext/pg_query/include/postgres/common/cryptohash.h +39 -0
  137. data/ext/pg_query/include/{common → postgres/common}/file_perm.h +4 -4
  138. data/ext/pg_query/include/{common → postgres/common}/hashfn.h +1 -1
  139. data/ext/pg_query/include/postgres/common/int.h +437 -0
  140. data/ext/pg_query/include/{common → postgres/common}/keywords.h +2 -6
  141. data/ext/pg_query/include/{common → postgres/common}/kwlookup.h +2 -2
  142. data/ext/pg_query/include/postgres/common/pg_prng.h +61 -0
  143. data/ext/pg_query/include/{common → postgres/common}/relpath.h +21 -14
  144. data/ext/pg_query/include/postgres/common/scram-common.h +70 -0
  145. data/ext/pg_query/include/postgres/common/sha2.h +32 -0
  146. data/ext/pg_query/include/postgres/common/string.h +44 -0
  147. data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +125 -0
  148. data/ext/pg_query/include/{common/unicode_combining_table.h → postgres/common/unicode_nonspacing_table.h} +138 -8
  149. data/ext/pg_query/include/postgres/copyfuncs.funcs.c +5013 -0
  150. data/ext/pg_query/include/postgres/copyfuncs.switch.c +938 -0
  151. data/ext/pg_query/include/{datatype → postgres/datatype}/timestamp.h +50 -4
  152. data/ext/pg_query/include/postgres/equalfuncs.funcs.c +3097 -0
  153. data/ext/pg_query/include/postgres/equalfuncs.switch.c +785 -0
  154. data/ext/pg_query/include/{executor → postgres/executor}/execdesc.h +1 -1
  155. data/ext/pg_query/include/{executor → postgres/executor}/executor.h +98 -32
  156. data/ext/pg_query/include/{executor → postgres/executor}/functions.h +17 -3
  157. data/ext/pg_query/include/{executor → postgres/executor}/instrument.h +33 -16
  158. data/ext/pg_query/include/{executor → postgres/executor}/spi.h +42 -4
  159. data/ext/pg_query/include/{executor → postgres/executor}/tablefunc.h +1 -1
  160. data/ext/pg_query/include/{executor → postgres/executor}/tuptable.h +18 -11
  161. data/ext/pg_query/include/{fmgr.h → postgres/fmgr.h} +33 -8
  162. data/ext/pg_query/include/postgres/foreign/fdwapi.h +294 -0
  163. data/ext/pg_query/include/{funcapi.h → postgres/funcapi.h} +22 -10
  164. data/ext/pg_query/include/postgres/gram.h +1127 -0
  165. data/ext/pg_query/include/{parser → postgres}/gramparse.h +4 -4
  166. data/ext/pg_query/include/{jit → postgres/jit}/jit.h +12 -12
  167. data/ext/pg_query/include/postgres/kwlist_d.h +1119 -0
  168. data/ext/pg_query/include/postgres/lib/dshash.h +115 -0
  169. data/ext/pg_query/include/{lib → postgres/lib}/ilist.h +454 -22
  170. data/ext/pg_query/include/{lib → postgres/lib}/pairingheap.h +1 -1
  171. data/ext/pg_query/include/{lib → postgres/lib}/simplehash.h +158 -33
  172. data/ext/pg_query/include/postgres/lib/sort_template.h +432 -0
  173. data/ext/pg_query/include/{lib → postgres/lib}/stringinfo.h +3 -3
  174. data/ext/pg_query/include/{libpq → postgres/libpq}/auth.h +12 -4
  175. data/ext/pg_query/include/{libpq → postgres/libpq}/crypt.h +5 -4
  176. data/ext/pg_query/include/{libpq → postgres/libpq}/hba.h +54 -8
  177. data/ext/pg_query/include/{libpq → postgres/libpq}/libpq-be.h +45 -17
  178. data/ext/pg_query/include/{libpq → postgres/libpq}/libpq.h +31 -20
  179. data/ext/pg_query/include/{libpq → postgres/libpq}/pqcomm.h +26 -71
  180. data/ext/pg_query/include/{libpq → postgres/libpq}/pqformat.h +2 -2
  181. data/ext/pg_query/include/{libpq → postgres/libpq}/pqsignal.h +25 -13
  182. data/ext/pg_query/include/postgres/libpq/sasl.h +136 -0
  183. data/ext/pg_query/include/postgres/libpq/scram.h +37 -0
  184. data/ext/pg_query/include/{mb → postgres/mb}/pg_wchar.h +125 -25
  185. data/ext/pg_query/include/{mb → postgres/mb}/stringinfo_mb.h +1 -1
  186. data/ext/pg_query/include/{miscadmin.h → postgres/miscadmin.h} +96 -65
  187. data/ext/pg_query/include/{nodes → postgres/nodes}/bitmapset.h +11 -7
  188. data/ext/pg_query/include/{nodes → postgres/nodes}/execnodes.h +351 -103
  189. data/ext/pg_query/include/{nodes → postgres/nodes}/extensible.h +8 -4
  190. data/ext/pg_query/include/{nodes → postgres/nodes}/lockoptions.h +1 -1
  191. data/ext/pg_query/include/{nodes → postgres/nodes}/makefuncs.h +19 -6
  192. data/ext/pg_query/include/{nodes → postgres/nodes}/memnodes.h +11 -6
  193. data/ext/pg_query/include/postgres/nodes/miscnodes.h +56 -0
  194. data/ext/pg_query/include/{nodes → postgres/nodes}/nodeFuncs.h +89 -29
  195. data/ext/pg_query/include/{nodes → postgres/nodes}/nodes.h +100 -496
  196. data/ext/pg_query/include/postgres/nodes/nodetags.h +471 -0
  197. data/ext/pg_query/include/{nodes → postgres/nodes}/params.h +3 -3
  198. data/ext/pg_query/include/{nodes → postgres/nodes}/parsenodes.h +678 -207
  199. data/ext/pg_query/include/{nodes → postgres/nodes}/pathnodes.h +1282 -454
  200. data/ext/pg_query/include/{nodes → postgres/nodes}/pg_list.h +103 -73
  201. data/ext/pg_query/include/{nodes → postgres/nodes}/plannodes.h +474 -133
  202. data/ext/pg_query/include/{nodes → postgres/nodes}/primnodes.h +754 -254
  203. data/ext/pg_query/include/{nodes → postgres/nodes}/print.h +1 -1
  204. data/ext/pg_query/include/postgres/nodes/queryjumble.h +86 -0
  205. data/ext/pg_query/include/postgres/nodes/replnodes.h +111 -0
  206. data/ext/pg_query/include/postgres/nodes/supportnodes.h +346 -0
  207. data/ext/pg_query/include/{nodes → postgres/nodes}/tidbitmap.h +1 -1
  208. data/ext/pg_query/include/postgres/nodes/value.h +90 -0
  209. data/ext/pg_query/include/{optimizer → postgres/optimizer}/cost.h +14 -5
  210. data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo.h +9 -7
  211. data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo_gene.h +1 -1
  212. data/ext/pg_query/include/{optimizer → postgres/optimizer}/optimizer.h +31 -28
  213. data/ext/pg_query/include/{optimizer → postgres/optimizer}/paths.h +29 -12
  214. data/ext/pg_query/include/{optimizer → postgres/optimizer}/planmain.h +15 -17
  215. data/ext/pg_query/include/{parser → postgres/parser}/analyze.h +20 -5
  216. data/ext/pg_query/include/postgres/parser/kwlist.h +498 -0
  217. data/ext/pg_query/include/{parser → postgres/parser}/parse_agg.h +5 -8
  218. data/ext/pg_query/include/{parser → postgres/parser}/parse_coerce.h +6 -1
  219. data/ext/pg_query/include/{parser → postgres/parser}/parse_expr.h +2 -3
  220. data/ext/pg_query/include/{parser → postgres/parser}/parse_func.h +2 -1
  221. data/ext/pg_query/include/{parser → postgres/parser}/parse_node.h +41 -11
  222. data/ext/pg_query/include/{parser → postgres/parser}/parse_oper.h +3 -5
  223. data/ext/pg_query/include/{parser → postgres/parser}/parse_relation.h +11 -5
  224. data/ext/pg_query/include/{parser → postgres/parser}/parse_type.h +4 -3
  225. data/ext/pg_query/include/postgres/parser/parser.h +68 -0
  226. data/ext/pg_query/include/{parser → postgres/parser}/parsetree.h +1 -1
  227. data/ext/pg_query/include/{parser → postgres/parser}/scanner.h +2 -2
  228. data/ext/pg_query/include/{parser → postgres/parser}/scansup.h +2 -5
  229. data/ext/pg_query/include/{partitioning → postgres/partitioning}/partdefs.h +1 -1
  230. data/ext/pg_query/include/{pg_config.h → postgres/pg_config.h} +216 -228
  231. data/ext/pg_query/include/{pg_config_manual.h → postgres/pg_config_manual.h} +80 -58
  232. data/ext/pg_query/include/postgres/pg_config_os.h +8 -0
  233. data/ext/pg_query/include/{pg_getopt.h → postgres/pg_getopt.h} +6 -6
  234. data/ext/pg_query/include/{pg_trace.h → postgres/pg_trace.h} +1 -1
  235. data/ext/pg_query/include/postgres/pgstat.h +778 -0
  236. data/ext/pg_query/include/{pgtime.h → postgres/pgtime.h} +16 -6
  237. data/ext/pg_query/include/{pl_gram.h → postgres/pl_gram.h} +116 -116
  238. data/ext/pg_query/include/{pl_reserved_kwlist.h → postgres/pl_reserved_kwlist.h} +1 -1
  239. data/ext/pg_query/include/{pl_reserved_kwlist_d.h → postgres/pl_reserved_kwlist_d.h} +10 -10
  240. data/ext/pg_query/include/{pl_unreserved_kwlist.h → postgres/pl_unreserved_kwlist.h} +3 -3
  241. data/ext/pg_query/include/{pl_unreserved_kwlist_d.h → postgres/pl_unreserved_kwlist_d.h} +60 -60
  242. data/ext/pg_query/include/{plerrcodes.h → postgres/plerrcodes.h} +9 -1
  243. data/ext/pg_query/include/{plpgsql.h → postgres/plpgsql.h} +79 -86
  244. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-arm.h +9 -3
  245. data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +17 -0
  246. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-ppc.h +21 -21
  247. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-x86.h +2 -2
  248. data/ext/pg_query/include/{port → postgres/port}/atomics/fallback.h +3 -3
  249. data/ext/pg_query/include/{port → postgres/port}/atomics/generic-gcc.h +3 -3
  250. data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +101 -0
  251. data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +106 -0
  252. data/ext/pg_query/include/{port → postgres/port}/atomics/generic.h +1 -1
  253. data/ext/pg_query/include/{port → postgres/port}/atomics.h +2 -7
  254. data/ext/pg_query/include/{port → postgres/port}/pg_bitutils.h +129 -16
  255. data/ext/pg_query/include/{port → postgres/port}/pg_bswap.h +1 -1
  256. data/ext/pg_query/include/{port → postgres/port}/pg_crc32c.h +1 -1
  257. data/ext/pg_query/include/postgres/port/simd.h +375 -0
  258. data/ext/pg_query/include/postgres/port/win32/arpa/inet.h +3 -0
  259. data/ext/pg_query/include/postgres/port/win32/dlfcn.h +1 -0
  260. data/ext/pg_query/include/postgres/port/win32/grp.h +1 -0
  261. data/ext/pg_query/include/postgres/port/win32/netdb.h +7 -0
  262. data/ext/pg_query/include/postgres/port/win32/netinet/in.h +3 -0
  263. data/ext/pg_query/include/postgres/port/win32/netinet/tcp.h +7 -0
  264. data/ext/pg_query/include/postgres/port/win32/pwd.h +3 -0
  265. data/ext/pg_query/include/postgres/port/win32/sys/resource.h +20 -0
  266. data/ext/pg_query/include/postgres/port/win32/sys/select.h +3 -0
  267. data/ext/pg_query/include/postgres/port/win32/sys/socket.h +26 -0
  268. data/ext/pg_query/include/postgres/port/win32/sys/un.h +17 -0
  269. data/ext/pg_query/include/postgres/port/win32/sys/wait.h +3 -0
  270. data/ext/pg_query/include/postgres/port/win32.h +59 -0
  271. data/ext/pg_query/include/postgres/port/win32_msvc/dirent.h +34 -0
  272. data/ext/pg_query/include/postgres/port/win32_msvc/sys/file.h +1 -0
  273. data/ext/pg_query/include/postgres/port/win32_msvc/sys/param.h +1 -0
  274. data/ext/pg_query/include/postgres/port/win32_msvc/sys/time.h +1 -0
  275. data/ext/pg_query/include/postgres/port/win32_msvc/unistd.h +9 -0
  276. data/ext/pg_query/include/postgres/port/win32_msvc/utime.h +3 -0
  277. data/ext/pg_query/include/postgres/port/win32_port.h +594 -0
  278. data/ext/pg_query/include/{port.h → postgres/port.h} +107 -111
  279. data/ext/pg_query/include/postgres/portability/instr_time.h +197 -0
  280. data/ext/pg_query/include/postgres/postgres.h +579 -0
  281. data/ext/pg_query/include/{postgres_ext.h → postgres/postgres_ext.h} +0 -1
  282. data/ext/pg_query/include/{postmaster → postgres/postmaster}/autovacuum.h +17 -20
  283. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker.h +3 -2
  284. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker_internals.h +2 -2
  285. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgwriter.h +6 -6
  286. data/ext/pg_query/include/{postmaster → postgres/postmaster}/interrupt.h +1 -1
  287. data/ext/pg_query/include/{postmaster → postgres/postmaster}/pgarch.h +7 -10
  288. data/ext/pg_query/include/{postmaster → postgres/postmaster}/postmaster.h +21 -17
  289. data/ext/pg_query/include/postgres/postmaster/startup.h +41 -0
  290. data/ext/pg_query/include/{postmaster → postgres/postmaster}/syslogger.h +16 -11
  291. data/ext/pg_query/include/{postmaster → postgres/postmaster}/walwriter.h +5 -3
  292. data/ext/pg_query/include/{regex → postgres/regex}/regex.h +27 -22
  293. data/ext/pg_query/include/{replication → postgres/replication}/logicallauncher.h +8 -5
  294. data/ext/pg_query/include/postgres/replication/logicalproto.h +274 -0
  295. data/ext/pg_query/include/postgres/replication/logicalworker.h +32 -0
  296. data/ext/pg_query/include/{replication → postgres/replication}/origin.h +8 -8
  297. data/ext/pg_query/include/postgres/replication/reorderbuffer.h +753 -0
  298. data/ext/pg_query/include/{replication → postgres/replication}/slot.h +42 -12
  299. data/ext/pg_query/include/{replication → postgres/replication}/syncrep.h +6 -12
  300. data/ext/pg_query/include/{replication → postgres/replication}/walreceiver.h +158 -20
  301. data/ext/pg_query/include/{replication → postgres/replication}/walsender.h +20 -20
  302. data/ext/pg_query/include/{rewrite → postgres/rewrite}/prs2lock.h +1 -1
  303. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteHandler.h +1 -6
  304. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteManip.h +11 -2
  305. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteSupport.h +1 -1
  306. data/ext/pg_query/include/{storage → postgres/storage}/backendid.h +3 -3
  307. data/ext/pg_query/include/{storage → postgres/storage}/block.h +24 -37
  308. data/ext/pg_query/include/{storage → postgres/storage}/buf.h +1 -1
  309. data/ext/pg_query/include/{storage → postgres/storage}/bufmgr.h +196 -95
  310. data/ext/pg_query/include/{storage → postgres/storage}/bufpage.h +152 -101
  311. data/ext/pg_query/include/{storage → postgres/storage}/condition_variable.h +14 -3
  312. data/ext/pg_query/include/{storage → postgres/storage}/dsm.h +6 -6
  313. data/ext/pg_query/include/{storage → postgres/storage}/dsm_impl.h +6 -2
  314. data/ext/pg_query/include/{storage → postgres/storage}/fd.h +48 -14
  315. data/ext/pg_query/include/postgres/storage/fileset.h +40 -0
  316. data/ext/pg_query/include/{storage → postgres/storage}/ipc.h +5 -2
  317. data/ext/pg_query/include/{storage → postgres/storage}/item.h +1 -1
  318. data/ext/pg_query/include/{storage → postgres/storage}/itemid.h +1 -1
  319. data/ext/pg_query/include/{storage → postgres/storage}/itemptr.h +96 -57
  320. data/ext/pg_query/include/{storage → postgres/storage}/large_object.h +2 -2
  321. data/ext/pg_query/include/{storage → postgres/storage}/latch.h +17 -13
  322. data/ext/pg_query/include/{storage → postgres/storage}/lmgr.h +7 -1
  323. data/ext/pg_query/include/{storage → postgres/storage}/lock.h +37 -25
  324. data/ext/pg_query/include/{storage → postgres/storage}/lockdefs.h +4 -4
  325. data/ext/pg_query/include/{storage → postgres/storage}/lwlock.h +21 -33
  326. data/ext/pg_query/include/{storage → postgres/storage}/lwlocknames.h +0 -1
  327. data/ext/pg_query/include/{storage → postgres/storage}/off.h +1 -1
  328. data/ext/pg_query/include/{storage → postgres/storage}/pg_sema.h +1 -1
  329. data/ext/pg_query/include/{storage → postgres/storage}/pg_shmem.h +9 -7
  330. data/ext/pg_query/include/{storage → postgres/storage}/pmsignal.h +15 -4
  331. data/ext/pg_query/include/{storage → postgres/storage}/predicate.h +5 -5
  332. data/ext/pg_query/include/{storage → postgres/storage}/proc.h +200 -67
  333. data/ext/pg_query/include/postgres/storage/procarray.h +99 -0
  334. data/ext/pg_query/include/{storage → postgres/storage}/proclist_types.h +1 -1
  335. data/ext/pg_query/include/{storage → postgres/storage}/procsignal.h +5 -7
  336. data/ext/pg_query/include/postgres/storage/relfilelocator.h +99 -0
  337. data/ext/pg_query/include/{storage → postgres/storage}/s_lock.h +118 -298
  338. data/ext/pg_query/include/{storage → postgres/storage}/sharedfileset.h +3 -11
  339. data/ext/pg_query/include/{storage → postgres/storage}/shm_mq.h +5 -4
  340. data/ext/pg_query/include/{storage → postgres/storage}/shm_toc.h +1 -1
  341. data/ext/pg_query/include/{storage → postgres/storage}/shmem.h +1 -23
  342. data/ext/pg_query/include/{storage → postgres/storage}/sinval.h +5 -5
  343. data/ext/pg_query/include/{storage → postgres/storage}/sinvaladt.h +4 -2
  344. data/ext/pg_query/include/{storage → postgres/storage}/smgr.h +21 -17
  345. data/ext/pg_query/include/{storage → postgres/storage}/spin.h +2 -2
  346. data/ext/pg_query/include/{storage → postgres/storage}/standby.h +17 -9
  347. data/ext/pg_query/include/{storage → postgres/storage}/standbydefs.h +2 -2
  348. data/ext/pg_query/include/{storage → postgres/storage}/sync.h +9 -5
  349. data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtag.h +7 -2
  350. data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtaglist.h +3 -2
  351. data/ext/pg_query/include/{tcop → postgres/tcop}/deparse_utility.h +1 -1
  352. data/ext/pg_query/include/{tcop → postgres/tcop}/dest.h +1 -3
  353. data/ext/pg_query/include/{tcop → postgres/tcop}/fastpath.h +1 -2
  354. data/ext/pg_query/include/{tcop → postgres/tcop}/pquery.h +7 -1
  355. data/ext/pg_query/include/{tcop → postgres/tcop}/tcopprot.h +19 -14
  356. data/ext/pg_query/include/{tcop → postgres/tcop}/utility.h +7 -3
  357. data/ext/pg_query/include/{tsearch → postgres/tsearch}/ts_cache.h +3 -5
  358. data/ext/pg_query/include/{utils → postgres/utils}/acl.h +37 -71
  359. data/ext/pg_query/include/{utils → postgres/utils}/aclchk_internal.h +1 -1
  360. data/ext/pg_query/include/{utils → postgres/utils}/array.h +26 -2
  361. data/ext/pg_query/include/postgres/utils/backend_progress.h +45 -0
  362. data/ext/pg_query/include/postgres/utils/backend_status.h +342 -0
  363. data/ext/pg_query/include/{utils → postgres/utils}/builtins.h +20 -11
  364. data/ext/pg_query/include/{utils → postgres/utils}/bytea.h +3 -2
  365. data/ext/pg_query/include/{utils → postgres/utils}/catcache.h +1 -1
  366. data/ext/pg_query/include/{utils → postgres/utils}/date.h +37 -9
  367. data/ext/pg_query/include/{utils → postgres/utils}/datetime.h +48 -27
  368. data/ext/pg_query/include/{utils → postgres/utils}/datum.h +9 -1
  369. data/ext/pg_query/include/{utils → postgres/utils}/dsa.h +5 -1
  370. data/ext/pg_query/include/{utils → postgres/utils}/elog.h +154 -48
  371. data/ext/pg_query/include/{utils → postgres/utils}/errcodes.h +2 -0
  372. data/ext/pg_query/include/{utils → postgres/utils}/expandeddatum.h +14 -3
  373. data/ext/pg_query/include/{utils → postgres/utils}/expandedrecord.h +14 -4
  374. data/ext/pg_query/include/{utils → postgres/utils}/float.h +13 -12
  375. data/ext/pg_query/include/{utils → postgres/utils}/fmgroids.h +1353 -696
  376. data/ext/pg_query/include/{utils → postgres/utils}/fmgrprotos.h +243 -18
  377. data/ext/pg_query/include/{utils → postgres/utils}/fmgrtab.h +6 -5
  378. data/ext/pg_query/include/{utils → postgres/utils}/guc.h +120 -121
  379. data/ext/pg_query/include/postgres/utils/guc_hooks.h +163 -0
  380. data/ext/pg_query/include/{utils → postgres/utils}/guc_tables.h +71 -21
  381. data/ext/pg_query/include/{utils → postgres/utils}/hsearch.h +15 -11
  382. data/ext/pg_query/include/{utils → postgres/utils}/inval.h +7 -3
  383. data/ext/pg_query/include/postgres/utils/logtape.h +77 -0
  384. data/ext/pg_query/include/{utils → postgres/utils}/lsyscache.h +16 -1
  385. data/ext/pg_query/include/{utils → postgres/utils}/memdebug.h +1 -1
  386. data/ext/pg_query/include/{utils → postgres/utils}/memutils.h +14 -53
  387. data/ext/pg_query/include/postgres/utils/memutils_internal.h +136 -0
  388. data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +237 -0
  389. data/ext/pg_query/include/{utils → postgres/utils}/numeric.h +38 -9
  390. data/ext/pg_query/include/{utils → postgres/utils}/palloc.h +33 -4
  391. data/ext/pg_query/include/{utils → postgres/utils}/partcache.h +3 -2
  392. data/ext/pg_query/include/{utils → postgres/utils}/pg_locale.h +37 -21
  393. data/ext/pg_query/include/postgres/utils/pgstat_internal.h +814 -0
  394. data/ext/pg_query/include/{utils → postgres/utils}/plancache.h +6 -5
  395. data/ext/pg_query/include/{utils → postgres/utils}/portal.h +12 -1
  396. data/ext/pg_query/include/{utils → postgres/utils}/probes.h +59 -59
  397. data/ext/pg_query/include/postgres/utils/ps_status.h +47 -0
  398. data/ext/pg_query/include/{utils → postgres/utils}/queryenvironment.h +1 -1
  399. data/ext/pg_query/include/postgres/utils/regproc.h +39 -0
  400. data/ext/pg_query/include/{utils → postgres/utils}/rel.h +129 -61
  401. data/ext/pg_query/include/{utils → postgres/utils}/relcache.h +21 -14
  402. data/ext/pg_query/include/{utils → postgres/utils}/reltrigger.h +1 -1
  403. data/ext/pg_query/include/{utils → postgres/utils}/resowner.h +1 -1
  404. data/ext/pg_query/include/{utils → postgres/utils}/ruleutils.h +9 -1
  405. data/ext/pg_query/include/{utils → postgres/utils}/sharedtuplestore.h +1 -1
  406. data/ext/pg_query/include/{utils → postgres/utils}/snapmgr.h +38 -15
  407. data/ext/pg_query/include/{utils → postgres/utils}/snapshot.h +14 -1
  408. data/ext/pg_query/include/{utils → postgres/utils}/sortsupport.h +117 -2
  409. data/ext/pg_query/include/{utils → postgres/utils}/syscache.h +9 -1
  410. data/ext/pg_query/include/{utils → postgres/utils}/timeout.h +11 -4
  411. data/ext/pg_query/include/{utils → postgres/utils}/timestamp.h +46 -15
  412. data/ext/pg_query/include/{utils → postgres/utils}/tuplesort.h +209 -41
  413. data/ext/pg_query/include/{utils → postgres/utils}/tuplestore.h +2 -2
  414. data/ext/pg_query/include/{utils → postgres/utils}/typcache.h +24 -17
  415. data/ext/pg_query/include/{utils → postgres/utils}/varlena.h +17 -3
  416. data/ext/pg_query/include/postgres/utils/wait_event.h +294 -0
  417. data/ext/pg_query/include/{utils → postgres/utils}/xml.h +18 -8
  418. data/ext/pg_query/include/{postgres.h → postgres/varatt.h} +65 -471
  419. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +7494 -6382
  420. data/ext/pg_query/include/protobuf/pg_query.pb.h +116922 -84792
  421. data/ext/pg_query/include/protobuf-c/protobuf-c.h +7 -3
  422. data/ext/pg_query/include/protobuf-c.h +7 -3
  423. data/ext/pg_query/pg_query.c +10 -1
  424. data/ext/pg_query/pg_query.pb-c.c +21026 -17002
  425. data/ext/pg_query/pg_query_deparse.c +1 -9896
  426. data/ext/pg_query/pg_query_fingerprint.c +162 -50
  427. data/ext/pg_query/pg_query_fingerprint.h +3 -1
  428. data/ext/pg_query/pg_query_internal.h +1 -1
  429. data/ext/pg_query/pg_query_json_plpgsql.c +56 -12
  430. data/ext/pg_query/pg_query_normalize.c +259 -64
  431. data/ext/pg_query/pg_query_outfuncs.h +1 -0
  432. data/ext/pg_query/pg_query_outfuncs_json.c +71 -16
  433. data/ext/pg_query/pg_query_outfuncs_protobuf.c +73 -12
  434. data/ext/pg_query/pg_query_parse.c +47 -5
  435. data/ext/pg_query/pg_query_parse_plpgsql.c +86 -21
  436. data/ext/pg_query/pg_query_readfuncs_protobuf.c +43 -8
  437. data/ext/pg_query/pg_query_ruby.c +6 -1
  438. data/ext/pg_query/pg_query_ruby_freebsd.sym +2 -0
  439. data/ext/pg_query/pg_query_scan.c +3 -2
  440. data/ext/pg_query/pg_query_split.c +6 -5
  441. data/ext/pg_query/postgres_deparse.c +11067 -0
  442. data/ext/pg_query/postgres_deparse.h +9 -0
  443. data/ext/pg_query/protobuf-c.c +34 -27
  444. data/ext/pg_query/src_backend_catalog_namespace.c +27 -10
  445. data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
  446. data/ext/pg_query/src_backend_commands_define.c +11 -1
  447. data/ext/pg_query/src_backend_nodes_bitmapset.c +13 -70
  448. data/ext/pg_query/src_backend_nodes_copyfuncs.c +103 -5894
  449. data/ext/pg_query/src_backend_nodes_equalfuncs.c +102 -3830
  450. data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
  451. data/ext/pg_query/src_backend_nodes_list.c +99 -12
  452. data/ext/pg_query/src_backend_nodes_makefuncs.c +99 -4
  453. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +325 -131
  454. data/ext/pg_query/src_backend_nodes_nodes.c +38 -0
  455. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  456. data/ext/pg_query/src_backend_parser_gram.c +36104 -32074
  457. data/ext/pg_query/src_backend_parser_parser.c +53 -8
  458. data/ext/pg_query/src_backend_parser_scan.c +4893 -3701
  459. data/ext/pg_query/src_backend_parser_scansup.c +4 -28
  460. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  461. data/ext/pg_query/src_backend_tcop_postgres.c +133 -105
  462. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  463. data/ext/pg_query/src_backend_utils_adt_datum.c +17 -7
  464. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  465. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  466. data/ext/pg_query/src_backend_utils_adt_numutils.c +489 -0
  467. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +187 -19
  468. data/ext/pg_query/src_backend_utils_error_assert.c +17 -18
  469. data/ext/pg_query/src_backend_utils_error_elog.c +513 -318
  470. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +44 -17
  471. data/ext/pg_query/src_backend_utils_init_globals.c +9 -6
  472. data/ext/pg_query/src_backend_utils_mb_mbutils.c +74 -131
  473. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +492 -0
  474. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +163 -0
  475. data/ext/pg_query/src_backend_utils_mmgr_aset.c +453 -314
  476. data/ext/pg_query/src_backend_utils_mmgr_generation.c +1039 -0
  477. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +549 -76
  478. data/ext/pg_query/src_backend_utils_mmgr_slab.c +1021 -0
  479. data/ext/pg_query/src_common_encnames.c +4 -1
  480. data/ext/pg_query/src_common_hashfn.c +420 -0
  481. data/ext/pg_query/src_common_keywords.c +15 -2
  482. data/ext/pg_query/src_common_kwlist_d.h +545 -498
  483. data/ext/pg_query/src_common_kwlookup.c +1 -1
  484. data/ext/pg_query/src_common_psprintf.c +1 -1
  485. data/ext/pg_query/src_common_stringinfo.c +4 -4
  486. data/ext/pg_query/src_common_wchar.c +717 -113
  487. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +49 -22
  488. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -18
  489. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1136 -1195
  490. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  491. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  492. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
  493. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +60 -60
  494. data/ext/pg_query/src_port_pg_bitutils.c +103 -40
  495. data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
  496. data/ext/pg_query/src_port_qsort.c +12 -224
  497. data/ext/pg_query/src_port_snprintf.c +51 -29
  498. data/ext/pg_query/src_port_strerror.c +9 -19
  499. data/ext/pg_query/src_port_strlcpy.c +79 -0
  500. data/lib/pg_query/deparse.rb +7 -1
  501. data/lib/pg_query/filter_columns.rb +7 -5
  502. data/lib/pg_query/fingerprint.rb +21 -9
  503. data/lib/pg_query/node.rb +18 -13
  504. data/lib/pg_query/param_refs.rb +1 -1
  505. data/lib/pg_query/parse.rb +141 -50
  506. data/lib/pg_query/pg_query_pb.rb +175 -3031
  507. data/lib/pg_query/treewalker.rb +26 -2
  508. data/lib/pg_query/truncate.rb +54 -8
  509. data/lib/pg_query/version.rb +1 -1
  510. data/lib/pg_query.rb +0 -1
  511. metadata +443 -380
  512. data/ext/pg_query/guc-file.c +0 -0
  513. data/ext/pg_query/include/access/rmgr.h +0 -35
  514. data/ext/pg_query/include/access/xloginsert.h +0 -64
  515. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  516. data/ext/pg_query/include/catalog/genbki.h +0 -64
  517. data/ext/pg_query/include/catalog/indexing.h +0 -366
  518. data/ext/pg_query/include/commands/variable.h +0 -38
  519. data/ext/pg_query/include/common/ip.h +0 -37
  520. data/ext/pg_query/include/common/string.h +0 -19
  521. data/ext/pg_query/include/getaddrinfo.h +0 -162
  522. data/ext/pg_query/include/kwlist_d.h +0 -1072
  523. data/ext/pg_query/include/nodes/value.h +0 -61
  524. data/ext/pg_query/include/parser/gram.h +0 -1067
  525. data/ext/pg_query/include/parser/kwlist.h +0 -477
  526. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  527. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  528. data/ext/pg_query/include/parser/parse_target.h +0 -46
  529. data/ext/pg_query/include/parser/parser.h +0 -41
  530. data/ext/pg_query/include/pg_config_os.h +0 -8
  531. data/ext/pg_query/include/pgstat.h +0 -1487
  532. data/ext/pg_query/include/portability/instr_time.h +0 -256
  533. data/ext/pg_query/include/postmaster/fork_process.h +0 -17
  534. data/ext/pg_query/include/replication/logicalproto.h +0 -110
  535. data/ext/pg_query/include/replication/logicalworker.h +0 -19
  536. data/ext/pg_query/include/replication/reorderbuffer.h +0 -467
  537. data/ext/pg_query/include/storage/relfilenode.h +0 -99
  538. data/ext/pg_query/include/utils/dynahash.h +0 -19
  539. data/ext/pg_query/include/utils/pg_lsn.h +0 -29
  540. data/ext/pg_query/include/utils/pidfile.h +0 -56
  541. data/ext/pg_query/include/utils/ps_status.h +0 -25
  542. data/ext/pg_query/include/utils/regproc.h +0 -28
  543. data/ext/pg_query/include/utils/rls.h +0 -50
  544. data/ext/pg_query/include/utils/tzparser.h +0 -39
  545. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -651
  546. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  547. data/ext/pg_query/src_backend_postmaster_postmaster.c +0 -2230
  548. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -370
  549. data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1086
  550. data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1831
  551. data/ext/pg_query/src_common_string.c +0 -86
  552. data/ext/pg_query/src_port_erand48.c +0 -127
  553. data/ext/pg_query/src_port_pgsleep.c +0 -69
  554. data/ext/pg_query/src_port_random.c +0 -31
  555. data/ext/pg_query/src_port_strnlen.c +0 -39
  556. data/lib/pg_query/json_field_names.rb +0 -1402
  557. /data/ext/pg_query/include/{pg_config_ext.h → postgres/pg_config_ext.h} +0 -0
@@ -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-2023, 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
  */
@@ -63,38 +63,64 @@ typedef enum OnCommitAction
63
63
  typedef struct RangeVar
64
64
  {
65
65
  NodeTag type;
66
- char *catalogname; /* the catalog (database) name, or NULL */
67
- char *schemaname; /* the schema name, or NULL */
68
- char *relname; /* the relation/sequence name */
69
- bool inh; /* expand rel by inheritance? recursively act
70
- * on children? */
71
- char relpersistence; /* see RELPERSISTENCE_* in pg_class.h */
72
- Alias *alias; /* table alias & optional column aliases */
73
- int location; /* token location, or -1 if unknown */
66
+
67
+ /* the catalog (database) name, or NULL */
68
+ char *catalogname;
69
+
70
+ /* the schema name, or NULL */
71
+ char *schemaname;
72
+
73
+ /* the relation/sequence name */
74
+ char *relname;
75
+
76
+ /* expand rel by inheritance? recursively act on children? */
77
+ bool inh;
78
+
79
+ /* see RELPERSISTENCE_* in pg_class.h */
80
+ char relpersistence;
81
+
82
+ /* table alias & optional column aliases */
83
+ Alias *alias;
84
+
85
+ /* token location, or -1 if unknown */
86
+ int location;
74
87
  } RangeVar;
75
88
 
76
89
  /*
77
90
  * TableFunc - node for a table function, such as XMLTABLE.
78
91
  *
79
- * Entries in the ns_names list are either string Value nodes containing
92
+ * Entries in the ns_names list are either String nodes containing
80
93
  * literal namespace names, or NULL pointers to represent DEFAULT.
81
94
  */
82
95
  typedef struct TableFunc
83
96
  {
84
97
  NodeTag type;
85
- List *ns_uris; /* list of namespace URI expressions */
86
- List *ns_names; /* list of namespace names or NULL */
87
- Node *docexpr; /* input document expression */
88
- Node *rowexpr; /* row filter expression */
89
- List *colnames; /* column names (list of String) */
90
- List *coltypes; /* OID list of column type OIDs */
91
- List *coltypmods; /* integer list of column typmods */
92
- List *colcollations; /* OID list of column collation OIDs */
93
- List *colexprs; /* list of column filter expressions */
94
- List *coldefexprs; /* list of column default expressions */
95
- Bitmapset *notnulls; /* nullability flag for each output column */
96
- int ordinalitycol; /* counts from 0; -1 if none specified */
97
- int location; /* token location, or -1 if unknown */
98
+ /* list of namespace URI expressions */
99
+ List *ns_uris pg_node_attr(query_jumble_ignore);
100
+ /* list of namespace names or NULL */
101
+ List *ns_names pg_node_attr(query_jumble_ignore);
102
+ /* input document expression */
103
+ Node *docexpr;
104
+ /* row filter expression */
105
+ Node *rowexpr;
106
+ /* column names (list of String) */
107
+ List *colnames pg_node_attr(query_jumble_ignore);
108
+ /* OID list of column type OIDs */
109
+ List *coltypes pg_node_attr(query_jumble_ignore);
110
+ /* integer list of column typmods */
111
+ List *coltypmods pg_node_attr(query_jumble_ignore);
112
+ /* OID list of column collation OIDs */
113
+ List *colcollations pg_node_attr(query_jumble_ignore);
114
+ /* list of column filter expressions */
115
+ List *colexprs;
116
+ /* list of column default expressions */
117
+ List *coldefexprs pg_node_attr(query_jumble_ignore);
118
+ /* nullability flag for each output column */
119
+ Bitmapset *notnulls pg_node_attr(query_jumble_ignore);
120
+ /* counts from 0; -1 if none specified */
121
+ int ordinalitycol pg_node_attr(query_jumble_ignore);
122
+ /* token location, or -1 if unknown */
123
+ int location;
98
124
  } TableFunc;
99
125
 
100
126
  /*
@@ -102,8 +128,10 @@ typedef struct TableFunc
102
128
  * CREATE MATERIALIZED VIEW
103
129
  *
104
130
  * For CREATE MATERIALIZED VIEW, viewQuery is the parsed-but-not-rewritten
105
- * SELECT Query for the view; otherwise it's NULL. (Although it's actually
106
- * Query*, we declare it as Node* to avoid a forward reference.)
131
+ * SELECT Query for the view; otherwise it's NULL. This is irrelevant in
132
+ * the query jumbling as CreateTableAsStmt already includes a reference to
133
+ * its own Query, so ignore it. (Although it's actually Query*, we declare
134
+ * it as Node* to avoid a forward reference.)
107
135
  */
108
136
  typedef struct IntoClause
109
137
  {
@@ -115,7 +143,8 @@ typedef struct IntoClause
115
143
  List *options; /* options from WITH clause */
116
144
  OnCommitAction onCommit; /* what do we do at COMMIT? */
117
145
  char *tableSpaceName; /* table space to use, or NULL */
118
- Node *viewQuery; /* materialized view's SELECT query */
146
+ /* materialized view's SELECT query */
147
+ Node *viewQuery pg_node_attr(query_jumble_ignore);
119
148
  bool skipData; /* true for WITH NO DATA */
120
149
  } IntoClause;
121
150
 
@@ -135,6 +164,8 @@ typedef struct IntoClause
135
164
  */
136
165
  typedef struct Expr
137
166
  {
167
+ pg_node_attr(abstract)
168
+
138
169
  NodeTag type;
139
170
  } Expr;
140
171
 
@@ -158,6 +189,18 @@ typedef struct Expr
158
189
  * than a heap column. (In ForeignScan and CustomScan plan nodes, INDEX_VAR
159
190
  * is abused to signify references to columns of a custom scan tuple type.)
160
191
  *
192
+ * ROWID_VAR is used in the planner to identify nonce variables that carry
193
+ * row identity information during UPDATE/DELETE/MERGE. This value should
194
+ * never be seen outside the planner.
195
+ *
196
+ * varnullingrels is the set of RT indexes of outer joins that can force
197
+ * the Var's value to null (at the point where it appears in the query).
198
+ * See optimizer/README for discussion of that.
199
+ *
200
+ * varlevelsup is greater than zero in Vars that represent outer references.
201
+ * Note that it affects the meaning of all of varno, varnullingrels, and
202
+ * varnosyn, all of which refer to the range table of that query level.
203
+ *
161
204
  * In the parser, varnosyn and varattnosyn are either identical to
162
205
  * varno/varattno, or they specify the column's position in an aliased JOIN
163
206
  * RTE that hides the semantic referent RTE's refname. This is a syntactic
@@ -168,11 +211,12 @@ typedef struct Expr
168
211
  * in the planner and doesn't correspond to any simple relation column may
169
212
  * have varnosyn = varattnosyn = 0.
170
213
  */
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 */
214
+ #define INNER_VAR (-1) /* reference to inner subplan */
215
+ #define OUTER_VAR (-2) /* reference to outer subplan */
216
+ #define INDEX_VAR (-3) /* reference to index column */
217
+ #define ROWID_VAR (-4) /* row identity column during planning */
174
218
 
175
- #define IS_SPECIAL_VARNO(varno) ((varno) >= INNER_VAR)
219
+ #define IS_SPECIAL_VARNO(varno) ((int) (varno) < 0)
176
220
 
177
221
  /* Symbols for the indexes of the special RTE entries in rules */
178
222
  #define PRS2_OLD_VARNO 1
@@ -181,19 +225,50 @@ typedef struct Expr
181
225
  typedef struct Var
182
226
  {
183
227
  Expr xpr;
184
- Index varno; /* index of this var's relation in the range
185
- * table, or INNER_VAR/OUTER_VAR/INDEX_VAR */
186
- AttrNumber varattno; /* attribute number of this var, or zero for
187
- * all attrs ("whole-row Var") */
188
- Oid vartype; /* pg_type OID for the type of this var */
189
- int32 vartypmod; /* pg_attribute typmod value */
190
- Oid varcollid; /* OID of collation, or InvalidOid if none */
191
- Index varlevelsup; /* for subquery variables referencing outer
192
- * relations; 0 in a normal var, >0 means N
193
- * levels up */
194
- Index varnosyn; /* syntactic relation index (0 if unknown) */
195
- AttrNumber varattnosyn; /* syntactic attribute number */
196
- int location; /* token location, or -1 if unknown */
228
+
229
+ /*
230
+ * index of this var's relation in the range table, or
231
+ * INNER_VAR/OUTER_VAR/etc
232
+ */
233
+ int varno;
234
+
235
+ /*
236
+ * attribute number of this var, or zero for all attrs ("whole-row Var")
237
+ */
238
+ AttrNumber varattno;
239
+
240
+ /* pg_type OID for the type of this var */
241
+ Oid vartype pg_node_attr(query_jumble_ignore);
242
+ /* pg_attribute typmod value */
243
+ int32 vartypmod pg_node_attr(query_jumble_ignore);
244
+ /* OID of collation, or InvalidOid if none */
245
+ Oid varcollid pg_node_attr(query_jumble_ignore);
246
+
247
+ /*
248
+ * RT indexes of outer joins that can replace the Var's value with null.
249
+ * We can omit varnullingrels in the query jumble, because it's fully
250
+ * determined by varno/varlevelsup plus the Var's query location.
251
+ */
252
+ Bitmapset *varnullingrels pg_node_attr(query_jumble_ignore);
253
+
254
+ /*
255
+ * for subquery variables referencing outer relations; 0 in a normal var,
256
+ * >0 means N levels up
257
+ */
258
+ Index varlevelsup;
259
+
260
+ /*
261
+ * varnosyn/varattnosyn are ignored for equality, because Vars with
262
+ * different syntactic identifiers are semantically the same as long as
263
+ * their varno/varattno match.
264
+ */
265
+ /* syntactic relation index (0 if unknown) */
266
+ Index varnosyn pg_node_attr(equal_ignore, query_jumble_ignore);
267
+ /* syntactic attribute number */
268
+ AttrNumber varattnosyn pg_node_attr(equal_ignore, query_jumble_ignore);
269
+
270
+ /* token location, or -1 if unknown */
271
+ int location;
197
272
  } Var;
198
273
 
199
274
  /*
@@ -203,22 +278,39 @@ typedef struct Var
203
278
  * must be in non-extended form (4-byte header, no compression or external
204
279
  * references). This ensures that the Const node is self-contained and makes
205
280
  * it more likely that equal() will see logically identical values as equal.
281
+ *
282
+ * Only the constant type OID is relevant for the query jumbling.
206
283
  */
207
284
  typedef struct Const
208
285
  {
286
+ pg_node_attr(custom_copy_equal, custom_read_write)
287
+
209
288
  Expr xpr;
210
- Oid consttype; /* pg_type OID of the constant's datatype */
211
- int32 consttypmod; /* typmod value, if any */
212
- Oid constcollid; /* OID of collation, or InvalidOid if none */
213
- int constlen; /* typlen of the constant's datatype */
214
- Datum constvalue; /* the constant's value */
215
- bool constisnull; /* whether the constant is null (if true,
216
- * constvalue is undefined) */
217
- bool constbyval; /* whether this datatype is passed by value.
218
- * If true, then all the information is stored
219
- * in the Datum. If false, then the Datum
220
- * contains a pointer to the information. */
221
- int location; /* token location, or -1 if unknown */
289
+ /* pg_type OID of the constant's datatype */
290
+ Oid consttype;
291
+ /* typmod value, if any */
292
+ int32 consttypmod pg_node_attr(query_jumble_ignore);
293
+ /* OID of collation, or InvalidOid if none */
294
+ Oid constcollid pg_node_attr(query_jumble_ignore);
295
+ /* typlen of the constant's datatype */
296
+ int constlen pg_node_attr(query_jumble_ignore);
297
+ /* the constant's value */
298
+ Datum constvalue pg_node_attr(query_jumble_ignore);
299
+ /* whether the constant is null (if true, constvalue is undefined) */
300
+ bool constisnull pg_node_attr(query_jumble_ignore);
301
+
302
+ /*
303
+ * Whether this datatype is passed by value. If true, then all the
304
+ * information is stored in the Datum. If false, then the Datum contains
305
+ * a pointer to the information.
306
+ */
307
+ bool constbyval pg_node_attr(query_jumble_ignore);
308
+
309
+ /*
310
+ * token location, or -1 if unknown. All constants are tracked as
311
+ * locations in query jumbling, to be marked as parameters.
312
+ */
313
+ int location pg_node_attr(query_jumble_location);
222
314
  } Const;
223
315
 
224
316
  /*
@@ -262,9 +354,12 @@ typedef struct Param
262
354
  ParamKind paramkind; /* kind of parameter. See above */
263
355
  int paramid; /* numeric ID for parameter */
264
356
  Oid paramtype; /* pg_type OID of parameter's datatype */
265
- int32 paramtypmod; /* typmod value, if known */
266
- Oid paramcollid; /* OID of collation, or InvalidOid if none */
267
- int location; /* token location, or -1 if unknown */
357
+ /* typmod value, if known */
358
+ int32 paramtypmod pg_node_attr(query_jumble_ignore);
359
+ /* OID of collation, or InvalidOid if none */
360
+ Oid paramcollid pg_node_attr(query_jumble_ignore);
361
+ /* token location, or -1 if unknown */
362
+ int location;
268
363
  } Param;
269
364
 
270
365
  /*
@@ -299,34 +394,95 @@ typedef struct Param
299
394
  * replaced with a single argument representing the partial-aggregate
300
395
  * transition values.
301
396
  *
397
+ * aggpresorted is set by the query planner for ORDER BY and DISTINCT
398
+ * aggregates where the chosen plan provides presorted input for this
399
+ * aggregate during execution.
400
+ *
302
401
  * aggsplit indicates the expected partial-aggregation mode for the Aggref's
303
402
  * parent plan node. It's always set to AGGSPLIT_SIMPLE in the parser, but
304
403
  * the planner might change it to something else. We use this mainly as
305
404
  * a crosscheck that the Aggrefs match the plan; but note that when aggsplit
306
405
  * indicates a non-final mode, aggtype reflects the transition data type
307
406
  * not the SQL-level output type of the aggregate.
407
+ *
408
+ * aggno and aggtransno are -1 in the parse stage, and are set in planning.
409
+ * Aggregates with the same 'aggno' represent the same aggregate expression,
410
+ * and can share the result. Aggregates with same 'transno' but different
411
+ * 'aggno' can share the same transition state, only the final function needs
412
+ * to be called separately.
413
+ *
414
+ * Information related to collations, transition types and internal states
415
+ * are irrelevant for the query jumbling.
308
416
  */
309
417
  typedef struct Aggref
310
418
  {
311
419
  Expr xpr;
312
- Oid aggfnoid; /* pg_proc Oid of the aggregate */
313
- Oid aggtype; /* type Oid of result of the aggregate */
314
- Oid aggcollid; /* OID of collation of result */
315
- Oid inputcollid; /* OID of collation that function should use */
316
- Oid aggtranstype; /* type Oid of aggregate's transition value */
317
- List *aggargtypes; /* type Oids of direct and aggregated args */
318
- List *aggdirectargs; /* direct arguments, if an ordered-set agg */
319
- List *args; /* aggregated arguments and sort expressions */
320
- List *aggorder; /* ORDER BY (list of SortGroupClause) */
321
- List *aggdistinct; /* DISTINCT (list of SortGroupClause) */
322
- Expr *aggfilter; /* FILTER expression, if any */
323
- bool aggstar; /* true if argument list was really '*' */
324
- bool aggvariadic; /* true if variadic arguments have been
325
- * combined into an array last argument */
326
- char aggkind; /* aggregate kind (see pg_aggregate.h) */
327
- Index agglevelsup; /* > 0 if agg belongs to outer query */
328
- AggSplit aggsplit; /* expected agg-splitting mode of parent Agg */
329
- int location; /* token location, or -1 if unknown */
420
+
421
+ /* pg_proc Oid of the aggregate */
422
+ Oid aggfnoid;
423
+
424
+ /* type Oid of result of the aggregate */
425
+ Oid aggtype pg_node_attr(query_jumble_ignore);
426
+
427
+ /* OID of collation of result */
428
+ Oid aggcollid pg_node_attr(query_jumble_ignore);
429
+
430
+ /* OID of collation that function should use */
431
+ Oid inputcollid pg_node_attr(query_jumble_ignore);
432
+
433
+ /*
434
+ * type Oid of aggregate's transition value; ignored for equal since it
435
+ * might not be set yet
436
+ */
437
+ Oid aggtranstype pg_node_attr(equal_ignore, query_jumble_ignore);
438
+
439
+ /* type Oids of direct and aggregated args */
440
+ List *aggargtypes pg_node_attr(query_jumble_ignore);
441
+
442
+ /* direct arguments, if an ordered-set agg */
443
+ List *aggdirectargs;
444
+
445
+ /* aggregated arguments and sort expressions */
446
+ List *args;
447
+
448
+ /* ORDER BY (list of SortGroupClause) */
449
+ List *aggorder;
450
+
451
+ /* DISTINCT (list of SortGroupClause) */
452
+ List *aggdistinct;
453
+
454
+ /* FILTER expression, if any */
455
+ Expr *aggfilter;
456
+
457
+ /* true if argument list was really '*' */
458
+ bool aggstar pg_node_attr(query_jumble_ignore);
459
+
460
+ /*
461
+ * true if variadic arguments have been combined into an array last
462
+ * argument
463
+ */
464
+ bool aggvariadic pg_node_attr(query_jumble_ignore);
465
+
466
+ /* aggregate kind (see pg_aggregate.h) */
467
+ char aggkind pg_node_attr(query_jumble_ignore);
468
+
469
+ /* aggregate input already sorted */
470
+ bool aggpresorted pg_node_attr(equal_ignore, query_jumble_ignore);
471
+
472
+ /* > 0 if agg belongs to outer query */
473
+ Index agglevelsup pg_node_attr(query_jumble_ignore);
474
+
475
+ /* expected agg-splitting mode of parent Agg */
476
+ AggSplit aggsplit pg_node_attr(query_jumble_ignore);
477
+
478
+ /* unique ID within the Agg node */
479
+ int aggno pg_node_attr(query_jumble_ignore);
480
+
481
+ /* unique ID of transition state in the Agg */
482
+ int aggtransno pg_node_attr(query_jumble_ignore);
483
+
484
+ /* token location, or -1 if unknown */
485
+ int location;
330
486
  } Aggref;
331
487
 
332
488
  /*
@@ -352,44 +508,69 @@ typedef struct Aggref
352
508
  *
353
509
  * In raw parse output we have only the args list; parse analysis fills in the
354
510
  * refs list, and the planner fills in the cols list.
511
+ *
512
+ * All the fields used as information for an internal state are irrelevant
513
+ * for the query jumbling.
355
514
  */
356
515
  typedef struct GroupingFunc
357
516
  {
358
517
  Expr xpr;
359
- List *args; /* arguments, not evaluated but kept for
360
- * benefit of EXPLAIN etc. */
361
- List *refs; /* ressortgrouprefs of arguments */
362
- List *cols; /* actual column positions set by planner */
363
- Index agglevelsup; /* same as Aggref.agglevelsup */
364
- int location; /* token location */
518
+
519
+ /* arguments, not evaluated but kept for benefit of EXPLAIN etc. */
520
+ List *args pg_node_attr(query_jumble_ignore);
521
+
522
+ /* ressortgrouprefs of arguments */
523
+ List *refs pg_node_attr(equal_ignore);
524
+
525
+ /* actual column positions set by planner */
526
+ List *cols pg_node_attr(equal_ignore, query_jumble_ignore);
527
+
528
+ /* same as Aggref.agglevelsup */
529
+ Index agglevelsup;
530
+
531
+ /* token location */
532
+ int location;
365
533
  } GroupingFunc;
366
534
 
367
535
  /*
368
536
  * WindowFunc
537
+ *
538
+ * Collation information is irrelevant for the query jumbling, as is the
539
+ * internal state information of the node like "winstar" and "winagg".
369
540
  */
370
541
  typedef struct WindowFunc
371
542
  {
372
543
  Expr xpr;
373
- Oid winfnoid; /* pg_proc Oid of the function */
374
- Oid wintype; /* type Oid of result of the window function */
375
- Oid wincollid; /* OID of collation of result */
376
- Oid inputcollid; /* OID of collation that function should use */
377
- List *args; /* arguments to the window function */
378
- Expr *aggfilter; /* FILTER expression, if any */
379
- Index winref; /* index of associated WindowClause */
380
- bool winstar; /* true if argument list was really '*' */
381
- bool winagg; /* is function a simple aggregate? */
382
- int location; /* token location, or -1 if unknown */
544
+ /* pg_proc Oid of the function */
545
+ Oid winfnoid;
546
+ /* type Oid of result of the window function */
547
+ Oid wintype pg_node_attr(query_jumble_ignore);
548
+ /* OID of collation of result */
549
+ Oid wincollid pg_node_attr(query_jumble_ignore);
550
+ /* OID of collation that function should use */
551
+ Oid inputcollid pg_node_attr(query_jumble_ignore);
552
+ /* arguments to the window function */
553
+ List *args;
554
+ /* FILTER expression, if any */
555
+ Expr *aggfilter;
556
+ /* index of associated WindowClause */
557
+ Index winref;
558
+ /* true if argument list was really '*' */
559
+ bool winstar pg_node_attr(query_jumble_ignore);
560
+ /* is function a simple aggregate? */
561
+ bool winagg pg_node_attr(query_jumble_ignore);
562
+ /* token location, or -1 if unknown */
563
+ int location;
383
564
  } WindowFunc;
384
565
 
385
- /* ----------------
386
- * SubscriptingRef: describes a subscripting operation over a container
387
- * (array, etc).
566
+ /*
567
+ * SubscriptingRef: describes a subscripting operation over a container
568
+ * (array, etc).
388
569
  *
389
570
  * 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
571
+ * fetching a part of a container (e.g. an array slice), storing a single
572
+ * element into a container, or storing a slice. The "store" cases work with
573
+ * an initial container value and a source value that is inserted into the
393
574
  * appropriate part of the container; the result of the operation is an
394
575
  * entire new modified container value.
395
576
  *
@@ -402,33 +583,51 @@ typedef struct WindowFunc
402
583
  *
403
584
  * In the slice case, individual expressions in the subscript lists can be
404
585
  * 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.
586
+ * (Non-array containers may or may not support this.)
587
+ *
588
+ * refcontainertype is the actual container type that determines the
589
+ * subscripting semantics. (This will generally be either the exposed type of
590
+ * refexpr, or the base type if that is a domain.) refelemtype is the type of
591
+ * the container's elements; this is saved for the use of the subscripting
592
+ * functions, but is not used by the core code. refrestype, reftypmod, and
593
+ * refcollid describe the type of the SubscriptingRef's result. In a store
594
+ * expression, refrestype will always match refcontainertype; in a fetch,
595
+ * it could be refelemtype for an element fetch, or refcontainertype for a
596
+ * slice fetch, or possibly something else as determined by type-specific
597
+ * subscripting logic. Likewise, reftypmod and refcollid will match the
598
+ * container's properties in a store, but could be different in a fetch.
599
+ *
600
+ * Any internal state data is ignored for the query jumbling.
409
601
  *
410
602
  * 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
- * ----------------
603
+ * expanded container, then the implementation is allowed to modify that
604
+ * object in-place and return the same object.
414
605
  */
415
606
  typedef struct SubscriptingRef
416
607
  {
417
608
  Expr xpr;
418
- 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 */
422
- List *refupperindexpr; /* expressions that evaluate to upper
423
- * container indexes */
424
- List *reflowerindexpr; /* expressions that evaluate to lower
425
- * container indexes, or NIL for single
426
- * container element */
427
- Expr *refexpr; /* the expression that evaluates to a
428
- * container value */
429
-
430
- Expr *refassgnexpr; /* expression for the source value, or NULL if
431
- * fetch */
609
+ /* type of the container proper */
610
+ Oid refcontainertype pg_node_attr(query_jumble_ignore);
611
+ /* the container type's pg_type.typelem */
612
+ Oid refelemtype pg_node_attr(query_jumble_ignore);
613
+ /* type of the SubscriptingRef's result */
614
+ Oid refrestype pg_node_attr(query_jumble_ignore);
615
+ /* typmod of the result */
616
+ int32 reftypmod pg_node_attr(query_jumble_ignore);
617
+ /* collation of result, or InvalidOid if none */
618
+ Oid refcollid pg_node_attr(query_jumble_ignore);
619
+ /* expressions that evaluate to upper container indexes */
620
+ List *refupperindexpr;
621
+
622
+ /*
623
+ * expressions that evaluate to lower container indexes, or NIL for single
624
+ * container element.
625
+ */
626
+ List *reflowerindexpr;
627
+ /* the expression that evaluates to a container value */
628
+ Expr *refexpr;
629
+ /* expression for the source value, or NULL if fetch */
630
+ Expr *refassgnexpr;
432
631
  } SubscriptingRef;
433
632
 
434
633
  /*
@@ -441,11 +640,15 @@ typedef enum CoercionContext
441
640
  {
442
641
  COERCION_IMPLICIT, /* coercion in context of expression */
443
642
  COERCION_ASSIGNMENT, /* coercion in context of assignment */
643
+ COERCION_PLPGSQL, /* if no assignment cast, use CoerceViaIO */
444
644
  COERCION_EXPLICIT /* explicit cast operation */
445
645
  } CoercionContext;
446
646
 
447
647
  /*
448
- * CoercionForm - how to display a node that could have come from a cast
648
+ * CoercionForm - how to display a FuncExpr or related node
649
+ *
650
+ * "Coercion" is a bit of a misnomer, since this value records other
651
+ * special syntaxes besides casts, but for now we'll keep this naming.
449
652
  *
450
653
  * NB: equal() ignores CoercionForm fields, therefore this *must* not carry
451
654
  * any semantically significant information. We need that behavior so that
@@ -457,25 +660,41 @@ typedef enum CoercionForm
457
660
  {
458
661
  COERCE_EXPLICIT_CALL, /* display as a function call */
459
662
  COERCE_EXPLICIT_CAST, /* display as an explicit cast */
460
- COERCE_IMPLICIT_CAST /* implicit cast, so hide it */
663
+ COERCE_IMPLICIT_CAST, /* implicit cast, so hide it */
664
+ COERCE_SQL_SYNTAX /* display with SQL-mandated special syntax */
461
665
  } CoercionForm;
462
666
 
463
667
  /*
464
668
  * FuncExpr - expression node for a function call
669
+ *
670
+ * Collation information is irrelevant for the query jumbling, only the
671
+ * arguments and the function OID matter.
465
672
  */
466
673
  typedef struct FuncExpr
467
674
  {
468
675
  Expr xpr;
469
- Oid funcid; /* PG_PROC OID of the function */
470
- Oid funcresulttype; /* PG_TYPE OID of result value */
471
- bool funcretset; /* true if function returns set */
472
- bool funcvariadic; /* true if variadic arguments have been
473
- * combined into an array last argument */
474
- CoercionForm funcformat; /* how to display this function call */
475
- Oid funccollid; /* OID of collation of result */
476
- Oid inputcollid; /* OID of collation that function should use */
477
- List *args; /* arguments to the function */
478
- int location; /* token location, or -1 if unknown */
676
+ /* PG_PROC OID of the function */
677
+ Oid funcid;
678
+ /* PG_TYPE OID of result value */
679
+ Oid funcresulttype pg_node_attr(query_jumble_ignore);
680
+ /* true if function returns set */
681
+ bool funcretset pg_node_attr(query_jumble_ignore);
682
+
683
+ /*
684
+ * true if variadic arguments have been combined into an array last
685
+ * argument
686
+ */
687
+ bool funcvariadic pg_node_attr(query_jumble_ignore);
688
+ /* how to display this function call */
689
+ CoercionForm funcformat pg_node_attr(query_jumble_ignore);
690
+ /* OID of collation of result */
691
+ Oid funccollid pg_node_attr(query_jumble_ignore);
692
+ /* OID of collation that function should use */
693
+ Oid inputcollid pg_node_attr(query_jumble_ignore);
694
+ /* arguments to the function */
695
+ List *args;
696
+ /* token location, or -1 if unknown */
697
+ int location;
479
698
  } FuncExpr;
480
699
 
481
700
  /*
@@ -495,10 +714,14 @@ typedef struct FuncExpr
495
714
  typedef struct NamedArgExpr
496
715
  {
497
716
  Expr xpr;
498
- Expr *arg; /* the argument expression */
499
- char *name; /* the name */
500
- int argnumber; /* argument's number in positional notation */
501
- int location; /* argument name location, or -1 if unknown */
717
+ /* the argument expression */
718
+ Expr *arg;
719
+ /* the name */
720
+ char *name pg_node_attr(query_jumble_ignore);
721
+ /* argument's number in positional notation */
722
+ int argnumber;
723
+ /* argument name location, or -1 if unknown */
724
+ int location;
502
725
  } NamedArgExpr;
503
726
 
504
727
  /*
@@ -509,18 +732,38 @@ typedef struct NamedArgExpr
509
732
  * Note that opfuncid is not necessarily filled in immediately on creation
510
733
  * of the node. The planner makes sure it is valid before passing the node
511
734
  * tree to the executor, but during parsing/planning opfuncid can be 0.
735
+ * Therefore, equal() will accept a zero value as being equal to other values.
736
+ *
737
+ * Internal state information and collation data is irrelevant for the query
738
+ * jumbling.
512
739
  */
513
740
  typedef struct OpExpr
514
741
  {
515
742
  Expr xpr;
516
- Oid opno; /* PG_OPERATOR OID of the operator */
517
- Oid opfuncid; /* PG_PROC OID of underlying function */
518
- Oid opresulttype; /* PG_TYPE OID of result value */
519
- bool opretset; /* true if operator returns set */
520
- Oid opcollid; /* OID of collation of result */
521
- Oid inputcollid; /* OID of collation that operator should use */
522
- List *args; /* arguments to the operator (1 or 2) */
523
- int location; /* token location, or -1 if unknown */
743
+
744
+ /* PG_OPERATOR OID of the operator */
745
+ Oid opno;
746
+
747
+ /* PG_PROC OID of underlying function */
748
+ Oid opfuncid pg_node_attr(equal_ignore_if_zero, query_jumble_ignore);
749
+
750
+ /* PG_TYPE OID of result value */
751
+ Oid opresulttype pg_node_attr(query_jumble_ignore);
752
+
753
+ /* true if operator returns set */
754
+ bool opretset pg_node_attr(query_jumble_ignore);
755
+
756
+ /* OID of collation of result */
757
+ Oid opcollid pg_node_attr(query_jumble_ignore);
758
+
759
+ /* OID of collation that operator should use */
760
+ Oid inputcollid pg_node_attr(query_jumble_ignore);
761
+
762
+ /* arguments to the operator (1 or 2) */
763
+ List *args;
764
+
765
+ /* token location, or -1 if unknown */
766
+ int location;
524
767
  } OpExpr;
525
768
 
526
769
  /*
@@ -552,16 +795,55 @@ typedef OpExpr NullIfExpr;
552
795
  * is almost the same as for the underlying operator, but we need a useOr
553
796
  * flag to remember whether it's ANY or ALL, and we don't have to store
554
797
  * the result type (or the collation) because it must be boolean.
798
+ *
799
+ * A ScalarArrayOpExpr with a valid hashfuncid is evaluated during execution
800
+ * by building a hash table containing the Const values from the RHS arg.
801
+ * This table is probed during expression evaluation. The planner will set
802
+ * hashfuncid to the hash function which must be used to build and probe the
803
+ * hash table. The executor determines if it should use hash-based checks or
804
+ * the more traditional means based on if the hashfuncid is set or not.
805
+ *
806
+ * When performing hashed NOT IN, the negfuncid will also be set to the
807
+ * equality function which the hash table must use to build and probe the hash
808
+ * table. opno and opfuncid will remain set to the <> operator and its
809
+ * corresponding function and won't be used during execution. For
810
+ * non-hashtable based NOT INs, negfuncid will be set to InvalidOid. See
811
+ * convert_saop_to_hashed_saop().
812
+ *
813
+ * Similar to OpExpr, opfuncid, hashfuncid, and negfuncid are not necessarily
814
+ * filled in right away, so will be ignored for equality if they are not set
815
+ * yet.
816
+ *
817
+ * OID entries of the internal function types are irrelevant for the query
818
+ * jumbling, but the operator OID and the arguments are.
555
819
  */
556
820
  typedef struct ScalarArrayOpExpr
557
821
  {
558
822
  Expr xpr;
559
- Oid opno; /* PG_OPERATOR OID of the operator */
560
- Oid opfuncid; /* PG_PROC OID of underlying function */
561
- bool useOr; /* true for ANY, false for ALL */
562
- Oid inputcollid; /* OID of collation that operator should use */
563
- List *args; /* the scalar and array operands */
564
- int location; /* token location, or -1 if unknown */
823
+
824
+ /* PG_OPERATOR OID of the operator */
825
+ Oid opno;
826
+
827
+ /* PG_PROC OID of comparison function */
828
+ Oid opfuncid pg_node_attr(equal_ignore_if_zero, query_jumble_ignore);
829
+
830
+ /* PG_PROC OID of hash func or InvalidOid */
831
+ Oid hashfuncid pg_node_attr(equal_ignore_if_zero, query_jumble_ignore);
832
+
833
+ /* PG_PROC OID of negator of opfuncid function or InvalidOid. See above */
834
+ Oid negfuncid pg_node_attr(equal_ignore_if_zero, query_jumble_ignore);
835
+
836
+ /* true for ANY, false for ALL */
837
+ bool useOr;
838
+
839
+ /* OID of collation that operator should use */
840
+ Oid inputcollid pg_node_attr(query_jumble_ignore);
841
+
842
+ /* the scalar and array operands */
843
+ List *args;
844
+
845
+ /* token location, or -1 if unknown */
846
+ int location;
565
847
  } ScalarArrayOpExpr;
566
848
 
567
849
  /*
@@ -578,6 +860,8 @@ typedef enum BoolExprType
578
860
 
579
861
  typedef struct BoolExpr
580
862
  {
863
+ pg_node_attr(custom_read_write)
864
+
581
865
  Expr xpr;
582
866
  BoolExprType boolop;
583
867
  List *args; /* arguments to this expression */
@@ -654,8 +938,10 @@ typedef struct SubLink
654
938
  SubLinkType subLinkType; /* see above */
655
939
  int subLinkId; /* ID (1..n); 0 if not MULTIEXPR */
656
940
  Node *testexpr; /* outer-query test for ALL/ANY/ROWCOMPARE */
657
- List *operName; /* originally specified operator name */
658
- Node *subselect; /* subselect as Query* or raw parsetree */
941
+ /* originally specified operator name */
942
+ List *operName pg_node_attr(query_jumble_ignore);
943
+ /* subselect as Query* or raw parsetree */
944
+ Node *subselect;
659
945
  int location; /* token location, or -1 if unknown */
660
946
  } SubLink;
661
947
 
@@ -689,9 +975,9 @@ typedef struct SubLink
689
975
  * The values are assigned to the global PARAM_EXEC params indexed by parParam
690
976
  * (the parParam and args lists must have the same ordering). setParam is a
691
977
  * list of the PARAM_EXEC params that are computed by the sub-select, if it
692
- * is an initplan; they are listed in order by sub-select output column
693
- * position. (parParam and setParam are integer Lists, not Bitmapsets,
694
- * because their ordering is significant.)
978
+ * is an initplan or MULTIEXPR plan; they are listed in order by sub-select
979
+ * output column position. (parParam and setParam are integer Lists, not
980
+ * Bitmapsets, because their ordering is significant.)
695
981
  *
696
982
  * Also, the planner computes startup and per-call costs for use of the
697
983
  * SubPlan. Note that these include the cost of the subquery proper,
@@ -699,6 +985,8 @@ typedef struct SubLink
699
985
  */
700
986
  typedef struct SubPlan
701
987
  {
988
+ pg_node_attr(no_query_jumble)
989
+
702
990
  Expr xpr;
703
991
  /* Fields copied from original SubLink: */
704
992
  SubLinkType subLinkType; /* see above */
@@ -724,8 +1012,8 @@ typedef struct SubPlan
724
1012
  /* Note: parallel_safe does not consider contents of testexpr or args */
725
1013
  /* Information for passing params into and out of the subselect: */
726
1014
  /* setParam and parParam are lists of integers (param IDs) */
727
- List *setParam; /* initplan subqueries have to set these
728
- * Params for parent plan */
1015
+ List *setParam; /* initplan and MULTIEXPR subqueries have to
1016
+ * set these Params for parent plan */
729
1017
  List *parParam; /* indices of input Params from parent plan */
730
1018
  List *args; /* exprs to pass as parParam values */
731
1019
  /* Estimated execution costs: */
@@ -736,6 +1024,9 @@ typedef struct SubPlan
736
1024
  /*
737
1025
  * AlternativeSubPlan - expression node for a choice among SubPlans
738
1026
  *
1027
+ * This is used only transiently during planning: by the time the plan
1028
+ * reaches the executor, all AlternativeSubPlan nodes have been removed.
1029
+ *
739
1030
  * The subplans are given as a List so that the node definition need not
740
1031
  * change if there's ever more than two alternatives. For the moment,
741
1032
  * though, there are always exactly two; and the first one is the fast-start
@@ -743,6 +1034,8 @@ typedef struct SubPlan
743
1034
  */
744
1035
  typedef struct AlternativeSubPlan
745
1036
  {
1037
+ pg_node_attr(no_query_jumble)
1038
+
746
1039
  Expr xpr;
747
1040
  List *subplans; /* SubPlan(s) with equivalent results */
748
1041
  } AlternativeSubPlan;
@@ -761,10 +1054,12 @@ typedef struct FieldSelect
761
1054
  Expr xpr;
762
1055
  Expr *arg; /* input expression */
763
1056
  AttrNumber fieldnum; /* attribute number of field to extract */
764
- Oid resulttype; /* type of the field (result type of this
765
- * node) */
766
- int32 resulttypmod; /* output typmod (usually -1) */
767
- Oid resultcollid; /* OID of collation of the field */
1057
+ /* type of the field (result type of this node) */
1058
+ Oid resulttype pg_node_attr(query_jumble_ignore);
1059
+ /* output typmod (usually -1) */
1060
+ int32 resulttypmod pg_node_attr(query_jumble_ignore);
1061
+ /* OID of collation of the field */
1062
+ Oid resultcollid pg_node_attr(query_jumble_ignore);
768
1063
  } FieldSelect;
769
1064
 
770
1065
  /* ----------------
@@ -790,8 +1085,10 @@ typedef struct FieldStore
790
1085
  Expr xpr;
791
1086
  Expr *arg; /* input tuple value */
792
1087
  List *newvals; /* new value(s) for field(s) */
793
- List *fieldnums; /* integer list of field attnums */
794
- Oid resulttype; /* type of result (same as type of arg) */
1088
+ /* integer list of field attnums */
1089
+ List *fieldnums pg_node_attr(query_jumble_ignore);
1090
+ /* type of result (same as type of arg) */
1091
+ Oid resulttype pg_node_attr(query_jumble_ignore);
795
1092
  /* Like RowExpr, we deliberately omit a typmod and collation here */
796
1093
  } FieldStore;
797
1094
 
@@ -813,9 +1110,12 @@ typedef struct RelabelType
813
1110
  Expr xpr;
814
1111
  Expr *arg; /* input expression */
815
1112
  Oid resulttype; /* output type of coercion expression */
816
- int32 resulttypmod; /* output typmod (usually -1) */
817
- Oid resultcollid; /* OID of collation, or InvalidOid if none */
818
- CoercionForm relabelformat; /* how to display this node */
1113
+ /* output typmod (usually -1) */
1114
+ int32 resulttypmod pg_node_attr(query_jumble_ignore);
1115
+ /* OID of collation, or InvalidOid if none */
1116
+ Oid resultcollid pg_node_attr(query_jumble_ignore);
1117
+ /* how to display this node */
1118
+ CoercionForm relabelformat pg_node_attr(query_jumble_ignore);
819
1119
  int location; /* token location, or -1 if unknown */
820
1120
  } RelabelType;
821
1121
 
@@ -834,8 +1134,10 @@ typedef struct CoerceViaIO
834
1134
  Expr *arg; /* input expression */
835
1135
  Oid resulttype; /* output type of coercion */
836
1136
  /* output typmod is not stored, but is presumed -1 */
837
- Oid resultcollid; /* OID of collation, or InvalidOid if none */
838
- CoercionForm coerceformat; /* how to display this node */
1137
+ /* OID of collation, or InvalidOid if none */
1138
+ Oid resultcollid pg_node_attr(query_jumble_ignore);
1139
+ /* how to display this node */
1140
+ CoercionForm coerceformat pg_node_attr(query_jumble_ignore);
839
1141
  int location; /* token location, or -1 if unknown */
840
1142
  } CoerceViaIO;
841
1143
 
@@ -858,9 +1160,12 @@ typedef struct ArrayCoerceExpr
858
1160
  Expr *arg; /* input expression (yields an array) */
859
1161
  Expr *elemexpr; /* expression representing per-element work */
860
1162
  Oid resulttype; /* output type of coercion (an array type) */
861
- int32 resulttypmod; /* output typmod (also element typmod) */
862
- Oid resultcollid; /* OID of collation, or InvalidOid if none */
863
- CoercionForm coerceformat; /* how to display this node */
1163
+ /* output typmod (also element typmod) */
1164
+ int32 resulttypmod pg_node_attr(query_jumble_ignore);
1165
+ /* OID of collation, or InvalidOid if none */
1166
+ Oid resultcollid pg_node_attr(query_jumble_ignore);
1167
+ /* how to display this node */
1168
+ CoercionForm coerceformat pg_node_attr(query_jumble_ignore);
864
1169
  int location; /* token location, or -1 if unknown */
865
1170
  } ArrayCoerceExpr;
866
1171
 
@@ -883,7 +1188,8 @@ typedef struct ConvertRowtypeExpr
883
1188
  Expr *arg; /* input expression */
884
1189
  Oid resulttype; /* output type (always a composite type) */
885
1190
  /* Like RowExpr, we deliberately omit a typmod and collation here */
886
- CoercionForm convertformat; /* how to display this node */
1191
+ /* how to display this node */
1192
+ CoercionForm convertformat pg_node_attr(query_jumble_ignore);
887
1193
  int location; /* token location, or -1 if unknown */
888
1194
  } ConvertRowtypeExpr;
889
1195
 
@@ -927,8 +1233,10 @@ typedef struct CollateExpr
927
1233
  typedef struct CaseExpr
928
1234
  {
929
1235
  Expr xpr;
930
- Oid casetype; /* type of expression result */
931
- Oid casecollid; /* OID of collation, or InvalidOid if none */
1236
+ /* type of expression result */
1237
+ Oid casetype pg_node_attr(query_jumble_ignore);
1238
+ /* OID of collation, or InvalidOid if none */
1239
+ Oid casecollid pg_node_attr(query_jumble_ignore);
932
1240
  Expr *arg; /* implicit equality comparison argument */
933
1241
  List *args; /* the arguments (list of WHEN clauses) */
934
1242
  Expr *defresult; /* the default result (ELSE clause) */
@@ -956,6 +1264,8 @@ typedef struct CaseWhen
956
1264
  * see build_coercion_expression().
957
1265
  * * Nested FieldStore/SubscriptingRef assignment expressions in INSERT/UPDATE;
958
1266
  * see transformAssignmentIndirection().
1267
+ * * Placeholder for intermediate results in some SQL/JSON expression nodes,
1268
+ * such as JsonConstructorExpr.
959
1269
  *
960
1270
  * The uses in CaseExpr and ArrayCoerceExpr are safe only to the extent that
961
1271
  * there is not any other CaseExpr or ArrayCoerceExpr between the value source
@@ -970,8 +1280,10 @@ typedef struct CaseTestExpr
970
1280
  {
971
1281
  Expr xpr;
972
1282
  Oid typeId; /* type for substituted value */
973
- int32 typeMod; /* typemod for substituted value */
974
- Oid collation; /* collation for the substituted value */
1283
+ /* typemod for substituted value */
1284
+ int32 typeMod pg_node_attr(query_jumble_ignore);
1285
+ /* collation for the substituted value */
1286
+ Oid collation pg_node_attr(query_jumble_ignore);
975
1287
  } CaseTestExpr;
976
1288
 
977
1289
  /*
@@ -985,12 +1297,18 @@ typedef struct CaseTestExpr
985
1297
  typedef struct ArrayExpr
986
1298
  {
987
1299
  Expr xpr;
988
- Oid array_typeid; /* type of expression result */
989
- Oid array_collid; /* OID of collation, or InvalidOid if none */
990
- Oid element_typeid; /* common type of array elements */
991
- List *elements; /* the array elements or sub-arrays */
992
- bool multidims; /* true if elements are sub-arrays */
993
- int location; /* token location, or -1 if unknown */
1300
+ /* type of expression result */
1301
+ Oid array_typeid pg_node_attr(query_jumble_ignore);
1302
+ /* OID of collation, or InvalidOid if none */
1303
+ Oid array_collid pg_node_attr(query_jumble_ignore);
1304
+ /* common type of array elements */
1305
+ Oid element_typeid pg_node_attr(query_jumble_ignore);
1306
+ /* the array elements or sub-arrays */
1307
+ List *elements;
1308
+ /* true if elements are sub-arrays */
1309
+ bool multidims pg_node_attr(query_jumble_ignore);
1310
+ /* token location, or -1 if unknown */
1311
+ int location;
994
1312
  } ArrayExpr;
995
1313
 
996
1314
  /*
@@ -1006,21 +1324,21 @@ typedef struct ArrayExpr
1006
1324
  * than vice versa.) It is important not to assume that length(args) is
1007
1325
  * the same as the number of columns logically present in the rowtype.
1008
1326
  *
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.
1327
+ * colnames provides field names if the ROW() result is of type RECORD.
1328
+ * Names *must* be provided if row_typeid is RECORDOID; but if it is a
1329
+ * named composite type, colnames will be ignored in favor of using the
1330
+ * type's cataloged field names, so colnames should be NIL. Like the
1331
+ * args list, colnames is defined to be one-for-one with physical fields
1332
+ * of the rowtype (although dropped columns shouldn't appear in the
1333
+ * RECORD case, so this fine point is currently moot).
1018
1334
  */
1019
1335
  typedef struct RowExpr
1020
1336
  {
1021
1337
  Expr xpr;
1022
1338
  List *args; /* the fields */
1023
- Oid row_typeid; /* RECORDOID or a composite type's ID */
1339
+
1340
+ /* RECORDOID or a composite type's ID */
1341
+ Oid row_typeid pg_node_attr(query_jumble_ignore);
1024
1342
 
1025
1343
  /*
1026
1344
  * row_typeid cannot be a domain over composite, only plain composite. To
@@ -1034,8 +1352,13 @@ typedef struct RowExpr
1034
1352
  * We don't need to store a collation either. The result type is
1035
1353
  * necessarily composite, and composite types never have a collation.
1036
1354
  */
1037
- CoercionForm row_format; /* how to display this node */
1038
- List *colnames; /* list of String, or NIL */
1355
+
1356
+ /* how to display this node */
1357
+ CoercionForm row_format pg_node_attr(query_jumble_ignore);
1358
+
1359
+ /* list of String, or NIL */
1360
+ List *colnames pg_node_attr(query_jumble_ignore);
1361
+
1039
1362
  int location; /* token location, or -1 if unknown */
1040
1363
  } RowExpr;
1041
1364
 
@@ -1067,12 +1390,19 @@ typedef enum RowCompareType
1067
1390
  typedef struct RowCompareExpr
1068
1391
  {
1069
1392
  Expr xpr;
1070
- RowCompareType rctype; /* LT LE GE or GT, never EQ or NE */
1071
- List *opnos; /* OID list of pairwise comparison ops */
1072
- List *opfamilies; /* OID list of containing operator families */
1073
- List *inputcollids; /* OID list of collations for comparisons */
1074
- List *largs; /* the left-hand input arguments */
1075
- List *rargs; /* the right-hand input arguments */
1393
+
1394
+ /* LT LE GE or GT, never EQ or NE */
1395
+ RowCompareType rctype;
1396
+ /* OID list of pairwise comparison ops */
1397
+ List *opnos pg_node_attr(query_jumble_ignore);
1398
+ /* OID list of containing operator families */
1399
+ List *opfamilies pg_node_attr(query_jumble_ignore);
1400
+ /* OID list of collations for comparisons */
1401
+ List *inputcollids pg_node_attr(query_jumble_ignore);
1402
+ /* the left-hand input arguments */
1403
+ List *largs;
1404
+ /* the right-hand input arguments */
1405
+ List *rargs;
1076
1406
  } RowCompareExpr;
1077
1407
 
1078
1408
  /*
@@ -1081,10 +1411,14 @@ typedef struct RowCompareExpr
1081
1411
  typedef struct CoalesceExpr
1082
1412
  {
1083
1413
  Expr xpr;
1084
- Oid coalescetype; /* type of expression result */
1085
- Oid coalescecollid; /* OID of collation, or InvalidOid if none */
1086
- List *args; /* the arguments */
1087
- int location; /* token location, or -1 if unknown */
1414
+ /* type of expression result */
1415
+ Oid coalescetype pg_node_attr(query_jumble_ignore);
1416
+ /* OID of collation, or InvalidOid if none */
1417
+ Oid coalescecollid pg_node_attr(query_jumble_ignore);
1418
+ /* the arguments */
1419
+ List *args;
1420
+ /* token location, or -1 if unknown */
1421
+ int location;
1088
1422
  } CoalesceExpr;
1089
1423
 
1090
1424
  /*
@@ -1099,12 +1433,18 @@ typedef enum MinMaxOp
1099
1433
  typedef struct MinMaxExpr
1100
1434
  {
1101
1435
  Expr xpr;
1102
- Oid minmaxtype; /* common type of arguments and result */
1103
- Oid minmaxcollid; /* OID of collation of result */
1104
- Oid inputcollid; /* OID of collation that function should use */
1105
- MinMaxOp op; /* function to execute */
1106
- List *args; /* the arguments */
1107
- int location; /* token location, or -1 if unknown */
1436
+ /* common type of arguments and result */
1437
+ Oid minmaxtype pg_node_attr(query_jumble_ignore);
1438
+ /* OID of collation of result */
1439
+ Oid minmaxcollid pg_node_attr(query_jumble_ignore);
1440
+ /* OID of collation that function should use */
1441
+ Oid inputcollid pg_node_attr(query_jumble_ignore);
1442
+ /* function to execute */
1443
+ MinMaxOp op;
1444
+ /* the arguments */
1445
+ List *args;
1446
+ /* token location, or -1 if unknown */
1447
+ int location;
1108
1448
  } MinMaxExpr;
1109
1449
 
1110
1450
  /*
@@ -1141,7 +1481,12 @@ typedef struct SQLValueFunction
1141
1481
  {
1142
1482
  Expr xpr;
1143
1483
  SQLValueFunctionOp op; /* which function this is */
1144
- Oid type; /* result type/typmod */
1484
+
1485
+ /*
1486
+ * Result type/typmod. Type is fully determined by "op", so no need to
1487
+ * include this Oid in the query jumbling.
1488
+ */
1489
+ Oid type pg_node_attr(query_jumble_ignore);
1145
1490
  int32 typmod;
1146
1491
  int location; /* token location, or -1 if unknown */
1147
1492
  } SQLValueFunction;
@@ -1165,11 +1510,11 @@ typedef enum XmlExprOp
1165
1510
  IS_XMLPARSE, /* XMLPARSE(text, is_doc, preserve_ws) */
1166
1511
  IS_XMLPI, /* XMLPI(name [, args]) */
1167
1512
  IS_XMLROOT, /* XMLROOT(xml, version, standalone) */
1168
- IS_XMLSERIALIZE, /* XMLSERIALIZE(is_document, xmlval) */
1513
+ IS_XMLSERIALIZE, /* XMLSERIALIZE(is_document, xmlval, indent) */
1169
1514
  IS_DOCUMENT /* xmlval IS DOCUMENT */
1170
1515
  } XmlExprOp;
1171
1516
 
1172
- typedef enum
1517
+ typedef enum XmlOptionType
1173
1518
  {
1174
1519
  XMLOPTION_DOCUMENT,
1175
1520
  XMLOPTION_CONTENT
@@ -1178,17 +1523,142 @@ typedef enum
1178
1523
  typedef struct XmlExpr
1179
1524
  {
1180
1525
  Expr xpr;
1181
- XmlExprOp op; /* xml function ID */
1182
- char *name; /* name in xml(NAME foo ...) syntaxes */
1183
- List *named_args; /* non-XML expressions for xml_attributes */
1184
- List *arg_names; /* parallel list of Value strings */
1185
- List *args; /* list of expressions */
1186
- XmlOptionType xmloption; /* DOCUMENT or CONTENT */
1187
- Oid type; /* target type/typmod for XMLSERIALIZE */
1188
- int32 typmod;
1189
- int location; /* token location, or -1 if unknown */
1526
+ /* xml function ID */
1527
+ XmlExprOp op;
1528
+ /* name in xml(NAME foo ...) syntaxes */
1529
+ char *name pg_node_attr(query_jumble_ignore);
1530
+ /* non-XML expressions for xml_attributes */
1531
+ List *named_args;
1532
+ /* parallel list of String values */
1533
+ List *arg_names pg_node_attr(query_jumble_ignore);
1534
+ /* list of expressions */
1535
+ List *args;
1536
+ /* DOCUMENT or CONTENT */
1537
+ XmlOptionType xmloption pg_node_attr(query_jumble_ignore);
1538
+ /* INDENT option for XMLSERIALIZE */
1539
+ bool indent;
1540
+ /* target type/typmod for XMLSERIALIZE */
1541
+ Oid type pg_node_attr(query_jumble_ignore);
1542
+ int32 typmod pg_node_attr(query_jumble_ignore);
1543
+ /* token location, or -1 if unknown */
1544
+ int location;
1190
1545
  } XmlExpr;
1191
1546
 
1547
+ /*
1548
+ * JsonEncoding -
1549
+ * representation of JSON ENCODING clause
1550
+ */
1551
+ typedef enum JsonEncoding
1552
+ {
1553
+ JS_ENC_DEFAULT, /* unspecified */
1554
+ JS_ENC_UTF8,
1555
+ JS_ENC_UTF16,
1556
+ JS_ENC_UTF32,
1557
+ } JsonEncoding;
1558
+
1559
+ /*
1560
+ * JsonFormatType -
1561
+ * enumeration of JSON formats used in JSON FORMAT clause
1562
+ */
1563
+ typedef enum JsonFormatType
1564
+ {
1565
+ JS_FORMAT_DEFAULT, /* unspecified */
1566
+ JS_FORMAT_JSON, /* FORMAT JSON [ENCODING ...] */
1567
+ JS_FORMAT_JSONB /* implicit internal format for RETURNING
1568
+ * jsonb */
1569
+ } JsonFormatType;
1570
+
1571
+ /*
1572
+ * JsonFormat -
1573
+ * representation of JSON FORMAT clause
1574
+ */
1575
+ typedef struct JsonFormat
1576
+ {
1577
+ NodeTag type;
1578
+ JsonFormatType format_type; /* format type */
1579
+ JsonEncoding encoding; /* JSON encoding */
1580
+ int location; /* token location, or -1 if unknown */
1581
+ } JsonFormat;
1582
+
1583
+ /*
1584
+ * JsonReturning -
1585
+ * transformed representation of JSON RETURNING clause
1586
+ */
1587
+ typedef struct JsonReturning
1588
+ {
1589
+ NodeTag type;
1590
+ JsonFormat *format; /* output JSON format */
1591
+ Oid typid; /* target type Oid */
1592
+ int32 typmod; /* target type modifier */
1593
+ } JsonReturning;
1594
+
1595
+ /*
1596
+ * JsonValueExpr -
1597
+ * representation of JSON value expression (expr [FORMAT JsonFormat])
1598
+ *
1599
+ * The actual value is obtained by evaluating formatted_expr. raw_expr is
1600
+ * only there for displaying the original user-written expression and is not
1601
+ * evaluated by ExecInterpExpr() and eval_const_exprs_mutator().
1602
+ */
1603
+ typedef struct JsonValueExpr
1604
+ {
1605
+ NodeTag type;
1606
+ Expr *raw_expr; /* raw expression */
1607
+ Expr *formatted_expr; /* formatted expression */
1608
+ JsonFormat *format; /* FORMAT clause, if specified */
1609
+ } JsonValueExpr;
1610
+
1611
+ typedef enum JsonConstructorType
1612
+ {
1613
+ JSCTOR_JSON_OBJECT = 1,
1614
+ JSCTOR_JSON_ARRAY = 2,
1615
+ JSCTOR_JSON_OBJECTAGG = 3,
1616
+ JSCTOR_JSON_ARRAYAGG = 4
1617
+ } JsonConstructorType;
1618
+
1619
+ /*
1620
+ * JsonConstructorExpr -
1621
+ * wrapper over FuncExpr/Aggref/WindowFunc for SQL/JSON constructors
1622
+ */
1623
+ typedef struct JsonConstructorExpr
1624
+ {
1625
+ Expr xpr;
1626
+ JsonConstructorType type; /* constructor type */
1627
+ List *args;
1628
+ Expr *func; /* underlying json[b]_xxx() function call */
1629
+ Expr *coercion; /* coercion to RETURNING type */
1630
+ JsonReturning *returning; /* RETURNING clause */
1631
+ bool absent_on_null; /* ABSENT ON NULL? */
1632
+ bool unique; /* WITH UNIQUE KEYS? (JSON_OBJECT[AGG] only) */
1633
+ int location;
1634
+ } JsonConstructorExpr;
1635
+
1636
+ /*
1637
+ * JsonValueType -
1638
+ * representation of JSON item type in IS JSON predicate
1639
+ */
1640
+ typedef enum JsonValueType
1641
+ {
1642
+ JS_TYPE_ANY, /* IS JSON [VALUE] */
1643
+ JS_TYPE_OBJECT, /* IS JSON OBJECT */
1644
+ JS_TYPE_ARRAY, /* IS JSON ARRAY */
1645
+ JS_TYPE_SCALAR /* IS JSON SCALAR */
1646
+ } JsonValueType;
1647
+
1648
+ /*
1649
+ * JsonIsPredicate -
1650
+ * representation of IS JSON predicate
1651
+ */
1652
+ typedef struct JsonIsPredicate
1653
+ {
1654
+ NodeTag type;
1655
+ Node *expr; /* subject expression */
1656
+ JsonFormat *format; /* FORMAT clause, if specified */
1657
+ JsonValueType item_type; /* JSON item type */
1658
+ bool unique_keys; /* check key uniqueness? */
1659
+ int location; /* token location, or -1 if unknown */
1660
+ } JsonIsPredicate;
1661
+
1192
1662
  /* ----------------
1193
1663
  * NullTest
1194
1664
  *
@@ -1218,7 +1688,8 @@ typedef struct NullTest
1218
1688
  Expr xpr;
1219
1689
  Expr *arg; /* input expression */
1220
1690
  NullTestType nulltesttype; /* IS NULL, IS NOT NULL */
1221
- bool argisrow; /* T to perform field-by-field null checks */
1691
+ /* T to perform field-by-field null checks */
1692
+ bool argisrow pg_node_attr(query_jumble_ignore);
1222
1693
  int location; /* token location, or -1 if unknown */
1223
1694
  } NullTest;
1224
1695
 
@@ -1258,9 +1729,12 @@ typedef struct CoerceToDomain
1258
1729
  Expr xpr;
1259
1730
  Expr *arg; /* input expression */
1260
1731
  Oid resulttype; /* domain type ID (result type) */
1261
- int32 resulttypmod; /* output typmod (currently always -1) */
1262
- Oid resultcollid; /* OID of collation, or InvalidOid if none */
1263
- CoercionForm coercionformat; /* how to display this node */
1732
+ /* output typmod (currently always -1) */
1733
+ int32 resulttypmod pg_node_attr(query_jumble_ignore);
1734
+ /* OID of collation, or InvalidOid if none */
1735
+ Oid resultcollid pg_node_attr(query_jumble_ignore);
1736
+ /* how to display this node */
1737
+ CoercionForm coercionformat pg_node_attr(query_jumble_ignore);
1264
1738
  int location; /* token location, or -1 if unknown */
1265
1739
  } CoerceToDomain;
1266
1740
 
@@ -1276,10 +1750,14 @@ typedef struct CoerceToDomain
1276
1750
  typedef struct CoerceToDomainValue
1277
1751
  {
1278
1752
  Expr xpr;
1279
- Oid typeId; /* type for substituted value */
1280
- int32 typeMod; /* typemod for substituted value */
1281
- Oid collation; /* collation for the substituted value */
1282
- int location; /* token location, or -1 if unknown */
1753
+ /* type for substituted value */
1754
+ Oid typeId;
1755
+ /* typemod for substituted value */
1756
+ int32 typeMod pg_node_attr(query_jumble_ignore);
1757
+ /* collation for the substituted value */
1758
+ Oid collation pg_node_attr(query_jumble_ignore);
1759
+ /* token location, or -1 if unknown */
1760
+ int location;
1283
1761
  } CoerceToDomainValue;
1284
1762
 
1285
1763
  /*
@@ -1292,10 +1770,14 @@ typedef struct CoerceToDomainValue
1292
1770
  typedef struct SetToDefault
1293
1771
  {
1294
1772
  Expr xpr;
1295
- Oid typeId; /* type for substituted value */
1296
- int32 typeMod; /* typemod for substituted value */
1297
- Oid collation; /* collation for the substituted value */
1298
- int location; /* token location, or -1 if unknown */
1773
+ /* type for substituted value */
1774
+ Oid typeId;
1775
+ /* typemod for substituted value */
1776
+ int32 typeMod pg_node_attr(query_jumble_ignore);
1777
+ /* collation for the substituted value */
1778
+ Oid collation pg_node_attr(query_jumble_ignore);
1779
+ /* token location, or -1 if unknown */
1780
+ int location;
1299
1781
  } SetToDefault;
1300
1782
 
1301
1783
  /*
@@ -1305,6 +1787,7 @@ typedef struct SetToDefault
1305
1787
  * of the target relation being constrained; this aids placing the expression
1306
1788
  * correctly during planning. We can assume however that its "levelsup" is
1307
1789
  * always zero, due to the syntactic constraints on where it can appear.
1790
+ * Also, cvarno will always be a true RT index, never INNER_VAR etc.
1308
1791
  *
1309
1792
  * The referenced cursor can be represented either as a hardwired string
1310
1793
  * or as a reference to a run-time parameter of type REFCURSOR. The latter
@@ -1362,13 +1845,14 @@ typedef struct InferenceElem
1362
1845
  * column for the item; so there may be missing or out-of-order resnos.
1363
1846
  * It is even legal to have duplicated resnos; consider
1364
1847
  * 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.
1848
+ * In an INSERT, the rewriter and planner will normalize the tlist by
1849
+ * reordering it into physical column order and filling in default values
1850
+ * for any columns not assigned values by the original query. In an UPDATE,
1851
+ * after the rewriter merges multiple assignments for the same column, the
1852
+ * planner extracts the target-column numbers into a separate "update_colnos"
1853
+ * list, and then renumbers the tlist elements serially. Thus, tlist resnos
1854
+ * match ordinal position in all tlists seen by the executor; but it is wrong
1855
+ * to assume that before planning has happened.
1372
1856
  *
1373
1857
  * resname is required to represent the correct column name in non-resjunk
1374
1858
  * entries of top-level SELECT targetlists, since it will be used as the
@@ -1404,15 +1888,20 @@ typedef struct InferenceElem
1404
1888
  typedef struct TargetEntry
1405
1889
  {
1406
1890
  Expr xpr;
1407
- Expr *expr; /* expression to evaluate */
1408
- AttrNumber resno; /* attribute number (see notes above) */
1409
- char *resname; /* name of the column (could be NULL) */
1410
- Index ressortgroupref; /* nonzero if referenced by a sort/group
1411
- * clause */
1412
- Oid resorigtbl; /* OID of column's source table */
1413
- AttrNumber resorigcol; /* column's number in source table */
1414
- bool resjunk; /* set to true to eliminate the attribute from
1415
- * final target list */
1891
+ /* expression to evaluate */
1892
+ Expr *expr;
1893
+ /* attribute number (see notes above) */
1894
+ AttrNumber resno;
1895
+ /* name of the column (could be NULL) */
1896
+ char *resname pg_node_attr(query_jumble_ignore);
1897
+ /* nonzero if referenced by a sort/group clause */
1898
+ Index ressortgroupref;
1899
+ /* OID of column's source table */
1900
+ Oid resorigtbl pg_node_attr(query_jumble_ignore);
1901
+ /* column's number in source table */
1902
+ AttrNumber resorigcol pg_node_attr(query_jumble_ignore);
1903
+ /* set to true to eliminate the attribute from final target list */
1904
+ bool resjunk pg_node_attr(query_jumble_ignore);
1416
1905
  } TargetEntry;
1417
1906
 
1418
1907
 
@@ -1475,6 +1964,11 @@ typedef struct RangeTblRef
1475
1964
  * alias has a critical impact on semantics, because a join with an alias
1476
1965
  * restricts visibility of the tables/columns inside it.
1477
1966
  *
1967
+ * join_using_alias is an Alias node representing the join correlation
1968
+ * name that SQL:2016 and later allow to be attached to JOIN/USING.
1969
+ * Its column alias list includes only the common column names from USING,
1970
+ * and it does not restrict visibility of the join's input tables.
1971
+ *
1478
1972
  * During parse analysis, an RTE is created for the Join, and its index
1479
1973
  * is filled into rtindex. This RTE is present mainly so that Vars can
1480
1974
  * be created that refer to the outputs of the join. The planner sometimes
@@ -1489,10 +1983,16 @@ typedef struct JoinExpr
1489
1983
  bool isNatural; /* Natural join? Will need to shape table */
1490
1984
  Node *larg; /* left subtree */
1491
1985
  Node *rarg; /* right subtree */
1492
- List *usingClause; /* USING clause, if any (list of String) */
1493
- Node *quals; /* qualifiers on join, if any */
1494
- Alias *alias; /* user-written alias clause, if any */
1495
- int rtindex; /* RT index assigned for join, or 0 */
1986
+ /* USING clause, if any (list of String) */
1987
+ List *usingClause pg_node_attr(query_jumble_ignore);
1988
+ /* alias attached to USING clause, if any */
1989
+ Alias *join_using_alias pg_node_attr(query_jumble_ignore);
1990
+ /* qualifiers on join, if any */
1991
+ Node *quals;
1992
+ /* user-written alias clause, if any */
1993
+ Alias *alias pg_node_attr(query_jumble_ignore);
1994
+ /* RT index assigned for join, or 0 */
1995
+ int rtindex;
1496
1996
  } JoinExpr;
1497
1997
 
1498
1998
  /*----------