pg_query 2.2.0 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (895) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +86 -0
  3. data/README.md +57 -31
  4. data/Rakefile +5 -6
  5. data/ext/pg_query/ext_symbols_freebsd.sym +1 -0
  6. data/ext/pg_query/ext_symbols_freebsd_with_ruby_abi_version.sym +2 -0
  7. data/ext/pg_query/ext_symbols_openbsd.sym +1 -0
  8. data/ext/pg_query/ext_symbols_openbsd_with_ruby_abi_version.sym +2 -0
  9. data/ext/pg_query/ext_symbols_with_ruby_abi_version.sym +2 -0
  10. data/ext/pg_query/extconf.rb +33 -9
  11. data/ext/pg_query/include/pg_query.h +30 -4
  12. data/ext/pg_query/include/pg_query_enum_defs.c +839 -290
  13. data/ext/pg_query/include/pg_query_fingerprint_conds.c +638 -481
  14. data/ext/pg_query/include/pg_query_fingerprint_defs.c +6786 -4193
  15. data/ext/pg_query/include/pg_query_outfuncs_conds.c +450 -330
  16. data/ext/pg_query/include/pg_query_outfuncs_defs.c +1489 -1044
  17. data/ext/pg_query/include/pg_query_readfuncs_conds.c +157 -118
  18. data/ext/pg_query/include/pg_query_readfuncs_defs.c +1933 -1410
  19. data/ext/pg_query/include/postgres/access/amapi.h +303 -0
  20. data/ext/pg_query/include/postgres/access/attmap.h +54 -0
  21. data/ext/pg_query/include/postgres/access/attnum.h +64 -0
  22. data/ext/pg_query/include/postgres/access/brin_internal.h +116 -0
  23. data/ext/pg_query/include/postgres/access/brin_tuple.h +112 -0
  24. data/ext/pg_query/include/postgres/access/clog.h +62 -0
  25. data/ext/pg_query/include/postgres/access/commit_ts.h +73 -0
  26. data/ext/pg_query/include/postgres/access/detoast.h +82 -0
  27. data/ext/pg_query/include/postgres/access/genam.h +246 -0
  28. data/ext/pg_query/include/postgres/access/gin.h +91 -0
  29. data/ext/pg_query/include/postgres/access/htup.h +89 -0
  30. data/ext/pg_query/include/postgres/access/htup_details.h +811 -0
  31. data/ext/pg_query/include/postgres/access/itup.h +170 -0
  32. data/ext/pg_query/include/postgres/access/parallel.h +81 -0
  33. data/ext/pg_query/include/postgres/access/printtup.h +35 -0
  34. data/ext/pg_query/include/postgres/access/relation.h +28 -0
  35. data/ext/pg_query/include/postgres/access/relscan.h +191 -0
  36. data/ext/pg_query/include/postgres/access/rmgr.h +62 -0
  37. data/ext/pg_query/include/postgres/access/rmgrlist.h +49 -0
  38. data/ext/pg_query/include/postgres/access/sdir.h +67 -0
  39. data/ext/pg_query/include/postgres/access/skey.h +151 -0
  40. data/ext/pg_query/include/postgres/access/slru.h +218 -0
  41. data/ext/pg_query/include/postgres/access/stratnum.h +85 -0
  42. data/ext/pg_query/include/postgres/access/sysattr.h +29 -0
  43. data/ext/pg_query/include/postgres/access/table.h +28 -0
  44. data/ext/pg_query/include/postgres/access/tableam.h +2110 -0
  45. data/ext/pg_query/include/postgres/access/tidstore.h +50 -0
  46. data/ext/pg_query/include/postgres/access/toast_compression.h +73 -0
  47. data/ext/pg_query/include/postgres/access/transam.h +418 -0
  48. data/ext/pg_query/include/postgres/access/tsmapi.h +82 -0
  49. data/ext/pg_query/include/postgres/access/tupconvert.h +54 -0
  50. data/ext/pg_query/include/postgres/access/tupdesc.h +154 -0
  51. data/ext/pg_query/include/postgres/access/tupmacs.h +207 -0
  52. data/ext/pg_query/include/postgres/access/twophase.h +65 -0
  53. data/ext/pg_query/include/postgres/access/xact.h +530 -0
  54. data/ext/pg_query/include/postgres/access/xlog.h +310 -0
  55. data/ext/pg_query/include/postgres/access/xlog_internal.h +405 -0
  56. data/ext/pg_query/include/postgres/access/xlogbackup.h +43 -0
  57. data/ext/pg_query/include/postgres/access/xlogdefs.h +82 -0
  58. data/ext/pg_query/include/postgres/access/xlogprefetcher.h +55 -0
  59. data/ext/pg_query/include/postgres/access/xlogreader.h +444 -0
  60. data/ext/pg_query/include/postgres/access/xlogrecord.h +248 -0
  61. data/ext/pg_query/include/postgres/access/xlogrecovery.h +158 -0
  62. data/ext/pg_query/include/postgres/archive/archive_module.h +67 -0
  63. data/ext/pg_query/include/postgres/c.h +1374 -0
  64. data/ext/pg_query/include/postgres/catalog/catalog.h +47 -0
  65. data/ext/pg_query/include/postgres/catalog/catversion.h +62 -0
  66. data/ext/pg_query/include/postgres/catalog/dependency.h +228 -0
  67. data/ext/pg_query/include/postgres/catalog/genbki.h +149 -0
  68. data/ext/pg_query/include/postgres/catalog/index.h +218 -0
  69. data/ext/pg_query/include/postgres/catalog/indexing.h +54 -0
  70. data/ext/pg_query/include/postgres/catalog/namespace.h +189 -0
  71. data/ext/pg_query/include/postgres/catalog/objectaccess.h +267 -0
  72. data/ext/pg_query/include/postgres/catalog/objectaddress.h +93 -0
  73. data/ext/pg_query/include/postgres/catalog/pg_aggregate.h +182 -0
  74. data/ext/pg_query/include/postgres/catalog/pg_aggregate_d.h +78 -0
  75. data/ext/pg_query/include/postgres/catalog/pg_am.h +66 -0
  76. data/ext/pg_query/include/postgres/catalog/pg_am_d.h +47 -0
  77. data/ext/pg_query/include/postgres/catalog/pg_attribute.h +240 -0
  78. data/ext/pg_query/include/postgres/catalog/pg_attribute_d.h +62 -0
  79. data/ext/pg_query/include/postgres/catalog/pg_authid.h +66 -0
  80. data/ext/pg_query/include/postgres/catalog/pg_authid_d.h +60 -0
  81. data/ext/pg_query/include/postgres/catalog/pg_class.h +235 -0
  82. data/ext/pg_query/include/postgres/catalog/pg_class_d.h +134 -0
  83. data/ext/pg_query/include/postgres/catalog/pg_collation.h +106 -0
  84. data/ext/pg_query/include/postgres/catalog/pg_collation_d.h +66 -0
  85. data/ext/pg_query/include/postgres/catalog/pg_constraint.h +278 -0
  86. data/ext/pg_query/include/postgres/catalog/pg_constraint_d.h +74 -0
  87. data/ext/pg_query/include/postgres/catalog/pg_control.h +260 -0
  88. data/ext/pg_query/include/postgres/catalog/pg_conversion.h +79 -0
  89. data/ext/pg_query/include/postgres/catalog/pg_conversion_d.h +38 -0
  90. data/ext/pg_query/include/postgres/catalog/pg_database.h +129 -0
  91. data/ext/pg_query/include/postgres/catalog/pg_database_d.h +53 -0
  92. data/ext/pg_query/include/postgres/catalog/pg_depend.h +77 -0
  93. data/ext/pg_query/include/postgres/catalog/pg_depend_d.h +36 -0
  94. data/ext/pg_query/include/postgres/catalog/pg_event_trigger.h +60 -0
  95. data/ext/pg_query/include/postgres/catalog/pg_event_trigger_d.h +36 -0
  96. data/ext/pg_query/include/postgres/catalog/pg_index.h +92 -0
  97. data/ext/pg_query/include/postgres/catalog/pg_index_d.h +59 -0
  98. data/ext/pg_query/include/postgres/catalog/pg_language.h +75 -0
  99. data/ext/pg_query/include/postgres/catalog/pg_language_d.h +41 -0
  100. data/ext/pg_query/include/postgres/catalog/pg_namespace.h +67 -0
  101. data/ext/pg_query/include/postgres/catalog/pg_namespace_d.h +36 -0
  102. data/ext/pg_query/include/postgres/catalog/pg_opclass.h +91 -0
  103. data/ext/pg_query/include/postgres/catalog/pg_opclass_d.h +51 -0
  104. data/ext/pg_query/include/postgres/catalog/pg_operator.h +124 -0
  105. data/ext/pg_query/include/postgres/catalog/pg_operator_d.h +142 -0
  106. data/ext/pg_query/include/postgres/catalog/pg_opfamily.h +67 -0
  107. data/ext/pg_query/include/postgres/catalog/pg_opfamily_d.h +51 -0
  108. data/ext/pg_query/include/postgres/catalog/pg_partitioned_table.h +76 -0
  109. data/ext/pg_query/include/postgres/catalog/pg_partitioned_table_d.h +36 -0
  110. data/ext/pg_query/include/postgres/catalog/pg_proc.h +223 -0
  111. data/ext/pg_query/include/postgres/catalog/pg_proc_d.h +101 -0
  112. data/ext/pg_query/include/postgres/catalog/pg_publication.h +161 -0
  113. data/ext/pg_query/include/postgres/catalog/pg_publication_d.h +38 -0
  114. data/ext/pg_query/include/postgres/catalog/pg_replication_origin.h +65 -0
  115. data/ext/pg_query/include/postgres/catalog/pg_replication_origin_d.h +33 -0
  116. data/ext/pg_query/include/postgres/catalog/pg_statistic.h +288 -0
  117. data/ext/pg_query/include/postgres/catalog/pg_statistic_d.h +199 -0
  118. data/ext/pg_query/include/postgres/catalog/pg_statistic_ext.h +91 -0
  119. data/ext/pg_query/include/postgres/catalog/pg_statistic_ext_d.h +45 -0
  120. data/ext/pg_query/include/postgres/catalog/pg_transform.h +51 -0
  121. data/ext/pg_query/include/postgres/catalog/pg_transform_d.h +34 -0
  122. data/ext/pg_query/include/postgres/catalog/pg_trigger.h +153 -0
  123. data/ext/pg_query/include/postgres/catalog/pg_trigger_d.h +109 -0
  124. data/ext/pg_query/include/postgres/catalog/pg_ts_config.h +56 -0
  125. data/ext/pg_query/include/postgres/catalog/pg_ts_config_d.h +34 -0
  126. data/ext/pg_query/include/postgres/catalog/pg_ts_dict.h +62 -0
  127. data/ext/pg_query/include/postgres/catalog/pg_ts_dict_d.h +35 -0
  128. data/ext/pg_query/include/postgres/catalog/pg_ts_parser.h +63 -0
  129. data/ext/pg_query/include/postgres/catalog/pg_ts_parser_d.h +37 -0
  130. data/ext/pg_query/include/postgres/catalog/pg_ts_template.h +54 -0
  131. data/ext/pg_query/include/postgres/catalog/pg_ts_template_d.h +34 -0
  132. data/ext/pg_query/include/postgres/catalog/pg_type.h +407 -0
  133. data/ext/pg_query/include/postgres/catalog/pg_type_d.h +324 -0
  134. data/ext/pg_query/include/postgres/catalog/storage.h +50 -0
  135. data/ext/pg_query/include/postgres/catalog/syscache_ids.h +104 -0
  136. data/ext/pg_query/include/postgres/commands/async.h +49 -0
  137. data/ext/pg_query/include/postgres/commands/dbcommands.h +37 -0
  138. data/ext/pg_query/include/postgres/commands/defrem.h +161 -0
  139. data/ext/pg_query/include/postgres/commands/event_trigger.h +97 -0
  140. data/ext/pg_query/include/postgres/commands/explain.h +145 -0
  141. data/ext/pg_query/include/postgres/commands/prepare.h +61 -0
  142. data/ext/pg_query/include/postgres/commands/tablespace.h +69 -0
  143. data/ext/pg_query/include/postgres/commands/trigger.h +288 -0
  144. data/ext/pg_query/include/postgres/commands/user.h +43 -0
  145. data/ext/pg_query/include/postgres/commands/vacuum.h +388 -0
  146. data/ext/pg_query/include/postgres/common/cryptohash.h +39 -0
  147. data/ext/pg_query/include/postgres/common/file_perm.h +56 -0
  148. data/ext/pg_query/include/postgres/common/file_utils.h +65 -0
  149. data/ext/pg_query/include/postgres/common/hashfn.h +119 -0
  150. data/ext/pg_query/include/postgres/common/hashfn_unstable.h +407 -0
  151. data/ext/pg_query/include/postgres/common/int.h +512 -0
  152. data/ext/pg_query/include/postgres/common/keywords.h +29 -0
  153. data/ext/pg_query/include/postgres/common/kwlookup.h +44 -0
  154. data/ext/pg_query/include/postgres/common/pg_prng.h +62 -0
  155. data/ext/pg_query/include/postgres/common/relpath.h +97 -0
  156. data/ext/pg_query/include/postgres/common/scram-common.h +70 -0
  157. data/ext/pg_query/include/postgres/common/sha2.h +32 -0
  158. data/ext/pg_query/include/postgres/common/string.h +44 -0
  159. data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +124 -0
  160. data/ext/pg_query/include/postgres/common/unicode_nonspacing_table.h +326 -0
  161. data/ext/pg_query/include/postgres/copyfuncs.funcs.c +5261 -0
  162. data/ext/pg_query/include/postgres/copyfuncs.switch.c +989 -0
  163. data/ext/pg_query/include/postgres/datatype/timestamp.h +269 -0
  164. data/ext/pg_query/include/postgres/equalfuncs.funcs.c +3310 -0
  165. data/ext/pg_query/include/postgres/equalfuncs.switch.c +836 -0
  166. data/ext/pg_query/include/postgres/executor/execdesc.h +70 -0
  167. data/ext/pg_query/include/postgres/executor/executor.h +681 -0
  168. data/ext/pg_query/include/postgres/executor/functions.h +56 -0
  169. data/ext/pg_query/include/postgres/executor/instrument.h +120 -0
  170. data/ext/pg_query/include/postgres/executor/spi.h +207 -0
  171. data/ext/pg_query/include/postgres/executor/tablefunc.h +67 -0
  172. data/ext/pg_query/include/postgres/executor/tuptable.h +523 -0
  173. data/ext/pg_query/include/postgres/fmgr.h +800 -0
  174. data/ext/pg_query/include/postgres/foreign/fdwapi.h +294 -0
  175. data/ext/pg_query/include/postgres/funcapi.h +360 -0
  176. data/ext/pg_query/include/postgres/gram.h +1168 -0
  177. data/ext/pg_query/include/postgres/gramparse.h +75 -0
  178. data/ext/pg_query/include/postgres/jit/jit.h +106 -0
  179. data/ext/pg_query/include/postgres/kwlist_d.h +1164 -0
  180. data/ext/pg_query/include/postgres/lib/dshash.h +130 -0
  181. data/ext/pg_query/include/postgres/lib/ilist.h +1159 -0
  182. data/ext/pg_query/include/postgres/lib/pairingheap.h +102 -0
  183. data/ext/pg_query/include/postgres/lib/simplehash.h +1206 -0
  184. data/ext/pg_query/include/postgres/lib/sort_template.h +445 -0
  185. data/ext/pg_query/include/postgres/lib/stringinfo.h +243 -0
  186. data/ext/pg_query/include/postgres/libpq/auth.h +37 -0
  187. data/ext/pg_query/include/postgres/libpq/crypt.h +47 -0
  188. data/ext/pg_query/include/postgres/libpq/hba.h +186 -0
  189. data/ext/pg_query/include/postgres/libpq/libpq-be.h +361 -0
  190. data/ext/pg_query/include/postgres/libpq/libpq.h +143 -0
  191. data/ext/pg_query/include/postgres/libpq/pqcomm.h +169 -0
  192. data/ext/pg_query/include/postgres/libpq/pqformat.h +209 -0
  193. data/ext/pg_query/include/postgres/libpq/pqsignal.h +54 -0
  194. data/ext/pg_query/include/postgres/libpq/protocol.h +89 -0
  195. data/ext/pg_query/include/postgres/libpq/sasl.h +136 -0
  196. data/ext/pg_query/include/postgres/libpq/scram.h +37 -0
  197. data/ext/pg_query/include/postgres/mb/pg_wchar.h +793 -0
  198. data/ext/pg_query/include/postgres/mb/stringinfo_mb.h +24 -0
  199. data/ext/pg_query/include/postgres/miscadmin.h +527 -0
  200. data/ext/pg_query/include/postgres/nodes/bitmapset.h +140 -0
  201. data/ext/pg_query/include/postgres/nodes/execnodes.h +2855 -0
  202. data/ext/pg_query/include/postgres/nodes/extensible.h +164 -0
  203. data/ext/pg_query/include/postgres/nodes/lockoptions.h +61 -0
  204. data/ext/pg_query/include/postgres/nodes/makefuncs.h +127 -0
  205. data/ext/pg_query/include/postgres/nodes/memnodes.h +152 -0
  206. data/ext/pg_query/include/postgres/nodes/miscnodes.h +56 -0
  207. data/ext/pg_query/include/postgres/nodes/nodeFuncs.h +222 -0
  208. data/ext/pg_query/include/postgres/nodes/nodes.h +435 -0
  209. data/ext/pg_query/include/postgres/nodes/nodetags.h +491 -0
  210. data/ext/pg_query/include/postgres/nodes/params.h +170 -0
  211. data/ext/pg_query/include/postgres/nodes/parsenodes.h +4233 -0
  212. data/ext/pg_query/include/postgres/nodes/pathnodes.h +3438 -0
  213. data/ext/pg_query/include/postgres/nodes/pg_list.h +686 -0
  214. data/ext/pg_query/include/postgres/nodes/plannodes.h +1593 -0
  215. data/ext/pg_query/include/postgres/nodes/primnodes.h +2339 -0
  216. data/ext/pg_query/include/postgres/nodes/print.h +34 -0
  217. data/ext/pg_query/include/postgres/nodes/queryjumble.h +86 -0
  218. data/ext/pg_query/include/postgres/nodes/replnodes.h +132 -0
  219. data/ext/pg_query/include/postgres/nodes/supportnodes.h +346 -0
  220. data/ext/pg_query/include/postgres/nodes/tidbitmap.h +75 -0
  221. data/ext/pg_query/include/postgres/nodes/value.h +90 -0
  222. data/ext/pg_query/include/postgres/optimizer/cost.h +216 -0
  223. data/ext/pg_query/include/postgres/optimizer/geqo.h +90 -0
  224. data/ext/pg_query/include/postgres/optimizer/geqo_gene.h +45 -0
  225. data/ext/pg_query/include/postgres/optimizer/optimizer.h +205 -0
  226. data/ext/pg_query/include/postgres/optimizer/paths.h +271 -0
  227. data/ext/pg_query/include/postgres/optimizer/planmain.h +123 -0
  228. data/ext/pg_query/include/postgres/parser/analyze.h +66 -0
  229. data/ext/pg_query/include/postgres/parser/kwlist.h +518 -0
  230. data/ext/pg_query/include/postgres/parser/parse_agg.h +65 -0
  231. data/ext/pg_query/include/postgres/parser/parse_coerce.h +105 -0
  232. data/ext/pg_query/include/postgres/parser/parse_expr.h +25 -0
  233. data/ext/pg_query/include/postgres/parser/parse_func.h +74 -0
  234. data/ext/pg_query/include/postgres/parser/parse_node.h +358 -0
  235. data/ext/pg_query/include/postgres/parser/parse_oper.h +68 -0
  236. data/ext/pg_query/include/postgres/parser/parse_relation.h +129 -0
  237. data/ext/pg_query/include/postgres/parser/parse_type.h +61 -0
  238. data/ext/pg_query/include/postgres/parser/parser.h +68 -0
  239. data/ext/pg_query/include/postgres/parser/parsetree.h +61 -0
  240. data/ext/pg_query/include/postgres/parser/scanner.h +152 -0
  241. data/ext/pg_query/include/postgres/parser/scansup.h +27 -0
  242. data/ext/pg_query/include/postgres/partitioning/partdefs.h +26 -0
  243. data/ext/pg_query/include/postgres/pg_config.h +985 -0
  244. data/ext/pg_query/include/postgres/pg_config_manual.h +385 -0
  245. data/ext/pg_query/include/postgres/pg_config_os.h +8 -0
  246. data/ext/pg_query/include/postgres/pg_getopt.h +56 -0
  247. data/ext/pg_query/include/postgres/pg_trace.h +17 -0
  248. data/ext/pg_query/include/postgres/pgstat.h +780 -0
  249. data/ext/pg_query/include/postgres/pgtime.h +94 -0
  250. data/ext/pg_query/include/postgres/pl_gram.h +385 -0
  251. data/ext/pg_query/include/postgres/pl_reserved_kwlist.h +52 -0
  252. data/ext/pg_query/include/postgres/pl_reserved_kwlist_d.h +114 -0
  253. data/ext/pg_query/include/postgres/pl_unreserved_kwlist.h +112 -0
  254. data/ext/pg_query/include/postgres/pl_unreserved_kwlist_d.h +246 -0
  255. data/ext/pg_query/include/postgres/plerrcodes.h +998 -0
  256. data/ext/pg_query/include/postgres/plpgsql.h +1342 -0
  257. data/ext/pg_query/include/postgres/port/atomics/arch-arm.h +32 -0
  258. data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +17 -0
  259. data/ext/pg_query/include/postgres/port/atomics/arch-ppc.h +256 -0
  260. data/ext/pg_query/include/postgres/port/atomics/arch-x86.h +254 -0
  261. data/ext/pg_query/include/postgres/port/atomics/fallback.h +170 -0
  262. data/ext/pg_query/include/postgres/port/atomics/generic-gcc.h +323 -0
  263. data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +119 -0
  264. data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +121 -0
  265. data/ext/pg_query/include/postgres/port/atomics/generic.h +437 -0
  266. data/ext/pg_query/include/postgres/port/atomics.h +606 -0
  267. data/ext/pg_query/include/postgres/port/pg_bitutils.h +421 -0
  268. data/ext/pg_query/include/postgres/port/pg_bswap.h +161 -0
  269. data/ext/pg_query/include/postgres/port/pg_crc32c.h +110 -0
  270. data/ext/pg_query/include/postgres/port/pg_iovec.h +117 -0
  271. data/ext/pg_query/include/postgres/port/simd.h +422 -0
  272. data/ext/pg_query/include/postgres/port/win32/arpa/inet.h +3 -0
  273. data/ext/pg_query/include/postgres/port/win32/dlfcn.h +1 -0
  274. data/ext/pg_query/include/postgres/port/win32/grp.h +1 -0
  275. data/ext/pg_query/include/postgres/port/win32/netdb.h +7 -0
  276. data/ext/pg_query/include/postgres/port/win32/netinet/in.h +3 -0
  277. data/ext/pg_query/include/postgres/port/win32/netinet/tcp.h +7 -0
  278. data/ext/pg_query/include/postgres/port/win32/pwd.h +3 -0
  279. data/ext/pg_query/include/postgres/port/win32/sys/resource.h +20 -0
  280. data/ext/pg_query/include/postgres/port/win32/sys/select.h +3 -0
  281. data/ext/pg_query/include/postgres/port/win32/sys/socket.h +34 -0
  282. data/ext/pg_query/include/postgres/port/win32/sys/un.h +17 -0
  283. data/ext/pg_query/include/postgres/port/win32/sys/wait.h +3 -0
  284. data/ext/pg_query/include/postgres/port/win32.h +59 -0
  285. data/ext/pg_query/include/postgres/port/win32_msvc/dirent.h +34 -0
  286. data/ext/pg_query/include/postgres/port/win32_msvc/sys/file.h +1 -0
  287. data/ext/pg_query/include/postgres/port/win32_msvc/sys/param.h +1 -0
  288. data/ext/pg_query/include/postgres/port/win32_msvc/sys/time.h +1 -0
  289. data/ext/pg_query/include/postgres/port/win32_msvc/unistd.h +9 -0
  290. data/ext/pg_query/include/postgres/port/win32_msvc/utime.h +3 -0
  291. data/ext/pg_query/include/postgres/port/win32_port.h +582 -0
  292. data/ext/pg_query/include/postgres/port.h +555 -0
  293. data/ext/pg_query/include/postgres/portability/instr_time.h +197 -0
  294. data/ext/pg_query/include/postgres/postgres.h +579 -0
  295. data/ext/pg_query/include/postgres/postgres_ext.h +73 -0
  296. data/ext/pg_query/include/postgres/postmaster/autovacuum.h +69 -0
  297. data/ext/pg_query/include/postgres/postmaster/bgworker.h +164 -0
  298. data/ext/pg_query/include/postgres/postmaster/bgworker_internals.h +60 -0
  299. data/ext/pg_query/include/postgres/postmaster/bgwriter.h +45 -0
  300. data/ext/pg_query/include/postgres/postmaster/interrupt.h +32 -0
  301. data/ext/pg_query/include/postgres/postmaster/pgarch.h +36 -0
  302. data/ext/pg_query/include/postgres/postmaster/postmaster.h +101 -0
  303. data/ext/pg_query/include/postgres/postmaster/startup.h +41 -0
  304. data/ext/pg_query/include/postgres/postmaster/syslogger.h +101 -0
  305. data/ext/pg_query/include/postgres/postmaster/walsummarizer.h +35 -0
  306. data/ext/pg_query/include/postgres/postmaster/walwriter.h +23 -0
  307. data/ext/pg_query/include/postgres/regex/regex.h +272 -0
  308. data/ext/pg_query/include/postgres/replication/logicallauncher.h +34 -0
  309. data/ext/pg_query/include/postgres/replication/logicalproto.h +274 -0
  310. data/ext/pg_query/include/postgres/replication/logicalworker.h +33 -0
  311. data/ext/pg_query/include/postgres/replication/origin.h +73 -0
  312. data/ext/pg_query/include/postgres/replication/reorderbuffer.h +734 -0
  313. data/ext/pg_query/include/postgres/replication/slot.h +289 -0
  314. data/ext/pg_query/include/postgres/replication/slotsync.h +38 -0
  315. data/ext/pg_query/include/postgres/replication/syncrep.h +109 -0
  316. data/ext/pg_query/include/postgres/replication/walreceiver.h +504 -0
  317. data/ext/pg_query/include/postgres/replication/walsender.h +76 -0
  318. data/ext/pg_query/include/postgres/rewrite/prs2lock.h +46 -0
  319. data/ext/pg_query/include/postgres/rewrite/rewriteHandler.h +41 -0
  320. data/ext/pg_query/include/postgres/rewrite/rewriteManip.h +96 -0
  321. data/ext/pg_query/include/postgres/rewrite/rewriteSupport.h +26 -0
  322. data/ext/pg_query/include/postgres/storage/block.h +108 -0
  323. data/ext/pg_query/include/postgres/storage/buf.h +46 -0
  324. data/ext/pg_query/include/postgres/storage/bufmgr.h +411 -0
  325. data/ext/pg_query/include/postgres/storage/bufpage.h +510 -0
  326. data/ext/pg_query/include/postgres/storage/condition_variable.h +73 -0
  327. data/ext/pg_query/include/postgres/storage/dsm.h +61 -0
  328. data/ext/pg_query/include/postgres/storage/dsm_impl.h +79 -0
  329. data/ext/pg_query/include/postgres/storage/fd.h +219 -0
  330. data/ext/pg_query/include/postgres/storage/fileset.h +40 -0
  331. data/ext/pg_query/include/postgres/storage/ipc.h +87 -0
  332. data/ext/pg_query/include/postgres/storage/item.h +19 -0
  333. data/ext/pg_query/include/postgres/storage/itemid.h +184 -0
  334. data/ext/pg_query/include/postgres/storage/itemptr.h +245 -0
  335. data/ext/pg_query/include/postgres/storage/large_object.h +100 -0
  336. data/ext/pg_query/include/postgres/storage/latch.h +196 -0
  337. data/ext/pg_query/include/postgres/storage/lmgr.h +126 -0
  338. data/ext/pg_query/include/postgres/storage/lock.h +624 -0
  339. data/ext/pg_query/include/postgres/storage/lockdefs.h +61 -0
  340. data/ext/pg_query/include/postgres/storage/lwlock.h +228 -0
  341. data/ext/pg_query/include/postgres/storage/lwlocknames.h +47 -0
  342. data/ext/pg_query/include/postgres/storage/off.h +57 -0
  343. data/ext/pg_query/include/postgres/storage/pg_sema.h +61 -0
  344. data/ext/pg_query/include/postgres/storage/pg_shmem.h +93 -0
  345. data/ext/pg_query/include/postgres/storage/pmsignal.h +105 -0
  346. data/ext/pg_query/include/postgres/storage/predicate.h +83 -0
  347. data/ext/pg_query/include/postgres/storage/proc.h +488 -0
  348. data/ext/pg_query/include/postgres/storage/procarray.h +103 -0
  349. data/ext/pg_query/include/postgres/storage/proclist_types.h +53 -0
  350. data/ext/pg_query/include/postgres/storage/procnumber.h +43 -0
  351. data/ext/pg_query/include/postgres/storage/procsignal.h +75 -0
  352. data/ext/pg_query/include/postgres/storage/read_stream.h +65 -0
  353. data/ext/pg_query/include/postgres/storage/relfilelocator.h +100 -0
  354. data/ext/pg_query/include/postgres/storage/s_lock.h +847 -0
  355. data/ext/pg_query/include/postgres/storage/sharedfileset.h +37 -0
  356. data/ext/pg_query/include/postgres/storage/shm_mq.h +86 -0
  357. data/ext/pg_query/include/postgres/storage/shm_toc.h +58 -0
  358. data/ext/pg_query/include/postgres/storage/shmem.h +59 -0
  359. data/ext/pg_query/include/postgres/storage/sinval.h +153 -0
  360. data/ext/pg_query/include/postgres/storage/smgr.h +130 -0
  361. data/ext/pg_query/include/postgres/storage/spin.h +77 -0
  362. data/ext/pg_query/include/postgres/storage/standby.h +109 -0
  363. data/ext/pg_query/include/postgres/storage/standbydefs.h +74 -0
  364. data/ext/pg_query/include/postgres/storage/sync.h +66 -0
  365. data/ext/pg_query/include/postgres/tcop/cmdtag.h +62 -0
  366. data/ext/pg_query/include/postgres/tcop/cmdtaglist.h +219 -0
  367. data/ext/pg_query/include/postgres/tcop/deparse_utility.h +108 -0
  368. data/ext/pg_query/include/postgres/tcop/dest.h +148 -0
  369. data/ext/pg_query/include/postgres/tcop/fastpath.h +20 -0
  370. data/ext/pg_query/include/postgres/tcop/pquery.h +51 -0
  371. data/ext/pg_query/include/postgres/tcop/tcopprot.h +98 -0
  372. data/ext/pg_query/include/postgres/tcop/utility.h +112 -0
  373. data/ext/pg_query/include/postgres/tsearch/ts_cache.h +96 -0
  374. data/ext/pg_query/include/postgres/utils/acl.h +290 -0
  375. data/ext/pg_query/include/postgres/utils/aclchk_internal.h +45 -0
  376. data/ext/pg_query/include/postgres/utils/array.h +481 -0
  377. data/ext/pg_query/include/postgres/utils/ascii.h +84 -0
  378. data/ext/pg_query/include/postgres/utils/backend_progress.h +46 -0
  379. data/ext/pg_query/include/postgres/utils/backend_status.h +340 -0
  380. data/ext/pg_query/include/postgres/utils/builtins.h +139 -0
  381. data/ext/pg_query/include/postgres/utils/bytea.h +28 -0
  382. data/ext/pg_query/include/postgres/utils/catcache.h +231 -0
  383. data/ext/pg_query/include/postgres/utils/date.h +118 -0
  384. data/ext/pg_query/include/postgres/utils/datetime.h +367 -0
  385. data/ext/pg_query/include/postgres/utils/datum.h +76 -0
  386. data/ext/pg_query/include/postgres/utils/dsa.h +166 -0
  387. data/ext/pg_query/include/postgres/utils/elog.h +540 -0
  388. data/ext/pg_query/include/postgres/utils/errcodes.h +352 -0
  389. data/ext/pg_query/include/postgres/utils/expandeddatum.h +170 -0
  390. data/ext/pg_query/include/postgres/utils/expandedrecord.h +241 -0
  391. data/ext/pg_query/include/postgres/utils/float.h +357 -0
  392. data/ext/pg_query/include/postgres/utils/fmgroids.h +3347 -0
  393. data/ext/pg_query/include/postgres/utils/fmgrprotos.h +2904 -0
  394. data/ext/pg_query/include/postgres/utils/fmgrtab.h +49 -0
  395. data/ext/pg_query/include/postgres/utils/guc.h +456 -0
  396. data/ext/pg_query/include/postgres/utils/guc_hooks.h +184 -0
  397. data/ext/pg_query/include/postgres/utils/guc_tables.h +323 -0
  398. data/ext/pg_query/include/postgres/utils/hsearch.h +153 -0
  399. data/ext/pg_query/include/postgres/utils/injection_point.h +44 -0
  400. data/ext/pg_query/include/postgres/utils/inval.h +68 -0
  401. data/ext/pg_query/include/postgres/utils/logtape.h +77 -0
  402. data/ext/pg_query/include/postgres/utils/lsyscache.h +215 -0
  403. data/ext/pg_query/include/postgres/utils/memdebug.h +82 -0
  404. data/ext/pg_query/include/postgres/utils/memutils.h +193 -0
  405. data/ext/pg_query/include/postgres/utils/memutils_internal.h +176 -0
  406. data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +253 -0
  407. data/ext/pg_query/include/postgres/utils/numeric.h +110 -0
  408. data/ext/pg_query/include/postgres/utils/palloc.h +151 -0
  409. data/ext/pg_query/include/postgres/utils/partcache.h +103 -0
  410. data/ext/pg_query/include/postgres/utils/pg_locale.h +136 -0
  411. data/ext/pg_query/include/postgres/utils/pgstat_internal.h +827 -0
  412. data/ext/pg_query/include/postgres/utils/plancache.h +238 -0
  413. data/ext/pg_query/include/postgres/utils/portal.h +252 -0
  414. data/ext/pg_query/include/postgres/utils/probes.h +114 -0
  415. data/ext/pg_query/include/postgres/utils/ps_status.h +47 -0
  416. data/ext/pg_query/include/postgres/utils/queryenvironment.h +74 -0
  417. data/ext/pg_query/include/postgres/utils/regproc.h +39 -0
  418. data/ext/pg_query/include/postgres/utils/rel.h +711 -0
  419. data/ext/pg_query/include/postgres/utils/relcache.h +155 -0
  420. data/ext/pg_query/include/postgres/utils/reltrigger.h +81 -0
  421. data/ext/pg_query/include/postgres/utils/resowner.h +167 -0
  422. data/ext/pg_query/include/postgres/utils/ruleutils.h +52 -0
  423. data/ext/pg_query/include/postgres/utils/sharedtuplestore.h +61 -0
  424. data/ext/pg_query/include/postgres/utils/snapmgr.h +130 -0
  425. data/ext/pg_query/include/postgres/utils/snapshot.h +219 -0
  426. data/ext/pg_query/include/postgres/utils/sortsupport.h +391 -0
  427. data/ext/pg_query/include/postgres/utils/syscache.h +136 -0
  428. data/ext/pg_query/include/postgres/utils/timeout.h +96 -0
  429. data/ext/pg_query/include/postgres/utils/timestamp.h +147 -0
  430. data/ext/pg_query/include/postgres/utils/tuplesort.h +472 -0
  431. data/ext/pg_query/include/postgres/utils/tuplestore.h +88 -0
  432. data/ext/pg_query/include/postgres/utils/typcache.h +210 -0
  433. data/ext/pg_query/include/postgres/utils/varlena.h +53 -0
  434. data/ext/pg_query/include/postgres/utils/wait_event.h +108 -0
  435. data/ext/pg_query/include/postgres/utils/wait_event_types.h +218 -0
  436. data/ext/pg_query/include/postgres/utils/xml.h +94 -0
  437. data/ext/pg_query/include/postgres/varatt.h +358 -0
  438. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +8077 -6217
  439. data/ext/pg_query/include/protobuf/pg_query.pb.h +132024 -88124
  440. data/ext/pg_query/pg_query.c +10 -1
  441. data/ext/pg_query/pg_query.pb-c.c +24028 -17173
  442. data/ext/pg_query/pg_query_deparse.c +1 -9902
  443. data/ext/pg_query/pg_query_fingerprint.c +42 -18
  444. data/ext/pg_query/pg_query_fingerprint.h +1 -1
  445. data/ext/pg_query/pg_query_internal.h +1 -1
  446. data/ext/pg_query/pg_query_json_plpgsql.c +1 -25
  447. data/ext/pg_query/pg_query_normalize.c +44 -3
  448. data/ext/pg_query/pg_query_outfuncs_json.c +62 -16
  449. data/ext/pg_query/pg_query_outfuncs_protobuf.c +73 -12
  450. data/ext/pg_query/pg_query_parse.c +47 -5
  451. data/ext/pg_query/pg_query_parse_plpgsql.c +19 -18
  452. data/ext/pg_query/pg_query_readfuncs_protobuf.c +45 -10
  453. data/ext/pg_query/pg_query_ruby.c +5 -0
  454. data/ext/pg_query/pg_query_scan.c +4 -3
  455. data/ext/pg_query/pg_query_split.c +6 -5
  456. data/ext/pg_query/postgres_deparse.c +11496 -0
  457. data/ext/pg_query/postgres_deparse.h +9 -0
  458. data/ext/pg_query/src_backend_catalog_namespace.c +262 -71
  459. data/ext/pg_query/src_backend_catalog_pg_proc.c +3 -2
  460. data/ext/pg_query/src_backend_commands_define.c +12 -3
  461. data/ext/pg_query/src_backend_nodes_bitmapset.c +142 -156
  462. data/ext/pg_query/src_backend_nodes_copyfuncs.c +100 -5881
  463. data/ext/pg_query/src_backend_nodes_equalfuncs.c +102 -3831
  464. data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
  465. data/ext/pg_query/src_backend_nodes_list.c +89 -18
  466. data/ext/pg_query/src_backend_nodes_makefuncs.c +138 -4
  467. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +433 -132
  468. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  469. data/ext/pg_query/src_backend_parser_gram.c +45255 -38885
  470. data/ext/pg_query/src_backend_parser_parser.c +53 -8
  471. data/ext/pg_query/src_backend_parser_scan.c +6999 -3438
  472. data/ext/pg_query/src_backend_parser_scansup.c +5 -28
  473. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  474. data/ext/pg_query/src_backend_tcop_postgres.c +156 -114
  475. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  476. data/ext/pg_query/src_backend_utils_adt_datum.c +14 -2
  477. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  478. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  479. data/ext/pg_query/src_backend_utils_adt_numutils.c +488 -0
  480. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +247 -34
  481. data/ext/pg_query/src_backend_utils_error_assert.c +17 -18
  482. data/ext/pg_query/src_backend_utils_error_elog.c +543 -343
  483. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +47 -18
  484. data/ext/pg_query/src_backend_utils_init_globals.c +22 -7
  485. data/ext/pg_query/src_backend_utils_mb_mbutils.c +84 -148
  486. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +502 -0
  487. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +166 -0
  488. data/ext/pg_query/src_backend_utils_mmgr_aset.c +708 -499
  489. data/ext/pg_query/src_backend_utils_mmgr_bump.c +728 -0
  490. data/ext/pg_query/src_backend_utils_mmgr_generation.c +1115 -0
  491. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +710 -218
  492. data/ext/pg_query/src_backend_utils_mmgr_slab.c +1079 -0
  493. data/ext/pg_query/src_common_encnames.c +46 -44
  494. data/ext/pg_query/src_common_hashfn.c +3 -3
  495. data/ext/pg_query/src_common_keywords.c +15 -2
  496. data/ext/pg_query/src_common_kwlist_d.h +602 -510
  497. data/ext/pg_query/src_common_kwlookup.c +1 -1
  498. data/ext/pg_query/src_common_psprintf.c +3 -3
  499. data/ext/pg_query/src_common_stringinfo.c +21 -4
  500. data/ext/pg_query/src_common_wchar.c +754 -178
  501. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +143 -24
  502. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -18
  503. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1295 -1255
  504. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  505. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  506. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +20 -2
  507. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +60 -60
  508. data/ext/pg_query/src_port_pg_bitutils.c +283 -54
  509. data/ext/pg_query/src_port_pgstrcasecmp.c +57 -1
  510. data/ext/pg_query/src_port_qsort.c +12 -224
  511. data/ext/pg_query/src_port_snprintf.c +56 -39
  512. data/ext/pg_query/src_port_strerror.c +9 -21
  513. data/ext/pg_query/src_port_strlcpy.c +79 -0
  514. data/lib/pg_query/filter_columns.rb +1 -1
  515. data/lib/pg_query/fingerprint.rb +10 -9
  516. data/lib/pg_query/node.rb +18 -13
  517. data/lib/pg_query/param_refs.rb +3 -3
  518. data/lib/pg_query/parse.rb +25 -15
  519. data/lib/pg_query/parse_error.rb +1 -0
  520. data/lib/pg_query/pg_query_pb.rb +181 -3038
  521. data/lib/pg_query/scan.rb +1 -0
  522. data/lib/pg_query/treewalker.rb +55 -8
  523. data/lib/pg_query/truncate.rb +19 -21
  524. data/lib/pg_query/version.rb +1 -1
  525. metadata +447 -436
  526. data/ext/pg_query/guc-file.c +0 -0
  527. data/ext/pg_query/include/access/amapi.h +0 -246
  528. data/ext/pg_query/include/access/attmap.h +0 -52
  529. data/ext/pg_query/include/access/attnum.h +0 -64
  530. data/ext/pg_query/include/access/clog.h +0 -61
  531. data/ext/pg_query/include/access/commit_ts.h +0 -77
  532. data/ext/pg_query/include/access/detoast.h +0 -92
  533. data/ext/pg_query/include/access/genam.h +0 -228
  534. data/ext/pg_query/include/access/gin.h +0 -78
  535. data/ext/pg_query/include/access/htup.h +0 -89
  536. data/ext/pg_query/include/access/htup_details.h +0 -819
  537. data/ext/pg_query/include/access/itup.h +0 -161
  538. data/ext/pg_query/include/access/parallel.h +0 -82
  539. data/ext/pg_query/include/access/printtup.h +0 -35
  540. data/ext/pg_query/include/access/relation.h +0 -28
  541. data/ext/pg_query/include/access/relscan.h +0 -176
  542. data/ext/pg_query/include/access/rmgr.h +0 -35
  543. data/ext/pg_query/include/access/rmgrlist.h +0 -49
  544. data/ext/pg_query/include/access/sdir.h +0 -58
  545. data/ext/pg_query/include/access/skey.h +0 -151
  546. data/ext/pg_query/include/access/stratnum.h +0 -83
  547. data/ext/pg_query/include/access/sysattr.h +0 -29
  548. data/ext/pg_query/include/access/table.h +0 -27
  549. data/ext/pg_query/include/access/tableam.h +0 -1825
  550. data/ext/pg_query/include/access/transam.h +0 -265
  551. data/ext/pg_query/include/access/tupconvert.h +0 -51
  552. data/ext/pg_query/include/access/tupdesc.h +0 -154
  553. data/ext/pg_query/include/access/tupmacs.h +0 -247
  554. data/ext/pg_query/include/access/twophase.h +0 -63
  555. data/ext/pg_query/include/access/xact.h +0 -469
  556. data/ext/pg_query/include/access/xlog.h +0 -398
  557. data/ext/pg_query/include/access/xlog_internal.h +0 -339
  558. data/ext/pg_query/include/access/xlogdefs.h +0 -109
  559. data/ext/pg_query/include/access/xloginsert.h +0 -64
  560. data/ext/pg_query/include/access/xlogreader.h +0 -337
  561. data/ext/pg_query/include/access/xlogrecord.h +0 -227
  562. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  563. data/ext/pg_query/include/c.h +0 -1334
  564. data/ext/pg_query/include/catalog/catalog.h +0 -42
  565. data/ext/pg_query/include/catalog/catversion.h +0 -58
  566. data/ext/pg_query/include/catalog/dependency.h +0 -277
  567. data/ext/pg_query/include/catalog/genbki.h +0 -64
  568. data/ext/pg_query/include/catalog/index.h +0 -199
  569. data/ext/pg_query/include/catalog/indexing.h +0 -366
  570. data/ext/pg_query/include/catalog/namespace.h +0 -188
  571. data/ext/pg_query/include/catalog/objectaccess.h +0 -197
  572. data/ext/pg_query/include/catalog/objectaddress.h +0 -84
  573. data/ext/pg_query/include/catalog/pg_aggregate.h +0 -176
  574. data/ext/pg_query/include/catalog/pg_aggregate_d.h +0 -77
  575. data/ext/pg_query/include/catalog/pg_am.h +0 -60
  576. data/ext/pg_query/include/catalog/pg_am_d.h +0 -45
  577. data/ext/pg_query/include/catalog/pg_attribute.h +0 -204
  578. data/ext/pg_query/include/catalog/pg_attribute_d.h +0 -59
  579. data/ext/pg_query/include/catalog/pg_authid.h +0 -58
  580. data/ext/pg_query/include/catalog/pg_authid_d.h +0 -49
  581. data/ext/pg_query/include/catalog/pg_class.h +0 -200
  582. data/ext/pg_query/include/catalog/pg_class_d.h +0 -103
  583. data/ext/pg_query/include/catalog/pg_collation.h +0 -73
  584. data/ext/pg_query/include/catalog/pg_collation_d.h +0 -45
  585. data/ext/pg_query/include/catalog/pg_constraint.h +0 -247
  586. data/ext/pg_query/include/catalog/pg_constraint_d.h +0 -67
  587. data/ext/pg_query/include/catalog/pg_control.h +0 -252
  588. data/ext/pg_query/include/catalog/pg_conversion.h +0 -72
  589. data/ext/pg_query/include/catalog/pg_conversion_d.h +0 -35
  590. data/ext/pg_query/include/catalog/pg_depend.h +0 -73
  591. data/ext/pg_query/include/catalog/pg_depend_d.h +0 -34
  592. data/ext/pg_query/include/catalog/pg_event_trigger.h +0 -51
  593. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +0 -34
  594. data/ext/pg_query/include/catalog/pg_index.h +0 -80
  595. data/ext/pg_query/include/catalog/pg_index_d.h +0 -56
  596. data/ext/pg_query/include/catalog/pg_language.h +0 -67
  597. data/ext/pg_query/include/catalog/pg_language_d.h +0 -39
  598. data/ext/pg_query/include/catalog/pg_namespace.h +0 -59
  599. data/ext/pg_query/include/catalog/pg_namespace_d.h +0 -34
  600. data/ext/pg_query/include/catalog/pg_opclass.h +0 -85
  601. data/ext/pg_query/include/catalog/pg_opclass_d.h +0 -49
  602. data/ext/pg_query/include/catalog/pg_operator.h +0 -104
  603. data/ext/pg_query/include/catalog/pg_operator_d.h +0 -106
  604. data/ext/pg_query/include/catalog/pg_opfamily.h +0 -60
  605. data/ext/pg_query/include/catalog/pg_opfamily_d.h +0 -47
  606. data/ext/pg_query/include/catalog/pg_partitioned_table.h +0 -63
  607. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +0 -35
  608. data/ext/pg_query/include/catalog/pg_proc.h +0 -211
  609. data/ext/pg_query/include/catalog/pg_proc_d.h +0 -99
  610. data/ext/pg_query/include/catalog/pg_publication.h +0 -118
  611. data/ext/pg_query/include/catalog/pg_publication_d.h +0 -36
  612. data/ext/pg_query/include/catalog/pg_replication_origin.h +0 -57
  613. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +0 -29
  614. data/ext/pg_query/include/catalog/pg_statistic.h +0 -275
  615. data/ext/pg_query/include/catalog/pg_statistic_d.h +0 -194
  616. data/ext/pg_query/include/catalog/pg_statistic_ext.h +0 -74
  617. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +0 -40
  618. data/ext/pg_query/include/catalog/pg_transform.h +0 -45
  619. data/ext/pg_query/include/catalog/pg_transform_d.h +0 -32
  620. data/ext/pg_query/include/catalog/pg_trigger.h +0 -137
  621. data/ext/pg_query/include/catalog/pg_trigger_d.h +0 -106
  622. data/ext/pg_query/include/catalog/pg_ts_config.h +0 -50
  623. data/ext/pg_query/include/catalog/pg_ts_config_d.h +0 -32
  624. data/ext/pg_query/include/catalog/pg_ts_dict.h +0 -54
  625. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +0 -33
  626. data/ext/pg_query/include/catalog/pg_ts_parser.h +0 -57
  627. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +0 -35
  628. data/ext/pg_query/include/catalog/pg_ts_template.h +0 -48
  629. data/ext/pg_query/include/catalog/pg_ts_template_d.h +0 -32
  630. data/ext/pg_query/include/catalog/pg_type.h +0 -373
  631. data/ext/pg_query/include/catalog/pg_type_d.h +0 -285
  632. data/ext/pg_query/include/catalog/storage.h +0 -48
  633. data/ext/pg_query/include/commands/async.h +0 -54
  634. data/ext/pg_query/include/commands/dbcommands.h +0 -35
  635. data/ext/pg_query/include/commands/defrem.h +0 -173
  636. data/ext/pg_query/include/commands/event_trigger.h +0 -88
  637. data/ext/pg_query/include/commands/explain.h +0 -127
  638. data/ext/pg_query/include/commands/prepare.h +0 -61
  639. data/ext/pg_query/include/commands/tablespace.h +0 -69
  640. data/ext/pg_query/include/commands/trigger.h +0 -285
  641. data/ext/pg_query/include/commands/user.h +0 -37
  642. data/ext/pg_query/include/commands/vacuum.h +0 -293
  643. data/ext/pg_query/include/commands/variable.h +0 -38
  644. data/ext/pg_query/include/common/file_perm.h +0 -56
  645. data/ext/pg_query/include/common/hashfn.h +0 -104
  646. data/ext/pg_query/include/common/ip.h +0 -37
  647. data/ext/pg_query/include/common/keywords.h +0 -33
  648. data/ext/pg_query/include/common/kwlookup.h +0 -44
  649. data/ext/pg_query/include/common/relpath.h +0 -90
  650. data/ext/pg_query/include/common/string.h +0 -19
  651. data/ext/pg_query/include/common/unicode_combining_table.h +0 -196
  652. data/ext/pg_query/include/datatype/timestamp.h +0 -197
  653. data/ext/pg_query/include/executor/execdesc.h +0 -70
  654. data/ext/pg_query/include/executor/executor.h +0 -620
  655. data/ext/pg_query/include/executor/functions.h +0 -41
  656. data/ext/pg_query/include/executor/instrument.h +0 -101
  657. data/ext/pg_query/include/executor/spi.h +0 -175
  658. data/ext/pg_query/include/executor/tablefunc.h +0 -67
  659. data/ext/pg_query/include/executor/tuptable.h +0 -487
  660. data/ext/pg_query/include/fmgr.h +0 -775
  661. data/ext/pg_query/include/funcapi.h +0 -348
  662. data/ext/pg_query/include/getaddrinfo.h +0 -162
  663. data/ext/pg_query/include/jit/jit.h +0 -105
  664. data/ext/pg_query/include/kwlist_d.h +0 -1072
  665. data/ext/pg_query/include/lib/ilist.h +0 -727
  666. data/ext/pg_query/include/lib/pairingheap.h +0 -102
  667. data/ext/pg_query/include/lib/simplehash.h +0 -1059
  668. data/ext/pg_query/include/lib/stringinfo.h +0 -161
  669. data/ext/pg_query/include/libpq/auth.h +0 -29
  670. data/ext/pg_query/include/libpq/crypt.h +0 -46
  671. data/ext/pg_query/include/libpq/hba.h +0 -140
  672. data/ext/pg_query/include/libpq/libpq-be.h +0 -326
  673. data/ext/pg_query/include/libpq/libpq.h +0 -134
  674. data/ext/pg_query/include/libpq/pqcomm.h +0 -208
  675. data/ext/pg_query/include/libpq/pqformat.h +0 -210
  676. data/ext/pg_query/include/libpq/pqsignal.h +0 -42
  677. data/ext/pg_query/include/mb/pg_wchar.h +0 -673
  678. data/ext/pg_query/include/mb/stringinfo_mb.h +0 -24
  679. data/ext/pg_query/include/miscadmin.h +0 -489
  680. data/ext/pg_query/include/nodes/bitmapset.h +0 -122
  681. data/ext/pg_query/include/nodes/execnodes.h +0 -2523
  682. data/ext/pg_query/include/nodes/extensible.h +0 -160
  683. data/ext/pg_query/include/nodes/lockoptions.h +0 -61
  684. data/ext/pg_query/include/nodes/makefuncs.h +0 -108
  685. data/ext/pg_query/include/nodes/memnodes.h +0 -108
  686. data/ext/pg_query/include/nodes/nodeFuncs.h +0 -162
  687. data/ext/pg_query/include/nodes/nodes.h +0 -842
  688. data/ext/pg_query/include/nodes/params.h +0 -170
  689. data/ext/pg_query/include/nodes/parsenodes.h +0 -3580
  690. data/ext/pg_query/include/nodes/pathnodes.h +0 -2557
  691. data/ext/pg_query/include/nodes/pg_list.h +0 -606
  692. data/ext/pg_query/include/nodes/plannodes.h +0 -1266
  693. data/ext/pg_query/include/nodes/primnodes.h +0 -1541
  694. data/ext/pg_query/include/nodes/print.h +0 -34
  695. data/ext/pg_query/include/nodes/tidbitmap.h +0 -75
  696. data/ext/pg_query/include/nodes/value.h +0 -61
  697. data/ext/pg_query/include/optimizer/cost.h +0 -206
  698. data/ext/pg_query/include/optimizer/geqo.h +0 -88
  699. data/ext/pg_query/include/optimizer/geqo_gene.h +0 -45
  700. data/ext/pg_query/include/optimizer/optimizer.h +0 -194
  701. data/ext/pg_query/include/optimizer/paths.h +0 -257
  702. data/ext/pg_query/include/optimizer/planmain.h +0 -119
  703. data/ext/pg_query/include/parser/analyze.h +0 -49
  704. data/ext/pg_query/include/parser/gram.h +0 -1067
  705. data/ext/pg_query/include/parser/gramparse.h +0 -75
  706. data/ext/pg_query/include/parser/kwlist.h +0 -477
  707. data/ext/pg_query/include/parser/parse_agg.h +0 -68
  708. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  709. data/ext/pg_query/include/parser/parse_coerce.h +0 -98
  710. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  711. data/ext/pg_query/include/parser/parse_expr.h +0 -26
  712. data/ext/pg_query/include/parser/parse_func.h +0 -73
  713. data/ext/pg_query/include/parser/parse_node.h +0 -327
  714. data/ext/pg_query/include/parser/parse_oper.h +0 -67
  715. data/ext/pg_query/include/parser/parse_relation.h +0 -123
  716. data/ext/pg_query/include/parser/parse_target.h +0 -46
  717. data/ext/pg_query/include/parser/parse_type.h +0 -60
  718. data/ext/pg_query/include/parser/parser.h +0 -41
  719. data/ext/pg_query/include/parser/parsetree.h +0 -61
  720. data/ext/pg_query/include/parser/scanner.h +0 -152
  721. data/ext/pg_query/include/parser/scansup.h +0 -30
  722. data/ext/pg_query/include/partitioning/partdefs.h +0 -26
  723. data/ext/pg_query/include/pg_config.h +0 -995
  724. data/ext/pg_query/include/pg_config_manual.h +0 -357
  725. data/ext/pg_query/include/pg_config_os.h +0 -8
  726. data/ext/pg_query/include/pg_getopt.h +0 -56
  727. data/ext/pg_query/include/pg_trace.h +0 -17
  728. data/ext/pg_query/include/pgstat.h +0 -1488
  729. data/ext/pg_query/include/pgtime.h +0 -84
  730. data/ext/pg_query/include/pl_gram.h +0 -385
  731. data/ext/pg_query/include/pl_reserved_kwlist.h +0 -52
  732. data/ext/pg_query/include/pl_reserved_kwlist_d.h +0 -114
  733. data/ext/pg_query/include/pl_unreserved_kwlist.h +0 -112
  734. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +0 -246
  735. data/ext/pg_query/include/plerrcodes.h +0 -990
  736. data/ext/pg_query/include/plpgsql.h +0 -1347
  737. data/ext/pg_query/include/port/atomics/arch-arm.h +0 -26
  738. data/ext/pg_query/include/port/atomics/arch-ppc.h +0 -254
  739. data/ext/pg_query/include/port/atomics/arch-x86.h +0 -252
  740. data/ext/pg_query/include/port/atomics/fallback.h +0 -170
  741. data/ext/pg_query/include/port/atomics/generic-gcc.h +0 -286
  742. data/ext/pg_query/include/port/atomics/generic.h +0 -401
  743. data/ext/pg_query/include/port/atomics.h +0 -524
  744. data/ext/pg_query/include/port/pg_bitutils.h +0 -272
  745. data/ext/pg_query/include/port/pg_bswap.h +0 -161
  746. data/ext/pg_query/include/port/pg_crc32c.h +0 -101
  747. data/ext/pg_query/include/port.h +0 -528
  748. data/ext/pg_query/include/portability/instr_time.h +0 -256
  749. data/ext/pg_query/include/postgres.h +0 -764
  750. data/ext/pg_query/include/postgres_ext.h +0 -74
  751. data/ext/pg_query/include/postmaster/autovacuum.h +0 -83
  752. data/ext/pg_query/include/postmaster/bgworker.h +0 -161
  753. data/ext/pg_query/include/postmaster/bgworker_internals.h +0 -64
  754. data/ext/pg_query/include/postmaster/bgwriter.h +0 -45
  755. data/ext/pg_query/include/postmaster/fork_process.h +0 -17
  756. data/ext/pg_query/include/postmaster/interrupt.h +0 -32
  757. data/ext/pg_query/include/postmaster/pgarch.h +0 -39
  758. data/ext/pg_query/include/postmaster/postmaster.h +0 -77
  759. data/ext/pg_query/include/postmaster/syslogger.h +0 -98
  760. data/ext/pg_query/include/postmaster/walwriter.h +0 -21
  761. data/ext/pg_query/include/regex/regex.h +0 -184
  762. data/ext/pg_query/include/replication/logicallauncher.h +0 -31
  763. data/ext/pg_query/include/replication/logicalproto.h +0 -110
  764. data/ext/pg_query/include/replication/logicalworker.h +0 -19
  765. data/ext/pg_query/include/replication/origin.h +0 -73
  766. data/ext/pg_query/include/replication/reorderbuffer.h +0 -468
  767. data/ext/pg_query/include/replication/slot.h +0 -219
  768. data/ext/pg_query/include/replication/syncrep.h +0 -115
  769. data/ext/pg_query/include/replication/walreceiver.h +0 -340
  770. data/ext/pg_query/include/replication/walsender.h +0 -74
  771. data/ext/pg_query/include/rewrite/prs2lock.h +0 -46
  772. data/ext/pg_query/include/rewrite/rewriteHandler.h +0 -40
  773. data/ext/pg_query/include/rewrite/rewriteManip.h +0 -87
  774. data/ext/pg_query/include/rewrite/rewriteSupport.h +0 -26
  775. data/ext/pg_query/include/storage/backendid.h +0 -37
  776. data/ext/pg_query/include/storage/block.h +0 -121
  777. data/ext/pg_query/include/storage/buf.h +0 -46
  778. data/ext/pg_query/include/storage/bufmgr.h +0 -292
  779. data/ext/pg_query/include/storage/bufpage.h +0 -459
  780. data/ext/pg_query/include/storage/condition_variable.h +0 -62
  781. data/ext/pg_query/include/storage/dsm.h +0 -61
  782. data/ext/pg_query/include/storage/dsm_impl.h +0 -75
  783. data/ext/pg_query/include/storage/fd.h +0 -168
  784. data/ext/pg_query/include/storage/ipc.h +0 -81
  785. data/ext/pg_query/include/storage/item.h +0 -19
  786. data/ext/pg_query/include/storage/itemid.h +0 -184
  787. data/ext/pg_query/include/storage/itemptr.h +0 -206
  788. data/ext/pg_query/include/storage/large_object.h +0 -100
  789. data/ext/pg_query/include/storage/latch.h +0 -190
  790. data/ext/pg_query/include/storage/lmgr.h +0 -114
  791. data/ext/pg_query/include/storage/lock.h +0 -613
  792. data/ext/pg_query/include/storage/lockdefs.h +0 -59
  793. data/ext/pg_query/include/storage/lwlock.h +0 -233
  794. data/ext/pg_query/include/storage/lwlocknames.h +0 -51
  795. data/ext/pg_query/include/storage/off.h +0 -57
  796. data/ext/pg_query/include/storage/pg_sema.h +0 -61
  797. data/ext/pg_query/include/storage/pg_shmem.h +0 -90
  798. data/ext/pg_query/include/storage/pmsignal.h +0 -94
  799. data/ext/pg_query/include/storage/predicate.h +0 -87
  800. data/ext/pg_query/include/storage/proc.h +0 -347
  801. data/ext/pg_query/include/storage/proclist_types.h +0 -51
  802. data/ext/pg_query/include/storage/procsignal.h +0 -75
  803. data/ext/pg_query/include/storage/relfilenode.h +0 -99
  804. data/ext/pg_query/include/storage/s_lock.h +0 -1071
  805. data/ext/pg_query/include/storage/sharedfileset.h +0 -45
  806. data/ext/pg_query/include/storage/shm_mq.h +0 -85
  807. data/ext/pg_query/include/storage/shm_toc.h +0 -58
  808. data/ext/pg_query/include/storage/shmem.h +0 -81
  809. data/ext/pg_query/include/storage/sinval.h +0 -153
  810. data/ext/pg_query/include/storage/sinvaladt.h +0 -43
  811. data/ext/pg_query/include/storage/smgr.h +0 -109
  812. data/ext/pg_query/include/storage/spin.h +0 -77
  813. data/ext/pg_query/include/storage/standby.h +0 -91
  814. data/ext/pg_query/include/storage/standbydefs.h +0 -74
  815. data/ext/pg_query/include/storage/sync.h +0 -62
  816. data/ext/pg_query/include/tcop/cmdtag.h +0 -58
  817. data/ext/pg_query/include/tcop/cmdtaglist.h +0 -217
  818. data/ext/pg_query/include/tcop/deparse_utility.h +0 -108
  819. data/ext/pg_query/include/tcop/dest.h +0 -149
  820. data/ext/pg_query/include/tcop/fastpath.h +0 -21
  821. data/ext/pg_query/include/tcop/pquery.h +0 -51
  822. data/ext/pg_query/include/tcop/tcopprot.h +0 -89
  823. data/ext/pg_query/include/tcop/utility.h +0 -108
  824. data/ext/pg_query/include/tsearch/ts_cache.h +0 -98
  825. data/ext/pg_query/include/utils/acl.h +0 -312
  826. data/ext/pg_query/include/utils/aclchk_internal.h +0 -45
  827. data/ext/pg_query/include/utils/array.h +0 -459
  828. data/ext/pg_query/include/utils/builtins.h +0 -128
  829. data/ext/pg_query/include/utils/bytea.h +0 -27
  830. data/ext/pg_query/include/utils/catcache.h +0 -231
  831. data/ext/pg_query/include/utils/date.h +0 -90
  832. data/ext/pg_query/include/utils/datetime.h +0 -343
  833. data/ext/pg_query/include/utils/datum.h +0 -68
  834. data/ext/pg_query/include/utils/dsa.h +0 -123
  835. data/ext/pg_query/include/utils/dynahash.h +0 -19
  836. data/ext/pg_query/include/utils/elog.h +0 -439
  837. data/ext/pg_query/include/utils/errcodes.h +0 -352
  838. data/ext/pg_query/include/utils/expandeddatum.h +0 -159
  839. data/ext/pg_query/include/utils/expandedrecord.h +0 -231
  840. data/ext/pg_query/include/utils/float.h +0 -356
  841. data/ext/pg_query/include/utils/fmgroids.h +0 -2657
  842. data/ext/pg_query/include/utils/fmgrprotos.h +0 -2646
  843. data/ext/pg_query/include/utils/fmgrtab.h +0 -48
  844. data/ext/pg_query/include/utils/guc.h +0 -443
  845. data/ext/pg_query/include/utils/guc_tables.h +0 -272
  846. data/ext/pg_query/include/utils/hsearch.h +0 -149
  847. data/ext/pg_query/include/utils/inval.h +0 -65
  848. data/ext/pg_query/include/utils/lsyscache.h +0 -198
  849. data/ext/pg_query/include/utils/memdebug.h +0 -82
  850. data/ext/pg_query/include/utils/memutils.h +0 -225
  851. data/ext/pg_query/include/utils/numeric.h +0 -76
  852. data/ext/pg_query/include/utils/palloc.h +0 -136
  853. data/ext/pg_query/include/utils/partcache.h +0 -102
  854. data/ext/pg_query/include/utils/pg_locale.h +0 -119
  855. data/ext/pg_query/include/utils/pg_lsn.h +0 -29
  856. data/ext/pg_query/include/utils/pidfile.h +0 -56
  857. data/ext/pg_query/include/utils/plancache.h +0 -235
  858. data/ext/pg_query/include/utils/portal.h +0 -254
  859. data/ext/pg_query/include/utils/probes.h +0 -114
  860. data/ext/pg_query/include/utils/ps_status.h +0 -25
  861. data/ext/pg_query/include/utils/queryenvironment.h +0 -74
  862. data/ext/pg_query/include/utils/regproc.h +0 -28
  863. data/ext/pg_query/include/utils/rel.h +0 -643
  864. data/ext/pg_query/include/utils/relcache.h +0 -150
  865. data/ext/pg_query/include/utils/reltrigger.h +0 -81
  866. data/ext/pg_query/include/utils/resowner.h +0 -86
  867. data/ext/pg_query/include/utils/rls.h +0 -50
  868. data/ext/pg_query/include/utils/ruleutils.h +0 -44
  869. data/ext/pg_query/include/utils/sharedtuplestore.h +0 -61
  870. data/ext/pg_query/include/utils/snapmgr.h +0 -159
  871. data/ext/pg_query/include/utils/snapshot.h +0 -206
  872. data/ext/pg_query/include/utils/sortsupport.h +0 -276
  873. data/ext/pg_query/include/utils/syscache.h +0 -219
  874. data/ext/pg_query/include/utils/timeout.h +0 -88
  875. data/ext/pg_query/include/utils/timestamp.h +0 -116
  876. data/ext/pg_query/include/utils/tuplesort.h +0 -277
  877. data/ext/pg_query/include/utils/tuplestore.h +0 -91
  878. data/ext/pg_query/include/utils/typcache.h +0 -202
  879. data/ext/pg_query/include/utils/tzparser.h +0 -39
  880. data/ext/pg_query/include/utils/varlena.h +0 -39
  881. data/ext/pg_query/include/utils/xml.h +0 -84
  882. data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -2
  883. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -659
  884. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  885. data/ext/pg_query/src_backend_postmaster_postmaster.c +0 -2230
  886. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -370
  887. data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1086
  888. data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1832
  889. data/ext/pg_query/src_common_string.c +0 -86
  890. data/ext/pg_query/src_port_erand48.c +0 -127
  891. data/ext/pg_query/src_port_pgsleep.c +0 -69
  892. data/ext/pg_query/src_port_random.c +0 -31
  893. data/ext/pg_query/src_port_strnlen.c +0 -39
  894. /data/ext/pg_query/{pg_query_ruby.sym → ext_symbols.sym} +0 -0
  895. /data/ext/pg_query/include/{pg_config_ext.h → postgres/pg_config_ext.h} +0 -0
