pg_query 2.0.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (375) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/ext/pg_query/include/access/amapi.h +246 -0
  4. data/ext/pg_query/include/access/attmap.h +52 -0
  5. data/ext/pg_query/include/access/attnum.h +64 -0
  6. data/ext/pg_query/include/access/clog.h +61 -0
  7. data/ext/pg_query/include/access/commit_ts.h +77 -0
  8. data/ext/pg_query/include/access/detoast.h +92 -0
  9. data/ext/pg_query/include/access/genam.h +228 -0
  10. data/ext/pg_query/include/access/gin.h +78 -0
  11. data/ext/pg_query/include/access/htup.h +89 -0
  12. data/ext/pg_query/include/access/htup_details.h +819 -0
  13. data/ext/pg_query/include/access/itup.h +161 -0
  14. data/ext/pg_query/include/access/parallel.h +82 -0
  15. data/ext/pg_query/include/access/printtup.h +35 -0
  16. data/ext/pg_query/include/access/relation.h +28 -0
  17. data/ext/pg_query/include/access/relscan.h +176 -0
  18. data/ext/pg_query/include/access/rmgr.h +35 -0
  19. data/ext/pg_query/include/access/rmgrlist.h +49 -0
  20. data/ext/pg_query/include/access/sdir.h +58 -0
  21. data/ext/pg_query/include/access/skey.h +151 -0
  22. data/ext/pg_query/include/access/stratnum.h +83 -0
  23. data/ext/pg_query/include/access/sysattr.h +29 -0
  24. data/ext/pg_query/include/access/table.h +27 -0
  25. data/ext/pg_query/include/access/tableam.h +1825 -0
  26. data/ext/pg_query/include/access/transam.h +265 -0
  27. data/ext/pg_query/include/access/tupconvert.h +51 -0
  28. data/ext/pg_query/include/access/tupdesc.h +154 -0
  29. data/ext/pg_query/include/access/tupmacs.h +247 -0
  30. data/ext/pg_query/include/access/twophase.h +61 -0
  31. data/ext/pg_query/include/access/xact.h +463 -0
  32. data/ext/pg_query/include/access/xlog.h +398 -0
  33. data/ext/pg_query/include/access/xlog_internal.h +330 -0
  34. data/ext/pg_query/include/access/xlogdefs.h +109 -0
  35. data/ext/pg_query/include/access/xloginsert.h +64 -0
  36. data/ext/pg_query/include/access/xlogreader.h +327 -0
  37. data/ext/pg_query/include/access/xlogrecord.h +227 -0
  38. data/ext/pg_query/include/bootstrap/bootstrap.h +62 -0
  39. data/ext/pg_query/include/c.h +1322 -0
  40. data/ext/pg_query/include/catalog/catalog.h +42 -0
  41. data/ext/pg_query/include/catalog/catversion.h +58 -0
  42. data/ext/pg_query/include/catalog/dependency.h +275 -0
  43. data/ext/pg_query/include/catalog/genbki.h +64 -0
  44. data/ext/pg_query/include/catalog/index.h +199 -0
  45. data/ext/pg_query/include/catalog/indexing.h +366 -0
  46. data/ext/pg_query/include/catalog/namespace.h +188 -0
  47. data/ext/pg_query/include/catalog/objectaccess.h +197 -0
  48. data/ext/pg_query/include/catalog/objectaddress.h +84 -0
  49. data/ext/pg_query/include/catalog/pg_aggregate.h +176 -0
  50. data/ext/pg_query/include/catalog/pg_aggregate_d.h +77 -0
  51. data/ext/pg_query/include/catalog/pg_am.h +60 -0
  52. data/ext/pg_query/include/catalog/pg_am_d.h +45 -0
  53. data/ext/pg_query/include/catalog/pg_attribute.h +204 -0
  54. data/ext/pg_query/include/catalog/pg_attribute_d.h +59 -0
  55. data/ext/pg_query/include/catalog/pg_authid.h +58 -0
  56. data/ext/pg_query/include/catalog/pg_authid_d.h +49 -0
  57. data/ext/pg_query/include/catalog/pg_class.h +200 -0
  58. data/ext/pg_query/include/catalog/pg_class_d.h +103 -0
  59. data/ext/pg_query/include/catalog/pg_collation.h +73 -0
  60. data/ext/pg_query/include/catalog/pg_collation_d.h +45 -0
  61. data/ext/pg_query/include/catalog/pg_constraint.h +247 -0
  62. data/ext/pg_query/include/catalog/pg_constraint_d.h +67 -0
  63. data/ext/pg_query/include/catalog/pg_control.h +250 -0
  64. data/ext/pg_query/include/catalog/pg_conversion.h +72 -0
  65. data/ext/pg_query/include/catalog/pg_conversion_d.h +35 -0
  66. data/ext/pg_query/include/catalog/pg_depend.h +73 -0
  67. data/ext/pg_query/include/catalog/pg_depend_d.h +34 -0
  68. data/ext/pg_query/include/catalog/pg_event_trigger.h +51 -0
  69. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +34 -0
  70. data/ext/pg_query/include/catalog/pg_index.h +80 -0
  71. data/ext/pg_query/include/catalog/pg_index_d.h +56 -0
  72. data/ext/pg_query/include/catalog/pg_language.h +67 -0
  73. data/ext/pg_query/include/catalog/pg_language_d.h +39 -0
  74. data/ext/pg_query/include/catalog/pg_namespace.h +59 -0
  75. data/ext/pg_query/include/catalog/pg_namespace_d.h +34 -0
  76. data/ext/pg_query/include/catalog/pg_opclass.h +85 -0
  77. data/ext/pg_query/include/catalog/pg_opclass_d.h +49 -0
  78. data/ext/pg_query/include/catalog/pg_operator.h +102 -0
  79. data/ext/pg_query/include/catalog/pg_operator_d.h +106 -0
  80. data/ext/pg_query/include/catalog/pg_opfamily.h +60 -0
  81. data/ext/pg_query/include/catalog/pg_opfamily_d.h +47 -0
  82. data/ext/pg_query/include/catalog/pg_partitioned_table.h +63 -0
  83. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +35 -0
  84. data/ext/pg_query/include/catalog/pg_proc.h +211 -0
  85. data/ext/pg_query/include/catalog/pg_proc_d.h +99 -0
  86. data/ext/pg_query/include/catalog/pg_publication.h +115 -0
  87. data/ext/pg_query/include/catalog/pg_publication_d.h +36 -0
  88. data/ext/pg_query/include/catalog/pg_replication_origin.h +57 -0
  89. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +29 -0
  90. data/ext/pg_query/include/catalog/pg_statistic.h +275 -0
  91. data/ext/pg_query/include/catalog/pg_statistic_d.h +194 -0
  92. data/ext/pg_query/include/catalog/pg_statistic_ext.h +74 -0
  93. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +40 -0
  94. data/ext/pg_query/include/catalog/pg_transform.h +45 -0
  95. data/ext/pg_query/include/catalog/pg_transform_d.h +32 -0
  96. data/ext/pg_query/include/catalog/pg_trigger.h +137 -0
  97. data/ext/pg_query/include/catalog/pg_trigger_d.h +106 -0
  98. data/ext/pg_query/include/catalog/pg_ts_config.h +50 -0
  99. data/ext/pg_query/include/catalog/pg_ts_config_d.h +32 -0
  100. data/ext/pg_query/include/catalog/pg_ts_dict.h +54 -0
  101. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +33 -0
  102. data/ext/pg_query/include/catalog/pg_ts_parser.h +57 -0
  103. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +35 -0
  104. data/ext/pg_query/include/catalog/pg_ts_template.h +48 -0
  105. data/ext/pg_query/include/catalog/pg_ts_template_d.h +32 -0
  106. data/ext/pg_query/include/catalog/pg_type.h +372 -0
  107. data/ext/pg_query/include/catalog/pg_type_d.h +285 -0
  108. data/ext/pg_query/include/catalog/storage.h +48 -0
  109. data/ext/pg_query/include/commands/async.h +54 -0
  110. data/ext/pg_query/include/commands/dbcommands.h +35 -0
  111. data/ext/pg_query/include/commands/defrem.h +173 -0
  112. data/ext/pg_query/include/commands/event_trigger.h +88 -0
  113. data/ext/pg_query/include/commands/explain.h +127 -0
  114. data/ext/pg_query/include/commands/prepare.h +61 -0
  115. data/ext/pg_query/include/commands/tablespace.h +67 -0
  116. data/ext/pg_query/include/commands/trigger.h +277 -0
  117. data/ext/pg_query/include/commands/user.h +37 -0
  118. data/ext/pg_query/include/commands/vacuum.h +293 -0
  119. data/ext/pg_query/include/commands/variable.h +38 -0
  120. data/ext/pg_query/include/common/file_perm.h +56 -0
  121. data/ext/pg_query/include/common/hashfn.h +104 -0
  122. data/ext/pg_query/include/common/ip.h +37 -0
  123. data/ext/pg_query/include/common/keywords.h +33 -0
  124. data/ext/pg_query/include/common/kwlookup.h +44 -0
  125. data/ext/pg_query/include/common/relpath.h +90 -0
  126. data/ext/pg_query/include/common/string.h +19 -0
  127. data/ext/pg_query/include/common/unicode_combining_table.h +196 -0
  128. data/ext/pg_query/include/datatype/timestamp.h +197 -0
  129. data/ext/pg_query/include/executor/execdesc.h +70 -0
  130. data/ext/pg_query/include/executor/executor.h +614 -0
  131. data/ext/pg_query/include/executor/functions.h +41 -0
  132. data/ext/pg_query/include/executor/instrument.h +101 -0
  133. data/ext/pg_query/include/executor/spi.h +175 -0
  134. data/ext/pg_query/include/executor/tablefunc.h +67 -0
  135. data/ext/pg_query/include/executor/tuptable.h +487 -0
  136. data/ext/pg_query/include/fmgr.h +775 -0
  137. data/ext/pg_query/include/funcapi.h +348 -0
  138. data/ext/pg_query/include/getaddrinfo.h +162 -0
  139. data/ext/pg_query/include/jit/jit.h +105 -0
  140. data/ext/pg_query/include/kwlist_d.h +1072 -0
  141. data/ext/pg_query/include/lib/ilist.h +727 -0
  142. data/ext/pg_query/include/lib/pairingheap.h +102 -0
  143. data/ext/pg_query/include/lib/simplehash.h +1059 -0
  144. data/ext/pg_query/include/lib/stringinfo.h +161 -0
  145. data/ext/pg_query/include/libpq/auth.h +29 -0
  146. data/ext/pg_query/include/libpq/crypt.h +46 -0
  147. data/ext/pg_query/include/libpq/hba.h +140 -0
  148. data/ext/pg_query/include/libpq/libpq-be.h +326 -0
  149. data/ext/pg_query/include/libpq/libpq.h +133 -0
  150. data/ext/pg_query/include/libpq/pqcomm.h +208 -0
  151. data/ext/pg_query/include/libpq/pqformat.h +210 -0
  152. data/ext/pg_query/include/libpq/pqsignal.h +42 -0
  153. data/ext/pg_query/include/mb/pg_wchar.h +672 -0
  154. data/ext/pg_query/include/mb/stringinfo_mb.h +24 -0
  155. data/ext/pg_query/include/miscadmin.h +476 -0
  156. data/ext/pg_query/include/nodes/bitmapset.h +122 -0
  157. data/ext/pg_query/include/nodes/execnodes.h +2520 -0
  158. data/ext/pg_query/include/nodes/extensible.h +160 -0
  159. data/ext/pg_query/include/nodes/lockoptions.h +61 -0
  160. data/ext/pg_query/include/nodes/makefuncs.h +108 -0
  161. data/ext/pg_query/include/nodes/memnodes.h +108 -0
  162. data/ext/pg_query/include/nodes/nodeFuncs.h +162 -0
  163. data/ext/pg_query/include/nodes/nodes.h +842 -0
  164. data/ext/pg_query/include/nodes/params.h +170 -0
  165. data/ext/pg_query/include/nodes/parsenodes.h +3579 -0
  166. data/ext/pg_query/include/nodes/pathnodes.h +2556 -0
  167. data/ext/pg_query/include/nodes/pg_list.h +605 -0
  168. data/ext/pg_query/include/nodes/plannodes.h +1251 -0
  169. data/ext/pg_query/include/nodes/primnodes.h +1541 -0
  170. data/ext/pg_query/include/nodes/print.h +34 -0
  171. data/ext/pg_query/include/nodes/tidbitmap.h +75 -0
  172. data/ext/pg_query/include/nodes/value.h +61 -0
  173. data/ext/pg_query/include/optimizer/cost.h +206 -0
  174. data/ext/pg_query/include/optimizer/geqo.h +88 -0
  175. data/ext/pg_query/include/optimizer/geqo_gene.h +45 -0
  176. data/ext/pg_query/include/optimizer/optimizer.h +199 -0
  177. data/ext/pg_query/include/optimizer/paths.h +249 -0
  178. data/ext/pg_query/include/optimizer/planmain.h +119 -0
  179. data/ext/pg_query/include/parser/analyze.h +49 -0
  180. data/ext/pg_query/include/parser/gram.h +1067 -0
  181. data/ext/pg_query/include/parser/gramparse.h +75 -0
  182. data/ext/pg_query/include/parser/kwlist.h +477 -0
  183. data/ext/pg_query/include/parser/parse_agg.h +68 -0
  184. data/ext/pg_query/include/parser/parse_clause.h +54 -0
  185. data/ext/pg_query/include/parser/parse_coerce.h +97 -0
  186. data/ext/pg_query/include/parser/parse_collate.h +27 -0
  187. data/ext/pg_query/include/parser/parse_expr.h +26 -0
  188. data/ext/pg_query/include/parser/parse_func.h +73 -0
  189. data/ext/pg_query/include/parser/parse_node.h +327 -0
  190. data/ext/pg_query/include/parser/parse_oper.h +67 -0
  191. data/ext/pg_query/include/parser/parse_relation.h +123 -0
  192. data/ext/pg_query/include/parser/parse_target.h +46 -0
  193. data/ext/pg_query/include/parser/parse_type.h +60 -0
  194. data/ext/pg_query/include/parser/parser.h +41 -0
  195. data/ext/pg_query/include/parser/parsetree.h +61 -0
  196. data/ext/pg_query/include/parser/scanner.h +152 -0
  197. data/ext/pg_query/include/parser/scansup.h +30 -0
  198. data/ext/pg_query/include/partitioning/partdefs.h +26 -0
  199. data/ext/pg_query/include/pg_config.h +988 -0
  200. data/ext/pg_query/include/pg_config_ext.h +8 -0
  201. data/ext/pg_query/include/pg_config_manual.h +350 -0
  202. data/ext/pg_query/include/pg_config_os.h +8 -0
  203. data/ext/pg_query/include/pg_getopt.h +56 -0
  204. data/ext/pg_query/include/pg_query.h +121 -0
  205. data/ext/pg_query/include/pg_query_enum_defs.c +2454 -0
  206. data/ext/pg_query/include/pg_query_fingerprint_conds.c +875 -0
  207. data/ext/pg_query/include/pg_query_fingerprint_defs.c +12413 -0
  208. data/ext/pg_query/include/pg_query_json_helper.c +61 -0
  209. data/ext/pg_query/include/pg_query_outfuncs_conds.c +686 -0
  210. data/ext/pg_query/include/pg_query_outfuncs_defs.c +2437 -0
  211. data/ext/pg_query/include/pg_query_readfuncs_conds.c +222 -0
  212. data/ext/pg_query/include/pg_query_readfuncs_defs.c +2878 -0
  213. data/ext/pg_query/include/pg_trace.h +17 -0
  214. data/ext/pg_query/include/pgstat.h +1487 -0
  215. data/ext/pg_query/include/pgtime.h +84 -0
  216. data/ext/pg_query/include/pl_gram.h +385 -0
  217. data/ext/pg_query/include/pl_reserved_kwlist.h +52 -0
  218. data/ext/pg_query/include/pl_reserved_kwlist_d.h +114 -0
  219. data/ext/pg_query/include/pl_unreserved_kwlist.h +112 -0
  220. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +246 -0
  221. data/ext/pg_query/include/plerrcodes.h +990 -0
  222. data/ext/pg_query/include/plpgsql.h +1347 -0
  223. data/ext/pg_query/include/port.h +524 -0
  224. data/ext/pg_query/include/port/atomics.h +524 -0
  225. data/ext/pg_query/include/port/atomics/arch-arm.h +26 -0
  226. data/ext/pg_query/include/port/atomics/arch-ppc.h +254 -0
  227. data/ext/pg_query/include/port/atomics/arch-x86.h +252 -0
  228. data/ext/pg_query/include/port/atomics/fallback.h +170 -0
  229. data/ext/pg_query/include/port/atomics/generic-gcc.h +286 -0
  230. data/ext/pg_query/include/port/atomics/generic.h +401 -0
  231. data/ext/pg_query/include/port/pg_bitutils.h +226 -0
  232. data/ext/pg_query/include/port/pg_bswap.h +161 -0
  233. data/ext/pg_query/include/port/pg_crc32c.h +101 -0
  234. data/ext/pg_query/include/portability/instr_time.h +256 -0
  235. data/ext/pg_query/include/postgres.h +764 -0
  236. data/ext/pg_query/include/postgres_ext.h +74 -0
  237. data/ext/pg_query/include/postmaster/autovacuum.h +83 -0
  238. data/ext/pg_query/include/postmaster/bgworker.h +161 -0
  239. data/ext/pg_query/include/postmaster/bgworker_internals.h +64 -0
  240. data/ext/pg_query/include/postmaster/bgwriter.h +45 -0
  241. data/ext/pg_query/include/postmaster/fork_process.h +17 -0
  242. data/ext/pg_query/include/postmaster/interrupt.h +32 -0
  243. data/ext/pg_query/include/postmaster/pgarch.h +39 -0
  244. data/ext/pg_query/include/postmaster/postmaster.h +77 -0
  245. data/ext/pg_query/include/postmaster/syslogger.h +98 -0
  246. data/ext/pg_query/include/postmaster/walwriter.h +21 -0
  247. data/ext/pg_query/include/protobuf-c.h +1106 -0
  248. data/ext/pg_query/include/protobuf-c/protobuf-c.h +1106 -0
  249. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +10846 -0
  250. data/ext/pg_query/include/protobuf/pg_query.pb.h +124718 -0
  251. data/ext/pg_query/include/regex/regex.h +184 -0
  252. data/ext/pg_query/include/replication/logicallauncher.h +31 -0
  253. data/ext/pg_query/include/replication/logicalproto.h +110 -0
  254. data/ext/pg_query/include/replication/logicalworker.h +19 -0
  255. data/ext/pg_query/include/replication/origin.h +73 -0
  256. data/ext/pg_query/include/replication/reorderbuffer.h +467 -0
  257. data/ext/pg_query/include/replication/slot.h +219 -0
  258. data/ext/pg_query/include/replication/syncrep.h +115 -0
  259. data/ext/pg_query/include/replication/walreceiver.h +340 -0
  260. data/ext/pg_query/include/replication/walsender.h +74 -0
  261. data/ext/pg_query/include/rewrite/prs2lock.h +46 -0
  262. data/ext/pg_query/include/rewrite/rewriteHandler.h +40 -0
  263. data/ext/pg_query/include/rewrite/rewriteManip.h +87 -0
  264. data/ext/pg_query/include/rewrite/rewriteSupport.h +26 -0
  265. data/ext/pg_query/include/storage/backendid.h +37 -0
  266. data/ext/pg_query/include/storage/block.h +121 -0
  267. data/ext/pg_query/include/storage/buf.h +46 -0
  268. data/ext/pg_query/include/storage/bufmgr.h +292 -0
  269. data/ext/pg_query/include/storage/bufpage.h +459 -0
  270. data/ext/pg_query/include/storage/condition_variable.h +62 -0
  271. data/ext/pg_query/include/storage/dsm.h +61 -0
  272. data/ext/pg_query/include/storage/dsm_impl.h +75 -0
  273. data/ext/pg_query/include/storage/fd.h +168 -0
  274. data/ext/pg_query/include/storage/ipc.h +81 -0
  275. data/ext/pg_query/include/storage/item.h +19 -0
  276. data/ext/pg_query/include/storage/itemid.h +184 -0
  277. data/ext/pg_query/include/storage/itemptr.h +206 -0
  278. data/ext/pg_query/include/storage/large_object.h +100 -0
  279. data/ext/pg_query/include/storage/latch.h +190 -0
  280. data/ext/pg_query/include/storage/lmgr.h +114 -0
  281. data/ext/pg_query/include/storage/lock.h +612 -0
  282. data/ext/pg_query/include/storage/lockdefs.h +59 -0
  283. data/ext/pg_query/include/storage/lwlock.h +232 -0
  284. data/ext/pg_query/include/storage/lwlocknames.h +51 -0
  285. data/ext/pg_query/include/storage/off.h +57 -0
  286. data/ext/pg_query/include/storage/pg_sema.h +61 -0
  287. data/ext/pg_query/include/storage/pg_shmem.h +90 -0
  288. data/ext/pg_query/include/storage/pmsignal.h +94 -0
  289. data/ext/pg_query/include/storage/predicate.h +87 -0
  290. data/ext/pg_query/include/storage/proc.h +333 -0
  291. data/ext/pg_query/include/storage/proclist_types.h +51 -0
  292. data/ext/pg_query/include/storage/procsignal.h +75 -0
  293. data/ext/pg_query/include/storage/relfilenode.h +99 -0
  294. data/ext/pg_query/include/storage/s_lock.h +1047 -0
  295. data/ext/pg_query/include/storage/sharedfileset.h +45 -0
  296. data/ext/pg_query/include/storage/shm_mq.h +85 -0
  297. data/ext/pg_query/include/storage/shm_toc.h +58 -0
  298. data/ext/pg_query/include/storage/shmem.h +81 -0
  299. data/ext/pg_query/include/storage/sinval.h +153 -0
  300. data/ext/pg_query/include/storage/sinvaladt.h +43 -0
  301. data/ext/pg_query/include/storage/smgr.h +109 -0
  302. data/ext/pg_query/include/storage/spin.h +77 -0
  303. data/ext/pg_query/include/storage/standby.h +91 -0
  304. data/ext/pg_query/include/storage/standbydefs.h +74 -0
  305. data/ext/pg_query/include/storage/sync.h +62 -0
  306. data/ext/pg_query/include/tcop/cmdtag.h +58 -0
  307. data/ext/pg_query/include/tcop/cmdtaglist.h +217 -0
  308. data/ext/pg_query/include/tcop/deparse_utility.h +108 -0
  309. data/ext/pg_query/include/tcop/dest.h +149 -0
  310. data/ext/pg_query/include/tcop/fastpath.h +21 -0
  311. data/ext/pg_query/include/tcop/pquery.h +45 -0
  312. data/ext/pg_query/include/tcop/tcopprot.h +89 -0
  313. data/ext/pg_query/include/tcop/utility.h +108 -0
  314. data/ext/pg_query/include/tsearch/ts_cache.h +98 -0
  315. data/ext/pg_query/include/utils/acl.h +312 -0
  316. data/ext/pg_query/include/utils/aclchk_internal.h +45 -0
  317. data/ext/pg_query/include/utils/array.h +458 -0
  318. data/ext/pg_query/include/utils/builtins.h +127 -0
  319. data/ext/pg_query/include/utils/bytea.h +27 -0
  320. data/ext/pg_query/include/utils/catcache.h +231 -0
  321. data/ext/pg_query/include/utils/date.h +90 -0
  322. data/ext/pg_query/include/utils/datetime.h +343 -0
  323. data/ext/pg_query/include/utils/datum.h +68 -0
  324. data/ext/pg_query/include/utils/dsa.h +123 -0
  325. data/ext/pg_query/include/utils/dynahash.h +19 -0
  326. data/ext/pg_query/include/utils/elog.h +439 -0
  327. data/ext/pg_query/include/utils/errcodes.h +352 -0
  328. data/ext/pg_query/include/utils/expandeddatum.h +159 -0
  329. data/ext/pg_query/include/utils/expandedrecord.h +231 -0
  330. data/ext/pg_query/include/utils/float.h +356 -0
  331. data/ext/pg_query/include/utils/fmgroids.h +2657 -0
  332. data/ext/pg_query/include/utils/fmgrprotos.h +2646 -0
  333. data/ext/pg_query/include/utils/fmgrtab.h +48 -0
  334. data/ext/pg_query/include/utils/guc.h +443 -0
  335. data/ext/pg_query/include/utils/guc_tables.h +272 -0
  336. data/ext/pg_query/include/utils/hsearch.h +149 -0
  337. data/ext/pg_query/include/utils/inval.h +64 -0
  338. data/ext/pg_query/include/utils/lsyscache.h +197 -0
  339. data/ext/pg_query/include/utils/memdebug.h +82 -0
  340. data/ext/pg_query/include/utils/memutils.h +225 -0
  341. data/ext/pg_query/include/utils/numeric.h +76 -0
  342. data/ext/pg_query/include/utils/palloc.h +136 -0
  343. data/ext/pg_query/include/utils/partcache.h +102 -0
  344. data/ext/pg_query/include/utils/pg_locale.h +119 -0
  345. data/ext/pg_query/include/utils/pg_lsn.h +29 -0
  346. data/ext/pg_query/include/utils/pidfile.h +56 -0
  347. data/ext/pg_query/include/utils/plancache.h +235 -0
  348. data/ext/pg_query/include/utils/portal.h +241 -0
  349. data/ext/pg_query/include/utils/probes.h +114 -0
  350. data/ext/pg_query/include/utils/ps_status.h +25 -0
  351. data/ext/pg_query/include/utils/queryenvironment.h +74 -0
  352. data/ext/pg_query/include/utils/regproc.h +28 -0
  353. data/ext/pg_query/include/utils/rel.h +644 -0
  354. data/ext/pg_query/include/utils/relcache.h +151 -0
  355. data/ext/pg_query/include/utils/reltrigger.h +81 -0
  356. data/ext/pg_query/include/utils/resowner.h +86 -0
  357. data/ext/pg_query/include/utils/rls.h +50 -0
  358. data/ext/pg_query/include/utils/ruleutils.h +44 -0
  359. data/ext/pg_query/include/utils/sharedtuplestore.h +61 -0
  360. data/ext/pg_query/include/utils/snapmgr.h +158 -0
  361. data/ext/pg_query/include/utils/snapshot.h +206 -0
  362. data/ext/pg_query/include/utils/sortsupport.h +276 -0
  363. data/ext/pg_query/include/utils/syscache.h +219 -0
  364. data/ext/pg_query/include/utils/timeout.h +88 -0
  365. data/ext/pg_query/include/utils/timestamp.h +116 -0
  366. data/ext/pg_query/include/utils/tuplesort.h +277 -0
  367. data/ext/pg_query/include/utils/tuplestore.h +91 -0
  368. data/ext/pg_query/include/utils/typcache.h +202 -0
  369. data/ext/pg_query/include/utils/tzparser.h +39 -0
  370. data/ext/pg_query/include/utils/varlena.h +39 -0
  371. data/ext/pg_query/include/utils/xml.h +84 -0
  372. data/ext/pg_query/include/xxhash.h +5445 -0
  373. data/ext/pg_query/include/xxhash/xxhash.h +5445 -0
  374. data/lib/pg_query/version.rb +1 -1
  375. metadata +372 -1
