pg_query 2.2.1 → 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 (466) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -1
  3. data/README.md +29 -33
  4. data/Rakefile +2 -2
  5. data/ext/pg_query/include/access/amapi.h +45 -1
  6. data/ext/pg_query/include/access/attmap.h +1 -1
  7. data/ext/pg_query/include/access/attnum.h +2 -2
  8. data/ext/pg_query/include/access/clog.h +4 -2
  9. data/ext/pg_query/include/access/commit_ts.h +6 -9
  10. data/ext/pg_query/include/access/detoast.h +1 -11
  11. data/ext/pg_query/include/access/genam.h +15 -12
  12. data/ext/pg_query/include/access/gin.h +2 -2
  13. data/ext/pg_query/include/access/htup.h +1 -1
  14. data/ext/pg_query/include/access/htup_details.h +75 -87
  15. data/ext/pg_query/include/access/itup.h +7 -1
  16. data/ext/pg_query/include/access/parallel.h +2 -2
  17. data/ext/pg_query/include/access/printtup.h +1 -1
  18. data/ext/pg_query/include/access/relation.h +1 -1
  19. data/ext/pg_query/include/access/relscan.h +17 -2
  20. data/ext/pg_query/include/access/rmgr.h +30 -3
  21. data/ext/pg_query/include/access/rmgrlist.h +23 -23
  22. data/ext/pg_query/include/access/sdir.h +1 -1
  23. data/ext/pg_query/include/access/skey.h +1 -1
  24. data/ext/pg_query/include/access/stratnum.h +4 -2
  25. data/ext/pg_query/include/access/sysattr.h +1 -1
  26. data/ext/pg_query/include/access/table.h +2 -1
  27. data/ext/pg_query/include/access/tableam.h +272 -20
  28. data/ext/pg_query/include/access/toast_compression.h +73 -0
  29. data/ext/pg_query/include/access/transam.h +123 -13
  30. data/ext/pg_query/include/access/tupconvert.h +1 -1
  31. data/ext/pg_query/include/access/tupdesc.h +1 -1
  32. data/ext/pg_query/include/access/tupmacs.h +3 -3
  33. data/ext/pg_query/include/access/twophase.h +3 -1
  34. data/ext/pg_query/include/access/xact.h +73 -19
  35. data/ext/pg_query/include/access/xlog.h +60 -155
  36. data/ext/pg_query/include/access/xlog_internal.h +40 -13
  37. data/ext/pg_query/include/access/xlogdefs.h +8 -16
  38. data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
  39. data/ext/pg_query/include/access/xlogreader.h +145 -39
  40. data/ext/pg_query/include/access/xlogrecord.h +18 -9
  41. data/ext/pg_query/include/access/xlogrecovery.h +157 -0
  42. data/ext/pg_query/include/c.h +101 -44
  43. data/ext/pg_query/include/catalog/catalog.h +3 -1
  44. data/ext/pg_query/include/catalog/catversion.h +2 -2
  45. data/ext/pg_query/include/catalog/dependency.h +8 -16
  46. data/ext/pg_query/include/catalog/genbki.h +83 -5
  47. data/ext/pg_query/include/catalog/index.h +18 -3
  48. data/ext/pg_query/include/catalog/indexing.h +12 -324
  49. data/ext/pg_query/include/catalog/namespace.h +4 -2
  50. data/ext/pg_query/include/catalog/objectaccess.h +70 -2
  51. data/ext/pg_query/include/catalog/objectaddress.h +11 -6
  52. data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
  53. data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
  54. data/ext/pg_query/include/catalog/pg_am.h +4 -1
  55. data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
  56. data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
  57. data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
  58. data/ext/pg_query/include/catalog/pg_authid.h +7 -2
  59. data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
  60. data/ext/pg_query/include/catalog/pg_class.h +44 -14
  61. data/ext/pg_query/include/catalog/pg_class_d.h +30 -1
  62. data/ext/pg_query/include/catalog/pg_collation.h +33 -8
  63. data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
  64. data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
  65. data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
  66. data/ext/pg_query/include/catalog/pg_control.h +3 -5
  67. data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
  68. data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
  69. data/ext/pg_query/include/catalog/pg_depend.h +11 -7
  70. data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
  71. data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
  72. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
  73. data/ext/pg_query/include/catalog/pg_index.h +17 -7
  74. data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
  75. data/ext/pg_query/include/catalog/pg_language.h +10 -5
  76. data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
  77. data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
  78. data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
  79. data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
  80. data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
  81. data/ext/pg_query/include/catalog/pg_operator.h +18 -15
  82. data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
  83. data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
  84. data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
  85. data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
  86. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
  87. data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
  88. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
  89. data/ext/pg_query/include/catalog/pg_proc.h +20 -11
  90. data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
  91. data/ext/pg_query/include/catalog/pg_publication.h +50 -7
  92. data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
  93. data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
  94. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
  95. data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
  96. data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
  97. data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
  98. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
  99. data/ext/pg_query/include/catalog/pg_transform.h +8 -5
  100. data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
  101. data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
  102. data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
  103. data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
  104. data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
  105. data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
  106. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
  107. data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
  108. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
  109. data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
  110. data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
  111. data/ext/pg_query/include/catalog/pg_type.h +55 -24
  112. data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
  113. data/ext/pg_query/include/catalog/storage.h +5 -3
  114. data/ext/pg_query/include/commands/async.h +3 -4
  115. data/ext/pg_query/include/commands/dbcommands.h +2 -1
  116. data/ext/pg_query/include/commands/defrem.h +11 -24
  117. data/ext/pg_query/include/commands/event_trigger.h +2 -2
  118. data/ext/pg_query/include/commands/explain.h +1 -1
  119. data/ext/pg_query/include/commands/prepare.h +1 -1
  120. data/ext/pg_query/include/commands/tablespace.h +2 -2
  121. data/ext/pg_query/include/commands/trigger.h +18 -16
  122. data/ext/pg_query/include/commands/user.h +2 -2
  123. data/ext/pg_query/include/commands/vacuum.h +88 -41
  124. data/ext/pg_query/include/commands/variable.h +1 -1
  125. data/ext/pg_query/include/common/file_perm.h +4 -4
  126. data/ext/pg_query/include/common/hashfn.h +1 -1
  127. data/ext/pg_query/include/common/ip.h +1 -7
  128. data/ext/pg_query/include/common/keywords.h +2 -6
  129. data/ext/pg_query/include/common/kwlookup.h +1 -1
  130. data/ext/pg_query/include/common/pg_prng.h +60 -0
  131. data/ext/pg_query/include/common/relpath.h +2 -2
  132. data/ext/pg_query/include/common/string.h +24 -1
  133. data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
  134. data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
  135. data/ext/pg_query/include/datatype/timestamp.h +40 -1
  136. data/ext/pg_query/include/executor/execdesc.h +1 -1
  137. data/ext/pg_query/include/executor/executor.h +65 -22
  138. data/ext/pg_query/include/executor/functions.h +17 -3
  139. data/ext/pg_query/include/executor/instrument.h +33 -16
  140. data/ext/pg_query/include/executor/spi.h +41 -3
  141. data/ext/pg_query/include/executor/tablefunc.h +1 -1
  142. data/ext/pg_query/include/executor/tuptable.h +1 -1
  143. data/ext/pg_query/include/fmgr.h +13 -7
  144. data/ext/pg_query/include/funcapi.h +16 -4
  145. data/ext/pg_query/include/getaddrinfo.h +1 -1
  146. data/ext/pg_query/include/jit/jit.h +11 -11
  147. data/ext/pg_query/include/kwlist_d.h +517 -494
  148. data/ext/pg_query/include/lib/dshash.h +112 -0
  149. data/ext/pg_query/include/lib/ilist.h +20 -1
  150. data/ext/pg_query/include/lib/pairingheap.h +1 -1
  151. data/ext/pg_query/include/lib/simplehash.h +140 -15
  152. data/ext/pg_query/include/lib/sort_template.h +432 -0
  153. data/ext/pg_query/include/lib/stringinfo.h +1 -1
  154. data/ext/pg_query/include/libpq/auth.h +6 -4
  155. data/ext/pg_query/include/libpq/crypt.h +5 -4
  156. data/ext/pg_query/include/libpq/hba.h +43 -4
  157. data/ext/pg_query/include/libpq/libpq-be.h +23 -6
  158. data/ext/pg_query/include/libpq/libpq.h +30 -20
  159. data/ext/pg_query/include/libpq/pqcomm.h +17 -31
  160. data/ext/pg_query/include/libpq/pqformat.h +1 -1
  161. data/ext/pg_query/include/libpq/pqsignal.h +4 -4
  162. data/ext/pg_query/include/mb/pg_wchar.h +105 -23
  163. data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
  164. data/ext/pg_query/include/miscadmin.h +47 -41
  165. data/ext/pg_query/include/nodes/bitmapset.h +1 -1
  166. data/ext/pg_query/include/nodes/execnodes.h +270 -78
  167. data/ext/pg_query/include/nodes/extensible.h +4 -2
  168. data/ext/pg_query/include/nodes/lockoptions.h +1 -1
  169. data/ext/pg_query/include/nodes/makefuncs.h +7 -6
  170. data/ext/pg_query/include/nodes/memnodes.h +5 -3
  171. data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
  172. data/ext/pg_query/include/nodes/nodes.h +30 -11
  173. data/ext/pg_query/include/nodes/params.h +1 -1
  174. data/ext/pg_query/include/nodes/parsenodes.h +322 -90
  175. data/ext/pg_query/include/nodes/pathnodes.h +243 -66
  176. data/ext/pg_query/include/nodes/pg_list.h +75 -69
  177. data/ext/pg_query/include/nodes/plannodes.h +111 -28
  178. data/ext/pg_query/include/nodes/primnodes.h +99 -47
  179. data/ext/pg_query/include/nodes/print.h +1 -1
  180. data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
  181. data/ext/pg_query/include/nodes/value.h +58 -39
  182. data/ext/pg_query/include/optimizer/cost.h +9 -2
  183. data/ext/pg_query/include/optimizer/geqo.h +9 -7
  184. data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
  185. data/ext/pg_query/include/optimizer/optimizer.h +25 -17
  186. data/ext/pg_query/include/optimizer/paths.h +6 -6
  187. data/ext/pg_query/include/optimizer/planmain.h +15 -14
  188. data/ext/pg_query/include/parser/analyze.h +19 -5
  189. data/ext/pg_query/include/parser/gram.h +947 -913
  190. data/ext/pg_query/include/parser/gramparse.h +1 -1
  191. data/ext/pg_query/include/parser/kwlist.h +463 -453
  192. data/ext/pg_query/include/parser/parse_agg.h +2 -7
  193. data/ext/pg_query/include/parser/parse_coerce.h +3 -1
  194. data/ext/pg_query/include/parser/parse_expr.h +2 -3
  195. data/ext/pg_query/include/parser/parse_func.h +2 -1
  196. data/ext/pg_query/include/parser/parse_node.h +21 -9
  197. data/ext/pg_query/include/parser/parse_oper.h +1 -3
  198. data/ext/pg_query/include/parser/parse_relation.h +5 -4
  199. data/ext/pg_query/include/parser/parse_type.h +1 -1
  200. data/ext/pg_query/include/parser/parser.h +31 -4
  201. data/ext/pg_query/include/parser/parsetree.h +1 -1
  202. data/ext/pg_query/include/parser/scanner.h +1 -1
  203. data/ext/pg_query/include/parser/scansup.h +2 -5
  204. data/ext/pg_query/include/partitioning/partdefs.h +1 -1
  205. data/ext/pg_query/include/pg_config.h +83 -41
  206. data/ext/pg_query/include/pg_config_manual.h +74 -21
  207. data/ext/pg_query/include/pg_getopt.h +6 -6
  208. data/ext/pg_query/include/pg_query.h +5 -4
  209. data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
  210. data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
  211. data/ext/pg_query/include/pg_query_fingerprint_defs.c +939 -113
  212. data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
  213. data/ext/pg_query/include/pg_query_outfuncs_defs.c +151 -26
  214. data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
  215. data/ext/pg_query/include/pg_query_readfuncs_defs.c +173 -30
  216. data/ext/pg_query/include/pg_trace.h +1 -1
  217. data/ext/pg_query/include/pgstat.h +449 -1238
  218. data/ext/pg_query/include/pgtime.h +14 -4
  219. data/ext/pg_query/include/pl_gram.h +126 -128
  220. data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
  221. data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
  222. data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
  223. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
  224. data/ext/pg_query/include/plerrcodes.h +9 -1
  225. data/ext/pg_query/include/plpgsql.h +52 -54
  226. data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
  227. data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
  228. data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
  229. data/ext/pg_query/include/port/atomics/fallback.h +1 -1
  230. data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
  231. data/ext/pg_query/include/port/atomics/generic.h +1 -1
  232. data/ext/pg_query/include/port/atomics.h +1 -1
  233. data/ext/pg_query/include/port/pg_bitutils.h +40 -10
  234. data/ext/pg_query/include/port/pg_bswap.h +1 -1
  235. data/ext/pg_query/include/port/pg_crc32c.h +1 -1
  236. data/ext/pg_query/include/port.h +71 -46
  237. data/ext/pg_query/include/portability/instr_time.h +1 -1
  238. data/ext/pg_query/include/postgres.h +60 -16
  239. data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
  240. data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
  241. data/ext/pg_query/include/postmaster/bgworker.h +2 -1
  242. data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
  243. data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
  244. data/ext/pg_query/include/postmaster/fork_process.h +1 -1
  245. data/ext/pg_query/include/postmaster/interrupt.h +1 -1
  246. data/ext/pg_query/include/postmaster/pgarch.h +42 -8
  247. data/ext/pg_query/include/postmaster/postmaster.h +18 -17
  248. data/ext/pg_query/include/postmaster/startup.h +39 -0
  249. data/ext/pg_query/include/postmaster/syslogger.h +15 -10
  250. data/ext/pg_query/include/postmaster/walwriter.h +3 -3
  251. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1419 -914
  252. data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
  253. data/ext/pg_query/include/regex/regex.h +18 -16
  254. data/ext/pg_query/include/replication/logicallauncher.h +3 -5
  255. data/ext/pg_query/include/replication/logicalproto.h +161 -17
  256. data/ext/pg_query/include/replication/logicalworker.h +1 -1
  257. data/ext/pg_query/include/replication/origin.h +7 -7
  258. data/ext/pg_query/include/replication/reorderbuffer.h +259 -42
  259. data/ext/pg_query/include/replication/slot.h +22 -11
  260. data/ext/pg_query/include/replication/syncrep.h +5 -5
  261. data/ext/pg_query/include/replication/walreceiver.h +145 -13
  262. data/ext/pg_query/include/replication/walsender.h +8 -8
  263. data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
  264. data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
  265. data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
  266. data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
  267. data/ext/pg_query/include/storage/backendid.h +3 -3
  268. data/ext/pg_query/include/storage/block.h +4 -10
  269. data/ext/pg_query/include/storage/buf.h +1 -1
  270. data/ext/pg_query/include/storage/bufmgr.h +19 -14
  271. data/ext/pg_query/include/storage/bufpage.h +6 -8
  272. data/ext/pg_query/include/storage/condition_variable.h +13 -2
  273. data/ext/pg_query/include/storage/dsm.h +4 -1
  274. data/ext/pg_query/include/storage/dsm_impl.h +3 -2
  275. data/ext/pg_query/include/storage/fd.h +33 -3
  276. data/ext/pg_query/include/storage/fileset.h +40 -0
  277. data/ext/pg_query/include/storage/ipc.h +4 -1
  278. data/ext/pg_query/include/storage/item.h +1 -1
  279. data/ext/pg_query/include/storage/itemid.h +1 -1
  280. data/ext/pg_query/include/storage/itemptr.h +3 -1
  281. data/ext/pg_query/include/storage/large_object.h +2 -2
  282. data/ext/pg_query/include/storage/latch.h +9 -13
  283. data/ext/pg_query/include/storage/lmgr.h +2 -1
  284. data/ext/pg_query/include/storage/lock.h +11 -8
  285. data/ext/pg_query/include/storage/lockdefs.h +2 -2
  286. data/ext/pg_query/include/storage/lwlock.h +5 -32
  287. data/ext/pg_query/include/storage/lwlocknames.h +0 -1
  288. data/ext/pg_query/include/storage/off.h +1 -1
  289. data/ext/pg_query/include/storage/pg_sema.h +1 -1
  290. data/ext/pg_query/include/storage/pg_shmem.h +9 -7
  291. data/ext/pg_query/include/storage/pmsignal.h +15 -4
  292. data/ext/pg_query/include/storage/predicate.h +4 -4
  293. data/ext/pg_query/include/storage/proc.h +173 -59
  294. data/ext/pg_query/include/storage/procarray.h +98 -0
  295. data/ext/pg_query/include/storage/proclist_types.h +1 -1
  296. data/ext/pg_query/include/storage/procsignal.h +3 -7
  297. data/ext/pg_query/include/storage/relfilenode.h +1 -1
  298. data/ext/pg_query/include/storage/s_lock.h +60 -21
  299. data/ext/pg_query/include/storage/sharedfileset.h +3 -11
  300. data/ext/pg_query/include/storage/shm_mq.h +5 -4
  301. data/ext/pg_query/include/storage/shm_toc.h +1 -1
  302. data/ext/pg_query/include/storage/shmem.h +1 -1
  303. data/ext/pg_query/include/storage/sinval.h +3 -3
  304. data/ext/pg_query/include/storage/sinvaladt.h +1 -1
  305. data/ext/pg_query/include/storage/smgr.h +10 -8
  306. data/ext/pg_query/include/storage/spin.h +2 -2
  307. data/ext/pg_query/include/storage/standby.h +13 -6
  308. data/ext/pg_query/include/storage/standbydefs.h +2 -2
  309. data/ext/pg_query/include/storage/sync.h +7 -3
  310. data/ext/pg_query/include/tcop/cmdtag.h +1 -1
  311. data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
  312. data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
  313. data/ext/pg_query/include/tcop/dest.h +1 -1
  314. data/ext/pg_query/include/tcop/fastpath.h +1 -2
  315. data/ext/pg_query/include/tcop/pquery.h +1 -1
  316. data/ext/pg_query/include/tcop/tcopprot.h +19 -11
  317. data/ext/pg_query/include/tcop/utility.h +7 -3
  318. data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
  319. data/ext/pg_query/include/utils/acl.h +24 -3
  320. data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
  321. data/ext/pg_query/include/utils/array.h +7 -2
  322. data/ext/pg_query/include/utils/backend_progress.h +44 -0
  323. data/ext/pg_query/include/utils/backend_status.h +321 -0
  324. data/ext/pg_query/include/utils/builtins.h +10 -11
  325. data/ext/pg_query/include/utils/bytea.h +3 -2
  326. data/ext/pg_query/include/utils/catcache.h +1 -1
  327. data/ext/pg_query/include/utils/date.h +1 -1
  328. data/ext/pg_query/include/utils/datetime.h +8 -7
  329. data/ext/pg_query/include/utils/datum.h +9 -1
  330. data/ext/pg_query/include/utils/dsa.h +1 -1
  331. data/ext/pg_query/include/utils/dynahash.h +4 -3
  332. data/ext/pg_query/include/utils/elog.h +52 -21
  333. data/ext/pg_query/include/utils/errcodes.h +2 -0
  334. data/ext/pg_query/include/utils/expandeddatum.h +1 -1
  335. data/ext/pg_query/include/utils/expandedrecord.h +1 -1
  336. data/ext/pg_query/include/utils/float.h +7 -7
  337. data/ext/pg_query/include/utils/fmgroids.h +1300 -696
  338. data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
  339. data/ext/pg_query/include/utils/fmgrtab.h +6 -5
  340. data/ext/pg_query/include/utils/guc.h +69 -43
  341. data/ext/pg_query/include/utils/guc_tables.h +23 -19
  342. data/ext/pg_query/include/utils/hsearch.h +15 -11
  343. data/ext/pg_query/include/utils/inval.h +4 -1
  344. data/ext/pg_query/include/utils/lsyscache.h +11 -1
  345. data/ext/pg_query/include/utils/memdebug.h +1 -1
  346. data/ext/pg_query/include/utils/memutils.h +8 -3
  347. data/ext/pg_query/include/utils/numeric.h +19 -5
  348. data/ext/pg_query/include/utils/palloc.h +25 -3
  349. data/ext/pg_query/include/utils/partcache.h +1 -1
  350. data/ext/pg_query/include/utils/pg_locale.h +17 -9
  351. data/ext/pg_query/include/utils/pg_lsn.h +1 -1
  352. data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
  353. data/ext/pg_query/include/utils/pidfile.h +1 -1
  354. data/ext/pg_query/include/utils/plancache.h +6 -5
  355. data/ext/pg_query/include/utils/portal.h +10 -12
  356. data/ext/pg_query/include/utils/ps_status.h +1 -1
  357. data/ext/pg_query/include/utils/queryenvironment.h +1 -1
  358. data/ext/pg_query/include/utils/queryjumble.h +88 -0
  359. data/ext/pg_query/include/utils/regproc.h +14 -3
  360. data/ext/pg_query/include/utils/rel.h +71 -19
  361. data/ext/pg_query/include/utils/relcache.h +8 -5
  362. data/ext/pg_query/include/utils/reltrigger.h +1 -1
  363. data/ext/pg_query/include/utils/resowner.h +1 -1
  364. data/ext/pg_query/include/utils/rls.h +2 -2
  365. data/ext/pg_query/include/utils/ruleutils.h +4 -1
  366. data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
  367. data/ext/pg_query/include/utils/snapmgr.h +34 -14
  368. data/ext/pg_query/include/utils/snapshot.h +14 -1
  369. data/ext/pg_query/include/utils/sortsupport.h +117 -2
  370. data/ext/pg_query/include/utils/syscache.h +6 -1
  371. data/ext/pg_query/include/utils/timeout.h +11 -4
  372. data/ext/pg_query/include/utils/timestamp.h +6 -5
  373. data/ext/pg_query/include/utils/tuplesort.h +25 -11
  374. data/ext/pg_query/include/utils/tuplestore.h +2 -2
  375. data/ext/pg_query/include/utils/typcache.h +24 -17
  376. data/ext/pg_query/include/utils/tzparser.h +1 -1
  377. data/ext/pg_query/include/utils/varlena.h +5 -3
  378. data/ext/pg_query/include/utils/wait_event.h +289 -0
  379. data/ext/pg_query/include/utils/xml.h +4 -4
  380. data/ext/pg_query/pg_query.pb-c.c +4302 -2304
  381. data/ext/pg_query/pg_query_deparse.c +1106 -373
  382. data/ext/pg_query/pg_query_fingerprint.c +30 -10
  383. data/ext/pg_query/pg_query_json_plpgsql.c +0 -25
  384. data/ext/pg_query/pg_query_normalize.c +1 -1
  385. data/ext/pg_query/pg_query_outfuncs_json.c +54 -16
  386. data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
  387. data/ext/pg_query/pg_query_parse.c +1 -1
  388. data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
  389. data/ext/pg_query/pg_query_scan.c +2 -1
  390. data/ext/pg_query/pg_query_split.c +3 -2
  391. data/ext/pg_query/src_backend_catalog_namespace.c +20 -9
  392. data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
  393. data/ext/pg_query/src_backend_commands_define.c +11 -1
  394. data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
  395. data/ext/pg_query/src_backend_nodes_copyfuncs.c +401 -76
  396. data/ext/pg_query/src_backend_nodes_equalfuncs.c +290 -46
  397. data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
  398. data/ext/pg_query/src_backend_nodes_list.c +74 -11
  399. data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
  400. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
  401. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  402. data/ext/pg_query/src_backend_parser_gram.c +33874 -31261
  403. data/ext/pg_query/src_backend_parser_parser.c +26 -7
  404. data/ext/pg_query/src_backend_parser_scan.c +172 -209
  405. data/ext/pg_query/src_backend_parser_scansup.c +4 -28
  406. data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
  407. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  408. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
  409. data/ext/pg_query/src_backend_tcop_postgres.c +62 -23
  410. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  411. data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
  412. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  413. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  414. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +71 -5
  415. data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
  416. data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
  417. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
  418. data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
  419. data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
  420. data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
  421. data/ext/pg_query/src_backend_utils_misc_guc.c +206 -45
  422. data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
  423. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
  424. data/ext/pg_query/src_common_encnames.c +1 -1
  425. data/ext/pg_query/src_common_hashfn.c +3 -3
  426. data/ext/pg_query/src_common_keywords.c +15 -2
  427. data/ext/pg_query/src_common_kwlist_d.h +517 -494
  428. data/ext/pg_query/src_common_kwlookup.c +1 -1
  429. data/ext/pg_query/src_common_pg_prng.c +152 -0
  430. data/ext/pg_query/src_common_psprintf.c +1 -1
  431. data/ext/pg_query/src_common_string.c +7 -1
  432. data/ext/pg_query/src_common_stringinfo.c +1 -1
  433. data/ext/pg_query/src_common_wchar.c +701 -109
  434. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +45 -20
  435. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
  436. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1233 -1259
  437. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  438. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  439. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
  440. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
  441. data/ext/pg_query/src_port_pg_bitutils.c +41 -31
  442. data/ext/pg_query/src_port_pgsleep.c +1 -1
  443. data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
  444. data/ext/pg_query/src_port_qsort.c +12 -224
  445. data/ext/pg_query/src_port_snprintf.c +37 -13
  446. data/ext/pg_query/src_port_strerror.c +9 -19
  447. data/ext/pg_query/src_port_strnlen.c +1 -1
  448. data/lib/pg_query/filter_columns.rb +1 -1
  449. data/lib/pg_query/fingerprint.rb +5 -1
  450. data/lib/pg_query/node.rb +2 -2
  451. data/lib/pg_query/param_refs.rb +1 -1
  452. data/lib/pg_query/parse.rb +18 -8
  453. data/lib/pg_query/pg_query_pb.rb +1108 -942
  454. data/lib/pg_query/truncate.rb +1 -1
  455. data/lib/pg_query/version.rb +1 -1
  456. metadata +28 -18
  457. data/ext/pg_query/include/access/xloginsert.h +0 -64
  458. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  459. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  460. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  461. data/ext/pg_query/include/parser/parse_target.h +0 -46
  462. data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -2
  463. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -659
  464. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  465. data/ext/pg_query/src_port_erand48.c +0 -127
  466. data/ext/pg_query/src_port_random.c +0 -31
