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,68 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * parse_agg.h
4
+ * handle aggregates and window functions in parser
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/parser/parse_agg.h
10
+ *
11
+ *-------------------------------------------------------------------------
12
+ */
13
+ #ifndef PARSE_AGG_H
14
+ #define PARSE_AGG_H
15
+
16
+ #include "parser/parse_node.h"
17
+
18
+ extern void transformAggregateCall(ParseState *pstate, Aggref *agg,
19
+ List *args, List *aggorder,
20
+ bool agg_distinct);
21
+
22
+ extern Node *transformGroupingFunc(ParseState *pstate, GroupingFunc *g);
23
+
24
+ extern void transformWindowFuncCall(ParseState *pstate, WindowFunc *wfunc,
25
+ WindowDef *windef);
26
+
27
+ extern void parseCheckAggregates(ParseState *pstate, Query *qry);
28
+
29
+ extern List *expand_grouping_sets(List *groupingSets, int limit);
30
+
31
+ extern int get_aggregate_argtypes(Aggref *aggref, Oid *inputTypes);
32
+
33
+ extern Oid resolve_aggregate_transtype(Oid aggfuncid,
34
+ Oid aggtranstype,
35
+ Oid *inputTypes,
36
+ int numArguments);
37
+
38
+ extern void build_aggregate_transfn_expr(Oid *agg_input_types,
39
+ int agg_num_inputs,
40
+ int agg_num_direct_inputs,
41
+ bool agg_variadic,
42
+ Oid agg_state_type,
43
+ Oid agg_input_collation,
44
+ Oid transfn_oid,
45
+ Oid invtransfn_oid,
46
+ Expr **transfnexpr,
47
+ Expr **invtransfnexpr);
48
+
49
+ extern void build_aggregate_combinefn_expr(Oid agg_state_type,
50
+ Oid agg_input_collation,
51
+ Oid combinefn_oid,
52
+ Expr **combinefnexpr);
53
+
54
+ extern void build_aggregate_serialfn_expr(Oid serialfn_oid,
55
+ Expr **serialfnexpr);
56
+
57
+ extern void build_aggregate_deserialfn_expr(Oid deserialfn_oid,
58
+ Expr **deserialfnexpr);
59
+
60
+ extern void build_aggregate_finalfn_expr(Oid *agg_input_types,
61
+ int num_finalfn_inputs,
62
+ Oid agg_state_type,
63
+ Oid agg_result_type,
64
+ Oid agg_input_collation,
65
+ Oid finalfn_oid,
66
+ Expr **finalfnexpr);
67
+
68
+ #endif /* PARSE_AGG_H */
@@ -0,0 +1,54 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * parse_clause.h
4
+ * handle clauses in parser
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/parser/parse_clause.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef PARSE_CLAUSE_H
15
+ #define PARSE_CLAUSE_H
16
+
17
+ #include "parser/parse_node.h"
18
+
19
+ extern void transformFromClause(ParseState *pstate, List *frmList);
20
+ extern int setTargetTable(ParseState *pstate, RangeVar *relation,
21
+ bool inh, bool alsoSource, AclMode requiredPerms);
22
+
23
+ extern Node *transformWhereClause(ParseState *pstate, Node *clause,
24
+ ParseExprKind exprKind, const char *constructName);
25
+ extern Node *transformLimitClause(ParseState *pstate, Node *clause,
26
+ ParseExprKind exprKind, const char *constructName,
27
+ LimitOption limitOption);
28
+ extern List *transformGroupClause(ParseState *pstate, List *grouplist,
29
+ List **groupingSets,
30
+ List **targetlist, List *sortClause,
31
+ ParseExprKind exprKind, bool useSQL99);
32
+ extern List *transformSortClause(ParseState *pstate, List *orderlist,
33
+ List **targetlist, ParseExprKind exprKind,
34
+ bool useSQL99);
35
+
36
+ extern List *transformWindowDefinitions(ParseState *pstate,
37
+ List *windowdefs,
38
+ List **targetlist);
39
+
40
+ extern List *transformDistinctClause(ParseState *pstate,
41
+ List **targetlist, List *sortClause, bool is_agg);
42
+ extern List *transformDistinctOnClause(ParseState *pstate, List *distinctlist,
43
+ List **targetlist, List *sortClause);
44
+ extern void transformOnConflictArbiter(ParseState *pstate,
45
+ OnConflictClause *onConflictClause,
46
+ List **arbiterExpr, Node **arbiterWhere,
47
+ Oid *constraint);
48
+
49
+ extern List *addTargetToSortList(ParseState *pstate, TargetEntry *tle,
50
+ List *sortlist, List *targetlist, SortBy *sortby);
51
+ extern Index assignSortGroupRef(TargetEntry *tle, List *tlist);
52
+ extern bool targetIsInSortList(TargetEntry *tle, Oid sortop, List *sortList);
53
+
54
+ #endif /* PARSE_CLAUSE_H */
@@ -0,0 +1,97 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * parse_coerce.h
4
+ * Routines for type coercion.
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/parser/parse_coerce.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef PARSE_COERCE_H
15
+ #define PARSE_COERCE_H
16
+
17
+ #include "parser/parse_node.h"
18
+
19
+
20
+ /* Type categories (see TYPCATEGORY_xxx symbols in catalog/pg_type.h) */
21
+ typedef char TYPCATEGORY;
22
+
23
+ /* Result codes for find_coercion_pathway */
24
+ typedef enum CoercionPathType
25
+ {
26
+ COERCION_PATH_NONE, /* failed to find any coercion pathway */
27
+ COERCION_PATH_FUNC, /* apply the specified coercion function */
28
+ COERCION_PATH_RELABELTYPE, /* binary-compatible cast, no function */
29
+ COERCION_PATH_ARRAYCOERCE, /* need an ArrayCoerceExpr node */
30
+ COERCION_PATH_COERCEVIAIO /* need a CoerceViaIO node */
31
+ } CoercionPathType;
32
+
33
+
34
+ extern bool IsBinaryCoercible(Oid srctype, Oid targettype);
35
+ extern bool IsPreferredType(TYPCATEGORY category, Oid type);
36
+ extern TYPCATEGORY TypeCategory(Oid type);
37
+
38
+ extern Node *coerce_to_target_type(ParseState *pstate,
39
+ Node *expr, Oid exprtype,
40
+ Oid targettype, int32 targettypmod,
41
+ CoercionContext ccontext,
42
+ CoercionForm cformat,
43
+ int location);
44
+ extern bool can_coerce_type(int nargs, const Oid *input_typeids, const Oid *target_typeids,
45
+ CoercionContext ccontext);
46
+ extern Node *coerce_type(ParseState *pstate, Node *node,
47
+ Oid inputTypeId, Oid targetTypeId, int32 targetTypeMod,
48
+ CoercionContext ccontext, CoercionForm cformat, int location);
49
+ extern Node *coerce_to_domain(Node *arg, Oid baseTypeId, int32 baseTypeMod,
50
+ Oid typeId,
51
+ CoercionContext ccontext, CoercionForm cformat, int location,
52
+ bool hideInputCoercion);
53
+
54
+ extern Node *coerce_to_boolean(ParseState *pstate, Node *node,
55
+ const char *constructName);
56
+ extern Node *coerce_to_specific_type(ParseState *pstate, Node *node,
57
+ Oid targetTypeId,
58
+ const char *constructName);
59
+
60
+ extern Node *coerce_to_specific_type_typmod(ParseState *pstate, Node *node,
61
+ Oid targetTypeId, int32 targetTypmod,
62
+ const char *constructName);
63
+
64
+ extern int parser_coercion_errposition(ParseState *pstate,
65
+ int coerce_location,
66
+ Node *input_expr);
67
+
68
+ extern Oid select_common_type(ParseState *pstate, List *exprs,
69
+ const char *context, Node **which_expr);
70
+ extern Node *coerce_to_common_type(ParseState *pstate, Node *node,
71
+ Oid targetTypeId,
72
+ const char *context);
73
+
74
+ extern bool check_generic_type_consistency(const Oid *actual_arg_types,
75
+ const Oid *declared_arg_types,
76
+ int nargs);
77
+ extern Oid enforce_generic_type_consistency(const Oid *actual_arg_types,
78
+ Oid *declared_arg_types,
79
+ int nargs,
80
+ Oid rettype,
81
+ bool allow_poly);
82
+
83
+ extern char *check_valid_polymorphic_signature(Oid ret_type,
84
+ const Oid *declared_arg_types,
85
+ int nargs);
86
+ extern char *check_valid_internal_signature(Oid ret_type,
87
+ const Oid *declared_arg_types,
88
+ int nargs);
89
+
90
+ extern CoercionPathType find_coercion_pathway(Oid targetTypeId,
91
+ Oid sourceTypeId,
92
+ CoercionContext ccontext,
93
+ Oid *funcid);
94
+ extern CoercionPathType find_typmod_coercion_function(Oid typeId,
95
+ Oid *funcid);
96
+
97
+ #endif /* PARSE_COERCE_H */
@@ -0,0 +1,27 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * parse_collate.h
4
+ * Routines for assigning collation information.
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/parser/parse_collate.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef PARSE_COLLATE_H
15
+ #define PARSE_COLLATE_H
16
+
17
+ #include "parser/parse_node.h"
18
+
19
+ extern void assign_query_collations(ParseState *pstate, Query *query);
20
+
21
+ extern void assign_list_collations(ParseState *pstate, List *exprs);
22
+
23
+ extern void assign_expr_collations(ParseState *pstate, Node *expr);
24
+
25
+ extern Oid select_common_collation(ParseState *pstate, List *exprs, bool none_ok);
26
+
27
+ #endif /* PARSE_COLLATE_H */
@@ -0,0 +1,26 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * parse_expr.h
4
+ * handle expressions in parser
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/parser/parse_expr.h
10
+ *
11
+ *-------------------------------------------------------------------------
12
+ */
13
+ #ifndef PARSE_EXPR_H
14
+ #define PARSE_EXPR_H
15
+
16
+ #include "parser/parse_node.h"
17
+
18
+ /* GUC parameters */
19
+ extern __thread bool operator_precedence_warning;
20
+ extern bool Transform_null_equals;
21
+
22
+ extern Node *transformExpr(ParseState *pstate, Node *expr, ParseExprKind exprKind);
23
+
24
+ extern const char *ParseExprKindName(ParseExprKind exprKind);
25
+
26
+ #endif /* PARSE_EXPR_H */
@@ -0,0 +1,73 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * parse_func.h
4
+ *
5
+ *
6
+ *
7
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
8
+ * Portions Copyright (c) 1994, Regents of the University of California
9
+ *
10
+ * src/include/parser/parse_func.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef PARSE_FUNC_H
15
+ #define PARSE_FUNC_H
16
+
17
+ #include "catalog/namespace.h"
18
+ #include "parser/parse_node.h"
19
+
20
+
21
+ /* Result codes for func_get_detail */
22
+ typedef enum
23
+ {
24
+ FUNCDETAIL_NOTFOUND, /* no matching function */
25
+ FUNCDETAIL_MULTIPLE, /* too many matching functions */
26
+ FUNCDETAIL_NORMAL, /* found a matching regular function */
27
+ FUNCDETAIL_PROCEDURE, /* found a matching procedure */
28
+ FUNCDETAIL_AGGREGATE, /* found a matching aggregate function */
29
+ FUNCDETAIL_WINDOWFUNC, /* found a matching window function */
30
+ FUNCDETAIL_COERCION /* it's a type coercion request */
31
+ } FuncDetailCode;
32
+
33
+
34
+ extern Node *ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs,
35
+ Node *last_srf, FuncCall *fn, bool proc_call,
36
+ int location);
37
+
38
+ extern FuncDetailCode func_get_detail(List *funcname,
39
+ List *fargs, List *fargnames,
40
+ int nargs, Oid *argtypes,
41
+ bool expand_variadic, bool expand_defaults,
42
+ Oid *funcid, Oid *rettype,
43
+ bool *retset, int *nvargs, Oid *vatype,
44
+ Oid **true_typeids, List **argdefaults);
45
+
46
+ extern int func_match_argtypes(int nargs,
47
+ Oid *input_typeids,
48
+ FuncCandidateList raw_candidates,
49
+ FuncCandidateList *candidates);
50
+
51
+ extern FuncCandidateList func_select_candidate(int nargs,
52
+ Oid *input_typeids,
53
+ FuncCandidateList candidates);
54
+
55
+ extern void make_fn_arguments(ParseState *pstate,
56
+ List *fargs,
57
+ Oid *actual_arg_types,
58
+ Oid *declared_arg_types);
59
+
60
+ extern const char *funcname_signature_string(const char *funcname, int nargs,
61
+ List *argnames, const Oid *argtypes);
62
+ extern const char *func_signature_string(List *funcname, int nargs,
63
+ List *argnames, const Oid *argtypes);
64
+
65
+ extern Oid LookupFuncName(List *funcname, int nargs, const Oid *argtypes,
66
+ bool missing_ok);
67
+ extern Oid LookupFuncWithArgs(ObjectType objtype, ObjectWithArgs *func,
68
+ bool missing_ok);
69
+
70
+ extern void check_srf_call_placement(ParseState *pstate, Node *last_srf,
71
+ int location);
72
+
73
+ #endif /* PARSE_FUNC_H */
@@ -0,0 +1,327 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * parse_node.h
4
+ * Internal definitions for parser
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/parser/parse_node.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef PARSE_NODE_H
15
+ #define PARSE_NODE_H
16
+
17
+ #include "nodes/parsenodes.h"
18
+ #include "utils/queryenvironment.h"
19
+ #include "utils/relcache.h"
20
+
21
+
22
+ /* Forward references for some structs declared below */
23
+ typedef struct ParseState ParseState;
24
+ typedef struct ParseNamespaceItem ParseNamespaceItem;
25
+ typedef struct ParseNamespaceColumn ParseNamespaceColumn;
26
+
27
+ /*
28
+ * Expression kinds distinguished by transformExpr(). Many of these are not
29
+ * semantically distinct so far as expression transformation goes; rather,
30
+ * we distinguish them so that context-specific error messages can be printed.
31
+ *
32
+ * Note: EXPR_KIND_OTHER is not used in the core code, but is left for use
33
+ * by extension code that might need to call transformExpr(). The core code
34
+ * will not enforce any context-driven restrictions on EXPR_KIND_OTHER
35
+ * expressions, so the caller would have to check for sub-selects, aggregates,
36
+ * window functions, SRFs, etc if those need to be disallowed.
37
+ */
38
+ typedef enum ParseExprKind
39
+ {
40
+ EXPR_KIND_NONE = 0, /* "not in an expression" */
41
+ EXPR_KIND_OTHER, /* reserved for extensions */
42
+ EXPR_KIND_JOIN_ON, /* JOIN ON */
43
+ EXPR_KIND_JOIN_USING, /* JOIN USING */
44
+ EXPR_KIND_FROM_SUBSELECT, /* sub-SELECT in FROM clause */
45
+ EXPR_KIND_FROM_FUNCTION, /* function in FROM clause */
46
+ EXPR_KIND_WHERE, /* WHERE */
47
+ EXPR_KIND_HAVING, /* HAVING */
48
+ EXPR_KIND_FILTER, /* FILTER */
49
+ EXPR_KIND_WINDOW_PARTITION, /* window definition PARTITION BY */
50
+ EXPR_KIND_WINDOW_ORDER, /* window definition ORDER BY */
51
+ EXPR_KIND_WINDOW_FRAME_RANGE, /* window frame clause with RANGE */
52
+ EXPR_KIND_WINDOW_FRAME_ROWS, /* window frame clause with ROWS */
53
+ EXPR_KIND_WINDOW_FRAME_GROUPS, /* window frame clause with GROUPS */
54
+ EXPR_KIND_SELECT_TARGET, /* SELECT target list item */
55
+ EXPR_KIND_INSERT_TARGET, /* INSERT target list item */
56
+ EXPR_KIND_UPDATE_SOURCE, /* UPDATE assignment source item */
57
+ EXPR_KIND_UPDATE_TARGET, /* UPDATE assignment target item */
58
+ EXPR_KIND_GROUP_BY, /* GROUP BY */
59
+ EXPR_KIND_ORDER_BY, /* ORDER BY */
60
+ EXPR_KIND_DISTINCT_ON, /* DISTINCT ON */
61
+ EXPR_KIND_LIMIT, /* LIMIT */
62
+ EXPR_KIND_OFFSET, /* OFFSET */
63
+ EXPR_KIND_RETURNING, /* RETURNING */
64
+ EXPR_KIND_VALUES, /* VALUES */
65
+ EXPR_KIND_VALUES_SINGLE, /* single-row VALUES (in INSERT only) */
66
+ EXPR_KIND_CHECK_CONSTRAINT, /* CHECK constraint for a table */
67
+ EXPR_KIND_DOMAIN_CHECK, /* CHECK constraint for a domain */
68
+ EXPR_KIND_COLUMN_DEFAULT, /* default value for a table column */
69
+ EXPR_KIND_FUNCTION_DEFAULT, /* default parameter value for function */
70
+ EXPR_KIND_INDEX_EXPRESSION, /* index expression */
71
+ EXPR_KIND_INDEX_PREDICATE, /* index predicate */
72
+ EXPR_KIND_ALTER_COL_TRANSFORM, /* transform expr in ALTER COLUMN TYPE */
73
+ EXPR_KIND_EXECUTE_PARAMETER, /* parameter value in EXECUTE */
74
+ EXPR_KIND_TRIGGER_WHEN, /* WHEN condition in CREATE TRIGGER */
75
+ EXPR_KIND_POLICY, /* USING or WITH CHECK expr in policy */
76
+ EXPR_KIND_PARTITION_BOUND, /* partition bound expression */
77
+ EXPR_KIND_PARTITION_EXPRESSION, /* PARTITION BY expression */
78
+ EXPR_KIND_CALL_ARGUMENT, /* procedure argument in CALL */
79
+ EXPR_KIND_COPY_WHERE, /* WHERE condition in COPY FROM */
80
+ EXPR_KIND_GENERATED_COLUMN, /* generation expression for a column */
81
+ } ParseExprKind;
82
+
83
+
84
+ /*
85
+ * Function signatures for parser hooks
86
+ */
87
+ typedef Node *(*PreParseColumnRefHook) (ParseState *pstate, ColumnRef *cref);
88
+ typedef Node *(*PostParseColumnRefHook) (ParseState *pstate, ColumnRef *cref, Node *var);
89
+ typedef Node *(*ParseParamRefHook) (ParseState *pstate, ParamRef *pref);
90
+ typedef Node *(*CoerceParamHook) (ParseState *pstate, Param *param,
91
+ Oid targetTypeId, int32 targetTypeMod,
92
+ int location);
93
+
94
+
95
+ /*
96
+ * State information used during parse analysis
97
+ *
98
+ * parentParseState: NULL in a top-level ParseState. When parsing a subquery,
99
+ * links to current parse state of outer query.
100
+ *
101
+ * p_sourcetext: source string that generated the raw parsetree being
102
+ * analyzed, or NULL if not available. (The string is used only to
103
+ * generate cursor positions in error messages: we need it to convert
104
+ * byte-wise locations in parse structures to character-wise cursor
105
+ * positions.)
106
+ *
107
+ * p_rtable: list of RTEs that will become the rangetable of the query.
108
+ * Note that neither relname nor refname of these entries are necessarily
109
+ * unique; searching the rtable by name is a bad idea.
110
+ *
111
+ * p_joinexprs: list of JoinExpr nodes associated with p_rtable entries.
112
+ * This is one-for-one with p_rtable, but contains NULLs for non-join
113
+ * RTEs, and may be shorter than p_rtable if the last RTE(s) aren't joins.
114
+ *
115
+ * p_joinlist: list of join items (RangeTblRef and JoinExpr nodes) that
116
+ * will become the fromlist of the query's top-level FromExpr node.
117
+ *
118
+ * p_namespace: list of ParseNamespaceItems that represents the current
119
+ * namespace for table and column lookup. (The RTEs listed here may be just
120
+ * a subset of the whole rtable. See ParseNamespaceItem comments below.)
121
+ *
122
+ * p_lateral_active: true if we are currently parsing a LATERAL subexpression
123
+ * of this parse level. This makes p_lateral_only namespace items visible,
124
+ * whereas they are not visible when p_lateral_active is FALSE.
125
+ *
126
+ * p_ctenamespace: list of CommonTableExprs (WITH items) that are visible
127
+ * at the moment. This is entirely different from p_namespace because a CTE
128
+ * is not an RTE, rather "visibility" means you could make an RTE from it.
129
+ *
130
+ * p_future_ctes: list of CommonTableExprs (WITH items) that are not yet
131
+ * visible due to scope rules. This is used to help improve error messages.
132
+ *
133
+ * p_parent_cte: CommonTableExpr that immediately contains the current query,
134
+ * if any.
135
+ *
136
+ * p_target_relation: target relation, if query is INSERT, UPDATE, or DELETE.
137
+ *
138
+ * p_target_nsitem: target relation's ParseNamespaceItem.
139
+ *
140
+ * p_is_insert: true to process assignment expressions like INSERT, false
141
+ * to process them like UPDATE. (Note this can change intra-statement, for
142
+ * cases like INSERT ON CONFLICT UPDATE.)
143
+ *
144
+ * p_windowdefs: list of WindowDefs representing WINDOW and OVER clauses.
145
+ * We collect these while transforming expressions and then transform them
146
+ * afterwards (so that any resjunk tlist items needed for the sort/group
147
+ * clauses end up at the end of the query tlist). A WindowDef's location in
148
+ * this list, counting from 1, is the winref number to use to reference it.
149
+ *
150
+ * p_expr_kind: kind of expression we're currently parsing, as per enum above;
151
+ * EXPR_KIND_NONE when not in an expression.
152
+ *
153
+ * p_next_resno: next TargetEntry.resno to assign, starting from 1.
154
+ *
155
+ * p_multiassign_exprs: partially-processed MultiAssignRef source expressions.
156
+ *
157
+ * p_locking_clause: query's FOR UPDATE/FOR SHARE clause, if any.
158
+ *
159
+ * p_locked_from_parent: true if parent query level applies FOR UPDATE/SHARE
160
+ * to this subquery as a whole.
161
+ *
162
+ * p_resolve_unknowns: resolve unknown-type SELECT output columns as type TEXT
163
+ * (this is true by default).
164
+ *
165
+ * p_hasAggs, p_hasWindowFuncs, etc: true if we've found any of the indicated
166
+ * constructs in the query.
167
+ *
168
+ * p_last_srf: the set-returning FuncExpr or OpExpr most recently found in
169
+ * the query, or NULL if none.
170
+ *
171
+ * p_pre_columnref_hook, etc: optional parser hook functions for modifying the
172
+ * interpretation of ColumnRefs and ParamRefs.
173
+ *
174
+ * p_ref_hook_state: passthrough state for the parser hook functions.
175
+ */
176
+ struct ParseState
177
+ {
178
+ ParseState *parentParseState; /* stack link */
179
+ const char *p_sourcetext; /* source text, or NULL if not available */
180
+ List *p_rtable; /* range table so far */
181
+ List *p_joinexprs; /* JoinExprs for RTE_JOIN p_rtable entries */
182
+ List *p_joinlist; /* join items so far (will become FromExpr
183
+ * node's fromlist) */
184
+ List *p_namespace; /* currently-referenceable RTEs (List of
185
+ * ParseNamespaceItem) */
186
+ bool p_lateral_active; /* p_lateral_only items visible? */
187
+ List *p_ctenamespace; /* current namespace for common table exprs */
188
+ List *p_future_ctes; /* common table exprs not yet in namespace */
189
+ CommonTableExpr *p_parent_cte; /* this query's containing CTE */
190
+ Relation p_target_relation; /* INSERT/UPDATE/DELETE target rel */
191
+ ParseNamespaceItem *p_target_nsitem; /* target rel's NSItem, or NULL */
192
+ bool p_is_insert; /* process assignment like INSERT not UPDATE */
193
+ List *p_windowdefs; /* raw representations of window clauses */
194
+ ParseExprKind p_expr_kind; /* what kind of expression we're parsing */
195
+ int p_next_resno; /* next targetlist resno to assign */
196
+ List *p_multiassign_exprs; /* junk tlist entries for multiassign */
197
+ List *p_locking_clause; /* raw FOR UPDATE/FOR SHARE info */
198
+ bool p_locked_from_parent; /* parent has marked this subquery
199
+ * with FOR UPDATE/FOR SHARE */
200
+ bool p_resolve_unknowns; /* resolve unknown-type SELECT outputs as
201
+ * type text */
202
+
203
+ QueryEnvironment *p_queryEnv; /* curr env, incl refs to enclosing env */
204
+
205
+ /* Flags telling about things found in the query: */
206
+ bool p_hasAggs;
207
+ bool p_hasWindowFuncs;
208
+ bool p_hasTargetSRFs;
209
+ bool p_hasSubLinks;
210
+ bool p_hasModifyingCTE;
211
+
212
+ Node *p_last_srf; /* most recent set-returning func/op found */
213
+
214
+ /*
215
+ * Optional hook functions for parser callbacks. These are null unless
216
+ * set up by the caller of make_parsestate.
217
+ */
218
+ PreParseColumnRefHook p_pre_columnref_hook;
219
+ PostParseColumnRefHook p_post_columnref_hook;
220
+ ParseParamRefHook p_paramref_hook;
221
+ CoerceParamHook p_coerce_param_hook;
222
+ void *p_ref_hook_state; /* common passthrough link for above */
223
+ };
224
+
225
+ /*
226
+ * An element of a namespace list.
227
+ *
228
+ * The p_nscolumns array contains info showing how to construct Vars
229
+ * referencing corresponding elements of the RTE's colnames list.
230
+ *
231
+ * Namespace items with p_rel_visible set define which RTEs are accessible by
232
+ * qualified names, while those with p_cols_visible set define which RTEs are
233
+ * accessible by unqualified names. These sets are different because a JOIN
234
+ * without an alias does not hide the contained tables (so they must be
235
+ * visible for qualified references) but it does hide their columns
236
+ * (unqualified references to the columns refer to the JOIN, not the member
237
+ * tables, so we must not complain that such a reference is ambiguous).
238
+ * Various special RTEs such as NEW/OLD for rules may also appear with only
239
+ * one flag set.
240
+ *
241
+ * While processing the FROM clause, namespace items may appear with
242
+ * p_lateral_only set, meaning they are visible only to LATERAL
243
+ * subexpressions. (The pstate's p_lateral_active flag tells whether we are
244
+ * inside such a subexpression at the moment.) If p_lateral_ok is not set,
245
+ * it's an error to actually use such a namespace item. One might think it
246
+ * would be better to just exclude such items from visibility, but the wording
247
+ * of SQL:2008 requires us to do it this way. We also use p_lateral_ok to
248
+ * forbid LATERAL references to an UPDATE/DELETE target table.
249
+ *
250
+ * At no time should a namespace list contain two entries that conflict
251
+ * according to the rules in checkNameSpaceConflicts; but note that those
252
+ * are more complicated than "must have different alias names", so in practice
253
+ * code searching a namespace list has to check for ambiguous references.
254
+ */
255
+ struct ParseNamespaceItem
256
+ {
257
+ RangeTblEntry *p_rte; /* The relation's rangetable entry */
258
+ int p_rtindex; /* The relation's index in the rangetable */
259
+ /* array of same length as p_rte->eref->colnames: */
260
+ ParseNamespaceColumn *p_nscolumns; /* per-column data */
261
+ bool p_rel_visible; /* Relation name is visible? */
262
+ bool p_cols_visible; /* Column names visible as unqualified refs? */
263
+ bool p_lateral_only; /* Is only visible to LATERAL expressions? */
264
+ bool p_lateral_ok; /* If so, does join type allow use? */
265
+ };
266
+
267
+ /*
268
+ * Data about one column of a ParseNamespaceItem.
269
+ *
270
+ * We track the info needed to construct a Var referencing the column
271
+ * (but only for user-defined columns; system column references and
272
+ * whole-row references are handled separately).
273
+ *
274
+ * p_varno and p_varattno identify the semantic referent, which is a
275
+ * base-relation column unless the reference is to a join USING column that
276
+ * isn't semantically equivalent to either join input column (because it is a
277
+ * FULL join or the input column requires a type coercion). In those cases
278
+ * p_varno and p_varattno refer to the JOIN RTE.
279
+ *
280
+ * p_varnosyn and p_varattnosyn are either identical to p_varno/p_varattno,
281
+ * or they specify the column's position in an aliased JOIN RTE that hides
282
+ * the semantic referent RTE's refname. (That could be either the JOIN RTE
283
+ * in which this ParseNamespaceColumn entry exists, or some lower join level.)
284
+ *
285
+ * If an RTE contains a dropped column, its ParseNamespaceColumn struct
286
+ * is all-zeroes. (Conventionally, test for p_varno == 0 to detect this.)
287
+ */
288
+ struct ParseNamespaceColumn
289
+ {
290
+ Index p_varno; /* rangetable index */
291
+ AttrNumber p_varattno; /* attribute number of the column */
292
+ Oid p_vartype; /* pg_type OID */
293
+ int32 p_vartypmod; /* type modifier value */
294
+ Oid p_varcollid; /* OID of collation, or InvalidOid */
295
+ Index p_varnosyn; /* rangetable index of syntactic referent */
296
+ AttrNumber p_varattnosyn; /* attribute number of syntactic referent */
297
+ };
298
+
299
+ /* Support for parser_errposition_callback function */
300
+ typedef struct ParseCallbackState
301
+ {
302
+ ParseState *pstate;
303
+ int location;
304
+ ErrorContextCallback errcallback;
305
+ } ParseCallbackState;
306
+
307
+
308
+ extern ParseState *make_parsestate(ParseState *parentParseState);
309
+ extern void free_parsestate(ParseState *pstate);
310
+ extern int parser_errposition(ParseState *pstate, int location);
311
+
312
+ extern void setup_parser_errposition_callback(ParseCallbackState *pcbstate,
313
+ ParseState *pstate, int location);
314
+ extern void cancel_parser_errposition_callback(ParseCallbackState *pcbstate);
315
+
316
+ extern Oid transformContainerType(Oid *containerType, int32 *containerTypmod);
317
+
318
+ extern SubscriptingRef *transformContainerSubscripts(ParseState *pstate,
319
+ Node *containerBase,
320
+ Oid containerType,
321
+ Oid elementType,
322
+ int32 containerTypMod,
323
+ List *indirection,
324
+ Node *assignFrom);
325
+ extern Const *make_const(ParseState *pstate, Value *value, int location);
326
+
327
+ #endif /* PARSE_NODE_H */