@@ -2,24 +2,27 @@
2
2
  * Symbols referenced in this file:
3
3
  * - pg_encoding_max_length
4
4
  * - pg_wchar_table
5
- * - pg_utf_mblen
5
+ * - pg_utf_mblen_private
6
6
  * - pg_mule_mblen
7
7
  * - pg_ascii2wchar_with_len
8
8
  * - pg_wchar2single_with_len
9
9
  * - pg_ascii_mblen
10
10
  * - pg_ascii_dsplen
11
- * - pg_ascii_verifier
11
+ * - pg_ascii_verifychar
12
+ * - pg_ascii_verifystr
12
13
  * - pg_eucjp2wchar_with_len
13
14
  * - pg_euc2wchar_with_len
14
15
  * - pg_wchar2euc_with_len
15
16
  * - pg_eucjp_mblen
16
17
  * - pg_euc_mblen
17
18
  * - pg_eucjp_dsplen
18
- * - pg_eucjp_verifier
19
+ * - pg_eucjp_verifychar
20
+ * - pg_eucjp_verifystr
19
21
  * - pg_euccn2wchar_with_len
20
22
  * - pg_euccn_mblen
21
23
  * - pg_euccn_dsplen
22
- * - pg_euckr_verifier
24
+ * - pg_euckr_verifychar
25
+ * - pg_euckr_verifystr
23
26
  * - pg_euckr2wchar_with_len
