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
@@ -4,7 +4,7 @@
4
4
  * Definition of (and support for) access control list data structures.
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/utils/acl.h
@@ -59,33 +59,33 @@ typedef struct AclItem
59
59
  } AclItem;
60
60
 
61
61
  /*
62
- * The upper 16 bits of the ai_privs field of an AclItem are the grant option
63
- * bits, and the lower 16 bits are the actual privileges. We use "rights"
62
+ * The upper 32 bits of the ai_privs field of an AclItem are the grant option
63
+ * bits, and the lower 32 bits are the actual privileges. We use "rights"
64
64
  * to mean the combined grant option and privilege bits fields.
65
65
  */
66
- #define ACLITEM_GET_PRIVS(item) ((item).ai_privs & 0xFFFF)
67
- #define ACLITEM_GET_GOPTIONS(item) (((item).ai_privs >> 16) & 0xFFFF)
66
+ #define ACLITEM_GET_PRIVS(item) ((item).ai_privs & 0xFFFFFFFF)
67
+ #define ACLITEM_GET_GOPTIONS(item) (((item).ai_privs >> 32) & 0xFFFFFFFF)
68
68
  #define ACLITEM_GET_RIGHTS(item) ((item).ai_privs)
69
69
 
70
- #define ACL_GRANT_OPTION_FOR(privs) (((AclMode) (privs) & 0xFFFF) << 16)
71
- #define ACL_OPTION_TO_PRIVS(privs) (((AclMode) (privs) >> 16) & 0xFFFF)
70
+ #define ACL_GRANT_OPTION_FOR(privs) (((AclMode) (privs) & 0xFFFFFFFF) << 32)
71
+ #define ACL_OPTION_TO_PRIVS(privs) (((AclMode) (privs) >> 32) & 0xFFFFFFFF)
72
72
 
73
73
  #define ACLITEM_SET_PRIVS(item,privs) \
74
- ((item).ai_privs = ((item).ai_privs & ~((AclMode) 0xFFFF)) | \
75
- ((AclMode) (privs) & 0xFFFF))
74
+ ((item).ai_privs = ((item).ai_privs & ~((AclMode) 0xFFFFFFFF)) | \
75
+ ((AclMode) (privs) & 0xFFFFFFFF))
76
76
  #define ACLITEM_SET_GOPTIONS(item,goptions) \
77
- ((item).ai_privs = ((item).ai_privs & ~(((AclMode) 0xFFFF) << 16)) | \
78
- (((AclMode) (goptions) & 0xFFFF) << 16))
77
+ ((item).ai_privs = ((item).ai_privs & ~(((AclMode) 0xFFFFFFFF) << 32)) | \
78
+ (((AclMode) (goptions) & 0xFFFFFFFF) << 32))
79
79
  #define ACLITEM_SET_RIGHTS(item,rights) \
80
80
  ((item).ai_privs = (AclMode) (rights))
81
81
 
82
82
  #define ACLITEM_SET_PRIVS_GOPTIONS(item,privs,goptions) \
83
- ((item).ai_privs = ((AclMode) (privs) & 0xFFFF) | \
84
- (((AclMode) (goptions) & 0xFFFF) << 16))
83
+ ((item).ai_privs = ((AclMode) (privs) & 0xFFFFFFFF) | \
84
+ (((AclMode) (goptions) & 0xFFFFFFFF) << 32))
85
85
 
86
86
 
87
- #define ACLITEM_ALL_PRIV_BITS ((AclMode) 0xFFFF)
88
- #define ACLITEM_ALL_GOPTION_BITS ((AclMode) 0xFFFF << 16)
87
+ #define ACLITEM_ALL_PRIV_BITS ((AclMode) 0xFFFFFFFF)
88
+ #define ACLITEM_ALL_GOPTION_BITS ((AclMode) 0xFFFFFFFF << 32)
89
89
 
90
90
  /*
91
91
  * Definitions for convenient access to Acl (array of AclItem).
@@ -146,9 +146,11 @@ typedef struct ArrayType Acl;
146
146
  #define ACL_CREATE_CHR 'C'
147
147
  #define ACL_CREATE_TEMP_CHR 'T'
148
148
  #define ACL_CONNECT_CHR 'c'
149
+ #define ACL_SET_CHR 's'
150
+ #define ACL_ALTER_SYSTEM_CHR 'A'
149
151
 
150
152
  /* string holding all privilege code chars, in order by bitmask position */
