pg_query 2.1.0 → 4.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (472) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +104 -0
  3. data/README.md +59 -31
  4. data/Rakefile +2 -2
  5. data/ext/pg_query/extconf.rb +8 -2
  6. data/ext/pg_query/include/access/amapi.h +45 -1
  7. data/ext/pg_query/include/access/attmap.h +1 -1
  8. data/ext/pg_query/include/access/attnum.h +2 -2
  9. data/ext/pg_query/include/access/clog.h +4 -2
  10. data/ext/pg_query/include/access/commit_ts.h +6 -9
  11. data/ext/pg_query/include/access/detoast.h +1 -11
  12. data/ext/pg_query/include/access/genam.h +15 -12
  13. data/ext/pg_query/include/access/gin.h +2 -2
  14. data/ext/pg_query/include/access/htup.h +1 -1
  15. data/ext/pg_query/include/access/htup_details.h +75 -87
  16. data/ext/pg_query/include/access/itup.h +7 -1
  17. data/ext/pg_query/include/access/parallel.h +2 -2
  18. data/ext/pg_query/include/access/printtup.h +1 -1
  19. data/ext/pg_query/include/access/relation.h +1 -1
  20. data/ext/pg_query/include/access/relscan.h +17 -2
  21. data/ext/pg_query/include/access/rmgr.h +30 -3
  22. data/ext/pg_query/include/access/rmgrlist.h +23 -23
  23. data/ext/pg_query/include/access/sdir.h +1 -1
  24. data/ext/pg_query/include/access/skey.h +1 -1
  25. data/ext/pg_query/include/access/stratnum.h +4 -2
  26. data/ext/pg_query/include/access/sysattr.h +1 -1
  27. data/ext/pg_query/include/access/table.h +2 -1
  28. data/ext/pg_query/include/access/tableam.h +272 -20
  29. data/ext/pg_query/include/access/toast_compression.h +73 -0
  30. data/ext/pg_query/include/access/transam.h +123 -13
  31. data/ext/pg_query/include/access/tupconvert.h +1 -1
  32. data/ext/pg_query/include/access/tupdesc.h +1 -1
  33. data/ext/pg_query/include/access/tupmacs.h +3 -3
  34. data/ext/pg_query/include/access/twophase.h +5 -1
  35. data/ext/pg_query/include/access/xact.h +79 -19
  36. data/ext/pg_query/include/access/xlog.h +60 -155
  37. data/ext/pg_query/include/access/xlog_internal.h +50 -14
  38. data/ext/pg_query/include/access/xlogdefs.h +8 -16
  39. data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
  40. data/ext/pg_query/include/access/xlogreader.h +148 -32
  41. data/ext/pg_query/include/access/xlogrecord.h +18 -9
  42. data/ext/pg_query/include/access/xlogrecovery.h +157 -0
  43. data/ext/pg_query/include/c.h +101 -44
  44. data/ext/pg_query/include/catalog/catalog.h +3 -1
  45. data/ext/pg_query/include/catalog/catversion.h +2 -2
  46. data/ext/pg_query/include/catalog/dependency.h +10 -16
  47. data/ext/pg_query/include/catalog/genbki.h +83 -5
  48. data/ext/pg_query/include/catalog/index.h +18 -3
  49. data/ext/pg_query/include/catalog/indexing.h +12 -324
  50. data/ext/pg_query/include/catalog/namespace.h +4 -2
  51. data/ext/pg_query/include/catalog/objectaccess.h +70 -2
  52. data/ext/pg_query/include/catalog/objectaddress.h +11 -6
  53. data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
  54. data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
  55. data/ext/pg_query/include/catalog/pg_am.h +4 -1
  56. data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
  57. data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
  58. data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
  59. data/ext/pg_query/include/catalog/pg_authid.h +7 -2
  60. data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
  61. data/ext/pg_query/include/catalog/pg_class.h +45 -15
  62. data/ext/pg_query/include/catalog/pg_class_d.h +31 -2
  63. data/ext/pg_query/include/catalog/pg_collation.h +33 -8
  64. data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
  65. data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
  66. data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
  67. data/ext/pg_query/include/catalog/pg_control.h +5 -5
  68. data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
  69. data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
  70. data/ext/pg_query/include/catalog/pg_depend.h +11 -7
  71. data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
  72. data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
  73. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
  74. data/ext/pg_query/include/catalog/pg_index.h +17 -7
  75. data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
  76. data/ext/pg_query/include/catalog/pg_language.h +10 -5
  77. data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
  78. data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
  79. data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
  80. data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
  81. data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
  82. data/ext/pg_query/include/catalog/pg_operator.h +21 -16
  83. data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
  84. data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
  85. data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
  86. data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
  87. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
  88. data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
  89. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
  90. data/ext/pg_query/include/catalog/pg_proc.h +20 -11
  91. data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
  92. data/ext/pg_query/include/catalog/pg_publication.h +50 -4
  93. data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
  94. data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
  95. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
  96. data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
  97. data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
  98. data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
  99. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
  100. data/ext/pg_query/include/catalog/pg_transform.h +8 -5
  101. data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
  102. data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
  103. data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
  104. data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
  105. data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
  106. data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
  107. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
  108. data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
  109. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
  110. data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
  111. data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
  112. data/ext/pg_query/include/catalog/pg_type.h +56 -24
  113. data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
  114. data/ext/pg_query/include/catalog/storage.h +5 -3
  115. data/ext/pg_query/include/commands/async.h +4 -5
  116. data/ext/pg_query/include/commands/dbcommands.h +2 -1
  117. data/ext/pg_query/include/commands/defrem.h +11 -24
  118. data/ext/pg_query/include/commands/event_trigger.h +2 -2
  119. data/ext/pg_query/include/commands/explain.h +1 -1
  120. data/ext/pg_query/include/commands/prepare.h +1 -1
  121. data/ext/pg_query/include/commands/tablespace.h +3 -1
  122. data/ext/pg_query/include/commands/trigger.h +27 -17
  123. data/ext/pg_query/include/commands/user.h +2 -2
  124. data/ext/pg_query/include/commands/vacuum.h +88 -41
  125. data/ext/pg_query/include/commands/variable.h +1 -1
  126. data/ext/pg_query/include/common/file_perm.h +4 -4
  127. data/ext/pg_query/include/common/hashfn.h +1 -1
  128. data/ext/pg_query/include/common/ip.h +1 -7
  129. data/ext/pg_query/include/common/keywords.h +2 -6
  130. data/ext/pg_query/include/common/kwlookup.h +1 -1
  131. data/ext/pg_query/include/common/pg_prng.h +60 -0
  132. data/ext/pg_query/include/common/relpath.h +2 -2
  133. data/ext/pg_query/include/common/string.h +24 -1
  134. data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
  135. data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
  136. data/ext/pg_query/include/datatype/timestamp.h +40 -1
  137. data/ext/pg_query/include/executor/execdesc.h +1 -1
  138. data/ext/pg_query/include/executor/executor.h +65 -22
  139. data/ext/pg_query/include/executor/functions.h +17 -3
  140. data/ext/pg_query/include/executor/instrument.h +33 -16
  141. data/ext/pg_query/include/executor/spi.h +41 -3
  142. data/ext/pg_query/include/executor/tablefunc.h +1 -1
  143. data/ext/pg_query/include/executor/tuptable.h +1 -1
  144. data/ext/pg_query/include/fmgr.h +13 -7
  145. data/ext/pg_query/include/funcapi.h +16 -4
  146. data/ext/pg_query/include/getaddrinfo.h +1 -1
  147. data/ext/pg_query/include/jit/jit.h +11 -11
  148. data/ext/pg_query/include/kwlist_d.h +517 -494
  149. data/ext/pg_query/include/lib/dshash.h +112 -0
  150. data/ext/pg_query/include/lib/ilist.h +20 -1
  151. data/ext/pg_query/include/lib/pairingheap.h +1 -1
  152. data/ext/pg_query/include/lib/simplehash.h +150 -25
  153. data/ext/pg_query/include/lib/sort_template.h +432 -0
  154. data/ext/pg_query/include/lib/stringinfo.h +1 -1
  155. data/ext/pg_query/include/libpq/auth.h +6 -4
  156. data/ext/pg_query/include/libpq/crypt.h +5 -4
  157. data/ext/pg_query/include/libpq/hba.h +43 -4
  158. data/ext/pg_query/include/libpq/libpq-be.h +23 -6
  159. data/ext/pg_query/include/libpq/libpq.h +31 -20
  160. data/ext/pg_query/include/libpq/pqcomm.h +17 -31
  161. data/ext/pg_query/include/libpq/pqformat.h +1 -1
  162. data/ext/pg_query/include/libpq/pqsignal.h +4 -4
  163. data/ext/pg_query/include/mb/pg_wchar.h +106 -23
  164. data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
  165. data/ext/pg_query/include/miscadmin.h +71 -52
  166. data/ext/pg_query/include/nodes/bitmapset.h +1 -1
  167. data/ext/pg_query/include/nodes/execnodes.h +272 -80
  168. data/ext/pg_query/include/nodes/extensible.h +4 -2
  169. data/ext/pg_query/include/nodes/lockoptions.h +1 -1
  170. data/ext/pg_query/include/nodes/makefuncs.h +7 -6
  171. data/ext/pg_query/include/nodes/memnodes.h +5 -3
  172. data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
  173. data/ext/pg_query/include/nodes/nodes.h +30 -11
  174. data/ext/pg_query/include/nodes/params.h +1 -1
  175. data/ext/pg_query/include/nodes/parsenodes.h +327 -94
  176. data/ext/pg_query/include/nodes/pathnodes.h +245 -67
  177. data/ext/pg_query/include/nodes/pg_list.h +75 -68
  178. data/ext/pg_query/include/nodes/plannodes.h +128 -30
  179. data/ext/pg_query/include/nodes/primnodes.h +99 -47
  180. data/ext/pg_query/include/nodes/print.h +1 -1
  181. data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
  182. data/ext/pg_query/include/nodes/value.h +58 -39
  183. data/ext/pg_query/include/optimizer/cost.h +9 -2
  184. data/ext/pg_query/include/optimizer/geqo.h +9 -7
  185. data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
  186. data/ext/pg_query/include/optimizer/optimizer.h +25 -22
  187. data/ext/pg_query/include/optimizer/paths.h +6 -6
  188. data/ext/pg_query/include/optimizer/planmain.h +15 -14
  189. data/ext/pg_query/include/parser/analyze.h +19 -5
  190. data/ext/pg_query/include/parser/gram.h +947 -913
  191. data/ext/pg_query/include/parser/gramparse.h +1 -1
  192. data/ext/pg_query/include/parser/kwlist.h +463 -453
  193. data/ext/pg_query/include/parser/parse_agg.h +2 -7
  194. data/ext/pg_query/include/parser/parse_coerce.h +4 -1
  195. data/ext/pg_query/include/parser/parse_expr.h +2 -3
  196. data/ext/pg_query/include/parser/parse_func.h +2 -1
  197. data/ext/pg_query/include/parser/parse_node.h +21 -9
  198. data/ext/pg_query/include/parser/parse_oper.h +1 -3
  199. data/ext/pg_query/include/parser/parse_relation.h +5 -4
  200. data/ext/pg_query/include/parser/parse_type.h +1 -1
  201. data/ext/pg_query/include/parser/parser.h +31 -4
  202. data/ext/pg_query/include/parser/parsetree.h +1 -1
  203. data/ext/pg_query/include/parser/scanner.h +1 -1
  204. data/ext/pg_query/include/parser/scansup.h +2 -5
  205. data/ext/pg_query/include/partitioning/partdefs.h +1 -1
  206. data/ext/pg_query/include/pg_config.h +94 -46
  207. data/ext/pg_query/include/pg_config_manual.h +74 -21
  208. data/ext/pg_query/include/pg_getopt.h +6 -6
  209. data/ext/pg_query/include/pg_query.h +5 -4
  210. data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
  211. data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
  212. data/ext/pg_query/include/pg_query_fingerprint_defs.c +1220 -422
  213. data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
  214. data/ext/pg_query/include/pg_query_outfuncs_defs.c +152 -26
  215. data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
  216. data/ext/pg_query/include/pg_query_readfuncs_defs.c +174 -30
  217. data/ext/pg_query/include/pg_trace.h +1 -1
  218. data/ext/pg_query/include/pgstat.h +449 -1237
  219. data/ext/pg_query/include/pgtime.h +14 -4
  220. data/ext/pg_query/include/pl_gram.h +126 -128
  221. data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
  222. data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
  223. data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
  224. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
  225. data/ext/pg_query/include/plerrcodes.h +9 -1
  226. data/ext/pg_query/include/plpgsql.h +52 -54
  227. data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
  228. data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
  229. data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
  230. data/ext/pg_query/include/port/atomics/fallback.h +1 -1
  231. data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
  232. data/ext/pg_query/include/port/atomics/generic.h +1 -1
  233. data/ext/pg_query/include/port/atomics.h +1 -1
  234. data/ext/pg_query/include/port/pg_bitutils.h +88 -12
  235. data/ext/pg_query/include/port/pg_bswap.h +1 -1
  236. data/ext/pg_query/include/port/pg_crc32c.h +1 -1
  237. data/ext/pg_query/include/port.h +72 -43
  238. data/ext/pg_query/include/portability/instr_time.h +1 -1
  239. data/ext/pg_query/include/postgres.h +60 -16
  240. data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
  241. data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
  242. data/ext/pg_query/include/postmaster/bgworker.h +2 -1
  243. data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
  244. data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
  245. data/ext/pg_query/include/postmaster/fork_process.h +1 -1
  246. data/ext/pg_query/include/postmaster/interrupt.h +1 -1
  247. data/ext/pg_query/include/postmaster/pgarch.h +42 -8
  248. data/ext/pg_query/include/postmaster/postmaster.h +18 -17
  249. data/ext/pg_query/include/postmaster/startup.h +39 -0
  250. data/ext/pg_query/include/postmaster/syslogger.h +15 -10
  251. data/ext/pg_query/include/postmaster/walwriter.h +3 -3
  252. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1422 -916
  253. data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
  254. data/ext/pg_query/include/regex/regex.h +18 -16
  255. data/ext/pg_query/include/replication/logicallauncher.h +3 -5
  256. data/ext/pg_query/include/replication/logicalproto.h +161 -17
  257. data/ext/pg_query/include/replication/logicalworker.h +1 -1
  258. data/ext/pg_query/include/replication/origin.h +7 -7
  259. data/ext/pg_query/include/replication/reorderbuffer.h +262 -44
  260. data/ext/pg_query/include/replication/slot.h +23 -12
  261. data/ext/pg_query/include/replication/syncrep.h +5 -5
  262. data/ext/pg_query/include/replication/walreceiver.h +145 -13
  263. data/ext/pg_query/include/replication/walsender.h +8 -8
  264. data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
  265. data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
  266. data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
  267. data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
  268. data/ext/pg_query/include/storage/backendid.h +3 -3
  269. data/ext/pg_query/include/storage/block.h +4 -10
  270. data/ext/pg_query/include/storage/buf.h +1 -1
  271. data/ext/pg_query/include/storage/bufmgr.h +19 -14
  272. data/ext/pg_query/include/storage/bufpage.h +6 -8
  273. data/ext/pg_query/include/storage/condition_variable.h +13 -2
  274. data/ext/pg_query/include/storage/dsm.h +4 -1
  275. data/ext/pg_query/include/storage/dsm_impl.h +3 -2
  276. data/ext/pg_query/include/storage/fd.h +33 -3
  277. data/ext/pg_query/include/storage/fileset.h +40 -0
  278. data/ext/pg_query/include/storage/ipc.h +4 -1
  279. data/ext/pg_query/include/storage/item.h +1 -1
  280. data/ext/pg_query/include/storage/itemid.h +1 -1
  281. data/ext/pg_query/include/storage/itemptr.h +3 -1
  282. data/ext/pg_query/include/storage/large_object.h +2 -2
  283. data/ext/pg_query/include/storage/latch.h +9 -13
  284. data/ext/pg_query/include/storage/lmgr.h +2 -1
  285. data/ext/pg_query/include/storage/lock.h +17 -13
  286. data/ext/pg_query/include/storage/lockdefs.h +2 -2
  287. data/ext/pg_query/include/storage/lwlock.h +6 -32
  288. data/ext/pg_query/include/storage/lwlocknames.h +0 -1
  289. data/ext/pg_query/include/storage/off.h +1 -1
  290. data/ext/pg_query/include/storage/pg_sema.h +1 -1
  291. data/ext/pg_query/include/storage/pg_shmem.h +9 -7
  292. data/ext/pg_query/include/storage/pmsignal.h +15 -4
  293. data/ext/pg_query/include/storage/predicate.h +4 -4
  294. data/ext/pg_query/include/storage/proc.h +183 -55
  295. data/ext/pg_query/include/storage/procarray.h +98 -0
  296. data/ext/pg_query/include/storage/proclist_types.h +1 -1
  297. data/ext/pg_query/include/storage/procsignal.h +3 -7
  298. data/ext/pg_query/include/storage/relfilenode.h +1 -1
  299. data/ext/pg_query/include/storage/s_lock.h +67 -4
  300. data/ext/pg_query/include/storage/sharedfileset.h +3 -11
  301. data/ext/pg_query/include/storage/shm_mq.h +5 -4
  302. data/ext/pg_query/include/storage/shm_toc.h +1 -1
  303. data/ext/pg_query/include/storage/shmem.h +1 -1
  304. data/ext/pg_query/include/storage/sinval.h +3 -3
  305. data/ext/pg_query/include/storage/sinvaladt.h +1 -1
  306. data/ext/pg_query/include/storage/smgr.h +10 -8
  307. data/ext/pg_query/include/storage/spin.h +2 -2
  308. data/ext/pg_query/include/storage/standby.h +13 -6
  309. data/ext/pg_query/include/storage/standbydefs.h +2 -2
  310. data/ext/pg_query/include/storage/sync.h +7 -3
  311. data/ext/pg_query/include/tcop/cmdtag.h +1 -1
  312. data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
  313. data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
  314. data/ext/pg_query/include/tcop/dest.h +1 -1
  315. data/ext/pg_query/include/tcop/fastpath.h +1 -2
  316. data/ext/pg_query/include/tcop/pquery.h +7 -1
  317. data/ext/pg_query/include/tcop/tcopprot.h +19 -11
  318. data/ext/pg_query/include/tcop/utility.h +7 -3
  319. data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
  320. data/ext/pg_query/include/utils/acl.h +24 -3
  321. data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
  322. data/ext/pg_query/include/utils/array.h +7 -2
  323. data/ext/pg_query/include/utils/backend_progress.h +44 -0
  324. data/ext/pg_query/include/utils/backend_status.h +321 -0
  325. data/ext/pg_query/include/utils/builtins.h +11 -11
  326. data/ext/pg_query/include/utils/bytea.h +3 -2
  327. data/ext/pg_query/include/utils/catcache.h +1 -1
  328. data/ext/pg_query/include/utils/date.h +1 -1
  329. data/ext/pg_query/include/utils/datetime.h +8 -7
  330. data/ext/pg_query/include/utils/datum.h +9 -1
  331. data/ext/pg_query/include/utils/dsa.h +1 -1
  332. data/ext/pg_query/include/utils/dynahash.h +4 -3
  333. data/ext/pg_query/include/utils/elog.h +52 -21
  334. data/ext/pg_query/include/utils/errcodes.h +2 -0
  335. data/ext/pg_query/include/utils/expandeddatum.h +1 -1
  336. data/ext/pg_query/include/utils/expandedrecord.h +1 -1
  337. data/ext/pg_query/include/utils/float.h +7 -7
  338. data/ext/pg_query/include/utils/fmgroids.h +1300 -696
  339. data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
  340. data/ext/pg_query/include/utils/fmgrtab.h +6 -5
  341. data/ext/pg_query/include/utils/guc.h +69 -43
  342. data/ext/pg_query/include/utils/guc_tables.h +23 -19
  343. data/ext/pg_query/include/utils/hsearch.h +15 -11
  344. data/ext/pg_query/include/utils/inval.h +5 -1
  345. data/ext/pg_query/include/utils/lsyscache.h +11 -1
  346. data/ext/pg_query/include/utils/memdebug.h +1 -1
  347. data/ext/pg_query/include/utils/memutils.h +8 -3
  348. data/ext/pg_query/include/utils/numeric.h +19 -5
  349. data/ext/pg_query/include/utils/palloc.h +25 -3
  350. data/ext/pg_query/include/utils/partcache.h +1 -1
  351. data/ext/pg_query/include/utils/pg_locale.h +17 -9
  352. data/ext/pg_query/include/utils/pg_lsn.h +1 -1
  353. data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
  354. data/ext/pg_query/include/utils/pidfile.h +1 -1
  355. data/ext/pg_query/include/utils/plancache.h +6 -5
  356. data/ext/pg_query/include/utils/portal.h +12 -1
  357. data/ext/pg_query/include/utils/ps_status.h +1 -1
  358. data/ext/pg_query/include/utils/queryenvironment.h +1 -1
  359. data/ext/pg_query/include/utils/queryjumble.h +88 -0
  360. data/ext/pg_query/include/utils/regproc.h +14 -3
  361. data/ext/pg_query/include/utils/rel.h +71 -20
  362. data/ext/pg_query/include/utils/relcache.h +9 -7
  363. data/ext/pg_query/include/utils/reltrigger.h +1 -1
  364. data/ext/pg_query/include/utils/resowner.h +1 -1
  365. data/ext/pg_query/include/utils/rls.h +2 -2
  366. data/ext/pg_query/include/utils/ruleutils.h +4 -1
  367. data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
  368. data/ext/pg_query/include/utils/snapmgr.h +35 -14
  369. data/ext/pg_query/include/utils/snapshot.h +14 -1
  370. data/ext/pg_query/include/utils/sortsupport.h +117 -2
  371. data/ext/pg_query/include/utils/syscache.h +6 -1
  372. data/ext/pg_query/include/utils/timeout.h +11 -4
  373. data/ext/pg_query/include/utils/timestamp.h +6 -5
  374. data/ext/pg_query/include/utils/tuplesort.h +25 -11
  375. data/ext/pg_query/include/utils/tuplestore.h +2 -2
  376. data/ext/pg_query/include/utils/typcache.h +24 -17
  377. data/ext/pg_query/include/utils/tzparser.h +1 -1
  378. data/ext/pg_query/include/utils/varlena.h +5 -3
  379. data/ext/pg_query/include/utils/wait_event.h +289 -0
  380. data/ext/pg_query/include/utils/xml.h +4 -4
  381. data/ext/pg_query/pg_query.pb-c.c +4318 -2307
  382. data/ext/pg_query/pg_query_deparse.c +1114 -381
  383. data/ext/pg_query/pg_query_fingerprint.c +46 -10
  384. data/ext/pg_query/pg_query_fingerprint.h +3 -1
  385. data/ext/pg_query/pg_query_json_plpgsql.c +55 -12
  386. data/ext/pg_query/pg_query_normalize.c +163 -20
  387. data/ext/pg_query/pg_query_outfuncs.h +1 -0
  388. data/ext/pg_query/pg_query_outfuncs_json.c +65 -16
  389. data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
  390. data/ext/pg_query/pg_query_parse.c +1 -1
  391. data/ext/pg_query/pg_query_parse_plpgsql.c +79 -16
  392. data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
  393. data/ext/pg_query/pg_query_ruby.c +1 -1
  394. data/ext/pg_query/pg_query_scan.c +2 -1
  395. data/ext/pg_query/pg_query_split.c +3 -2
  396. data/ext/pg_query/src_backend_catalog_namespace.c +21 -9
  397. data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
  398. data/ext/pg_query/src_backend_commands_define.c +11 -1
  399. data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
  400. data/ext/pg_query/src_backend_nodes_copyfuncs.c +424 -109
  401. data/ext/pg_query/src_backend_nodes_equalfuncs.c +291 -46
  402. data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
  403. data/ext/pg_query/src_backend_nodes_list.c +86 -11
  404. data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
  405. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
  406. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  407. data/ext/pg_query/src_backend_parser_gram.c +33890 -31262
  408. data/ext/pg_query/src_backend_parser_parser.c +26 -7
  409. data/ext/pg_query/src_backend_parser_scan.c +644 -441
  410. data/ext/pg_query/src_backend_parser_scansup.c +4 -28
  411. data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
  412. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  413. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
  414. data/ext/pg_query/src_backend_tcop_postgres.c +73 -24
  415. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  416. data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
  417. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  418. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  419. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +109 -15
  420. data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
  421. data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
  422. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
  423. data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
  424. data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
  425. data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
  426. data/ext/pg_query/src_backend_utils_misc_guc.c +207 -45
  427. data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
  428. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
  429. data/ext/pg_query/src_common_encnames.c +1 -1
  430. data/ext/pg_query/src_common_hashfn.c +3 -3
  431. data/ext/pg_query/src_common_keywords.c +15 -2
  432. data/ext/pg_query/src_common_kwlist_d.h +517 -494
  433. data/ext/pg_query/src_common_kwlookup.c +1 -1
  434. data/ext/pg_query/src_common_pg_prng.c +152 -0
  435. data/ext/pg_query/src_common_psprintf.c +1 -1
  436. data/ext/pg_query/src_common_string.c +7 -1
  437. data/ext/pg_query/src_common_stringinfo.c +1 -1
  438. data/ext/pg_query/src_common_wchar.c +712 -109
  439. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +49 -22
  440. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
  441. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1235 -1261
  442. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  443. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  444. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
  445. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
  446. data/ext/pg_query/src_port_pg_bitutils.c +41 -52
  447. data/ext/pg_query/src_port_pgsleep.c +1 -1
  448. data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
  449. data/ext/pg_query/src_port_qsort.c +12 -224
  450. data/ext/pg_query/src_port_snprintf.c +46 -20
  451. data/ext/pg_query/src_port_strerror.c +9 -19
  452. data/ext/pg_query/src_port_strnlen.c +1 -1
  453. data/lib/pg_query/deparse.rb +7 -1
  454. data/lib/pg_query/filter_columns.rb +6 -4
  455. data/lib/pg_query/fingerprint.rb +18 -3
  456. data/lib/pg_query/node.rb +2 -2
  457. data/lib/pg_query/param_refs.rb +1 -1
  458. data/lib/pg_query/parse.rb +87 -51
  459. data/lib/pg_query/pg_query_pb.rb +1109 -942
  460. data/lib/pg_query/treewalker.rb +6 -0
  461. data/lib/pg_query/truncate.rb +54 -8
  462. data/lib/pg_query/version.rb +1 -1
  463. metadata +29 -18
  464. data/ext/pg_query/include/access/xloginsert.h +0 -64
  465. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  466. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  467. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  468. data/ext/pg_query/include/parser/parse_target.h +0 -46
  469. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -651
  470. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  471. data/ext/pg_query/src_port_erand48.c +0 -127
  472. data/ext/pg_query/src_port_random.c +0 -31