24
27
  * - pg_euckr_mblen
25
28
  * - pg_euckr_dsplen
@@ -27,42 +30,52 @@
27
30
  * - pg_euctw2wchar_with_len
28
31
  * - pg_euctw_mblen
29
32
  * - pg_euctw_dsplen
30
- * - pg_euctw_verifier
33
+ * - pg_euctw_verifychar
34
+ * - pg_euctw_verifystr
31
35
  * - pg_utf2wchar_with_len
32
36
  * - pg_wchar2utf_with_len
33
- * - unicode_to_utf8
34
37
  * - pg_utf_dsplen
35
- * - utf8_to_unicode
36
38
  * - ucs_wcwidth
37
39
  * - mbbisearch
38
- * - pg_utf8_verifier
40
+ * - pg_utf8_verifychar
39
41
  * - pg_utf8_islegal
42
+ * - pg_utf8_verifystr
43
+ * - utf8_advance
44
+ * - Utf8Transition
40
45
  * - pg_mule2wchar_with_len
41
46
  * - pg_wchar2mule_with_len
42
47
  * - pg_mule_dsplen
43
- * - pg_mule_verifier
48
+ * - pg_mule_verifychar
49
+ * - pg_mule_verifystr
44
50
  * - pg_latin12wchar_with_len
