pg_query 2.0.3 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (557) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +165 -0
  3. data/README.md +67 -29
  4. data/Rakefile +8 -23
  5. data/ext/pg_query/extconf.rb +21 -3
  6. data/ext/pg_query/include/pg_query.h +29 -4
  7. data/ext/pg_query/include/pg_query_enum_defs.c +551 -272
  8. data/ext/pg_query/include/pg_query_fingerprint_conds.c +563 -470
  9. data/ext/pg_query/include/pg_query_fingerprint_defs.c +5403 -3945
  10. data/ext/pg_query/include/pg_query_outfuncs_conds.c +402 -330
  11. data/ext/pg_query/include/pg_query_outfuncs_defs.c +1319 -1059
  12. data/ext/pg_query/include/pg_query_readfuncs_conds.c +141 -118
  13. data/ext/pg_query/include/pg_query_readfuncs_defs.c +1685 -1379
  14. data/ext/pg_query/include/{access → postgres/access}/amapi.h +47 -1
  15. data/ext/pg_query/include/{access → postgres/access}/attmap.h +5 -3
  16. data/ext/pg_query/include/{access → postgres/access}/attnum.h +2 -2
  17. data/ext/pg_query/include/{access → postgres/access}/clog.h +4 -2
  18. data/ext/pg_query/include/{access → postgres/access}/commit_ts.h +6 -9
  19. data/ext/pg_query/include/{access → postgres/access}/detoast.h +1 -11
  20. data/ext/pg_query/include/{access → postgres/access}/genam.h +21 -16
  21. data/ext/pg_query/include/{access → postgres/access}/gin.h +17 -4
  22. data/ext/pg_query/include/{access → postgres/access}/htup.h +1 -1
  23. data/ext/pg_query/include/{access → postgres/access}/htup_details.h +80 -88
  24. data/ext/pg_query/include/{access → postgres/access}/itup.h +61 -52
  25. data/ext/pg_query/include/{access → postgres/access}/parallel.h +2 -2
  26. data/ext/pg_query/include/{access → postgres/access}/printtup.h +1 -1
  27. data/ext/pg_query/include/{access → postgres/access}/relation.h +1 -1
  28. data/ext/pg_query/include/{access → postgres/access}/relscan.h +17 -2
  29. data/ext/pg_query/include/postgres/access/rmgr.h +62 -0
  30. data/ext/pg_query/include/{access → postgres/access}/rmgrlist.h +24 -24
  31. data/ext/pg_query/include/{access → postgres/access}/sdir.h +12 -3
  32. data/ext/pg_query/include/{access → postgres/access}/skey.h +1 -1
  33. data/ext/pg_query/include/{access → postgres/access}/stratnum.h +4 -2
  34. data/ext/pg_query/include/{access → postgres/access}/sysattr.h +1 -1
  35. data/ext/pg_query/include/{access → postgres/access}/table.h +2 -1
  36. data/ext/pg_query/include/{access → postgres/access}/tableam.h +337 -62
  37. data/ext/pg_query/include/postgres/access/toast_compression.h +73 -0
  38. data/ext/pg_query/include/{access → postgres/access}/transam.h +123 -13
  39. data/ext/pg_query/include/postgres/access/tsmapi.h +82 -0
  40. data/ext/pg_query/include/{access → postgres/access}/tupconvert.h +5 -2
  41. data/ext/pg_query/include/{access → postgres/access}/tupdesc.h +2 -2
  42. data/ext/pg_query/include/{access → postgres/access}/tupmacs.h +60 -100
  43. data/ext/pg_query/include/{access → postgres/access}/twophase.h +5 -1
  44. data/ext/pg_query/include/{access → postgres/access}/xact.h +99 -32
  45. data/ext/pg_query/include/{access → postgres/access}/xlog.h +69 -165
  46. data/ext/pg_query/include/{access → postgres/access}/xlog_internal.h +147 -73
  47. data/ext/pg_query/include/postgres/access/xlogbackup.h +41 -0
  48. data/ext/pg_query/include/{access → postgres/access}/xlogdefs.h +13 -40
  49. data/ext/pg_query/include/postgres/access/xlogprefetcher.h +55 -0
  50. data/ext/pg_query/include/{access → postgres/access}/xlogreader.h +154 -37
  51. data/ext/pg_query/include/{access → postgres/access}/xlogrecord.h +34 -13
  52. data/ext/pg_query/include/postgres/access/xlogrecovery.h +158 -0
  53. data/ext/pg_query/include/postgres/archive/archive_module.h +59 -0
  54. data/ext/pg_query/include/{c.h → postgres/c.h} +245 -188
  55. data/ext/pg_query/include/{catalog → postgres/catalog}/catalog.h +6 -3
  56. data/ext/pg_query/include/{catalog → postgres/catalog}/catversion.h +6 -2
  57. data/ext/pg_query/include/{catalog → postgres/catalog}/dependency.h +14 -19
  58. data/ext/pg_query/include/postgres/catalog/genbki.h +143 -0
  59. data/ext/pg_query/include/{catalog → postgres/catalog}/index.h +20 -5
  60. data/ext/pg_query/include/postgres/catalog/indexing.h +54 -0
  61. data/ext/pg_query/include/{catalog → postgres/catalog}/namespace.h +5 -3
  62. data/ext/pg_query/include/{catalog → postgres/catalog}/objectaccess.h +73 -3
  63. data/ext/pg_query/include/{catalog → postgres/catalog}/objectaddress.h +12 -7
  64. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate.h +14 -10
  65. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate_d.h +2 -1
  66. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am.h +4 -1
  67. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am_d.h +3 -1
  68. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute.h +45 -26
  69. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute_d.h +19 -16
  70. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid.h +7 -2
  71. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid_d.h +19 -9
  72. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class.h +45 -15
  73. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class_d.h +31 -2
  74. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation.h +35 -8
  75. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation_d.h +21 -3
  76. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint.h +39 -13
  77. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint_d.h +10 -4
  78. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_control.h +13 -5
  79. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion.h +8 -5
  80. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion_d.h +4 -1
  81. data/ext/pg_query/include/postgres/catalog/pg_database.h +124 -0
  82. data/ext/pg_query/include/postgres/catalog/pg_database_d.h +52 -0
  83. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend.h +11 -7
  84. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend_d.h +3 -1
  85. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger.h +9 -3
  86. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger_d.h +3 -1
  87. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index.h +17 -7
  88. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index_d.h +20 -17
  89. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language.h +10 -5
  90. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language_d.h +3 -1
  91. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace.h +7 -2
  92. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace_d.h +3 -1
  93. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass.h +8 -5
  94. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass_d.h +3 -1
  95. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator.h +21 -16
  96. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator_d.h +37 -1
  97. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily.h +8 -4
  98. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily_d.h +6 -2
  99. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table.h +20 -9
  100. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table_d.h +2 -1
  101. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc.h +20 -11
  102. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc_d.h +10 -8
  103. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication.h +49 -6
  104. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication_d.h +3 -1
  105. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin.h +6 -1
  106. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin_d.h +5 -1
  107. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic.h +19 -12
  108. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_d.h +2 -1
  109. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext.h +19 -5
  110. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext_d.h +7 -2
  111. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform.h +8 -5
  112. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform_d.h +3 -1
  113. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger.h +24 -8
  114. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger_d.h +4 -1
  115. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config.h +6 -3
  116. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config_d.h +3 -1
  117. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict.h +8 -3
  118. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict_d.h +3 -1
  119. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser.h +6 -3
  120. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser_d.h +3 -1
  121. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template.h +6 -3
  122. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template_d.h +3 -1
  123. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type.h +56 -24
  124. data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type_d.h +70 -31
  125. data/ext/pg_query/include/{catalog → postgres/catalog}/storage.h +9 -7
  126. data/ext/pg_query/include/{commands → postgres/commands}/async.h +4 -5
  127. data/ext/pg_query/include/{commands → postgres/commands}/dbcommands.h +3 -1
  128. data/ext/pg_query/include/{commands → postgres/commands}/defrem.h +12 -24
  129. data/ext/pg_query/include/{commands → postgres/commands}/event_trigger.h +2 -2
  130. data/ext/pg_query/include/{commands → postgres/commands}/explain.h +3 -1
  131. data/ext/pg_query/include/{commands → postgres/commands}/prepare.h +1 -1
  132. data/ext/pg_query/include/{commands → postgres/commands}/tablespace.h +6 -4
  133. data/ext/pg_query/include/{commands → postgres/commands}/trigger.h +36 -25
  134. data/ext/pg_query/include/{commands → postgres/commands}/user.h +10 -4
  135. data/ext/pg_query/include/{commands → postgres/commands}/vacuum.h +140 -47
  136. data/ext/pg_query/include/postgres/common/cryptohash.h +39 -0
  137. data/ext/pg_query/include/{common → postgres/common}/file_perm.h +4 -4
  138. data/ext/pg_query/include/{common → postgres/common}/hashfn.h +1 -1
  139. data/ext/pg_query/include/postgres/common/int.h +437 -0
  140. data/ext/pg_query/include/{common → postgres/common}/keywords.h +2 -6
  141. data/ext/pg_query/include/{common → postgres/common}/kwlookup.h +2 -2
  142. data/ext/pg_query/include/postgres/common/pg_prng.h +61 -0
  143. data/ext/pg_query/include/{common → postgres/common}/relpath.h +21 -14
  144. data/ext/pg_query/include/postgres/common/scram-common.h +70 -0
  145. data/ext/pg_query/include/postgres/common/sha2.h +32 -0
  146. data/ext/pg_query/include/postgres/common/string.h +44 -0
  147. data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +125 -0
  148. data/ext/pg_query/include/{common/unicode_combining_table.h → postgres/common/unicode_nonspacing_table.h} +138 -8
  149. data/ext/pg_query/include/postgres/copyfuncs.funcs.c +5013 -0
  150. data/ext/pg_query/include/postgres/copyfuncs.switch.c +938 -0
  151. data/ext/pg_query/include/{datatype → postgres/datatype}/timestamp.h +50 -4
  152. data/ext/pg_query/include/postgres/equalfuncs.funcs.c +3097 -0
  153. data/ext/pg_query/include/postgres/equalfuncs.switch.c +785 -0
  154. data/ext/pg_query/include/{executor → postgres/executor}/execdesc.h +1 -1
  155. data/ext/pg_query/include/{executor → postgres/executor}/executor.h +98 -32
  156. data/ext/pg_query/include/{executor → postgres/executor}/functions.h +17 -3
  157. data/ext/pg_query/include/{executor → postgres/executor}/instrument.h +33 -16
  158. data/ext/pg_query/include/{executor → postgres/executor}/spi.h +42 -4
  159. data/ext/pg_query/include/{executor → postgres/executor}/tablefunc.h +1 -1
  160. data/ext/pg_query/include/{executor → postgres/executor}/tuptable.h +18 -11
  161. data/ext/pg_query/include/{fmgr.h → postgres/fmgr.h} +33 -8
  162. data/ext/pg_query/include/postgres/foreign/fdwapi.h +294 -0
  163. data/ext/pg_query/include/{funcapi.h → postgres/funcapi.h} +22 -10
  164. data/ext/pg_query/include/postgres/gram.h +1127 -0
  165. data/ext/pg_query/include/{parser → postgres}/gramparse.h +4 -4
  166. data/ext/pg_query/include/{jit → postgres/jit}/jit.h +12 -12
  167. data/ext/pg_query/include/postgres/kwlist_d.h +1119 -0
  168. data/ext/pg_query/include/postgres/lib/dshash.h +115 -0
  169. data/ext/pg_query/include/{lib → postgres/lib}/ilist.h +454 -22
  170. data/ext/pg_query/include/{lib → postgres/lib}/pairingheap.h +1 -1
  171. data/ext/pg_query/include/{lib → postgres/lib}/simplehash.h +158 -33
  172. data/ext/pg_query/include/postgres/lib/sort_template.h +432 -0
  173. data/ext/pg_query/include/{lib → postgres/lib}/stringinfo.h +3 -3
  174. data/ext/pg_query/include/{libpq → postgres/libpq}/auth.h +12 -4
  175. data/ext/pg_query/include/{libpq → postgres/libpq}/crypt.h +5 -4
  176. data/ext/pg_query/include/{libpq → postgres/libpq}/hba.h +54 -8
  177. data/ext/pg_query/include/{libpq → postgres/libpq}/libpq-be.h +45 -17
  178. data/ext/pg_query/include/{libpq → postgres/libpq}/libpq.h +31 -20
  179. data/ext/pg_query/include/{libpq → postgres/libpq}/pqcomm.h +26 -71
  180. data/ext/pg_query/include/{libpq → postgres/libpq}/pqformat.h +2 -2
  181. data/ext/pg_query/include/{libpq → postgres/libpq}/pqsignal.h +25 -13
  182. data/ext/pg_query/include/postgres/libpq/sasl.h +136 -0
  183. data/ext/pg_query/include/postgres/libpq/scram.h +37 -0
  184. data/ext/pg_query/include/{mb → postgres/mb}/pg_wchar.h +125 -25
  185. data/ext/pg_query/include/{mb → postgres/mb}/stringinfo_mb.h +1 -1
  186. data/ext/pg_query/include/{miscadmin.h → postgres/miscadmin.h} +96 -65
  187. data/ext/pg_query/include/{nodes → postgres/nodes}/bitmapset.h +11 -7
  188. data/ext/pg_query/include/{nodes → postgres/nodes}/execnodes.h +351 -103
  189. data/ext/pg_query/include/{nodes → postgres/nodes}/extensible.h +8 -4
  190. data/ext/pg_query/include/{nodes → postgres/nodes}/lockoptions.h +1 -1
  191. data/ext/pg_query/include/{nodes → postgres/nodes}/makefuncs.h +19 -6
  192. data/ext/pg_query/include/{nodes → postgres/nodes}/memnodes.h +11 -6
  193. data/ext/pg_query/include/postgres/nodes/miscnodes.h +56 -0
  194. data/ext/pg_query/include/{nodes → postgres/nodes}/nodeFuncs.h +89 -29
  195. data/ext/pg_query/include/{nodes → postgres/nodes}/nodes.h +100 -496
  196. data/ext/pg_query/include/postgres/nodes/nodetags.h +471 -0
  197. data/ext/pg_query/include/{nodes → postgres/nodes}/params.h +3 -3
  198. data/ext/pg_query/include/{nodes → postgres/nodes}/parsenodes.h +678 -207
  199. data/ext/pg_query/include/{nodes → postgres/nodes}/pathnodes.h +1282 -454
  200. data/ext/pg_query/include/{nodes → postgres/nodes}/pg_list.h +103 -73
  201. data/ext/pg_query/include/{nodes → postgres/nodes}/plannodes.h +474 -133
  202. data/ext/pg_query/include/{nodes → postgres/nodes}/primnodes.h +754 -254
  203. data/ext/pg_query/include/{nodes → postgres/nodes}/print.h +1 -1
  204. data/ext/pg_query/include/postgres/nodes/queryjumble.h +86 -0
  205. data/ext/pg_query/include/postgres/nodes/replnodes.h +111 -0
  206. data/ext/pg_query/include/postgres/nodes/supportnodes.h +346 -0
  207. data/ext/pg_query/include/{nodes → postgres/nodes}/tidbitmap.h +1 -1
  208. data/ext/pg_query/include/postgres/nodes/value.h +90 -0
  209. data/ext/pg_query/include/{optimizer → postgres/optimizer}/cost.h +14 -5
  210. data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo.h +9 -7
  211. data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo_gene.h +1 -1
  212. data/ext/pg_query/include/{optimizer → postgres/optimizer}/optimizer.h +31 -28
  213. data/ext/pg_query/include/{optimizer → postgres/optimizer}/paths.h +29 -12
  214. data/ext/pg_query/include/{optimizer → postgres/optimizer}/planmain.h +15 -17
  215. data/ext/pg_query/include/{parser → postgres/parser}/analyze.h +20 -5
  216. data/ext/pg_query/include/postgres/parser/kwlist.h +498 -0
  217. data/ext/pg_query/include/{parser → postgres/parser}/parse_agg.h +5 -8
  218. data/ext/pg_query/include/{parser → postgres/parser}/parse_coerce.h +6 -1
  219. data/ext/pg_query/include/{parser → postgres/parser}/parse_expr.h +2 -3
  220. data/ext/pg_query/include/{parser → postgres/parser}/parse_func.h +2 -1
  221. data/ext/pg_query/include/{parser → postgres/parser}/parse_node.h +41 -11
  222. data/ext/pg_query/include/{parser → postgres/parser}/parse_oper.h +3 -5
  223. data/ext/pg_query/include/{parser → postgres/parser}/parse_relation.h +11 -5
  224. data/ext/pg_query/include/{parser → postgres/parser}/parse_type.h +4 -3
  225. data/ext/pg_query/include/postgres/parser/parser.h +68 -0
  226. data/ext/pg_query/include/{parser → postgres/parser}/parsetree.h +1 -1
  227. data/ext/pg_query/include/{parser → postgres/parser}/scanner.h +2 -2
  228. data/ext/pg_query/include/{parser → postgres/parser}/scansup.h +2 -5
  229. data/ext/pg_query/include/{partitioning → postgres/partitioning}/partdefs.h +1 -1
  230. data/ext/pg_query/include/{pg_config.h → postgres/pg_config.h} +216 -228
  231. data/ext/pg_query/include/{pg_config_manual.h → postgres/pg_config_manual.h} +80 -58
  232. data/ext/pg_query/include/postgres/pg_config_os.h +8 -0
  233. data/ext/pg_query/include/{pg_getopt.h → postgres/pg_getopt.h} +6 -6
  234. data/ext/pg_query/include/{pg_trace.h → postgres/pg_trace.h} +1 -1
  235. data/ext/pg_query/include/postgres/pgstat.h +778 -0
  236. data/ext/pg_query/include/{pgtime.h → postgres/pgtime.h} +16 -6
  237. data/ext/pg_query/include/{pl_gram.h → postgres/pl_gram.h} +116 -116
  238. data/ext/pg_query/include/{pl_reserved_kwlist.h → postgres/pl_reserved_kwlist.h} +1 -1
  239. data/ext/pg_query/include/{pl_reserved_kwlist_d.h → postgres/pl_reserved_kwlist_d.h} +10 -10
  240. data/ext/pg_query/include/{pl_unreserved_kwlist.h → postgres/pl_unreserved_kwlist.h} +3 -3
  241. data/ext/pg_query/include/{pl_unreserved_kwlist_d.h → postgres/pl_unreserved_kwlist_d.h} +60 -60
  242. data/ext/pg_query/include/{plerrcodes.h → postgres/plerrcodes.h} +9 -1
  243. data/ext/pg_query/include/{plpgsql.h → postgres/plpgsql.h} +79 -86
  244. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-arm.h +9 -3
  245. data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +17 -0
  246. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-ppc.h +21 -21
  247. data/ext/pg_query/include/{port → postgres/port}/atomics/arch-x86.h +2 -2
  248. data/ext/pg_query/include/{port → postgres/port}/atomics/fallback.h +3 -3
  249. data/ext/pg_query/include/{port → postgres/port}/atomics/generic-gcc.h +3 -3
  250. data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +101 -0
  251. data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +106 -0
  252. data/ext/pg_query/include/{port → postgres/port}/atomics/generic.h +1 -1
  253. data/ext/pg_query/include/{port → postgres/port}/atomics.h +2 -7
  254. data/ext/pg_query/include/{port → postgres/port}/pg_bitutils.h +129 -16
  255. data/ext/pg_query/include/{port → postgres/port}/pg_bswap.h +1 -1
  256. data/ext/pg_query/include/{port → postgres/port}/pg_crc32c.h +1 -1
  257. data/ext/pg_query/include/postgres/port/simd.h +375 -0
  258. data/ext/pg_query/include/postgres/port/win32/arpa/inet.h +3 -0
  259. data/ext/pg_query/include/postgres/port/win32/dlfcn.h +1 -0
  260. data/ext/pg_query/include/postgres/port/win32/grp.h +1 -0
  261. data/ext/pg_query/include/postgres/port/win32/netdb.h +7 -0
  262. data/ext/pg_query/include/postgres/port/win32/netinet/in.h +3 -0
  263. data/ext/pg_query/include/postgres/port/win32/netinet/tcp.h +7 -0
  264. data/ext/pg_query/include/postgres/port/win32/pwd.h +3 -0
  265. data/ext/pg_query/include/postgres/port/win32/sys/resource.h +20 -0
  266. data/ext/pg_query/include/postgres/port/win32/sys/select.h +3 -0
  267. data/ext/pg_query/include/postgres/port/win32/sys/socket.h +26 -0
  268. data/ext/pg_query/include/postgres/port/win32/sys/un.h +17 -0
  269. data/ext/pg_query/include/postgres/port/win32/sys/wait.h +3 -0
  270. data/ext/pg_query/include/postgres/port/win32.h +59 -0
  271. data/ext/pg_query/include/postgres/port/win32_msvc/dirent.h +34 -0
  272. data/ext/pg_query/include/postgres/port/win32_msvc/sys/file.h +1 -0
  273. data/ext/pg_query/include/postgres/port/win32_msvc/sys/param.h +1 -0
  274. data/ext/pg_query/include/postgres/port/win32_msvc/sys/time.h +1 -0
  275. data/ext/pg_query/include/postgres/port/win32_msvc/unistd.h +9 -0
  276. data/ext/pg_query/include/postgres/port/win32_msvc/utime.h +3 -0
  277. data/ext/pg_query/include/postgres/port/win32_port.h +594 -0
  278. data/ext/pg_query/include/{port.h → postgres/port.h} +107 -111
  279. data/ext/pg_query/include/postgres/portability/instr_time.h +197 -0
  280. data/ext/pg_query/include/postgres/postgres.h +579 -0
  281. data/ext/pg_query/include/{postgres_ext.h → postgres/postgres_ext.h} +0 -1
  282. data/ext/pg_query/include/{postmaster → postgres/postmaster}/autovacuum.h +17 -20
  283. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker.h +3 -2
  284. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker_internals.h +2 -2
  285. data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgwriter.h +6 -6
  286. data/ext/pg_query/include/{postmaster → postgres/postmaster}/interrupt.h +1 -1
  287. data/ext/pg_query/include/{postmaster → postgres/postmaster}/pgarch.h +7 -10
  288. data/ext/pg_query/include/{postmaster → postgres/postmaster}/postmaster.h +21 -17
  289. data/ext/pg_query/include/postgres/postmaster/startup.h +41 -0
  290. data/ext/pg_query/include/{postmaster → postgres/postmaster}/syslogger.h +16 -11
  291. data/ext/pg_query/include/{postmaster → postgres/postmaster}/walwriter.h +5 -3
  292. data/ext/pg_query/include/{regex → postgres/regex}/regex.h +27 -22
  293. data/ext/pg_query/include/{replication → postgres/replication}/logicallauncher.h +8 -5
  294. data/ext/pg_query/include/postgres/replication/logicalproto.h +274 -0
  295. data/ext/pg_query/include/postgres/replication/logicalworker.h +32 -0
  296. data/ext/pg_query/include/{replication → postgres/replication}/origin.h +8 -8
  297. data/ext/pg_query/include/postgres/replication/reorderbuffer.h +753 -0
  298. data/ext/pg_query/include/{replication → postgres/replication}/slot.h +42 -12
  299. data/ext/pg_query/include/{replication → postgres/replication}/syncrep.h +6 -12
  300. data/ext/pg_query/include/{replication → postgres/replication}/walreceiver.h +158 -20
  301. data/ext/pg_query/include/{replication → postgres/replication}/walsender.h +20 -20
  302. data/ext/pg_query/include/{rewrite → postgres/rewrite}/prs2lock.h +1 -1
  303. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteHandler.h +1 -6
  304. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteManip.h +11 -2
  305. data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteSupport.h +1 -1
  306. data/ext/pg_query/include/{storage → postgres/storage}/backendid.h +3 -3
  307. data/ext/pg_query/include/{storage → postgres/storage}/block.h +24 -37
  308. data/ext/pg_query/include/{storage → postgres/storage}/buf.h +1 -1
  309. data/ext/pg_query/include/{storage → postgres/storage}/bufmgr.h +196 -95
  310. data/ext/pg_query/include/{storage → postgres/storage}/bufpage.h +152 -101
  311. data/ext/pg_query/include/{storage → postgres/storage}/condition_variable.h +14 -3
  312. data/ext/pg_query/include/{storage → postgres/storage}/dsm.h +6 -6
  313. data/ext/pg_query/include/{storage → postgres/storage}/dsm_impl.h +6 -2
  314. data/ext/pg_query/include/{storage → postgres/storage}/fd.h +48 -14
  315. data/ext/pg_query/include/postgres/storage/fileset.h +40 -0
  316. data/ext/pg_query/include/{storage → postgres/storage}/ipc.h +5 -2
  317. data/ext/pg_query/include/{storage → postgres/storage}/item.h +1 -1
  318. data/ext/pg_query/include/{storage → postgres/storage}/itemid.h +1 -1
  319. data/ext/pg_query/include/{storage → postgres/storage}/itemptr.h +96 -57
  320. data/ext/pg_query/include/{storage → postgres/storage}/large_object.h +2 -2
  321. data/ext/pg_query/include/{storage → postgres/storage}/latch.h +17 -13
  322. data/ext/pg_query/include/{storage → postgres/storage}/lmgr.h +7 -1
  323. data/ext/pg_query/include/{storage → postgres/storage}/lock.h +37 -25
  324. data/ext/pg_query/include/{storage → postgres/storage}/lockdefs.h +4 -4
  325. data/ext/pg_query/include/{storage → postgres/storage}/lwlock.h +21 -33
  326. data/ext/pg_query/include/{storage → postgres/storage}/lwlocknames.h +0 -1
  327. data/ext/pg_query/include/{storage → postgres/storage}/off.h +1 -1
  328. data/ext/pg_query/include/{storage → postgres/storage}/pg_sema.h +1 -1
  329. data/ext/pg_query/include/{storage → postgres/storage}/pg_shmem.h +9 -7
  330. data/ext/pg_query/include/{storage → postgres/storage}/pmsignal.h +15 -4
  331. data/ext/pg_query/include/{storage → postgres/storage}/predicate.h +5 -5
  332. data/ext/pg_query/include/{storage → postgres/storage}/proc.h +200 -67
  333. data/ext/pg_query/include/postgres/storage/procarray.h +99 -0
  334. data/ext/pg_query/include/{storage → postgres/storage}/proclist_types.h +1 -1
  335. data/ext/pg_query/include/{storage → postgres/storage}/procsignal.h +5 -7
  336. data/ext/pg_query/include/postgres/storage/relfilelocator.h +99 -0
  337. data/ext/pg_query/include/{storage → postgres/storage}/s_lock.h +118 -298
  338. data/ext/pg_query/include/{storage → postgres/storage}/sharedfileset.h +3 -11
  339. data/ext/pg_query/include/{storage → postgres/storage}/shm_mq.h +5 -4
  340. data/ext/pg_query/include/{storage → postgres/storage}/shm_toc.h +1 -1
  341. data/ext/pg_query/include/{storage → postgres/storage}/shmem.h +1 -23
  342. data/ext/pg_query/include/{storage → postgres/storage}/sinval.h +5 -5
  343. data/ext/pg_query/include/{storage → postgres/storage}/sinvaladt.h +4 -2
  344. data/ext/pg_query/include/{storage → postgres/storage}/smgr.h +21 -17
  345. data/ext/pg_query/include/{storage → postgres/storage}/spin.h +2 -2
  346. data/ext/pg_query/include/{storage → postgres/storage}/standby.h +17 -9
  347. data/ext/pg_query/include/{storage → postgres/storage}/standbydefs.h +2 -2
  348. data/ext/pg_query/include/{storage → postgres/storage}/sync.h +9 -5
  349. data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtag.h +7 -2
  350. data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtaglist.h +3 -2
  351. data/ext/pg_query/include/{tcop → postgres/tcop}/deparse_utility.h +1 -1
  352. data/ext/pg_query/include/{tcop → postgres/tcop}/dest.h +1 -3
  353. data/ext/pg_query/include/{tcop → postgres/tcop}/fastpath.h +1 -2
  354. data/ext/pg_query/include/{tcop → postgres/tcop}/pquery.h +7 -1
  355. data/ext/pg_query/include/{tcop → postgres/tcop}/tcopprot.h +19 -14
  356. data/ext/pg_query/include/{tcop → postgres/tcop}/utility.h +7 -3
  357. data/ext/pg_query/include/{tsearch → postgres/tsearch}/ts_cache.h +3 -5
  358. data/ext/pg_query/include/{utils → postgres/utils}/acl.h +37 -71
  359. data/ext/pg_query/include/{utils → postgres/utils}/aclchk_internal.h +1 -1
  360. data/ext/pg_query/include/{utils → postgres/utils}/array.h +26 -2
  361. data/ext/pg_query/include/postgres/utils/backend_progress.h +45 -0
  362. data/ext/pg_query/include/postgres/utils/backend_status.h +342 -0
  363. data/ext/pg_query/include/{utils → postgres/utils}/builtins.h +20 -11
  364. data/ext/pg_query/include/{utils → postgres/utils}/bytea.h +3 -2
  365. data/ext/pg_query/include/{utils → postgres/utils}/catcache.h +1 -1
  366. data/ext/pg_query/include/{utils → postgres/utils}/date.h +37 -9
  367. data/ext/pg_query/include/{utils → postgres/utils}/datetime.h +48 -27
  368. data/ext/pg_query/include/{utils → postgres/utils}/datum.h +9 -1
  369. data/ext/pg_query/include/{utils → postgres/utils}/dsa.h +5 -1
  370. data/ext/pg_query/include/{utils → postgres/utils}/elog.h +154 -48
  371. data/ext/pg_query/include/{utils → postgres/utils}/errcodes.h +2 -0
  372. data/ext/pg_query/include/{utils → postgres/utils}/expandeddatum.h +14 -3
  373. data/ext/pg_query/include/{utils → postgres/utils}/expandedrecord.h +14 -4
  374. data/ext/pg_query/include/{utils → postgres/utils}/float.h +13 -12
  375. data/ext/pg_query/include/{utils → postgres/utils}/fmgroids.h +1353 -696
  376. data/ext/pg_query/include/{utils → postgres/utils}/fmgrprotos.h +243 -18
  377. data/ext/pg_query/include/{utils → postgres/utils}/fmgrtab.h +6 -5
  378. data/ext/pg_query/include/{utils → postgres/utils}/guc.h +120 -121
  379. data/ext/pg_query/include/postgres/utils/guc_hooks.h +163 -0
  380. data/ext/pg_query/include/{utils → postgres/utils}/guc_tables.h +71 -21
  381. data/ext/pg_query/include/{utils → postgres/utils}/hsearch.h +15 -11
  382. data/ext/pg_query/include/{utils → postgres/utils}/inval.h +7 -3
  383. data/ext/pg_query/include/postgres/utils/logtape.h +77 -0
  384. data/ext/pg_query/include/{utils → postgres/utils}/lsyscache.h +16 -1
  385. data/ext/pg_query/include/{utils → postgres/utils}/memdebug.h +1 -1
  386. data/ext/pg_query/include/{utils → postgres/utils}/memutils.h +14 -53
  387. data/ext/pg_query/include/postgres/utils/memutils_internal.h +136 -0
  388. data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +237 -0
  389. data/ext/pg_query/include/{utils → postgres/utils}/numeric.h +38 -9
  390. data/ext/pg_query/include/{utils → postgres/utils}/palloc.h +33 -4
  391. data/ext/pg_query/include/{utils → postgres/utils}/partcache.h +3 -2
  392. data/ext/pg_query/include/{utils → postgres/utils}/pg_locale.h +37 -21
  393. data/ext/pg_query/include/postgres/utils/pgstat_internal.h +814 -0
  394. data/ext/pg_query/include/{utils → postgres/utils}/plancache.h +6 -5
  395. data/ext/pg_query/include/{utils → postgres/utils}/portal.h +12 -1
  396. data/ext/pg_query/include/{utils → postgres/utils}/probes.h +59 -59
  397. data/ext/pg_query/include/postgres/utils/ps_status.h +47 -0
  398. data/ext/pg_query/include/{utils → postgres/utils}/queryenvironment.h +1 -1
  399. data/ext/pg_query/include/postgres/utils/regproc.h +39 -0
  400. data/ext/pg_query/include/{utils → postgres/utils}/rel.h +129 -61
  401. data/ext/pg_query/include/{utils → postgres/utils}/relcache.h +21 -14
  402. data/ext/pg_query/include/{utils → postgres/utils}/reltrigger.h +1 -1
  403. data/ext/pg_query/include/{utils → postgres/utils}/resowner.h +1 -1
  404. data/ext/pg_query/include/{utils → postgres/utils}/ruleutils.h +9 -1
  405. data/ext/pg_query/include/{utils → postgres/utils}/sharedtuplestore.h +1 -1
  406. data/ext/pg_query/include/{utils → postgres/utils}/snapmgr.h +38 -15
  407. data/ext/pg_query/include/{utils → postgres/utils}/snapshot.h +14 -1
  408. data/ext/pg_query/include/{utils → postgres/utils}/sortsupport.h +117 -2
  409. data/ext/pg_query/include/{utils → postgres/utils}/syscache.h +9 -1
  410. data/ext/pg_query/include/{utils → postgres/utils}/timeout.h +11 -4
  411. data/ext/pg_query/include/{utils → postgres/utils}/timestamp.h +46 -15
  412. data/ext/pg_query/include/{utils → postgres/utils}/tuplesort.h +209 -41
  413. data/ext/pg_query/include/{utils → postgres/utils}/tuplestore.h +2 -2
  414. data/ext/pg_query/include/{utils → postgres/utils}/typcache.h +24 -17
  415. data/ext/pg_query/include/{utils → postgres/utils}/varlena.h +17 -3
  416. data/ext/pg_query/include/postgres/utils/wait_event.h +294 -0
  417. data/ext/pg_query/include/{utils → postgres/utils}/xml.h +18 -8
  418. data/ext/pg_query/include/{postgres.h → postgres/varatt.h} +65 -471
  419. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +7494 -6382
  420. data/ext/pg_query/include/protobuf/pg_query.pb.h +116922 -84792
  421. data/ext/pg_query/include/protobuf-c/protobuf-c.h +7 -3
  422. data/ext/pg_query/include/protobuf-c.h +7 -3
  423. data/ext/pg_query/pg_query.c +10 -1
  424. data/ext/pg_query/pg_query.pb-c.c +21026 -17002
  425. data/ext/pg_query/pg_query_deparse.c +1 -9896
  426. data/ext/pg_query/pg_query_fingerprint.c +162 -50
  427. data/ext/pg_query/pg_query_fingerprint.h +3 -1
  428. data/ext/pg_query/pg_query_internal.h +1 -1
  429. data/ext/pg_query/pg_query_json_plpgsql.c +56 -12
  430. data/ext/pg_query/pg_query_normalize.c +259 -64
  431. data/ext/pg_query/pg_query_outfuncs.h +1 -0
  432. data/ext/pg_query/pg_query_outfuncs_json.c +71 -16
  433. data/ext/pg_query/pg_query_outfuncs_protobuf.c +73 -12
  434. data/ext/pg_query/pg_query_parse.c +47 -5
  435. data/ext/pg_query/pg_query_parse_plpgsql.c +86 -21
  436. data/ext/pg_query/pg_query_readfuncs_protobuf.c +43 -8
  437. data/ext/pg_query/pg_query_ruby.c +6 -1
  438. data/ext/pg_query/pg_query_ruby_freebsd.sym +2 -0
  439. data/ext/pg_query/pg_query_scan.c +3 -2
  440. data/ext/pg_query/pg_query_split.c +6 -5
  441. data/ext/pg_query/postgres_deparse.c +11067 -0
  442. data/ext/pg_query/postgres_deparse.h +9 -0
  443. data/ext/pg_query/protobuf-c.c +34 -27
  444. data/ext/pg_query/src_backend_catalog_namespace.c +27 -10
  445. data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
  446. data/ext/pg_query/src_backend_commands_define.c +11 -1
  447. data/ext/pg_query/src_backend_nodes_bitmapset.c +13 -70
  448. data/ext/pg_query/src_backend_nodes_copyfuncs.c +103 -5894
  449. data/ext/pg_query/src_backend_nodes_equalfuncs.c +102 -3830
  450. data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
  451. data/ext/pg_query/src_backend_nodes_list.c +99 -12
  452. data/ext/pg_query/src_backend_nodes_makefuncs.c +99 -4
  453. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +325 -131
  454. data/ext/pg_query/src_backend_nodes_nodes.c +38 -0
  455. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  456. data/ext/pg_query/src_backend_parser_gram.c +36104 -32074
  457. data/ext/pg_query/src_backend_parser_parser.c +53 -8
  458. data/ext/pg_query/src_backend_parser_scan.c +4893 -3701
  459. data/ext/pg_query/src_backend_parser_scansup.c +4 -28
  460. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  461. data/ext/pg_query/src_backend_tcop_postgres.c +133 -105
  462. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  463. data/ext/pg_query/src_backend_utils_adt_datum.c +17 -7
  464. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  465. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  466. data/ext/pg_query/src_backend_utils_adt_numutils.c +489 -0
  467. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +187 -19
  468. data/ext/pg_query/src_backend_utils_error_assert.c +17 -18
  469. data/ext/pg_query/src_backend_utils_error_elog.c +513 -318
  470. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +44 -17
  471. data/ext/pg_query/src_backend_utils_init_globals.c +9 -6
  472. data/ext/pg_query/src_backend_utils_mb_mbutils.c +74 -131
  473. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +492 -0
  474. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +163 -0
  475. data/ext/pg_query/src_backend_utils_mmgr_aset.c +453 -314
  476. data/ext/pg_query/src_backend_utils_mmgr_generation.c +1039 -0
  477. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +549 -76
  478. data/ext/pg_query/src_backend_utils_mmgr_slab.c +1021 -0
  479. data/ext/pg_query/src_common_encnames.c +4 -1
  480. data/ext/pg_query/src_common_hashfn.c +420 -0
  481. data/ext/pg_query/src_common_keywords.c +15 -2
  482. data/ext/pg_query/src_common_kwlist_d.h +545 -498
  483. data/ext/pg_query/src_common_kwlookup.c +1 -1
  484. data/ext/pg_query/src_common_psprintf.c +1 -1
  485. data/ext/pg_query/src_common_stringinfo.c +4 -4
  486. data/ext/pg_query/src_common_wchar.c +717 -113
  487. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +49 -22
  488. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -18
  489. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1136 -1195
  490. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  491. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  492. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
  493. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +60 -60
  494. data/ext/pg_query/src_port_pg_bitutils.c +103 -40
  495. data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
  496. data/ext/pg_query/src_port_qsort.c +12 -224
  497. data/ext/pg_query/src_port_snprintf.c +51 -29
  498. data/ext/pg_query/src_port_strerror.c +9 -19
  499. data/ext/pg_query/src_port_strlcpy.c +79 -0
  500. data/lib/pg_query/deparse.rb +7 -1
  501. data/lib/pg_query/filter_columns.rb +7 -5
  502. data/lib/pg_query/fingerprint.rb +21 -9
  503. data/lib/pg_query/node.rb +18 -13
  504. data/lib/pg_query/param_refs.rb +1 -1
  505. data/lib/pg_query/parse.rb +141 -50
  506. data/lib/pg_query/pg_query_pb.rb +175 -3031
  507. data/lib/pg_query/treewalker.rb +26 -2
  508. data/lib/pg_query/truncate.rb +54 -8
  509. data/lib/pg_query/version.rb +1 -1
  510. data/lib/pg_query.rb +0 -1
  511. metadata +443 -380
  512. data/ext/pg_query/guc-file.c +0 -0
  513. data/ext/pg_query/include/access/rmgr.h +0 -35
  514. data/ext/pg_query/include/access/xloginsert.h +0 -64
  515. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  516. data/ext/pg_query/include/catalog/genbki.h +0 -64
  517. data/ext/pg_query/include/catalog/indexing.h +0 -366
  518. data/ext/pg_query/include/commands/variable.h +0 -38
  519. data/ext/pg_query/include/common/ip.h +0 -37
  520. data/ext/pg_query/include/common/string.h +0 -19
  521. data/ext/pg_query/include/getaddrinfo.h +0 -162
  522. data/ext/pg_query/include/kwlist_d.h +0 -1072
  523. data/ext/pg_query/include/nodes/value.h +0 -61
  524. data/ext/pg_query/include/parser/gram.h +0 -1067
  525. data/ext/pg_query/include/parser/kwlist.h +0 -477
  526. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  527. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  528. data/ext/pg_query/include/parser/parse_target.h +0 -46
  529. data/ext/pg_query/include/parser/parser.h +0 -41
  530. data/ext/pg_query/include/pg_config_os.h +0 -8
  531. data/ext/pg_query/include/pgstat.h +0 -1487
  532. data/ext/pg_query/include/portability/instr_time.h +0 -256
  533. data/ext/pg_query/include/postmaster/fork_process.h +0 -17
  534. data/ext/pg_query/include/replication/logicalproto.h +0 -110
  535. data/ext/pg_query/include/replication/logicalworker.h +0 -19
  536. data/ext/pg_query/include/replication/reorderbuffer.h +0 -467
  537. data/ext/pg_query/include/storage/relfilenode.h +0 -99
  538. data/ext/pg_query/include/utils/dynahash.h +0 -19
  539. data/ext/pg_query/include/utils/pg_lsn.h +0 -29
  540. data/ext/pg_query/include/utils/pidfile.h +0 -56
  541. data/ext/pg_query/include/utils/ps_status.h +0 -25
  542. data/ext/pg_query/include/utils/regproc.h +0 -28
  543. data/ext/pg_query/include/utils/rls.h +0 -50
  544. data/ext/pg_query/include/utils/tzparser.h +0 -39
  545. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -651
  546. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  547. data/ext/pg_query/src_backend_postmaster_postmaster.c +0 -2230
  548. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -370
  549. data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1086
  550. data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1831
  551. data/ext/pg_query/src_common_string.c +0 -86
  552. data/ext/pg_query/src_port_erand48.c +0 -127
  553. data/ext/pg_query/src_port_pgsleep.c +0 -69
  554. data/ext/pg_query/src_port_random.c +0 -31
  555. data/ext/pg_query/src_port_strnlen.c +0 -39
  556. data/lib/pg_query/json_field_names.rb +0 -1402
  557. /data/ext/pg_query/include/{pg_config_ext.h → postgres/pg_config_ext.h} +0 -0