@@ -3,7 +3,7 @@
3
3
  * port.h
4
4
  * Header for src/port/ compatibility functions.
5
5
  *
6
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/port.h
@@ -14,8 +14,6 @@
14
14
  #define PG_PORT_H
15
15
 
16
16
  #include <ctype.h>
17
- #include <netdb.h>
18
- #include <pwd.h>
19
17
 
20
18
  /*
21
19
  * Windows has enough specialized port stuff that we push most of it off
@@ -37,6 +35,11 @@ typedef SOCKET pgsocket;
37
35
  #define PGINVALID_SOCKET INVALID_SOCKET
38
36
  #endif
39
37
 
38
+ /* if platform lacks socklen_t, we assume this will work */
39
+ #ifndef HAVE_SOCKLEN_T
40
+ typedef unsigned int socklen_t;
41
+ #endif
42
+
40
43
  /* non-blocking */
41
44
  extern bool pg_set_noblock(pgsocket sock);
42
45
  extern bool pg_set_block(pgsocket sock);
@@ -75,34 +78,62 @@ extern void get_parent_directory(char *path);
75
78
  extern char **pgfnames(const char *path);
76
79
  extern void pgfnames_cleanup(char **filenames);
77
80
 
78
- /*
79
- * is_absolute_path
80
- *
81
- * By making this a macro we avoid needing to include path.c in libpq.
82
- */
83
- #ifndef WIN32
84
- #define IS_DIR_SEP(ch) ((ch) == '/')
85
-
86
- #define is_absolute_path(filename) \
81
+ #define IS_NONWINDOWS_DIR_SEP(ch) ((ch) == '/')
82
+ #define is_nonwindows_absolute_path(filename) \
87
83
  ( \
88
- IS_DIR_SEP((filename)[0]) \
84
+ IS_NONWINDOWS_DIR_SEP((filename)[0]) \
89
85
  )
