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
@@ -1,5 +1,6 @@
1
1
  #include "pg_query.h"
2
2
  #include "pg_query_internal.h"
3
+ #include "pg_query_fingerprint.h"
3
4
 
4
5
  #include "parser/parser.h"
5
6
  #include "parser/scanner.h"
@@ -7,6 +8,8 @@
7
8
  #include "mb/pg_wchar.h"
8
9
  #include "nodes/nodeFuncs.h"
9
10
 
11
+ #include "pg_query_outfuncs.h"
12
+
10
13
  /*
11
14
  * Struct for tracking locations/lengths of constants during normalization
12
15
  */
@@ -14,6 +17,7 @@ typedef struct pgssLocationLen
14
17
  {
15
18
  int location; /* start offset in query text */
16
19
  int length; /* length in bytes, or -1 to ignore */
20
+ int param_id; /* Param id to use - if negative prefix, need to abs(..) and add highest_extern_param_id */
17
21
  } pgssLocationLen;
18
22
 
19
23
  /*
@@ -30,14 +34,32 @@ typedef struct pgssConstLocations
30
34
  /* Current number of valid entries in clocations array */
31
35
  int clocations_count;
32
36
 
37
+ /* highest Param id we have assigned, not yet taking into account external param refs */
38
+ int highest_normalize_param_id;
39
+
33
40
  /* highest Param id we've seen, in order to start normalization correctly */
34
41
  int highest_extern_param_id;
35
42
 
36
43
  /* query text */
37
44
  const char * query;
38
45
  int query_len;
46
+
47
+ /* optional recording of assigned or discovered param refs, only active if param_refs is not NULL */
48
+ int *param_refs;
49
+ int param_refs_buf_size;
50
+ int param_refs_count;
39
51
  } pgssConstLocations;
40
52
 
53
+ /*
54
+ * Intermediate working state struct to remember param refs for individual target list elements
55
+ */
56
+ typedef struct FpAndParamRefs
57
+ {
58
+ uint64_t fp;
59
+ int* param_refs;
60
+ int param_refs_count;
61
+ } FpAndParamRefs;
62
+
41
63
  /*
42
64
  * comp_location: comparator for qsorting pgssLocationLen structs by location
43
65
  */