@@ -8,7 +8,7 @@
8
8
  * Structs that need to be client-visible are in pqcomm.h.
9
9
  *
10
10
  *
11
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
11
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
12
12
  * Portions Copyright (c) 1994, Regents of the University of California
13
13
  *
14
14
  * src/include/libpq/libpq-be.h
@@ -23,9 +23,7 @@
23
23
  #include <openssl/ssl.h>
24
24
  #include <openssl/err.h>
25
25
  #endif
26
- #ifdef HAVE_NETINET_TCP_H
27
26
  #include <netinet/tcp.h>
28
- #endif
29
27
 
30
28
  #ifdef ENABLE_GSS
31
29
  #if defined(HAVE_GSSAPI_H)
@@ -33,14 +31,6 @@
33
31
  #else
34
32
  #include <gssapi/gssapi.h>
35
33
  #endif /* HAVE_GSSAPI_H */
36
- /*
37
- * GSSAPI brings in headers that set a lot of things in the global namespace on win32,
38
- * that doesn't match the msvc build. It gives a bunch of compiler warnings that we ignore,
39
- * but also defines a symbol that simply does not exist. Undefine it again.
40
- */
41
- #ifdef _MSC_VER
42
- #undef HAVE_GETADDRINFO
43
- #endif
44
34
  #endif /* ENABLE_GSS */
