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
@@ -3,7 +3,7 @@
3
3
  * port.h
4
4
  * Header for src/port/ compatibility functions.
5
5
  *
6
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/port.h
@@ -14,8 +14,6 @@
14
14
  #define PG_PORT_H
15
15
 
16
16
  #include <ctype.h>
17
- #include <netdb.h>
18
- #include <pwd.h>
19
17
 
20
18
  /*
21
19
  * Windows has enough specialized port stuff that we push most of it off
@@ -37,20 +35,25 @@ typedef SOCKET pgsocket;
37
35
  #define PGINVALID_SOCKET INVALID_SOCKET
38
36
  #endif
39
37
 
38
+ /* if platform lacks socklen_t, we assume this will work */
39
+ #ifndef HAVE_SOCKLEN_T
40
+ typedef unsigned int socklen_t;
41
+ #endif
42
+
40
43
  /* non-blocking */
41
44
  extern bool pg_set_noblock(pgsocket sock);
42
45
  extern bool pg_set_block(pgsocket sock);
43
46
 
44
47
  /* Portable path handling for Unix/Win32 (in path.c) */
45
48
 
46
- extern bool has_drive_prefix(const char *filename);
49
+ extern bool has_drive_prefix(const char *path);
47
50
  extern char *first_dir_separator(const char *filename);
48
51
  extern char *last_dir_separator(const char *filename);
49
52
  extern char *first_path_var_separator(const char *pathlist);
50
53
  extern void join_path_components(char *ret_path,
51
54
  const char *head, const char *tail);
52
55
  extern void canonicalize_path(char *path);
53
- extern void make_native_path(char *path);
56
+ extern void make_native_path(char *filename);
54
57
  extern void cleanup_path(char *path);
55
58
  extern bool path_contains_parent_reference(const char *path);
56
59
  extern bool path_is_relative_and_below_cwd(const char *path);
@@ -75,34 +78,62 @@ extern void get_parent_directory(char *path);
75
78
  extern char **pgfnames(const char *path);
76
79
  extern void pgfnames_cleanup(char **filenames);
77
80
 
78
- /*
79
- * is_absolute_path
80
- *
81
- * By making this a macro we avoid needing to include path.c in libpq.
82
- */
83
- #ifndef WIN32
84
- #define IS_DIR_SEP(ch) ((ch) == '/')
85
-
86
- #define is_absolute_path(filename) \
81
+ #define IS_NONWINDOWS_DIR_SEP(ch) ((ch) == '/')
82
+ #define is_nonwindows_absolute_path(filename) \
87
83
  ( \
88
- IS_DIR_SEP((filename)[0]) \
84
+ IS_NONWINDOWS_DIR_SEP((filename)[0]) \
89
85
  )
90
- #else
91
- #define IS_DIR_SEP(ch) ((ch) == '/' || (ch) == '\\')
92
86
 
87
+ #define IS_WINDOWS_DIR_SEP(ch) ((ch) == '/' || (ch) == '\\')
93
88
  /* See path_is_relative_and_below_cwd() for how we handle 'E:abc'. */
94
- #define is_absolute_path(filename) \
89
+ #define is_windows_absolute_path(filename) \
95
90
  ( \
96
- IS_DIR_SEP((filename)[0]) || \
91
+ IS_WINDOWS_DIR_SEP((filename)[0]) || \
97
92
  (isalpha((unsigned char) ((filename)[0])) && (filename)[1] == ':' && \
98
- IS_DIR_SEP((filename)[2])) \
93
+ IS_WINDOWS_DIR_SEP((filename)[2])) \
99
94
  )