45
51
  * - pg_latin1_mblen
46
52
  * - pg_latin1_dsplen
47
- * - pg_latin1_verifier
53
+ * - pg_latin1_verifychar
54
+ * - pg_latin1_verifystr
48
55
  * - pg_sjis_mblen
49
56
  * - pg_sjis_dsplen
50
- * - pg_sjis_verifier
57
+ * - pg_sjis_verifychar
58
+ * - pg_sjis_verifystr
51
59
  * - pg_big5_mblen
52
60
  * - pg_big5_dsplen
53
- * - pg_big5_verifier
61
+ * - pg_big5_verifychar
62
+ * - pg_big5_verifystr
54
63
  * - pg_gbk_mblen
55
64
  * - pg_gbk_dsplen
56
- * - pg_gbk_verifier
65
+ * - pg_gbk_verifychar
66
+ * - pg_gbk_verifystr
57
67
  * - pg_uhc_mblen
58
68
  * - pg_uhc_dsplen
59
- * - pg_uhc_verifier
69
+ * - pg_uhc_verifychar
70
+ * - pg_uhc_verifystr
60
71
  * - pg_gb18030_mblen
61
72
  * - pg_gb18030_dsplen
62
- * - pg_gb18030_verifier
73
+ * - pg_gb18030_verifychar
74
+ * - pg_gb18030_verifystr
63
75
  * - pg_johab_mblen