45
35
 
46
36
  #ifdef ENABLE_SSPI
@@ -70,8 +60,12 @@ typedef struct
70
60
 
71
61
  typedef enum CAC_state
72
62
  {
73
- CAC_OK, CAC_STARTUP, CAC_SHUTDOWN, CAC_RECOVERY, CAC_TOOMANY,
74
- CAC_SUPERUSER
63
+ CAC_OK,
64
+ CAC_STARTUP,
65
+ CAC_SHUTDOWN,
66
+ CAC_RECOVERY,
67
+ CAC_NOTCONSISTENT,
68
+ CAC_TOOMANY
75
69
  } CAC_state;
76
70
 
77
71
 
@@ -90,10 +84,42 @@ typedef struct
90
84
  * GSSAPI auth was not used */
91
85
  bool auth; /* GSSAPI Authentication used */
92
86
  bool enc; /* GSSAPI encryption in use */
87
+ bool delegated_creds; /* GSSAPI Delegated credentials */
93
88
  #endif
94
89
  } pg_gssinfo;
95
90
  #endif
96
91
 
92
+ /*
93
+ * ClientConnectionInfo includes the fields describing the client connection
94
+ * that are copied over to parallel workers as nothing from Port does that.
95
+ * The same rules apply for allocations here as for Port (everything must be
96
+ * malloc'd or palloc'd in TopMemoryContext).
97
+ *
98
+ * If you add a struct member here, remember to also handle serialization in
99
+ * SerializeClientConnectionInfo() and co.
100
+ */
101
+ typedef struct ClientConnectionInfo
102
+ {
103
+ /*
104
+ * Authenticated identity. The meaning of this identifier is dependent on
105
+ * auth_method; it is the identity (if any) that the user presented during
106
+ * the authentication cycle, before they were assigned a database role.
107
+ * (It is effectively the "SYSTEM-USERNAME" of a pg_ident usermap --
108
+ * though the exact string in use may be different, depending on pg_hba
109
+ * options.)
110
+ *
111
+ * authn_id is NULL if the user has not actually been authenticated, for
112
+ * example if the "trust" auth method is in use.
113
+ */
114
+ const char *authn_id;
115
+
116
+ /*
117
+ * The HBA method that determined the above authn_id. This only has
118
+ * meaning if authn_id is not NULL; otherwise it's undefined.
119
+ */
120
+ UserAuth auth_method;
121
+ } ClientConnectionInfo;
122
+
97
123
  /*
98
124
  * This is used by the postmaster in its communication with frontends. It
99
125
  * contains all state information needed during this communication before the
@@ -190,11 +216,12 @@ typedef struct Port
190
216
  */