90
- #else
91
- #define IS_DIR_SEP(ch) ((ch) == '/' || (ch) == '\\')
92
86
 
87
+ #define IS_WINDOWS_DIR_SEP(ch) ((ch) == '/' || (ch) == '\\')
93
88
  /* See path_is_relative_and_below_cwd() for how we handle 'E:abc'. */
94
- #define is_absolute_path(filename) \
89
+ #define is_windows_absolute_path(filename) \
95
90
  ( \
96
- IS_DIR_SEP((filename)[0]) || \
91
+ IS_WINDOWS_DIR_SEP((filename)[0]) || \
97
92
  (isalpha((unsigned char) ((filename)[0])) && (filename)[1] == ':' && \
98
- IS_DIR_SEP((filename)[2])) \
93
+ IS_WINDOWS_DIR_SEP((filename)[2])) \
99
94
  )
95
+
96
+ /*
97
+ * is_absolute_path and IS_DIR_SEP
98
+ *
99
+ * By using macros here we avoid needing to include path.c in libpq.
100
+ */
101
+ #ifndef WIN32
102
+ #define IS_DIR_SEP(ch) IS_NONWINDOWS_DIR_SEP(ch)
103
+ #define is_absolute_path(filename) is_nonwindows_absolute_path(filename)
104
+ #else
105
+ #define IS_DIR_SEP(ch) IS_WINDOWS_DIR_SEP(ch)
106
+ #define is_absolute_path(filename) is_windows_absolute_path(filename)
100
107
  #endif
