gitlab-pg_query 1.3.1 → 2.0.4

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 (480) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +217 -99
  3. data/README.md +92 -69
  4. data/Rakefile +85 -5
  5. data/ext/pg_query/extconf.rb +3 -40
  6. data/ext/pg_query/guc-file.c +0 -0
  7. data/ext/pg_query/include/access/amapi.h +246 -0
  8. data/ext/pg_query/include/access/attmap.h +52 -0
  9. data/ext/pg_query/include/access/attnum.h +64 -0
  10. data/ext/pg_query/include/access/clog.h +61 -0
  11. data/ext/pg_query/include/access/commit_ts.h +77 -0
  12. data/ext/pg_query/include/access/detoast.h +92 -0
  13. data/ext/pg_query/include/access/genam.h +228 -0
  14. data/ext/pg_query/include/access/gin.h +78 -0
  15. data/ext/pg_query/include/access/htup.h +89 -0
  16. data/ext/pg_query/include/access/htup_details.h +819 -0
  17. data/ext/pg_query/include/access/itup.h +161 -0
  18. data/ext/pg_query/include/access/parallel.h +82 -0
  19. data/ext/pg_query/include/access/printtup.h +35 -0
  20. data/ext/pg_query/include/access/relation.h +28 -0
  21. data/ext/pg_query/include/access/relscan.h +176 -0
  22. data/ext/pg_query/include/access/rmgr.h +35 -0
  23. data/ext/pg_query/include/access/rmgrlist.h +49 -0
  24. data/ext/pg_query/include/access/sdir.h +58 -0
  25. data/ext/pg_query/include/access/skey.h +151 -0
  26. data/ext/pg_query/include/access/stratnum.h +83 -0
  27. data/ext/pg_query/include/access/sysattr.h +29 -0
  28. data/ext/pg_query/include/access/table.h +27 -0
  29. data/ext/pg_query/include/access/tableam.h +1825 -0
  30. data/ext/pg_query/include/access/transam.h +265 -0
  31. data/ext/pg_query/include/access/tupconvert.h +51 -0
  32. data/ext/pg_query/include/access/tupdesc.h +154 -0
  33. data/ext/pg_query/include/access/tupmacs.h +247 -0
  34. data/ext/pg_query/include/access/twophase.h +61 -0
  35. data/ext/pg_query/include/access/xact.h +463 -0
  36. data/ext/pg_query/include/access/xlog.h +398 -0
  37. data/ext/pg_query/include/access/xlog_internal.h +330 -0
  38. data/ext/pg_query/include/access/xlogdefs.h +109 -0
  39. data/ext/pg_query/include/access/xloginsert.h +64 -0
  40. data/ext/pg_query/include/access/xlogreader.h +327 -0
  41. data/ext/pg_query/include/access/xlogrecord.h +227 -0
  42. data/ext/pg_query/include/bootstrap/bootstrap.h +62 -0
  43. data/ext/pg_query/include/c.h +1322 -0
  44. data/ext/pg_query/include/catalog/catalog.h +42 -0
  45. data/ext/pg_query/include/catalog/catversion.h +58 -0
  46. data/ext/pg_query/include/catalog/dependency.h +275 -0
  47. data/ext/pg_query/include/catalog/genbki.h +64 -0
  48. data/ext/pg_query/include/catalog/index.h +199 -0
  49. data/ext/pg_query/include/catalog/indexing.h +366 -0
  50. data/ext/pg_query/include/catalog/namespace.h +188 -0
  51. data/ext/pg_query/include/catalog/objectaccess.h +197 -0
  52. data/ext/pg_query/include/catalog/objectaddress.h +84 -0
  53. data/ext/pg_query/include/catalog/pg_aggregate.h +176 -0
  54. data/ext/pg_query/include/catalog/pg_aggregate_d.h +77 -0
  55. data/ext/pg_query/include/catalog/pg_am.h +60 -0
  56. data/ext/pg_query/include/catalog/pg_am_d.h +45 -0
  57. data/ext/pg_query/include/catalog/pg_attribute.h +204 -0
  58. data/ext/pg_query/include/catalog/pg_attribute_d.h +59 -0
  59. data/ext/pg_query/include/catalog/pg_authid.h +58 -0
  60. data/ext/pg_query/include/catalog/pg_authid_d.h +49 -0
  61. data/ext/pg_query/include/catalog/pg_class.h +200 -0
  62. data/ext/pg_query/include/catalog/pg_class_d.h +103 -0
  63. data/ext/pg_query/include/catalog/pg_collation.h +73 -0
  64. data/ext/pg_query/include/catalog/pg_collation_d.h +45 -0
  65. data/ext/pg_query/include/catalog/pg_constraint.h +247 -0
  66. data/ext/pg_query/include/catalog/pg_constraint_d.h +67 -0
  67. data/ext/pg_query/include/catalog/pg_control.h +250 -0
  68. data/ext/pg_query/include/catalog/pg_conversion.h +72 -0
  69. data/ext/pg_query/include/catalog/pg_conversion_d.h +35 -0
  70. data/ext/pg_query/include/catalog/pg_depend.h +73 -0
  71. data/ext/pg_query/include/catalog/pg_depend_d.h +34 -0
  72. data/ext/pg_query/include/catalog/pg_event_trigger.h +51 -0
  73. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +34 -0
  74. data/ext/pg_query/include/catalog/pg_index.h +80 -0
  75. data/ext/pg_query/include/catalog/pg_index_d.h +56 -0
  76. data/ext/pg_query/include/catalog/pg_language.h +67 -0
  77. data/ext/pg_query/include/catalog/pg_language_d.h +39 -0
  78. data/ext/pg_query/include/catalog/pg_namespace.h +59 -0
  79. data/ext/pg_query/include/catalog/pg_namespace_d.h +34 -0
  80. data/ext/pg_query/include/catalog/pg_opclass.h +85 -0
  81. data/ext/pg_query/include/catalog/pg_opclass_d.h +49 -0
  82. data/ext/pg_query/include/catalog/pg_operator.h +102 -0
  83. data/ext/pg_query/include/catalog/pg_operator_d.h +106 -0
  84. data/ext/pg_query/include/catalog/pg_opfamily.h +60 -0
  85. data/ext/pg_query/include/catalog/pg_opfamily_d.h +47 -0
  86. data/ext/pg_query/include/catalog/pg_partitioned_table.h +63 -0
  87. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +35 -0
  88. data/ext/pg_query/include/catalog/pg_proc.h +211 -0
  89. data/ext/pg_query/include/catalog/pg_proc_d.h +99 -0
  90. data/ext/pg_query/include/catalog/pg_publication.h +115 -0
  91. data/ext/pg_query/include/catalog/pg_publication_d.h +36 -0
  92. data/ext/pg_query/include/catalog/pg_replication_origin.h +57 -0
  93. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +29 -0
  94. data/ext/pg_query/include/catalog/pg_statistic.h +275 -0
  95. data/ext/pg_query/include/catalog/pg_statistic_d.h +194 -0
  96. data/ext/pg_query/include/catalog/pg_statistic_ext.h +74 -0
  97. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +40 -0
  98. data/ext/pg_query/include/catalog/pg_transform.h +45 -0
  99. data/ext/pg_query/include/catalog/pg_transform_d.h +32 -0
  100. data/ext/pg_query/include/catalog/pg_trigger.h +137 -0
  101. data/ext/pg_query/include/catalog/pg_trigger_d.h +106 -0
  102. data/ext/pg_query/include/catalog/pg_ts_config.h +50 -0
  103. data/ext/pg_query/include/catalog/pg_ts_config_d.h +32 -0
  104. data/ext/pg_query/include/catalog/pg_ts_dict.h +54 -0
  105. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +33 -0
  106. data/ext/pg_query/include/catalog/pg_ts_parser.h +57 -0
  107. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +35 -0
  108. data/ext/pg_query/include/catalog/pg_ts_template.h +48 -0
  109. data/ext/pg_query/include/catalog/pg_ts_template_d.h +32 -0
  110. data/ext/pg_query/include/catalog/pg_type.h +372 -0
  111. data/ext/pg_query/include/catalog/pg_type_d.h +285 -0
  112. data/ext/pg_query/include/catalog/storage.h +48 -0
  113. data/ext/pg_query/include/commands/async.h +54 -0
  114. data/ext/pg_query/include/commands/dbcommands.h +35 -0
  115. data/ext/pg_query/include/commands/defrem.h +173 -0
  116. data/ext/pg_query/include/commands/event_trigger.h +88 -0
  117. data/ext/pg_query/include/commands/explain.h +127 -0
  118. data/ext/pg_query/include/commands/prepare.h +61 -0
  119. data/ext/pg_query/include/commands/tablespace.h +67 -0
  120. data/ext/pg_query/include/commands/trigger.h +277 -0
  121. data/ext/pg_query/include/commands/user.h +37 -0
  122. data/ext/pg_query/include/commands/vacuum.h +293 -0
  123. data/ext/pg_query/include/commands/variable.h +38 -0
  124. data/ext/pg_query/include/common/file_perm.h +56 -0
  125. data/ext/pg_query/include/common/hashfn.h +104 -0
  126. data/ext/pg_query/include/common/ip.h +37 -0
  127. data/ext/pg_query/include/common/keywords.h +33 -0
  128. data/ext/pg_query/include/common/kwlookup.h +44 -0
  129. data/ext/pg_query/include/common/relpath.h +90 -0
  130. data/ext/pg_query/include/common/string.h +19 -0
  131. data/ext/pg_query/include/common/unicode_combining_table.h +196 -0
  132. data/ext/pg_query/include/datatype/timestamp.h +197 -0
  133. data/ext/pg_query/include/executor/execdesc.h +70 -0
  134. data/ext/pg_query/include/executor/executor.h +614 -0
  135. data/ext/pg_query/include/executor/functions.h +41 -0
  136. data/ext/pg_query/include/executor/instrument.h +101 -0
  137. data/ext/pg_query/include/executor/spi.h +175 -0
  138. data/ext/pg_query/include/executor/tablefunc.h +67 -0
  139. data/ext/pg_query/include/executor/tuptable.h +487 -0
  140. data/ext/pg_query/include/fmgr.h +775 -0
  141. data/ext/pg_query/include/funcapi.h +348 -0
  142. data/ext/pg_query/include/getaddrinfo.h +162 -0
  143. data/ext/pg_query/include/jit/jit.h +105 -0
  144. data/ext/pg_query/include/kwlist_d.h +1072 -0
  145. data/ext/pg_query/include/lib/ilist.h +727 -0
  146. data/ext/pg_query/include/lib/pairingheap.h +102 -0
  147. data/ext/pg_query/include/lib/simplehash.h +1059 -0
  148. data/ext/pg_query/include/lib/stringinfo.h +161 -0
  149. data/ext/pg_query/include/libpq/auth.h +29 -0
  150. data/ext/pg_query/include/libpq/crypt.h +46 -0
  151. data/ext/pg_query/include/libpq/hba.h +140 -0
  152. data/ext/pg_query/include/libpq/libpq-be.h +326 -0
  153. data/ext/pg_query/include/libpq/libpq.h +133 -0
  154. data/ext/pg_query/include/libpq/pqcomm.h +208 -0
  155. data/ext/pg_query/include/libpq/pqformat.h +210 -0
  156. data/ext/pg_query/include/libpq/pqsignal.h +42 -0
  157. data/ext/pg_query/include/mb/pg_wchar.h +672 -0
  158. data/ext/pg_query/include/mb/stringinfo_mb.h +24 -0
  159. data/ext/pg_query/include/miscadmin.h +476 -0
  160. data/ext/pg_query/include/nodes/bitmapset.h +122 -0
  161. data/ext/pg_query/include/nodes/execnodes.h +2520 -0
  162. data/ext/pg_query/include/nodes/extensible.h +160 -0
  163. data/ext/pg_query/include/nodes/lockoptions.h +61 -0
  164. data/ext/pg_query/include/nodes/makefuncs.h +108 -0
  165. data/ext/pg_query/include/nodes/memnodes.h +108 -0
  166. data/ext/pg_query/include/nodes/nodeFuncs.h +162 -0
  167. data/ext/pg_query/include/nodes/nodes.h +842 -0
  168. data/ext/pg_query/include/nodes/params.h +170 -0
  169. data/ext/pg_query/include/nodes/parsenodes.h +3579 -0
  170. data/ext/pg_query/include/nodes/pathnodes.h +2556 -0
  171. data/ext/pg_query/include/nodes/pg_list.h +605 -0
  172. data/ext/pg_query/include/nodes/plannodes.h +1251 -0
  173. data/ext/pg_query/include/nodes/primnodes.h +1541 -0
  174. data/ext/pg_query/include/nodes/print.h +34 -0
  175. data/ext/pg_query/include/nodes/tidbitmap.h +75 -0
  176. data/ext/pg_query/include/nodes/value.h +61 -0
  177. data/ext/pg_query/include/optimizer/cost.h +206 -0
  178. data/ext/pg_query/include/optimizer/geqo.h +88 -0
  179. data/ext/pg_query/include/optimizer/geqo_gene.h +45 -0
  180. data/ext/pg_query/include/optimizer/optimizer.h +199 -0
  181. data/ext/pg_query/include/optimizer/paths.h +249 -0
  182. data/ext/pg_query/include/optimizer/planmain.h +119 -0
  183. data/ext/pg_query/include/parser/analyze.h +49 -0
  184. data/ext/pg_query/include/parser/gram.h +1067 -0
  185. data/ext/pg_query/include/parser/gramparse.h +75 -0
  186. data/ext/pg_query/include/parser/kwlist.h +477 -0
  187. data/ext/pg_query/include/parser/parse_agg.h +68 -0
  188. data/ext/pg_query/include/parser/parse_clause.h +54 -0
  189. data/ext/pg_query/include/parser/parse_coerce.h +97 -0
  190. data/ext/pg_query/include/parser/parse_collate.h +27 -0
  191. data/ext/pg_query/include/parser/parse_expr.h +26 -0
  192. data/ext/pg_query/include/parser/parse_func.h +73 -0
  193. data/ext/pg_query/include/parser/parse_node.h +327 -0
  194. data/ext/pg_query/include/parser/parse_oper.h +67 -0
  195. data/ext/pg_query/include/parser/parse_relation.h +123 -0
  196. data/ext/pg_query/include/parser/parse_target.h +46 -0
  197. data/ext/pg_query/include/parser/parse_type.h +60 -0
  198. data/ext/pg_query/include/parser/parser.h +41 -0
  199. data/ext/pg_query/include/parser/parsetree.h +61 -0
  200. data/ext/pg_query/include/parser/scanner.h +152 -0
  201. data/ext/pg_query/include/parser/scansup.h +30 -0
  202. data/ext/pg_query/include/partitioning/partdefs.h +26 -0
  203. data/ext/pg_query/include/pg_config.h +989 -0
  204. data/ext/pg_query/include/pg_config_ext.h +8 -0
  205. data/ext/pg_query/include/pg_config_manual.h +350 -0
  206. data/ext/pg_query/include/pg_config_os.h +8 -0
  207. data/ext/pg_query/include/pg_getopt.h +56 -0
  208. data/ext/pg_query/include/pg_query.h +121 -0
  209. data/ext/pg_query/include/pg_query_enum_defs.c +2454 -0
  210. data/ext/pg_query/include/pg_query_fingerprint_conds.c +875 -0
  211. data/ext/pg_query/include/pg_query_fingerprint_defs.c +12413 -0
  212. data/ext/pg_query/include/pg_query_json_helper.c +61 -0
  213. data/ext/pg_query/include/pg_query_outfuncs_conds.c +686 -0
  214. data/ext/pg_query/include/pg_query_outfuncs_defs.c +2437 -0
  215. data/ext/pg_query/include/pg_query_readfuncs_conds.c +222 -0
  216. data/ext/pg_query/include/pg_query_readfuncs_defs.c +2878 -0
  217. data/ext/pg_query/include/pg_trace.h +17 -0
  218. data/ext/pg_query/include/pgstat.h +1487 -0
  219. data/ext/pg_query/include/pgtime.h +84 -0
  220. data/ext/pg_query/include/pl_gram.h +385 -0
  221. data/ext/pg_query/include/pl_reserved_kwlist.h +52 -0
  222. data/ext/pg_query/include/pl_reserved_kwlist_d.h +114 -0
  223. data/ext/pg_query/include/pl_unreserved_kwlist.h +112 -0
  224. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +246 -0
  225. data/ext/pg_query/include/plerrcodes.h +990 -0
  226. data/ext/pg_query/include/plpgsql.h +1347 -0
  227. data/ext/pg_query/include/port.h +524 -0
  228. data/ext/pg_query/include/port/atomics.h +524 -0
  229. data/ext/pg_query/include/port/atomics/arch-arm.h +26 -0
  230. data/ext/pg_query/include/port/atomics/arch-ppc.h +254 -0
  231. data/ext/pg_query/include/port/atomics/arch-x86.h +252 -0
  232. data/ext/pg_query/include/port/atomics/fallback.h +170 -0
  233. data/ext/pg_query/include/port/atomics/generic-gcc.h +286 -0
  234. data/ext/pg_query/include/port/atomics/generic.h +401 -0
  235. data/ext/pg_query/include/port/pg_bitutils.h +226 -0
  236. data/ext/pg_query/include/port/pg_bswap.h +161 -0
  237. data/ext/pg_query/include/port/pg_crc32c.h +101 -0
  238. data/ext/pg_query/include/portability/instr_time.h +256 -0
  239. data/ext/pg_query/include/postgres.h +764 -0
  240. data/ext/pg_query/include/postgres_ext.h +74 -0
  241. data/ext/pg_query/include/postmaster/autovacuum.h +83 -0
  242. data/ext/pg_query/include/postmaster/bgworker.h +161 -0
  243. data/ext/pg_query/include/postmaster/bgworker_internals.h +64 -0
  244. data/ext/pg_query/include/postmaster/bgwriter.h +45 -0
  245. data/ext/pg_query/include/postmaster/fork_process.h +17 -0
  246. data/ext/pg_query/include/postmaster/interrupt.h +32 -0
  247. data/ext/pg_query/include/postmaster/pgarch.h +39 -0
  248. data/ext/pg_query/include/postmaster/postmaster.h +77 -0
  249. data/ext/pg_query/include/postmaster/syslogger.h +98 -0
  250. data/ext/pg_query/include/postmaster/walwriter.h +21 -0
  251. data/ext/pg_query/include/protobuf-c.h +1106 -0
  252. data/ext/pg_query/include/protobuf-c/protobuf-c.h +1106 -0
  253. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +10846 -0
  254. data/ext/pg_query/include/protobuf/pg_query.pb.h +124718 -0
  255. data/ext/pg_query/include/regex/regex.h +184 -0
  256. data/ext/pg_query/include/replication/logicallauncher.h +31 -0
  257. data/ext/pg_query/include/replication/logicalproto.h +110 -0
  258. data/ext/pg_query/include/replication/logicalworker.h +19 -0
  259. data/ext/pg_query/include/replication/origin.h +73 -0
  260. data/ext/pg_query/include/replication/reorderbuffer.h +467 -0
  261. data/ext/pg_query/include/replication/slot.h +219 -0
  262. data/ext/pg_query/include/replication/syncrep.h +115 -0
  263. data/ext/pg_query/include/replication/walreceiver.h +340 -0
  264. data/ext/pg_query/include/replication/walsender.h +74 -0
  265. data/ext/pg_query/include/rewrite/prs2lock.h +46 -0
  266. data/ext/pg_query/include/rewrite/rewriteHandler.h +40 -0
  267. data/ext/pg_query/include/rewrite/rewriteManip.h +87 -0
  268. data/ext/pg_query/include/rewrite/rewriteSupport.h +26 -0
  269. data/ext/pg_query/include/storage/backendid.h +37 -0
  270. data/ext/pg_query/include/storage/block.h +121 -0
  271. data/ext/pg_query/include/storage/buf.h +46 -0
  272. data/ext/pg_query/include/storage/bufmgr.h +292 -0
  273. data/ext/pg_query/include/storage/bufpage.h +459 -0
  274. data/ext/pg_query/include/storage/condition_variable.h +62 -0
  275. data/ext/pg_query/include/storage/dsm.h +61 -0
  276. data/ext/pg_query/include/storage/dsm_impl.h +75 -0
  277. data/ext/pg_query/include/storage/fd.h +168 -0
  278. data/ext/pg_query/include/storage/ipc.h +81 -0
  279. data/ext/pg_query/include/storage/item.h +19 -0
  280. data/ext/pg_query/include/storage/itemid.h +184 -0
  281. data/ext/pg_query/include/storage/itemptr.h +206 -0
  282. data/ext/pg_query/include/storage/large_object.h +100 -0
  283. data/ext/pg_query/include/storage/latch.h +190 -0
  284. data/ext/pg_query/include/storage/lmgr.h +114 -0
  285. data/ext/pg_query/include/storage/lock.h +612 -0
  286. data/ext/pg_query/include/storage/lockdefs.h +59 -0
  287. data/ext/pg_query/include/storage/lwlock.h +232 -0
  288. data/ext/pg_query/include/storage/lwlocknames.h +51 -0
  289. data/ext/pg_query/include/storage/off.h +57 -0
  290. data/ext/pg_query/include/storage/pg_sema.h +61 -0
  291. data/ext/pg_query/include/storage/pg_shmem.h +90 -0
  292. data/ext/pg_query/include/storage/pmsignal.h +94 -0
  293. data/ext/pg_query/include/storage/predicate.h +87 -0
  294. data/ext/pg_query/include/storage/proc.h +333 -0
  295. data/ext/pg_query/include/storage/proclist_types.h +51 -0
  296. data/ext/pg_query/include/storage/procsignal.h +75 -0
  297. data/ext/pg_query/include/storage/relfilenode.h +99 -0
  298. data/ext/pg_query/include/storage/s_lock.h +1047 -0
  299. data/ext/pg_query/include/storage/sharedfileset.h +45 -0
  300. data/ext/pg_query/include/storage/shm_mq.h +85 -0
  301. data/ext/pg_query/include/storage/shm_toc.h +58 -0
  302. data/ext/pg_query/include/storage/shmem.h +81 -0
  303. data/ext/pg_query/include/storage/sinval.h +153 -0
  304. data/ext/pg_query/include/storage/sinvaladt.h +43 -0
  305. data/ext/pg_query/include/storage/smgr.h +109 -0
  306. data/ext/pg_query/include/storage/spin.h +77 -0
  307. data/ext/pg_query/include/storage/standby.h +91 -0
  308. data/ext/pg_query/include/storage/standbydefs.h +74 -0
  309. data/ext/pg_query/include/storage/sync.h +62 -0
  310. data/ext/pg_query/include/tcop/cmdtag.h +58 -0
  311. data/ext/pg_query/include/tcop/cmdtaglist.h +217 -0
  312. data/ext/pg_query/include/tcop/deparse_utility.h +108 -0
  313. data/ext/pg_query/include/tcop/dest.h +149 -0
  314. data/ext/pg_query/include/tcop/fastpath.h +21 -0
  315. data/ext/pg_query/include/tcop/pquery.h +45 -0
  316. data/ext/pg_query/include/tcop/tcopprot.h +89 -0
  317. data/ext/pg_query/include/tcop/utility.h +108 -0
  318. data/ext/pg_query/include/tsearch/ts_cache.h +98 -0
  319. data/ext/pg_query/include/utils/acl.h +312 -0
  320. data/ext/pg_query/include/utils/aclchk_internal.h +45 -0
  321. data/ext/pg_query/include/utils/array.h +458 -0
  322. data/ext/pg_query/include/utils/builtins.h +127 -0
  323. data/ext/pg_query/include/utils/bytea.h +27 -0
  324. data/ext/pg_query/include/utils/catcache.h +231 -0
  325. data/ext/pg_query/include/utils/date.h +90 -0
  326. data/ext/pg_query/include/utils/datetime.h +343 -0
  327. data/ext/pg_query/include/utils/datum.h +68 -0
  328. data/ext/pg_query/include/utils/dsa.h +123 -0
  329. data/ext/pg_query/include/utils/dynahash.h +19 -0
  330. data/ext/pg_query/include/utils/elog.h +439 -0
  331. data/ext/pg_query/include/utils/errcodes.h +352 -0
  332. data/ext/pg_query/include/utils/expandeddatum.h +159 -0
  333. data/ext/pg_query/include/utils/expandedrecord.h +231 -0
  334. data/ext/pg_query/include/utils/float.h +356 -0
  335. data/ext/pg_query/include/utils/fmgroids.h +2657 -0
  336. data/ext/pg_query/include/utils/fmgrprotos.h +2646 -0
  337. data/ext/pg_query/include/utils/fmgrtab.h +48 -0
  338. data/ext/pg_query/include/utils/guc.h +443 -0
  339. data/ext/pg_query/include/utils/guc_tables.h +272 -0
  340. data/ext/pg_query/include/utils/hsearch.h +149 -0
  341. data/ext/pg_query/include/utils/inval.h +64 -0
  342. data/ext/pg_query/include/utils/lsyscache.h +197 -0
  343. data/ext/pg_query/include/utils/memdebug.h +82 -0
  344. data/ext/pg_query/include/utils/memutils.h +225 -0
  345. data/ext/pg_query/include/utils/numeric.h +76 -0
  346. data/ext/pg_query/include/utils/palloc.h +136 -0
  347. data/ext/pg_query/include/utils/partcache.h +102 -0
  348. data/ext/pg_query/include/utils/pg_locale.h +119 -0
  349. data/ext/pg_query/include/utils/pg_lsn.h +29 -0
  350. data/ext/pg_query/include/utils/pidfile.h +56 -0
  351. data/ext/pg_query/include/utils/plancache.h +235 -0
  352. data/ext/pg_query/include/utils/portal.h +241 -0
  353. data/ext/pg_query/include/utils/probes.h +114 -0
  354. data/ext/pg_query/include/utils/ps_status.h +25 -0
  355. data/ext/pg_query/include/utils/queryenvironment.h +74 -0
  356. data/ext/pg_query/include/utils/regproc.h +28 -0
  357. data/ext/pg_query/include/utils/rel.h +644 -0
  358. data/ext/pg_query/include/utils/relcache.h +151 -0
  359. data/ext/pg_query/include/utils/reltrigger.h +81 -0
  360. data/ext/pg_query/include/utils/resowner.h +86 -0
  361. data/ext/pg_query/include/utils/rls.h +50 -0
  362. data/ext/pg_query/include/utils/ruleutils.h +44 -0
  363. data/ext/pg_query/include/utils/sharedtuplestore.h +61 -0
  364. data/ext/pg_query/include/utils/snapmgr.h +158 -0
  365. data/ext/pg_query/include/utils/snapshot.h +206 -0
  366. data/ext/pg_query/include/utils/sortsupport.h +276 -0
  367. data/ext/pg_query/include/utils/syscache.h +219 -0
  368. data/ext/pg_query/include/utils/timeout.h +88 -0
  369. data/ext/pg_query/include/utils/timestamp.h +116 -0
  370. data/ext/pg_query/include/utils/tuplesort.h +277 -0
  371. data/ext/pg_query/include/utils/tuplestore.h +91 -0
  372. data/ext/pg_query/include/utils/typcache.h +202 -0
  373. data/ext/pg_query/include/utils/tzparser.h +39 -0
  374. data/ext/pg_query/include/utils/varlena.h +39 -0
  375. data/ext/pg_query/include/utils/xml.h +84 -0
  376. data/ext/pg_query/include/xxhash.h +5445 -0
  377. data/ext/pg_query/include/xxhash/xxhash.h +5445 -0
  378. data/ext/pg_query/pg_query.c +104 -0
  379. data/ext/pg_query/pg_query.pb-c.c +37628 -0
  380. data/ext/pg_query/pg_query_deparse.c +9959 -0
  381. data/ext/pg_query/pg_query_fingerprint.c +295 -0
  382. data/ext/pg_query/pg_query_fingerprint.h +8 -0
  383. data/ext/pg_query/pg_query_internal.h +24 -0
  384. data/ext/pg_query/pg_query_json_plpgsql.c +738 -0
  385. data/ext/pg_query/pg_query_json_plpgsql.h +9 -0
  386. data/ext/pg_query/pg_query_normalize.c +439 -0
  387. data/ext/pg_query/pg_query_outfuncs.h +10 -0
  388. data/ext/pg_query/pg_query_outfuncs_json.c +297 -0
  389. data/ext/pg_query/pg_query_outfuncs_protobuf.c +237 -0
  390. data/ext/pg_query/pg_query_parse.c +148 -0
  391. data/ext/pg_query/pg_query_parse_plpgsql.c +460 -0
  392. data/ext/pg_query/pg_query_readfuncs.h +11 -0
  393. data/ext/pg_query/pg_query_readfuncs_protobuf.c +142 -0
  394. data/ext/pg_query/pg_query_ruby.c +108 -12
  395. data/ext/pg_query/pg_query_scan.c +173 -0
  396. data/ext/pg_query/pg_query_split.c +221 -0
  397. data/ext/pg_query/protobuf-c.c +3660 -0
  398. data/ext/pg_query/src_backend_catalog_namespace.c +1051 -0
  399. data/ext/pg_query/src_backend_catalog_pg_proc.c +142 -0
  400. data/ext/pg_query/src_backend_commands_define.c +117 -0
  401. data/ext/pg_query/src_backend_libpq_pqcomm.c +651 -0
  402. data/ext/pg_query/src_backend_nodes_bitmapset.c +513 -0
  403. data/ext/pg_query/src_backend_nodes_copyfuncs.c +6013 -0
  404. data/ext/pg_query/src_backend_nodes_equalfuncs.c +4003 -0
  405. data/ext/pg_query/src_backend_nodes_extensible.c +99 -0
  406. data/ext/pg_query/src_backend_nodes_list.c +922 -0
  407. data/ext/pg_query/src_backend_nodes_makefuncs.c +417 -0
  408. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +1363 -0
  409. data/ext/pg_query/src_backend_nodes_value.c +84 -0
  410. data/ext/pg_query/src_backend_parser_gram.c +47456 -0
  411. data/ext/pg_query/src_backend_parser_parse_expr.c +313 -0
  412. data/ext/pg_query/src_backend_parser_parser.c +497 -0
  413. data/ext/pg_query/src_backend_parser_scan.c +7091 -0
  414. data/ext/pg_query/src_backend_parser_scansup.c +160 -0
  415. data/ext/pg_query/src_backend_postmaster_postmaster.c +2230 -0
  416. data/ext/pg_query/src_backend_storage_ipc_ipc.c +192 -0
  417. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +370 -0
  418. data/ext/pg_query/src_backend_tcop_postgres.c +776 -0
  419. data/ext/pg_query/src_backend_utils_adt_datum.c +326 -0
  420. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +98 -0
  421. data/ext/pg_query/src_backend_utils_adt_format_type.c +136 -0
  422. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +1683 -0
  423. data/ext/pg_query/src_backend_utils_error_assert.c +74 -0
  424. data/ext/pg_query/src_backend_utils_error_elog.c +1748 -0
  425. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +570 -0
  426. data/ext/pg_query/src_backend_utils_hash_dynahash.c +1086 -0
  427. data/ext/pg_query/src_backend_utils_init_globals.c +168 -0
  428. data/ext/pg_query/src_backend_utils_mb_mbutils.c +839 -0
  429. data/ext/pg_query/src_backend_utils_misc_guc.c +1831 -0
  430. data/ext/pg_query/src_backend_utils_mmgr_aset.c +1560 -0
  431. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +1006 -0
  432. data/ext/pg_query/src_common_encnames.c +158 -0
  433. data/ext/pg_query/src_common_keywords.c +39 -0
  434. data/ext/pg_query/src_common_kwlist_d.h +1081 -0
  435. data/ext/pg_query/src_common_kwlookup.c +91 -0
  436. data/ext/pg_query/src_common_psprintf.c +158 -0
  437. data/ext/pg_query/src_common_string.c +86 -0
  438. data/ext/pg_query/src_common_stringinfo.c +336 -0
  439. data/ext/pg_query/src_common_wchar.c +1651 -0
  440. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +1133 -0
  441. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +877 -0
  442. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +6533 -0
  443. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +107 -0
  444. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +123 -0
  445. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +671 -0
  446. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +255 -0
  447. data/ext/pg_query/src_port_erand48.c +127 -0
  448. data/ext/pg_query/src_port_pg_bitutils.c +246 -0
  449. data/ext/pg_query/src_port_pgsleep.c +69 -0
  450. data/ext/pg_query/src_port_pgstrcasecmp.c +83 -0
  451. data/ext/pg_query/src_port_qsort.c +240 -0
  452. data/ext/pg_query/src_port_random.c +31 -0
  453. data/ext/pg_query/src_port_snprintf.c +1449 -0
  454. data/ext/pg_query/src_port_strerror.c +324 -0
  455. data/ext/pg_query/src_port_strnlen.c +39 -0
  456. data/ext/pg_query/xxhash.c +43 -0
  457. data/lib/pg_query.rb +7 -4
  458. data/lib/pg_query/constants.rb +21 -0
  459. data/lib/pg_query/deparse.rb +15 -1581
  460. data/lib/pg_query/filter_columns.rb +88 -85
  461. data/lib/pg_query/fingerprint.rb +122 -87
  462. data/lib/pg_query/json_field_names.rb +1402 -0
  463. data/lib/pg_query/node.rb +31 -0
  464. data/lib/pg_query/param_refs.rb +42 -37
  465. data/lib/pg_query/parse.rb +220 -203
  466. data/lib/pg_query/parse_error.rb +1 -1
  467. data/lib/pg_query/pg_query_pb.rb +3211 -0
  468. data/lib/pg_query/scan.rb +23 -0
  469. data/lib/pg_query/treewalker.rb +24 -40
  470. data/lib/pg_query/truncate.rb +71 -42
  471. data/lib/pg_query/version.rb +2 -2
  472. metadata +472 -11
  473. data/ext/pg_query/pg_query_ruby.h +0 -10
  474. data/lib/pg_query/deep_dup.rb +0 -16
  475. data/lib/pg_query/deparse/alter_table.rb +0 -42
  476. data/lib/pg_query/deparse/interval.rb +0 -105
  477. data/lib/pg_query/deparse/keywords.rb +0 -159
  478. data/lib/pg_query/deparse/rename.rb +0 -41
  479. data/lib/pg_query/legacy_parsetree.rb +0 -109
  480. data/lib/pg_query/node_types.rb +0 -296