95
+
96
+ /*
97
+ * is_absolute_path and IS_DIR_SEP
98
+ *
99
+ * By using macros here we avoid needing to include path.c in libpq.
100
+ */
101
+ #ifndef WIN32
102
+ #define IS_DIR_SEP(ch) IS_NONWINDOWS_DIR_SEP(ch)
103
+ #define is_absolute_path(filename) is_nonwindows_absolute_path(filename)
104
+ #else
105
+ #define IS_DIR_SEP(ch) IS_WINDOWS_DIR_SEP(ch)
106
+ #define is_absolute_path(filename) is_windows_absolute_path(filename)
100
107
  #endif
101
108
 
109
+ /*
110
+ * This macro provides a centralized list of all errnos that identify
111
+ * hard failure of a previously-established network connection.
112
+ * The macro is intended to be used in a switch statement, in the form
113
+ * "case ALL_CONNECTION_FAILURE_ERRNOS:".
114
+ *
115
+ * Note: this groups EPIPE and ECONNRESET, which we take to indicate a
116
+ * probable server crash, with other errors that indicate loss of network
117
+ * connectivity without proving much about the server's state. Places that
118
+ * are actually reporting errors typically single out EPIPE and ECONNRESET,
119
+ * while allowing the network failures to be reported generically.
120
+ */
121
+ #define ALL_CONNECTION_FAILURE_ERRNOS \
122
+ EPIPE: \
123
+ case ECONNRESET: \
124
+ case ECONNABORTED: \
125
+ case EHOSTDOWN: \
126
+ case EHOSTUNREACH: \
127
+ case ENETDOWN: \
128
+ case ENETRESET: \
129
+ case ENETUNREACH: \
130
+ case ETIMEDOUT
131
+
102
132
  /* Portable locale initialization (in exec.c) */
103
133
  extern void set_pglocale_pgservice(const char *argv0, const char *app);
104
134
 
105
135
  /* Portable way to find and execute binaries (in exec.c) */
136
+ extern int validate_exec(const char *path);
106
137
  extern int find_my_exec(const char *argv0, char *retpath);
107
138
  extern int find_other_exec(const char *argv0, const char *target,
108
139
  const char *versionstr, char *retpath);
@@ -111,6 +142,11 @@ extern char *pipe_read_line(char *cmd, char *line, int maxsize);
111
142
  /* Doesn't belong here, but this is used with find_other_exec(), so... */
112
143
  #define PG_BACKEND_VERSIONSTR "postgres (PostgreSQL) " PG_VERSION "\n"
113
144
 
145
+ #ifdef EXEC_BACKEND
146
+ /* Disable ASLR before exec, for developer builds only (in exec.c) */
147
+ extern int pg_disable_aslr(void);
148
+ #endif
149
+
114
150
 
115
151
  #if defined(WIN32) || defined(__CYGWIN__)
116
152
  #define EXE ".exe"
@@ -172,15 +208,24 @@ extern unsigned char pg_ascii_tolower(unsigned char ch);
172
208
  #undef printf
173
209
  #endif
174
210
 
175
- extern int pg_vsnprintf(char *str, size_t count, const char *fmt, va_list args);
211
+ extern int pg_vsnprintf(char *str, size_t count, const char *fmt, va_list args) pg_attribute_printf(3, 0);
176
212
  extern int pg_snprintf(char *str, size_t count, const char *fmt,...) pg_attribute_printf(3, 4);
177
- extern int pg_vsprintf(char *str, const char *fmt, va_list args);
213
+ extern int pg_vsprintf(char *str, const char *fmt, va_list args) pg_attribute_printf(2, 0);
178
214
  extern int pg_sprintf(char *str, const char *fmt,...) pg_attribute_printf(2, 3);
179
- extern int pg_vfprintf(FILE *stream, const char *fmt, va_list args);
215
+ extern int pg_vfprintf(FILE *stream, const char *fmt, va_list args) pg_attribute_printf(2, 0);
180
216
  extern int pg_fprintf(FILE *stream, const char *fmt,...) pg_attribute_printf(2, 3);