101
108
 
109
+ /*
110
+ * This macro provides a centralized list of all errnos that identify
111
+ * hard failure of a previously-established network connection.
112
+ * The macro is intended to be used in a switch statement, in the form
113
+ * "case ALL_CONNECTION_FAILURE_ERRNOS:".
114
+ *
115
+ * Note: this groups EPIPE and ECONNRESET, which we take to indicate a
116
+ * probable server crash, with other errors that indicate loss of network
117
+ * connectivity without proving much about the server's state. Places that
118
+ * are actually reporting errors typically single out EPIPE and ECONNRESET,
119
+ * while allowing the network failures to be reported generically.
120
+ */
121
+ #define ALL_CONNECTION_FAILURE_ERRNOS \
122
+ EPIPE: \
123
+ case ECONNRESET: \
124
+ case ECONNABORTED: \
125
+ case EHOSTDOWN: \
126
+ case EHOSTUNREACH: \
127
+ case ENETDOWN: \
128
+ case ENETRESET: \
129
+ case ENETUNREACH: \
130
+ case ETIMEDOUT
131
+
102
132
  /* Portable locale initialization (in exec.c) */
103
133
  extern void set_pglocale_pgservice(const char *argv0, const char *app);
104
134
 
105
135
  /* Portable way to find and execute binaries (in exec.c) */