64
76
  * - pg_johab_dsplen
65
- * - pg_johab_verifier
77
+ * - pg_johab_verifychar
78
+ * - pg_johab_verifystr
66
79
  * - pg_encoding_mblen
67
80
  *--------------------------------------------------------------------
68
81
  */
@@ -72,7 +85,7 @@
72
85
  * wchar.c
73
86
  * Functions for working with multibyte characters in various encodings.
74
87
  *
75
- * Portions Copyright (c) 1998-2020, PostgreSQL Global Development Group
88
+ * Portions Copyright (c) 1998-2024, PostgreSQL Global Development Group
76
89
  *
77
90
  * IDENTIFICATION
78
91
  * src/common/wchar.c
@@ -82,15 +95,35 @@
82
95
  #include "c.h"
83
96
 
84
97
  #include "mb/pg_wchar.h"
98
+ #include "utils/ascii.h"
99
+
100
+
101
+ /*
102
+ * In today's multibyte encodings other than UTF8, this two-byte sequence
103
+ * ensures pg_encoding_mblen() == 2 && pg_encoding_verifymbstr() == 0.
104
+ *
105
+ * For historical reasons, several verifychar implementations opt to reject
106
+ * this pair specifically. Byte pair range constraints, in encoding
107
+ * originator documentation, always excluded this pair. No core conversion
108
+ * could translate it. However, longstanding verifychar implementations
109
+ * accepted any non-NUL byte. big5_to_euc_tw and big5_to_mic even translate
110
+ * pairs not valid per encoding originator documentation. To avoid tightening
111
+ * core or non-core conversions in a security patch, we sought this one pair.
112
+ *
113
+ * PQescapeString() historically used spaces for BYTE1; many other values
114
+ * could suffice for BYTE1.
115
+ */
116
+ #define NONUTF8_INVALID_BYTE0 (0x8d)
117
+ #define NONUTF8_INVALID_BYTE1 (' ')
85
118
 
86
119
 