151
- #define ACL_ALL_RIGHTS_STR "arwdDxtXUCTc"
153
+ #define ACL_ALL_RIGHTS_STR "arwdDxtXUCTcsA"
152
154
 
153
155
  /*
154
156
  * Bitmasks defining "all rights" for each supported object type
@@ -162,6 +164,7 @@ typedef struct ArrayType Acl;
162
164
  #define ACL_ALL_RIGHTS_FUNCTION (ACL_EXECUTE)
163
165
  #define ACL_ALL_RIGHTS_LANGUAGE (ACL_USAGE)
164
166
  #define ACL_ALL_RIGHTS_LARGEOBJECT (ACL_SELECT|ACL_UPDATE)
167
+ #define ACL_ALL_RIGHTS_PARAMETER_ACL (ACL_SET|ACL_ALTER_SYSTEM)
165
168
  #define ACL_ALL_RIGHTS_SCHEMA (ACL_USAGE|ACL_CREATE)
166
169
  #define ACL_ALL_RIGHTS_TABLESPACE (ACL_CREATE)
167
170
  #define ACL_ALL_RIGHTS_TYPE (ACL_USAGE)
@@ -206,12 +209,14 @@ extern AclMode aclmask(const Acl *acl, Oid roleid, Oid ownerId,
206
209
  extern int aclmembers(const Acl *acl, Oid **roleids);
207
210
 
208
211
  extern bool has_privs_of_role(Oid member, Oid role);
212
+ extern bool member_can_set_role(Oid member, Oid role);
213
+ extern void check_can_set_role(Oid member, Oid role);
209
214
  extern bool is_member_of_role(Oid member, Oid role);
210
215
  extern bool is_member_of_role_nosuper(Oid member, Oid role);
211
216
  extern bool is_admin_of_role(Oid member, Oid role);
212
- extern void check_is_member_of_role(Oid member, Oid role);
213
- extern Oid get_role_oid(const char *rolename, bool missing_ok);
214
- extern Oid get_role_oid_or_public(const char *rolename);
217
+ extern Oid select_best_admin(Oid member, Oid role);
218
+ extern Oid get_role_oid(const char *rolname, bool missing_ok);
219
+ extern Oid get_role_oid_or_public(const char *rolname);
215
220
  extern Oid get_rolespec_oid(const RoleSpec *role, bool missing_ok);
216
221
  extern void check_rolespec_name(const RoleSpec *role, const char *detail_msg);
217
222
  extern HeapTuple get_rolespec_tuple(const RoleSpec *role);
@@ -230,46 +235,28 @@ extern void ExecuteGrantStmt(GrantStmt *stmt);
230
235
  extern void ExecAlterDefaultPrivilegesStmt(ParseState *pstate, AlterDefaultPrivilegesStmt *stmt);
231
236
 
232
237
  extern void RemoveRoleFromObjectACL(Oid roleid, Oid classid, Oid objid);
233
- extern void RemoveDefaultACLById(Oid defaclOid);
234
238
 
235
- extern AclMode pg_attribute_aclmask(Oid table_oid, AttrNumber attnum,
236
- Oid roleid, AclMode mask, AclMaskHow how);
237
239
  extern AclMode pg_class_aclmask(Oid table_oid, Oid roleid,
238
240
  AclMode mask, AclMaskHow how);
239
- extern AclMode pg_database_aclmask(Oid db_oid, Oid roleid,
240
- AclMode mask, AclMaskHow how);
241
- extern AclMode pg_proc_aclmask(Oid proc_oid, Oid roleid,
242
- AclMode mask, AclMaskHow how);
243
- extern AclMode pg_language_aclmask(Oid lang_oid, Oid roleid,
244
- AclMode mask, AclMaskHow how);
245
- extern AclMode pg_largeobject_aclmask_snapshot(Oid lobj_oid, Oid roleid,
246
- AclMode mask, AclMaskHow how, Snapshot snapshot);
247
- extern AclMode pg_namespace_aclmask(Oid nsp_oid, Oid roleid,
248
- AclMode mask, AclMaskHow how);
249
- extern AclMode pg_tablespace_aclmask(Oid spc_oid, Oid roleid,
250
- AclMode mask, AclMaskHow how);
251
- extern AclMode pg_foreign_data_wrapper_aclmask(Oid fdw_oid, Oid roleid,
252
- AclMode mask, AclMaskHow how);
253
- extern AclMode pg_foreign_server_aclmask(Oid srv_oid, Oid roleid,
254
- AclMode mask, AclMaskHow how);
255
- extern AclMode pg_type_aclmask(Oid type_oid, Oid roleid,
256
- AclMode mask, AclMaskHow how);
257
241
 
242
+ /* generic function */
243
+ extern AclResult object_aclcheck(Oid classid, Oid objectid, Oid roleid, AclMode mode);
244
+
245
+ /* special cases */
258
246
  extern AclResult pg_attribute_aclcheck(Oid table_oid, AttrNumber attnum,
259
247
  Oid roleid, AclMode mode);
