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
@@ -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);
@@ -72,21 +80,24 @@ extern int pq_getmessage(StringInfo s, int maxlen);
72
80
  extern int pq_getbyte(void);
73
81
  extern int pq_peekbyte(void);
74
82
  extern int pq_getbyte_if_available(unsigned char *c);
75
- extern int pq_putbytes(const char *s, size_t len);
83
+ extern bool pq_buffer_has_data(void);
84
+ extern int pq_putmessage_v2(char msgtype, const char *s, size_t len);
85
+ extern bool pq_check_connection(void);
76
86
 
77
87
  /*
78
88
  * prototypes for functions in be-secure.c
79
89
  */
80
- extern char *ssl_library;
81
- extern char *ssl_cert_file;
82
- extern char *ssl_key_file;
83
- extern char *ssl_ca_file;
84
- extern char *ssl_crl_file;
85
- 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;
86
97
  extern PGDLLIMPORT char *ssl_passphrase_command;
87
98
  extern PGDLLIMPORT bool ssl_passphrase_command_supports_reload;
88
99
  #ifdef USE_SSL
89
- extern bool ssl_loaded_verify_locations;
100
+ extern PGDLLIMPORT bool ssl_loaded_verify_locations;
90
101
  #endif
91
102
 
92
103
  extern int secure_initialize(bool isServerStart);
@@ -107,11 +118,11 @@ extern ssize_t secure_open_gssapi(Port *port);
107
118
  #endif
108
119
 
109
120
  /* GUCs */
110
- extern char *SSLCipherSuites;
111
- extern char *SSLECDHCurve;
112
- extern bool SSLPreferServerCiphers;
113
- extern int ssl_min_protocol_version;
114
- 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;
115
126
 
116
127
  enum ssl_protocol_versions
117
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
@@ -553,8 +574,10 @@ extern int pg_valid_server_encoding_id(int encoding);
553
574
  * earlier in this file are also available from libpgcommon.
554
575
  */
555
576
  extern int pg_encoding_mblen(int encoding, const char *mbstr);
577
+ extern int pg_encoding_mblen_bounded(int encoding, const char *mbstr);
556
578
  extern int pg_encoding_dsplen(int encoding, const char *mbstr);
557
- 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);
558
581
  extern int pg_encoding_max_length(int encoding);
559
582
  extern int pg_valid_client_encoding(const char *name);
560
583
  extern int pg_valid_server_encoding(const char *name);
@@ -612,6 +635,12 @@ extern int pg_bind_textdomain_codeset(const char *domainname);
612
635
  extern unsigned char *pg_do_encoding_conversion(unsigned char *src, int len,
613
636
  int src_encoding,
614
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);
615
644
 
616
645
  extern char *pg_client_to_server(const char *s, int len);
617
646
  extern char *pg_server_to_client(const char *s, int len);
@@ -623,18 +652,18 @@ extern void pg_unicode_to_server(pg_wchar c, unsigned char *s);
623
652
  extern unsigned short BIG5toCNS(unsigned short big5, unsigned char *lc);
624
653
  extern unsigned short CNStoBIG5(unsigned short cns, unsigned char lc);
625
654
 
626
- extern void UtfToLocal(const unsigned char *utf, int len,
655
+ extern int UtfToLocal(const unsigned char *utf, int len,
627
656
  unsigned char *iso,
628
657
  const pg_mb_radix_tree *map,
629
658
  const pg_utf_to_local_combined *cmap, int cmapsize,
630
659
  utf_local_conversion_func conv_func,
631
- int encoding);
632
- extern void LocalToUtf(const unsigned char *iso, int len,
660
+ int encoding, bool noError);
661
+ extern int LocalToUtf(const unsigned char *iso, int len,
633
662
  unsigned char *utf,
634
663
  const pg_mb_radix_tree *map,
635
664
  const pg_local_to_utf_combined *cmap, int cmapsize,
636
665
  utf_local_conversion_func conv_func,
637
- int encoding);
666
+ int encoding, bool noError);
638
667
 
639
668
  extern bool pg_verifymbstr(const char *mbstr, int len, bool noError);
640
669
  extern bool pg_verify_mbstr(int encoding, const char *mbstr, int len,
@@ -652,21 +681,75 @@ extern void report_invalid_encoding(int encoding, const char *mbstr, int len) pg
652
681
  extern void report_untranslatable_char(int src_encoding, int dest_encoding,
653
682
  const char *mbstr, int len) pg_attribute_noreturn();
654
683
 
655
- extern void local2local(const unsigned char *l, unsigned char *p, int len,
656
- int src_encoding, int dest_encoding, const unsigned char *tab);
657
- extern void latin2mic(const unsigned char *l, unsigned char *p, int len,
658
- int lc, int encoding);
659
- extern void mic2latin(const unsigned char *mic, unsigned char *p, int len,
660
- int lc, int encoding);
661
- 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,
662
692
  int len, int lc, int encoding,
663
- const unsigned char *tab);
664
- 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,
665
695
  int len, int lc, int encoding,
666
- const unsigned char *tab);
696
+ const unsigned char *tab, bool noError);
667
697
 
668
698
  #ifdef WIN32
669
699
  extern WCHAR *pgwin32_message_to_UTF16(const char *str, int len, int *utf16len);
670
700
  #endif
671
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
+
672
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