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,160 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * extensible.h
4
+ * Definitions for extensible nodes and custom scans
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/nodes/extensible.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef EXTENSIBLE_H
15
+ #define EXTENSIBLE_H
16
+
17
+ #include "access/parallel.h"
18
+ #include "commands/explain.h"
19
+ #include "nodes/execnodes.h"
20
+ #include "nodes/pathnodes.h"
21
+ #include "nodes/plannodes.h"
22
+
23
+ /* maximum length of an extensible node identifier */
24
+ #define EXTNODENAME_MAX_LEN 64
25
+
26
+ /*
27
+ * An extensible node is a new type of node defined by an extension. The
28
+ * type is always T_ExtensibleNode, while the extnodename identifies the
29
+ * specific type of node. extnodename can be looked up to find the
30
+ * ExtensibleNodeMethods for this node type.
31
+ */
32
+ typedef struct ExtensibleNode
33
+ {
34
+ NodeTag type;
35
+ const char *extnodename; /* identifier of ExtensibleNodeMethods */
36
+ } ExtensibleNode;
37
+
38
+ /*
39
+ * node_size is the size of an extensible node of this type in bytes.
40
+ *
41
+ * nodeCopy is a function which performs a deep copy from oldnode to newnode.
42
+ * It does not need to copy type or extnodename, which are copied by the
43
+ * core system.
44
+ *
45
+ * nodeEqual is a function which performs a deep equality comparison between
46
+ * a and b and returns true or false accordingly. It does not need to compare
47
+ * type or extnodename, which are compared by the core system.
48
+ *
49
+ * nodeOut is a serialization function for the node type. It should use the
50
+ * output conventions typical for outfuncs.c. It does not need to output
51
+ * type or extnodename; the core system handles those.
52
+ *
53
+ * nodeRead is a deserialization function for the node type. It does not need
54
+ * to read type or extnodename; the core system handles those. It should fetch
55
+ * the next token using pg_strtok() from the current input stream, and then
56
+ * reconstruct the private fields according to the manner in readfuncs.c.
57
+ *
58
+ * All callbacks are mandatory.
59
+ */
60
+ typedef struct ExtensibleNodeMethods
61
+ {
62
+ const char *extnodename;
63
+ Size node_size;
64
+ void (*nodeCopy) (struct ExtensibleNode *newnode,
65
+ const struct ExtensibleNode *oldnode);
66
+ bool (*nodeEqual) (const struct ExtensibleNode *a,
67
+ const struct ExtensibleNode *b);
68
+ void (*nodeOut) (struct StringInfoData *str,
69
+ const struct ExtensibleNode *node);
70
+ void (*nodeRead) (struct ExtensibleNode *node);
71
+ } ExtensibleNodeMethods;
72
+
73
+ extern void RegisterExtensibleNodeMethods(const ExtensibleNodeMethods *method);
74
+ extern const ExtensibleNodeMethods *GetExtensibleNodeMethods(const char *name,
75
+ bool missing_ok);
76
+
77
+ /*
78
+ * Flags for custom paths, indicating what capabilities the resulting scan
79
+ * will have.
80
+ */
81
+ #define CUSTOMPATH_SUPPORT_BACKWARD_SCAN 0x0001
82
+ #define CUSTOMPATH_SUPPORT_MARK_RESTORE 0x0002
83
+
84
+ /*
85
+ * Custom path methods. Mostly, we just need to know how to convert a
86
+ * CustomPath to a plan.
87
+ */
88
+ typedef struct CustomPathMethods
89
+ {
90
+ const char *CustomName;
91
+
92
+ /* Convert Path to a Plan */
93
+ struct Plan *(*PlanCustomPath) (PlannerInfo *root,
94
+ RelOptInfo *rel,
95
+ struct CustomPath *best_path,
96
+ List *tlist,
97
+ List *clauses,
98
+ List *custom_plans);
99
+ struct List *(*ReparameterizeCustomPathByChild) (PlannerInfo *root,
100
+ List *custom_private,
101
+ RelOptInfo *child_rel);
102
+ } CustomPathMethods;
103
+
104
+ /*
105
+ * Custom scan. Here again, there's not much to do: we need to be able to
106
+ * generate a ScanState corresponding to the scan.
107
+ */
108
+ typedef struct CustomScanMethods
109
+ {
110
+ const char *CustomName;
111
+
112
+ /* Create execution state (CustomScanState) from a CustomScan plan node */
113
+ Node *(*CreateCustomScanState) (CustomScan *cscan);
114
+ } CustomScanMethods;
115
+
116
+ /*
117
+ * Execution-time methods for a CustomScanState. This is more complex than
118
+ * what we need for a custom path or scan.
119
+ */
120
+ typedef struct CustomExecMethods
121
+ {
122
+ const char *CustomName;
123
+
124
+ /* Required executor methods */
125
+ void (*BeginCustomScan) (CustomScanState *node,
126
+ EState *estate,
127
+ int eflags);
128
+ TupleTableSlot *(*ExecCustomScan) (CustomScanState *node);
129
+ void (*EndCustomScan) (CustomScanState *node);
130
+ void (*ReScanCustomScan) (CustomScanState *node);
131
+
132
+ /* Optional methods: needed if mark/restore is supported */
133
+ void (*MarkPosCustomScan) (CustomScanState *node);
134
+ void (*RestrPosCustomScan) (CustomScanState *node);
135
+
136
+ /* Optional methods: needed if parallel execution is supported */
137
+ Size (*EstimateDSMCustomScan) (CustomScanState *node,
138
+ ParallelContext *pcxt);
139
+ void (*InitializeDSMCustomScan) (CustomScanState *node,
140
+ ParallelContext *pcxt,
141
+ void *coordinate);
142
+ void (*ReInitializeDSMCustomScan) (CustomScanState *node,
143
+ ParallelContext *pcxt,
144
+ void *coordinate);
145
+ void (*InitializeWorkerCustomScan) (CustomScanState *node,
146
+ shm_toc *toc,
147
+ void *coordinate);
148
+ void (*ShutdownCustomScan) (CustomScanState *node);
149
+
150
+ /* Optional: print additional information in EXPLAIN */
151
+ void (*ExplainCustomScan) (CustomScanState *node,
152
+ List *ancestors,
153
+ ExplainState *es);
154
+ } CustomExecMethods;
155
+
156
+ extern void RegisterCustomScanMethods(const CustomScanMethods *methods);
157
+ extern const CustomScanMethods *GetCustomScanMethods(const char *CustomName,
158
+ bool missing_ok);
159
+
160
+ #endif /* EXTENSIBLE_H */
@@ -0,0 +1,61 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * lockoptions.h
4
+ * Common header for some locking-related declarations.
5
+ *
6
+ *
7
+ * Copyright (c) 2014-2020, PostgreSQL Global Development Group
8
+ *
9
+ * src/include/nodes/lockoptions.h
10
+ *
11
+ *-------------------------------------------------------------------------
12
+ */
13
+ #ifndef LOCKOPTIONS_H
14
+ #define LOCKOPTIONS_H
15
+
16
+ /*
17
+ * This enum represents the different strengths of FOR UPDATE/SHARE clauses.
18
+ * The ordering here is important, because the highest numerical value takes
19
+ * precedence when a RTE is specified multiple ways. See applyLockingClause.
20
+ */
21
+ typedef enum LockClauseStrength
22
+ {
23
+ LCS_NONE, /* no such clause - only used in PlanRowMark */
24
+ LCS_FORKEYSHARE, /* FOR KEY SHARE */
25
+ LCS_FORSHARE, /* FOR SHARE */
26
+ LCS_FORNOKEYUPDATE, /* FOR NO KEY UPDATE */
27
+ LCS_FORUPDATE /* FOR UPDATE */
28
+ } LockClauseStrength;
29
+
30
+ /*
31
+ * This enum controls how to deal with rows being locked by FOR UPDATE/SHARE
32
+ * clauses (i.e., it represents the NOWAIT and SKIP LOCKED options).
33
+ * The ordering here is important, because the highest numerical value takes
34
+ * precedence when a RTE is specified multiple ways. See applyLockingClause.
35
+ */
36
+ typedef enum LockWaitPolicy
37
+ {
38
+ /* Wait for the lock to become available (default behavior) */
39
+ LockWaitBlock,
40
+ /* Skip rows that can't be locked (SKIP LOCKED) */
41
+ LockWaitSkip,
42
+ /* Raise an error if a row cannot be locked (NOWAIT) */
43
+ LockWaitError
44
+ } LockWaitPolicy;
45
+
46
+ /*
47
+ * Possible lock modes for a tuple.
48
+ */
49
+ typedef enum LockTupleMode
50
+ {
51
+ /* SELECT FOR KEY SHARE */
52
+ LockTupleKeyShare,
53
+ /* SELECT FOR SHARE */
54
+ LockTupleShare,
55
+ /* SELECT FOR NO KEY UPDATE, and UPDATEs that don't modify key columns */
56
+ LockTupleNoKeyExclusive,
57
+ /* SELECT FOR UPDATE, UPDATEs that modify key columns, and DELETE */
58
+ LockTupleExclusive
59
+ } LockTupleMode;
60
+
61
+ #endif /* LOCKOPTIONS_H */
@@ -0,0 +1,108 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * makefuncs.h
4
+ * prototypes for the creator functions of various nodes
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/nodes/makefuncs.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef MAKEFUNC_H
15
+ #define MAKEFUNC_H
16
+
17
+ #include "nodes/execnodes.h"
18
+ #include "nodes/parsenodes.h"
19
+
20
+
21
+ extern A_Expr *makeA_Expr(A_Expr_Kind kind, List *name,
22
+ Node *lexpr, Node *rexpr, int location);
23
+
24
+ extern A_Expr *makeSimpleA_Expr(A_Expr_Kind kind, char *name,
25
+ Node *lexpr, Node *rexpr, int location);
26
+
27
+ extern Var *makeVar(Index varno,
28
+ AttrNumber varattno,
29
+ Oid vartype,
30
+ int32 vartypmod,
31
+ Oid varcollid,
32
+ Index varlevelsup);
33
+
34
+ extern Var *makeVarFromTargetEntry(Index varno,
35
+ TargetEntry *tle);
36
+
37
+ extern Var *makeWholeRowVar(RangeTblEntry *rte,
38
+ Index varno,
39
+ Index varlevelsup,
40
+ bool allowScalar);
41
+
42
+ extern TargetEntry *makeTargetEntry(Expr *expr,
43
+ AttrNumber resno,
44
+ char *resname,
45
+ bool resjunk);
46
+
47
+ extern TargetEntry *flatCopyTargetEntry(TargetEntry *src_tle);
48
+
49
+ extern FromExpr *makeFromExpr(List *fromlist, Node *quals);
50
+
51
+ extern Const *makeConst(Oid consttype,
52
+ int32 consttypmod,
53
+ Oid constcollid,
54
+ int constlen,
55
+ Datum constvalue,
56
+ bool constisnull,
57
+ bool constbyval);
58
+
59
+ extern Const *makeNullConst(Oid consttype, int32 consttypmod, Oid constcollid);
60
+
61
+ extern Node *makeBoolConst(bool value, bool isnull);
62
+
63
+ extern Expr *makeBoolExpr(BoolExprType boolop, List *args, int location);
64
+
65
+ extern Alias *makeAlias(const char *aliasname, List *colnames);
66
+
67
+ extern RelabelType *makeRelabelType(Expr *arg, Oid rtype, int32 rtypmod,
68
+ Oid rcollid, CoercionForm rformat);
69
+
70
+ extern RangeVar *makeRangeVar(char *schemaname, char *relname, int location);
71
+
72
+ extern TypeName *makeTypeName(char *typnam);
73
+ extern TypeName *makeTypeNameFromNameList(List *names);
74
+ extern TypeName *makeTypeNameFromOid(Oid typeOid, int32 typmod);
75
+
76
+ extern ColumnDef *makeColumnDef(const char *colname,
77
+ Oid typeOid, int32 typmod, Oid collOid);
78
+
79
+ extern FuncExpr *makeFuncExpr(Oid funcid, Oid rettype, List *args,
80
+ Oid funccollid, Oid inputcollid, CoercionForm fformat);
81
+
82
+ extern FuncCall *makeFuncCall(List *name, List *args, int location);
83
+
84
+ extern Expr *make_opclause(Oid opno, Oid opresulttype, bool opretset,
85
+ Expr *leftop, Expr *rightop,
86
+ Oid opcollid, Oid inputcollid);
87
+
88
+ extern Expr *make_andclause(List *andclauses);
89
+ extern Expr *make_orclause(List *orclauses);
90
+ extern Expr *make_notclause(Expr *notclause);
91
+
92
+ extern Node *make_and_qual(Node *qual1, Node *qual2);
93
+ extern Expr *make_ands_explicit(List *andclauses);
94
+ extern List *make_ands_implicit(Expr *clause);
95
+
96
+ extern IndexInfo *makeIndexInfo(int numattrs, int numkeyattrs, Oid amoid,
97
+ List *expressions, List *predicates,
98
+ bool unique, bool isready, bool concurrent);
99
+
100
+ extern DefElem *makeDefElem(char *name, Node *arg, int location);
101
+ extern DefElem *makeDefElemExtended(char *nameSpace, char *name, Node *arg,
102
+ DefElemAction defaction, int location);
103
+
104
+ extern GroupingSet *makeGroupingSet(GroupingSetKind kind, List *content, int location);
105
+
106
+ extern VacuumRelation *makeVacuumRelation(RangeVar *relation, Oid oid, List *va_cols);
107
+
108
+ #endif /* MAKEFUNC_H */
@@ -0,0 +1,108 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * memnodes.h
4
+ * POSTGRES memory context node 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/nodes/memnodes.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef MEMNODES_H
15
+ #define MEMNODES_H
16
+
17
+ #include "nodes/nodes.h"
18
+
19
+ /*
20
+ * MemoryContextCounters
21
+ * Summarization state for MemoryContextStats collection.
22
+ *
23
+ * The set of counters in this struct is biased towards AllocSet; if we ever
24
+ * add any context types that are based on fundamentally different approaches,
25
+ * we might need more or different counters here. A possible API spec then
26
+ * would be to print only nonzero counters, but for now we just summarize in
27
+ * the format historically used by AllocSet.
28
+ */
29
+ typedef struct MemoryContextCounters
30
+ {
31
+ Size nblocks; /* Total number of malloc blocks */
32
+ Size freechunks; /* Total number of free chunks */
33
+ Size totalspace; /* Total bytes requested from malloc */
34
+ Size freespace; /* The unused portion of totalspace */
35
+ } MemoryContextCounters;
36
+
37
+ /*
38
+ * MemoryContext
39
+ * A logical context in which memory allocations occur.
40
+ *
41
+ * MemoryContext itself is an abstract type that can have multiple
42
+ * implementations.
43
+ * The function pointers in MemoryContextMethods define one specific
44
+ * implementation of MemoryContext --- they are a virtual function table
45
+ * in C++ terms.
46
+ *
47
+ * Node types that are actual implementations of memory contexts must
48
+ * begin with the same fields as MemoryContextData.
49
+ *
50
+ * Note: for largely historical reasons, typedef MemoryContext is a pointer
51
+ * to the context struct rather than the struct type itself.
52
+ */
53
+
54
+ typedef void (*MemoryStatsPrintFunc) (MemoryContext context, void *passthru,
55
+ const char *stats_string);
56
+
57
+ typedef struct MemoryContextMethods
58
+ {
59
+ void *(*alloc) (MemoryContext context, Size size);
60
+ /* call this free_p in case someone #define's free() */
61
+ void (*free_p) (MemoryContext context, void *pointer);
62
+ void *(*realloc) (MemoryContext context, void *pointer, Size size);
63
+ void (*reset) (MemoryContext context);
64
+ void (*delete_context) (MemoryContext context);
65
+ Size (*get_chunk_space) (MemoryContext context, void *pointer);
66
+ bool (*is_empty) (MemoryContext context);
67
+ void (*stats) (MemoryContext context,
68
+ MemoryStatsPrintFunc printfunc, void *passthru,
69
+ MemoryContextCounters *totals);
70
+ #ifdef MEMORY_CONTEXT_CHECKING
71
+ void (*check) (MemoryContext context);
72
+ #endif
73
+ } MemoryContextMethods;
74
+
75
+
76
+ typedef struct MemoryContextData
77
+ {
78
+ NodeTag type; /* identifies exact kind of context */
79
+ /* these two fields are placed here to minimize alignment wastage: */
80
+ bool isReset; /* T = no space alloced since last reset */
81
+ bool allowInCritSection; /* allow palloc in critical section */
82
+ Size mem_allocated; /* track memory allocated for this context */
83
+ const MemoryContextMethods *methods; /* virtual function table */
84
+ MemoryContext parent; /* NULL if no parent (toplevel context) */
85
+ MemoryContext firstchild; /* head of linked list of children */
86
+ MemoryContext prevchild; /* previous child of same parent */
87
+ MemoryContext nextchild; /* next child of same parent */
88
+ const char *name; /* context name (just for debugging) */
89
+ const char *ident; /* context ID if any (just for debugging) */
90
+ MemoryContextCallback *reset_cbs; /* list of reset/delete callbacks */
91
+ } MemoryContextData;
92
+
93
+ /* utils/palloc.h contains typedef struct MemoryContextData *MemoryContext */
94
+
95
+
96
+ /*
97
+ * MemoryContextIsValid
98
+ * True iff memory context is valid.
99
+ *
100
+ * Add new context types to the set accepted by this macro.
101
+ */
102
+ #define MemoryContextIsValid(context) \
103
+ ((context) != NULL && \
104
+ (IsA((context), AllocSetContext) || \
105
+ IsA((context), SlabContext) || \
106
+ IsA((context), GenerationContext)))
107
+
108
+ #endif /* MEMNODES_H */
@@ -0,0 +1,162 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * nodeFuncs.h
4
+ * Various general-purpose manipulations of Node trees
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/nodes/nodeFuncs.h
10
+ *
11
+ *-------------------------------------------------------------------------
12
+ */
13
+ #ifndef NODEFUNCS_H
14
+ #define NODEFUNCS_H
15
+
16
+ #include "nodes/parsenodes.h"
17
+
18
+
19
+ /* flags bits for query_tree_walker and query_tree_mutator */
20
+ #define QTW_IGNORE_RT_SUBQUERIES 0x01 /* subqueries in rtable */
21
+ #define QTW_IGNORE_CTE_SUBQUERIES 0x02 /* subqueries in cteList */
22
+ #define QTW_IGNORE_RC_SUBQUERIES 0x03 /* both of above */
23
+ #define QTW_IGNORE_JOINALIASES 0x04 /* JOIN alias var lists */
24
+ #define QTW_IGNORE_RANGE_TABLE 0x08 /* skip rangetable entirely */
25
+ #define QTW_EXAMINE_RTES_BEFORE 0x10 /* examine RTE nodes before their
26
+ * contents */
27
+ #define QTW_EXAMINE_RTES_AFTER 0x20 /* examine RTE nodes after their
28
+ * contents */
29
+ #define QTW_DONT_COPY_QUERY 0x40 /* do not copy top Query */
30
+ #define QTW_EXAMINE_SORTGROUP 0x80 /* include SortGroupNode lists */
31
+
32
+ /* callback function for check_functions_in_node */
33
+ typedef bool (*check_function_callback) (Oid func_id, void *context);
34
+
35
+
36
+ extern Oid exprType(const Node *expr);
37
+ extern int32 exprTypmod(const Node *expr);
38
+ extern bool exprIsLengthCoercion(const Node *expr, int32 *coercedTypmod);
39
+ extern Node *applyRelabelType(Node *arg, Oid rtype, int32 rtypmod, Oid rcollid,
40
+ CoercionForm rformat, int rlocation,
41
+ bool overwrite_ok);
42
+ extern Node *relabel_to_typmod(Node *expr, int32 typmod);
43
+ extern Node *strip_implicit_coercions(Node *node);
44
+ extern bool expression_returns_set(Node *clause);
45
+
46
+ extern Oid exprCollation(const Node *expr);
47
+ extern Oid exprInputCollation(const Node *expr);
48
+ extern void exprSetCollation(Node *expr, Oid collation);
49
+ extern void exprSetInputCollation(Node *expr, Oid inputcollation);
50
+
51
+ extern int exprLocation(const Node *expr);
52
+
53
+ extern void fix_opfuncids(Node *node);
54
+ extern void set_opfuncid(OpExpr *opexpr);
55
+ extern void set_sa_opfuncid(ScalarArrayOpExpr *opexpr);
56
+
57
+ /* Is clause a FuncExpr clause? */
58
+ static inline bool
59
+ is_funcclause(const void *clause)
60
+ {
61
+ return clause != NULL && IsA(clause, FuncExpr);
62
+ }
63
+
64
+ /* Is clause an OpExpr clause? */
65
+ static inline bool
66
+ is_opclause(const void *clause)
67
+ {
68
+ return clause != NULL && IsA(clause, OpExpr);
69
+ }
70
+
71
+ /* Extract left arg of a binary opclause, or only arg of a unary opclause */
72
+ static inline Node *
73
+ get_leftop(const void *clause)
74
+ {
75
+ const OpExpr *expr = (const OpExpr *) clause;
76
+
77
+ if (expr->args != NIL)
78
+ return (Node *) linitial(expr->args);
79
+ else
80
+ return NULL;
81
+ }
82
+
83
+ /* Extract right arg of a binary opclause (NULL if it's a unary opclause) */
84
+ static inline Node *
85
+ get_rightop(const void *clause)
86
+ {
87
+ const OpExpr *expr = (const OpExpr *) clause;
88
+
89
+ if (list_length(expr->args) >= 2)
90
+ return (Node *) lsecond(expr->args);
91
+ else
92
+ return NULL;
93
+ }
94
+
95
+ /* Is clause an AND clause? */
96
+ static inline bool
97
+ is_andclause(const void *clause)
98
+ {
99
+ return (clause != NULL &&
100
+ IsA(clause, BoolExpr) &&
101
+ ((const BoolExpr *) clause)->boolop == AND_EXPR);
102
+ }
103
+
104
+ /* Is clause an OR clause? */
105
+ static inline bool
106
+ is_orclause(const void *clause)
107
+ {
108
+ return (clause != NULL &&
109
+ IsA(clause, BoolExpr) &&
110
+ ((const BoolExpr *) clause)->boolop == OR_EXPR);
111
+ }
112
+
113
+ /* Is clause a NOT clause? */
114
+ static inline bool
115
+ is_notclause(const void *clause)
116
+ {
117
+ return (clause != NULL &&
118
+ IsA(clause, BoolExpr) &&
119
+ ((const BoolExpr *) clause)->boolop == NOT_EXPR);
120
+ }
121
+
122
+ /* Extract argument from a clause known to be a NOT clause */
123
+ static inline Expr *
124
+ get_notclausearg(const void *notclause)
125
+ {
126
+ return (Expr *) linitial(((const BoolExpr *) notclause)->args);
127
+ }
128
+
129
+ extern bool check_functions_in_node(Node *node, check_function_callback checker,
130
+ void *context);
131
+
132
+ extern bool expression_tree_walker(Node *node, bool (*walker) (),
133
+ void *context);
134
+ extern Node *expression_tree_mutator(Node *node, Node *(*mutator) (),
135
+ void *context);
136
+
137
+ extern bool query_tree_walker(Query *query, bool (*walker) (),
138
+ void *context, int flags);
139
+ extern Query *query_tree_mutator(Query *query, Node *(*mutator) (),
140
+ void *context, int flags);
141
+
142
+ extern bool range_table_walker(List *rtable, bool (*walker) (),
143
+ void *context, int flags);
144
+ extern List *range_table_mutator(List *rtable, Node *(*mutator) (),
145
+ void *context, int flags);
146
+
147
+ extern bool range_table_entry_walker(RangeTblEntry *rte, bool (*walker) (),
148
+ void *context, int flags);
149
+
150
+ extern bool query_or_expression_tree_walker(Node *node, bool (*walker) (),
151
+ void *context, int flags);
152
+ extern Node *query_or_expression_tree_mutator(Node *node, Node *(*mutator) (),
153
+ void *context, int flags);
154
+
155
+ extern bool raw_expression_tree_walker(Node *node, bool (*walker) (),
156
+ void *context);
157
+
158
+ struct PlanState;
159
+ extern bool planstate_tree_walker(struct PlanState *planstate, bool (*walker) (),
160
+ void *context);
161
+
162
+ #endif /* NODEFUNCS_H */