@@ -230,7 +252,8 @@ generate_normalized_query(pgssConstLocations *jstate, int query_loc, int* query_
230
252
  for (i = 0; i < jstate->clocations_count; i++)
231
253
  {
232
254
  int off, /* Offset from start for cur tok */
233
- tok_len; /* Length (in bytes) of that tok */
255
+ tok_len, /* Length (in bytes) of that tok */
256
+ param_id; /* Param ID to be assigned */
234
257
 
235
258
  off = jstate->clocations[i].location;
236
259
  /* Adjust recorded location if we're dealing with partial string */
@@ -250,8 +273,10 @@ generate_normalized_query(pgssConstLocations *jstate, int query_loc, int* query_
250
273
  n_quer_loc += len_to_wrt;
251
274
 
252
275
  /* And insert a param symbol in place of the constant token */
253
- n_quer_loc += sprintf(norm_query + n_quer_loc, "$%d",
254
- i + 1 + jstate->highest_extern_param_id);
276
+ param_id = (jstate->clocations[i].param_id < 0) ?
277
+ jstate->highest_extern_param_id + abs(jstate->clocations[i].param_id) :
278
+ jstate->clocations[i].param_id;
279
+ n_quer_loc += sprintf(norm_query + n_quer_loc, "$%d", param_id);
255
280
 
256
281
  quer_loc = off + tok_len;
257
282
  last_off = off;
@@ -292,10 +317,43 @@ static void RecordConstLocation(pgssConstLocations *jstate, int location)
292
317
  jstate->clocations[jstate->clocations_count].location = location;
293
318
  /* initialize lengths to -1 to simplify fill_in_constant_lengths */
294
319
  jstate->clocations[jstate->clocations_count].length = -1;
320
+ /* by default we assume that we need a new param ref */
321
+ jstate->clocations[jstate->clocations_count].param_id = - jstate->highest_normalize_param_id;
322
+ jstate->highest_normalize_param_id++;
323
+ /* record param ref number if requested */
324
+ if (jstate->param_refs != NULL) {
325
+ jstate->param_refs[jstate->param_refs_count] = jstate->clocations[jstate->clocations_count].param_id;
326
+ jstate->param_refs_count++;
327
+ if (jstate->param_refs_count >= jstate->param_refs_buf_size) {
328
+ jstate->param_refs_buf_size *= 2;
329
+ jstate->param_refs = (int *) repalloc(jstate->param_refs, jstate->param_refs_buf_size * sizeof(int));
330
+ }
331
+ }
295
332
  jstate->clocations_count++;
296
333
  }
297
334
  }
298
335
 
336
+ static void record_defelem_arg_location(pgssConstLocations *jstate, int location)
337
+ {
338
+ for (int i = location; i < jstate->query_len; i++) {
339
+ if (jstate->query[i] == '\'' || jstate->query[i] == '$') {
340
+ RecordConstLocation(jstate, i);
341
+ break;
342
+ }
343
+ }
344
+ }
345
+
346
+ static void record_matching_string(pgssConstLocations *jstate, const char *str)
347
+ {
348
+ char *loc = NULL;
349
+ if (str == NULL)
350
+ return;
351
+
352
+ loc = strstr(jstate->query, str);
353
+ if (loc != NULL)
354
+ RecordConstLocation(jstate, loc - jstate->query - 1);
355
+ }
356
+
299
357
  static bool const_record_walker(Node *node, pgssConstLocations *jstate)
300
358
  {
301
359
  bool result;
@@ -303,71 +361,201 @@ static bool const_record_walker(Node *node, pgssConstLocations *jstate)
303
361
 
304
362
  if (node == NULL) return false;
305
363
 
306
- if (IsA(node, A_Const))
307
- {
308
- RecordConstLocation(jstate, castNode(A_Const, node)->location);
309
- }
310
- else if (IsA(node, ParamRef))
311
- {
312
- /* Track the highest ParamRef number */
313
- if (((ParamRef *) node)->number > jstate->highest_extern_param_id)
314
- jstate->highest_extern_param_id = castNode(ParamRef, node)->number;
315
- }
316
- else if (IsA(node, DefElem))
364
+ switch (nodeTag(node))
317
365
  {
318
- DefElem * defElem = (DefElem *) node;
319
- if (defElem->arg != NULL && IsA(defElem->arg, String)) {
320
- for (int i = defElem->location; i < jstate->query_len; i++) {
321
- if (jstate->query[i] == '\'') {
322
- RecordConstLocation(jstate, i);
323
- break;
324
- }
366
+ case T_A_Const:
367
+ RecordConstLocation(jstate, castNode(A_Const, node)->location);
368
+ break;
369
+ case T_ParamRef:
370
+ {
371
+ /* Track the highest ParamRef number */
372
+ if (((ParamRef *) node)->number > jstate->highest_extern_param_id)
373
+ jstate->highest_extern_param_id = castNode(ParamRef, node)->number;
374
+
375
+ if (jstate->param_refs != NULL) {
376
+ jstate->param_refs[jstate->param_refs_count] = ((ParamRef *) node)->number;
377
+ jstate->param_refs_count++;
378
+ if (jstate->param_refs_count >= jstate->param_refs_buf_size) {
379
+ jstate->param_refs_buf_size *= 2;
380
+ jstate->param_refs = (int *) repalloc(jstate->param_refs, jstate->param_refs_buf_size * sizeof(int));
381
+ }
382
+ }
325
383
  }
326
- }
327
- return const_record_walker((Node *) ((DefElem *) node)->arg, jstate);
328
- }
329
- else if (IsA(node, RawStmt))
330
- {
331
- return const_record_walker((Node *) ((RawStmt *) node)->stmt, jstate);
332
- }
333
- else if (IsA(node, VariableSetStmt))
334
- {
335
- return const_record_walker((Node *) ((VariableSetStmt *) node)->args, jstate);
336
- }
337
- else if (IsA(node, CopyStmt))
338
- {
339
- return const_record_walker((Node *) ((CopyStmt *) node)->query, jstate);
340
- }
341
- else if (IsA(node, ExplainStmt))
342
- {
343
- return const_record_walker((Node *) ((ExplainStmt *) node)->query, jstate);
344
- }
345
- else if (IsA(node, CreateRoleStmt))
346
- {
347
- return const_record_walker((Node *) ((CreateRoleStmt *) node)->options, jstate);
348
- }
349
- else if (IsA(node, AlterRoleStmt))
350
- {
351
- return const_record_walker((Node *) ((AlterRoleStmt *) node)->options, jstate);
352
- }
353
- else if (IsA(node, DeclareCursorStmt))
354
- {
355
- return const_record_walker((Node *) ((DeclareCursorStmt *) node)->query, jstate);
356
- }
384
+ break;
385
+ case T_DefElem:
386
+ {
387
+ DefElem * defElem = (DefElem *) node;
388
+ if (defElem->arg == NULL) {
389
+ // No argument
390
+ } else if (IsA(defElem->arg, String)) {
391
+ record_defelem_arg_location(jstate, defElem->location);
392
+ } else if (IsA(defElem->arg, List) && list_length((List *) defElem->arg) == 1 && IsA(linitial((List *) defElem->arg), String)) {
393
+ record_defelem_arg_location(jstate, defElem->location);
394
+ }
395
+ return const_record_walker((Node *) ((DefElem *) node)->arg, jstate);
396
+ }
397
+ break;
398
+ case T_RawStmt:
399
+ return const_record_walker((Node *) ((RawStmt *) node)->stmt, jstate);
400
+ case T_VariableSetStmt:
401
+ return const_record_walker((Node *) ((VariableSetStmt *) node)->args, jstate);
402
+ case T_CopyStmt:
403
+ return const_record_walker((Node *) ((CopyStmt *) node)->query, jstate);
404
+ case T_ExplainStmt:
405
+ return const_record_walker((Node *) ((ExplainStmt *) node)->query, jstate);
406
+ case T_CreateRoleStmt:
407
+ return const_record_walker((Node *) ((CreateRoleStmt *) node)->options, jstate);
408
+ case T_AlterRoleStmt:
409
+ return const_record_walker((Node *) ((AlterRoleStmt *) node)->options, jstate);
410
+ case T_DeclareCursorStmt:
411
+ return const_record_walker((Node *) ((DeclareCursorStmt *) node)->query, jstate);
412
+ case T_CreateFunctionStmt:
413
+ return const_record_walker((Node *) ((CreateFunctionStmt *) node)->options, jstate);
414
+ case T_DoStmt:
415
+ return const_record_walker((Node *) ((DoStmt *) node)->args, jstate);
416
+ case T_CreateSubscriptionStmt:
417
+ record_matching_string(jstate, ((CreateSubscriptionStmt *) node)->conninfo);
418
+ break;
419
+ case T_AlterSubscriptionStmt:
420
+ record_matching_string(jstate, ((AlterSubscriptionStmt *) node)->conninfo);
421
+ break;
422
+ case T_CreateUserMappingStmt:
423
+ return const_record_walker((Node *) ((CreateUserMappingStmt *) node)->options, jstate);
424
+ case T_AlterUserMappingStmt:
425
+ return const_record_walker((Node *) ((AlterUserMappingStmt *) node)->options, jstate);
426
+ case T_TypeName:
427
+ /* Don't normalize constants in typmods or arrayBounds */
428
+ return false;
429
+ case T_SelectStmt:
430
+ {
431
+ SelectStmt *stmt = (SelectStmt *) node;
432
+ ListCell *lc;
433
+ List *fp_and_param_refs_list = NIL;
434
+
435
+ if (const_record_walker((Node *) stmt->distinctClause, jstate))
436
+ return true;
437
+ if (const_record_walker((Node *) stmt->intoClause, jstate))
438
+ return true;
439
+ foreach(lc, stmt->targetList)
440
+ {
441
+ ResTarget *res_target = lfirst_node(ResTarget, lc);
442
+ FpAndParamRefs *fp_and_param_refs = palloc0(sizeof(FpAndParamRefs));
443
+
444
+ /* Save all param refs we encounter or assign */
445
+ jstate->param_refs = palloc0(1 * sizeof(int));
446
+ jstate->param_refs_buf_size = 1;
447
+ jstate->param_refs_count = 0;
448
+
449
+ /* Walk the element */
450
+ if (const_record_walker((Node *) res_target, jstate))
451
+ return true;
452
+
453
+ /* Remember fingerprint and param refs for later */
454
+ fp_and_param_refs->fp = pg_query_fingerprint_node(res_target->val);
455
+ fp_and_param_refs->param_refs = jstate->param_refs;
456
+ fp_and_param_refs->param_refs_count = jstate->param_refs_count;
457
+ fp_and_param_refs_list = lappend(fp_and_param_refs_list, fp_and_param_refs);
458
+
459
+ /* Reset for next element, or stop recording if this is the last element */
460
+ jstate->param_refs = NULL;
461
+ jstate->param_refs_buf_size = 0;
462
+ jstate->param_refs_count = 0;
463
+ }
464
+ if (const_record_walker((Node *) stmt->fromClause, jstate))
465
+ return true;
466
+ if (const_record_walker((Node *) stmt->whereClause, jstate))
467
+ return true;
357
468
 
358
- PG_TRY();
359
- {
360
- result = raw_expression_tree_walker(node, const_record_walker, (void*) jstate);
361
- }
362
- PG_CATCH();
363
- {
364
- MemoryContextSwitchTo(normalize_context);
365
- result = false;
366
- FlushErrorState();
469
+ /*
470
+ * Instead of walking all of groupClause (like raw_expression_tree_walker does),
471
+ * only walk certain items.
472
+ */
473
+ foreach(lc, stmt->groupClause)
474
+ {
475
+ /*
476
+ * Do not walk A_Const values that are simple integers, this avoids
477
+ * turning "GROUP BY 1" into "GROUP BY $n", which obscures an important
478
+ * semantic meaning. This matches how pg_stat_statements handles the
479
+ * GROUP BY clause (i.e. it doesn't touch these constants)
480
+ */
481
+ if (IsA(lfirst(lc), A_Const) && IsA(&castNode(A_Const, lfirst(lc))->val, Integer))
482
+ continue;
483
+
484
+ /*
485
+ * Match up GROUP BY clauses against the target list, to assign the same
486
+ * param refs as used in the target list - this ensures the query is valid,
487
+ * instead of throwing a bogus "columns ... must appear in the GROUP BY
488
+ * clause or be used in an aggregate function" error
489
+ */
490
+ uint64_t fp = pg_query_fingerprint_node(lfirst(lc));
491
+ FpAndParamRefs *fppr = NULL;
492
+ ListCell *lc2;
493
+ foreach(lc2, fp_and_param_refs_list) {
494
+ if (fp == ((FpAndParamRefs *) lfirst(lc2))->fp) {
495
+ fppr = (FpAndParamRefs *) lfirst(lc2);
496
+ foreach_delete_current(fp_and_param_refs_list, lc2);
497
+ break;
498
+ }
499
+ }
500
+
501
+ int prev_cloc_count = jstate->clocations_count;
502
+ if (const_record_walker((Node *) lfirst(lc), jstate))
503
+ return true;
504
+
505
+ if (fppr != NULL && fppr->param_refs_count == jstate->clocations_count - prev_cloc_count) {
506
+ for (int i = prev_cloc_count; i < jstate->clocations_count; i++) {
507
+ jstate->clocations[i].param_id = fppr->param_refs[i - prev_cloc_count];
508
+ }
509
+ jstate->highest_normalize_param_id -= fppr->param_refs_count;
510
+ }
511
+ }
512
+ foreach(lc, stmt->sortClause)
513
+ {
514
+ /* Similarly, don't turn "ORDER BY 1" into "ORDER BY $n" */
515
+ if (IsA(lfirst(lc), SortBy) && IsA(castNode(SortBy, lfirst(lc))->node, A_Const) &&
516
+ IsA(&castNode(A_Const, castNode(SortBy, lfirst(lc))->node)->val, Integer))
517
+ continue;
518
+
519
+ if (const_record_walker((Node *) lfirst(lc), jstate))
520
+ return true;
521
+ }
522
+ if (const_record_walker((Node *) stmt->havingClause, jstate))
523
+ return true;
524
+ if (const_record_walker((Node *) stmt->windowClause, jstate))
525
+ return true;
526
+ if (const_record_walker((Node *) stmt->valuesLists, jstate))
527
+ return true;
528
+ if (const_record_walker((Node *) stmt->limitOffset, jstate))
529
+ return true;
530
+ if (const_record_walker((Node *) stmt->limitCount, jstate))
531
+ return true;
532
+ if (const_record_walker((Node *) stmt->lockingClause, jstate))
533
+ return true;
534
+ if (const_record_walker((Node *) stmt->withClause, jstate))
535
+ return true;
536
+ if (const_record_walker((Node *) stmt->larg, jstate))
537
+ return true;
538
+ if (const_record_walker((Node *) stmt->rarg, jstate))
539
+ return true;
540
+
541
+ return false;
542
+ }
543
+ default:
544
+ {
545
+ PG_TRY();
546
+ {
547
+ return raw_expression_tree_walker(node, const_record_walker, (void*) jstate);
548
+ }
549
+ PG_CATCH();
550
+ {
551
+ MemoryContextSwitchTo(normalize_context);
552
+ FlushErrorState();
553
+ }
554
+ PG_END_TRY();
555
+ }
367
556
  }
368
- PG_END_TRY();
369
557
 
370
- return result;
558
+ return false;
371
559
  }
372
560
 
373
561
  PgQueryNormalizeResult pg_query_normalize(const char* input)
@@ -384,7 +572,7 @@ PgQueryNormalizeResult pg_query_normalize(const char* input)
384
572
  int query_len;
385
573
 
386
574
  /* Parse query */
387
- tree = raw_parser(input);
575
+ tree = raw_parser(input, RAW_PARSE_DEFAULT);
388
576
 
389
577
  query_len = (int) strlen(input);
390
578
 
@@ -393,9 +581,13 @@ PgQueryNormalizeResult pg_query_normalize(const char* input)
393
581
  jstate.clocations = (pgssLocationLen *)
394
582
  palloc(jstate.clocations_buf_size * sizeof(pgssLocationLen));
395
583
  jstate.clocations_count = 0;
584
+ jstate.highest_normalize_param_id = 1;
396
585
  jstate.highest_extern_param_id = 0;
397
586
  jstate.query = input;
398
587
  jstate.query_len = query_len;
588
+ jstate.param_refs = NULL;
589
+ jstate.param_refs_buf_size = 0;
590
+ jstate.param_refs_count = 0;
399
591
 
400
592
  /* Walk tree and record const locations */
401
593
  const_record_walker((Node *) tree, &jstate);
@@ -414,6 +606,8 @@ PgQueryNormalizeResult pg_query_normalize(const char* input)
414
606
  error = malloc(sizeof(PgQueryError));
415
607
  error->message = strdup(error_data->message);
416
608
  error->filename = strdup(error_data->filename);
609
+ error->funcname = strdup(error_data->funcname);
610
+ error->context = NULL;
417
611
  error->lineno = error_data->lineno;
418
612
  error->cursorpos = error_data->cursorpos;
419
613
 
@@ -432,6 +626,7 @@ void pg_query_free_normalize_result(PgQueryNormalizeResult result)
432
626
  if (result.error) {
433
627
  free(result.error->message);
434
628
  free(result.error->filename);
629
+ free(result.error->funcname);
435
630
  free(result.error);
436
631
  }
437
632
 
@@ -5,6 +5,7 @@
5
5
 
6
6
  PgQueryProtobuf pg_query_nodes_to_protobuf(const void *obj);
7
7
 
8
+ char *pg_query_node_to_json(const void *obj);
8
9
  char *pg_query_nodes_to_json(const void *obj);
9
10
 
10
11
  #endif
@@ -36,6 +36,12 @@
36
36
  appendStringInfo(out, "\"" CppAsString(outname_json) "\":%u,", node->fldname); \
37
37
  }
38
38
 
39
+ /* Write an unsigned integer field */
40
+ #define WRITE_UINT64_FIELD(outname, outname_json, fldname) \
41
+ if (node->fldname != 0) { \
42
+ appendStringInfo(out, "\"" CppAsString(outname_json) "\":" UINT64_FORMAT ",", node->fldname); \
43
+ }
44
+
39
45
  /* Write a long-integer field */
40
46
  #define WRITE_LONG_FIELD(outname, outname_json, fldname) \
41
47
  if (node->fldname != 0) { \
@@ -195,39 +201,77 @@ _outOidList(StringInfo out, const List *node)
195
201
  }
196
202
 
197
203
  static void
198
- _outInteger(StringInfo out, const Value *node)
204
+ _outInteger(StringInfo out, const Integer *node)
199
205
  {
200
- appendStringInfo(out, "\"ival\":%d,", node->val.ival);
206
+ if (node->ival > 0)
207
+ appendStringInfo(out, "\"ival\":%d", node->ival);
201
208
  }
202
209
 
203
210
  static void
204
- _outFloat(StringInfo out, const Value *node)
211
+ _outBoolean(StringInfo out, const Boolean *node)
205
212
  {
206
- appendStringInfo(out, "\"str\":");
207
- _outToken(out, node->val.str);
208
- appendStringInfo(out, ",");
213
+ appendStringInfo(out, "\"boolval\":%s", booltostr(node->boolval));
209
214
  }
210
215
 
211
216
  static void
212
- _outString(StringInfo out, const Value *node)
217
+ _outFloat(StringInfo out, const Float *node)
213
218
  {
214
- appendStringInfo(out, "\"str\":");
215
- _outToken(out, node->val.str);
216
- appendStringInfo(out, ",");
219
+ appendStringInfo(out, "\"fval\":");
220
+ _outToken(out, node->fval);
217
221
  }
218
222
 
219
223
  static void
220
- _outBitString(StringInfo out, const Value *node)
224
+ _outString(StringInfo out, const String *node)
221
225
  {
222
- appendStringInfo(out, "\"str\":");
223
- _outToken(out, node->val.str);
224
- appendStringInfo(out, ",");
226
+ appendStringInfo(out, "\"sval\":");
227
+ _outToken(out, node->sval);
228
+ }
229
+
230
+ static void
231
+ _outBitString(StringInfo out, const BitString *node)
232
+ {
233
+ appendStringInfo(out, "\"bsval\":");
234
+ _outToken(out, node->bsval);
225
235
  }
226
236
 
227
237
  static void
228
- _outNull(StringInfo out, const Value *node)
238
+ _outAConst(StringInfo out, const A_Const *node)
229
239
  {
230
- // No fields
240
+ if (node->isnull) {
241
+ appendStringInfo(out, "\"isnull\":true");
242
+ } else {
243
+ switch (node->val.node.type) {
244
+ case T_Integer:
245
+ appendStringInfoString(out, "\"ival\":{");
246
+ _outInteger(out, &node->val.ival);
247
+ appendStringInfoChar(out, '}');
248
+ break;
249
+ case T_Float:
250
+ appendStringInfoString(out, "\"fval\":{");
251
+ _outFloat(out, &node->val.fval);
252
+ appendStringInfoChar(out, '}');
253
+ break;
254
+ case T_Boolean:
255
+ appendStringInfo(out, "\"boolval\":{%s}", node->val.boolval.boolval ? "\"boolval\":true" : "");
256
+ break;
257
+ case T_String:
258
+ appendStringInfoString(out, "\"sval\":{");
259
+ _outString(out, &node->val.sval);
260
+ appendStringInfoChar(out, '}');
261
+ break;
262
+ case T_BitString:
263
+ appendStringInfoString(out, "\"bsval\":{");
264
+ _outBitString(out, &node->val.bsval);
265
+ appendStringInfoChar(out, '}');
266
+ break;
267
+
268
+ // Unreachable, A_Const cannot contain any other nodes.
269
+ default:
270
+ Assert(false);
271
+ }
272
+ }
273
+
274
+ appendStringInfo(out, ",\"location\":%d", node->location);
231
275
  }
232
276
 
233
277
  #include "pg_query_enum_defs.c"
@@ -259,6 +303,17 @@ _outNode(StringInfo out, const void *obj)
259
303
  }