136
+ extern int validate_exec(const char *path);
106
137
  extern int find_my_exec(const char *argv0, char *retpath);
107
138
  extern int find_other_exec(const char *argv0, const char *target,
108
139
  const char *versionstr, char *retpath);
@@ -111,6 +142,11 @@ extern char *pipe_read_line(char *cmd, char *line, int maxsize);
111
142
  /* Doesn't belong here, but this is used with find_other_exec(), so... */
112
143
  #define PG_BACKEND_VERSIONSTR "postgres (PostgreSQL) " PG_VERSION "\n"
113
144
 
145
+ #ifdef EXEC_BACKEND
146
+ /* Disable ASLR before exec, for developer builds only (in exec.c) */
147
+ extern int pg_disable_aslr(void);
148
+ #endif
149
+
114
150
 
115
151
  #if defined(WIN32) || defined(__CYGWIN__)
116
152
  #define EXE ".exe"
@@ -213,10 +249,6 @@ extern char *pg_strerror_r(int errnum, char *buf, size_t buflen);
213
249
  /* Wrap strsignal(), or provide our own version if necessary */
214
250
  extern const char *pg_strsignal(int signum);
215
251
 
216
- /* Portable prompt handling */
217
- extern void simple_prompt(const char *prompt, char *destination, size_t destlen,
218
- bool echo);
219
-
220
252
  extern int pclose_check(FILE *stream);
221
253
 
222
254
  /* Global variable holding time zone information. */
@@ -271,6 +303,7 @@ extern bool rmtree(const char *path, bool rmtopdir);
271
303
  * passing of other special options.
272
304
  */
273
305
  #define O_DIRECT 0x80000000
306
+ extern HANDLE pgwin32_open_handle(const char *, int, bool);
274
307
  extern int pgwin32_open(const char *, int,...);
275
308
  extern FILE *pgwin32_fopen(const char *, const char *);
276
309
  #define open(a,b,c) pgwin32_open(a,b,c)
@@ -337,11 +370,6 @@ extern int gettimeofday(struct timeval *tp, struct timezone *tzp);
337
370
  #define pgoff_t off_t
338
371
  #endif
339
372
 
340
- extern double pg_erand48(unsigned short xseed[3]);
341
- extern long pg_lrand48(void);
342
- extern long pg_jrand48(unsigned short xseed[3]);
343
- extern void pg_srand48(long seed);
344
-
345
373
  #ifndef HAVE_FLS
346
374
  extern int fls(int mask);
347
375
  #endif
@@ -413,6 +441,8 @@ extern ssize_t pg_pread(int fd, void *buf, size_t nbyte, off_t offset);
413
441
  extern ssize_t pg_pwrite(int fd, const void *buf, size_t nbyte, off_t offset);
414
442
  #endif
415
443
 
444
+ /* For pg_pwritev() and pg_preadv(), see port/pg_iovec.h. */
445
+
416
446
  #if !HAVE_DECL_STRLCAT
417
447
  extern size_t strlcat(char *dst, const char *src, size_t siz);
418
448
  #endif
@@ -425,16 +455,12 @@ extern size_t strlcpy(char *dst, const char *src, size_t siz);
425
455
  extern size_t strnlen(const char *str, size_t maxlen);
426
456
  #endif
427
457
 
428
- #if !defined(HAVE_RANDOM)
429
- extern long random(void);
458
+ #ifndef HAVE_SETENV
459
+ extern int setenv(const char *name, const char *value, int overwrite);
430
460
  #endif
431
461
 
432
462
  #ifndef HAVE_UNSETENV
433
- extern void unsetenv(const char *name);
434
- #endif
435
-
436
- #ifndef HAVE_SRANDOM
437
- extern void srandom(unsigned int seed);
463
+ extern int unsetenv(const char *name);
438
464
  #endif
439
465
 
440
466
  #ifndef HAVE_DLOPEN
@@ -460,18 +486,12 @@ extern char *dlerror(void);
460
486
  #define RTLD_GLOBAL 0
461
487
  #endif
462
488
 
463
- /* thread.h */
489
+ /* thread.c */
464
490
  #ifndef WIN32
465
- extern int pqGetpwuid(uid_t uid, struct passwd *resultbuf, char *buffer,
466
- size_t buflen, struct passwd **result);
491
+ extern bool pg_get_user_name(uid_t user_id, char *buffer, size_t buflen);
492
+ extern bool pg_get_user_home_dir(uid_t user_id, char *buffer, size_t buflen);
467
493
  #endif
468
494
 
469
- extern int pqGethostbyname(const char *name,
470
- struct hostent *resultbuf,
471
- char *buffer, size_t buflen,
472
- struct hostent **result,
473
- int *herrno);
474
-
475
495
  extern void pg_qsort(void *base, size_t nel, size_t elsize,
476
496
  int (*cmp) (const void *, const void *));
477
497
  extern int pg_qsort_strcmp(const void *a, const void *b);
@@ -483,6 +503,14 @@ typedef int (*qsort_arg_comparator) (const void *a, const void *b, void *arg);
483
503
  extern void qsort_arg(void *base, size_t nel, size_t elsize,
484
504
  qsort_arg_comparator cmp, void *arg);