191
217
  bool ssl_in_use;
192
218
  char *peer_cn;
219
+ char *peer_dn;
193
220
  bool peer_cert_valid;
194
221
 
195
222
  /*
196
223
  * OpenSSL structures. (Keep these last so that the locations of other
197
- * fields are the same whether or not you build with OpenSSL.)
224
+ * fields are the same whether or not you build with SSL enabled.)
198
225
  */
199
226
  #ifdef USE_OPENSSL
200
227
  SSL *ssl;
@@ -266,7 +293,6 @@ extern ssize_t be_tls_write(Port *port, void *ptr, size_t len, int *waitfor);
266
293
  * Return information about the SSL connection.
267
294
  */
268
295
  extern int be_tls_get_cipher_bits(Port *port);
269
- extern bool be_tls_get_compression(Port *port);
270
296
  extern const char *be_tls_get_version(Port *port);
271
297
  extern const char *be_tls_get_cipher(Port *port);
272
298
  extern void be_tls_get_peer_subject_name(Port *port, char *ptr, size_t len);
@@ -283,7 +309,7 @@ extern void be_tls_get_peer_serial(Port *port, char *ptr, size_t len);
283
309
  * This is not supported with old versions of OpenSSL that don't have
284
310
  * the X509_get_signature_nid() function.