181
- extern int pg_vprintf(const char *fmt, va_list args);
217
+ extern int pg_vprintf(const char *fmt, va_list args) pg_attribute_printf(1, 0);
182
218
  extern int pg_printf(const char *fmt,...) pg_attribute_printf(1, 2);
183
219
 
220
+ #ifndef WIN32
221
+ /*
222
+ * We add a pg_ prefix as a warning that the Windows implementations have the
223
+ * non-standard side-effect of changing the current file position.
224
+ */
225
+ #define pg_pread pread
226
+ #define pg_pwrite pwrite
227
+ #endif
228
+
184
229
  /*
185
230
  * We use __VA_ARGS__ for printf to prevent replacing references to
186
231
  * the "printf" format archetype in format() attribute declarations.
@@ -213,10 +258,6 @@ extern char *pg_strerror_r(int errnum, char *buf, size_t buflen);
213
258
  /* Wrap strsignal(), or provide our own version if necessary */
214
259
  extern const char *pg_strsignal(int signum);
215
260
 
216
- /* Portable prompt handling */
217
- extern void simple_prompt(const char *prompt, char *destination, size_t destlen,
218
- bool echo);
219
-
220
261
  extern int pclose_check(FILE *stream);
221
262
 
222
263
  /* Global variable holding time zone information. */
@@ -256,7 +297,6 @@ extern int pgunlink(const char *path);
256
297
  #if defined(WIN32) && !defined(__CYGWIN__)
257
298
  extern int pgsymlink(const char *oldpath, const char *newpath);
258
299
  extern int pgreadlink(const char *path, char *buf, size_t size);
259
- extern bool pgwin32_is_junction(const char *path);
260
300
 
261
301
  #define symlink(oldpath, newpath) pgsymlink(oldpath, newpath)
262
302
  #define readlink(path, buf, size) pgreadlink(path, buf, size)
@@ -271,6 +311,7 @@ extern bool rmtree(const char *path, bool rmtopdir);
271
311
  * passing of other special options.
272
312
  */
273
313
  #define O_DIRECT 0x80000000
314
+ extern HANDLE pgwin32_open_handle(const char *, int, bool);
274
315
  extern int pgwin32_open(const char *, int,...);
275
316
  extern FILE *pgwin32_fopen(const char *, const char *);
276
317
  #define open(a,b,c) pgwin32_open(a,b,c)
@@ -299,11 +340,6 @@ extern FILE *pgwin32_popen(const char *command, const char *type);
299
340
  #define popen(a,b) pgwin32_popen(a,b)
300
341
  #define pclose(a) _pclose(a)
301
342
 
302
- /* New versions of MingW have gettimeofday, old mingw and msvc don't */
303
- #ifndef HAVE_GETTIMEOFDAY
304
- /* Last parameter not used */
305
- extern int gettimeofday(struct timeval *tp, struct timezone *tzp);
306
- #endif
307
343
  #else /* !WIN32 */
308
344
 
309
345
  /*
@@ -337,15 +373,6 @@ extern int gettimeofday(struct timeval *tp, struct timezone *tzp);
337
373
  #define pgoff_t off_t
338
374
  #endif
339
375
 
340
- extern double pg_erand48(unsigned short xseed[3]);
341
- extern long pg_lrand48(void);
342
- extern long pg_jrand48(unsigned short xseed[3]);
343
- extern void pg_srand48(long seed);
344
-
345
- #ifndef HAVE_FLS
346
- extern int fls(int mask);
347
- #endif
348
-
349
376
  #ifndef HAVE_GETPEEREID
350
377
  /* On Windows, Perl might have incompatible definitions of uid_t and gid_t. */
351
378
  #ifndef PLPERL_HAVE_UID_GID
@@ -373,16 +400,13 @@ extern int getpeereid(int sock, uid_t *uid, gid_t *gid);
373
400
  extern void explicit_bzero(void *buf, size_t len);
374
401
  #endif
375
402
 