@@ -4,7 +4,7 @@
4
4
  * POSTGRES LIBPQ buffer structure definitions.
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/libpq/libpq.h
@@ -21,6 +21,15 @@
21
21
  #include "storage/latch.h"
22
22
 
23
23
 
24
+ /*
25
+ * Callers of pq_getmessage() must supply a maximum expected message size.
26
+ * By convention, if there's not any specific reason to use another value,
27
+ * use PQ_SMALL_MESSAGE_LIMIT for messages that shouldn't be too long, and
28
+ * PQ_LARGE_MESSAGE_LIMIT for messages that can be long.
29
+ */
30
+ #define PQ_SMALL_MESSAGE_LIMIT 10000
31
+ #define PQ_LARGE_MESSAGE_LIMIT (MaxAllocSize - 1)
32
+
24
33
  typedef struct
25
34
  {
26
35
  void (*comm_reset) (void);
@@ -29,8 +38,6 @@ typedef struct
29
38
  bool (*is_send_pending) (void);
30
39
  int (*putmessage) (char msgtype, const char *s, size_t len);
31
40
  void (*putmessage_noblock) (char msgtype, const char *s, size_t len);
32
- void (*startcopyout) (void);
33
- void (*endcopyout) (bool errorAbort);
34
41
  } PQcommMethods;