@@ -0,0 +1,170 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * fallback.h
4
+ * Fallback for platforms without spinlock and/or atomics support. Slower
5
+ * than native atomics support, but not unusably slow.
6
+ *
7
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
8
+ * Portions Copyright (c) 1994, Regents of the University of California
9
+ *
10
+ * src/include/port/atomics/fallback.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+
15
+ /* intentionally no include guards, should only be included by atomics.h */
16
+ #ifndef INSIDE_ATOMICS_H
17
+ # error "should be included via atomics.h"
18
+ #endif
19
+
20
+ #ifndef pg_memory_barrier_impl
21
+ /*
22
+ * If we have no memory barrier implementation for this architecture, we
23
+ * fall back to acquiring and releasing a spinlock. This might, in turn,
24
+ * fall back to the semaphore-based spinlock implementation, which will be
25
+ * amazingly slow.
26
+ *
27
+ * It's not self-evident that every possible legal implementation of a
28
+ * spinlock acquire-and-release would be equivalent to a full memory barrier.
29
+ * For example, I'm not sure that Itanium's acq and rel add up to a full
30
+ * fence. But all of our actual implementations seem OK in this regard.
31
+ */
32
+ #define PG_HAVE_MEMORY_BARRIER_EMULATION
33
+
34
+ extern void pg_spinlock_barrier(void);
35
+ #define pg_memory_barrier_impl pg_spinlock_barrier
36
+ #endif
37
+
38
+ #ifndef pg_compiler_barrier_impl
39
+ /*
40
+ * If the compiler/arch combination does not provide compiler barriers,
41
+ * provide a fallback. The fallback simply consists of a function call into
42
+ * an externally defined function. That should guarantee compiler barrier
43
+ * semantics except for compilers that do inter translation unit/global
44
+ * optimization - those better provide an actual compiler barrier.
45
+ *
46
+ * A native compiler barrier for sure is a lot faster than this...
47
+ */
48
+ #define PG_HAVE_COMPILER_BARRIER_EMULATION
49
+ extern void pg_extern_compiler_barrier(void);
50
+ #define pg_compiler_barrier_impl pg_extern_compiler_barrier
51
+ #endif
52
+
53
+
54
+ /*
55
+ * If we have atomics implementation for this platform, fall back to providing
56
+ * the atomics API using a spinlock to protect the internal state. Possibly
57
+ * the spinlock implementation uses semaphores internally...
58
+ *
59
+ * We have to be a bit careful here, as it's not guaranteed that atomic
60
+ * variables are mapped to the same address in every process (e.g. dynamic
61
+ * shared memory segments). We can't just hash the address and use that to map
62
+ * to a spinlock. Instead assign a spinlock on initialization of the atomic
63
+ * variable.
64
+ */
65
+ #if !defined(PG_HAVE_ATOMIC_FLAG_SUPPORT) && !defined(PG_HAVE_ATOMIC_U32_SUPPORT)
66
+
67
+ #define PG_HAVE_ATOMIC_FLAG_SIMULATION
68
+ #define PG_HAVE_ATOMIC_FLAG_SUPPORT
69
+
70
+ typedef struct pg_atomic_flag
71
+ {
72
+ /*
73
+ * To avoid circular includes we can't use s_lock as a type here. Instead
74
+ * just reserve enough space for all spinlock types. Some platforms would
75
+ * be content with just one byte instead of 4, but that's not too much
76
+ * waste.
77
+ */
78
+ #if defined(__hppa) || defined(__hppa__) /* HP PA-RISC, GCC and HP compilers */
79
+ int sema[4];
80
+ #else
81
+ int sema;
82
+ #endif
83
+ volatile bool value;
84
+ } pg_atomic_flag;
85
+
86
+ #endif /* PG_HAVE_ATOMIC_FLAG_SUPPORT */
87
+
88
+ #if !defined(PG_HAVE_ATOMIC_U32_SUPPORT)
89
+
90
+ #define PG_HAVE_ATOMIC_U32_SIMULATION
91
+
92
+ #define PG_HAVE_ATOMIC_U32_SUPPORT
93
+ typedef struct pg_atomic_uint32
94
+ {
95
+ /* Check pg_atomic_flag's definition above for an explanation */
96
+ #if defined(__hppa) || defined(__hppa__) /* HP PA-RISC, GCC and HP compilers */
97
+ int sema[4];
98
+ #else
99
+ int sema;
100
+ #endif
101
+ volatile uint32 value;
102
+ } pg_atomic_uint32;
103
+
104
+ #endif /* PG_HAVE_ATOMIC_U32_SUPPORT */
105
+
106
+ #if !defined(PG_HAVE_ATOMIC_U64_SUPPORT)
107
+
108
+ #define PG_HAVE_ATOMIC_U64_SIMULATION
109
+
110
+ #define PG_HAVE_ATOMIC_U64_SUPPORT
111
+ typedef struct pg_atomic_uint64
112
+ {
113
+ /* Check pg_atomic_flag's definition above for an explanation */
114
+ #if defined(__hppa) || defined(__hppa__) /* HP PA-RISC, GCC and HP compilers */
115
+ int sema[4];
116
+ #else
117
+ int sema;
118
+ #endif
119
+ volatile uint64 value;
120
+ } pg_atomic_uint64;
121
+
122
+ #endif /* PG_HAVE_ATOMIC_U64_SUPPORT */
123
+
124
+ #ifdef PG_HAVE_ATOMIC_FLAG_SIMULATION
125
+
126
+ #define PG_HAVE_ATOMIC_INIT_FLAG
127
+ extern void pg_atomic_init_flag_impl(volatile pg_atomic_flag *ptr);
128
+
129
+ #define PG_HAVE_ATOMIC_TEST_SET_FLAG
130
+ extern bool pg_atomic_test_set_flag_impl(volatile pg_atomic_flag *ptr);
131
+
132
+ #define PG_HAVE_ATOMIC_CLEAR_FLAG
133
+ extern void pg_atomic_clear_flag_impl(volatile pg_atomic_flag *ptr);
134
+
135
+ #define PG_HAVE_ATOMIC_UNLOCKED_TEST_FLAG
136
+ extern bool pg_atomic_unlocked_test_flag_impl(volatile pg_atomic_flag *ptr);
137
+
138
+ #endif /* PG_HAVE_ATOMIC_FLAG_SIMULATION */
139
+
140
+ #ifdef PG_HAVE_ATOMIC_U32_SIMULATION
141
+
142
+ #define PG_HAVE_ATOMIC_INIT_U32
143
+ extern void pg_atomic_init_u32_impl(volatile pg_atomic_uint32 *ptr, uint32 val_);
144
+
145
+ #define PG_HAVE_ATOMIC_WRITE_U32
146
+ extern void pg_atomic_write_u32_impl(volatile pg_atomic_uint32 *ptr, uint32 val);
147
+
148
+ #define PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U32
149
+ extern bool pg_atomic_compare_exchange_u32_impl(volatile pg_atomic_uint32 *ptr,
150
+ uint32 *expected, uint32 newval);
151
+
152
+ #define PG_HAVE_ATOMIC_FETCH_ADD_U32
153
+ extern uint32 pg_atomic_fetch_add_u32_impl(volatile pg_atomic_uint32 *ptr, int32 add_);
154
+
155
+ #endif /* PG_HAVE_ATOMIC_U32_SIMULATION */
156
+
157
+
158
+ #ifdef PG_HAVE_ATOMIC_U64_SIMULATION
159
+
160
+ #define PG_HAVE_ATOMIC_INIT_U64
161
+ extern void pg_atomic_init_u64_impl(volatile pg_atomic_uint64 *ptr, uint64 val_);
162
+
163
+ #define PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U64
164
+ extern bool pg_atomic_compare_exchange_u64_impl(volatile pg_atomic_uint64 *ptr,
165
+ uint64 *expected, uint64 newval);
166
+
167
+ #define PG_HAVE_ATOMIC_FETCH_ADD_U64
168
+ extern uint64 pg_atomic_fetch_add_u64_impl(volatile pg_atomic_uint64 *ptr, int64 add_);
169
+
170
+ #endif /* PG_HAVE_ATOMIC_U64_SIMULATION */
@@ -0,0 +1,286 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * generic-gcc.h
4
+ * Atomic operations, implemented using gcc (or compatible) intrinsics.
5
+ *
6
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1994, Regents of the University of California
8
+ *
9
+ * NOTES:
10
+ *
11
+ * Documentation:
12
+ * * Legacy __sync Built-in Functions for Atomic Memory Access
13
+ * http://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/_005f_005fsync-Builtins.html
14
+ * * Built-in functions for memory model aware atomic operations
15
+ * http://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/_005f_005fatomic-Builtins.html
16
+ *
17
+ * src/include/port/atomics/generic-gcc.h
18
+ *
19
+ *-------------------------------------------------------------------------
20
+ */
21
+
22
+ /* intentionally no include guards, should only be included by atomics.h */
23
+ #ifndef INSIDE_ATOMICS_H
24
+ #error "should be included via atomics.h"
25
+ #endif
26
+
27
+ /*
28
+ * An empty asm block should be a sufficient compiler barrier.
29
+ */
30
+ #define pg_compiler_barrier_impl() __asm__ __volatile__("" ::: "memory")
31
+
32
+ /*
33
+ * If we're on GCC 4.1.0 or higher, we should be able to get a memory barrier
34
+ * out of this compiler built-in. But we prefer to rely on platform specific
35
+ * definitions where possible, and use this only as a fallback.
36
+ */
37
+ #if !defined(pg_memory_barrier_impl)
38
+ # if defined(HAVE_GCC__ATOMIC_INT32_CAS)
39
+ # define pg_memory_barrier_impl() __atomic_thread_fence(__ATOMIC_SEQ_CST)
40
+ # elif (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1))
41
+ # define pg_memory_barrier_impl() __sync_synchronize()
42
+ # endif
43
+ #endif /* !defined(pg_memory_barrier_impl) */
44
+
45
+ #if !defined(pg_read_barrier_impl) && defined(HAVE_GCC__ATOMIC_INT32_CAS)
46
+ /* acquire semantics include read barrier semantics */
47
+ # define pg_read_barrier_impl() __atomic_thread_fence(__ATOMIC_ACQUIRE)
48
+ #endif
49
+
50
+ #if !defined(pg_write_barrier_impl) && defined(HAVE_GCC__ATOMIC_INT32_CAS)
51
+ /* release semantics include write barrier semantics */
52
+ # define pg_write_barrier_impl() __atomic_thread_fence(__ATOMIC_RELEASE)
53
+ #endif
54
+
55
+
56
+ #ifdef HAVE_ATOMICS
57
+
58
+ /* generic gcc based atomic flag implementation */
59
+ #if !defined(PG_HAVE_ATOMIC_FLAG_SUPPORT) \
60
+ && (defined(HAVE_GCC__SYNC_INT32_TAS) || defined(HAVE_GCC__SYNC_CHAR_TAS))
61
+
62
+ #define PG_HAVE_ATOMIC_FLAG_SUPPORT
63
+ typedef struct pg_atomic_flag
64
+ {
65
+ /*
66
+ * If we have a choice, use int-width TAS, because that is more efficient
67
+ * and/or more reliably implemented on most non-Intel platforms. (Note
68
+ * that this code isn't used on x86[_64]; see arch-x86.h for that.)
69
+ */
70
+ #ifdef HAVE_GCC__SYNC_INT32_TAS
71
+ volatile int value;
72
+ #else
73
+ volatile char value;
74
+ #endif
75
+ } pg_atomic_flag;
76
+
77
+ #endif /* !ATOMIC_FLAG_SUPPORT && SYNC_INT32_TAS */
78
+
79
+ /* generic gcc based atomic uint32 implementation */
80
+ #if !defined(PG_HAVE_ATOMIC_U32_SUPPORT) \
81
+ && (defined(HAVE_GCC__ATOMIC_INT32_CAS) || defined(HAVE_GCC__SYNC_INT32_CAS))
82
+
83
+ #define PG_HAVE_ATOMIC_U32_SUPPORT
84
+ typedef struct pg_atomic_uint32
85
+ {
86
+ volatile uint32 value;
87
+ } pg_atomic_uint32;
88
+
89
+ #endif /* defined(HAVE_GCC__ATOMIC_INT32_CAS) || defined(HAVE_GCC__SYNC_INT32_CAS) */
90
+
91
+ /* generic gcc based atomic uint64 implementation */
92
+ #if !defined(PG_HAVE_ATOMIC_U64_SUPPORT) \
93
+ && !defined(PG_DISABLE_64_BIT_ATOMICS) \
94
+ && (defined(HAVE_GCC__ATOMIC_INT64_CAS) || defined(HAVE_GCC__SYNC_INT64_CAS))
95
+
96
+ #define PG_HAVE_ATOMIC_U64_SUPPORT
97
+
98
+ typedef struct pg_atomic_uint64
99
+ {
100
+ volatile uint64 value pg_attribute_aligned(8);
101
+ } pg_atomic_uint64;
102
+
103
+ #endif /* defined(HAVE_GCC__ATOMIC_INT64_CAS) || defined(HAVE_GCC__SYNC_INT64_CAS) */
104
+
105
+ #ifdef PG_HAVE_ATOMIC_FLAG_SUPPORT
106
+
107
+ #if defined(HAVE_GCC__SYNC_CHAR_TAS) || defined(HAVE_GCC__SYNC_INT32_TAS)
108
+
109
+ #ifndef PG_HAVE_ATOMIC_TEST_SET_FLAG
110
+ #define PG_HAVE_ATOMIC_TEST_SET_FLAG
111
+ static inline bool
112
+ pg_atomic_test_set_flag_impl(volatile pg_atomic_flag *ptr)
113
+ {
114
+ /* NB: only an acquire barrier, not a full one */
115
+ /* some platform only support a 1 here */
116
+ return __sync_lock_test_and_set(&ptr->value, 1) == 0;
117
+ }
118
+ #endif
119
+
120
+ #endif /* defined(HAVE_GCC__SYNC_*_TAS) */
121
+
122
+ #ifndef PG_HAVE_ATOMIC_UNLOCKED_TEST_FLAG
123
+ #define PG_HAVE_ATOMIC_UNLOCKED_TEST_FLAG
124
+ static inline bool
125
+ pg_atomic_unlocked_test_flag_impl(volatile pg_atomic_flag *ptr)
126
+ {
127
+ return ptr->value == 0;
128
+ }
129
+ #endif
130
+
131
+ #ifndef PG_HAVE_ATOMIC_CLEAR_FLAG
132
+ #define PG_HAVE_ATOMIC_CLEAR_FLAG
133
+ static inline void
134
+ pg_atomic_clear_flag_impl(volatile pg_atomic_flag *ptr)
135
+ {
136
+ __sync_lock_release(&ptr->value);
137
+ }
138
+ #endif
139
+
140
+ #ifndef PG_HAVE_ATOMIC_INIT_FLAG
141
+ #define PG_HAVE_ATOMIC_INIT_FLAG
142
+ static inline void
143
+ pg_atomic_init_flag_impl(volatile pg_atomic_flag *ptr)
144
+ {
145
+ pg_atomic_clear_flag_impl(ptr);
146
+ }
147
+ #endif
148
+
149
+ #endif /* defined(PG_HAVE_ATOMIC_FLAG_SUPPORT) */
150
+
151
+ /* prefer __atomic, it has a better API */
152
+ #if !defined(PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U32) && defined(HAVE_GCC__ATOMIC_INT32_CAS)
153
+ #define PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U32
154
+ static inline bool
155
+ pg_atomic_compare_exchange_u32_impl(volatile pg_atomic_uint32 *ptr,
156
+ uint32 *expected, uint32 newval)
157
+ {
158
+ /* FIXME: we can probably use a lower consistency model */
159
+ return __atomic_compare_exchange_n(&ptr->value, expected, newval, false,
160
+ __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
161
+ }
162
+ #endif
163
+
164
+ #if !defined(PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U32) && defined(HAVE_GCC__SYNC_INT32_CAS)
165
+ #define PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U32
166
+ static inline bool
167
+ pg_atomic_compare_exchange_u32_impl(volatile pg_atomic_uint32 *ptr,
168
+ uint32 *expected, uint32 newval)
169
+ {
170
+ bool ret;
171
+ uint32 current;
172
+ current = __sync_val_compare_and_swap(&ptr->value, *expected, newval);
173
+ ret = current == *expected;
174
+ *expected = current;
175
+ return ret;
176
+ }
177
+ #endif
178
+
179
+ /* if we have 32-bit __sync_val_compare_and_swap, assume we have these too: */
180
+
181
+ #if !defined(PG_HAVE_ATOMIC_FETCH_ADD_U32) && defined(HAVE_GCC__SYNC_INT32_CAS)
182
+ #define PG_HAVE_ATOMIC_FETCH_ADD_U32
183
+ static inline uint32
184
+ pg_atomic_fetch_add_u32_impl(volatile pg_atomic_uint32 *ptr, int32 add_)
185
+ {
186
+ return __sync_fetch_and_add(&ptr->value, add_);
187
+ }
188
+ #endif
189
+
190
+ #if !defined(PG_HAVE_ATOMIC_FETCH_SUB_U32) && defined(HAVE_GCC__SYNC_INT32_CAS)
191
+ #define PG_HAVE_ATOMIC_FETCH_SUB_U32
192
+ static inline uint32
193
+ pg_atomic_fetch_sub_u32_impl(volatile pg_atomic_uint32 *ptr, int32 sub_)
194
+ {
195
+ return __sync_fetch_and_sub(&ptr->value, sub_);
196
+ }
197
+ #endif
198
+
199
+ #if !defined(PG_HAVE_ATOMIC_FETCH_AND_U32) && defined(HAVE_GCC__SYNC_INT32_CAS)
200
+ #define PG_HAVE_ATOMIC_FETCH_AND_U32
201
+ static inline uint32
202
+ pg_atomic_fetch_and_u32_impl(volatile pg_atomic_uint32 *ptr, uint32 and_)
203
+ {
204
+ return __sync_fetch_and_and(&ptr->value, and_);
205
+ }
206
+ #endif
207
+
208
+ #if !defined(PG_HAVE_ATOMIC_FETCH_OR_U32) && defined(HAVE_GCC__SYNC_INT32_CAS)
209
+ #define PG_HAVE_ATOMIC_FETCH_OR_U32
210
+ static inline uint32
211
+ pg_atomic_fetch_or_u32_impl(volatile pg_atomic_uint32 *ptr, uint32 or_)
212
+ {
213
+ return __sync_fetch_and_or(&ptr->value, or_);
214
+ }
215
+ #endif
216
+
217
+
218
+ #if !defined(PG_DISABLE_64_BIT_ATOMICS)
219
+
220
+ #if !defined(PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U64) && defined(HAVE_GCC__ATOMIC_INT64_CAS)
221
+ #define PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U64
222
+ static inline bool
223
+ pg_atomic_compare_exchange_u64_impl(volatile pg_atomic_uint64 *ptr,
224
+ uint64 *expected, uint64 newval)
225
+ {
226
+ return __atomic_compare_exchange_n(&ptr->value, expected, newval, false,
227
+ __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
228
+ }
229
+ #endif
230
+
231
+ #if !defined(PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U64) && defined(HAVE_GCC__SYNC_INT64_CAS)
232
+ #define PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U64
233
+ static inline bool
234
+ pg_atomic_compare_exchange_u64_impl(volatile pg_atomic_uint64 *ptr,
235
+ uint64 *expected, uint64 newval)
236
+ {
237
+ bool ret;
238
+ uint64 current;
239
+ current = __sync_val_compare_and_swap(&ptr->value, *expected, newval);
240
+ ret = current == *expected;
241
+ *expected = current;
242
+ return ret;
243
+ }
244
+ #endif
245
+
246
+ /* if we have 64-bit __sync_val_compare_and_swap, assume we have these too: */
247
+
248
+ #if !defined(PG_HAVE_ATOMIC_FETCH_ADD_U64) && defined(HAVE_GCC__SYNC_INT64_CAS)
249
+ #define PG_HAVE_ATOMIC_FETCH_ADD_U64
250
+ static inline uint64
251
+ pg_atomic_fetch_add_u64_impl(volatile pg_atomic_uint64 *ptr, int64 add_)
252
+ {
253
+ return __sync_fetch_and_add(&ptr->value, add_);
254
+ }
255
+ #endif
256
+
257
+ #if !defined(PG_HAVE_ATOMIC_FETCH_SUB_U64) && defined(HAVE_GCC__SYNC_INT64_CAS)
258
+ #define PG_HAVE_ATOMIC_FETCH_SUB_U64
259
+ static inline uint64
260
+ pg_atomic_fetch_sub_u64_impl(volatile pg_atomic_uint64 *ptr, int64 sub_)
261
+ {
262
+ return __sync_fetch_and_sub(&ptr->value, sub_);
263
+ }
264
+ #endif
265
+
266
+ #if !defined(PG_HAVE_ATOMIC_FETCH_AND_U64) && defined(HAVE_GCC__SYNC_INT64_CAS)
267
+ #define PG_HAVE_ATOMIC_FETCH_AND_U64
268
+ static inline uint64
269
+ pg_atomic_fetch_and_u64_impl(volatile pg_atomic_uint64 *ptr, uint64 and_)
270
+ {
271
+ return __sync_fetch_and_and(&ptr->value, and_);
272
+ }
273
+ #endif
274
+
275
+ #if !defined(PG_HAVE_ATOMIC_FETCH_OR_U64) && defined(HAVE_GCC__SYNC_INT64_CAS)
276
+ #define PG_HAVE_ATOMIC_FETCH_OR_U64
277
+ static inline uint64
278
+ pg_atomic_fetch_or_u64_impl(volatile pg_atomic_uint64 *ptr, uint64 or_)
279
+ {
280
+ return __sync_fetch_and_or(&ptr->value, or_);
281
+ }
282
+ #endif
283
+
284
+ #endif /* !defined(PG_DISABLE_64_BIT_ATOMICS) */
285
+
286
+ #endif /* defined(HAVE_ATOMICS) */