376
- #ifndef HAVE_STRTOF
377
- extern float strtof(const char *nptr, char **endptr);
378
- #endif
379
-
380
403
  #ifdef HAVE_BUGGY_STRTOF
381
404
  extern float pg_strtof(const char *nptr, char **endptr);
382
405
  #define strtof(a,b) (pg_strtof((a),(b)))
383
406
  #endif
384
407
 
385
- #ifndef HAVE_LINK
408
+ #ifdef WIN32
409
+ /* src/port/win32link.c */
386
410
  extern int link(const char *src, const char *dst);
387
411
  #endif
388
412
 
@@ -396,23 +420,6 @@ extern char *mkdtemp(char *path);
396
420
  extern int inet_aton(const char *cp, struct in_addr *addr);
397
421
  #endif
398
422
 
399
- /*
400
- * Windows and older Unix don't have pread(2) and pwrite(2). We have
401
- * replacement functions, but they have slightly different semantics so we'll
402
- * use a name with a pg_ prefix to avoid confusion.
403
- */
404
- #ifdef HAVE_PREAD
405
- #define pg_pread pread
406
- #else
407
- extern ssize_t pg_pread(int fd, void *buf, size_t nbyte, off_t offset);
408
- #endif
409
-
410
- #ifdef HAVE_PWRITE
411
- #define pg_pwrite pwrite
412
- #else
413
- extern ssize_t pg_pwrite(int fd, const void *buf, size_t nbyte, off_t offset);
414
- #endif
415
-
416
423
  #if !HAVE_DECL_STRLCAT
417
424
  extern size_t strlcat(char *dst, const char *src, size_t siz);
418
425
  #endif
@@ -425,53 +432,12 @@ extern size_t strlcpy(char *dst, const char *src, size_t siz);
425
432
  extern size_t strnlen(const char *str, size_t maxlen);
426
433
  #endif
427
434
 
428
- #if !defined(HAVE_RANDOM)
429
- extern long random(void);
430
- #endif
431
-
432
- #ifndef HAVE_UNSETENV
433
- extern void unsetenv(const char *name);
434
- #endif
435
-
436
- #ifndef HAVE_SRANDOM
437
- extern void srandom(unsigned int seed);
438
- #endif
439
-
440
- #ifndef HAVE_DLOPEN
441
- extern void *dlopen(const char *file, int mode);
442
- extern void *dlsym(void *handle, const char *symbol);
443
- extern int dlclose(void *handle);
444
- extern char *dlerror(void);
445
- #endif
446
-
447
- /*
448
- * In some older systems, the RTLD_NOW flag isn't defined and the mode
449
- * argument to dlopen must always be 1.
450
- */
451
- #if !HAVE_DECL_RTLD_NOW
452
- #define RTLD_NOW 1
453
- #endif
454
-
455
- /*
456
- * The RTLD_GLOBAL flag is wanted if available, but it doesn't exist
457
- * everywhere. If it doesn't exist, set it to 0 so it has no effect.
458
- */
459
- #if !HAVE_DECL_RTLD_GLOBAL
460
- #define RTLD_GLOBAL 0
461
- #endif
462
-
463
- /* thread.h */
435
+ /* thread.c */
464
436
  #ifndef WIN32
465
- extern int pqGetpwuid(uid_t uid, struct passwd *resultbuf, char *buffer,
466
- size_t buflen, struct passwd **result);
437
+ extern bool pg_get_user_name(uid_t user_id, char *buffer, size_t buflen);
438
+ extern bool pg_get_user_home_dir(uid_t user_id, char *buffer, size_t buflen);
467
439
  #endif
468
440
 
469
- extern int pqGethostbyname(const char *name,
470
- struct hostent *resultbuf,
471
- char *buffer, size_t buflen,
472
- struct hostent **result,
473
- int *herrno);
474
-
475
441
  extern void pg_qsort(void *base, size_t nel, size_t elsize,
476
442
  int (*cmp) (const void *, const void *));