87
120
  /*
88
121
  * Operations on multi-byte encodings are driven by a table of helper
89
122
  * functions.
90
123
  *
91
- * To add an encoding support, define mblen(), dsplen() and verifier() for
92
- * the encoding. For server-encodings, also define mb2wchar() and wchar2mb()
93
- * conversion functions.
124
+ * To add an encoding support, define mblen(), dsplen(), verifychar() and
125
+ * verifystr() for the encoding. For server-encodings, also define mb2wchar()
126
+ * and wchar2mb() conversion functions.
94
127
  *
95
128
  * These functions generally assume that their input is validly formed.
96
129
  * The "verifier" functions, further down in the file, have to be more
@@ -544,39 +577,6 @@ pg_utf2wchar_with_len(const unsigned char *from, pg_wchar *to, int len)
544
577
  }
545
578
 
546
579
 
547
- /*
548
- * Map a Unicode code point to UTF-8. utf8string must have 4 bytes of
549
- * space allocated.
550
- */
551
- unsigned char *
552
- unicode_to_utf8(pg_wchar c, unsigned char *utf8string)
553
- {
554
- if (c <= 0x7F)
555
- {
556
- utf8string[0] = c;
557
- }
558
- else if (c <= 0x7FF)
559
- {
560
- utf8string[0] = 0xC0 | ((c >> 6) & 0x1F);
561
- utf8string[1] = 0x80 | (c & 0x3F);
562
- }
563
- else if (c <= 0xFFFF)
564
- {
565
- utf8string[0] = 0xE0 | ((c >> 12) & 0x0F);
566
- utf8string[1] = 0x80 | ((c >> 6) & 0x3F);
567
- utf8string[2] = 0x80 | (c & 0x3F);
568
- }
569
- else
570
- {
571
- utf8string[0] = 0xF0 | ((c >> 18) & 0x07);
572
- utf8string[1] = 0x80 | ((c >> 12) & 0x3F);
573
- utf8string[2] = 0x80 | ((c >> 6) & 0x3F);
574
- utf8string[3] = 0x80 | (c & 0x3F);
575
- }
576
-
577
- return utf8string;
578
- }
579
-
580
580
  /*
581
581
  * Trivial conversion from pg_wchar to UTF-8.
582
582
  * caller should allocate enough space for "to"
@@ -652,8 +652,8 @@ pg_utf_mblen(const unsigned char *s)
652
652
 
653
653
  struct mbinterval
654
654
  {
655
- unsigned short first;
656
- unsigned short last;
655
+ unsigned int first;
656
+ unsigned int last;
657
657
  };
658
658
 
659
659
  /* auxiliary function for binary search in interval table */
@@ -689,15 +689,9 @@ mbbisearch(pg_wchar ucs, const struct mbinterval *table, int max)
689
689
  * value of -1.
690
690
  *
691
691
  * - Non-spacing and enclosing combining characters (general
692
- * category code Mn or Me in the Unicode database) have a
692
+ * category code Mn, Me or Cf in the Unicode database) have a
693
693
  * column width of 0.
694
694
  *
695
- * - Other format characters (general category code Cf in the Unicode
696
- * database) and ZERO WIDTH SPACE (U+200B) have a column width of 0.
697
- *
698
- * - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF)
699
- * have a column width of 0.
700
- *
701
695
  * - Spacing characters in the East Asian Wide (W) or East Asian
702
696
  * FullWidth (F) category as defined in Unicode Technical
703
697
  * Report #11 have a column width of 2.
@@ -713,7 +707,8 @@ mbbisearch(pg_wchar ucs, const struct mbinterval *table, int max)
713
707
  static int
714
708
  ucs_wcwidth(pg_wchar ucs)