35
42
 
36
43
  extern const PGDLLIMPORT PQcommMethods *PqCommMethods;
@@ -43,8 +50,6 @@ extern const PGDLLIMPORT PQcommMethods *PqCommMethods;
43
50
  (PqCommMethods->putmessage(msgtype, s, len))
44
51
  #define pq_putmessage_noblock(msgtype, s, len) \
45
52
  (PqCommMethods->putmessage_noblock(msgtype, s, len))
46
- #define pq_startcopyout() (PqCommMethods->startcopyout())
47
- #define pq_endcopyout(errorAbort) (PqCommMethods->endcopyout(errorAbort))
48
53
 
49
54
  /*
50
55
  * External functions.
@@ -53,7 +58,11 @@ extern const PGDLLIMPORT PQcommMethods *PqCommMethods;
53
58
  /*
54
59
  * prototypes for functions in pqcomm.c
55
60
  */
56
- extern WaitEventSet *FeBeWaitSet;
61
+ extern PGDLLIMPORT WaitEventSet *FeBeWaitSet;
62
+
63
+ #define FeBeWaitSetSocketPos 0
64
+ #define FeBeWaitSetLatchPos 1
65
+ #define FeBeWaitSetNEvents 3
57
66
 
58
67
  extern int StreamServerPort(int family, const char *hostName,
59
68
  unsigned short portNumber, const char *unixSocketDir,
@@ -64,7 +73,6 @@ extern void TouchSocketFiles(void);
64
73
  extern void RemoveSocketFiles(void);
65
74
  extern void pq_init(void);
66
75
  extern int pq_getbytes(char *s, size_t len);
67
- extern int pq_getstring(StringInfo s);
68
76
  extern void pq_startmsgread(void);
69
77
  extern void pq_endmsgread(void);
70
78
  extern bool pq_is_reading_msg(void);
@@ -73,21 +81,23 @@ extern int pq_getbyte(void);
73
81
  extern int pq_peekbyte(void);
74
82
  extern int pq_getbyte_if_available(unsigned char *c);
75
83
  extern bool pq_buffer_has_data(void);
76
- extern int pq_putbytes(const char *s, size_t len);
84
+ extern int pq_putmessage_v2(char msgtype, const char *s, size_t len);
85
+ extern bool pq_check_connection(void);
77
86
 
78
87
  /*
79
88
  * prototypes for functions in be-secure.c
80
89
  */
81
- extern char *ssl_library;
82
- extern char *ssl_cert_file;
83
- extern char *ssl_key_file;
84
- extern char *ssl_ca_file;
85
- extern char *ssl_crl_file;
86
- extern char *ssl_dh_params_file;
90
+ extern PGDLLIMPORT char *ssl_library;
91
+ extern PGDLLIMPORT char *ssl_cert_file;
92
+ extern PGDLLIMPORT char *ssl_key_file;
93
+ extern PGDLLIMPORT char *ssl_ca_file;
94
+ extern PGDLLIMPORT char *ssl_crl_file;
95
+ extern PGDLLIMPORT char *ssl_crl_dir;
96
+ extern PGDLLIMPORT char *ssl_dh_params_file;
87
97
  extern PGDLLIMPORT char *ssl_passphrase_command;
88
98
  extern PGDLLIMPORT bool ssl_passphrase_command_supports_reload;
89
99
  #ifdef USE_SSL
90
- extern bool ssl_loaded_verify_locations;
100
+ extern PGDLLIMPORT bool ssl_loaded_verify_locations;
91
101
  #endif
92
102
 
93
103
  extern int secure_initialize(bool isServerStart);
@@ -108,11 +118,11 @@ extern ssize_t secure_open_gssapi(Port *port);
108
118
  #endif
109
119
 
110
120
  /* GUCs */
111
- extern char *SSLCipherSuites;
112
- extern char *SSLECDHCurve;
113
- extern bool SSLPreferServerCiphers;
114
- extern int ssl_min_protocol_version;
115
- extern int ssl_max_protocol_version;
121
+ extern PGDLLIMPORT char *SSLCipherSuites;
122
+ extern PGDLLIMPORT char *SSLECDHCurve;
123
+ extern PGDLLIMPORT bool SSLPreferServerCiphers;
124
+ extern PGDLLIMPORT int ssl_min_protocol_version;
125
+ extern PGDLLIMPORT int ssl_max_protocol_version;
116
126
 
117
127
  enum ssl_protocol_versions
118
128
  {
@@ -6,7 +6,7 @@
6
6
  * NOTE: for historical reasons, this does not correspond to pqcomm.c.
7
7
  * pqcomm.c's routines are declared in libpq.h.
8
8
  *
9
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
9
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
10
10
  * Portions Copyright (c) 1994, Regents of the University of California
11
11
  *
12
12
  * src/include/libpq/pqcomm.h
@@ -62,7 +62,7 @@ struct sockaddr_storage
62
62
  typedef struct
63
63
  {
64
64
  struct sockaddr_storage addr;
65
- ACCEPT_TYPE_ARG3 salen;
65
+ socklen_t salen;
66
66
  } SockAddr;
67
67
 
68
68
  /* Configure the UNIX socket location for the well known port. */
@@ -85,6 +85,15 @@ typedef struct
85
85
  */
86
86
  #define UNIXSOCK_PATH_BUFLEN sizeof(((struct sockaddr_un *) NULL)->sun_path)
87
87
 
88
+ /*
89
+ * A host that looks either like an absolute path or starts with @ is
90
+ * interpreted as a Unix-domain socket address.
91
+ */
92
+ static inline bool
93
+ is_unixsock_path(const char *path)
94
+ {
95
+ return is_absolute_path(path) || path[0] == '@';
96
+ }
88
97
 
89
98
  /*
90
99
  * These manipulate the frontend/backend protocol version number.
@@ -105,9 +114,12 @@ typedef struct
105
114
  #define PG_PROTOCOL_MINOR(v) ((v) & 0x0000ffff)
106
115
  #define PG_PROTOCOL(m,n) (((m) << 16) | (n))
107
116
 
108
- /* The earliest and latest frontend/backend protocol version supported. */
117
+ /*
118
+ * The earliest and latest frontend/backend protocol version supported.
119
+ * (Only protocol version 3 is currently supported)
120
+ */
109
121
 
110
- #define PG_PROTOCOL_EARLIEST PG_PROTOCOL(2,0)
122
+ #define PG_PROTOCOL_EARLIEST PG_PROTOCOL(3,0)
111
123
  #define PG_PROTOCOL_LATEST PG_PROTOCOL(3,0)
112
124
 
113
125
  typedef uint32 ProtocolVersion; /* FE/BE protocol version number */
@@ -123,33 +135,7 @@ typedef ProtocolVersion MsgType;
123
135
 
124
136
  typedef uint32 PacketLen;
125
137
 
126
-
127
- /*
128
- * Old-style startup packet layout with fixed-width fields. This is used in
129
- * protocol 1.0 and 2.0, but not in later versions. Note that the fields
130
- * in this layout are '\0' terminated only if there is room.
131
- */
132
-
133
- #define SM_DATABASE 64
134
- #define SM_USER 32
135
- /* We append database name if db_user_namespace true. */
136
- #define SM_DATABASE_USER (SM_DATABASE+SM_USER+1) /* +1 for @ */
137
- #define SM_OPTIONS 64
138
- #define SM_UNUSED 64
139
- #define SM_TTY 64
140
-
141
- typedef struct StartupPacket
142
- {
143
- ProtocolVersion protoVersion; /* Protocol version */
144
- char database[SM_DATABASE]; /* Database name */
145
- /* Db_user_namespace appends dbname */
146
- char user[SM_USER]; /* User name */
147
- char options[SM_OPTIONS]; /* Optional additional args */
148
- char unused[SM_UNUSED]; /* Unused */
149
- char tty[SM_TTY]; /* Tty for debug output */
150
- } StartupPacket;
151
-
152
- extern bool Db_user_namespace;
138
+ extern PGDLLIMPORT bool Db_user_namespace;
153
139
 
154
140
  /*
155
141
  * In protocol 3.0 and later, the startup packet length is not fixed, but
@@ -3,7 +3,7 @@
3
3
  * pqformat.h
4
4
  * Definitions for formatting and parsing frontend/backend messages
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/libpq/pqformat.h
@@ -3,7 +3,7 @@
3
3
  * pqsignal.h
4
4
  * Backend signal(2) support (see also src/port/pqsignal.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/libpq/pqsignal.h
@@ -30,9 +30,9 @@ extern int pqsigsetmask(int mask);
30
30
  #define sigdelset(set, signum) (*(set) &= ~(sigmask(signum)))
31
31
  #endif /* WIN32 */
32
32
 
33
- extern sigset_t UnBlockSig,
34
- BlockSig,
35
- StartupBlockSig;
33
+ extern PGDLLIMPORT sigset_t UnBlockSig;
34
+ extern PGDLLIMPORT sigset_t BlockSig;
35
+ extern PGDLLIMPORT sigset_t StartupBlockSig;
36
36
 
37
37
  extern void pqinitmask(void);
38
38
 
@@ -3,7 +3,7 @@
3
3
  * pg_wchar.h
4
4
  * multibyte-character support
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/mb/pg_wchar.h
@@ -306,15 +306,33 @@ typedef enum pg_enc
306
306
 
307
307
  /*
308
308
  * When converting strings between different encodings, we assume that space
309
- * for converted result is 4-to-1 growth in the worst case. The rate for
309
+ * for converted result is 4-to-1 growth in the worst case. The rate for
310
310
  * currently supported encoding pairs are within 3 (SJIS JIS X0201 half width
311
- * kanna -> UTF8 is the worst case). So "4" should be enough for the moment.
311
+ * kana -> UTF8 is the worst case). So "4" should be enough for the moment.
312
312
  *
313
313
  * Note that this is not the same as the maximum character width in any
314
314
  * particular encoding.
315
315
  */
316
316
  #define MAX_CONVERSION_GROWTH 4
317
317
 
318
+ /*
319
+ * Maximum byte length of a string that's required in any encoding to convert
320
+ * at least one character to any other encoding. In other words, if you feed
321
+ * MAX_CONVERSION_INPUT_LENGTH bytes to any encoding conversion function, it
322
+ * is guaranteed to be able to convert something without needing more input
323
+ * (assuming the input is valid).
324
+ *
325
+ * Currently, the maximum case is the conversion UTF8 -> SJIS JIS X0201 half
326
+ * width kana, where a pair of UTF-8 characters is converted into a single
327
+ * SHIFT_JIS_2004 character (the reverse of the worst case for
328
+ * MAX_CONVERSION_GROWTH). It needs 6 bytes of input. In theory, a
329
+ * user-defined conversion function might have more complicated cases, although
330
+ * for the reverse mapping you would probably also need to bump up
331
+ * MAX_CONVERSION_GROWTH. But there is no need to be stingy here, so make it
332
+ * generous.
333
+ */
334
+ #define MAX_CONVERSION_INPUT_LENGTH 16
335
+
318
336
  /*
319
337
  * Maximum byte length of the string equivalent to any one Unicode code point,
320
338
  * in any backend encoding. The current value assumes that a 4-byte UTF-8
@@ -341,7 +359,7 @@ typedef struct pg_enc2name
341
359
  #endif
342
360
  } pg_enc2name;
343
361
 
344
- extern const pg_enc2name pg_enc2name_tbl[];
362
+ extern PGDLLIMPORT const pg_enc2name pg_enc2name_tbl[];
345
363
 
346
364
  /*
347
365
  * Encoding names for gettext
@@ -352,7 +370,7 @@ typedef struct pg_enc2gettext
352
370
  const char *name;
353
371
  } pg_enc2gettext;
354
372
 
355
- extern const pg_enc2gettext pg_enc2gettext_tbl[];
373
+ extern PGDLLIMPORT const pg_enc2gettext pg_enc2gettext_tbl[];
356
374
 
357
375
  /*
358
376
  * pg_wchar stuff
@@ -371,7 +389,9 @@ typedef int (*mbdisplaylen_converter) (const unsigned char *mbstr);
371
389
 
372
390
  typedef bool (*mbcharacter_incrementer) (unsigned char *mbstr, int len);
373
391
 
374
- typedef int (*mbverifier) (const unsigned char *mbstr, int len);
392
+ typedef int (*mbchar_verifier) (const unsigned char *mbstr, int len);
393
+
394
+ typedef int (*mbstr_verifier) (const unsigned char *mbstr, int len);
375
395
 
376
396
  typedef struct
377
397
  {
@@ -381,11 +401,12 @@ typedef struct
381
401
  * to a multibyte */
382
402
  mblen_converter mblen; /* get byte length of a char */
383
403
  mbdisplaylen_converter dsplen; /* get display width of a char */
384
- mbverifier mbverify; /* verify multibyte sequence */
404
+ mbchar_verifier mbverifychar; /* verify multibyte character */
405
+ mbstr_verifier mbverifystr; /* verify multibyte string */
385
406
  int maxmblen; /* max bytes for a char in this encoding */
386
407
  } pg_wchar_tbl;
387
408
 
388
- extern const pg_wchar_tbl pg_wchar_table[];
409
+ extern PGDLLIMPORT const pg_wchar_tbl pg_wchar_table[];
389
410
 
390
411
  /*
391
412
  * Data structures for conversions between UTF-8 and other encodings
@@ -555,7 +576,8 @@ extern int pg_valid_server_encoding_id(int encoding);
555
576
  extern int pg_encoding_mblen(int encoding, const char *mbstr);
556
577
  extern int pg_encoding_mblen_bounded(int encoding, const char *mbstr);
557
578
  extern int pg_encoding_dsplen(int encoding, const char *mbstr);
558
- extern int pg_encoding_verifymb(int encoding, const char *mbstr, int len);
579
+ extern int pg_encoding_verifymbchar(int encoding, const char *mbstr, int len);
580
+ extern int pg_encoding_verifymbstr(int encoding, const char *mbstr, int len);
559
581
  extern int pg_encoding_max_length(int encoding);
560
582
  extern int pg_valid_client_encoding(const char *name);
561
583
  extern int pg_valid_server_encoding(const char *name);
@@ -613,6 +635,12 @@ extern int pg_bind_textdomain_codeset(const char *domainname);
613
635
  extern unsigned char *pg_do_encoding_conversion(unsigned char *src, int len,
614
636
  int src_encoding,
615
637
  int dest_encoding);
638
+ extern int pg_do_encoding_conversion_buf(Oid proc,
639
+ int src_encoding,
640
+ int dest_encoding,
641
+ unsigned char *src, int srclen,
642
+ unsigned char *dst, int dstlen,
643
+ bool noError);
616
644
 
617
645
  extern char *pg_client_to_server(const char *s, int len);
618
646
  extern char *pg_server_to_client(const char *s, int len);
@@ -624,18 +652,18 @@ extern void pg_unicode_to_server(pg_wchar c, unsigned char *s);
624
652
  extern unsigned short BIG5toCNS(unsigned short big5, unsigned char *lc);
625
653
  extern unsigned short CNStoBIG5(unsigned short cns, unsigned char lc);
626
654
 
627
- extern void UtfToLocal(const unsigned char *utf, int len,
655
+ extern int UtfToLocal(const unsigned char *utf, int len,
628
656
  unsigned char *iso,
629
657
  const pg_mb_radix_tree *map,
630
658
  const pg_utf_to_local_combined *cmap, int cmapsize,
631
659
  utf_local_conversion_func conv_func,
632
- int encoding);
633
- extern void LocalToUtf(const unsigned char *iso, int len,
660
+ int encoding, bool noError);
661
+ extern int LocalToUtf(const unsigned char *iso, int len,
634
662
  unsigned char *utf,
635
663
  const pg_mb_radix_tree *map,
636
664
  const pg_local_to_utf_combined *cmap, int cmapsize,
637
665
  utf_local_conversion_func conv_func,
638
- int encoding);
666
+ int encoding, bool noError);
639
667
 
640
668
  extern bool pg_verifymbstr(const char *mbstr, int len, bool noError);
641
669
  extern bool pg_verify_mbstr(int encoding, const char *mbstr, int len,
@@ -653,21 +681,75 @@ extern void report_invalid_encoding(int encoding, const char *mbstr, int len) pg
653
681
  extern void report_untranslatable_char(int src_encoding, int dest_encoding,
654
682
  const char *mbstr, int len) pg_attribute_noreturn();
655
683
 
656
- extern void local2local(const unsigned char *l, unsigned char *p, int len,
657
- int src_encoding, int dest_encoding, const unsigned char *tab);
658
- extern void latin2mic(const unsigned char *l, unsigned char *p, int len,
659
- int lc, int encoding);
660
- extern void mic2latin(const unsigned char *mic, unsigned char *p, int len,
661
- int lc, int encoding);
662
- extern void latin2mic_with_table(const unsigned char *l, unsigned char *p,
684
+ extern int local2local(const unsigned char *l, unsigned char *p, int len,
685
+ int src_encoding, int dest_encoding,
686
+ const unsigned char *tab, bool noError);
687
+ extern int latin2mic(const unsigned char *l, unsigned char *p, int len,
688
+ int lc, int encoding, bool noError);
689
+ extern int mic2latin(const unsigned char *mic, unsigned char *p, int len,
690
+ int lc, int encoding, bool noError);
691
+ extern int latin2mic_with_table(const unsigned char *l, unsigned char *p,
663
692
  int len, int lc, int encoding,
664
- const unsigned char *tab);
665
- extern void mic2latin_with_table(const unsigned char *mic, unsigned char *p,
693
+ const unsigned char *tab, bool noError);
694
+ extern int mic2latin_with_table(const unsigned char *mic, unsigned char *p,
666
695
  int len, int lc, int encoding,
667
- const unsigned char *tab);
696
+ const unsigned char *tab, bool noError);
668
697
 
669
698
  #ifdef WIN32
670
699
  extern WCHAR *pgwin32_message_to_UTF16(const char *str, int len, int *utf16len);
671
700
  #endif
672
701
 
702
+
703
+ /*
704
+ * Verify a chunk of bytes for valid ASCII.
705
+ *
706
+ * Returns false if the input contains any zero bytes or bytes with the
707
+ * high-bit set. Input len must be a multiple of 8.
708
+ */
709
+ static inline bool
710
+ is_valid_ascii(const unsigned char *s, int len)
711
+ {
712
+ uint64 chunk,
713
+ highbit_cum = UINT64CONST(0),
714
+ zero_cum = UINT64CONST(0x8080808080808080);
715
+
716
+ Assert(len % sizeof(chunk) == 0);
717
+
718
+ while (len > 0)
719
+ {
720
+ memcpy(&chunk, s, sizeof(chunk));
721
+
722
+ /*
723
+ * Capture any zero bytes in this chunk.
724
+ *
725
+ * First, add 0x7f to each byte. This sets the high bit in each byte,
726
+ * unless it was a zero. If any resulting high bits are zero, the
727
+ * corresponding high bits in the zero accumulator will be cleared.
728
+ *
729
+ * If none of the bytes in the chunk had the high bit set, the max
730
+ * value each byte can have after the addition is 0x7f + 0x7f = 0xfe,
731
+ * and we don't need to worry about carrying over to the next byte. If
732
+ * any input bytes did have the high bit set, it doesn't matter
733
+ * because we check for those separately.
734
+ */
735
+ zero_cum &= (chunk + UINT64CONST(0x7f7f7f7f7f7f7f7f));
736
+
737
+ /* Capture any set bits in this chunk. */
738
+ highbit_cum |= chunk;
739
+
740
+ s += sizeof(chunk);
741
+ len -= sizeof(chunk);
742
+ }
743
+
744
+ /* Check if any high bits in the high bit accumulator got set. */
745
+ if (highbit_cum & UINT64CONST(0x8080808080808080))
746
+ return false;
747
+
748
+ /* Check if any high bits in the zero accumulator got cleared. */
749
+ if (zero_cum != UINT64CONST(0x8080808080808080))
750
+ return false;
751
+
752
+ return true;
753
+ }
754
+
673
755
  #endif /* PG_WCHAR_H */
@@ -3,7 +3,7 @@
3
3
  * stringinfo_mb.h
4
4
  * multibyte support for StringInfo
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/mb/stringinfo_mb.h
@@ -10,7 +10,7 @@
10
10
  * Over time, this has also become the preferred place for widely known
11
11
  * resource-limitation stuff, such as work_mem and check_stack_depth().
12
12
  *
13
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
13
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
14
14
  * Portions Copyright (c) 1994, Regents of the University of California
15
15
  *
16
16
  * src/include/miscadmin.h
@@ -91,8 +91,12 @@ extern PGDLLIMPORT __thread volatile sig_atomic_t InterruptPending;
91
91
  extern PGDLLIMPORT volatile sig_atomic_t QueryCancelPending;
92
92
  extern PGDLLIMPORT volatile sig_atomic_t ProcDiePending;
93
93
  extern PGDLLIMPORT volatile sig_atomic_t IdleInTransactionSessionTimeoutPending;
94
+ extern PGDLLIMPORT volatile sig_atomic_t IdleSessionTimeoutPending;
94
95
  extern PGDLLIMPORT volatile sig_atomic_t ProcSignalBarrierPending;
96
+ extern PGDLLIMPORT volatile sig_atomic_t LogMemoryContextPending;
97
+ extern PGDLLIMPORT volatile sig_atomic_t IdleStatsUpdateTimeoutPending;
95
98
 
99
+ extern PGDLLIMPORT volatile sig_atomic_t CheckClientConnectionPending;
96
100
  extern PGDLLIMPORT volatile sig_atomic_t ClientConnectionLost;
97
101
 
98
102
  /* these are marked volatile because they are examined by signal handlers: */
@@ -158,7 +162,7 @@ do { \
158
162
  * from utils/init/globals.c
159
163
  */
160
164
  extern PGDLLIMPORT pid_t PostmasterPid;
161
- extern PGDLLIMPORT __thread bool IsPostmasterEnvironment;
165
+ extern PGDLLIMPORT bool IsPostmasterEnvironment;
162
166
  extern PGDLLIMPORT bool IsUnderPostmaster;
163
167
  extern PGDLLIMPORT bool IsBackgroundWorker;
164
168
  extern PGDLLIMPORT bool IsBinaryUpgrade;
@@ -179,15 +183,15 @@ extern PGDLLIMPORT pg_time_t MyStartTime;
179
183
  extern PGDLLIMPORT TimestampTz MyStartTimestamp;
180
184
  extern PGDLLIMPORT struct Port *MyProcPort;
181
185
  extern PGDLLIMPORT struct Latch *MyLatch;
182
- extern int32 MyCancelKey;
183
- extern int MyPMChildSlot;
186
+ extern PGDLLIMPORT int32 MyCancelKey;
187
+ extern PGDLLIMPORT int MyPMChildSlot;
184
188
 
185
- extern char OutputFileName[];
189
+ extern PGDLLIMPORT char OutputFileName[];
186
190
  extern PGDLLIMPORT char my_exec_path[];
187
- extern char pkglib_path[];
191
+ extern PGDLLIMPORT char pkglib_path[];
188
192
 
189
193
  #ifdef EXEC_BACKEND
190
- extern char postgres_exec_path[];
194
+ extern PGDLLIMPORT char postgres_exec_path[];
191
195
  #endif
192
196
 
193
197
  /*
@@ -252,27 +256,25 @@ extern PGDLLIMPORT int IntervalStyle;
252
256
 
253
257
  #define MAXTZLEN 10 /* max TZ name len, not counting tr. null */
254
258
 
255
- extern bool enableFsync;
259
+ extern PGDLLIMPORT bool enableFsync;
256
260
  extern PGDLLIMPORT bool allowSystemTableMods;
257
261
  extern PGDLLIMPORT int work_mem;
258
262
  extern PGDLLIMPORT double hash_mem_multiplier;
259
263
  extern PGDLLIMPORT int maintenance_work_mem;
260
264
  extern PGDLLIMPORT int max_parallel_maintenance_workers;
261
265
 
262
- extern int VacuumCostPageHit;
263
- extern int VacuumCostPageMiss;
264
- extern int VacuumCostPageDirty;
265
- extern int VacuumCostLimit;
266
- extern double VacuumCostDelay;
266
+ extern PGDLLIMPORT int VacuumCostPageHit;
267
+ extern PGDLLIMPORT int VacuumCostPageMiss;
268
+ extern PGDLLIMPORT int VacuumCostPageDirty;
269
+ extern PGDLLIMPORT int VacuumCostLimit;
270
+ extern PGDLLIMPORT double VacuumCostDelay;
267
271
 
268
- extern int64 VacuumPageHit;
269
- extern int64 VacuumPageMiss;
270
- extern int64 VacuumPageDirty;
272
+ extern PGDLLIMPORT int64 VacuumPageHit;
273
+ extern PGDLLIMPORT int64 VacuumPageMiss;
274
+ extern PGDLLIMPORT int64 VacuumPageDirty;
271
275
 
272
- extern int VacuumCostBalance;
273
- extern bool VacuumCostActive;
274
-
275
- extern double vacuum_cleanup_index_scale_factor;
276
+ extern PGDLLIMPORT int VacuumCostBalance;
277
+ extern PGDLLIMPORT bool VacuumCostActive;
276
278
 
277
279
 
278
280
  /* in tcop/postgres.c */
@@ -298,7 +300,7 @@ extern void PreventCommandIfParallelMode(const char *cmdname);
298
300
  extern void PreventCommandDuringRecovery(const char *cmdname);
299
301
 
300
302
  /* in utils/misc/guc.c */
301
- extern int trace_recovery_messages;
303
+ extern PGDLLIMPORT int trace_recovery_messages;
302
304
  extern int trace_recovery(int trace_level);
303
305
 
304
306
  /*****************************************************************************
@@ -311,7 +313,7 @@ extern int trace_recovery(int trace_level);
311
313
  #define SECURITY_RESTRICTED_OPERATION 0x0002
312
314
  #define SECURITY_NOFORCE_RLS 0x0004
313
315
 
314
- extern char *DatabasePath;
316
+ extern PGDLLIMPORT char *DatabasePath;
315
317
 
316
318
  /* now in utils/init/miscinit.c */
317
319
  extern void InitPostmasterChild(void);
@@ -333,11 +335,10 @@ typedef enum BackendType
333
335
  B_WAL_SENDER,
334
336
  B_WAL_WRITER,
335
337
  B_ARCHIVER,
336
- B_STATS_COLLECTOR,
337
338
  B_LOGGER,
338
339
  } BackendType;
339
340
 
340
- extern BackendType MyBackendType;
341
+ extern PGDLLIMPORT BackendType MyBackendType;
341
342
 
342
343
  extern const char *GetBackendTypeDesc(BackendType backendType);
343
344
 
@@ -400,7 +401,7 @@ typedef enum ProcessingMode
400
401
  NormalProcessing /* normal processing */
401
402
  } ProcessingMode;