248
+ extern AclResult pg_attribute_aclcheck_ext(Oid table_oid, AttrNumber attnum,
249
+ Oid roleid, AclMode mode,
250
+ bool *is_missing);
260
251
  extern AclResult pg_attribute_aclcheck_all(Oid table_oid, Oid roleid,
261
252
  AclMode mode, AclMaskHow how);
262
253
  extern AclResult pg_class_aclcheck(Oid table_oid, Oid roleid, AclMode mode);
263
- extern AclResult pg_database_aclcheck(Oid db_oid, Oid roleid, AclMode mode);
264
- extern AclResult pg_proc_aclcheck(Oid proc_oid, Oid roleid, AclMode mode);
265
- extern AclResult pg_language_aclcheck(Oid lang_oid, Oid roleid, AclMode mode);
266
- extern AclResult pg_largeobject_aclcheck_snapshot(Oid lang_oid, Oid roleid,
254
+ extern AclResult pg_class_aclcheck_ext(Oid table_oid, Oid roleid,
255
+ AclMode mode, bool *is_missing);
256
+ extern AclResult pg_parameter_aclcheck(const char *name, Oid roleid,
257
+ AclMode mode);
258
+ extern AclResult pg_largeobject_aclcheck_snapshot(Oid lobj_oid, Oid roleid,
267
259
  AclMode mode, Snapshot snapshot);
268
- extern AclResult pg_namespace_aclcheck(Oid nsp_oid, Oid roleid, AclMode mode);
269
- extern AclResult pg_tablespace_aclcheck(Oid spc_oid, Oid roleid, AclMode mode);
270
- extern AclResult pg_foreign_data_wrapper_aclcheck(Oid fdw_oid, Oid roleid, AclMode mode);
271
- extern AclResult pg_foreign_server_aclcheck(Oid srv_oid, Oid roleid, AclMode mode);
272
- extern AclResult pg_type_aclcheck(Oid type_oid, Oid roleid, AclMode mode);
273
260
 
274
261
  extern void aclcheck_error(AclResult aclerr, ObjectType objtype,
275
262
  const char *objectname);
@@ -284,28 +271,7 @@ extern void removeExtObjInitPriv(Oid objoid, Oid classoid);
284
271
 
285
272
 
286
273
  /* ownercheck routines just return true (owner) or false (not) */
287
- extern bool pg_class_ownercheck(Oid class_oid, Oid roleid);
288
- extern bool pg_type_ownercheck(Oid type_oid, Oid roleid);
289
- extern bool pg_oper_ownercheck(Oid oper_oid, Oid roleid);
290
- extern bool pg_proc_ownercheck(Oid proc_oid, Oid roleid);
291
- extern bool pg_language_ownercheck(Oid lan_oid, Oid roleid);
292
- extern bool pg_largeobject_ownercheck(Oid lobj_oid, Oid roleid);
293
- extern bool pg_namespace_ownercheck(Oid nsp_oid, Oid roleid);
294
- extern bool pg_tablespace_ownercheck(Oid spc_oid, Oid roleid);
295
- extern bool pg_opclass_ownercheck(Oid opc_oid, Oid roleid);
296
- extern bool pg_opfamily_ownercheck(Oid opf_oid, Oid roleid);
297
- extern bool pg_database_ownercheck(Oid db_oid, Oid roleid);
298
- extern bool pg_collation_ownercheck(Oid coll_oid, Oid roleid);
299
- extern bool pg_conversion_ownercheck(Oid conv_oid, Oid roleid);
300
- extern bool pg_ts_dict_ownercheck(Oid dict_oid, Oid roleid);
301
- extern bool pg_ts_config_ownercheck(Oid cfg_oid, Oid roleid);
302
- extern bool pg_foreign_data_wrapper_ownercheck(Oid srv_oid, Oid roleid);
303
- extern bool pg_foreign_server_ownercheck(Oid srv_oid, Oid roleid);
304
- extern bool pg_event_trigger_ownercheck(Oid et_oid, Oid roleid);
305
- extern bool pg_extension_ownercheck(Oid ext_oid, Oid roleid);
306
- extern bool pg_publication_ownercheck(Oid pub_oid, Oid roleid);
307
- extern bool pg_subscription_ownercheck(Oid sub_oid, Oid roleid);
308
- extern bool pg_statistics_object_ownercheck(Oid stat_oid, Oid roleid);
274
+ extern bool object_ownercheck(Oid classid, Oid objectid, Oid roleid);
309
275
  extern bool has_createrole_privilege(Oid roleid);
310
276
  extern bool has_bypassrls_privilege(Oid roleid);
311
277
 
@@ -2,7 +2,7 @@
2
2
  *
3
3
  * aclchk_internal.h
4
4
  *
5
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
5
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
6
6
  * Portions Copyright (c) 1994, Regents of the University of California
7
7
  *
8
8
  * src/include/utils/aclchk_internal.h
@@ -51,7 +51,7 @@
51
51
  * arrays holding the elements.
52
52
  *
53
53
  *
54
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
54
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
55
55
  * Portions Copyright (c) 1994, Regents of the University of California
56
56
  *
57
57
  * src/include/utils/array.h
@@ -69,6 +69,18 @@ struct ExprState;
69
69
  struct ExprContext;
70
70
 
71
71
 
72
+ /*
73
+ * Maximum number of array subscripts (arbitrary limit)
74
+ */
75
+ #define MAXDIM 6
76
+
77
+ /*
78
+ * Maximum number of elements in an array. We limit this to at most about a
79
+ * quarter billion elements, so that it's not necessary to check for overflow
80
+ * in quite so many places --- for instance when palloc'ing Datum arrays.
81
+ */
82
+ #define MaxArraySize ((Size) (MaxAllocSize / sizeof(Datum)))
83
+
72
84
  /*
73
85
  * Arrays are varlena objects, so must meet the varlena convention that
74
86
  * the first int32 of the object contains the total object size in bytes.
@@ -334,7 +346,7 @@ typedef struct ArrayIteratorData *ArrayIterator;
334
346
  /*
335
347
  * GUC parameter
336
348
  */
337
- extern bool Array_nulls;
349
+ extern PGDLLIMPORT bool Array_nulls;
338
350
 
339
351
  /*
340
352
  * prototypes for functions defined in arrayfuncs.c
@@ -382,6 +394,7 @@ extern void array_bitmap_copy(bits8 *destbitmap, int destoffset,
382
394
  extern ArrayType *construct_array(Datum *elems, int nelems,
383
395
  Oid elmtype,
384
396
  int elmlen, bool elmbyval, char elmalign);
397
+ extern ArrayType *construct_array_builtin(Datum *elems, int nelems, Oid elmtype);
385
398
  extern ArrayType *construct_md_array(Datum *elems,
386
399
  bool *nulls,
387
400
  int ndims,
@@ -396,10 +409,16 @@ extern void deconstruct_array(ArrayType *array,
396
409
  Oid elmtype,
397
410
  int elmlen, bool elmbyval, char elmalign,
398
411
  Datum **elemsp, bool **nullsp, int *nelemsp);
412
+ extern void deconstruct_array_builtin(ArrayType *array,
413
+ Oid elmtype,
414
+ Datum **elemsp, bool **nullsp, int *nelemsp);
399
415
  extern bool array_contains_nulls(ArrayType *array);
400
416
 
401
417
  extern ArrayBuildState *initArrayResult(Oid element_type,
402
418
  MemoryContext rcontext, bool subcontext);
419
+ extern ArrayBuildState *initArrayResultWithSize(Oid element_type,
420
+ MemoryContext rcontext,
421
+ bool subcontext, int initsize);
403
422
  extern ArrayBuildState *accumArrayResult(ArrayBuildState *astate,
404
423
  Datum dvalue, bool disnull,
405
424
  Oid element_type,
@@ -438,6 +457,11 @@ extern void array_free_iterator(ArrayIterator iterator);
438
457
  extern int ArrayGetOffset(int n, const int *dim, const int *lb, const int *indx);
439
458
  extern int ArrayGetOffset0(int n, const int *tup, const int *scale);
440
459
  extern int ArrayGetNItems(int ndim, const int *dims);
460
+ extern int ArrayGetNItemsSafe(int ndim, const int *dims,
461
+ struct Node *escontext);
462
+ extern void ArrayCheckBounds(int ndim, const int *dims, const int *lb);
463
+ extern bool ArrayCheckBoundsSafe(int ndim, const int *dims, const int *lb,
464
+ struct Node *escontext);
441
465
  extern void mda_get_range(int n, int *span, const int *st, const int *endp);
442
466
  extern void mda_get_prod(int n, const int *range, int *prod);
443
467
  extern void mda_get_offset_values(int n, int *dist, const int *prod, const int *span);
@@ -0,0 +1,45 @@
1
+ /* ----------
2
+ * backend_progress.h
3
+ * Command progress reporting definition.
4
+ *
5
+ * Note that this file provides the infrastructure for storing a single
6
+ * backend's command progress counters, without ascribing meaning to the
7
+ * individual fields. See commands/progress.h and system_views.sql for that.
8
+ *
9
+ * Copyright (c) 2001-2023, PostgreSQL Global Development Group
10
+ *
11
+ * src/include/utils/backend_progress.h
12
+ * ----------
13
+ */
14
+ #ifndef BACKEND_PROGRESS_H
15
+ #define BACKEND_PROGRESS_H
16
+
17
+
18
+ /* ----------
19
+ * Command type for progress reporting purposes
20
+ * ----------
21
+ */
22
+ typedef enum ProgressCommandType
23
+ {
24
+ PROGRESS_COMMAND_INVALID,
25
+ PROGRESS_COMMAND_VACUUM,
26
+ PROGRESS_COMMAND_ANALYZE,
27
+ PROGRESS_COMMAND_CLUSTER,
28
+ PROGRESS_COMMAND_CREATE_INDEX,
29
+ PROGRESS_COMMAND_BASEBACKUP,
30
+ PROGRESS_COMMAND_COPY
31
+ } ProgressCommandType;
32
+
33
+ #define PGSTAT_NUM_PROGRESS_PARAM 20
34
+
35
+
36
+ extern void pgstat_progress_start_command(ProgressCommandType cmdtype,
37
+ Oid relid);
38
+ extern void pgstat_progress_update_param(int index, int64 val);
39
+ extern void pgstat_progress_incr_param(int index, int64 incr);
40
+ extern void pgstat_progress_update_multi_param(int nparam, const int *index,
41
+ const int64 *val);
42
+ extern void pgstat_progress_end_command(void);
43
+
44
+
45
+ #endif /* BACKEND_PROGRESS_H */
@@ -0,0 +1,342 @@
1
+ /* ----------
2
+ * backend_status.h
3
+ * Definitions related to backend status reporting
4
+ *
5
+ * Copyright (c) 2001-2023, PostgreSQL Global Development Group
6
+ *
7
+ * src/include/utils/backend_status.h
8
+ * ----------
9
+ */
10
+ #ifndef BACKEND_STATUS_H
11
+ #define BACKEND_STATUS_H
12
+
13
+ #include "datatype/timestamp.h"
14
+ #include "libpq/pqcomm.h"
15
+ #include "miscadmin.h" /* for BackendType */
16
+ #include "storage/backendid.h"
17
+ #include "utils/backend_progress.h"
18
+
19
+
20
+ /* ----------
21
+ * Backend states
22
+ * ----------
23
+ */
24
+ typedef enum BackendState
25
+ {
26
+ STATE_UNDEFINED,
27
+ STATE_IDLE,
28
+ STATE_RUNNING,
29
+ STATE_IDLEINTRANSACTION,
30
+ STATE_FASTPATH,
31
+ STATE_IDLEINTRANSACTION_ABORTED,
32
+ STATE_DISABLED
33
+ } BackendState;
34
+
35
+
36
+ /* ----------
37
+ * Shared-memory data structures
38
+ * ----------
39
+ */
40
+
41
+ /*
42
+ * PgBackendSSLStatus
43
+ *
44
+ * For each backend, we keep the SSL status in a separate struct, that
45
+ * is only filled in if SSL is enabled.
46
+ *
47
+ * All char arrays must be null-terminated.
48
+ */
49
+ typedef struct PgBackendSSLStatus
50
+ {
51
+ /* Information about SSL connection */
52
+ int ssl_bits;
53
+ char ssl_version[NAMEDATALEN];
54
+ char ssl_cipher[NAMEDATALEN];
55
+ char ssl_client_dn[NAMEDATALEN];
56
+
57
+ /*
58
+ * serial number is max "20 octets" per RFC 5280, so this size should be
59
+ * fine
60
+ */
61
+ char ssl_client_serial[NAMEDATALEN];
62
+
63
+ char ssl_issuer_dn[NAMEDATALEN];
64
+ } PgBackendSSLStatus;
65
+
66
+ /*
67
+ * PgBackendGSSStatus
68
+ *
69
+ * For each backend, we keep the GSS status in a separate struct, that
70
+ * is only filled in if GSS is enabled.
71
+ *
72
+ * All char arrays must be null-terminated.
73
+ */
74
+ typedef struct PgBackendGSSStatus
75
+ {
76
+ /* Information about GSSAPI connection */
77
+ char gss_princ[NAMEDATALEN]; /* GSSAPI Principal used to auth */
78
+ bool gss_auth; /* If GSSAPI authentication was used */
79
+ bool gss_enc; /* If encryption is being used */
80
+ bool gss_delegation; /* If credentials delegated */
81
+
82
+ } PgBackendGSSStatus;
83
+
84
+
85
+ /* ----------
86
+ * PgBackendStatus
87
+ *
88
+ * Each live backend maintains a PgBackendStatus struct in shared memory
89
+ * showing its current activity. (The structs are allocated according to
90
+ * BackendId, but that is not critical.) Note that this is unrelated to the
91
+ * cumulative stats system (i.e. pgstat.c et al).
92
+ *
93
+ * Each auxiliary process also maintains a PgBackendStatus struct in shared
94
+ * memory.
95
+ * ----------
96
+ */
97
+ typedef struct PgBackendStatus
98
+ {
99
+ /*
100
+ * To avoid locking overhead, we use the following protocol: a backend
101
+ * increments st_changecount before modifying its entry, and again after
102
+ * finishing a modification. A would-be reader should note the value of
103
+ * st_changecount, copy the entry into private memory, then check
104
+ * st_changecount again. If the value hasn't changed, and if it's even,
105
+ * the copy is valid; otherwise start over. This makes updates cheap
106
+ * while reads are potentially expensive, but that's the tradeoff we want.
107
+ *
108
+ * The above protocol needs memory barriers to ensure that the apparent
109
+ * order of execution is as it desires. Otherwise, for example, the CPU
110
+ * might rearrange the code so that st_changecount is incremented twice
111
+ * before the modification on a machine with weak memory ordering. Hence,
112
+ * use the macros defined below for manipulating st_changecount, rather
113
+ * than touching it directly.
114
+ */
115
+ int st_changecount;
116
+
117
+ /* The entry is valid iff st_procpid > 0, unused if st_procpid == 0 */
118
+ int st_procpid;
119
+
120
+ /* Type of backends */
121
+ BackendType st_backendType;
122
+
123
+ /* Times when current backend, transaction, and activity started */
124
+ TimestampTz st_proc_start_timestamp;
125
+ TimestampTz st_xact_start_timestamp;
126
+ TimestampTz st_activity_start_timestamp;
127
+ TimestampTz st_state_start_timestamp;
128
+
129
+ /* Database OID, owning user's OID, connection client address */
130
+ Oid st_databaseid;
131
+ Oid st_userid;
132
+ SockAddr st_clientaddr;
133
+ char *st_clienthostname; /* MUST be null-terminated */
134
+
135
+ /* Information about SSL connection */
136
+ bool st_ssl;
137
+ PgBackendSSLStatus *st_sslstatus;
138
+
139
+ /* Information about GSSAPI connection */
140
+ bool st_gss;
141
+ PgBackendGSSStatus *st_gssstatus;
142
+
143
+ /* current state */
144
+ BackendState st_state;
145
+
146
+ /* application name; MUST be null-terminated */
147
+ char *st_appname;
148
+
149
+ /*
150
+ * Current command string; MUST be null-terminated. Note that this string
151
+ * possibly is truncated in the middle of a multi-byte character. As
152
+ * activity strings are stored more frequently than read, that allows to
153
+ * move the cost of correct truncation to the display side. Use
154
+ * pgstat_clip_activity() to truncate correctly.
155
+ */
156
+ char *st_activity_raw;
157
+
158
+ /*
159
+ * Command progress reporting. Any command which wishes can advertise
160
+ * that it is running by setting st_progress_command,
161
+ * st_progress_command_target, and st_progress_param[].
162
+ * st_progress_command_target should be the OID of the relation which the
163
+ * command targets (we assume there's just one, as this is meant for
164
+ * utility commands), but the meaning of each element in the
165
+ * st_progress_param array is command-specific.
166
+ */
167
+ ProgressCommandType st_progress_command;
168
+ Oid st_progress_command_target;
169
+ int64 st_progress_param[PGSTAT_NUM_PROGRESS_PARAM];
170
+
171
+ /* query identifier, optionally computed using post_parse_analyze_hook */
172
+ uint64 st_query_id;
173
+ } PgBackendStatus;
174
+
175
+
176
+ /*
177
+ * Macros to load and store st_changecount with appropriate memory barriers.
178
+ *
179
+ * Use PGSTAT_BEGIN_WRITE_ACTIVITY() before, and PGSTAT_END_WRITE_ACTIVITY()
180
+ * after, modifying the current process's PgBackendStatus data. Note that,
181
+ * since there is no mechanism for cleaning up st_changecount after an error,
182
+ * THESE MACROS FORM A CRITICAL SECTION. Any error between them will be
183
+ * promoted to PANIC, causing a database restart to clean up shared memory!
184
+ * Hence, keep the critical section as short and straight-line as possible.
185
+ * Aside from being safer, that minimizes the window in which readers will
186
+ * have to loop.
187
+ *
188
+ * Reader logic should follow this sketch:
189
+ *
190
+ * for (;;)
191
+ * {
192
+ * int before_ct, after_ct;
193
+ *
194
+ * pgstat_begin_read_activity(beentry, before_ct);
195
+ * ... copy beentry data to local memory ...
196
+ * pgstat_end_read_activity(beentry, after_ct);
197
+ * if (pgstat_read_activity_complete(before_ct, after_ct))
198
+ * break;
199
+ * CHECK_FOR_INTERRUPTS();
200
+ * }
201
+ *
202
+ * For extra safety, we generally use volatile beentry pointers, although
203
+ * the memory barriers should theoretically be sufficient.
204
+ */
205
+ #define PGSTAT_BEGIN_WRITE_ACTIVITY(beentry) \
206
+ do { \
207
+ START_CRIT_SECTION(); \
208
+ (beentry)->st_changecount++; \
209
+ pg_write_barrier(); \
210
+ } while (0)
211
+
212
+ #define PGSTAT_END_WRITE_ACTIVITY(beentry) \
213
+ do { \
214
+ pg_write_barrier(); \
215
+ (beentry)->st_changecount++; \
216
+ Assert(((beentry)->st_changecount & 1) == 0); \
217
+ END_CRIT_SECTION(); \
218
+ } while (0)
219
+
220
+ #define pgstat_begin_read_activity(beentry, before_changecount) \
221
+ do { \
222
+ (before_changecount) = (beentry)->st_changecount; \
223
+ pg_read_barrier(); \
224
+ } while (0)
225
+
226
+ #define pgstat_end_read_activity(beentry, after_changecount) \
227
+ do { \
228
+ pg_read_barrier(); \
229
+ (after_changecount) = (beentry)->st_changecount; \
230
+ } while (0)
231
+
232
+ #define pgstat_read_activity_complete(before_changecount, after_changecount) \
233
+ ((before_changecount) == (after_changecount) && \
234
+ ((before_changecount) & 1) == 0)
235
+
236
+
237
+ /* ----------
238
+ * LocalPgBackendStatus
239
+ *
240
+ * When we build the backend status array, we use LocalPgBackendStatus to be
241
+ * able to add new values to the struct when needed without adding new fields
242
+ * to the shared memory. It contains the backend status as a first member.
243
+ * ----------
244
+ */
245
+ typedef struct LocalPgBackendStatus
246
+ {
247
+ /*
248
+ * Local version of the backend status entry.
249
+ */
250
+ PgBackendStatus backendStatus;
251
+
252
+ /*
253
+ * The backend ID. For auxiliary processes, this will be set to a value
254
+ * greater than MaxBackends (since auxiliary processes do not have proper
255
+ * backend IDs).
256
+ */
257
+ BackendId backend_id;
258
+
259
+ /*
260
+ * The xid of the current transaction if available, InvalidTransactionId
261
+ * if not.
262
+ */
263
+ TransactionId backend_xid;
264
+
265
+ /*
266
+ * The xmin of the current session if available, InvalidTransactionId if
267
+ * not.
268
+ */
269
+ TransactionId backend_xmin;
270
+
271
+ /*
272
+ * Number of cached subtransactions in the current session.
273
+ */
274
+ int backend_subxact_count;
275
+
276
+ /*
277
+ * The number of subtransactions in the current session which exceeded the
278
+ * cached subtransaction limit.
279
+ */
280
+ bool backend_subxact_overflowed;
281
+ } LocalPgBackendStatus;
282
+
283
+
284
+ /* ----------
285
+ * GUC parameters
286
+ * ----------
287
+ */
288
+ extern PGDLLIMPORT bool pgstat_track_activities;
289
+ extern PGDLLIMPORT int pgstat_track_activity_query_size;
290
+
291
+
292
+ /* ----------
293
+ * Other global variables
294
+ * ----------
295
+ */
296
+ extern PGDLLIMPORT PgBackendStatus *MyBEEntry;
297
+
298
+
299
+ /* ----------
300
+ * Functions called from postmaster
301
+ * ----------
302
+ */
303
+ extern Size BackendStatusShmemSize(void);
304
+ extern void CreateSharedBackendStatus(void);
305
+
306
+
307
+ /* ----------
308
+ * Functions called from backends
309
+ * ----------
310
+ */
311
+
312
+ /* Initialization functions */
313
+ extern void pgstat_beinit(void);
314
+ extern void pgstat_bestart(void);
315
+
316
+ extern void pgstat_clear_backend_activity_snapshot(void);
317
+
318
+ /* Activity reporting functions */
319
+ extern void pgstat_report_activity(BackendState state, const char *cmd_str);
320
+ extern void pgstat_report_query_id(uint64 query_id, bool force);
321
+ extern void pgstat_report_tempfile(size_t filesize);
322
+ extern void pgstat_report_appname(const char *appname);
323
+ extern void pgstat_report_xact_timestamp(TimestampTz tstamp);
324
+ extern const char *pgstat_get_backend_current_activity(int pid, bool checkUser);
325
+ extern const char *pgstat_get_crashed_backend_activity(int pid, char *buffer,
326
+ int buflen);
327
+ extern uint64 pgstat_get_my_query_id(void);
328
+
329
+
330
+ /* ----------
331
+ * Support functions for the SQL-callable functions to
332
+ * generate the pgstat* views.
333
+ * ----------
334
+ */
335
+ extern int pgstat_fetch_stat_numbackends(void);
336
+ extern PgBackendStatus *pgstat_get_beentry_by_backend_id(BackendId beid);
337
+ extern LocalPgBackendStatus *pgstat_get_local_beentry_by_backend_id(BackendId beid);
338
+ extern LocalPgBackendStatus *pgstat_get_local_beentry_by_index(int idx);
339
+ extern char *pgstat_clip_activity(const char *raw_activity);
340
+
341
+
342
+ #endif /* BACKEND_STATUS_H */