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,161 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * itup.h
4
+ * POSTGRES index tuple 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/access/itup.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef ITUP_H
15
+ #define ITUP_H
16
+
17
+ #include "access/tupdesc.h"
18
+ #include "access/tupmacs.h"
19
+ #include "storage/bufpage.h"
20
+ #include "storage/itemptr.h"
21
+
22
+ /*
23
+ * Index tuple header structure
24
+ *
25
+ * All index tuples start with IndexTupleData. If the HasNulls bit is set,
26
+ * this is followed by an IndexAttributeBitMapData. The index attribute
27
+ * values follow, beginning at a MAXALIGN boundary.
28
+ *
29
+ * Note that the space allocated for the bitmap does not vary with the number
30
+ * of attributes; that is because we don't have room to store the number of
31
+ * attributes in the header. Given the MAXALIGN constraint there's no space
32
+ * savings to be had anyway, for usual values of INDEX_MAX_KEYS.
33
+ */
34
+
35
+ typedef struct IndexTupleData
36
+ {
37
+ ItemPointerData t_tid; /* reference TID to heap tuple */
38
+
39
+ /* ---------------
40
+ * t_info is laid out in the following fashion:
41
+ *
42
+ * 15th (high) bit: has nulls
43
+ * 14th bit: has var-width attributes
44
+ * 13th bit: AM-defined meaning
45
+ * 12-0 bit: size of tuple
46
+ * ---------------
47
+ */
48
+
49
+ unsigned short t_info; /* various info about tuple */
50
+
51
+ } IndexTupleData; /* MORE DATA FOLLOWS AT END OF STRUCT */
52
+
53
+ typedef IndexTupleData *IndexTuple;
54
+
55
+ typedef struct IndexAttributeBitMapData
56
+ {
57
+ bits8 bits[(INDEX_MAX_KEYS + 8 - 1) / 8];
58
+ } IndexAttributeBitMapData;
59
+
60
+ typedef IndexAttributeBitMapData * IndexAttributeBitMap;
61
+
62
+ /*
63
+ * t_info manipulation macros
64
+ */
65
+ #define INDEX_SIZE_MASK 0x1FFF
66
+ #define INDEX_AM_RESERVED_BIT 0x2000 /* reserved for index-AM specific
67
+ * usage */
68
+ #define INDEX_VAR_MASK 0x4000
69
+ #define INDEX_NULL_MASK 0x8000
70
+
71
+ #define IndexTupleSize(itup) ((Size) ((itup)->t_info & INDEX_SIZE_MASK))
72
+ #define IndexTupleHasNulls(itup) ((((IndexTuple) (itup))->t_info & INDEX_NULL_MASK))
73
+ #define IndexTupleHasVarwidths(itup) ((((IndexTuple) (itup))->t_info & INDEX_VAR_MASK))
74
+
75
+
76
+ /*
77
+ * Takes an infomask as argument (primarily because this needs to be usable
78
+ * at index_form_tuple time so enough space is allocated).
79
+ */
80
+ #define IndexInfoFindDataOffset(t_info) \
81
+ ( \
82
+ (!((t_info) & INDEX_NULL_MASK)) ? \
83
+ ( \
84
+ (Size)MAXALIGN(sizeof(IndexTupleData)) \
85
+ ) \
86
+ : \
87
+ ( \
88
+ (Size)MAXALIGN(sizeof(IndexTupleData) + sizeof(IndexAttributeBitMapData)) \
89
+ ) \
90
+ )
91
+
92
+ /* ----------------
93
+ * index_getattr
94
+ *
95
+ * This gets called many times, so we macro the cacheable and NULL
96
+ * lookups, and call nocache_index_getattr() for the rest.
97
+ *
98
+ * ----------------
99
+ */
100
+ #define index_getattr(tup, attnum, tupleDesc, isnull) \
101
+ ( \
102
+ AssertMacro(PointerIsValid(isnull) && (attnum) > 0), \
103
+ *(isnull) = false, \
104
+ !IndexTupleHasNulls(tup) ? \
105
+ ( \
106
+ TupleDescAttr((tupleDesc), (attnum)-1)->attcacheoff >= 0 ? \
107
+ ( \
108
+ fetchatt(TupleDescAttr((tupleDesc), (attnum)-1), \
109
+ (char *) (tup) + IndexInfoFindDataOffset((tup)->t_info) \
110
+ + TupleDescAttr((tupleDesc), (attnum)-1)->attcacheoff) \
111
+ ) \
112
+ : \
113
+ nocache_index_getattr((tup), (attnum), (tupleDesc)) \
114
+ ) \
115
+ : \
116
+ ( \
117
+ (att_isnull((attnum)-1, (char *)(tup) + sizeof(IndexTupleData))) ? \
118
+ ( \
119
+ *(isnull) = true, \
120
+ (Datum)NULL \
121
+ ) \
122
+ : \
123
+ ( \
124
+ nocache_index_getattr((tup), (attnum), (tupleDesc)) \
125
+ ) \
126
+ ) \
127
+ )
128
+
129
+ /*
130
+ * MaxIndexTuplesPerPage is an upper bound on the number of tuples that can
131
+ * fit on one index page. An index tuple must have either data or a null
132
+ * bitmap, so we can safely assume it's at least 1 byte bigger than a bare
133
+ * IndexTupleData struct. We arrive at the divisor because each tuple
134
+ * must be maxaligned, and it must have an associated line pointer.
135
+ *
136
+ * To be index-type-independent, this does not account for any special space
137
+ * on the page, and is thus conservative.
138
+ *
139
+ * Note: in btree non-leaf pages, the first tuple has no key (it's implicitly
140
+ * minus infinity), thus breaking the "at least 1 byte bigger" assumption.
141
+ * On such a page, N tuples could take one MAXALIGN quantum less space than
142
+ * estimated here, seemingly allowing one more tuple than estimated here.
143
+ * But such a page always has at least MAXALIGN special space, so we're safe.
144
+ */
145
+ #define MaxIndexTuplesPerPage \
146
+ ((int) ((BLCKSZ - SizeOfPageHeaderData) / \
147
+ (MAXALIGN(sizeof(IndexTupleData) + 1) + sizeof(ItemIdData))))
148
+
149
+
150
+ /* routines in indextuple.c */
151
+ extern IndexTuple index_form_tuple(TupleDesc tupleDescriptor,
152
+ Datum *values, bool *isnull);
153
+ extern Datum nocache_index_getattr(IndexTuple tup, int attnum,
154
+ TupleDesc tupleDesc);
155
+ extern void index_deform_tuple(IndexTuple tup, TupleDesc tupleDescriptor,
156
+ Datum *values, bool *isnull);
157
+ extern IndexTuple CopyIndexTuple(IndexTuple source);
158
+ extern IndexTuple index_truncate_tuple(TupleDesc sourceDescriptor,
159
+ IndexTuple source, int leavenatts);
160
+
161
+ #endif /* ITUP_H */
@@ -0,0 +1,82 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * parallel.h
4
+ * Infrastructure for launching parallel workers
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/access/parallel.h
10
+ *
11
+ *-------------------------------------------------------------------------
12
+ */
13
+
14
+ #ifndef PARALLEL_H
15
+ #define PARALLEL_H
16
+
17
+ #include "access/xlogdefs.h"
18
+ #include "lib/ilist.h"
19
+ #include "postmaster/bgworker.h"
20
+ #include "storage/shm_mq.h"
21
+ #include "storage/shm_toc.h"
22
+
23
+ typedef void (*parallel_worker_main_type) (dsm_segment *seg, shm_toc *toc);
24
+
25
+ typedef struct ParallelWorkerInfo
26
+ {
27
+ BackgroundWorkerHandle *bgwhandle;
28
+ shm_mq_handle *error_mqh;
29
+ int32 pid;
30
+ } ParallelWorkerInfo;
31
+
32
+ typedef struct ParallelContext
33
+ {
34
+ dlist_node node;
35
+ SubTransactionId subid;
36
+ int nworkers; /* Maximum number of workers to launch */
37
+ int nworkers_to_launch; /* Actual number of workers to launch */
38
+ int nworkers_launched;
39
+ char *library_name;
40
+ char *function_name;
41
+ ErrorContextCallback *error_context_stack;
42
+ shm_toc_estimator estimator;
43
+ dsm_segment *seg;
44
+ void *private_memory;
45
+ shm_toc *toc;
46
+ ParallelWorkerInfo *worker;
47
+ int nknown_attached_workers;
48
+ bool *known_attached_workers;
49
+ } ParallelContext;
50
+
51
+ typedef struct ParallelWorkerContext
52
+ {
53
+ dsm_segment *seg;
54
+ shm_toc *toc;
55
+ } ParallelWorkerContext;
56
+
57
+ extern volatile bool ParallelMessagePending;
58
+ extern PGDLLIMPORT int ParallelWorkerNumber;
59
+ extern PGDLLIMPORT bool InitializingParallelWorker;
60
+
61
+ #define IsParallelWorker() (ParallelWorkerNumber >= 0)
62
+
63
+ extern ParallelContext *CreateParallelContext(const char *library_name,
64
+ const char *function_name, int nworkers);
65
+ extern void InitializeParallelDSM(ParallelContext *pcxt);
66
+ extern void ReinitializeParallelDSM(ParallelContext *pcxt);
67
+ extern void ReinitializeParallelWorkers(ParallelContext *pcxt, int nworkers_to_launch);
68
+ extern void LaunchParallelWorkers(ParallelContext *pcxt);
69
+ extern void WaitForParallelWorkersToAttach(ParallelContext *pcxt);
70
+ extern void WaitForParallelWorkersToFinish(ParallelContext *pcxt);
71
+ extern void DestroyParallelContext(ParallelContext *pcxt);
72
+ extern bool ParallelContextActive(void);
73
+
74
+ extern void HandleParallelMessageInterrupt(void);
75
+ extern void HandleParallelMessages(void);
76
+ extern void AtEOXact_Parallel(bool isCommit);
77
+ extern void AtEOSubXact_Parallel(bool isCommit, SubTransactionId mySubId);
78
+ extern void ParallelWorkerReportLastRecEnd(XLogRecPtr last_xlog_end);
79
+
80
+ extern void ParallelWorkerMain(Datum main_arg);
81
+
82
+ #endif /* PARALLEL_H */
@@ -0,0 +1,35 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * printtup.h
4
+ *
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/access/printtup.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef PRINTTUP_H
15
+ #define PRINTTUP_H
16
+
17
+ #include "utils/portal.h"
18
+
19
+ extern DestReceiver *printtup_create_DR(CommandDest dest);
20
+
21
+ extern void SetRemoteDestReceiverParams(DestReceiver *self, Portal portal);
22
+
23
+ extern void SendRowDescriptionMessage(StringInfo buf,
24
+ TupleDesc typeinfo, List *targetlist, int16 *formats);
25
+
26
+ extern void debugStartup(DestReceiver *self, int operation,
27
+ TupleDesc typeinfo);
28
+ extern bool debugtup(TupleTableSlot *slot, DestReceiver *self);
29
+
30
+ /* XXX these are really in executor/spi.c */
31
+ extern void spi_dest_startup(DestReceiver *self, int operation,
32
+ TupleDesc typeinfo);
33
+ extern bool spi_printtup(TupleTableSlot *slot, DestReceiver *self);
34
+
35
+ #endif /* PRINTTUP_H */
@@ -0,0 +1,28 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * relation.h
4
+ * Generic relation related routines.
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/access/relation.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef ACCESS_RELATION_H
15
+ #define ACCESS_RELATION_H
16
+
17
+ #include "nodes/primnodes.h"
18
+ #include "storage/lockdefs.h"
19
+ #include "utils/relcache.h"
20
+
21
+ extern Relation relation_open(Oid relationId, LOCKMODE lockmode);
22
+ extern Relation try_relation_open(Oid relationId, LOCKMODE lockmode);
23
+ extern Relation relation_openrv(const RangeVar *relation, LOCKMODE lockmode);
24
+ extern Relation relation_openrv_extended(const RangeVar *relation,
25
+ LOCKMODE lockmode, bool missing_ok);
26
+ extern void relation_close(Relation relation, LOCKMODE lockmode);
27
+
28
+ #endif /* ACCESS_RELATION_H */
@@ -0,0 +1,176 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * relscan.h
4
+ * POSTGRES relation scan 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/access/relscan.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef RELSCAN_H
15
+ #define RELSCAN_H
16
+
17
+ #include "access/htup_details.h"
18
+ #include "access/itup.h"
19
+ #include "port/atomics.h"
20
+ #include "storage/buf.h"
21
+ #include "storage/spin.h"
22
+ #include "utils/relcache.h"
23
+
24
+
25
+ struct ParallelTableScanDescData;
26
+
27
+ /*
28
+ * Generic descriptor for table scans. This is the base-class for table scans,
29
+ * which needs to be embedded in the scans of individual AMs.
30
+ */
31
+ typedef struct TableScanDescData
32
+ {
33
+ /* scan parameters */
34
+ Relation rs_rd; /* heap relation descriptor */
35
+ struct SnapshotData *rs_snapshot; /* snapshot to see */
36
+ int rs_nkeys; /* number of scan keys */
37
+ struct ScanKeyData *rs_key; /* array of scan key descriptors */
38
+
39
+ /*
40
+ * Information about type and behaviour of the scan, a bitmask of members
41
+ * of the ScanOptions enum (see tableam.h).
42
+ */
43
+ uint32 rs_flags;
44
+
45
+ struct ParallelTableScanDescData *rs_parallel; /* parallel scan
46
+ * information */
47
+
48
+ } TableScanDescData;
49
+ typedef struct TableScanDescData *TableScanDesc;
50
+
51
+ /*
52
+ * Shared state for parallel table scan.
53
+ *
54
+ * Each backend participating in a parallel table scan has its own
55
+ * TableScanDesc in backend-private memory, and those objects all contain a
56
+ * pointer to this structure. The information here must be sufficient to
57
+ * properly initialize each new TableScanDesc as workers join the scan, and it
58
+ * must act as a information what to scan for those workers.
59
+ */
60
+ typedef struct ParallelTableScanDescData
61
+ {
62
+ Oid phs_relid; /* OID of relation to scan */
63
+ bool phs_syncscan; /* report location to syncscan logic? */
64
+ bool phs_snapshot_any; /* SnapshotAny, not phs_snapshot_data? */
65
+ Size phs_snapshot_off; /* data for snapshot */
66
+ } ParallelTableScanDescData;
67
+ typedef struct ParallelTableScanDescData *ParallelTableScanDesc;
68
+
69
+ /*
70
+ * Shared state for parallel table scans, for block oriented storage.
71
+ */
72
+ typedef struct ParallelBlockTableScanDescData
73
+ {
74
+ ParallelTableScanDescData base;
75
+
76
+ BlockNumber phs_nblocks; /* # blocks in relation at start of scan */
77
+ slock_t phs_mutex; /* mutual exclusion for setting startblock */
78
+ BlockNumber phs_startblock; /* starting block number */
79
+ pg_atomic_uint64 phs_nallocated; /* number of blocks allocated to
80
+ * workers so far. */
81
+ } ParallelBlockTableScanDescData;
82
+ typedef struct ParallelBlockTableScanDescData *ParallelBlockTableScanDesc;
83
+
84
+ /*
85
+ * Base class for fetches from a table via an index. This is the base-class
86
+ * for such scans, which needs to be embedded in the respective struct for
87
+ * individual AMs.
88
+ */
89
+ typedef struct IndexFetchTableData
90
+ {
91
+ Relation rel;
92
+ } IndexFetchTableData;
93
+
94
+ /*
95
+ * We use the same IndexScanDescData structure for both amgettuple-based
96
+ * and amgetbitmap-based index scans. Some fields are only relevant in
97
+ * amgettuple-based scans.
98
+ */
99
+ typedef struct IndexScanDescData
100
+ {
101
+ /* scan parameters */
102
+ Relation heapRelation; /* heap relation descriptor, or NULL */
103
+ Relation indexRelation; /* index relation descriptor */
104
+ struct SnapshotData *xs_snapshot; /* snapshot to see */
105
+ int numberOfKeys; /* number of index qualifier conditions */
106
+ int numberOfOrderBys; /* number of ordering operators */
107
+ struct ScanKeyData *keyData; /* array of index qualifier descriptors */
108
+ struct ScanKeyData *orderByData; /* array of ordering op descriptors */
109
+ bool xs_want_itup; /* caller requests index tuples */
110
+ bool xs_temp_snap; /* unregister snapshot at scan end? */
111
+
112
+ /* signaling to index AM about killing index tuples */
113
+ bool kill_prior_tuple; /* last-returned tuple is dead */
114
+ bool ignore_killed_tuples; /* do not return killed entries */
115
+ bool xactStartedInRecovery; /* prevents killing/seeing killed
116
+ * tuples */
117
+
118
+ /* index access method's private state */
119
+ void *opaque; /* access-method-specific info */
120
+
121
+ /*
122
+ * In an index-only scan, a successful amgettuple call must fill either
123
+ * xs_itup (and xs_itupdesc) or xs_hitup (and xs_hitupdesc) to provide the
124
+ * data returned by the scan. It can fill both, in which case the heap
125
+ * format will be used.
126
+ */
127
+ IndexTuple xs_itup; /* index tuple returned by AM */
128
+ struct TupleDescData *xs_itupdesc; /* rowtype descriptor of xs_itup */
129
+ HeapTuple xs_hitup; /* index data returned by AM, as HeapTuple */
130
+ struct TupleDescData *xs_hitupdesc; /* rowtype descriptor of xs_hitup */
131
+
132
+ ItemPointerData xs_heaptid; /* result */
133
+ bool xs_heap_continue; /* T if must keep walking, potential
134
+ * further results */
135
+ IndexFetchTableData *xs_heapfetch;
136
+
137
+ bool xs_recheck; /* T means scan keys must be rechecked */
138
+
139
+ /*
140
+ * When fetching with an ordering operator, the values of the ORDER BY
141
+ * expressions of the last returned tuple, according to the index. If
142
+ * xs_recheckorderby is true, these need to be rechecked just like the
143
+ * scan keys, and the values returned here are a lower-bound on the actual
144
+ * values.
145
+ */
146
+ Datum *xs_orderbyvals;
147
+ bool *xs_orderbynulls;
148
+ bool xs_recheckorderby;
149
+
150
+ /* parallel index scan information, in shared memory */
151
+ struct ParallelIndexScanDescData *parallel_scan;
152
+ } IndexScanDescData;
153
+
154
+ /* Generic structure for parallel scans */
155
+ typedef struct ParallelIndexScanDescData
156
+ {
157
+ Oid ps_relid;
158
+ Oid ps_indexid;
159
+ Size ps_offset; /* Offset in bytes of am specific structure */
160
+ char ps_snapshot_data[FLEXIBLE_ARRAY_MEMBER];
161
+ } ParallelIndexScanDescData;
162
+
163
+ struct TupleTableSlot;
164
+
165
+ /* Struct for storage-or-index scans of system tables */
166
+ typedef struct SysScanDescData
167
+ {
168
+ Relation heap_rel; /* catalog being scanned */
169
+ Relation irel; /* NULL if doing heap scan */
170
+ struct TableScanDescData *scan; /* only valid in storage-scan case */
171
+ struct IndexScanDescData *iscan; /* only valid in index-scan case */
172
+ struct SnapshotData *snapshot; /* snapshot to unregister at end of scan */
173
+ struct TupleTableSlot *slot;
174
+ } SysScanDescData;
175
+
176
+ #endif /* RELSCAN_H */