477
443
  extern int pg_qsort_strcmp(const void *a, const void *b);
@@ -483,6 +449,14 @@ typedef int (*qsort_arg_comparator) (const void *a, const void *b, void *arg);
483
449
  extern void qsort_arg(void *base, size_t nel, size_t elsize,
484
450
  qsort_arg_comparator cmp, void *arg);
485
451
 
452
+ extern void qsort_interruptible(void *base, size_t nel, size_t elsize,
453
+ qsort_arg_comparator cmp, void *arg);
454
+
455
+ extern void *bsearch_arg(const void *key, const void *base0,
456
+ size_t nmemb, size_t size,
457
+ int (*compar) (const void *, const void *, void *),
458
+ void *arg);
459
+
486
460
  /* port/chklocale.c */
487
461
  extern int pg_get_encoding_from_locale(const char *ctype, bool write_message);
488
462
 
@@ -495,6 +469,7 @@ extern char *pg_inet_net_ntop(int af, const void *src, int bits,
495
469
  char *dst, size_t size);
496
470
 
497
471
  /* port/pg_strong_random.c */
472
+ extern void pg_strong_random_init(void);
498
473
  extern bool pg_strong_random(void *buf, size_t len);
499
474
 
500
475
  /*
@@ -510,15 +485,36 @@ extern int pg_check_dir(const char *dir);
510
485
  extern int pg_mkdir_p(char *path, int omode);
511
486
 
512
487
  /* port/pqsignal.c */
513
- typedef void (*pqsigfunc) (int signo);
488
+ typedef void (*pqsigfunc) (SIGNAL_ARGS);
514
489
  extern pqsigfunc pqsignal(int signo, pqsigfunc func);
515
490
 
516
491
  /* port/quotes.c */
517
492
  extern char *escape_single_quotes_ascii(const char *src);
518
493
 
519
494
  /* common/wait_error.c */
520
- extern char *wait_result_to_str(int exit_status);
495
+ extern char *wait_result_to_str(int exitstatus);
521
496
  extern bool wait_result_is_signal(int exit_status, int signum);
522
497
  extern bool wait_result_is_any_signal(int exit_status, bool include_command_not_found);
498
+ extern int wait_result_to_exit_code(int exit_status);
499
+
500
+ /*
501
+ * Interfaces that we assume all Unix system have. We retain individual macros
502
+ * for better documentation.
503
+ *
504
+ * For symlink-related functions, there is often no need to test these macros,
505
+ * because we provided basic support on Windows that can work with absolute
506
+ * paths to directories. Code that wants to test for complete symlink support
507
+ * (including relative paths and non-directories) should be conditional on
508
+ * HAVE_READLINK or HAVE_SYMLINK.
509
+ */
510
+ #ifndef WIN32
511
+ #define HAVE_GETRLIMIT 1
512
+ #define HAVE_POLL 1
513
+ #define HAVE_POLL_H 1
514
+ #define HAVE_READLINK 1
515
+ #define HAVE_SETSID 1
516
+ #define HAVE_SHM_OPEN 1
517
+ #define HAVE_SYMLINK 1
518
+ #endif
523
519
 
524
520
  #endif /* PG_PORT_H */