402
403
 
403
- extern ProcessingMode Mode;
404
+ extern PGDLLIMPORT ProcessingMode Mode;
404
405
 
405
406
  #define IsBootstrapProcessingMode() (Mode == BootstrapProcessing)
406
407
  #define IsInitProcessingMode() (Mode == InitProcessing)
@@ -420,16 +421,17 @@ extern ProcessingMode Mode;
420
421
  /*
421
422
  * Auxiliary-process type identifiers. These used to be in bootstrap.h
422
423
  * but it seems saner to have them here, with the ProcessingMode stuff.
423
- * The MyAuxProcType global is defined and set in bootstrap.c.
424
+ * The MyAuxProcType global is defined and set in auxprocess.c.
425
+ *
426
+ * Make sure to list in the glossary any items you add here.
424
427
  */
425
428
 
426
429
  typedef enum
427
430
  {
428
431
  NotAnAuxProcess = -1,
429
- CheckerProcess = 0,
430
- BootstrapProcess,
431
- StartupProcess,
432
+ StartupProcess = 0,
432
433
  BgWriterProcess,
434
+ ArchiverProcess,
433
435
  CheckpointerProcess,
434
436
  WalWriterProcess,
435
437
  WalReceiverProcess,
@@ -437,11 +439,11 @@ typedef enum
437
439
  NUM_AUXPROCTYPES /* Must be last! */
438
440
  } AuxProcType;