485
505
 
506
+ extern void qsort_interruptible(void *base, size_t nel, size_t elsize,
507
+ qsort_arg_comparator cmp, void *arg);
508
+
509
+ extern void *bsearch_arg(const void *key, const void *base,
510
+ size_t nmemb, size_t size,
511
+ int (*compar) (const void *, const void *, void *),
512
+ void *arg);
513
+
486
514
  /* port/chklocale.c */
487
515
  extern int pg_get_encoding_from_locale(const char *ctype, bool write_message);
488
516
 
@@ -495,6 +523,7 @@ extern char *pg_inet_net_ntop(int af, const void *src, int bits,
495
523
  char *dst, size_t size);
496
524
 
497
525
  /* port/pg_strong_random.c */
526
+ extern void pg_strong_random_init(void);
498
527
  extern bool pg_strong_random(void *buf, size_t len);
499
528
 
500
529
  /*
@@ -46,7 +46,7 @@
46
46
  * Beware of multiple evaluations of the macro arguments.
47
47
  *
48
48
  *
49
- * Copyright (c) 2001-2020, PostgreSQL Global Development Group
49
+ * Copyright (c) 2001-2022, PostgreSQL Global Development Group
50
50
  *
51
51
  * src/include/portability/instr_time.h
52
52
  *
@@ -7,7 +7,7 @@
7
7
  * Client-side code should include postgres_fe.h instead.
8
8
  *
9
9
  *
10
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
10
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
11
11
  * Portions Copyright (c) 1995, Regents of the University of California
12
12
  *
13
13
  * src/include/postgres.h
@@ -55,7 +55,9 @@
55
55
  /*
56
56
  * struct varatt_external is a traditional "TOAST pointer", that is, the
57
57
  * information needed to fetch a Datum stored out-of-line in a TOAST table.
58
- * The data is compressed if and only if va_extsize < va_rawsize - VARHDRSZ.
58
+ * The data is compressed if and only if the external size stored in
59
+ * va_extinfo is less than va_rawsize - VARHDRSZ.
60
+ *
59
61
  * This struct must not contain any padding, because we sometimes compare
60
62
  * these pointers using memcmp.
61
63
  *
@@ -67,11 +69,19 @@
67
69
  typedef struct varatt_external
68
70
  {
69
71
  int32 va_rawsize; /* Original data size (includes header) */
70
- int32 va_extsize; /* External saved size (doesn't) */
72
+ uint32 va_extinfo; /* External saved size (without header) and
73
+ * compression method */
71
74
  Oid va_valueid; /* Unique ID of value within TOAST table */
72
75
  Oid va_toastrelid; /* RelID of TOAST table containing it */
73
76
  } varatt_external;
74
77
 
78
+ /*
79
+ * These macros define the "saved size" portion of va_extinfo. Its remaining
80
+ * two high-order bits identify the compression method.
81
+ */
82
+ #define VARLENA_EXTSIZE_BITS 30
83
+ #define VARLENA_EXTSIZE_MASK ((1U << VARLENA_EXTSIZE_BITS) - 1)
84
+
75
85
  /*
76
86
  * struct varatt_indirect is a "TOAST pointer" representing an out-of-line
77
87
  * Datum that's stored in memory, not in an external toast relation.
@@ -145,7 +155,8 @@ typedef union
145
155
  struct /* Compressed-in-line format */
146
156
  {
147
157
  uint32 va_header;
148
- uint32 va_rawsize; /* Original data size (excludes header) */
158
+ uint32 va_tcinfo; /* Original data size (excludes header) and
159
+ * compression method; see va_extinfo */
149
160
  char va_data[FLEXIBLE_ARRAY_MEMBER]; /* Compressed data */
150
161
  } va_compressed;
151
162
  } varattrib_4b;
@@ -231,6 +242,7 @@ typedef struct
231
242
  #define SET_VARTAG_1B_E(PTR,tag) \
232
243
  (((varattrib_1b_e *) (PTR))->va_header = 0x80, \
233
244
  ((varattrib_1b_e *) (PTR))->va_tag = (tag))
245
+
234
246
  #else /* !WORDS_BIGENDIAN */
235
247
 
236
248
  #define VARATT_IS_4B(PTR) \
@@ -263,9 +275,22 @@ typedef struct
263
275
  #define SET_VARTAG_1B_E(PTR,tag) \
264
276
  (((varattrib_1b_e *) (PTR))->va_header = 0x01, \
265
277
  ((varattrib_1b_e *) (PTR))->va_tag = (tag))
278
+
266
279
  #endif /* WORDS_BIGENDIAN */
267
280
 
281
+ #define VARDATA_4B(PTR) (((varattrib_4b *) (PTR))->va_4byte.va_data)
282
+ #define VARDATA_4B_C(PTR) (((varattrib_4b *) (PTR))->va_compressed.va_data)
283
+ #define VARDATA_1B(PTR) (((varattrib_1b *) (PTR))->va_data)
284
+ #define VARDATA_1B_E(PTR) (((varattrib_1b_e *) (PTR))->va_data)
285
+
286
+ /*
287
+ * Externally visible TOAST macros begin here.
288
+ */
289
+
290
+ #define VARHDRSZ_EXTERNAL offsetof(varattrib_1b_e, va_data)
291
+ #define VARHDRSZ_COMPRESSED offsetof(varattrib_4b, va_compressed.va_data)
268
292
  #define VARHDRSZ_SHORT offsetof(varattrib_1b, va_data)
293
+
269
294
  #define VARATT_SHORT_MAX 0x7F
270
295
  #define VARATT_CAN_MAKE_SHORT(PTR) \