260
304
  }
261
305
 
306
+ char *
307
+ pg_query_node_to_json(const void *obj)
308
+ {
309
+ StringInfoData out;
310
+
311
+ initStringInfo(&out);
312
+ _outNode(&out, obj);
313
+
314
+ return out.data;
315
+ }
316
+
262
317
  char *
263
318
  pg_query_nodes_to_json(const void *obj)
264
319
  {
@@ -23,6 +23,7 @@
23
23
 
24
24
  #define WRITE_INT_FIELD(outname, outname_json, fldname) out->outname = node->fldname;
25
25
  #define WRITE_UINT_FIELD(outname, outname_json, fldname) out->outname = node->fldname;
26
+ #define WRITE_UINT64_FIELD(outname, outname_json, fldname) out->outname = node->fldname;
26
27
  #define WRITE_LONG_FIELD(outname, outname_json, fldname) out->outname = node->fldname;
27
28
  #define WRITE_FLOAT_FIELD(outname, outname_json, fldname) out->outname = node->fldname;
28
29
  #define WRITE_BOOL_FIELD(outname, outname_json, fldname) out->outname = node->fldname;
@@ -57,11 +58,11 @@
57
58
  #define WRITE_BITMAPSET_FIELD(outname, outname_json, fldname) \
58
59
  if (!bms_is_empty(node->fldname)) \
59
60
  { \
60
- int x = 0; \
61
+ int x = -1; \
61
62
  int i = 0; \
62
63
  out->n_##outname = bms_num_members(node->fldname); \
63
64
  out->outname = palloc(sizeof(PgQuery__Node*) * out->n_##outname); \
64
- while ((x = bms_first_member(node->fldname)) >= 0) \
65
+ while ((x = bms_next_member(node->fldname, x)) >= 0) \
65
66
  out->outname[i++] = x; \
66
67
  }
67
68
 
@@ -150,33 +151,93 @@ _outOidList(PgQuery__OidList* out, const List *node)
150
151
  // TODO: Add Bitmapset
151
152
 
152
153
  static void
153
- _outInteger(PgQuery__Integer* out, const Value *node)
154
+ _outInteger(PgQuery__Integer* out, const Integer *node)
154
155
  {
155
- out->ival = node->val.ival;
156
+ out->ival = node->ival;
156
157
  }
157
158
 
158
159
  static void
159
- _outFloat(PgQuery__Float* out, const Value *node)
160
+ _outFloat(PgQuery__Float* out, const Float *node)
160
161
  {
161
- out->str = node->val.str;
162
+ out->fval = node->fval;
162
163
  }
163
164
 
164
165
  static void
165
- _outString(PgQuery__String* out, const Value *node)
166
+ _outBoolean(PgQuery__Boolean* out, const Boolean *node)
166
167
  {
167
- out->str = node->val.str;
168
+ out->boolval = node->boolval;
168
169
  }
169
170
 
170
171
  static void
171
- _outBitString(PgQuery__BitString* out, const Value *node)
172
+ _outString(PgQuery__String* out, const String *node)
172
173
  {
173
- out->str = node->val.str;
174
+ out->sval = node->sval;
174
175
  }
175
176
 
176
177
  static void
177
- _outNull(PgQuery__Null* out, const Value *node)
178
+ _outBitString(PgQuery__BitString* out, const BitString *node)
178
179
  {
179
- // Null has no fields
180
+ out->bsval = node->bsval;
181
+ }
182
+
183
+ static void
184
+ _outAConst(PgQuery__AConst* out, const A_Const *node)
185
+ {
186
+ out->isnull = node->isnull;
187
+ out->location = node->location;
188
+
189
+ if (!node->isnull) {
190
+ switch (nodeTag(&node->val.node)) {
191
+ case T_Integer: {
192
+ PgQuery__Integer *value = palloc(sizeof(PgQuery__Integer));
193
+ pg_query__integer__init(value);
194
+ value->ival = node->val.ival.ival;
195
+
196
+ out->val_case = PG_QUERY__A__CONST__VAL_IVAL;
197
+ out->ival = value;
198
+ break;
199
+ }
200
+ case T_Float: {
201
+ PgQuery__Float *value = palloc(sizeof(PgQuery__Float));
202
+ pg_query__float__init(value);
203
+ value->fval = pstrdup(node->val.fval.fval);
204
+
205
+ out->val_case = PG_QUERY__A__CONST__VAL_FVAL;
206
+ out->fval = value;
207
+ break;
208
+ }
209
+ case T_Boolean: {
210
+ PgQuery__Boolean *value = palloc(sizeof(PgQuery__Boolean));
211
+ pg_query__boolean__init(value);
212
+ value->boolval = node->val.boolval.boolval;
213
+
214
+ out->val_case = PG_QUERY__A__CONST__VAL_BOOLVAL;
215
+ out->boolval = value;
216
+ break;
217
+ }
218
+ case T_String: {
219
+ PgQuery__String *value = palloc(sizeof(PgQuery__String));
220
+ pg_query__string__init(value);
221
+ value->sval = pstrdup(node->val.sval.sval);
222
+
223
+ out->val_case = PG_QUERY__A__CONST__VAL_SVAL;
224
+ out->sval = value;
225
+ break;
226
+ }
227
+ case T_BitString: {
228
+ PgQuery__BitString *value = palloc(sizeof(PgQuery__BitString));
229
+ pg_query__bit_string__init(value);
230
+ value->bsval = pstrdup(node->val.bsval.bsval);
231
+
232
+ out->val_case = PG_QUERY__A__CONST__VAL_BSVAL;
233
+ out->bsval = value;
234
+ break;
235
+ }
236
+ default:
237
+ // Unreachable
238
+ Assert(false);
239
+ }
240
+ }
180
241
  }
181
242
 
182
243
  #include "pg_query_enum_defs.c"