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,61 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * prepare.h
4
+ * PREPARE, EXECUTE and DEALLOCATE commands, and prepared-stmt storage
5
+ *
6
+ *
7
+ * Copyright (c) 2002-2020, PostgreSQL Global Development Group
8
+ *
9
+ * src/include/commands/prepare.h
10
+ *
11
+ *-------------------------------------------------------------------------
12
+ */
13
+ #ifndef PREPARE_H
14
+ #define PREPARE_H
15
+
16
+ #include "commands/explain.h"
17
+ #include "datatype/timestamp.h"
18
+ #include "utils/plancache.h"
19
+
20
+ /*
21
+ * The data structure representing a prepared statement. This is now just
22
+ * a thin veneer over a plancache entry --- the main addition is that of
23
+ * a name.
24
+ *
25
+ * Note: all subsidiary storage lives in the referenced plancache entry.
26
+ */
27
+ typedef struct
28
+ {
29
+ /* dynahash.c requires key to be first field */
30
+ char stmt_name[NAMEDATALEN];
31
+ CachedPlanSource *plansource; /* the actual cached plan */
32
+ bool from_sql; /* prepared via SQL, not FE/BE protocol? */
33
+ TimestampTz prepare_time; /* the time when the stmt was prepared */
34
+ } PreparedStatement;
35
+
36
+
37
+ /* Utility statements PREPARE, EXECUTE, DEALLOCATE, EXPLAIN EXECUTE */
38
+ extern void PrepareQuery(ParseState *pstate, PrepareStmt *stmt,
39
+ int stmt_location, int stmt_len);
40
+ extern void ExecuteQuery(ParseState *pstate,
41
+ ExecuteStmt *stmt, IntoClause *intoClause,
42
+ ParamListInfo params,
43
+ DestReceiver *dest, QueryCompletion *qc);
44
+ extern void DeallocateQuery(DeallocateStmt *stmt);
45
+ extern void ExplainExecuteQuery(ExecuteStmt *execstmt, IntoClause *into,
46
+ ExplainState *es, const char *queryString,
47
+ ParamListInfo params, QueryEnvironment *queryEnv);
48
+
49
+ /* Low-level access to stored prepared statements */
50
+ extern void StorePreparedStatement(const char *stmt_name,
51
+ CachedPlanSource *plansource,
52
+ bool from_sql);
53
+ extern PreparedStatement *FetchPreparedStatement(const char *stmt_name,
54
+ bool throwError);
55
+ extern void DropPreparedStatement(const char *stmt_name, bool showError);
56
+ extern TupleDesc FetchPreparedStatementResultDesc(PreparedStatement *stmt);
57
+ extern List *FetchPreparedStatementTargetList(PreparedStatement *stmt);
58
+
59
+ extern void DropAllPreparedStatements(void);
60
+
61
+ #endif /* PREPARE_H */
@@ -0,0 +1,67 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * tablespace.h
4
+ * Tablespace management commands (create/drop tablespace).
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/commands/tablespace.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef TABLESPACE_H
15
+ #define TABLESPACE_H
16
+
17
+ #include "access/xlogreader.h"
18
+ #include "catalog/objectaddress.h"
19
+ #include "lib/stringinfo.h"
20
+ #include "nodes/parsenodes.h"
21
+
22
+ /* XLOG stuff */
23
+ #define XLOG_TBLSPC_CREATE 0x00
24
+ #define XLOG_TBLSPC_DROP 0x10
25
+
26
+ typedef struct xl_tblspc_create_rec
27
+ {
28
+ Oid ts_id;
29
+ char ts_path[FLEXIBLE_ARRAY_MEMBER]; /* null-terminated string */
30
+ } xl_tblspc_create_rec;
31
+
32
+ typedef struct xl_tblspc_drop_rec
33
+ {
34
+ Oid ts_id;
35
+ } xl_tblspc_drop_rec;
36
+
37
+ typedef struct TableSpaceOpts
38
+ {
39
+ int32 vl_len_; /* varlena header (do not touch directly!) */
40
+ float8 random_page_cost;
41
+ float8 seq_page_cost;
42
+ int effective_io_concurrency;
43
+ int maintenance_io_concurrency;
44
+ } TableSpaceOpts;
45
+
46
+ extern Oid CreateTableSpace(CreateTableSpaceStmt *stmt);
47
+ extern void DropTableSpace(DropTableSpaceStmt *stmt);
48
+ extern ObjectAddress RenameTableSpace(const char *oldname, const char *newname);
49
+ extern Oid AlterTableSpaceOptions(AlterTableSpaceOptionsStmt *stmt);
50
+
51
+ extern void TablespaceCreateDbspace(Oid spcNode, Oid dbNode, bool isRedo);
52
+
53
+ extern Oid GetDefaultTablespace(char relpersistence, bool partitioned);
54
+
55
+ extern void PrepareTempTablespaces(void);
56
+
57
+ extern Oid get_tablespace_oid(const char *tablespacename, bool missing_ok);
58
+ extern char *get_tablespace_name(Oid spc_oid);
59
+
60
+ extern bool directory_is_empty(const char *path);
61
+ extern void remove_tablespace_symlink(const char *linkloc);
62
+
63
+ extern void tblspc_redo(XLogReaderState *rptr);
64
+ extern void tblspc_desc(StringInfo buf, XLogReaderState *rptr);
65
+ extern const char *tblspc_identify(uint8 info);
66
+
67
+ #endif /* TABLESPACE_H */
@@ -0,0 +1,277 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * trigger.h
4
+ * Declarations for trigger handling.
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/commands/trigger.h
10
+ *
11
+ *-------------------------------------------------------------------------
12
+ */
13
+ #ifndef TRIGGER_H
14
+ #define TRIGGER_H
15
+
16
+ #include "catalog/objectaddress.h"
17
+ #include "nodes/execnodes.h"
18
+ #include "nodes/parsenodes.h"
19
+
20
+ /*
21
+ * TriggerData is the node type that is passed as fmgr "context" info
22
+ * when a function is called by the trigger manager.
23
+ */
24
+
25
+ #define CALLED_AS_TRIGGER(fcinfo) \
26
+ ((fcinfo)->context != NULL && IsA((fcinfo)->context, TriggerData))
27
+
28
+ typedef uint32 TriggerEvent;
29
+
30
+ typedef struct TriggerData
31
+ {
32
+ NodeTag type;
33
+ TriggerEvent tg_event;
34
+ Relation tg_relation;
35
+ HeapTuple tg_trigtuple;
36
+ HeapTuple tg_newtuple;
37
+ Trigger *tg_trigger;
38
+ TupleTableSlot *tg_trigslot;
39
+ TupleTableSlot *tg_newslot;
40
+ Tuplestorestate *tg_oldtable;
41
+ Tuplestorestate *tg_newtable;
42
+ const Bitmapset *tg_updatedcols;
43
+ } TriggerData;
44
+
45
+ /*
46
+ * The state for capturing old and new tuples into transition tables for a
47
+ * single ModifyTable node (or other operation source, e.g. copy.c).
48
+ *
49
+ * This is per-caller to avoid conflicts in setting tcs_map or
50
+ * tcs_original_insert_tuple. Note, however, that the pointed-to
51
+ * private data may be shared across multiple callers.
52
+ */
53
+ struct AfterTriggersTableData; /* private in trigger.c */
54
+
55
+ typedef struct TransitionCaptureState
56
+ {
57
+ /*
58
+ * Is there at least one trigger specifying each transition relation on
59
+ * the relation explicitly named in the DML statement or COPY command?
60
+ * Note: in current usage, these flags could be part of the private state,
61
+ * but it seems possibly useful to let callers see them.
62
+ */
63
+ bool tcs_delete_old_table;
64
+ bool tcs_update_old_table;
65
+ bool tcs_update_new_table;
66
+ bool tcs_insert_new_table;
67
+
68
+ /*
69
+ * For UPDATE and DELETE, AfterTriggerSaveEvent may need to convert the
70
+ * new and old tuples from a child table's format to the format of the
71
+ * relation named in a query so that it is compatible with the transition
72
+ * tuplestores. The caller must store the conversion map here if so.
73
+ */
74
+ TupleConversionMap *tcs_map;
75
+
76
+ /*
77
+ * For INSERT and COPY, it would be wasteful to convert tuples from child
78
+ * format to parent format after they have already been converted in the
79
+ * opposite direction during routing. In that case we bypass conversion
80
+ * and allow the inserting code (copy.c and nodeModifyTable.c) to provide
81
+ * a slot containing the original tuple directly.
82
+ */
83
+ TupleTableSlot *tcs_original_insert_tuple;
84
+
85
+ /*
86
+ * Private data including the tuplestore(s) into which to insert tuples.
87
+ */
88
+ struct AfterTriggersTableData *tcs_private;
89
+ } TransitionCaptureState;
90
+
91
+ /*
92
+ * TriggerEvent bit flags
93
+ *
94
+ * Note that we assume different event types (INSERT/DELETE/UPDATE/TRUNCATE)
95
+ * can't be OR'd together in a single TriggerEvent. This is unlike the
96
+ * situation for pg_trigger rows, so pg_trigger.tgtype uses a different
97
+ * representation!
98
+ */
99
+ #define TRIGGER_EVENT_INSERT 0x00000000
100
+ #define TRIGGER_EVENT_DELETE 0x00000001
101
+ #define TRIGGER_EVENT_UPDATE 0x00000002
102
+ #define TRIGGER_EVENT_TRUNCATE 0x00000003
103
+ #define TRIGGER_EVENT_OPMASK 0x00000003
104
+
105
+ #define TRIGGER_EVENT_ROW 0x00000004
106
+
107
+ #define TRIGGER_EVENT_BEFORE 0x00000008
108
+ #define TRIGGER_EVENT_AFTER 0x00000000
109
+ #define TRIGGER_EVENT_INSTEAD 0x00000010
110
+ #define TRIGGER_EVENT_TIMINGMASK 0x00000018
111
+
112
+ /* More TriggerEvent flags, used only within trigger.c */
113
+
114
+ #define AFTER_TRIGGER_DEFERRABLE 0x00000020
115
+ #define AFTER_TRIGGER_INITDEFERRED 0x00000040
116
+
117
+ #define TRIGGER_FIRED_BY_INSERT(event) \
118
+ (((event) & TRIGGER_EVENT_OPMASK) == TRIGGER_EVENT_INSERT)
119
+
120
+ #define TRIGGER_FIRED_BY_DELETE(event) \
121
+ (((event) & TRIGGER_EVENT_OPMASK) == TRIGGER_EVENT_DELETE)
122
+
123
+ #define TRIGGER_FIRED_BY_UPDATE(event) \
124
+ (((event) & TRIGGER_EVENT_OPMASK) == TRIGGER_EVENT_UPDATE)
125
+
126
+ #define TRIGGER_FIRED_BY_TRUNCATE(event) \
127
+ (((event) & TRIGGER_EVENT_OPMASK) == TRIGGER_EVENT_TRUNCATE)
128
+
129
+ #define TRIGGER_FIRED_FOR_ROW(event) \
130
+ ((event) & TRIGGER_EVENT_ROW)
131
+
132
+ #define TRIGGER_FIRED_FOR_STATEMENT(event) \
133
+ (!TRIGGER_FIRED_FOR_ROW(event))
134
+
135
+ #define TRIGGER_FIRED_BEFORE(event) \
136
+ (((event) & TRIGGER_EVENT_TIMINGMASK) == TRIGGER_EVENT_BEFORE)
137
+
138
+ #define TRIGGER_FIRED_AFTER(event) \
139
+ (((event) & TRIGGER_EVENT_TIMINGMASK) == TRIGGER_EVENT_AFTER)
140
+
141
+ #define TRIGGER_FIRED_INSTEAD(event) \
142
+ (((event) & TRIGGER_EVENT_TIMINGMASK) == TRIGGER_EVENT_INSTEAD)
143
+
144
+ /*
145
+ * Definitions for replication role based firing.
146
+ */
147
+ #define SESSION_REPLICATION_ROLE_ORIGIN 0
148
+ #define SESSION_REPLICATION_ROLE_REPLICA 1
149
+ #define SESSION_REPLICATION_ROLE_LOCAL 2
150
+ extern PGDLLIMPORT int SessionReplicationRole;
151
+
152
+ /*
153
+ * States at which a trigger can be fired. These are the
154
+ * possible values for pg_trigger.tgenabled.
155
+ */
156
+ #define TRIGGER_FIRES_ON_ORIGIN 'O'
157
+ #define TRIGGER_FIRES_ALWAYS 'A'
158
+ #define TRIGGER_FIRES_ON_REPLICA 'R'
159
+ #define TRIGGER_DISABLED 'D'
160
+
161
+ extern ObjectAddress CreateTrigger(CreateTrigStmt *stmt, const char *queryString,
162
+ Oid relOid, Oid refRelOid, Oid constraintOid, Oid indexOid,
163
+ Oid funcoid, Oid parentTriggerOid, Node *whenClause,
164
+ bool isInternal, bool in_partition);
165
+
166
+ extern void RemoveTriggerById(Oid trigOid);
167
+ extern Oid get_trigger_oid(Oid relid, const char *name, bool missing_ok);
168
+
169
+ extern ObjectAddress renametrig(RenameStmt *stmt);
170
+
171
+ extern void EnableDisableTrigger(Relation rel, const char *tgname,
172
+ char fires_when, bool skip_system, LOCKMODE lockmode);
173
+
174
+ extern void RelationBuildTriggers(Relation relation);
175
+
176
+ extern TriggerDesc *CopyTriggerDesc(TriggerDesc *trigdesc);
177
+
178
+ extern const char *FindTriggerIncompatibleWithInheritance(TriggerDesc *trigdesc);
179
+
180
+ extern TransitionCaptureState *MakeTransitionCaptureState(TriggerDesc *trigdesc,
181
+ Oid relid, CmdType cmdType);
182
+
183
+ extern void FreeTriggerDesc(TriggerDesc *trigdesc);
184
+
185
+ extern void ExecBSInsertTriggers(EState *estate,
186
+ ResultRelInfo *relinfo);
187
+ extern void ExecASInsertTriggers(EState *estate,
188
+ ResultRelInfo *relinfo,
189
+ TransitionCaptureState *transition_capture);
190
+ extern bool ExecBRInsertTriggers(EState *estate,
191
+ ResultRelInfo *relinfo,
192
+ TupleTableSlot *slot);
193
+ extern void ExecARInsertTriggers(EState *estate,
194
+ ResultRelInfo *relinfo,
195
+ TupleTableSlot *slot,
196
+ List *recheckIndexes,
197
+ TransitionCaptureState *transition_capture);
198
+ extern bool ExecIRInsertTriggers(EState *estate,
199
+ ResultRelInfo *relinfo,
200
+ TupleTableSlot *slot);
201
+ extern void ExecBSDeleteTriggers(EState *estate,
202
+ ResultRelInfo *relinfo);
203
+ extern void ExecASDeleteTriggers(EState *estate,
204
+ ResultRelInfo *relinfo,
205
+ TransitionCaptureState *transition_capture);
206
+ extern bool ExecBRDeleteTriggers(EState *estate,
207
+ EPQState *epqstate,
208
+ ResultRelInfo *relinfo,
209
+ ItemPointer tupleid,
210
+ HeapTuple fdw_trigtuple,
211
+ TupleTableSlot **epqslot);
212
+ extern void ExecARDeleteTriggers(EState *estate,
213
+ ResultRelInfo *relinfo,
214
+ ItemPointer tupleid,
215
+ HeapTuple fdw_trigtuple,
216
+ TransitionCaptureState *transition_capture);
217
+ extern bool ExecIRDeleteTriggers(EState *estate,
218
+ ResultRelInfo *relinfo,
219
+ HeapTuple trigtuple);
220
+ extern void ExecBSUpdateTriggers(EState *estate,
221
+ ResultRelInfo *relinfo);
222
+ extern void ExecASUpdateTriggers(EState *estate,
223
+ ResultRelInfo *relinfo,
224
+ TransitionCaptureState *transition_capture);
225
+ extern bool ExecBRUpdateTriggers(EState *estate,
226
+ EPQState *epqstate,
227
+ ResultRelInfo *relinfo,
228
+ ItemPointer tupleid,
229
+ HeapTuple fdw_trigtuple,
230
+ TupleTableSlot *slot);
231
+ extern void ExecARUpdateTriggers(EState *estate,
232
+ ResultRelInfo *relinfo,
233
+ ItemPointer tupleid,
234
+ HeapTuple fdw_trigtuple,
235
+ TupleTableSlot *slot,
236
+ List *recheckIndexes,
237
+ TransitionCaptureState *transition_capture);
238
+ extern bool ExecIRUpdateTriggers(EState *estate,
239
+ ResultRelInfo *relinfo,
240
+ HeapTuple trigtuple,
241
+ TupleTableSlot *slot);
242
+ extern void ExecBSTruncateTriggers(EState *estate,
243
+ ResultRelInfo *relinfo);
244
+ extern void ExecASTruncateTriggers(EState *estate,
245
+ ResultRelInfo *relinfo);
246
+
247
+ extern void AfterTriggerBeginXact(void);
248
+ extern void AfterTriggerBeginQuery(void);
249
+ extern void AfterTriggerEndQuery(EState *estate);
250
+ extern void AfterTriggerFireDeferred(void);
251
+ extern void AfterTriggerEndXact(bool isCommit);
252
+ extern void AfterTriggerBeginSubXact(void);
253
+ extern void AfterTriggerEndSubXact(bool isCommit);
254
+ extern void AfterTriggerSetState(ConstraintsSetStmt *stmt);
255
+ extern bool AfterTriggerPendingOnRel(Oid relid);
256
+
257
+
258
+ /*
259
+ * in utils/adt/ri_triggers.c
260
+ */
261
+ extern bool RI_FKey_pk_upd_check_required(Trigger *trigger, Relation pk_rel,
262
+ TupleTableSlot *old_slot, TupleTableSlot *new_slot);
263
+ extern bool RI_FKey_fk_upd_check_required(Trigger *trigger, Relation fk_rel,
264
+ TupleTableSlot *old_slot, TupleTableSlot *new_slot);
265
+ extern bool RI_Initial_Check(Trigger *trigger,
266
+ Relation fk_rel, Relation pk_rel);
267
+ extern void RI_PartitionRemove_Check(Trigger *trigger, Relation fk_rel,
268
+ Relation pk_rel);
269
+
270
+ /* result values for RI_FKey_trigger_type: */
271
+ #define RI_TRIGGER_PK 1 /* is a trigger on the PK relation */
272
+ #define RI_TRIGGER_FK 2 /* is a trigger on the FK relation */
273
+ #define RI_TRIGGER_NONE 0 /* is not an RI trigger function */
274
+
275
+ extern int RI_FKey_trigger_type(Oid tgfoid);
276
+
277
+ #endif /* TRIGGER_H */
@@ -0,0 +1,37 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * user.h
4
+ * Commands for manipulating roles (formerly called users).
5
+ *
6
+ *
7
+ * src/include/commands/user.h
8
+ *
9
+ *-------------------------------------------------------------------------
10
+ */
11
+ #ifndef USER_H
12
+ #define USER_H
13
+
14
+ #include "catalog/objectaddress.h"
15
+ #include "libpq/crypt.h"
16
+ #include "nodes/parsenodes.h"
17
+ #include "parser/parse_node.h"
18
+
19
+ /* GUC. Is actually of type PasswordType. */
20
+ extern int Password_encryption;
21
+
22
+ /* Hook to check passwords in CreateRole() and AlterRole() */
23
+ typedef void (*check_password_hook_type) (const char *username, const char *shadow_pass, PasswordType password_type, Datum validuntil_time, bool validuntil_null);
24
+
25
+ extern PGDLLIMPORT check_password_hook_type check_password_hook;
26
+
27
+ extern Oid CreateRole(ParseState *pstate, CreateRoleStmt *stmt);
28
+ extern Oid AlterRole(AlterRoleStmt *stmt);
29
+ extern Oid AlterRoleSet(AlterRoleSetStmt *stmt);
30
+ extern void DropRole(DropRoleStmt *stmt);
31
+ extern void GrantRole(GrantRoleStmt *stmt);
32
+ extern ObjectAddress RenameRole(const char *oldname, const char *newname);
33
+ extern void DropOwnedObjects(DropOwnedStmt *stmt);
34
+ extern void ReassignOwnedObjects(ReassignOwnedStmt *stmt);
35
+ extern List *roleSpecsToIds(List *memberNames);
36
+
37
+ #endif /* USER_H */
@@ -0,0 +1,293 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * vacuum.h
4
+ * header file for postgres vacuum cleaner and statistics analyzer
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/commands/vacuum.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef VACUUM_H
15
+ #define VACUUM_H
16
+
17
+ #include "access/htup.h"
18
+ #include "catalog/pg_class.h"
19
+ #include "catalog/pg_statistic.h"
20
+ #include "catalog/pg_type.h"
21
+ #include "parser/parse_node.h"
22
+ #include "storage/buf.h"
23
+ #include "storage/lock.h"
24
+ #include "utils/relcache.h"
25
+
26
+ /*
27
+ * Flags for amparallelvacuumoptions to control the participation of bulkdelete
28
+ * and vacuumcleanup in parallel vacuum.
29
+ */
30
+
31
+ /*
32
+ * Both bulkdelete and vacuumcleanup are disabled by default. This will be
33
+ * used by IndexAM's that don't want to or cannot participate in parallel
34
+ * vacuum. For example, if an index AM doesn't have a way to communicate the
35
+ * index statistics allocated by the first ambulkdelete call to the subsequent
36
+ * ones until amvacuumcleanup, the index AM cannot participate in parallel
37
+ * vacuum.
38
+ */
39
+ #define VACUUM_OPTION_NO_PARALLEL 0
40
+
41
+ /*
42
+ * bulkdelete can be performed in parallel. This option can be used by
43
+ * IndexAm's that need to scan the index to delete the tuples.
44
+ */
45
+ #define VACUUM_OPTION_PARALLEL_BULKDEL (1 << 0)
46
+
47
+ /*
48
+ * vacuumcleanup can be performed in parallel if bulkdelete is not performed
49
+ * yet. This will be used by IndexAM's that can scan the index if the
50
+ * bulkdelete is not performed.
51
+ */
52
+ #define VACUUM_OPTION_PARALLEL_COND_CLEANUP (1 << 1)
53
+
54
+ /*
55
+ * vacuumcleanup can be performed in parallel even if bulkdelete has already
56
+ * processed the index. This will be used by IndexAM's that scan the index
57
+ * during the cleanup phase of index irrespective of whether the index is
58
+ * already scanned or not during bulkdelete phase.
59
+ */
60
+ #define VACUUM_OPTION_PARALLEL_CLEANUP (1 << 2)
61
+
62
+ /* value for checking vacuum flags */
63
+ #define VACUUM_OPTION_MAX_VALID_VALUE ((1 << 3) - 1)
64
+
65
+ /*----------
66
+ * ANALYZE builds one of these structs for each attribute (column) that is
67
+ * to be analyzed. The struct and subsidiary data are in anl_context,
68
+ * so they live until the end of the ANALYZE operation.
69
+ *
70
+ * The type-specific typanalyze function is passed a pointer to this struct
71
+ * and must return true to continue analysis, false to skip analysis of this
72
+ * column. In the true case it must set the compute_stats and minrows fields,
73
+ * and can optionally set extra_data to pass additional info to compute_stats.
74
+ * minrows is its request for the minimum number of sample rows to be gathered
75
+ * (but note this request might not be honored, eg if there are fewer rows
76
+ * than that in the table).
77
+ *
78
+ * The compute_stats routine will be called after sample rows have been
79
+ * gathered. Aside from this struct, it is passed:
80
+ * fetchfunc: a function for accessing the column values from the
81
+ * sample rows
82
+ * samplerows: the number of sample tuples
83
+ * totalrows: estimated total number of rows in relation
84
+ * The fetchfunc may be called with rownum running from 0 to samplerows-1.
85
+ * It returns a Datum and an isNull flag.
86
+ *
87
+ * compute_stats should set stats_valid true if it is able to compute
88
+ * any useful statistics. If it does, the remainder of the struct holds
89
+ * the information to be stored in a pg_statistic row for the column. Be
90
+ * careful to allocate any pointed-to data in anl_context, which will NOT
91
+ * be CurrentMemoryContext when compute_stats is called.
92
+ *
93
+ * Note: all comparisons done for statistical purposes should use the
94
+ * underlying column's collation (attcollation), except in situations
95
+ * where a noncollatable container type contains a collatable type;
96
+ * in that case use the type's default collation. Be sure to record
97
+ * the appropriate collation in stacoll.
98
+ *----------
99
+ */
100
+ typedef struct VacAttrStats *VacAttrStatsP;
101
+
102
+ typedef Datum (*AnalyzeAttrFetchFunc) (VacAttrStatsP stats, int rownum,
103
+ bool *isNull);
104
+
105
+ typedef void (*AnalyzeAttrComputeStatsFunc) (VacAttrStatsP stats,
106
+ AnalyzeAttrFetchFunc fetchfunc,
107
+ int samplerows,
108
+ double totalrows);
109
+
110
+ typedef struct VacAttrStats
111
+ {
112
+ /*
113
+ * These fields are set up by the main ANALYZE code before invoking the
114
+ * type-specific typanalyze function.
115
+ *
116
+ * Note: do not assume that the data being analyzed has the same datatype
117
+ * shown in attr, ie do not trust attr->atttypid, attlen, etc. This is
118
+ * because some index opclasses store a different type than the underlying
119
+ * column/expression. Instead use attrtypid, attrtypmod, and attrtype for
120
+ * information about the datatype being fed to the typanalyze function.
121
+ * Likewise, use attrcollid not attr->attcollation.
122
+ */
123
+ Form_pg_attribute attr; /* copy of pg_attribute row for column */
124
+ Oid attrtypid; /* type of data being analyzed */
125
+ int32 attrtypmod; /* typmod of data being analyzed */
126
+ Form_pg_type attrtype; /* copy of pg_type row for attrtypid */
127
+ Oid attrcollid; /* collation of data being analyzed */
128
+ MemoryContext anl_context; /* where to save long-lived data */
129
+
130
+ /*
131
+ * These fields must be filled in by the typanalyze routine, unless it
132
+ * returns false.
133
+ */
134
+ AnalyzeAttrComputeStatsFunc compute_stats; /* function pointer */
135
+ int minrows; /* Minimum # of rows wanted for stats */
136
+ void *extra_data; /* for extra type-specific data */
137
+
138
+ /*
139
+ * These fields are to be filled in by the compute_stats routine. (They
140
+ * are initialized to zero when the struct is created.)
141
+ */
142
+ bool stats_valid;
143
+ float4 stanullfrac; /* fraction of entries that are NULL */
144
+ int32 stawidth; /* average width of column values */
145
+ float4 stadistinct; /* # distinct values */
146
+ int16 stakind[STATISTIC_NUM_SLOTS];
147
+ Oid staop[STATISTIC_NUM_SLOTS];
148
+ Oid stacoll[STATISTIC_NUM_SLOTS];
149
+ int numnumbers[STATISTIC_NUM_SLOTS];
150
+ float4 *stanumbers[STATISTIC_NUM_SLOTS];
151
+ int numvalues[STATISTIC_NUM_SLOTS];
152
+ Datum *stavalues[STATISTIC_NUM_SLOTS];
153
+
154
+ /*
155
+ * These fields describe the stavalues[n] element types. They will be
156
+ * initialized to match attrtypid, but a custom typanalyze function might
157
+ * want to store an array of something other than the analyzed column's
158
+ * elements. It should then overwrite these fields.
159
+ */
160
+ Oid statypid[STATISTIC_NUM_SLOTS];
161
+ int16 statyplen[STATISTIC_NUM_SLOTS];
162
+ bool statypbyval[STATISTIC_NUM_SLOTS];
163
+ char statypalign[STATISTIC_NUM_SLOTS];
164
+
165
+ /*
166
+ * These fields are private to the main ANALYZE code and should not be
167
+ * looked at by type-specific functions.
168
+ */
169
+ int tupattnum; /* attribute number within tuples */
170
+ HeapTuple *rows; /* access info for std fetch function */
171
+ TupleDesc tupDesc;
172
+ Datum *exprvals; /* access info for index fetch function */
173
+ bool *exprnulls;
174
+ int rowstride;
175
+ } VacAttrStats;
176
+
177
+ typedef enum VacuumOption
178
+ {
179
+ VACOPT_VACUUM = 1 << 0, /* do VACUUM */
180
+ VACOPT_ANALYZE = 1 << 1, /* do ANALYZE */
181
+ VACOPT_VERBOSE = 1 << 2, /* print progress info */
182
+ VACOPT_FREEZE = 1 << 3, /* FREEZE option */
183
+ VACOPT_FULL = 1 << 4, /* FULL (non-concurrent) vacuum */
184
+ VACOPT_SKIP_LOCKED = 1 << 5, /* skip if cannot get lock */
185
+ VACOPT_SKIPTOAST = 1 << 6, /* don't process the TOAST table, if any */
186
+ VACOPT_DISABLE_PAGE_SKIPPING = 1 << 7 /* don't skip any pages */
187
+ } VacuumOption;
188
+
189
+ /*
190
+ * A ternary value used by vacuum parameters.
191
+ *
192
+ * DEFAULT value is used to determine the value based on other
193
+ * configurations, e.g. reloptions.
194
+ */
195
+ typedef enum VacOptTernaryValue
196
+ {
197
+ VACOPT_TERNARY_DEFAULT = 0,
198
+ VACOPT_TERNARY_DISABLED,
199
+ VACOPT_TERNARY_ENABLED,
200
+ } VacOptTernaryValue;
201
+
202
+ /*
203
+ * Parameters customizing behavior of VACUUM and ANALYZE.
204
+ *
205
+ * Note that at least one of VACOPT_VACUUM and VACOPT_ANALYZE must be set
206
+ * in options.
207
+ */
208
+ typedef struct VacuumParams
209
+ {
210
+ int options; /* bitmask of VacuumOption */
211
+ int freeze_min_age; /* min freeze age, -1 to use default */
212
+ int freeze_table_age; /* age at which to scan whole table */
213
+ int multixact_freeze_min_age; /* min multixact freeze age, -1 to
214
+ * use default */
215
+ int multixact_freeze_table_age; /* multixact age at which to scan
216
+ * whole table */
217
+ bool is_wraparound; /* force a for-wraparound vacuum */
218
+ int log_min_duration; /* minimum execution threshold in ms at
219
+ * which verbose logs are activated, -1
220
+ * to use default */
221
+ VacOptTernaryValue index_cleanup; /* Do index vacuum and cleanup,
222
+ * default value depends on reloptions */
223
+ VacOptTernaryValue truncate; /* Truncate empty pages at the end,
224
+ * default value depends on reloptions */
225
+
226
+ /*
227
+ * The number of parallel vacuum workers. 0 by default which means choose
228
+ * based on the number of indexes. -1 indicates parallel vacuum is
229
+ * disabled.
230
+ */
231
+ int nworkers;
232
+ } VacuumParams;
233
+
234
+ /* GUC parameters */
235
+ extern PGDLLIMPORT int default_statistics_target; /* PGDLLIMPORT for PostGIS */
236
+ extern int vacuum_freeze_min_age;
237
+ extern int vacuum_freeze_table_age;
238
+ extern int vacuum_multixact_freeze_min_age;
239
+ extern int vacuum_multixact_freeze_table_age;
240
+
241
+ /* Variables for cost-based parallel vacuum */
242
+ extern pg_atomic_uint32 *VacuumSharedCostBalance;
243
+ extern pg_atomic_uint32 *VacuumActiveNWorkers;
244
+ extern int VacuumCostBalanceLocal;
245
+
246
+
247
+ /* in commands/vacuum.c */
248
+ extern void ExecVacuum(ParseState *pstate, VacuumStmt *vacstmt, bool isTopLevel);
249
+ extern void vacuum(List *relations, VacuumParams *params,
250
+ BufferAccessStrategy bstrategy, bool isTopLevel);
251
+ extern void vac_open_indexes(Relation relation, LOCKMODE lockmode,
252
+ int *nindexes, Relation **Irel);
253
+ extern void vac_close_indexes(int nindexes, Relation *Irel, LOCKMODE lockmode);
254
+ extern double vac_estimate_reltuples(Relation relation,
255
+ BlockNumber total_pages,
256
+ BlockNumber scanned_pages,
257
+ double scanned_tuples);
258
+ extern void vac_update_relstats(Relation relation,
259
+ BlockNumber num_pages,
260
+ double num_tuples,
261
+ BlockNumber num_all_visible_pages,
262
+ bool hasindex,
263
+ TransactionId frozenxid,
264
+ MultiXactId minmulti,
265
+ bool in_outer_xact);
266
+ extern void vacuum_set_xid_limits(Relation rel,
267
+ int freeze_min_age, int freeze_table_age,
268
+ int multixact_freeze_min_age,
269
+ int multixact_freeze_table_age,
270
+ TransactionId *oldestXmin,
271
+ TransactionId *freezeLimit,
272
+ TransactionId *xidFullScanLimit,
273
+ MultiXactId *multiXactCutoff,
274
+ MultiXactId *mxactFullScanLimit);
275
+ extern void vac_update_datfrozenxid(void);
276
+ extern void vacuum_delay_point(void);
277
+ extern bool vacuum_is_relation_owner(Oid relid, Form_pg_class reltuple,
278
+ int options);
279
+ extern Relation vacuum_open_relation(Oid relid, RangeVar *relation,
280
+ int options, bool verbose, LOCKMODE lmode);
281
+
282
+ /* in commands/analyze.c */
283
+ extern void analyze_rel(Oid relid, RangeVar *relation,
284
+ VacuumParams *params, List *va_cols, bool in_outer_xact,
285
+ BufferAccessStrategy bstrategy);
286
+ extern bool std_typanalyze(VacAttrStats *stats);
287
+
288
+ /* in utils/misc/sampling.c --- duplicate of declarations in utils/sampling.h */
289
+ extern double anl_random_fract(void);
290
+ extern double anl_init_selection_state(int n);
291
+ extern double anl_get_next_S(double t, int n, double *stateptr);
292
+
293
+ #endif /* VACUUM_H */