285
311
  */
286
- #if defined(USE_OPENSSL) && defined(HAVE_X509_GET_SIGNATURE_NID)
312
+ #if defined(USE_OPENSSL) && (defined(HAVE_X509_GET_SIGNATURE_NID) || defined(HAVE_X509_GET_SIGNATURE_INFO))
287
313
  #define HAVE_BE_TLS_GET_CERTIFICATE_HASH
288
314
  extern char *be_tls_get_certificate_hash(Port *port, size_t *len);
289
315
  #endif
@@ -303,13 +329,15 @@ extern PGDLLIMPORT openssl_tls_init_hook_typ openssl_tls_init_hook;
303
329
  extern bool be_gssapi_get_auth(Port *port);
304
330
  extern bool be_gssapi_get_enc(Port *port);
305
331
  extern const char *be_gssapi_get_princ(Port *port);
332
+ extern bool be_gssapi_get_delegation(Port *port);
306
333
 
307
334
  /* Read and write to a GSSAPI-encrypted connection. */
308
335
  extern ssize_t be_gssapi_read(Port *port, void *ptr, size_t len);
309
336
  extern ssize_t be_gssapi_write(Port *port, void *ptr, size_t len);
310
337
  #endif /* ENABLE_GSS */
311
338
 
312
- extern ProtocolVersion FrontendProtocol;
339
+ extern PGDLLIMPORT ProtocolVersion FrontendProtocol;
340
+ extern PGDLLIMPORT ClientConnectionInfo MyClientConnectionInfo;
313
341
 