439
441
 
440
- extern AuxProcType MyAuxProcType;
442
+ extern PGDLLIMPORT AuxProcType MyAuxProcType;
441
443
 
442
- #define AmBootstrapProcess() (MyAuxProcType == BootstrapProcess)
443
444
  #define AmStartupProcess() (MyAuxProcType == StartupProcess)
444
445
  #define AmBackgroundWriterProcess() (MyAuxProcType == BgWriterProcess)
446
+ #define AmArchiverProcess() (MyAuxProcType == ArchiverProcess)
445
447
  #define AmCheckpointerProcess() (MyAuxProcType == CheckpointerProcess)
446
448
  #define AmWalWriterProcess() (MyAuxProcType == WalWriterProcess)
447
449
  #define AmWalReceiverProcess() (MyAuxProcType == WalReceiverProcess)
@@ -455,16 +457,21 @@ extern AuxProcType MyAuxProcType;
455
457
  /* in utils/init/postinit.c */
456
458
  extern void pg_split_opts(char **argv, int *argcp, const char *optstr);
457
459
  extern void InitializeMaxBackends(void);
458
- extern void InitPostgres(const char *in_dbname, Oid dboid, const char *username,
459
- Oid useroid, char *out_dbname, bool override_allow_connections);
460
+ extern void InitPostgres(const char *in_dbname, Oid dboid,
461
+ const char *username, Oid useroid,
462
+ bool load_session_libraries,
463
+ bool override_allow_connections,
464
+ char *out_dbname);
460
465
  extern void BaseInit(void);