271
296
  (VARATT_IS_4B_U(PTR) && \
@@ -273,18 +298,6 @@ typedef struct
273
298
  #define VARATT_CONVERTED_SHORT_SIZE(PTR) \
274
299
  (VARSIZE(PTR) - VARHDRSZ + VARHDRSZ_SHORT)
275
300
 
276
- #define VARHDRSZ_EXTERNAL offsetof(varattrib_1b_e, va_data)
277
-
278
- #define VARDATA_4B(PTR) (((varattrib_4b *) (PTR))->va_4byte.va_data)
279
- #define VARDATA_4B_C(PTR) (((varattrib_4b *) (PTR))->va_compressed.va_data)
280
- #define VARDATA_1B(PTR) (((varattrib_1b *) (PTR))->va_data)
281
- #define VARDATA_1B_E(PTR) (((varattrib_1b_e *) (PTR))->va_data)
282
-
283
- #define VARRAWSIZE_4B_C(PTR) \
284
- (((varattrib_4b *) (PTR))->va_compressed.va_rawsize)
285
-
286
- /* Externally visible macros */
287
-
288
301
  /*
289
302
  * In consumers oblivious to data alignment, call PG_DETOAST_DATUM_PACKED(),
290
303
  * VARDATA_ANY(), VARSIZE_ANY() and VARSIZE_ANY_EXHDR(). Elsewhere, call
@@ -348,6 +361,37 @@ typedef struct
348
361
  #define VARDATA_ANY(PTR) \
349
362
  (VARATT_IS_1B(PTR) ? VARDATA_1B(PTR) : VARDATA_4B(PTR))
350
363
 
364
+ /* Decompressed size and compression method of a compressed-in-line Datum */
365
+ #define VARDATA_COMPRESSED_GET_EXTSIZE(PTR) \
366
+ (((varattrib_4b *) (PTR))->va_compressed.va_tcinfo & VARLENA_EXTSIZE_MASK)
367
+ #define VARDATA_COMPRESSED_GET_COMPRESS_METHOD(PTR) \
368
+ (((varattrib_4b *) (PTR))->va_compressed.va_tcinfo >> VARLENA_EXTSIZE_BITS)
369
+
370
+ /* Same for external Datums; but note argument is a struct varatt_external */
371
+ #define VARATT_EXTERNAL_GET_EXTSIZE(toast_pointer) \
372
+ ((toast_pointer).va_extinfo & VARLENA_EXTSIZE_MASK)
373
+ #define VARATT_EXTERNAL_GET_COMPRESS_METHOD(toast_pointer) \
374
+ ((toast_pointer).va_extinfo >> VARLENA_EXTSIZE_BITS)
375
+
376
+ #define VARATT_EXTERNAL_SET_SIZE_AND_COMPRESS_METHOD(toast_pointer, len, cm) \
377
+ do { \
378
+ Assert((cm) == TOAST_PGLZ_COMPRESSION_ID || \
379
+ (cm) == TOAST_LZ4_COMPRESSION_ID); \
380
+ ((toast_pointer).va_extinfo = \
381
+ (len) | ((uint32) (cm) << VARLENA_EXTSIZE_BITS)); \
382
+ } while (0)
383
+
384
+ /*
385
+ * Testing whether an externally-stored value is compressed now requires
386
+ * comparing size stored in va_extinfo (the actual length of the external data)
387
+ * to rawsize (the original uncompressed datum's size). The latter includes
388
+ * VARHDRSZ overhead, the former doesn't. We never use compression unless it
389
+ * actually saves space, so we expect either equality or less-than.
390
+ */
391
+ #define VARATT_EXTERNAL_IS_COMPRESSED(toast_pointer) \
392
+ (VARATT_EXTERNAL_GET_EXTSIZE(toast_pointer) < \
393
+ (toast_pointer).va_rawsize - VARHDRSZ)
394
+
351
395
 
352
396
  /* ----------------------------------------------------------------
353
397
  * Section 2: Datum type + support macros
@@ -4,7 +4,7 @@
4
4
  * header file for integrated autovacuum daemon
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/postmaster/autovacuum.h
@@ -27,25 +27,25 @@ typedef enum
27
27
 
28
28
 
29
29
  /* GUC variables */
30
- extern bool autovacuum_start_daemon;
31
- extern int autovacuum_max_workers;
32
- extern int autovacuum_work_mem;
33
- extern int autovacuum_naptime;
34
- extern int autovacuum_vac_thresh;
35
- extern double autovacuum_vac_scale;
36
- extern int autovacuum_vac_ins_thresh;
37
- extern double autovacuum_vac_ins_scale;
38
- extern int autovacuum_anl_thresh;
39
- extern double autovacuum_anl_scale;
40
- extern int autovacuum_freeze_max_age;
41
- extern int autovacuum_multixact_freeze_max_age;
42
- extern double autovacuum_vac_cost_delay;
43
- extern int autovacuum_vac_cost_limit;
30
+ extern PGDLLIMPORT bool autovacuum_start_daemon;
31
+ extern PGDLLIMPORT int autovacuum_max_workers;
32
+ extern PGDLLIMPORT int autovacuum_work_mem;
33
+ extern PGDLLIMPORT int autovacuum_naptime;
34
+ extern PGDLLIMPORT int autovacuum_vac_thresh;
35
+ extern PGDLLIMPORT double autovacuum_vac_scale;
36
+ extern PGDLLIMPORT int autovacuum_vac_ins_thresh;
37
+ extern PGDLLIMPORT double autovacuum_vac_ins_scale;
38
+ extern PGDLLIMPORT int autovacuum_anl_thresh;
39
+ extern PGDLLIMPORT double autovacuum_anl_scale;
40
+ extern PGDLLIMPORT int autovacuum_freeze_max_age;
41
+ extern PGDLLIMPORT int autovacuum_multixact_freeze_max_age;
42
+ extern PGDLLIMPORT double autovacuum_vac_cost_delay;
43
+ extern PGDLLIMPORT int autovacuum_vac_cost_limit;
44
44
 
45
45
  /* autovacuum launcher PID, only valid when worker is shutting down */
46
- extern int AutovacuumLauncherPid;
46
+ extern PGDLLIMPORT int AutovacuumLauncherPid;
47
47
 
48
- extern int Log_autovacuum_min_duration;
48
+ extern PGDLLIMPORT int Log_autovacuum_min_duration;
49
49
 
50
50
  /* Status inquiry functions */
51
51
  extern bool AutoVacuumingActive(void);
@@ -0,0 +1,20 @@
1
+ /*-------------------------------------------------------------------------
2
+ * auxprocess.h
3
+ * include file for functions related to auxiliary processes.
4
+ *
5
+ *
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1994, Regents of the University of California
8
+ *
9
+ * IDENTIFICATION
10
+ * src/include/postmaster/auxprocess.h
11
+ *-------------------------------------------------------------------------
12
+ */
13
+ #ifndef AUXPROCESS_H
14
+ #define AUXPROCESS_H
15
+
16
+ #include "miscadmin.h"
17
+
18
+ extern void AuxiliaryProcessMain(AuxProcType auxtype) pg_attribute_noreturn();
19
+
20
+ #endif /* AUXPROCESS_H */
@@ -31,7 +31,7 @@
31
31
  * different) code.
32
32
  *
33
33
  *
34
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
34
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
35
35
  * Portions Copyright (c) 1994, Regents of the University of California
36
36
  *
37
37
  * IDENTIFICATION
@@ -48,6 +48,7 @@
48
48
 
49
49
  /*
50
50
  * Pass this flag to have your worker be able to connect to shared memory.
51
+ * This flag is required.
51
52
  */
52
53
  #define BGWORKER_SHMEM_ACCESS 0x0001
53
54
 
@@ -2,7 +2,7 @@
2
2
  * bgworker_internals.h
3
3
  * POSTGRES pluggable background workers internals
4
4
  *
5
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
5
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
6
6
  * Portions Copyright (c) 1994, Regents of the University of California
7
7
  *
8
8
  * IDENTIFICATION
@@ -42,7 +42,7 @@ typedef struct RegisteredBgWorker
42
42
  slist_node rw_lnode; /* list link */
43
43
  } RegisteredBgWorker;
44
44
 
45
- extern slist_head BackgroundWorkerList;
45
+ extern PGDLLIMPORT slist_head BackgroundWorkerList;
46
46
 
47
47
  extern Size BackgroundWorkerShmemSize(void);
48
48
  extern void BackgroundWorkerShmemInit(void);
@@ -6,7 +6,7 @@
6
6
  * The bgwriter process used to handle checkpointing duties too. Now
7
7
  * there is a separate process, but we did not bother to split this header.
8
8
  *
9
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
9
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
10
10
  *
11
11
  * src/include/postmaster/bgwriter.h
12
12
  *
@@ -22,10 +22,10 @@
22
22
 
23
23
 
24
24
  /* GUC options */
25
- extern int BgWriterDelay;
26
- extern int CheckPointTimeout;
27
- extern int CheckPointWarning;
28
- extern double CheckPointCompletionTarget;
25
+ extern PGDLLIMPORT int BgWriterDelay;
26
+ extern PGDLLIMPORT int CheckPointTimeout;
27
+ extern PGDLLIMPORT int CheckPointWarning;
28
+ extern PGDLLIMPORT double CheckPointCompletionTarget;
29
29
 