314
342
  /* TCP keepalives configuration. These are no-ops on an AF_UNIX socket. */
315
343
 
@@ -4,7 +4,7 @@
4
4
  * POSTGRES LIBPQ buffer structure definitions.
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/libpq/libpq.h
@@ -21,6 +21,15 @@
21
21
  #include "storage/latch.h"
22
22
 
23
23
 
24
+ /*
25
+ * Callers of pq_getmessage() must supply a maximum expected message size.
26
+ * By convention, if there's not any specific reason to use another value,
27
+ * use PQ_SMALL_MESSAGE_LIMIT for messages that shouldn't be too long, and
28
+ * PQ_LARGE_MESSAGE_LIMIT for messages that can be long.
29
+ */
30
+ #define PQ_SMALL_MESSAGE_LIMIT 10000
31
+ #define PQ_LARGE_MESSAGE_LIMIT (MaxAllocSize - 1)
32
+
24
33
  typedef struct
25
34
  {
26
35
  void (*comm_reset) (void);
@@ -29,8 +38,6 @@ typedef struct
29
38
  bool (*is_send_pending) (void);
30
39
  int (*putmessage) (char msgtype, const char *s, size_t len);
31
40
  void (*putmessage_noblock) (char msgtype, const char *s, size_t len);
32
- void (*startcopyout) (void);
33
- void (*endcopyout) (bool errorAbort);
34
41
  } PQcommMethods;
35
42
 
36
43
  extern const PGDLLIMPORT PQcommMethods *PqCommMethods;
@@ -43,8 +50,6 @@ extern const PGDLLIMPORT PQcommMethods *PqCommMethods;
43
50
  (PqCommMethods->putmessage(msgtype, s, len))
44
51
  #define pq_putmessage_noblock(msgtype, s, len) \
45
52
  (PqCommMethods->putmessage_noblock(msgtype, s, len))
46
- #define pq_startcopyout() (PqCommMethods->startcopyout())
47
- #define pq_endcopyout(errorAbort) (PqCommMethods->endcopyout(errorAbort))
48
53
 
49
54
  /*
50
55
  * External functions.
@@ -53,7 +58,11 @@ extern const PGDLLIMPORT PQcommMethods *PqCommMethods;
53
58
  /*
54
59
  * prototypes for functions in pqcomm.c
55
60
  */
56
- extern WaitEventSet *FeBeWaitSet;
61
+ extern PGDLLIMPORT WaitEventSet *FeBeWaitSet;
62
+
63
+ #define FeBeWaitSetSocketPos 0
64
+ #define FeBeWaitSetLatchPos 1
65
+ #define FeBeWaitSetNEvents 3
57
66
 