@@ -0,0 +1,62 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * condition_variable.h
4
+ * Condition variables
5
+ *
6
+ * A condition variable is a method of waiting until a certain condition
7
+ * becomes true. Conventionally, a condition variable supports three
8
+ * operations: (1) sleep; (2) signal, which wakes up one process sleeping
9
+ * on the condition variable; and (3) broadcast, which wakes up every
10
+ * process sleeping on the condition variable. In our implementation,
11
+ * condition variables put a process into an interruptible sleep (so it
12
+ * can be canceled prior to the fulfillment of the condition) and do not
13
+ * use pointers internally (so that they are safe to use within DSMs).
14
+ *
15
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
16
+ * Portions Copyright (c) 1994, Regents of the University of California
17
+ *
18
+ * src/include/storage/condition_variable.h
19
+ *
20
+ *-------------------------------------------------------------------------
21
+ */
22
+ #ifndef CONDITION_VARIABLE_H
23
+ #define CONDITION_VARIABLE_H
24
+
25
+ #include "storage/proclist_types.h"
26
+ #include "storage/s_lock.h"
27
+
28
+ typedef struct
29
+ {
30
+ slock_t mutex; /* spinlock protecting the wakeup list */
31
+ proclist_head wakeup; /* list of wake-able processes */
32
+ } ConditionVariable;
33
+
34
+ /* Initialize a condition variable. */
35
+ extern void ConditionVariableInit(ConditionVariable *cv);
36
+
37
+ /*
38
+ * To sleep on a condition variable, a process should use a loop which first
39
+ * checks the condition, exiting the loop if it is met, and then calls
40
+ * ConditionVariableSleep. Spurious wakeups are possible, but should be
41
+ * infrequent. After exiting the loop, ConditionVariableCancelSleep must
42
+ * be called to ensure that the process is no longer in the wait list for
43
+ * the condition variable.
44
+ */
45
+ extern void ConditionVariableSleep(ConditionVariable *cv, uint32 wait_event_info);
46
+ extern bool ConditionVariableTimedSleep(ConditionVariable *cv, long timeout,
47
+ uint32 wait_event_info);
48
+ extern void ConditionVariableCancelSleep(void);
49
+
50
+ /*
51
+ * Optionally, ConditionVariablePrepareToSleep can be called before entering
52
+ * the test-and-sleep loop described above. Doing so is more efficient if
53
+ * at least one sleep is needed, whereas not doing so is more efficient when
54
+ * no sleep is needed because the test condition is true the first time.
55
+ */
56
+ extern void ConditionVariablePrepareToSleep(ConditionVariable *cv);
57
+
58
+ /* Wake up a single waiter (via signal) or all waiters (via broadcast). */
59
+ extern void ConditionVariableSignal(ConditionVariable *cv);
60
+ extern void ConditionVariableBroadcast(ConditionVariable *cv);
61
+
62
+ #endif /* CONDITION_VARIABLE_H */
@@ -0,0 +1,61 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * dsm.h
4
+ * manage dynamic shared memory segments
5
+ *
6
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1994, Regents of the University of California
8
+ *
9
+ * src/include/storage/dsm.h
10
+ *
11
+ *-------------------------------------------------------------------------
12
+ */
13
+ #ifndef DSM_H
14
+ #define DSM_H
15
+
16
+ #include "storage/dsm_impl.h"
17
+
18
+ typedef struct dsm_segment dsm_segment;
19
+
20
+ #define DSM_CREATE_NULL_IF_MAXSEGMENTS 0x0001
21
+
22
+ /* A sentinel value for an invalid DSM handle. */
23
+ #define DSM_HANDLE_INVALID 0
24
+
25
+ /* Startup and shutdown functions. */
26
+ struct PGShmemHeader; /* avoid including pg_shmem.h */
27
+ extern void dsm_cleanup_using_control_segment(dsm_handle old_control_handle);
28
+ extern void dsm_postmaster_startup(struct PGShmemHeader *);
29
+ extern void dsm_backend_shutdown(void);
30
+ extern void dsm_detach_all(void);
31
+
32
+ #ifdef EXEC_BACKEND
33
+ extern void dsm_set_control_handle(dsm_handle h);
34
+ #endif
35
+
36
+ /* Functions that create or remove mappings. */
37
+ extern dsm_segment *dsm_create(Size size, int flags);
38
+ extern dsm_segment *dsm_attach(dsm_handle h);
39
+ extern void dsm_detach(dsm_segment *seg);
40
+
41
+ /* Resource management functions. */
42
+ extern void dsm_pin_mapping(dsm_segment *seg);
43
+ extern void dsm_unpin_mapping(dsm_segment *seg);
44
+ extern void dsm_pin_segment(dsm_segment *seg);
45
+ extern void dsm_unpin_segment(dsm_handle h);
46
+ extern dsm_segment *dsm_find_mapping(dsm_handle h);
47
+
48
+ /* Informational functions. */
49
+ extern void *dsm_segment_address(dsm_segment *seg);
50
+ extern Size dsm_segment_map_length(dsm_segment *seg);
51
+ extern dsm_handle dsm_segment_handle(dsm_segment *seg);
52
+
53
+ /* Cleanup hooks. */
54
+ typedef void (*on_dsm_detach_callback) (dsm_segment *, Datum arg);
55
+ extern void on_dsm_detach(dsm_segment *seg,
56
+ on_dsm_detach_callback function, Datum arg);
57
+ extern void cancel_on_dsm_detach(dsm_segment *seg,
58
+ on_dsm_detach_callback function, Datum arg);
59
+ extern void reset_on_dsm_detach(void);
60
+
61
+ #endif /* DSM_H */
@@ -0,0 +1,75 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * dsm_impl.h
4
+ * low-level dynamic shared memory primitives
5
+ *
6
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1994, Regents of the University of California
8
+ *
9
+ * src/include/storage/dsm_impl.h
10
+ *
11
+ *-------------------------------------------------------------------------
12
+ */
13
+ #ifndef DSM_IMPL_H
14
+ #define DSM_IMPL_H
15
+
16
+ /* Dynamic shared memory implementations. */
17
+ #define DSM_IMPL_POSIX 1
18
+ #define DSM_IMPL_SYSV 2
19
+ #define DSM_IMPL_WINDOWS 3
20
+ #define DSM_IMPL_MMAP 4
21
+
22
+ /*
23
+ * Determine which dynamic shared memory implementations will be supported
24
+ * on this platform, and which one will be the default.
25
+ */
26
+ #ifdef WIN32
27
+ #define USE_DSM_WINDOWS
28
+ #define DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE DSM_IMPL_WINDOWS
29
+ #else
30
+ #ifdef HAVE_SHM_OPEN
31
+ #define USE_DSM_POSIX
32
+ #define DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE DSM_IMPL_POSIX
33
+ #endif
34
+ #define USE_DSM_SYSV
35
+ #ifndef DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE
36
+ #define DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE DSM_IMPL_SYSV
37
+ #endif
38
+ #define USE_DSM_MMAP
39
+ #endif
40
+
41
+ /* GUC. */
42
+ extern int dynamic_shared_memory_type;
43
+
44
+ /*
45
+ * Directory for on-disk state.
46
+ *
47
+ * This is used by all implementations for crash recovery and by the mmap
48
+ * implementation for storage.
49
+ */
50
+ #define PG_DYNSHMEM_DIR "pg_dynshmem"
51
+ #define PG_DYNSHMEM_MMAP_FILE_PREFIX "mmap."
52
+
53
+ /* A "name" for a dynamic shared memory segment. */
54
+ typedef uint32 dsm_handle;
55
+
56
+ /* All the shared-memory operations we know about. */
57
+ typedef enum
58
+ {
59
+ DSM_OP_CREATE,
60
+ DSM_OP_ATTACH,
61
+ DSM_OP_DETACH,
62
+ DSM_OP_DESTROY
63
+ } dsm_op;
64
+
65
+ /* Create, attach to, detach from, resize, or destroy a segment. */
66
+ extern bool dsm_impl_op(dsm_op op, dsm_handle handle, Size request_size,
67
+ void **impl_private, void **mapped_address, Size *mapped_size,
68
+ int elevel);
69
+
70
+ /* Implementation-dependent actions required to keep segment until shutdown. */
71
+ extern void dsm_impl_pin_segment(dsm_handle handle, void *impl_private,
72
+ void **impl_private_pm_handle);
73
+ extern void dsm_impl_unpin_segment(dsm_handle handle, void **impl_private);
74
+
75
+ #endif /* DSM_IMPL_H */
@@ -0,0 +1,168 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * fd.h
4
+ * Virtual file descriptor definitions.
5
+ *
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/storage/fd.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+
15
+ /*
16
+ * calls:
17
+ *
18
+ * File {Close, Read, Write, Size, Sync}
19
+ * {Path Name Open, Allocate, Free} File
20
+ *
21
+ * These are NOT JUST RENAMINGS OF THE UNIX ROUTINES.
22
+ * Use them for all file activity...
23
+ *
24
+ * File fd;
25
+ * fd = PathNameOpenFile("foo", O_RDONLY);
26
+ *
27
+ * AllocateFile();
28
+ * FreeFile();
29
+ *
30
+ * Use AllocateFile, not fopen, if you need a stdio file (FILE*); then
31
+ * use FreeFile, not fclose, to close it. AVOID using stdio for files
32
+ * that you intend to hold open for any length of time, since there is
33
+ * no way for them to share kernel file descriptors with other files.
34
+ *
35
+ * Likewise, use AllocateDir/FreeDir, not opendir/closedir, to allocate
36
+ * open directories (DIR*), and OpenTransientFile/CloseTransientFile for an
37
+ * unbuffered file descriptor.
38
+ *
39
+ * If you really can't use any of the above, at least call AcquireExternalFD
40
+ * or ReserveExternalFD to report any file descriptors that are held for any
41
+ * length of time. Failure to do so risks unnecessary EMFILE errors.
42
+ */
43
+ #ifndef FD_H
44
+ #define FD_H
45
+
46
+ #include <dirent.h>
47
+
48
+
49
+ typedef int File;
50
+
51
+
52
+ /* GUC parameter */
53
+ extern PGDLLIMPORT int max_files_per_process;
54
+ extern PGDLLIMPORT bool data_sync_retry;
55
+
56
+ /*
57
+ * This is private to fd.c, but exported for save/restore_backend_variables()
58
+ */
59
+ extern int max_safe_fds;
60
+
61
+ /*
62
+ * On Windows, we have to interpret EACCES as possibly meaning the same as
63
+ * ENOENT, because if a file is unlinked-but-not-yet-gone on that platform,
64
+ * that's what you get. Ugh. This code is designed so that we don't
65
+ * actually believe these cases are okay without further evidence (namely,
66
+ * a pending fsync request getting canceled ... see ProcessSyncRequests).
67
+ */
68
+ #ifndef WIN32
69
+ #define FILE_POSSIBLY_DELETED(err) ((err) == ENOENT)
70
+ #else
71
+ #define FILE_POSSIBLY_DELETED(err) ((err) == ENOENT || (err) == EACCES)
72
+ #endif
73
+
74
+ /*
75
+ * prototypes for functions in fd.c
76
+ */
77
+
78
+ /* Operations on virtual Files --- equivalent to Unix kernel file ops */
79
+ extern File PathNameOpenFile(const char *fileName, int fileFlags);
80
+ extern File PathNameOpenFilePerm(const char *fileName, int fileFlags, mode_t fileMode);
81
+ extern File OpenTemporaryFile(bool interXact);
82
+ extern void FileClose(File file);
83
+ extern int FilePrefetch(File file, off_t offset, int amount, uint32 wait_event_info);
84
+ extern int FileRead(File file, char *buffer, int amount, off_t offset, uint32 wait_event_info);
85
+ extern int FileWrite(File file, char *buffer, int amount, off_t offset, uint32 wait_event_info);
86
+ extern int FileSync(File file, uint32 wait_event_info);
87
+ extern off_t FileSize(File file);
88
+ extern int FileTruncate(File file, off_t offset, uint32 wait_event_info);
89
+ extern void FileWriteback(File file, off_t offset, off_t nbytes, uint32 wait_event_info);
90
+ extern char *FilePathName(File file);
91
+ extern int FileGetRawDesc(File file);
92
+ extern int FileGetRawFlags(File file);
93
+ extern mode_t FileGetRawMode(File file);
94
+
95
+ /* Operations used for sharing named temporary files */
96
+ extern File PathNameCreateTemporaryFile(const char *name, bool error_on_failure);
97
+ extern File PathNameOpenTemporaryFile(const char *name);
98
+ extern bool PathNameDeleteTemporaryFile(const char *name, bool error_on_failure);
99
+ extern void PathNameCreateTemporaryDir(const char *base, const char *name);
100
+ extern void PathNameDeleteTemporaryDir(const char *name);
101
+ extern void TempTablespacePath(char *path, Oid tablespace);
102
+
103
+ /* Operations that allow use of regular stdio --- USE WITH CAUTION */
104
+ extern FILE *AllocateFile(const char *name, const char *mode);
105
+ extern int FreeFile(FILE *file);
106
+
107
+ /* Operations that allow use of pipe streams (popen/pclose) */
108
+ extern FILE *OpenPipeStream(const char *command, const char *mode);
109
+ extern int ClosePipeStream(FILE *file);
110
+
111
+ /* Operations to allow use of the <dirent.h> library routines */
112
+ extern DIR *AllocateDir(const char *dirname);
113
+ extern struct dirent *ReadDir(DIR *dir, const char *dirname);
114
+ extern struct dirent *ReadDirExtended(DIR *dir, const char *dirname,
115
+ int elevel);
116
+ extern int FreeDir(DIR *dir);
117
+
118
+ /* Operations to allow use of a plain kernel FD, with automatic cleanup */
119
+ extern int OpenTransientFile(const char *fileName, int fileFlags);
120
+ extern int OpenTransientFilePerm(const char *fileName, int fileFlags, mode_t fileMode);
121
+ extern int CloseTransientFile(int fd);
122
+
123
+ /* If you've really really gotta have a plain kernel FD, use this */
124
+ extern int BasicOpenFile(const char *fileName, int fileFlags);
125
+ extern int BasicOpenFilePerm(const char *fileName, int fileFlags, mode_t fileMode);
126
+
127
+ /* Use these for other cases, and also for long-lived BasicOpenFile FDs */
128
+ extern bool AcquireExternalFD(void);
129
+ extern void ReserveExternalFD(void);
130
+ extern void ReleaseExternalFD(void);
131
+
132
+ /* Make a directory with default permissions */
133
+ extern int MakePGDirectory(const char *directoryName);
134
+
135
+ /* Miscellaneous support routines */
136
+ extern void InitFileAccess(void);
137
+ extern void set_max_safe_fds(void);
138
+ extern void closeAllVfds(void);
139
+ extern void SetTempTablespaces(Oid *tableSpaces, int numSpaces);
140
+ extern bool TempTablespacesAreSet(void);
141
+ extern int GetTempTablespaces(Oid *tableSpaces, int numSpaces);
142
+ extern Oid GetNextTempTableSpace(void);
143
+ extern void AtEOXact_Files(bool isCommit);
144
+ extern void AtEOSubXact_Files(bool isCommit, SubTransactionId mySubid,
145
+ SubTransactionId parentSubid);
146
+ extern void RemovePgTempFiles(void);
147
+ extern void RemovePgTempFilesInDir(const char *tmpdirname, bool missing_ok,
148
+ bool unlink_all);
149
+ extern bool looks_like_temp_rel_name(const char *name);
150
+
151
+ extern int pg_fsync(int fd);
152
+ extern int pg_fsync_no_writethrough(int fd);
153
+ extern int pg_fsync_writethrough(int fd);
154
+ extern int pg_fdatasync(int fd);
155
+ extern void pg_flush_data(int fd, off_t offset, off_t amount);
156
+ extern void fsync_fname(const char *fname, bool isdir);
157
+ extern int fsync_fname_ext(const char *fname, bool isdir, bool ignore_perm, int elevel);
158
+ extern int durable_rename(const char *oldfile, const char *newfile, int loglevel);
159
+ extern int durable_unlink(const char *fname, int loglevel);
160
+ extern int durable_rename_excl(const char *oldfile, const char *newfile, int loglevel);
161
+ extern void SyncDataDirectory(void);
162
+ extern int data_sync_elevel(int elevel);
163
+
164
+ /* Filename components */
165
+ #define PG_TEMP_FILES_DIR "pgsql_tmp"
166
+ #define PG_TEMP_FILE_PREFIX "pgsql_tmp"
167
+
168
+ #endif /* FD_H */
@@ -0,0 +1,81 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * ipc.h
4
+ * POSTGRES inter-process communication definitions.
5
+ *
6
+ * This file is misnamed, as it no longer has much of anything directly
7
+ * to do with IPC. The functionality here is concerned with managing
8
+ * exit-time cleanup for either a postmaster or a backend.
9
+ *
10
+ *
11
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
12
+ * Portions Copyright (c) 1994, Regents of the University of California
13
+ *
14
+ * src/include/storage/ipc.h
15
+ *
16
+ *-------------------------------------------------------------------------
17
+ */
18
+ #ifndef IPC_H
19
+ #define IPC_H
20
+
21
+ typedef void (*pg_on_exit_callback) (int code, Datum arg);
22
+ typedef void (*shmem_startup_hook_type) (void);
23
+
24
+ /*----------
25
+ * API for handling cleanup that must occur during either ereport(ERROR)
26
+ * or ereport(FATAL) exits from a block of code. (Typical examples are
27
+ * undoing transient changes to shared-memory state.)
28
+ *
29
+ * PG_ENSURE_ERROR_CLEANUP(cleanup_function, arg);
30
+ * {
31
+ * ... code that might throw ereport(ERROR) or ereport(FATAL) ...
32
+ * }
33
+ * PG_END_ENSURE_ERROR_CLEANUP(cleanup_function, arg);
34
+ *
35
+ * where the cleanup code is in a function declared per pg_on_exit_callback.
36
+ * The Datum value "arg" can carry any information the cleanup function
37
+ * needs.
38
+ *
39
+ * This construct ensures that cleanup_function() will be called during
40
+ * either ERROR or FATAL exits. It will not be called on successful
41
+ * exit from the controlled code. (If you want it to happen then too,
42
+ * call the function yourself from just after the construct.)
43
+ *
44
+ * Note: the macro arguments are multiply evaluated, so avoid side-effects.
45
+ *----------
46
+ */
47
+ #define PG_ENSURE_ERROR_CLEANUP(cleanup_function, arg) \
48
+ do { \
49
+ before_shmem_exit(cleanup_function, arg); \
50
+ PG_TRY()
51
+
52
+ #define PG_END_ENSURE_ERROR_CLEANUP(cleanup_function, arg) \
53
+ cancel_before_shmem_exit(cleanup_function, arg); \
54
+ PG_CATCH(); \
55
+ { \
56
+ cancel_before_shmem_exit(cleanup_function, arg); \
57
+ cleanup_function (0, arg); \
58
+ PG_RE_THROW(); \
59
+ } \
60
+ PG_END_TRY(); \
61
+ } while (0)
62
+
63
+
64
+ /* ipc.c */
65
+ extern PGDLLIMPORT __thread bool proc_exit_inprogress;
66
+ extern PGDLLIMPORT bool shmem_exit_inprogress;
67
+
68
+ extern void proc_exit(int code) pg_attribute_noreturn();
69
+ extern void shmem_exit(int code);
70
+ extern void on_proc_exit(pg_on_exit_callback function, Datum arg);
71
+ extern void on_shmem_exit(pg_on_exit_callback function, Datum arg);
72
+ extern void before_shmem_exit(pg_on_exit_callback function, Datum arg);
73
+ extern void cancel_before_shmem_exit(pg_on_exit_callback function, Datum arg);
74
+ extern void on_exit_reset(void);
75
+
76
+ /* ipci.c */
77
+ extern PGDLLIMPORT shmem_startup_hook_type shmem_startup_hook;
78
+
79
+ extern void CreateSharedMemoryAndSemaphores(void);
80
+
81
+ #endif /* IPC_H */