30
30
  extern void BackgroundWriterMain(void) pg_attribute_noreturn();
31
31
  extern void CheckpointerMain(void) pg_attribute_noreturn();
@@ -3,7 +3,7 @@
3
3
  * fork_process.h
4
4
  * Exports from postmaster/fork_process.c.
5
5
  *
6
- * Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
7
  *
8
8
  * src/include/postmaster/fork_process.h
9
9
  *
@@ -7,7 +7,7 @@
7
7
  * have their own implementations, but we provide a few generic things
8
8
  * here to facilitate code reuse.
9
9
  *
10
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
10
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
11
11
  * Portions Copyright (c) 1994, Regents of the University of California
12
12
  *
13
13
  * IDENTIFICATION
@@ -3,7 +3,7 @@
3
3
  * pgarch.h
4
4
  * Exports from postmaster/pgarch.c.
5
5
  *
6
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/postmaster/pgarch.h
@@ -26,14 +26,48 @@
26
26
  #define MAX_XFN_CHARS 40
27
27
  #define VALID_XFN_CHARS "0123456789ABCDEF.history.backup.partial"
28
28
 
29
- /* ----------
30
- * Functions called from postmaster
31
- * ----------
29
+ extern Size PgArchShmemSize(void);
30
+ extern void PgArchShmemInit(void);
31
+ extern bool PgArchCanRestart(void);
32
+ extern void PgArchiverMain(void) pg_attribute_noreturn();
33
+ extern void PgArchWakeup(void);
34
+ extern void PgArchForceDirScan(void);
35
+
36
+ /*
37
+ * The value of the archive_library GUC.
38
+ */
39
+ extern PGDLLIMPORT char *XLogArchiveLibrary;
40
+
41
+ /*
42
+ * Archive module callbacks
43
+ *
44
+ * These callback functions should be defined by archive libraries and returned
45
+ * via _PG_archive_module_init(). ArchiveFileCB is the only required callback.
46
+ * For more information about the purpose of each callback, refer to the
47
+ * archive modules documentation.
32
48
  */
33
- extern int pgarch_start(void);
49
+ typedef bool (*ArchiveCheckConfiguredCB) (void);
50
+ typedef bool (*ArchiveFileCB) (const char *file, const char *path);
51
+ typedef void (*ArchiveShutdownCB) (void);
52
+
53
+ typedef struct ArchiveModuleCallbacks
54
+ {
55
+ ArchiveCheckConfiguredCB check_configured_cb;
56
+ ArchiveFileCB archive_file_cb;
57
+ ArchiveShutdownCB shutdown_cb;
58
+ } ArchiveModuleCallbacks;
34
59
 
35
- #ifdef EXEC_BACKEND
36
- extern void PgArchiverMain(int argc, char *argv[]) pg_attribute_noreturn();
37
- #endif
60
+ /*
61
+ * Type of the shared library symbol _PG_archive_module_init that is looked
62
+ * up when loading an archive library.
63
+ */
64
+ typedef void (*ArchiveModuleInit) (ArchiveModuleCallbacks *cb);
65
+
66
+ /*
67
+ * Since the logic for archiving via a shell command is in the core server
68
+ * and does not need to be loaded via a shared library, it has a special
69
+ * initialization function.
70
+ */
71
+ extern void shell_archive_init(ArchiveModuleCallbacks *cb);
38
72
 
39
73
  #endif /* _PGARCH_H */
@@ -3,7 +3,7 @@
3
3
  * postmaster.h
4
4
  * Exports from postmaster/postmaster.c.
5
5
  *
6
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/postmaster/postmaster.h
@@ -14,26 +14,27 @@
14
14
  #define _POSTMASTER_H
15
15
 
16
16
  /* GUC options */
17
- extern bool EnableSSL;
18
- extern int ReservedBackends;
17
+ extern PGDLLIMPORT bool EnableSSL;
18
+ extern PGDLLIMPORT int ReservedBackends;
19
19
  extern PGDLLIMPORT int PostPortNumber;
20
- extern int Unix_socket_permissions;
21
- extern char *Unix_socket_group;
22
- extern char *Unix_socket_directories;
23
- extern char *ListenAddresses;
24
- extern __thread bool ClientAuthInProgress;
25
- extern int PreAuthDelay;
26
- extern int AuthenticationTimeout;
27
- extern bool Log_connections;
28
- extern bool log_hostname;
29
- extern bool enable_bonjour;
30
- extern char *bonjour_name;
31
- extern bool restart_after_crash;
20
+ extern PGDLLIMPORT int Unix_socket_permissions;
21
+ extern PGDLLIMPORT char *Unix_socket_group;
22
+ extern PGDLLIMPORT char *Unix_socket_directories;
23
+ extern PGDLLIMPORT char *ListenAddresses;
24
+ extern PGDLLIMPORT __thread bool ClientAuthInProgress;
25
+ extern PGDLLIMPORT int PreAuthDelay;
26
+ extern PGDLLIMPORT int AuthenticationTimeout;
27
+ extern PGDLLIMPORT bool Log_connections;
28
+ extern PGDLLIMPORT bool log_hostname;
29
+ extern PGDLLIMPORT bool enable_bonjour;
30
+ extern PGDLLIMPORT char *bonjour_name;
31
+ extern PGDLLIMPORT bool restart_after_crash;
32
+ extern PGDLLIMPORT bool remove_temp_files_after_crash;
32
33
 
33
34
  #ifdef WIN32
34
- extern HANDLE PostmasterHandle;
35
+ extern PGDLLIMPORT HANDLE PostmasterHandle;
35
36
  #else
36
- extern int postmaster_alive_fds[2];
37
+ extern PGDLLIMPORT int postmaster_alive_fds[2];
37
38
 
38
39
  /*
39
40
  * Constants that represent which of postmaster_alive_fds is held by
@@ -0,0 +1,39 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * startup.h
4
+ * Exports from postmaster/startup.c.
5
+ *
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
+ *
8
+ * src/include/postmaster/startup.h
9
+ *
10
+ *-------------------------------------------------------------------------
11
+ */
12
+ #ifndef _STARTUP_H
13
+ #define _STARTUP_H
14
+
15
+ /*
16
+ * Log the startup progress message if a timer has expired.
17
+ */
18
+ #define ereport_startup_progress(msg, ...) \
19
+ do { \
20
+ long secs; \
21
+ int usecs; \
22
+ if (has_startup_progress_timeout_expired(&secs, &usecs)) \
23
+ ereport(LOG, errmsg(msg, secs, (usecs / 10000), __VA_ARGS__ )); \
24
+ } while(0)
25
+
26
+ extern PGDLLIMPORT int log_startup_progress_interval;
27
+
28
+ extern void HandleStartupProcInterrupts(void);
29
+ extern void StartupProcessMain(void) pg_attribute_noreturn();
30
+ extern void PreRestoreCommand(void);
31
+ extern void PostRestoreCommand(void);
32
+ extern bool IsPromoteSignaled(void);
33
+ extern void ResetPromoteSignaled(void);
34
+
35
+ extern void begin_startup_progress_phase(void);
36
+ extern void startup_progress_timeout_handler(void);
37
+ extern bool has_startup_progress_timeout_expired(long *secs, int *usecs);
38
+
39
+ #endif /* _STARTUP_H */