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
@@ -4,7 +4,7 @@
4
4
  * definitions for nodes/print.c
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/nodes/print.h
@@ -0,0 +1,86 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * queryjumble.h
4
+ * Query normalization and fingerprinting.
5
+ *
6
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1994, Regents of the University of California
8
+ *
9
+ * IDENTIFICATION
10
+ * src/include/nodes/queryjumble.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef QUERYJUMBLE_H
15
+ #define QUERYJUMBLE_H
16
+
17
+ #include "nodes/parsenodes.h"
18
+
19
+ /*
20
+ * Struct for tracking locations/lengths of constants during normalization
21
+ */
22
+ typedef struct LocationLen
23
+ {
24
+ int location; /* start offset in query text */
25
+ int length; /* length in bytes, or -1 to ignore */
26
+ } LocationLen;
27
+
28
+ /*
29
+ * Working state for computing a query jumble and producing a normalized
30
+ * query string
31
+ */
32
+ typedef struct JumbleState
33
+ {
34
+ /* Jumble of current query tree */
35
+ unsigned char *jumble;
36
+
37
+ /* Number of bytes used in jumble[] */
38
+ Size jumble_len;
39
+
40
+ /* Array of locations of constants that should be removed */
41
+ LocationLen *clocations;
42
+
43
+ /* Allocated length of clocations array */
44
+ int clocations_buf_size;
45
+
46
+ /* Current number of valid entries in clocations array */
47
+ int clocations_count;
48
+
49
+ /* highest Param id we've seen, in order to start normalization correctly */
50
+ int highest_extern_param_id;
51
+ } JumbleState;
52
+
53
+ /* Values for the compute_query_id GUC */
54
+ enum ComputeQueryIdType
55
+ {
56
+ COMPUTE_QUERY_ID_OFF,
57
+ COMPUTE_QUERY_ID_ON,
58
+ COMPUTE_QUERY_ID_AUTO,
59
+ COMPUTE_QUERY_ID_REGRESS
60
+ };
61
+
62
+ /* GUC parameters */
63
+ extern PGDLLIMPORT int compute_query_id;
64
+
65
+
66
+ extern const char *CleanQuerytext(const char *query, int *location, int *len);
67
+ extern JumbleState *JumbleQuery(Query *query);
68
+ extern void EnableQueryId(void);
69
+
70
+ extern PGDLLIMPORT bool query_id_enabled;
71
+
72
+ /*
73
+ * Returns whether query identifier computation has been enabled, either
74
+ * directly in the GUC or by a module when the setting is 'auto'.
75
+ */
76
+ static inline bool
77
+ IsQueryIdEnabled(void)
78
+ {
79
+ if (compute_query_id == COMPUTE_QUERY_ID_OFF)
80
+ return false;
81
+ if (compute_query_id == COMPUTE_QUERY_ID_ON)
82
+ return true;
83
+ return query_id_enabled;
84
+ }
85
+
86
+ #endif /* QUERYJUMBLE_H */
@@ -0,0 +1,111 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * replnodes.h
4
+ * definitions for replication grammar parse nodes
5
+ *
6
+ *
7
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
8
+ * Portions Copyright (c) 1994, Regents of the University of California
9
+ *
10
+ * src/include/nodes/replnodes.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef REPLNODES_H
15
+ #define REPLNODES_H
16
+
17
+ #include "access/xlogdefs.h"
18
+ #include "nodes/pg_list.h"
19
+
20
+ typedef enum ReplicationKind
21
+ {
22
+ REPLICATION_KIND_PHYSICAL,
23
+ REPLICATION_KIND_LOGICAL
24
+ } ReplicationKind;
25
+
26
+
27
+ /* ----------------------
28
+ * IDENTIFY_SYSTEM command
29
+ * ----------------------
30
+ */
31
+ typedef struct IdentifySystemCmd
32
+ {
33
+ NodeTag type;
34
+ } IdentifySystemCmd;
35
+
36
+
37
+ /* ----------------------
38
+ * BASE_BACKUP command
39
+ * ----------------------
40
+ */
41
+ typedef struct BaseBackupCmd
42
+ {
43
+ NodeTag type;
44
+ List *options;
45
+ } BaseBackupCmd;
46
+
47
+
48
+ /* ----------------------
49
+ * CREATE_REPLICATION_SLOT command
50
+ * ----------------------
51
+ */
52
+ typedef struct CreateReplicationSlotCmd
53
+ {
54
+ NodeTag type;
55
+ char *slotname;
56
+ ReplicationKind kind;
57
+ char *plugin;
58
+ bool temporary;
59
+ List *options;
60
+ } CreateReplicationSlotCmd;
61
+
62
+
63
+ /* ----------------------
64
+ * DROP_REPLICATION_SLOT command
65
+ * ----------------------
66
+ */
67
+ typedef struct DropReplicationSlotCmd
68
+ {
69
+ NodeTag type;
70
+ char *slotname;
71
+ bool wait;
72
+ } DropReplicationSlotCmd;
73
+
74
+
75
+ /* ----------------------
76
+ * START_REPLICATION command
77
+ * ----------------------
78
+ */
79
+ typedef struct StartReplicationCmd
80
+ {
81
+ NodeTag type;
82
+ ReplicationKind kind;
83
+ char *slotname;
84
+ TimeLineID timeline;
85
+ XLogRecPtr startpoint;
86
+ List *options;
87
+ } StartReplicationCmd;
88
+
89
+
90
+ /* ----------------------
91
+ * READ_REPLICATION_SLOT command
92
+ * ----------------------
93
+ */
94
+ typedef struct ReadReplicationSlotCmd
95
+ {
96
+ NodeTag type;
97
+ char *slotname;
98
+ } ReadReplicationSlotCmd;
99
+
100
+
101
+ /* ----------------------
102
+ * TIMELINE_HISTORY command
103
+ * ----------------------
104
+ */
105
+ typedef struct TimeLineHistoryCmd
106
+ {
107
+ NodeTag type;
108
+ TimeLineID timeline;
109
+ } TimeLineHistoryCmd;
110
+
111
+ #endif /* REPLNODES_H */
@@ -0,0 +1,346 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * supportnodes.h
4
+ * Definitions for planner support functions.
5
+ *
6
+ * This file defines the API for "planner support functions", which
7
+ * are SQL functions (normally written in C) that can be attached to
8
+ * another "target" function to give the system additional knowledge
9
+ * about the target function. All the current capabilities have to do
10
+ * with planning queries that use the target function, though it is
11
+ * possible that future extensions will add functionality to be invoked
12
+ * by the parser or executor.
13
+ *
14
+ * A support function must have the SQL signature
15
+ * supportfn(internal) returns internal
16
+ * The argument is a pointer to one of the Node types defined in this file.
17
+ * The result is usually also a Node pointer, though its type depends on
18
+ * which capability is being invoked. In all cases, a NULL pointer result
19
+ * (that's PG_RETURN_POINTER(NULL), not PG_RETURN_NULL()) indicates that
20
+ * the support function cannot do anything useful for the given request.
21
+ * Support functions must return a NULL pointer, not fail, if they do not
22
+ * recognize the request node type or cannot handle the given case; this
23
+ * allows for future extensions of the set of request cases.
24
+ *
25
+ *
26
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
27
+ * Portions Copyright (c) 1994, Regents of the University of California
28
+ *
29
+ * src/include/nodes/supportnodes.h
30
+ *
31
+ *-------------------------------------------------------------------------
32
+ */
33
+ #ifndef SUPPORTNODES_H
34
+ #define SUPPORTNODES_H
35
+
36
+ #include "nodes/plannodes.h"
37
+
38
+ struct PlannerInfo; /* avoid including pathnodes.h here */
39
+ struct IndexOptInfo;
40
+ struct SpecialJoinInfo;
41
+ struct WindowClause;
42
+
43
+ /*
44
+ * The Simplify request allows the support function to perform plan-time
45
+ * simplification of a call to its target function. For example, a varchar
46
+ * length coercion that does not decrease the allowed length of its argument
47
+ * could be replaced by a RelabelType node, or "x + 0" could be replaced by
48
+ * "x". This is invoked during the planner's constant-folding pass, so the
49
+ * function's arguments can be presumed already simplified.
50
+ *
51
+ * The planner's PlannerInfo "root" is typically not needed, but can be
52
+ * consulted if it's necessary to obtain info about Vars present in
53
+ * the given node tree. Beware that root could be NULL in some usages.
54
+ *
55
+ * "fcall" will be a FuncExpr invoking the support function's target
56
+ * function. (This is true even if the original parsetree node was an
57
+ * operator call; a FuncExpr is synthesized for this purpose.)
58
+ *
59
+ * The result should be a semantically-equivalent transformed node tree,
60
+ * or NULL if no simplification could be performed. Do *not* return or
61
+ * modify *fcall, as it isn't really a separately allocated Node. But
62
+ * it's okay to use fcall->args, or parts of it, in the result tree.
63
+ */
64
+ typedef struct SupportRequestSimplify
65
+ {
66
+ NodeTag type;
67
+
68
+ struct PlannerInfo *root; /* Planner's infrastructure */
69
+ FuncExpr *fcall; /* Function call to be simplified */
70
+ } SupportRequestSimplify;
71
+
72
+ /*
73
+ * The Selectivity request allows the support function to provide a
74
+ * selectivity estimate for a function appearing at top level of a WHERE
75
+ * clause (so it applies only to functions returning boolean).
76
+ *
77
+ * The input arguments are the same as are supplied to operator restriction
78
+ * and join estimators, except that we unify those two APIs into just one
79
+ * request type. See clause_selectivity() for the details.
80
+ *
81
+ * If an estimate can be made, store it into the "selectivity" field and
82
+ * return the address of the SupportRequestSelectivity node; the estimate
83
+ * must be between 0 and 1 inclusive. Return NULL if no estimate can be
84
+ * made (in which case the planner will fall back to a default estimate,
85
+ * traditionally 1/3).
86
+ *
87
+ * If the target function is being used as the implementation of an operator,
88
+ * the support function will not be used for this purpose; the operator's
89
+ * restriction or join estimator is consulted instead.
90
+ */
91
+ typedef struct SupportRequestSelectivity
92
+ {
93
+ NodeTag type;
94
+
95
+ /* Input fields: */
96
+ struct PlannerInfo *root; /* Planner's infrastructure */
97
+ Oid funcid; /* function we are inquiring about */
98
+ List *args; /* pre-simplified arguments to function */
99
+ Oid inputcollid; /* function's input collation */
100
+ bool is_join; /* is this a join or restriction case? */
101
+ int varRelid; /* if restriction, RTI of target relation */
102
+ JoinType jointype; /* if join, outer join type */
103
+ struct SpecialJoinInfo *sjinfo; /* if outer join, info about join */
104
+
105
+ /* Output fields: */
106
+ Selectivity selectivity; /* returned selectivity estimate */
107
+ } SupportRequestSelectivity;
108
+
109
+ /*
110
+ * The Cost request allows the support function to provide an execution
111
+ * cost estimate for its target function. The cost estimate can include
112
+ * both a one-time (query startup) component and a per-execution component.
113
+ * The estimate should *not* include the costs of evaluating the target
114
+ * function's arguments, only the target function itself.
115
+ *
116
+ * The "node" argument is normally the parse node that is invoking the
117
+ * target function. This is a FuncExpr in the simplest case, but it could
118
+ * also be an OpExpr, DistinctExpr, NullIfExpr, or WindowFunc, or possibly
119
+ * other cases in future. NULL is passed if the function cannot presume
120
+ * its arguments to be equivalent to what the calling node presents as
121
+ * arguments; that happens for, e.g., aggregate support functions and
122
+ * per-column comparison operators used by RowExprs.
123
+ *
124
+ * If an estimate can be made, store it into the cost fields and return the
125
+ * address of the SupportRequestCost node. Return NULL if no estimate can be
126
+ * made, in which case the planner will rely on the target function's procost
127
+ * field. (Note: while procost is automatically scaled by cpu_operator_cost,
128
+ * this is not the case for the outputs of the Cost request; the support
129
+ * function must scale its results appropriately on its own.)
130
+ */
131
+ typedef struct SupportRequestCost
132
+ {
133
+ NodeTag type;
134
+
135
+ /* Input fields: */
136
+ struct PlannerInfo *root; /* Planner's infrastructure (could be NULL) */
137
+ Oid funcid; /* function we are inquiring about */
138
+ Node *node; /* parse node invoking function, or NULL */
139
+
140
+ /* Output fields: */
141
+ Cost startup; /* one-time cost */
142
+ Cost per_tuple; /* per-evaluation cost */
143
+ } SupportRequestCost;
144
+
145
+ /*
146
+ * The Rows request allows the support function to provide an output rowcount
147
+ * estimate for its target function (so it applies only to set-returning
148
+ * functions).
149
+ *
150
+ * The "node" argument is the parse node that is invoking the target function;
151
+ * currently this will always be a FuncExpr or OpExpr.
152
+ *
153
+ * If an estimate can be made, store it into the rows field and return the
154
+ * address of the SupportRequestRows node. Return NULL if no estimate can be
155
+ * made, in which case the planner will rely on the target function's prorows
156
+ * field.
157
+ */
158
+ typedef struct SupportRequestRows
159
+ {
160
+ NodeTag type;
161
+
162
+ /* Input fields: */
163
+ struct PlannerInfo *root; /* Planner's infrastructure (could be NULL) */
164
+ Oid funcid; /* function we are inquiring about */
165
+ Node *node; /* parse node invoking function */
166
+
167
+ /* Output fields: */
168
+ double rows; /* number of rows expected to be returned */
169
+ } SupportRequestRows;
170
+
171
+ /*
172
+ * The IndexCondition request allows the support function to generate
173
+ * a directly-indexable condition based on a target function call that is
174
+ * not itself indexable. The target function call must appear at the top
175
+ * level of WHERE or JOIN/ON, so this applies only to functions returning
176
+ * boolean.
177
+ *
178
+ * The "node" argument is the parse node that is invoking the target function;
179
+ * currently this will always be a FuncExpr or OpExpr. The call is made
180
+ * only if at least one function argument matches an index column's variable
181
+ * or expression. "indexarg" identifies the matching argument (it's the
182
+ * argument's zero-based index in the node's args list).
183
+ *
184
+ * If the transformation is possible, return a List of directly-indexable
185
+ * condition expressions, else return NULL. (A List is used because it's
186
+ * sometimes useful to generate more than one indexable condition, such as
187
+ * when a LIKE with constant prefix gives rise to both >= and < conditions.)
188
+ *
189
+ * "Directly indexable" means that the condition must be directly executable
190
+ * by the index machinery. Typically this means that it is a binary OpExpr
191
+ * with the index column value on the left, a pseudo-constant on the right,
192
+ * and an operator that is in the index column's operator family. Other
193
+ * possibilities include RowCompareExpr, ScalarArrayOpExpr, and NullTest,
194
+ * depending on the index type; but those seem less likely to be useful for
195
+ * derived index conditions. "Pseudo-constant" means that the right-hand
196
+ * expression must not contain any volatile functions, nor any Vars of the
197
+ * table the index is for; use is_pseudo_constant_for_index() to check this.
198
+ * (Note: if the passed "node" is an OpExpr, the core planner already verified
199
+ * that the non-indexkey operand is pseudo-constant; but when the "node"
200
+ * is a FuncExpr, it does not check, since it doesn't know which of the
201
+ * function's arguments you might need to use in an index comparison value.)
202
+ *
203
+ * In many cases, an index condition can be generated but it is weaker than
204
+ * the function condition itself; for example, a LIKE with a constant prefix
205
+ * can produce an index range check based on the prefix, but we still need
206
+ * to execute the LIKE operator to verify the rest of the pattern. We say
207
+ * that such an index condition is "lossy". When returning an index condition,
208
+ * you should set the "lossy" request field to true if the condition is lossy,
209
+ * or false if it is an exact equivalent of the function's result. The core
210
+ * code will initialize that field to true, which is the common case.
211
+ *
212
+ * It is important to verify that the index operator family is the correct
213
+ * one for the condition you want to generate. Core support functions tend
214
+ * to use the known OID of a built-in opfamily for this, but extensions need
215
+ * to work harder, since their OIDs aren't fixed. A possibly workable
216
+ * answer for an index on an extension datatype is to verify the index AM's
217
+ * OID instead, and then assume that there's only one relevant opclass for
218
+ * your datatype so the opfamily must be the right one. Generating OpExpr
219
+ * nodes may also require knowing extension datatype OIDs (often you can
220
+ * find these out by applying exprType() to a function argument) and
221
+ * operator OIDs (which you can look up using get_opfamily_member).
222
+ */
223
+ typedef struct SupportRequestIndexCondition
224
+ {
225
+ NodeTag type;
226
+
227
+ /* Input fields: */
228
+ struct PlannerInfo *root; /* Planner's infrastructure */
229
+ Oid funcid; /* function we are inquiring about */
230
+ Node *node; /* parse node invoking function */
231
+ int indexarg; /* index of function arg matching indexcol */
232
+ struct IndexOptInfo *index; /* planner's info about target index */
233
+ int indexcol; /* index of target index column (0-based) */
234
+ Oid opfamily; /* index column's operator family */
235
+ Oid indexcollation; /* index column's collation */
236
+
237
+ /* Output fields: */
238
+ bool lossy; /* set to false if index condition is an exact
239
+ * equivalent of the function call */
240
+ } SupportRequestIndexCondition;
241
+
242
+ /* ----------
243
+ * To support more efficient query execution of any monotonically increasing
244
+ * and/or monotonically decreasing window functions, we support calling the
245
+ * window function's prosupport function passing along this struct whenever
246
+ * the planner sees an OpExpr qual directly reference a window function in a
247
+ * subquery. When the planner encounters this, we populate this struct and
248
+ * pass it along to the window function's prosupport function so that it can
249
+ * evaluate if the given WindowFunc is;
250
+ *
251
+ * a) monotonically increasing, or
252
+ * b) monotonically decreasing, or
253
+ * c) both monotonically increasing and decreasing, or
254
+ * d) none of the above.
255
+ *
256
+ * A function that is monotonically increasing can never return a value that
257
+ * is lower than a value returned in a "previous call". A monotonically
258
+ * decreasing function can never return a value higher than a value returned
259
+ * in a previous call. A function that is both must return the same value
260
+ * each time.
261
+ *
262
+ * We define "previous call" to mean a previous call to the same WindowFunc
263
+ * struct in the same window partition.
264
+ *
265
+ * row_number() is an example of a monotonically increasing function. The
266
+ * return value will be reset back to 1 in each new partition. An example of
267
+ * a monotonically increasing and decreasing function is COUNT(*) OVER ().
268
+ * Since there is no ORDER BY clause in this example, all rows in the
269
+ * partition are peers and all rows within the partition will be within the
270
+ * frame bound. Likewise for COUNT(*) OVER(ORDER BY a ROWS BETWEEN UNBOUNDED
271
+ * PRECEDING AND UNBOUNDED FOLLOWING).
272
+ *
273
+ * COUNT(*) OVER (ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
274
+ * is an example of a monotonically decreasing function.
275
+ *
276
+ * Implementations must only concern themselves with the given WindowFunc
277
+ * being monotonic in a single partition.
278
+ *
279
+ * Inputs:
280
+ * 'window_func' is the pointer to the window function being called.
281
+ *
282
+ * 'window_clause' pointer to the WindowClause data. Support functions can
283
+ * use this to check frame bounds, etc.
284
+ *
285
+ * Outputs:
286
+ * 'monotonic' the resulting MonotonicFunction value for the given input
287
+ * window function and window clause.
288
+ * ----------
289
+ */
290
+ typedef struct SupportRequestWFuncMonotonic
291
+ {
292
+ NodeTag type;
293
+
294
+ /* Input fields: */
295
+ WindowFunc *window_func; /* Pointer to the window function data */
296
+ struct WindowClause *window_clause; /* Pointer to the window clause data */
297
+
298
+ /* Output fields: */
299
+ MonotonicFunction monotonic;
300
+ } SupportRequestWFuncMonotonic;
301
+
302
+ /*
303
+ * Some WindowFunc behavior might not be affected by certain variations in
304
+ * the WindowClause's frameOptions. For example, row_number() is coded in
305
+ * such a way that the frame options don't change the returned row number.
306
+ * nodeWindowAgg.c will have less work to do if the ROWS option is used
307
+ * instead of the RANGE option as no check needs to be done for peer rows.
308
+ * Since RANGE is included in the default frame options, window functions
309
+ * such as row_number() might want to change that to ROW.
310
+ *
311
+ * Here we allow a WindowFunc's support function to determine which, if
312
+ * anything, can be changed about the WindowClause which the WindowFunc
313
+ * belongs to. Currently only the frameOptions can be modified. However,
314
+ * we may want to allow more optimizations in the future.
315
+ *
316
+ * The support function is responsible for ensuring the optimized version of
317
+ * the frameOptions doesn't affect the result of the window function. The
318
+ * planner is responsible for only changing the frame options when all
319
+ * WindowFuncs using this particular WindowClause agree on what the optimized
320
+ * version of the frameOptions are. If a particular WindowFunc being used
321
+ * does not have a support function then the planner will not make any changes
322
+ * to the WindowClause's frameOptions.
323
+ *
324
+ * 'window_func' and 'window_clause' are set by the planner before calling the
325
+ * support function so that the support function has these fields available.
326
+ * These may be required in order to determine which optimizations are
327
+ * possible.
328
+ *
329
+ * 'frameOptions' is set by the planner to WindowClause.frameOptions. The
330
+ * support function must only adjust this if optimizations are possible for
331
+ * the given WindowFunc.
332
+ */
333
+ typedef struct SupportRequestOptimizeWindowClause
334
+ {
335
+ NodeTag type;
336
+
337
+ /* Input fields: */
338
+ WindowFunc *window_func; /* Pointer to the window function data */
339
+ struct WindowClause *window_clause; /* Pointer to the window clause data */
340
+
341
+ /* Input/Output fields: */
342
+ int frameOptions; /* New frameOptions, or left untouched if no
343
+ * optimizations are possible. */
344
+ } SupportRequestOptimizeWindowClause;
345
+
346
+ #endif /* SUPPORTNODES_H */
@@ -13,7 +13,7 @@
13
13
  * fact that a particular page needs to be visited.
14
14
  *
15
15
  *
16
- * Copyright (c) 2003-2020, PostgreSQL Global Development Group
16
+ * Copyright (c) 2003-2023, PostgreSQL Global Development Group
17
17
  *
18
18
  * src/include/nodes/tidbitmap.h
19
19
  *
@@ -0,0 +1,90 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * value.h
4
+ * interface for value nodes
5
+ *
6
+ *
7
+ * Copyright (c) 2003-2023, PostgreSQL Global Development Group
8
+ *
9
+ * src/include/nodes/value.h
10
+ *
11
+ *-------------------------------------------------------------------------
12
+ */
13
+
14
+ #ifndef VALUE_H
15
+ #define VALUE_H
16
+
17
+ #include "nodes/nodes.h"
18
+
19
+ /*
20
+ * The node types Integer, Float, String, and BitString are used to represent
21
+ * literals in the lexer and are also used to pass constants around in the
22
+ * parser. One difference between these node types and, say, a plain int or
23
+ * char * is that the nodes can be put into a List.
24
+ *
25
+ * (There used to be a Value node, which encompassed all these different node types. Hence the name of this file.)
26
+ */
27
+
28
+ typedef struct Integer
29
+ {
30
+ pg_node_attr(special_read_write)
31
+
32
+ NodeTag type;
33
+ int ival;
34
+ } Integer;
35
+
36
+ /*
37
+ * Float is internally represented as string. Using T_Float as the node type
38
+ * simply indicates that the contents of the string look like a valid numeric
39
+ * literal. The value might end up being converted to NUMERIC, so we can't
40
+ * store it internally as a C double, since that could lose precision. Since
41
+ * these nodes are generally only used in the parsing process, not for runtime
42
+ * data, it's better to use the more general representation.
43
+ *
44
+ * Note that an integer-looking string will get lexed as T_Float if the value
45
+ * is too large to fit in an 'int'.
46
+ */
47
+ typedef struct Float
48
+ {
49
+ pg_node_attr(special_read_write)
50
+
51
+ NodeTag type;
52
+ char *fval;
53
+ } Float;
54
+
55
+ typedef struct Boolean
56
+ {
57
+ pg_node_attr(special_read_write)
58
+
59
+ NodeTag type;
60
+ bool boolval;
61
+ } Boolean;
62
+
63
+ typedef struct String
64
+ {
65
+ pg_node_attr(special_read_write)
66
+
67
+ NodeTag type;
68
+ char *sval;
69
+ } String;
70
+
71
+ typedef struct BitString
72
+ {
73
+ pg_node_attr(special_read_write)
74
+
75
+ NodeTag type;
76
+ char *bsval;
77
+ } BitString;
78
+
79
+ #define intVal(v) (castNode(Integer, v)->ival)
80
+ #define floatVal(v) atof(castNode(Float, v)->fval)
81
+ #define boolVal(v) (castNode(Boolean, v)->boolval)
82
+ #define strVal(v) (castNode(String, v)->sval)
83
+
84
+ extern Integer *makeInteger(int i);
85
+ extern Float *makeFloat(char *numericStr);
86
+ extern Boolean *makeBoolean(bool val);
87
+ extern String *makeString(char *str);
88
+ extern BitString *makeBitString(char *str);
89
+
90
+ #endif /* VALUE_H */