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,45 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * geqo_gene.h
4
+ * genome representation in optimizer/geqo
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/optimizer/geqo_gene.h
10
+ *
11
+ *-------------------------------------------------------------------------
12
+ */
13
+
14
+ /* contributed by:
15
+ =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
16
+ * Martin Utesch * Institute of Automatic Control *
17
+ = = University of Mining and Technology =
18
+ * utesch@aut.tu-freiberg.de * Freiberg, Germany *
19
+ =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
20
+ */
21
+
22
+
23
+ #ifndef GEQO_GENE_H
24
+ #define GEQO_GENE_H
25
+
26
+ #include "nodes/nodes.h"
27
+
28
+ /* we presume that int instead of Relid
29
+ is o.k. for Gene; so don't change it! */
30
+ typedef int Gene;
31
+
32
+ typedef struct Chromosome
33
+ {
34
+ Gene *string;
35
+ Cost worth;
36
+ } Chromosome;
37
+
38
+ typedef struct Pool
39
+ {
40
+ Chromosome *data;
41
+ int size;
42
+ int string_length;
43
+ } Pool;
44
+
45
+ #endif /* GEQO_GENE_H */
@@ -0,0 +1,199 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * optimizer.h
4
+ * External API for the Postgres planner.
5
+ *
6
+ * This header is meant to define everything that the core planner
7
+ * exposes for use by non-planner modules.
8
+ *
9
+ * Note that there are files outside src/backend/optimizer/ that are
10
+ * considered planner modules, because they're too much in bed with
11
+ * planner operations to be treated otherwise. FDW planning code is an
12
+ * example. For the most part, however, code outside the core planner
13
+ * should not need to include any optimizer/ header except this one.
14
+ *
15
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
16
+ * Portions Copyright (c) 1994, Regents of the University of California
17
+ *
18
+ * src/include/optimizer/optimizer.h
19
+ *
20
+ *-------------------------------------------------------------------------
21
+ */
22
+ #ifndef OPTIMIZER_H
23
+ #define OPTIMIZER_H
24
+
25
+ #include "nodes/parsenodes.h"
26
+
27
+ /* Test if an expression node represents a SRF call. Beware multiple eval! */
28
+ #define IS_SRF_CALL(node) \
29
+ ((IsA(node, FuncExpr) && ((FuncExpr *) (node))->funcretset) || \
30
+ (IsA(node, OpExpr) && ((OpExpr *) (node))->opretset))
31
+
32
+ /*
33
+ * We don't want to include nodes/pathnodes.h here, because non-planner
34
+ * code should generally treat PlannerInfo as an opaque typedef.
35
+ * But we'd like such code to use that typedef name, so define the
36
+ * typedef either here or in pathnodes.h, whichever is read first.
37
+ */
38
+ #ifndef HAVE_PLANNERINFO_TYPEDEF
39
+ typedef struct PlannerInfo PlannerInfo;
40
+ #define HAVE_PLANNERINFO_TYPEDEF 1
41
+ #endif
42
+
43
+ /* Likewise for IndexOptInfo and SpecialJoinInfo. */
44
+ #ifndef HAVE_INDEXOPTINFO_TYPEDEF
45
+ typedef struct IndexOptInfo IndexOptInfo;
46
+ #define HAVE_INDEXOPTINFO_TYPEDEF 1
47
+ #endif
48
+ #ifndef HAVE_SPECIALJOININFO_TYPEDEF
49
+ typedef struct SpecialJoinInfo SpecialJoinInfo;
50
+ #define HAVE_SPECIALJOININFO_TYPEDEF 1
51
+ #endif
52
+
53
+ /* It also seems best not to include plannodes.h, params.h, or htup.h here */
54
+ struct PlannedStmt;
55
+ struct ParamListInfoData;
56
+ struct HeapTupleData;
57
+
58
+
59
+ /* in path/clausesel.c: */
60
+
61
+ extern Selectivity clause_selectivity(PlannerInfo *root,
62
+ Node *clause,
63
+ int varRelid,
64
+ JoinType jointype,
65
+ SpecialJoinInfo *sjinfo);
66
+ extern Selectivity clauselist_selectivity_simple(PlannerInfo *root,
67
+ List *clauses,
68
+ int varRelid,
69
+ JoinType jointype,
70
+ SpecialJoinInfo *sjinfo,
71
+ Bitmapset *estimatedclauses);
72
+ extern Selectivity clauselist_selectivity(PlannerInfo *root,
73
+ List *clauses,
74
+ int varRelid,
75
+ JoinType jointype,
76
+ SpecialJoinInfo *sjinfo);
77
+
78
+ /* in path/costsize.c: */
79
+
80
+ /* widely used cost parameters */
81
+ extern PGDLLIMPORT double seq_page_cost;
82
+ extern PGDLLIMPORT double random_page_cost;
83
+ extern PGDLLIMPORT double cpu_tuple_cost;
84
+ extern PGDLLIMPORT double cpu_index_tuple_cost;
85
+ extern PGDLLIMPORT double cpu_operator_cost;
86
+ extern PGDLLIMPORT double parallel_tuple_cost;
87
+ extern PGDLLIMPORT double parallel_setup_cost;
88
+ extern PGDLLIMPORT int effective_cache_size;
89
+
90
+ extern double clamp_row_est(double nrows);
91
+
92
+ /* in path/indxpath.c: */
93
+
94
+ extern bool is_pseudo_constant_for_index(Node *expr, IndexOptInfo *index);
95
+ extern bool is_pseudo_constant_for_index_new(PlannerInfo *root, Node *expr,
96
+ IndexOptInfo *index);
97
+
98
+ /* in plan/planner.c: */
99
+
100
+ /* possible values for force_parallel_mode */
101
+ typedef enum
102
+ {
103
+ FORCE_PARALLEL_OFF,
104
+ FORCE_PARALLEL_ON,
105
+ FORCE_PARALLEL_REGRESS
106
+ } ForceParallelMode;
107
+
108
+ /* GUC parameters */
109
+ extern int force_parallel_mode;
110
+ extern bool parallel_leader_participation;
111
+
112
+ extern struct PlannedStmt *planner(Query *parse, const char *query_string,
113
+ int cursorOptions,
114
+ struct ParamListInfoData *boundParams);
115
+
116
+ extern Expr *expression_planner(Expr *expr);
117
+ extern Expr *expression_planner_with_deps(Expr *expr,
118
+ List **relationOids,
119
+ List **invalItems);
120
+
121
+ extern bool plan_cluster_use_sort(Oid tableOid, Oid indexOid);
122
+ extern int plan_create_index_workers(Oid tableOid, Oid indexOid);
123
+
124
+ /* in plan/setrefs.c: */
125
+
126
+ extern void extract_query_dependencies(Node *query,
127
+ List **relationOids,
128
+ List **invalItems,
129
+ bool *hasRowSecurity);
130
+
131
+ /* in prep/prepqual.c: */
132
+
133
+ extern Node *negate_clause(Node *node);
134
+ extern Expr *canonicalize_qual(Expr *qual, bool is_check);
135
+
136
+ /* in util/clauses.c: */
137
+
138
+ extern bool contain_mutable_functions(Node *clause);
139
+ extern bool contain_volatile_functions(Node *clause);
140
+ extern bool contain_volatile_functions_not_nextval(Node *clause);
141
+
142
+ extern Node *eval_const_expressions(PlannerInfo *root, Node *node);
143
+
144
+ extern Node *estimate_expression_value(PlannerInfo *root, Node *node);
145
+
146
+ extern Expr *evaluate_expr(Expr *expr, Oid result_type, int32 result_typmod,
147
+ Oid result_collation);
148
+
149
+ extern List *expand_function_arguments(List *args, Oid result_type,
150
+ struct HeapTupleData *func_tuple);
151
+
152
+ /* in util/predtest.c: */
153
+
154
+ extern bool predicate_implied_by(List *predicate_list, List *clause_list,
155
+ bool weak);
156
+ extern bool predicate_refuted_by(List *predicate_list, List *clause_list,
157
+ bool weak);
158
+
159
+ /* in util/tlist.c: */
160
+
161
+ extern int count_nonjunk_tlist_entries(List *tlist);
162
+ extern TargetEntry *get_sortgroupref_tle(Index sortref,
163
+ List *targetList);
164
+ extern TargetEntry *get_sortgroupclause_tle(SortGroupClause *sgClause,
165
+ List *targetList);
166
+ extern Node *get_sortgroupclause_expr(SortGroupClause *sgClause,
167
+ List *targetList);
168
+ extern List *get_sortgrouplist_exprs(List *sgClauses,
169
+ List *targetList);
170
+ extern SortGroupClause *get_sortgroupref_clause(Index sortref,
171
+ List *clauses);
172
+ extern SortGroupClause *get_sortgroupref_clause_noerr(Index sortref,
173
+ List *clauses);
174
+
175
+ /* in util/var.c: */
176
+
177
+ /* Bits that can be OR'd into the flags argument of pull_var_clause() */
178
+ #define PVC_INCLUDE_AGGREGATES 0x0001 /* include Aggrefs in output list */
179
+ #define PVC_RECURSE_AGGREGATES 0x0002 /* recurse into Aggref arguments */
180
+ #define PVC_INCLUDE_WINDOWFUNCS 0x0004 /* include WindowFuncs in output list */
181
+ #define PVC_RECURSE_WINDOWFUNCS 0x0008 /* recurse into WindowFunc arguments */
182
+ #define PVC_INCLUDE_PLACEHOLDERS 0x0010 /* include PlaceHolderVars in
183
+ * output list */
184
+ #define PVC_RECURSE_PLACEHOLDERS 0x0020 /* recurse into PlaceHolderVar
185
+ * arguments */
186
+
187
+ extern Bitmapset *pull_varnos(Node *node);
188
+ extern Bitmapset *pull_varnos_of_level(Node *node, int levelsup);
189
+ extern Bitmapset *pull_varnos_new(PlannerInfo *root, Node *node);
190
+ extern Bitmapset *pull_varnos_of_level_new(PlannerInfo *root, Node *node, int levelsup);
191
+ extern void pull_varattnos(Node *node, Index varno, Bitmapset **varattnos);
192
+ extern List *pull_vars_of_level(Node *node, int levelsup);
193
+ extern bool contain_var_clause(Node *node);
194
+ extern bool contain_vars_of_level(Node *node, int levelsup);
195
+ extern int locate_var_of_level(Node *node, int levelsup);
196
+ extern List *pull_var_clause(Node *node, int flags);
197
+ extern Node *flatten_join_alias_vars(Query *query, Node *node);
198
+
199
+ #endif /* OPTIMIZER_H */
@@ -0,0 +1,249 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * paths.h
4
+ * prototypes for various files in optimizer/path
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/optimizer/paths.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef PATHS_H
15
+ #define PATHS_H
16
+
17
+ #include "nodes/pathnodes.h"
18
+
19
+
20
+ /*
21
+ * allpaths.c
22
+ */
23
+ extern PGDLLIMPORT bool enable_geqo;
24
+ extern PGDLLIMPORT int geqo_threshold;
25
+ extern PGDLLIMPORT int min_parallel_table_scan_size;
26
+ extern PGDLLIMPORT int min_parallel_index_scan_size;
27
+
28
+ /* Hook for plugins to get control in set_rel_pathlist() */
29
+ typedef void (*set_rel_pathlist_hook_type) (PlannerInfo *root,
30
+ RelOptInfo *rel,
31
+ Index rti,
32
+ RangeTblEntry *rte);
33
+ extern PGDLLIMPORT set_rel_pathlist_hook_type set_rel_pathlist_hook;
34
+
35
+ /* Hook for plugins to get control in add_paths_to_joinrel() */
36
+ typedef void (*set_join_pathlist_hook_type) (PlannerInfo *root,
37
+ RelOptInfo *joinrel,
38
+ RelOptInfo *outerrel,
39
+ RelOptInfo *innerrel,
40
+ JoinType jointype,
41
+ JoinPathExtraData *extra);
42
+ extern PGDLLIMPORT set_join_pathlist_hook_type set_join_pathlist_hook;
43
+
44
+ /* Hook for plugins to replace standard_join_search() */
45
+ typedef RelOptInfo *(*join_search_hook_type) (PlannerInfo *root,
46
+ int levels_needed,
47
+ List *initial_rels);
48
+ extern PGDLLIMPORT join_search_hook_type join_search_hook;
49
+
50
+
51
+ extern RelOptInfo *make_one_rel(PlannerInfo *root, List *joinlist);
52
+ extern RelOptInfo *standard_join_search(PlannerInfo *root, int levels_needed,
53
+ List *initial_rels);
54
+
55
+ extern void generate_gather_paths(PlannerInfo *root, RelOptInfo *rel,
56
+ bool override_rows);
57
+ extern void generate_useful_gather_paths(PlannerInfo *root, RelOptInfo *rel,
58
+ bool override_rows);
59
+ extern int compute_parallel_worker(RelOptInfo *rel, double heap_pages,
60
+ double index_pages, int max_workers);
61
+ extern void create_partial_bitmap_paths(PlannerInfo *root, RelOptInfo *rel,
62
+ Path *bitmapqual);
63
+ extern void generate_partitionwise_join_paths(PlannerInfo *root,
64
+ RelOptInfo *rel);
65
+
66
+ #ifdef OPTIMIZER_DEBUG
67
+ extern void debug_print_rel(PlannerInfo *root, RelOptInfo *rel);
68
+ #endif
69
+
70
+ /*
71
+ * indxpath.c
72
+ * routines to generate index paths
73
+ */
74
+ extern void create_index_paths(PlannerInfo *root, RelOptInfo *rel);
75
+ extern bool relation_has_unique_index_for(PlannerInfo *root, RelOptInfo *rel,
76
+ List *restrictlist,
77
+ List *exprlist, List *oprlist);
78
+ extern bool indexcol_is_bool_constant_for_query(PlannerInfo *root,
79
+ IndexOptInfo *index,
80
+ int indexcol);
81
+ extern bool match_index_to_operand(Node *operand, int indexcol,
82
+ IndexOptInfo *index);
83
+ extern void check_index_predicates(PlannerInfo *root, RelOptInfo *rel);
84
+
85
+ /*
86
+ * tidpath.h
87
+ * routines to generate tid paths
88
+ */
89
+ extern void create_tidscan_paths(PlannerInfo *root, RelOptInfo *rel);
90
+
91
+ /*
92
+ * joinpath.c
93
+ * routines to create join paths
94
+ */
95
+ extern void add_paths_to_joinrel(PlannerInfo *root, RelOptInfo *joinrel,
96
+ RelOptInfo *outerrel, RelOptInfo *innerrel,
97
+ JoinType jointype, SpecialJoinInfo *sjinfo,
98
+ List *restrictlist);
99
+
100
+ /*
101
+ * joinrels.c
102
+ * routines to determine which relations to join
103
+ */
104
+ extern void join_search_one_level(PlannerInfo *root, int level);
105
+ extern RelOptInfo *make_join_rel(PlannerInfo *root,
106
+ RelOptInfo *rel1, RelOptInfo *rel2);
107
+ extern bool have_join_order_restriction(PlannerInfo *root,
108
+ RelOptInfo *rel1, RelOptInfo *rel2);
109
+ extern bool have_dangerous_phv(PlannerInfo *root,
110
+ Relids outer_relids, Relids inner_params);
111
+ extern void mark_dummy_rel(RelOptInfo *rel);
112
+
113
+ /*
114
+ * equivclass.c
115
+ * routines for managing EquivalenceClasses
116
+ */
117
+ typedef bool (*ec_matches_callback_type) (PlannerInfo *root,
118
+ RelOptInfo *rel,
119
+ EquivalenceClass *ec,
120
+ EquivalenceMember *em,
121
+ void *arg);
122
+
123
+ extern bool process_equivalence(PlannerInfo *root,
124
+ RestrictInfo **p_restrictinfo,
125
+ bool below_outer_join);
126
+ extern Expr *canonicalize_ec_expression(Expr *expr,
127
+ Oid req_type, Oid req_collation);
128
+ extern void reconsider_outer_join_clauses(PlannerInfo *root);
129
+ extern EquivalenceClass *get_eclass_for_sort_expr(PlannerInfo *root,
130
+ Expr *expr,
131
+ Relids nullable_relids,
132
+ List *opfamilies,
133
+ Oid opcintype,
134
+ Oid collation,
135
+ Index sortref,
136
+ Relids rel,
137
+ bool create_it);
138
+ extern Expr *find_em_expr_for_rel(EquivalenceClass *ec, RelOptInfo *rel);
139
+ extern Expr *find_em_expr_usable_for_sorting_rel(PlannerInfo *root,
140
+ EquivalenceClass *ec,
141
+ RelOptInfo *rel,
142
+ bool require_parallel_safe);
143
+ extern void generate_base_implied_equalities(PlannerInfo *root);
144
+ extern List *generate_join_implied_equalities(PlannerInfo *root,
145
+ Relids join_relids,
146
+ Relids outer_relids,
147
+ RelOptInfo *inner_rel);
148
+ extern List *generate_join_implied_equalities_for_ecs(PlannerInfo *root,
149
+ List *eclasses,
150
+ Relids join_relids,
151
+ Relids outer_relids,
152
+ RelOptInfo *inner_rel);
153
+ extern bool exprs_known_equal(PlannerInfo *root, Node *item1, Node *item2);
154
+ extern EquivalenceClass *match_eclasses_to_foreign_key_col(PlannerInfo *root,
155
+ ForeignKeyOptInfo *fkinfo,
156
+ int colno);
157
+ extern void add_child_rel_equivalences(PlannerInfo *root,
158
+ AppendRelInfo *appinfo,
159
+ RelOptInfo *parent_rel,
160
+ RelOptInfo *child_rel);
161
+ extern void add_child_join_rel_equivalences(PlannerInfo *root,
162
+ int nappinfos,
163
+ AppendRelInfo **appinfos,
164
+ RelOptInfo *parent_rel,
165
+ RelOptInfo *child_rel);
166
+ extern List *generate_implied_equalities_for_column(PlannerInfo *root,
167
+ RelOptInfo *rel,
168
+ ec_matches_callback_type callback,
169
+ void *callback_arg,
170
+ Relids prohibited_rels);
171
+ extern bool have_relevant_eclass_joinclause(PlannerInfo *root,
172
+ RelOptInfo *rel1, RelOptInfo *rel2);
173
+ extern bool has_relevant_eclass_joinclause(PlannerInfo *root,
174
+ RelOptInfo *rel1);
175
+ extern bool eclass_useful_for_merging(PlannerInfo *root,
176
+ EquivalenceClass *eclass,
177
+ RelOptInfo *rel);
178
+ extern bool is_redundant_derived_clause(RestrictInfo *rinfo, List *clauselist);
179
+ extern bool is_redundant_with_indexclauses(RestrictInfo *rinfo,
180
+ List *indexclauses);
181
+
182
+ /*
183
+ * pathkeys.c
184
+ * utilities for matching and building path keys
185
+ */
186
+ typedef enum
187
+ {
188
+ PATHKEYS_EQUAL, /* pathkeys are identical */
189
+ PATHKEYS_BETTER1, /* pathkey 1 is a superset of pathkey 2 */
190
+ PATHKEYS_BETTER2, /* vice versa */
191
+ PATHKEYS_DIFFERENT /* neither pathkey includes the other */
192
+ } PathKeysComparison;
193
+
194
+ extern PathKeysComparison compare_pathkeys(List *keys1, List *keys2);
195
+ extern bool pathkeys_contained_in(List *keys1, List *keys2);
196
+ extern bool pathkeys_count_contained_in(List *keys1, List *keys2, int *n_common);
197
+ extern Path *get_cheapest_path_for_pathkeys(List *paths, List *pathkeys,
198
+ Relids required_outer,
199
+ CostSelector cost_criterion,
200
+ bool require_parallel_safe);
201
+ extern Path *get_cheapest_fractional_path_for_pathkeys(List *paths,
202
+ List *pathkeys,
203
+ Relids required_outer,
204
+ double fraction);
205
+ extern Path *get_cheapest_parallel_safe_total_inner(List *paths);
206
+ extern List *build_index_pathkeys(PlannerInfo *root, IndexOptInfo *index,
207
+ ScanDirection scandir);
208
+ extern List *build_partition_pathkeys(PlannerInfo *root, RelOptInfo *partrel,
209
+ ScanDirection scandir, bool *partialkeys);
210
+ extern List *build_expression_pathkey(PlannerInfo *root, Expr *expr,
211
+ Relids nullable_relids, Oid opno,
212
+ Relids rel, bool create_it);
213
+ extern List *convert_subquery_pathkeys(PlannerInfo *root, RelOptInfo *rel,
214
+ List *subquery_pathkeys,
215
+ List *subquery_tlist);
216
+ extern List *build_join_pathkeys(PlannerInfo *root,
217
+ RelOptInfo *joinrel,
218
+ JoinType jointype,
219
+ List *outer_pathkeys);
220
+ extern List *make_pathkeys_for_sortclauses(PlannerInfo *root,
221
+ List *sortclauses,
222
+ List *tlist);
223
+ extern void initialize_mergeclause_eclasses(PlannerInfo *root,
224
+ RestrictInfo *restrictinfo);
225
+ extern void update_mergeclause_eclasses(PlannerInfo *root,
226
+ RestrictInfo *restrictinfo);
227
+ extern List *find_mergeclauses_for_outer_pathkeys(PlannerInfo *root,
228
+ List *pathkeys,
229
+ List *restrictinfos);
230
+ extern List *select_outer_pathkeys_for_merge(PlannerInfo *root,
231
+ List *mergeclauses,
232
+ RelOptInfo *joinrel);
233
+ extern List *make_inner_pathkeys_for_merge(PlannerInfo *root,
234
+ List *mergeclauses,
235
+ List *outer_pathkeys);
236
+ extern List *trim_mergeclauses_for_inner_pathkeys(PlannerInfo *root,
237
+ List *mergeclauses,
238
+ List *pathkeys);
239
+ extern List *truncate_useless_pathkeys(PlannerInfo *root,
240
+ RelOptInfo *rel,
241
+ List *pathkeys);
242
+ extern bool has_useful_pathkeys(PlannerInfo *root, RelOptInfo *rel);
243
+ extern PathKey *make_canonical_pathkey(PlannerInfo *root,
244
+ EquivalenceClass *eclass, Oid opfamily,
245
+ int strategy, bool nulls_first);
246
+ extern void add_paths_to_append_rel(PlannerInfo *root, RelOptInfo *rel,
247
+ List *live_childrels);
248
+
249
+ #endif /* PATHS_H */