58
67
  extern int StreamServerPort(int family, const char *hostName,
59
68
  unsigned short portNumber, const char *unixSocketDir,
@@ -64,7 +73,6 @@ extern void TouchSocketFiles(void);
64
73
  extern void RemoveSocketFiles(void);
65
74
  extern void pq_init(void);
66
75
  extern int pq_getbytes(char *s, size_t len);
67
- extern int pq_getstring(StringInfo s);
68
76
  extern void pq_startmsgread(void);
69
77
  extern void pq_endmsgread(void);
70
78
  extern bool pq_is_reading_msg(void);
@@ -72,21 +80,24 @@ extern int pq_getmessage(StringInfo s, int maxlen);
72
80
  extern int pq_getbyte(void);
73
81
  extern int pq_peekbyte(void);
74
82
  extern int pq_getbyte_if_available(unsigned char *c);
75
- extern int pq_putbytes(const char *s, size_t len);
83
+ extern bool pq_buffer_has_data(void);
84
+ extern int pq_putmessage_v2(char msgtype, const char *s, size_t len);
85
+ extern bool pq_check_connection(void);
76
86
 
77
87
  /*
78
88
  * prototypes for functions in be-secure.c
79
89
  */
80
- extern char *ssl_library;
81
- extern char *ssl_cert_file;
82
- extern char *ssl_key_file;
83
- extern char *ssl_ca_file;
84
- extern char *ssl_crl_file;
85
- extern char *ssl_dh_params_file;
90
+ extern PGDLLIMPORT char *ssl_library;
91
+ extern PGDLLIMPORT char *ssl_cert_file;
92
+ extern PGDLLIMPORT char *ssl_key_file;
93
+ extern PGDLLIMPORT char *ssl_ca_file;
94
+ extern PGDLLIMPORT char *ssl_crl_file;
95
+ extern PGDLLIMPORT char *ssl_crl_dir;
96
+ extern PGDLLIMPORT char *ssl_dh_params_file;
86
97
  extern PGDLLIMPORT char *ssl_passphrase_command;
87
98
  extern PGDLLIMPORT bool ssl_passphrase_command_supports_reload;
88
99
  #ifdef USE_SSL
89
- extern bool ssl_loaded_verify_locations;
100
+ extern PGDLLIMPORT bool ssl_loaded_verify_locations;
90
101
  #endif
91
102
 
92
103
  extern int secure_initialize(bool isServerStart);
@@ -107,11 +118,11 @@ extern ssize_t secure_open_gssapi(Port *port);
107
118
  #endif
108
119
 
109
120
  /* GUCs */
110
- extern char *SSLCipherSuites;
111
- extern char *SSLECDHCurve;
112
- extern bool SSLPreferServerCiphers;
113
- extern int ssl_min_protocol_version;
114
- extern int ssl_max_protocol_version;
121
+ extern PGDLLIMPORT char *SSLCipherSuites;
122
+ extern PGDLLIMPORT char *SSLECDHCurve;
123
+ extern PGDLLIMPORT bool SSLPreferServerCiphers;
124
+ extern PGDLLIMPORT int ssl_min_protocol_version;
125
+ extern PGDLLIMPORT int ssl_max_protocol_version;
115
126
 
116
127
  enum ssl_protocol_versions
117
128
  {
@@ -6,7 +6,7 @@
6
6
  * NOTE: for historical reasons, this does not correspond to pqcomm.c.
7
7
  * pqcomm.c's routines are declared in libpq.h.
8
8
  *
9
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
9
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
10
10
  * Portions Copyright (c) 1994, Regents of the University of California
11
11
  *
12
12
  * src/include/libpq/pqcomm.h
@@ -17,54 +17,22 @@
17
17
  #define PQCOMM_H
18
18
 
19
19
  #include <sys/socket.h>
20
- #include <netdb.h>
21
- #ifdef HAVE_SYS_UN_H
22
20
  #include <sys/un.h>
23
- #endif
21
+ #include <netdb.h>
24
22
  #include <netinet/in.h>
25
23
 
26
- #ifdef HAVE_STRUCT_SOCKADDR_STORAGE
27
-
28
- #ifndef HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY
29
- #ifdef HAVE_STRUCT_SOCKADDR_STORAGE___SS_FAMILY
30
- #define ss_family __ss_family
31
- #else
32
- #error struct sockaddr_storage does not provide an ss_family member
33
- #endif
34
- #endif
35
-
36
- #ifdef HAVE_STRUCT_SOCKADDR_STORAGE___SS_LEN
37
- #define ss_len __ss_len
38
- #define HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN 1
39
- #endif
40
- #else /* !HAVE_STRUCT_SOCKADDR_STORAGE */
41
-
42
- /* Define a struct sockaddr_storage if we don't have one. */
43
-
44
- struct sockaddr_storage
45
- {
46
- union
47
- {
48
- struct sockaddr sa; /* get the system-dependent fields */
49
- int64 ss_align; /* ensures struct is properly aligned */
50
- char ss_pad[128]; /* ensures struct has desired size */
51
- } ss_stuff;
52
- };
53
-
54
- #define ss_family ss_stuff.sa.sa_family
55
- /* It should have an ss_len field if sockaddr has sa_len. */
56
- #ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
57
- #define ss_len ss_stuff.sa.sa_len
58
- #define HAVE_STRUCT_SOCKADDR_STORAGE_SS_LEN 1
59
- #endif
60
- #endif /* HAVE_STRUCT_SOCKADDR_STORAGE */
61
-
62
24
  typedef struct
63
25
  {
64
26
  struct sockaddr_storage addr;
65
- ACCEPT_TYPE_ARG3 salen;
27
+ socklen_t salen;
66
28
  } SockAddr;
67
29
 
30
+ typedef struct
31
+ {
32
+ int family;
33
+ SockAddr addr;
34
+ } AddrInfo;
35
+
68
36
  /* Configure the UNIX socket location for the well known port. */
69
37
 
70
38
  #define UNIXSOCK_PATH(path, port, sockdir) \
@@ -85,6 +53,15 @@ typedef struct
85
53
  */
86
54
  #define UNIXSOCK_PATH_BUFLEN sizeof(((struct sockaddr_un *) NULL)->sun_path)
87
55
 
56
+ /*
57
+ * A host that looks either like an absolute path or starts with @ is
58
+ * interpreted as a Unix-domain socket address.
59
+ */
60
+ static inline bool
61
+ is_unixsock_path(const char *path)
62
+ {
63
+ return is_absolute_path(path) || path[0] == '@';
64
+ }
88
65
 
89
66
  /*
90
67
  * These manipulate the frontend/backend protocol version number.
@@ -105,9 +82,12 @@ typedef struct
105
82
  #define PG_PROTOCOL_MINOR(v) ((v) & 0x0000ffff)
106
83
  #define PG_PROTOCOL(m,n) (((m) << 16) | (n))
107
84
 
108
- /* The earliest and latest frontend/backend protocol version supported. */
85
+ /*
86
+ * The earliest and latest frontend/backend protocol version supported.
87
+ * (Only protocol version 3 is currently supported)
88
+ */
109
89
 
110
- #define PG_PROTOCOL_EARLIEST PG_PROTOCOL(2,0)
90
+ #define PG_PROTOCOL_EARLIEST PG_PROTOCOL(3,0)
111
91
  #define PG_PROTOCOL_LATEST PG_PROTOCOL(3,0)
112
92
 
113
93
  typedef uint32 ProtocolVersion; /* FE/BE protocol version number */
@@ -123,33 +103,7 @@ typedef ProtocolVersion MsgType;
123
103
 
124
104
  typedef uint32 PacketLen;
125
105
 
126
-
127
- /*
128
- * Old-style startup packet layout with fixed-width fields. This is used in
129
- * protocol 1.0 and 2.0, but not in later versions. Note that the fields
130
- * in this layout are '\0' terminated only if there is room.
131
- */
132
-
133
- #define SM_DATABASE 64
134
- #define SM_USER 32
135
- /* We append database name if db_user_namespace true. */
136
- #define SM_DATABASE_USER (SM_DATABASE+SM_USER+1) /* +1 for @ */
137
- #define SM_OPTIONS 64
138
- #define SM_UNUSED 64
139
- #define SM_TTY 64
140
-
141
- typedef struct StartupPacket
142
- {
143
- ProtocolVersion protoVersion; /* Protocol version */
144
- char database[SM_DATABASE]; /* Database name */
145
- /* Db_user_namespace appends dbname */
146
- char user[SM_USER]; /* User name */
147
- char options[SM_OPTIONS]; /* Optional additional args */
148
- char unused[SM_UNUSED]; /* Unused */
149
- char tty[SM_TTY]; /* Tty for debug output */
150
- } StartupPacket;
151
-
152
- extern bool Db_user_namespace;
106
+ extern PGDLLIMPORT bool Db_user_namespace;
153
107
 
154
108
  /*
155
109
  * In protocol 3.0 and later, the startup packet length is not fixed, but
@@ -168,13 +122,14 @@ extern bool Db_user_namespace;
168
122
  #define AUTH_REQ_PASSWORD 3 /* Password */
169
123
  #define AUTH_REQ_CRYPT 4 /* crypt password. Not supported any more. */
170
124
  #define AUTH_REQ_MD5 5 /* md5 password */
171
- #define AUTH_REQ_SCM_CREDS 6 /* transfer SCM credentials */
125
+ /* 6 is available. It was used for SCM creds, not supported any more. */
172
126
  #define AUTH_REQ_GSS 7 /* GSSAPI without wrap() */
173
127
  #define AUTH_REQ_GSS_CONT 8 /* Continue GSS exchanges */
174
128
  #define AUTH_REQ_SSPI 9 /* SSPI negotiate without wrap() */
175
129
  #define AUTH_REQ_SASL 10 /* Begin SASL authentication */
176
130
  #define AUTH_REQ_SASL_CONT 11 /* Continue SASL authentication */
177
131
  #define AUTH_REQ_SASL_FIN 12 /* Final SASL message */
132
+ #define AUTH_REQ_MAX AUTH_REQ_SASL_FIN /* maximum AUTH_REQ_* value */
178
133
 
179
134
  typedef uint32 AuthRequest;
180
135
 
@@ -3,7 +3,7 @@
3
3
  * pqformat.h
4
4
  * Definitions for formatting and parsing frontend/backend messages
5
5
  *
6
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/libpq/pqformat.h
@@ -22,7 +22,7 @@ extern void pq_beginmessage_reuse(StringInfo buf, char msgtype);
22
22
  extern void pq_endmessage(StringInfo buf);
23
23
  extern void pq_endmessage_reuse(StringInfo buf);
24
24
 
25
- extern void pq_sendbytes(StringInfo buf, const char *data, int datalen);
25
+ extern void pq_sendbytes(StringInfo buf, const void *data, int datalen);
26
26
  extern void pq_sendcountedtext(StringInfo buf, const char *str, int slen,
27
27
  bool countincludesself);
28
28
  extern void pq_sendtext(StringInfo buf, const char *str, int slen);
@@ -3,7 +3,7 @@
3
3
  * pqsignal.h
4
4
  * Backend signal(2) support (see also src/port/pqsignal.c)
5
5
  *
6
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/libpq/pqsignal.h
@@ -15,28 +15,40 @@
15
15
 
16
16
  #include <signal.h>
17
17
 
18
- #ifndef WIN32
19
- #define PG_SETMASK(mask) sigprocmask(SIG_SETMASK, mask, NULL)
20
- #else
18
+ #ifdef WIN32
21
19
  /* Emulate POSIX sigset_t APIs on Windows */
22
20
  typedef int sigset_t;
23
21
 
24
- extern int pqsigsetmask(int mask);
25
-
26
- #define PG_SETMASK(mask) pqsigsetmask(*(mask))
22
+ #define SA_RESTART 1
23
+ #define SA_NODEFER 2
24
+
25
+ struct sigaction
26
+ {
27
+ void (*sa_handler) (int);
28
+ /* sa_sigaction not yet implemented */
29
+ sigset_t sa_mask;
30
+ int sa_flags;
31
+ };
32
+
33
+ extern int pqsigprocmask(int how, const sigset_t *set, sigset_t *oset);
34
+ extern int pqsigaction(int signum, const struct sigaction *act,
35
+ struct sigaction *oldact);
36
+
37
+ #define SIG_BLOCK 1
38
+ #define SIG_UNBLOCK 2
39
+ #define SIG_SETMASK 3
40
+ #define sigprocmask(how, set, oset) pqsigprocmask((how), (set), (oset))
41
+ #define sigaction(signum, act, oldact) pqsigaction((signum), (act), (oldact))
27
42
  #define sigemptyset(set) (*(set) = 0)
28
43
  #define sigfillset(set) (*(set) = ~0)
29
44
  #define sigaddset(set, signum) (*(set) |= (sigmask(signum)))
30
45
  #define sigdelset(set, signum) (*(set) &= ~(sigmask(signum)))
31
46
  #endif /* WIN32 */
32
47
 
33
- extern sigset_t UnBlockSig,
34
- BlockSig,
35
- StartupBlockSig;
48
+ extern PGDLLIMPORT sigset_t UnBlockSig;
49
+ extern PGDLLIMPORT sigset_t BlockSig;
50
+ extern PGDLLIMPORT sigset_t StartupBlockSig;
36
51
 
37
52
  extern void pqinitmask(void);
38
53
 
39
- /* pqsigfunc is declared in src/include/port.h */
40
- extern pqsigfunc pqsignal_pm(int signo, pqsigfunc func);
41
-
42
54
  #endif /* PQSIGNAL_H */
@@ -0,0 +1,136 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * sasl.h
4
+ * Defines the SASL mechanism interface for the backend.
5
+ *
6
+ * Each SASL mechanism defines a frontend and a backend callback structure.
7
+ *
8
+ * See src/interfaces/libpq/fe-auth-sasl.h for the frontend counterpart.
9
+ *
10
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
11
+ * Portions Copyright (c) 1994, Regents of the University of California
12
+ *
13
+ * src/include/libpq/sasl.h
14
+ *
15
+ *-------------------------------------------------------------------------
16
+ */
17
+
18
+ #ifndef PG_SASL_H
19
+ #define PG_SASL_H
20
+
21
+ #include "lib/stringinfo.h"
22
+ #include "libpq/libpq-be.h"
23
+
24
+ /* Status codes for message exchange */
25
+ #define PG_SASL_EXCHANGE_CONTINUE 0
26
+ #define PG_SASL_EXCHANGE_SUCCESS 1
27
+ #define PG_SASL_EXCHANGE_FAILURE 2
28
+
29
+ /*
30
+ * Backend SASL mechanism callbacks.
31
+ *
32
+ * To implement a backend mechanism, declare a pg_be_sasl_mech struct with
33
+ * appropriate callback implementations. Then pass the mechanism to
34
+ * CheckSASLAuth() during ClientAuthentication(), once the server has decided
35
+ * which authentication method to use.
36
+ */
37
+ typedef struct pg_be_sasl_mech
38
+ {
39
+ /*---------
40
+ * get_mechanisms()
41
+ *
42
+ * Retrieves the list of SASL mechanism names supported by this
43
+ * implementation.
44
+ *
45
+ * Input parameters:
46
+ *
47
+ * port: The client Port
48
+ *
49
+ * Output parameters:
50
+ *
51
+ * buf: A StringInfo buffer that the callback should populate with
52
+ * supported mechanism names. The names are appended into this
53
+ * StringInfo, each one ending with '\0' bytes.
54
+ *---------
55
+ */
56
+ void (*get_mechanisms) (Port *port, StringInfo buf);
57
+
58
+ /*---------
59
+ * init()
60
+ *
61
+ * Initializes mechanism-specific state for a connection. This callback
62
+ * must return a pointer to its allocated state, which will be passed
63
+ * as-is as the first argument to the other callbacks.
64
+ *
65
+ * Input parameters:
66
+ *
67
+ * port: The client Port.
68
+ *
69
+ * mech: The actual mechanism name in use by the client.
70
+ *
71
+ * shadow_pass: The stored secret for the role being authenticated, or
72
+ * NULL if one does not exist. Mechanisms that do not use
73
+ * shadow entries may ignore this parameter. If a
74
+ * mechanism uses shadow entries but shadow_pass is NULL,
75
+ * the implementation must continue the exchange as if the
76
+ * user existed and the password did not match, to avoid
77
+ * disclosing valid user names.
78
+ *---------
79
+ */
80
+ void *(*init) (Port *port, const char *mech, const char *shadow_pass);
81
+
82
+ /*---------
83
+ * exchange()
84
+ *
85
+ * Produces a server challenge to be sent to the client. The callback
86
+ * must return one of the PG_SASL_EXCHANGE_* values, depending on
87
+ * whether the exchange continues, has finished successfully, or has
88
+ * failed.
89
+ *
90
+ * Input parameters:
91
+ *
92
+ * state: The opaque mechanism state returned by init()
93
+ *
94
+ * input: The response data sent by the client, or NULL if the
95
+ * mechanism is client-first but the client did not send an
96
+ * initial response. (This can only happen during the first
97
+ * message from the client.) This is guaranteed to be
98
+ * null-terminated for safety, but SASL allows embedded
99
+ * nulls in responses, so mechanisms must be careful to
100
+ * check inputlen.
101
+ *
102
+ * inputlen: The length of the challenge data sent by the server, or
103
+ * -1 if the client did not send an initial response
104
+ *
105
+ * Output parameters, to be set by the callback function:
106
+ *
107
+ * output: A palloc'd buffer containing either the server's next
108
+ * challenge (if PG_SASL_EXCHANGE_CONTINUE is returned) or
109
+ * the server's outcome data (if PG_SASL_EXCHANGE_SUCCESS is
110
+ * returned and the mechanism requires data to be sent during
111
+ * a successful outcome). The callback should set this to
112
+ * NULL if the exchange is over and no output should be sent,
113
+ * which should correspond to either PG_SASL_EXCHANGE_FAILURE
114
+ * or a PG_SASL_EXCHANGE_SUCCESS with no outcome data.
115
+ *
116
+ * outputlen: The length of the challenge data. Ignored if *output is
117
+ * NULL.
118
+ *
119
+ * logdetail: Set to an optional DETAIL message to be printed to the
120
+ * server log, to disambiguate failure modes. (The client
121
+ * will only ever see the same generic authentication
122
+ * failure message.) Ignored if the exchange is completed
123
+ * with PG_SASL_EXCHANGE_SUCCESS.
124
+ *---------
125
+ */
126
+ int (*exchange) (void *state,
127
+ const char *input, int inputlen,
128
+ char **output, int *outputlen,
129
+ const char **logdetail);
130
+ } pg_be_sasl_mech;
131
+
132
+ /* Common implementation for auth.c */
133
+ extern int CheckSASLAuth(const pg_be_sasl_mech *mech, Port *port,
134
+ char *shadow_pass, const char **logdetail);
135
+
136
+ #endif /* PG_SASL_H */
@@ -0,0 +1,37 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * scram.h
4
+ * Interface to libpq/scram.c
5
+ *
6
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1994, Regents of the University of California
8
+ *
9
+ * src/include/libpq/scram.h
10
+ *
11
+ *-------------------------------------------------------------------------
12
+ */
13
+ #ifndef PG_SCRAM_H
14
+ #define PG_SCRAM_H
15
+
16
+ #include "common/cryptohash.h"
17
+ #include "lib/stringinfo.h"
18
+ #include "libpq/libpq-be.h"
19
+ #include "libpq/sasl.h"
20
+
21
+ /* Number of iterations when generating new secrets */
22
+ extern PGDLLIMPORT int scram_sha_256_iterations;
23
+
24
+ /* SASL implementation callbacks */
25
+ extern PGDLLIMPORT const pg_be_sasl_mech pg_be_scram_mech;
26
+
27
+ /* Routines to handle and check SCRAM-SHA-256 secret */
28
+ extern char *pg_be_scram_build_secret(const char *password);
29
+ extern bool parse_scram_secret(const char *secret,
30
+ int *iterations,
31
+ pg_cryptohash_type *hash_type,
32
+ int *key_length, char **salt,
33
+ uint8 *stored_key, uint8 *server_key);
34
+ extern bool scram_verify_plain_password(const char *username,
35
+ const char *password, const char *secret);
36
+
37
+ #endif /* PG_SCRAM_H */