715
709
  {
716
- #include "common/unicode_combining_table.h"
710
+ #include "common/unicode_nonspacing_table.h"
711
+ #include "common/unicode_east_asian_fw_table.h"
717
712
 
718
713
  /* test for 8-bit control characters */
719
714
  if (ucs == 0)
@@ -722,55 +717,25 @@ ucs_wcwidth(pg_wchar ucs)
722
717
  if (ucs < 0x20 || (ucs >= 0x7f && ucs < 0xa0) || ucs > 0x0010ffff)
723
718
  return -1;
724
719
 
725
- /* binary search in table of non-spacing characters */
726
- if (mbbisearch(ucs, combining,
727
- sizeof(combining) / sizeof(struct mbinterval) - 1))
728
- return 0;
729
-
730
720
  /*
731
- * if we arrive here, ucs is not a combining or C0/C1 control character
721
+ * binary search in table of non-spacing characters
722
+ *
723
+ * XXX: In the official Unicode sources, it is possible for a character to
724
+ * be described as both non-spacing and wide at the same time. As of
725
+ * Unicode 13.0, treating the non-spacing property as the determining
726
+ * factor for display width leads to the correct behavior, so do that
727
+ * search first.
732
728
  */
729
+ if (mbbisearch(ucs, nonspacing,
730
+ sizeof(nonspacing) / sizeof(struct mbinterval) - 1))
731
+ return 0;
733
732
 
734
- return 1 +
735
- (ucs >= 0x1100 &&
736
- (ucs <= 0x115f || /* Hangul Jamo init. consonants */
737
- (ucs >= 0x2e80 && ucs <= 0xa4cf && (ucs & ~0x0011) != 0x300a &&
738
- ucs != 0x303f) || /* CJK ... Yi */
739
- (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */
740
- (ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility
741
- * Ideographs */
742
- (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */
743
- (ucs >= 0xff00 && ucs <= 0xff5f) || /* Fullwidth Forms */
744
- (ucs >= 0xffe0 && ucs <= 0xffe6) ||
745
- (ucs >= 0x20000 && ucs <= 0x2ffff)));
746
- }
733
+ /* binary search in table of wide characters */
734
+ if (mbbisearch(ucs, east_asian_fw,
735
+ sizeof(east_asian_fw) / sizeof(struct mbinterval) - 1))
736
+ return 2;
747
737
 
748
- /*
749
- * Convert a UTF-8 character to a Unicode code point.
750
- * This is a one-character version of pg_utf2wchar_with_len.
751
- *
752
- * No error checks here, c must point to a long-enough string.
753
- */
754
- pg_wchar
755
- utf8_to_unicode(const unsigned char *c)
756
- {
757
- if ((*c & 0x80) == 0)
758
- return (pg_wchar) c[0];
759
- else if ((*c & 0xe0) == 0xc0)
760
- return (pg_wchar) (((c[0] & 0x1f) << 6) |
761
- (c[1] & 0x3f));
762
- else if ((*c & 0xf0) == 0xe0)
763
- return (pg_wchar) (((c[0] & 0x0f) << 12) |
764
- ((c[1] & 0x3f) << 6) |
765
- (c[2] & 0x3f));
766
- else if ((*c & 0xf8) == 0xf0)
767
- return (pg_wchar) (((c[0] & 0x07) << 18) |
768
- ((c[1] & 0x3f) << 12) |
769
- ((c[2] & 0x3f) << 6) |
770
- (c[3] & 0x3f));
771
- else
772
- /* that is an invalid code on purpose */
773
- return 0xffffffff;
738
+ return 1;
774
739
  }
775
740
 
776
741
  static int
@@ -1156,29 +1121,45 @@ pg_gb18030_dsplen(const unsigned char *s)
1156
1121
  *-------------------------------------------------------------------
1157
1122
  * multibyte sequence validators
1158
1123
  *
1159
- * These functions accept "s", a pointer to the first byte of a string,
1160
- * and "len", the remaining length of the string. If there is a validly
1161
- * encoded character beginning at *s, return its length in bytes; else
1162
- * return -1.
1124
+ * The verifychar functions accept "s", a pointer to the first byte of a
1125
+ * string, and "len", the remaining length of the string. If there is a
1126
+ * validly encoded character beginning at *s, return its length in bytes;
1127
+ * else return -1.
1163
1128
  *
1164
- * The functions can assume that len > 0 and that *s != '\0', but they must
1165
- * test for and reject zeroes in any additional bytes of a multibyte character.
1129
+ * The verifystr functions also accept "s", a pointer to a string and "len",
1130
+ * the length of the string. They verify the whole string, and return the
1131
+ * number of input bytes (<= len) that are valid. In other words, if the
1132
+ * whole string is valid, verifystr returns "len", otherwise it returns the
1133
+ * byte offset of the first invalid character. The verifystr functions must
1134
+ * test for and reject zeroes in the input.
1166
1135
  *
1167
- * Note that this definition allows the function for a single-byte
1168
- * encoding to be just "return 1".
1136
+ * The verifychar functions can assume that len > 0 and that *s != '\0', but
1137
+ * they must test for and reject zeroes in any additional bytes of a
1138
+ * multibyte character. Note that this definition allows the function for a
1139
+ * single-byte encoding to be just "return 1".
1169
1140
  *-------------------------------------------------------------------
1170
1141
  */
1171
-
1172
1142
  static int
1173
- pg_ascii_verifier(const unsigned char *s, int len)
1143
+ pg_ascii_verifychar(const unsigned char *s, int len)
1174
1144
  {
1175
1145
  return 1;
1176
1146
  }
1177
1147
 
1148
+ static int
1149
+ pg_ascii_verifystr(const unsigned char *s, int len)
1150
+ {
1151
+ const unsigned char *nullpos = memchr(s, 0, len);
1152
+
1153
+ if (nullpos == NULL)
1154
+ return len;
1155
+ else
1156
+ return nullpos - s;
1157
+ }
1158
+
1178
1159
  #define IS_EUC_RANGE_VALID(c) ((c) >= 0xa1 && (c) <= 0xfe)
1179
1160
 
1180
1161
  static int
1181
- pg_eucjp_verifier(const unsigned char *s, int len)
1162
+ pg_eucjp_verifychar(const unsigned char *s, int len)
1182
1163
  {
1183
1164
  int l;
1184
1165
  unsigned char c1,
@@ -1233,7 +1214,36 @@ pg_eucjp_verifier(const unsigned char *s, int len)
1233
1214
  }
1234
1215
 
1235
1216
  static int
1236
- pg_euckr_verifier(const unsigned char *s, int len)
1217
+ pg_eucjp_verifystr(const unsigned char *s, int len)
1218
+ {
1219
+ const unsigned char *start = s;
1220
+
1221
+ while (len > 0)
1222
+ {
1223
+ int l;
1224
+
1225
+ /* fast path for ASCII-subset characters */
1226
+ if (!IS_HIGHBIT_SET(*s))
1227
+ {
1228
+ if (*s == '\0')
1229
+ break;
1230
+ l = 1;
1231
+ }
1232
+ else
1233
+ {
1234
+ l = pg_eucjp_verifychar(s, len);
1235
+ if (l == -1)
1236
+ break;
1237
+ }
1238
+ s += l;
1239
+ len -= l;
1240
+ }
1241
+
1242
+ return s - start;
1243
+ }
1244
+
1245
+ static int
1246
+ pg_euckr_verifychar(const unsigned char *s, int len)
1237
1247
  {
1238
1248
  int l;
1239
1249
  unsigned char c1,
@@ -1261,11 +1271,41 @@ pg_euckr_verifier(const unsigned char *s, int len)
1261
1271
  return l;
1262
1272
  }
1263
1273
 
1274
+ static int
1275
+ pg_euckr_verifystr(const unsigned char *s, int len)
1276
+ {
1277
+ const unsigned char *start = s;
1278
+
1279
+ while (len > 0)
1280
+ {
1281
+ int l;
1282
+
1283
+ /* fast path for ASCII-subset characters */
1284
+ if (!IS_HIGHBIT_SET(*s))
1285
+ {
1286
+ if (*s == '\0')
1287
+ break;
1288
+ l = 1;
1289
+ }
1290
+ else
1291
+ {
1292
+ l = pg_euckr_verifychar(s, len);
1293
+ if (l == -1)
1294
+ break;
1295
+ }
1296
+ s += l;
1297
+ len -= l;
1298
+ }
1299
+
1300
+ return s - start;
1301
+ }
1302
+
1264
1303
  /* EUC-CN byte sequences are exactly same as EUC-KR */
1265
- #define pg_euccn_verifier pg_euckr_verifier
1304
+ #define pg_euccn_verifychar pg_euckr_verifychar
1305
+ #define pg_euccn_verifystr pg_euckr_verifystr
1266
1306
 
1267
1307
  static int
1268
- pg_euctw_verifier(const unsigned char *s, int len)
1308
+ pg_euctw_verifychar(const unsigned char *s, int len)
1269
1309
  {
1270
1310
  int l;
1271
1311
  unsigned char c1,
@@ -1315,7 +1355,36 @@ pg_euctw_verifier(const unsigned char *s, int len)
1315
1355
  }
1316
1356
 
1317
1357
  static int
1318
- pg_johab_verifier(const unsigned char *s, int len)
1358
+ pg_euctw_verifystr(const unsigned char *s, int len)
1359
+ {
1360
+ const unsigned char *start = s;
1361
+
1362
+ while (len > 0)
1363
+ {
1364
+ int l;
1365
+
1366
+ /* fast path for ASCII-subset characters */
1367
+ if (!IS_HIGHBIT_SET(*s))
1368
+ {
1369
+ if (*s == '\0')
1370
+ break;
1371
+ l = 1;
1372
+ }
1373
+ else
1374
+ {
1375
+ l = pg_euctw_verifychar(s, len);
1376
+ if (l == -1)
1377
+ break;
1378
+ }
1379
+ s += l;
1380
+ len -= l;
1381
+ }
1382
+
1383
+ return s - start;
1384
+ }
1385
+
1386
+ static int
1387
+ pg_johab_verifychar(const unsigned char *s, int len)
1319
1388
  {
1320
1389
  int l,
1321
1390
  mbl;
@@ -1339,7 +1408,36 @@ pg_johab_verifier(const unsigned char *s, int len)
1339
1408
  }
1340
1409
 
1341
1410
  static int
1342
- pg_mule_verifier(const unsigned char *s, int len)
1411
+ pg_johab_verifystr(const unsigned char *s, int len)
1412
+ {
1413
+ const unsigned char *start = s;
1414
+
1415
+ while (len > 0)
1416
+ {
1417
+ int l;
1418
+
1419
+ /* fast path for ASCII-subset characters */
1420
+ if (!IS_HIGHBIT_SET(*s))
1421
+ {
1422
+ if (*s == '\0')
1423
+ break;
1424
+ l = 1;
1425
+ }
1426
+ else
1427
+ {
1428
+ l = pg_johab_verifychar(s, len);
1429
+ if (l == -1)
1430
+ break;
1431
+ }
1432
+ s += l;
1433
+ len -= l;
1434
+ }
1435
+
1436
+ return s - start;
1437
+ }
1438
+
1439
+ static int
1440
+ pg_mule_verifychar(const unsigned char *s, int len)
1343
1441
  {
1344
1442
  int l,
1345
1443
  mbl;
@@ -1360,13 +1458,53 @@ pg_mule_verifier(const unsigned char *s, int len)
1360
1458
  }
1361
1459
 
1362
1460
  static int
1363
- pg_latin1_verifier(const unsigned char *s, int len)
1461
+ pg_mule_verifystr(const unsigned char *s, int len)
1462
+ {
1463
+ const unsigned char *start = s;
1464
+
1465
+ while (len > 0)
1466
+ {
1467
+ int l;
1468
+
1469
+ /* fast path for ASCII-subset characters */
1470
+ if (!IS_HIGHBIT_SET(*s))
1471
+ {
1472
+ if (*s == '\0')
1473
+ break;
1474
+ l = 1;
1475
+ }
1476
+ else
1477
+ {
1478
+ l = pg_mule_verifychar(s, len);
1479
+ if (l == -1)
1480
+ break;
1481
+ }
1482
+ s += l;
1483
+ len -= l;
1484
+ }
1485
+
1486
+ return s - start;
1487
+ }
1488
+
1489
+ static int
1490
+ pg_latin1_verifychar(const unsigned char *s, int len)
1364
1491
  {
1365
1492
  return 1;
1366
1493
  }
1367
1494
 
1368
1495
  static int
1369
- pg_sjis_verifier(const unsigned char *s, int len)
1496
+ pg_latin1_verifystr(const unsigned char *s, int len)
1497
+ {
1498
+ const unsigned char *nullpos = memchr(s, 0, len);
1499
+
1500
+ if (nullpos == NULL)
1501
+ return len;
1502
+ else
1503
+ return nullpos - s;
1504
+ }
1505
+
1506
+ static int
1507
+ pg_sjis_verifychar(const unsigned char *s, int len)
1370
1508
  {
1371
1509
  int l,
1372
1510
  mbl;
@@ -1389,7 +1527,36 @@ pg_sjis_verifier(const unsigned char *s, int len)
1389
1527
  }
1390
1528
 
1391
1529
  static int
1392
- pg_big5_verifier(const unsigned char *s, int len)
1530
+ pg_sjis_verifystr(const unsigned char *s, int len)
1531
+ {
1532
+ const unsigned char *start = s;
1533
+
1534
+ while (len > 0)
1535
+ {
1536
+ int l;
1537
+
1538
+ /* fast path for ASCII-subset characters */
1539
+ if (!IS_HIGHBIT_SET(*s))
1540
+ {
1541
+ if (*s == '\0')
1542
+ break;
1543
+ l = 1;
1544
+ }
1545
+ else
1546
+ {
1547
+ l = pg_sjis_verifychar(s, len);
1548
+ if (l == -1)
1549
+ break;
1550
+ }
1551
+ s += l;
1552
+ len -= l;
1553
+ }
1554
+
1555
+ return s - start;
1556
+ }
1557
+
1558
+ static int
1559
+ pg_big5_verifychar(const unsigned char *s, int len)
1393
1560
  {
1394
1561
  int l,
1395
1562
  mbl;
@@ -1399,6 +1566,11 @@ pg_big5_verifier(const unsigned char *s, int len)
1399
1566
  if (len < l)
1400
1567
  return -1;
1401
1568
 
1569
+ if (l == 2 &&
1570
+ s[0] == NONUTF8_INVALID_BYTE0 &&
1571
+ s[1] == NONUTF8_INVALID_BYTE1)
1572
+ return -1;
1573
+
1402
1574
  while (--l > 0)
1403
1575
  {
1404
1576
  if (*++s == '\0')
@@ -1409,7 +1581,36 @@ pg_big5_verifier(const unsigned char *s, int len)
1409
1581
  }
1410
1582
 
1411
1583
  static int
1412
- pg_gbk_verifier(const unsigned char *s, int len)
1584
+ pg_big5_verifystr(const unsigned char *s, int len)
1585
+ {
1586
+ const unsigned char *start = s;
1587
+
1588
+ while (len > 0)
1589
+ {
1590
+ int l;
1591
+
1592
+ /* fast path for ASCII-subset characters */
1593
+ if (!IS_HIGHBIT_SET(*s))
1594
+ {
1595
+ if (*s == '\0')
1596
+ break;
1597
+ l = 1;
1598
+ }
1599
+ else
1600
+ {
1601
+ l = pg_big5_verifychar(s, len);
1602
+ if (l == -1)
1603
+ break;
1604
+ }
1605
+ s += l;
1606
+ len -= l;
1607
+ }
1608
+
1609
+ return s - start;
1610
+ }
1611
+
1612
+ static int
1613
+ pg_gbk_verifychar(const unsigned char *s, int len)
1413
1614
  {
1414
1615
  int l,
1415
1616
  mbl;
@@ -1419,6 +1620,11 @@ pg_gbk_verifier(const unsigned char *s, int len)
1419
1620
  if (len < l)
1420
1621
  return -1;
1421
1622
 
1623
+ if (l == 2 &&
1624
+ s[0] == NONUTF8_INVALID_BYTE0 &&
1625
+ s[1] == NONUTF8_INVALID_BYTE1)
1626
+ return -1;
1627
+
1422
1628
  while (--l > 0)
1423
1629
  {
1424
1630
  if (*++s == '\0')
@@ -1429,7 +1635,36 @@ pg_gbk_verifier(const unsigned char *s, int len)
1429
1635
  }
1430
1636
 
1431
1637
  static int
1432
- pg_uhc_verifier(const unsigned char *s, int len)
1638
+ pg_gbk_verifystr(const unsigned char *s, int len)
1639
+ {
1640
+ const unsigned char *start = s;
1641
+
1642
+ while (len > 0)
1643
+ {
1644
+ int l;
1645
+
1646
+ /* fast path for ASCII-subset characters */
1647
+ if (!IS_HIGHBIT_SET(*s))
1648
+ {
1649
+ if (*s == '\0')
1650
+ break;
1651
+ l = 1;
1652
+ }
1653
+ else
1654
+ {
1655
+ l = pg_gbk_verifychar(s, len);
1656
+ if (l == -1)
1657
+ break;
1658
+ }
1659
+ s += l;
1660
+ len -= l;
1661
+ }
1662
+
1663
+ return s - start;
1664
+ }
1665
+
1666
+ static int
1667
+ pg_uhc_verifychar(const unsigned char *s, int len)
1433
1668
  {
1434
1669
  int l,
1435
1670
  mbl;
@@ -1439,6 +1674,11 @@ pg_uhc_verifier(const unsigned char *s, int len)
1439
1674
  if (len < l)
1440
1675
  return -1;
1441
1676
 
1677
+ if (l == 2 &&
1678
+ s[0] == NONUTF8_INVALID_BYTE0 &&
1679
+ s[1] == NONUTF8_INVALID_BYTE1)
1680
+ return -1;
1681
+
1442
1682
  while (--l > 0)
1443
1683
  {
1444
1684
  if (*++s == '\0')
@@ -1449,7 +1689,36 @@ pg_uhc_verifier(const unsigned char *s, int len)
1449
1689
  }
1450
1690
 
1451
1691
  static int
1452
- pg_gb18030_verifier(const unsigned char *s, int len)
1692
+ pg_uhc_verifystr(const unsigned char *s, int len)
1693
+ {
1694
+ const unsigned char *start = s;
1695
+
1696
+ while (len > 0)
1697
+ {
1698
+ int l;
1699
+
1700
+ /* fast path for ASCII-subset characters */
1701
+ if (!IS_HIGHBIT_SET(*s))
1702
+ {
1703
+ if (*s == '\0')
1704
+ break;
1705
+ l = 1;
1706
+ }
1707
+ else
1708
+ {
1709
+ l = pg_uhc_verifychar(s, len);
1710
+ if (l == -1)
1711
+ break;
1712
+ }
1713
+ s += l;
1714
+ len -= l;
1715
+ }
1716
+
1717
+ return s - start;
1718
+ }
1719
+
1720
+ static int
1721
+ pg_gb18030_verifychar(const unsigned char *s, int len)
1453
1722
  {
1454
1723
  int l;
1455
1724
 
@@ -1480,11 +1749,55 @@ pg_gb18030_verifier(const unsigned char *s, int len)
1480
1749
  }
1481
1750
 
1482
1751
  static int
1483
- pg_utf8_verifier(const unsigned char *s, int len)
1752
+ pg_gb18030_verifystr(const unsigned char *s, int len)
1484
1753
  {
1485
- int l = pg_utf_mblen(s);
1754
+ const unsigned char *start = s;
1486
1755
 
1487
- if (len < l)
1756
+ while (len > 0)
1757
+ {
1758
+ int l;
1759
+
1760
+ /* fast path for ASCII-subset characters */
1761
+ if (!IS_HIGHBIT_SET(*s))
1762
+ {
1763
+ if (*s == '\0')
1764
+ break;
1765
+ l = 1;
1766
+ }
1767
+ else
1768
+ {
1769
+ l = pg_gb18030_verifychar(s, len);
1770
+ if (l == -1)
1771
+ break;
1772
+ }
1773
+ s += l;
1774
+ len -= l;
1775
+ }
1776
+
1777
+ return s - start;
1778
+ }
1779
+
1780
+ static int
1781
+ pg_utf8_verifychar(const unsigned char *s, int len)
1782
+ {
1783
+ int l;
1784
+
1785
+ if ((*s & 0x80) == 0)
1786
+ {
1787
+ if (*s == '\0')
1788
+ return -1;
1789
+ return 1;
1790
+ }
1791
+ else if ((*s & 0xe0) == 0xc0)
1792
+ l = 2;
1793
+ else if ((*s & 0xf0) == 0xe0)
1794
+ l = 3;
1795
+ else if ((*s & 0xf8) == 0xf0)
1796
+ l = 4;
1797
+ else
1798
+ l = 1;
1799
+
1800
+ if (l > len)
1488
1801
  return -1;
1489
1802
 
1490
1803
  if (!pg_utf8_islegal(s, l))
@@ -1493,6 +1806,251 @@ pg_utf8_verifier(const unsigned char *s, int len)
1493
1806
  return l;
1494
1807
  }
1495
1808
 
1809
+ /*
1810
+ * The fast path of the UTF-8 verifier uses a deterministic finite automaton
1811
+ * (DFA) for multibyte characters. In a traditional table-driven DFA, the
1812
+ * input byte and current state are used to compute an index into an array of
1813
+ * state transitions. Since the address of the next transition is dependent
1814
+ * on this computation, there is latency in executing the load instruction,
1815
+ * and the CPU is not kept busy.
1816
+ *
1817
+ * Instead, we use a "shift-based" DFA as described by Per Vognsen:
1818
+ *
1819
+ * https://gist.github.com/pervognsen/218ea17743e1442e59bb60d29b1aa725
1820
+ *
1821
+ * In a shift-based DFA, the input byte is an index into array of integers
1822
+ * whose bit pattern encodes the state transitions. To compute the next
1823
+ * state, we simply right-shift the integer by the current state and apply a
1824
+ * mask. In this scheme, the address of the transition only depends on the
1825
+ * input byte, so there is better pipelining.
1826
+ *
1827
+ * The naming convention for states and transitions was adopted from a UTF-8
1828
+ * to UTF-16/32 transcoder, whose table is reproduced below:
1829
+ *
1830
+ * https://github.com/BobSteagall/utf_utils/blob/6b7a465265de2f5fa6133d653df0c9bdd73bbcf8/src/utf_utils.cpp
1831
+ *
1832
+ * ILL ASC CR1 CR2 CR3 L2A L3A L3B L3C L4A L4B L4C CLASS / STATE
1833
+ * ==========================================================================
1834
+ * err, END, err, err, err, CS1, P3A, CS2, P3B, P4A, CS3, P4B, | BGN/END
1835
+ * err, err, err, err, err, err, err, err, err, err, err, err, | ERR
1836
+ * |
1837
+ * err, err, END, END, END, err, err, err, err, err, err, err, | CS1
1838
+ * err, err, CS1, CS1, CS1, err, err, err, err, err, err, err, | CS2
1839
+ * err, err, CS2, CS2, CS2, err, err, err, err, err, err, err, | CS3
1840
+ * |
1841
+ * err, err, err, err, CS1, err, err, err, err, err, err, err, | P3A
1842
+ * err, err, CS1, CS1, err, err, err, err, err, err, err, err, | P3B
1843
+ * |
1844
+ * err, err, err, CS2, CS2, err, err, err, err, err, err, err, | P4A
1845
+ * err, err, CS2, err, err, err, err, err, err, err, err, err, | P4B
1846
+ *
1847
+ * In the most straightforward implementation, a shift-based DFA for UTF-8
1848
+ * requires 64-bit integers to encode the transitions, but with an SMT solver
1849
+ * it's possible to find state numbers such that the transitions fit within
1850
+ * 32-bit integers, as Dougall Johnson demonstrated:
1851
+ *
1852
+ * https://gist.github.com/dougallj/166e326de6ad4cf2c94be97a204c025f
1853
+ *
1854
+ * This packed representation is the reason for the seemingly odd choice of
1855
+ * state values below.
1856
+ */
1857
+
1858
+ /* Error */
1859
+ #define ERR 0
1860
+ /* Begin */
1861
+ #define BGN 11
1862
+ /* Continuation states, expect 1/2/3 continuation bytes */
1863
+ #define CS1 16
1864
+ #define CS2 1
1865
+ #define CS3 5
1866
+ /* Partial states, where the first continuation byte has a restricted range */
1867
+ #define P3A 6 /* Lead was E0, check for 3-byte overlong */
1868
+ #define P3B 20 /* Lead was ED, check for surrogate */
1869
+ #define P4A 25 /* Lead was F0, check for 4-byte overlong */
1870
+ #define P4B 30 /* Lead was F4, check for too-large */
1871
+ /* Begin and End are the same state */
1872
+ #define END BGN
1873
+
1874
+ /* the encoded state transitions for the lookup table */
1875
+
1876
+ /* ASCII */
1877
+ #define ASC (END << BGN)
1878
+ /* 2-byte lead */
1879
+ #define L2A (CS1 << BGN)
1880
+ /* 3-byte lead */
1881
+ #define L3A (P3A << BGN)
1882
+ #define L3B (CS2 << BGN)
1883
+ #define L3C (P3B << BGN)
1884
+ /* 4-byte lead */
1885
+ #define L4A (P4A << BGN)
1886
+ #define L4B (CS3 << BGN)
1887
+ #define L4C (P4B << BGN)
1888
+ /* continuation byte */
1889
+ #define CR1 (END << CS1) | (CS1 << CS2) | (CS2 << CS3) | (CS1 << P3B) | (CS2 << P4B)
1890
+ #define CR2 (END << CS1) | (CS1 << CS2) | (CS2 << CS3) | (CS1 << P3B) | (CS2 << P4A)
1891
+ #define CR3 (END << CS1) | (CS1 << CS2) | (CS2 << CS3) | (CS1 << P3A) | (CS2 << P4A)
1892
+ /* invalid byte */
1893
+ #define ILL ERR
1894
+
1895
+ static const uint32 Utf8Transition[256] =
1896
+ {
1897
+ /* ASCII */
1898
+
1899
+ ILL, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
1900
+ ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
1901
+ ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
1902
+ ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
1903
+
1904
+ ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
1905
+ ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
1906
+ ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
1907
+ ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
1908
+
1909
+ ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
1910
+ ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
1911
+ ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
1912
+ ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
1913
+
1914
+ ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
1915
+ ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
1916
+ ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
1917
+ ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC,
1918
+
1919
+ /* continuation bytes */
1920
+
1921
+ /* 80..8F */
1922
+ CR1, CR1, CR1, CR1, CR1, CR1, CR1, CR1,
1923
+ CR1, CR1, CR1, CR1, CR1, CR1, CR1, CR1,
1924
+
1925
+ /* 90..9F */
1926
+ CR2, CR2, CR2, CR2, CR2, CR2, CR2, CR2,
1927
+ CR2, CR2, CR2, CR2, CR2, CR2, CR2, CR2,
1928
+
1929
+ /* A0..BF */
1930
+ CR3, CR3, CR3, CR3, CR3, CR3, CR3, CR3,
1931
+ CR3, CR3, CR3, CR3, CR3, CR3, CR3, CR3,
1932
+ CR3, CR3, CR3, CR3, CR3, CR3, CR3, CR3,
1933
+ CR3, CR3, CR3, CR3, CR3, CR3, CR3, CR3,
1934
+
1935
+ /* leading bytes */
1936
+
1937
+ /* C0..DF */
1938
+ ILL, ILL, L2A, L2A, L2A, L2A, L2A, L2A,
1939
+ L2A, L2A, L2A, L2A, L2A, L2A, L2A, L2A,
1940
+ L2A, L2A, L2A, L2A, L2A, L2A, L2A, L2A,
1941
+ L2A, L2A, L2A, L2A, L2A, L2A, L2A, L2A,
1942
+
1943
+ /* E0..EF */
1944
+ L3A, L3B, L3B, L3B, L3B, L3B, L3B, L3B,
1945
+ L3B, L3B, L3B, L3B, L3B, L3C, L3B, L3B,
1946
+
1947
+ /* F0..FF */
1948
+ L4A, L4B, L4B, L4B, L4C, ILL, ILL, ILL,
1949
+ ILL, ILL, ILL, ILL, ILL, ILL, ILL, ILL
1950
+ };
1951
+
1952
+ static void
1953
+ utf8_advance(const unsigned char *s, uint32 *state, int len)
1954
+ {
1955
+ /* Note: We deliberately don't check the state's value here. */
1956
+ while (len > 0)
1957
+ {
1958
+ /*
1959
+ * It's important that the mask value is 31: In most instruction sets,
1960
+ * a shift by a 32-bit operand is understood to be a shift by its mod
1961
+ * 32, so the compiler should elide the mask operation.
1962
+ */
1963
+ *state = Utf8Transition[*s++] >> (*state & 31);
1964
+ len--;
1965
+ }
1966
+
1967
+ *state &= 31;
1968
+ }
1969
+
1970
+ static int
1971
+ pg_utf8_verifystr(const unsigned char *s, int len)
1972
+ {
1973
+ const unsigned char *start = s;
1974
+ const int orig_len = len;
1975
+ uint32 state = BGN;
1976
+
1977
+ /*
1978
+ * With a stride of two vector widths, gcc will unroll the loop. Even if
1979
+ * the compiler can unroll a longer loop, it's not worth it because we
1980
+ * must fall back to the byte-wise algorithm if we find any non-ASCII.
1981
+ */
1982
+ #define STRIDE_LENGTH (2 * sizeof(Vector8))
1983
+
1984
+ if (len >= STRIDE_LENGTH)
1985
+ {
1986
+ while (len >= STRIDE_LENGTH)
1987
+ {
1988
+ /*
1989
+ * If the chunk is all ASCII, we can skip the full UTF-8 check,
1990
+ * but we must first check for a non-END state, which means the
1991
+ * previous chunk ended in the middle of a multibyte sequence.
1992
+ */
1993
+ if (state != END || !is_valid_ascii(s, STRIDE_LENGTH))
1994
+ utf8_advance(s, &state, STRIDE_LENGTH);
1995
+
1996
+ s += STRIDE_LENGTH;
1997
+ len -= STRIDE_LENGTH;
1998
+ }
1999
+
2000
+ /* The error state persists, so we only need to check for it here. */
2001
+ if (state == ERR)
2002
+ {
2003
+ /*
2004
+ * Start over from the beginning with the slow path so we can
2005
+ * count the valid bytes.
2006
+ */
2007
+ len = orig_len;
2008
+ s = start;
2009
+ }
2010
+ else if (state != END)
2011
+ {
2012
+ /*
2013
+ * The fast path exited in the middle of a multibyte sequence.
2014
+ * Walk backwards to find the leading byte so that the slow path
2015
+ * can resume checking from there. We must always backtrack at
2016
+ * least one byte, since the current byte could be e.g. an ASCII
2017
+ * byte after a 2-byte lead, which is invalid.
2018
+ */
2019
+ do
2020
+ {
2021
+ Assert(s > start);
2022
+ s--;
2023
+ len++;
2024
+ Assert(IS_HIGHBIT_SET(*s));
2025
+ } while (pg_utf_mblen(s) <= 1);
2026
+ }
2027
+ }
2028
+
2029
+ /* check remaining bytes */
2030
+ while (len > 0)
2031
+ {
2032
+ int l;
2033
+
2034
+ /* fast path for ASCII-subset characters */
2035
+ if (!IS_HIGHBIT_SET(*s))
2036
+ {
2037
+ if (*s == '\0')
2038
+ break;
2039
+ l = 1;
2040
+ }
2041
+ else
2042
+ {
2043
+ l = pg_utf8_verifychar(s, len);
2044
+ if (l == -1)
2045
+ break;
2046
+ }
2047
+ s += l;
2048
+ len -= l;
2049
+ }
2050
+
2051
+ return s - start;
2052
+ }
2053
+
1496
2054
  /*
1497
2055
  * Check for validity of a single UTF-8 encoded character
1498
2056
  *
@@ -1565,55 +2123,60 @@ pg_utf8_islegal(const unsigned char *source, int length)
1565
2123
  }
1566
2124
 
1567
2125
 
2126
+ /*
2127
+ * Fills the provided buffer with two bytes such that:
2128
+ * pg_encoding_mblen(dst) == 2 && pg_encoding_verifymbstr(dst) == 0
2129
+ */
2130
+
2131
+
1568
2132
  /*
1569
2133
  *-------------------------------------------------------------------
1570
2134
  * encoding info table
1571
- * XXX must be sorted by the same order as enum pg_enc (in mb/pg_wchar.h)
1572
2135
  *-------------------------------------------------------------------
1573
2136
  */
1574
2137
  const pg_wchar_tbl pg_wchar_table[] = {
1575
- {pg_ascii2wchar_with_len, pg_wchar2single_with_len, pg_ascii_mblen, pg_ascii_dsplen, pg_ascii_verifier, 1}, /* PG_SQL_ASCII */
1576
- {pg_eucjp2wchar_with_len, pg_wchar2euc_with_len, pg_eucjp_mblen, pg_eucjp_dsplen, pg_eucjp_verifier, 3}, /* PG_EUC_JP */
1577
- {pg_euccn2wchar_with_len, pg_wchar2euc_with_len, pg_euccn_mblen, pg_euccn_dsplen, pg_euccn_verifier, 2}, /* PG_EUC_CN */
1578
- {pg_euckr2wchar_with_len, pg_wchar2euc_with_len, pg_euckr_mblen, pg_euckr_dsplen, pg_euckr_verifier, 3}, /* PG_EUC_KR */
1579
- {pg_euctw2wchar_with_len, pg_wchar2euc_with_len, pg_euctw_mblen, pg_euctw_dsplen, pg_euctw_verifier, 4}, /* PG_EUC_TW */
1580
- {pg_eucjp2wchar_with_len, pg_wchar2euc_with_len, pg_eucjp_mblen, pg_eucjp_dsplen, pg_eucjp_verifier, 3}, /* PG_EUC_JIS_2004 */
1581
- {pg_utf2wchar_with_len, pg_wchar2utf_with_len, pg_utf_mblen, pg_utf_dsplen, pg_utf8_verifier, 4}, /* PG_UTF8 */
1582
- {pg_mule2wchar_with_len, pg_wchar2mule_with_len, pg_mule_mblen, pg_mule_dsplen, pg_mule_verifier, 4}, /* PG_MULE_INTERNAL */
1583
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* PG_LATIN1 */
1584
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* PG_LATIN2 */
1585
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* PG_LATIN3 */
1586
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* PG_LATIN4 */
1587
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* PG_LATIN5 */
1588
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* PG_LATIN6 */
1589
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* PG_LATIN7 */
1590
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* PG_LATIN8 */
1591
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* PG_LATIN9 */
1592
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* PG_LATIN10 */
1593
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* PG_WIN1256 */
1594
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* PG_WIN1258 */
1595
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* PG_WIN866 */
1596
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* PG_WIN874 */
1597
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* PG_KOI8R */
1598
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* PG_WIN1251 */
1599
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* PG_WIN1252 */
1600
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* ISO-8859-5 */
1601
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* ISO-8859-6 */
1602
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* ISO-8859-7 */
1603
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* ISO-8859-8 */
1604
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* PG_WIN1250 */
1605
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* PG_WIN1253 */
1606
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* PG_WIN1254 */
1607
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* PG_WIN1255 */
1608
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* PG_WIN1257 */
1609
- {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifier, 1}, /* PG_KOI8U */
1610
- {0, 0, pg_sjis_mblen, pg_sjis_dsplen, pg_sjis_verifier, 2}, /* PG_SJIS */
1611
- {0, 0, pg_big5_mblen, pg_big5_dsplen, pg_big5_verifier, 2}, /* PG_BIG5 */
1612
- {0, 0, pg_gbk_mblen, pg_gbk_dsplen, pg_gbk_verifier, 2}, /* PG_GBK */
1613
- {0, 0, pg_uhc_mblen, pg_uhc_dsplen, pg_uhc_verifier, 2}, /* PG_UHC */
1614
- {0, 0, pg_gb18030_mblen, pg_gb18030_dsplen, pg_gb18030_verifier, 4}, /* PG_GB18030 */
1615
- {0, 0, pg_johab_mblen, pg_johab_dsplen, pg_johab_verifier, 3}, /* PG_JOHAB */
1616
- {0, 0, pg_sjis_mblen, pg_sjis_dsplen, pg_sjis_verifier, 2} /* PG_SHIFT_JIS_2004 */
2138
+ [PG_SQL_ASCII] = {pg_ascii2wchar_with_len, pg_wchar2single_with_len, pg_ascii_mblen, pg_ascii_dsplen, pg_ascii_verifychar, pg_ascii_verifystr, 1},
2139
+ [PG_EUC_JP] = {pg_eucjp2wchar_with_len, pg_wchar2euc_with_len, pg_eucjp_mblen, pg_eucjp_dsplen, pg_eucjp_verifychar, pg_eucjp_verifystr, 3},
2140
+ [PG_EUC_CN] = {pg_euccn2wchar_with_len, pg_wchar2euc_with_len, pg_euccn_mblen, pg_euccn_dsplen, pg_euccn_verifychar, pg_euccn_verifystr, 2},
2141
+ [PG_EUC_KR] = {pg_euckr2wchar_with_len, pg_wchar2euc_with_len, pg_euckr_mblen, pg_euckr_dsplen, pg_euckr_verifychar, pg_euckr_verifystr, 3},
2142
+ [PG_EUC_TW] = {pg_euctw2wchar_with_len, pg_wchar2euc_with_len, pg_euctw_mblen, pg_euctw_dsplen, pg_euctw_verifychar, pg_euctw_verifystr, 4},
2143
+ [PG_EUC_JIS_2004] = {pg_eucjp2wchar_with_len, pg_wchar2euc_with_len, pg_eucjp_mblen, pg_eucjp_dsplen, pg_eucjp_verifychar, pg_eucjp_verifystr, 3},
2144
+ [PG_UTF8] = {pg_utf2wchar_with_len, pg_wchar2utf_with_len, pg_utf_mblen, pg_utf_dsplen, pg_utf8_verifychar, pg_utf8_verifystr, 4},
2145
+ [PG_MULE_INTERNAL] = {pg_mule2wchar_with_len, pg_wchar2mule_with_len, pg_mule_mblen, pg_mule_dsplen, pg_mule_verifychar, pg_mule_verifystr, 4},
2146
+ [PG_LATIN1] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2147
+ [PG_LATIN2] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2148
+ [PG_LATIN3] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2149
+ [PG_LATIN4] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2150
+ [PG_LATIN5] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2151
+ [PG_LATIN6] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2152
+ [PG_LATIN7] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2153
+ [PG_LATIN8] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2154
+ [PG_LATIN9] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2155
+ [PG_LATIN10] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2156
+ [PG_WIN1256] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2157
+ [PG_WIN1258] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2158
+ [PG_WIN866] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2159
+ [PG_WIN874] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2160
+ [PG_KOI8R] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2161
+ [PG_WIN1251] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2162
+ [PG_WIN1252] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2163
+ [PG_ISO_8859_5] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2164
+ [PG_ISO_8859_6] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2165
+ [PG_ISO_8859_7] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2166
+ [PG_ISO_8859_8] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2167
+ [PG_WIN1250] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2168
+ [PG_WIN1253] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2169
+ [PG_WIN1254] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2170
+ [PG_WIN1255] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2171
+ [PG_WIN1257] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2172
+ [PG_KOI8U] = {pg_latin12wchar_with_len, pg_wchar2single_with_len, pg_latin1_mblen, pg_latin1_dsplen, pg_latin1_verifychar, pg_latin1_verifystr, 1},
2173
+ [PG_SJIS] = {0, 0, pg_sjis_mblen, pg_sjis_dsplen, pg_sjis_verifychar, pg_sjis_verifystr, 2},
2174
+ [PG_BIG5] = {0, 0, pg_big5_mblen, pg_big5_dsplen, pg_big5_verifychar, pg_big5_verifystr, 2},
2175
+ [PG_GBK] = {0, 0, pg_gbk_mblen, pg_gbk_dsplen, pg_gbk_verifychar, pg_gbk_verifystr, 2},
2176
+ [PG_UHC] = {0, 0, pg_uhc_mblen, pg_uhc_dsplen, pg_uhc_verifychar, pg_uhc_verifystr, 2},
2177
+ [PG_GB18030] = {0, 0, pg_gb18030_mblen, pg_gb18030_dsplen, pg_gb18030_verifychar, pg_gb18030_verifystr, 4},
2178
+ [PG_JOHAB] = {0, 0, pg_johab_mblen, pg_johab_dsplen, pg_johab_verifychar, pg_johab_verifystr, 3},
2179
+ [PG_SHIFT_JIS_2004] = {0, 0, pg_sjis_mblen, pg_sjis_dsplen, pg_sjis_verifychar, pg_sjis_verifystr, 2},
1617
2180
  };
1618
2181
 
1619
2182
  /*
@@ -1646,7 +2209,14 @@ pg_encoding_mblen(int encoding, const char *mbstr)
1646
2209
  /*
1647
2210
  * Verify the first multibyte character of the given string.
1648
2211
  * Return its byte length if good, -1 if bad. (See comments above for
1649
- * full details of the mbverify API.)
2212
+ * full details of the mbverifychar API.)
2213
+ */
2214
+
2215
+
2216
+ /*
2217
+ * Verify that a string is valid for the given encoding.
2218
+ * Returns the number of input bytes (<= len) that form a valid string.
2219
+ * (See comments above for full details of the mbverifystr API.)
1650
2220
  */
1651
2221
 
1652
2222
 
@@ -1658,5 +2228,11 @@ pg_encoding_max_length(int encoding)
1658
2228
  {
1659
2229
  Assert(PG_VALID_ENCODING(encoding));
1660
2230
 
1661
- return pg_wchar_table[encoding].maxmblen;
2231
+ /*
2232
+ * Check for the encoding despite the assert, due to some mingw versions
2233
+ * otherwise issuing bogus warnings.
2234
+ */
2235
+ return PG_VALID_ENCODING(encoding) ?
2236
+ pg_wchar_table[encoding].maxmblen :
2237
+ pg_wchar_table[PG_SQL_ASCII].maxmblen;
1662
2238
  }