461
466
 
462
467
  /* in utils/init/miscinit.c */
463
- extern bool IgnoreSystemIndexes;
468
+ extern PGDLLIMPORT bool IgnoreSystemIndexes;
464
469
  extern PGDLLIMPORT bool process_shared_preload_libraries_in_progress;
465
- extern char *session_preload_libraries_string;
466
- extern char *shared_preload_libraries_string;
467
- extern char *local_preload_libraries_string;
470
+ extern PGDLLIMPORT bool process_shared_preload_libraries_done;
471
+ extern PGDLLIMPORT bool process_shmem_requests_in_progress;
472
+ extern PGDLLIMPORT char *session_preload_libraries_string;
473
+ extern PGDLLIMPORT char *shared_preload_libraries_string;
474
+ extern PGDLLIMPORT char *local_preload_libraries_string;
468
475
 
469
476
  extern void CreateDataDirLockFile(bool amPostmaster);
470
477
  extern void CreateSocketLockFile(const char *socketfile, bool amPostmaster,
@@ -475,15 +482,14 @@ extern bool RecheckDataDirLockFile(void);
475
482
  extern void ValidatePgVersion(const char *path);
476
483
  extern void process_shared_preload_libraries(void);
477
484
  extern void process_session_preload_libraries(void);
485
+ extern void process_shmem_requests(void);
478
486
  extern void pg_bindtextdomain(const char *domain);
479
487
  extern bool has_rolreplication(Oid roleid);
480
488
 
481
- /* in access/transam/xlog.c */
482
- extern bool BackupInProgress(void);
483
- extern void CancelBackup(void);
489
+ typedef void (*shmem_request_hook_type) (void);
490
+ extern PGDLLIMPORT shmem_request_hook_type shmem_request_hook;
484
491
 
485
492
  /* in executor/nodeHash.c */
486
493
  extern size_t get_hash_memory_limit(void);
487
- extern int get_hash_mem(void);
488
494
 
489
495
  #endif /* MISCADMIN_H */
@@ -11,7 +11,7 @@
11
11
  * bms_is_empty() in preference to testing for NULL.)
12
12
  *
13
13
  *
14
- * Copyright (c) 2003-2020, PostgreSQL Global Development Group
14
+ * Copyright (c) 2003-2022, PostgreSQL Global Development Group
15
15
  *
16
16
  * src/include/nodes/bitmapset.h
17
17
  *