@@ -0,0 +1,197 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * instr_time.h
4
+ * portable high-precision interval timing
5
+ *
6
+ * This file provides an abstraction layer to hide portability issues in
7
+ * interval timing. On Unix we use clock_gettime(), and on Windows we use
8
+ * QueryPerformanceCounter(). These macros also give some breathing room to
9
+ * use other high-precision-timing APIs.
10
+ *
11
+ * The basic data type is instr_time, which all callers should treat as an
12
+ * opaque typedef. instr_time can store either an absolute time (of
13
+ * unspecified reference time) or an interval. The operations provided
14
+ * for it are:
15
+ *
16
+ * INSTR_TIME_IS_ZERO(t) is t equal to zero?
17
+ *
18
+ * INSTR_TIME_SET_ZERO(t) set t to zero (memset is acceptable too)
19
+ *
20
+ * INSTR_TIME_SET_CURRENT(t) set t to current time
21
+ *
22
+ * INSTR_TIME_SET_CURRENT_LAZY(t) set t to current time if t is zero,
23
+ * evaluates to whether t changed
24
+ *
25
+ * INSTR_TIME_ADD(x, y) x += y
26
+ *
27
+ * INSTR_TIME_SUBTRACT(x, y) x -= y
28
+ *
29
+ * INSTR_TIME_ACCUM_DIFF(x, y, z) x += (y - z)
30
+ *
31
+ * INSTR_TIME_GET_DOUBLE(t) convert t to double (in seconds)
32
+ *
33
+ * INSTR_TIME_GET_MILLISEC(t) convert t to double (in milliseconds)
34
+ *
35
+ * INSTR_TIME_GET_MICROSEC(t) convert t to uint64 (in microseconds)
36
+ *
37
+ * INSTR_TIME_GET_NANOSEC(t) convert t to uint64 (in nanoseconds)
38
+ *
39
+ * Note that INSTR_TIME_SUBTRACT and INSTR_TIME_ACCUM_DIFF convert
40
+ * absolute times to intervals. The INSTR_TIME_GET_xxx operations are
41
+ * only useful on intervals.
42
+ *
43
+ * When summing multiple measurements, it's recommended to leave the
44
+ * running sum in instr_time form (ie, use INSTR_TIME_ADD or
45
+ * INSTR_TIME_ACCUM_DIFF) and convert to a result format only at the end.
46
+ *
47
+ * Beware of multiple evaluations of the macro arguments.
48
+ *
49
+ *
50
+ * Copyright (c) 2001-2023, PostgreSQL Global Development Group
51
+ *
52
+ * src/include/portability/instr_time.h
53
+ *
54
+ *-------------------------------------------------------------------------
55
+ */
56
+ #ifndef INSTR_TIME_H
57
+ #define INSTR_TIME_H
58
+
59
+
60
+ /*
61
+ * We store interval times as an int64 integer on all platforms, as int64 is
62
+ * cheap to add/subtract, the most common operation for instr_time. The
63
+ * acquisition of time and converting to specific units of time is platform
64
+ * specific.
65
+ *
66
+ * To avoid users of the API relying on the integer representation, we wrap
67
+ * the 64bit integer in a struct.
68
+ */
69
+ typedef struct instr_time
70
+ {
71
+ int64 ticks; /* in platforms specific unit */
72
+ } instr_time;
73
+
74
+
75
+ /* helpers macros used in platform specific code below */
76
+
77
+ #define NS_PER_S INT64CONST(1000000000)
78
+ #define NS_PER_MS INT64CONST(1000000)
79
+ #define NS_PER_US INT64CONST(1000)
80
+
81
+
82
+ #ifndef WIN32
83
+
84
+
85
+ /* Use clock_gettime() */
86
+
87
+ #include <time.h>
88
+
89
+ /*
90
+ * The best clockid to use according to the POSIX spec is CLOCK_MONOTONIC,
91
+ * since that will give reliable interval timing even in the face of changes
92
+ * to the system clock. However, POSIX doesn't require implementations to
93
+ * provide anything except CLOCK_REALTIME, so fall back to that if we don't
94
+ * find CLOCK_MONOTONIC.
95
+ *
96
+ * Also, some implementations have nonstandard clockids with better properties
97
+ * than CLOCK_MONOTONIC. In particular, as of macOS 10.12, Apple provides
98
+ * CLOCK_MONOTONIC_RAW which is both faster to read and higher resolution than
99
+ * their version of CLOCK_MONOTONIC.
100
+ */
101
+ #if defined(__darwin__) && defined(CLOCK_MONOTONIC_RAW)
102
+ #define PG_INSTR_CLOCK CLOCK_MONOTONIC_RAW
103
+ #elif defined(CLOCK_MONOTONIC)
104
+ #define PG_INSTR_CLOCK CLOCK_MONOTONIC
105
+ #else
106
+ #define PG_INSTR_CLOCK CLOCK_REALTIME
107
+ #endif
108
+
109
+ /* helper for INSTR_TIME_SET_CURRENT */
110
+ static inline instr_time
111
+ pg_clock_gettime_ns(void)
112
+ {
113
+ instr_time now;
114
+ struct timespec tmp;
115
+
116
+ clock_gettime(PG_INSTR_CLOCK, &tmp);
117
+ now.ticks = tmp.tv_sec * NS_PER_S + tmp.tv_nsec;
118
+
119
+ return now;
120
+ }
121
+
122
+ #define INSTR_TIME_SET_CURRENT(t) \
123
+ ((t) = pg_clock_gettime_ns())
124
+
125
+ #define INSTR_TIME_GET_NANOSEC(t) \
126
+ ((int64) (t).ticks)
127
+
128
+
129
+ #else /* WIN32 */
130
+
131
+
132
+ /* Use QueryPerformanceCounter() */
133
+
134
+ /* helper for INSTR_TIME_SET_CURRENT */
135
+ static inline instr_time
136
+ pg_query_performance_counter(void)
137
+ {
138
+ instr_time now;
139
+ LARGE_INTEGER tmp;
140
+
141
+ QueryPerformanceCounter(&tmp);
142
+ now.ticks = tmp.QuadPart;
143
+
144
+ return now;
145
+ }
146
+
147
+ static inline double
148
+ GetTimerFrequency(void)
149
+ {
150
+ LARGE_INTEGER f;
151
+
152
+ QueryPerformanceFrequency(&f);
153
+ return (double) f.QuadPart;
154
+ }
155
+
156
+ #define INSTR_TIME_SET_CURRENT(t) \
157
+ ((t) = pg_query_performance_counter())
158
+
159
+ #define INSTR_TIME_GET_NANOSEC(t) \
160
+ ((int64) ((t).ticks * ((double) NS_PER_S / GetTimerFrequency())))
161
+
162
+ #endif /* WIN32 */
163
+
164
+
165
+ /*
166
+ * Common macros
167
+ */
168
+
169
+ #define INSTR_TIME_IS_ZERO(t) ((t).ticks == 0)
170
+
171
+
172
+ #define INSTR_TIME_SET_ZERO(t) ((t).ticks = 0)
173
+
174
+ #define INSTR_TIME_SET_CURRENT_LAZY(t) \
175
+ (INSTR_TIME_IS_ZERO(t) ? INSTR_TIME_SET_CURRENT(t), true : false)
176
+
177
+
178
+ #define INSTR_TIME_ADD(x,y) \
179
+ ((x).ticks += (y).ticks)
180
+
181
+ #define INSTR_TIME_SUBTRACT(x,y) \
182
+ ((x).ticks -= (y).ticks)
183
+
184
+ #define INSTR_TIME_ACCUM_DIFF(x,y,z) \
185
+ ((x).ticks += (y).ticks - (z).ticks)
186
+
187
+
188
+ #define INSTR_TIME_GET_DOUBLE(t) \
189
+ ((double) INSTR_TIME_GET_NANOSEC(t) / NS_PER_S)
190
+
191
+ #define INSTR_TIME_GET_MILLISEC(t) \
192
+ ((double) INSTR_TIME_GET_NANOSEC(t) / NS_PER_MS)
193
+
194
+ #define INSTR_TIME_GET_MICROSEC(t) \
195
+ (INSTR_TIME_GET_NANOSEC(t) / NS_PER_US)
196
+
197
+ #endif /* INSTR_TIME_H */