pg_query 2.1.0 → 4.2.1

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 (472) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +104 -0
  3. data/README.md +59 -31
  4. data/Rakefile +2 -2
  5. data/ext/pg_query/extconf.rb +8 -2
  6. data/ext/pg_query/include/access/amapi.h +45 -1
  7. data/ext/pg_query/include/access/attmap.h +1 -1
  8. data/ext/pg_query/include/access/attnum.h +2 -2
  9. data/ext/pg_query/include/access/clog.h +4 -2
  10. data/ext/pg_query/include/access/commit_ts.h +6 -9
  11. data/ext/pg_query/include/access/detoast.h +1 -11
  12. data/ext/pg_query/include/access/genam.h +15 -12
  13. data/ext/pg_query/include/access/gin.h +2 -2
  14. data/ext/pg_query/include/access/htup.h +1 -1
  15. data/ext/pg_query/include/access/htup_details.h +75 -87
  16. data/ext/pg_query/include/access/itup.h +7 -1
  17. data/ext/pg_query/include/access/parallel.h +2 -2
  18. data/ext/pg_query/include/access/printtup.h +1 -1
  19. data/ext/pg_query/include/access/relation.h +1 -1
  20. data/ext/pg_query/include/access/relscan.h +17 -2
  21. data/ext/pg_query/include/access/rmgr.h +30 -3
  22. data/ext/pg_query/include/access/rmgrlist.h +23 -23
  23. data/ext/pg_query/include/access/sdir.h +1 -1
  24. data/ext/pg_query/include/access/skey.h +1 -1
  25. data/ext/pg_query/include/access/stratnum.h +4 -2
  26. data/ext/pg_query/include/access/sysattr.h +1 -1
  27. data/ext/pg_query/include/access/table.h +2 -1
  28. data/ext/pg_query/include/access/tableam.h +272 -20
  29. data/ext/pg_query/include/access/toast_compression.h +73 -0
  30. data/ext/pg_query/include/access/transam.h +123 -13
  31. data/ext/pg_query/include/access/tupconvert.h +1 -1
  32. data/ext/pg_query/include/access/tupdesc.h +1 -1
  33. data/ext/pg_query/include/access/tupmacs.h +3 -3
  34. data/ext/pg_query/include/access/twophase.h +5 -1
  35. data/ext/pg_query/include/access/xact.h +79 -19
  36. data/ext/pg_query/include/access/xlog.h +60 -155
  37. data/ext/pg_query/include/access/xlog_internal.h +50 -14
  38. data/ext/pg_query/include/access/xlogdefs.h +8 -16
  39. data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
  40. data/ext/pg_query/include/access/xlogreader.h +148 -32
  41. data/ext/pg_query/include/access/xlogrecord.h +18 -9
  42. data/ext/pg_query/include/access/xlogrecovery.h +157 -0
  43. data/ext/pg_query/include/c.h +101 -44
  44. data/ext/pg_query/include/catalog/catalog.h +3 -1
  45. data/ext/pg_query/include/catalog/catversion.h +2 -2
  46. data/ext/pg_query/include/catalog/dependency.h +10 -16
  47. data/ext/pg_query/include/catalog/genbki.h +83 -5
  48. data/ext/pg_query/include/catalog/index.h +18 -3
  49. data/ext/pg_query/include/catalog/indexing.h +12 -324
  50. data/ext/pg_query/include/catalog/namespace.h +4 -2
  51. data/ext/pg_query/include/catalog/objectaccess.h +70 -2
  52. data/ext/pg_query/include/catalog/objectaddress.h +11 -6
  53. data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
  54. data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
  55. data/ext/pg_query/include/catalog/pg_am.h +4 -1
  56. data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
  57. data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
  58. data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
  59. data/ext/pg_query/include/catalog/pg_authid.h +7 -2
  60. data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
  61. data/ext/pg_query/include/catalog/pg_class.h +45 -15
  62. data/ext/pg_query/include/catalog/pg_class_d.h +31 -2
  63. data/ext/pg_query/include/catalog/pg_collation.h +33 -8
  64. data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
  65. data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
  66. data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
  67. data/ext/pg_query/include/catalog/pg_control.h +5 -5
  68. data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
  69. data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
  70. data/ext/pg_query/include/catalog/pg_depend.h +11 -7
  71. data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
  72. data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
  73. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
  74. data/ext/pg_query/include/catalog/pg_index.h +17 -7
  75. data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
  76. data/ext/pg_query/include/catalog/pg_language.h +10 -5
  77. data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
  78. data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
  79. data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
  80. data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
  81. data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
  82. data/ext/pg_query/include/catalog/pg_operator.h +21 -16
  83. data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
  84. data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
  85. data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
  86. data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
  87. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
  88. data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
  89. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
  90. data/ext/pg_query/include/catalog/pg_proc.h +20 -11
  91. data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
  92. data/ext/pg_query/include/catalog/pg_publication.h +50 -4
  93. data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
  94. data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
  95. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
  96. data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
  97. data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
  98. data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
  99. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
  100. data/ext/pg_query/include/catalog/pg_transform.h +8 -5
  101. data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
  102. data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
  103. data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
  104. data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
  105. data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
  106. data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
  107. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
  108. data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
  109. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
  110. data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
  111. data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
  112. data/ext/pg_query/include/catalog/pg_type.h +56 -24
  113. data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
  114. data/ext/pg_query/include/catalog/storage.h +5 -3
  115. data/ext/pg_query/include/commands/async.h +4 -5
  116. data/ext/pg_query/include/commands/dbcommands.h +2 -1
  117. data/ext/pg_query/include/commands/defrem.h +11 -24
  118. data/ext/pg_query/include/commands/event_trigger.h +2 -2
  119. data/ext/pg_query/include/commands/explain.h +1 -1
  120. data/ext/pg_query/include/commands/prepare.h +1 -1
  121. data/ext/pg_query/include/commands/tablespace.h +3 -1
  122. data/ext/pg_query/include/commands/trigger.h +27 -17
  123. data/ext/pg_query/include/commands/user.h +2 -2
  124. data/ext/pg_query/include/commands/vacuum.h +88 -41
  125. data/ext/pg_query/include/commands/variable.h +1 -1
  126. data/ext/pg_query/include/common/file_perm.h +4 -4
  127. data/ext/pg_query/include/common/hashfn.h +1 -1
  128. data/ext/pg_query/include/common/ip.h +1 -7
  129. data/ext/pg_query/include/common/keywords.h +2 -6
  130. data/ext/pg_query/include/common/kwlookup.h +1 -1
  131. data/ext/pg_query/include/common/pg_prng.h +60 -0
  132. data/ext/pg_query/include/common/relpath.h +2 -2
  133. data/ext/pg_query/include/common/string.h +24 -1
  134. data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
  135. data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
  136. data/ext/pg_query/include/datatype/timestamp.h +40 -1
  137. data/ext/pg_query/include/executor/execdesc.h +1 -1
  138. data/ext/pg_query/include/executor/executor.h +65 -22
  139. data/ext/pg_query/include/executor/functions.h +17 -3
  140. data/ext/pg_query/include/executor/instrument.h +33 -16
  141. data/ext/pg_query/include/executor/spi.h +41 -3
  142. data/ext/pg_query/include/executor/tablefunc.h +1 -1
  143. data/ext/pg_query/include/executor/tuptable.h +1 -1
  144. data/ext/pg_query/include/fmgr.h +13 -7
  145. data/ext/pg_query/include/funcapi.h +16 -4
  146. data/ext/pg_query/include/getaddrinfo.h +1 -1
  147. data/ext/pg_query/include/jit/jit.h +11 -11
  148. data/ext/pg_query/include/kwlist_d.h +517 -494
  149. data/ext/pg_query/include/lib/dshash.h +112 -0
  150. data/ext/pg_query/include/lib/ilist.h +20 -1
  151. data/ext/pg_query/include/lib/pairingheap.h +1 -1
  152. data/ext/pg_query/include/lib/simplehash.h +150 -25
  153. data/ext/pg_query/include/lib/sort_template.h +432 -0
  154. data/ext/pg_query/include/lib/stringinfo.h +1 -1
  155. data/ext/pg_query/include/libpq/auth.h +6 -4
  156. data/ext/pg_query/include/libpq/crypt.h +5 -4
  157. data/ext/pg_query/include/libpq/hba.h +43 -4
  158. data/ext/pg_query/include/libpq/libpq-be.h +23 -6
  159. data/ext/pg_query/include/libpq/libpq.h +31 -20
  160. data/ext/pg_query/include/libpq/pqcomm.h +17 -31
  161. data/ext/pg_query/include/libpq/pqformat.h +1 -1
  162. data/ext/pg_query/include/libpq/pqsignal.h +4 -4
  163. data/ext/pg_query/include/mb/pg_wchar.h +106 -23
  164. data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
  165. data/ext/pg_query/include/miscadmin.h +71 -52
  166. data/ext/pg_query/include/nodes/bitmapset.h +1 -1
  167. data/ext/pg_query/include/nodes/execnodes.h +272 -80
  168. data/ext/pg_query/include/nodes/extensible.h +4 -2
  169. data/ext/pg_query/include/nodes/lockoptions.h +1 -1
  170. data/ext/pg_query/include/nodes/makefuncs.h +7 -6
  171. data/ext/pg_query/include/nodes/memnodes.h +5 -3
  172. data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
  173. data/ext/pg_query/include/nodes/nodes.h +30 -11
  174. data/ext/pg_query/include/nodes/params.h +1 -1
  175. data/ext/pg_query/include/nodes/parsenodes.h +327 -94
  176. data/ext/pg_query/include/nodes/pathnodes.h +245 -67
  177. data/ext/pg_query/include/nodes/pg_list.h +75 -68
  178. data/ext/pg_query/include/nodes/plannodes.h +128 -30
  179. data/ext/pg_query/include/nodes/primnodes.h +99 -47
  180. data/ext/pg_query/include/nodes/print.h +1 -1
  181. data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
  182. data/ext/pg_query/include/nodes/value.h +58 -39
  183. data/ext/pg_query/include/optimizer/cost.h +9 -2
  184. data/ext/pg_query/include/optimizer/geqo.h +9 -7
  185. data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
  186. data/ext/pg_query/include/optimizer/optimizer.h +25 -22
  187. data/ext/pg_query/include/optimizer/paths.h +6 -6
  188. data/ext/pg_query/include/optimizer/planmain.h +15 -14
  189. data/ext/pg_query/include/parser/analyze.h +19 -5
  190. data/ext/pg_query/include/parser/gram.h +947 -913
  191. data/ext/pg_query/include/parser/gramparse.h +1 -1
  192. data/ext/pg_query/include/parser/kwlist.h +463 -453
  193. data/ext/pg_query/include/parser/parse_agg.h +2 -7
  194. data/ext/pg_query/include/parser/parse_coerce.h +4 -1
  195. data/ext/pg_query/include/parser/parse_expr.h +2 -3
  196. data/ext/pg_query/include/parser/parse_func.h +2 -1
  197. data/ext/pg_query/include/parser/parse_node.h +21 -9
  198. data/ext/pg_query/include/parser/parse_oper.h +1 -3
  199. data/ext/pg_query/include/parser/parse_relation.h +5 -4
  200. data/ext/pg_query/include/parser/parse_type.h +1 -1
  201. data/ext/pg_query/include/parser/parser.h +31 -4
  202. data/ext/pg_query/include/parser/parsetree.h +1 -1
  203. data/ext/pg_query/include/parser/scanner.h +1 -1
  204. data/ext/pg_query/include/parser/scansup.h +2 -5
  205. data/ext/pg_query/include/partitioning/partdefs.h +1 -1
  206. data/ext/pg_query/include/pg_config.h +94 -46
  207. data/ext/pg_query/include/pg_config_manual.h +74 -21
  208. data/ext/pg_query/include/pg_getopt.h +6 -6
  209. data/ext/pg_query/include/pg_query.h +5 -4
  210. data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
  211. data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
  212. data/ext/pg_query/include/pg_query_fingerprint_defs.c +1220 -422
  213. data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
  214. data/ext/pg_query/include/pg_query_outfuncs_defs.c +152 -26
  215. data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
  216. data/ext/pg_query/include/pg_query_readfuncs_defs.c +174 -30
  217. data/ext/pg_query/include/pg_trace.h +1 -1
  218. data/ext/pg_query/include/pgstat.h +449 -1237
  219. data/ext/pg_query/include/pgtime.h +14 -4
  220. data/ext/pg_query/include/pl_gram.h +126 -128
  221. data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
  222. data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
  223. data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
  224. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
  225. data/ext/pg_query/include/plerrcodes.h +9 -1
  226. data/ext/pg_query/include/plpgsql.h +52 -54
  227. data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
  228. data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
  229. data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
  230. data/ext/pg_query/include/port/atomics/fallback.h +1 -1
  231. data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
  232. data/ext/pg_query/include/port/atomics/generic.h +1 -1
  233. data/ext/pg_query/include/port/atomics.h +1 -1
  234. data/ext/pg_query/include/port/pg_bitutils.h +88 -12
  235. data/ext/pg_query/include/port/pg_bswap.h +1 -1
  236. data/ext/pg_query/include/port/pg_crc32c.h +1 -1
  237. data/ext/pg_query/include/port.h +72 -43
  238. data/ext/pg_query/include/portability/instr_time.h +1 -1
  239. data/ext/pg_query/include/postgres.h +60 -16
  240. data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
  241. data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
  242. data/ext/pg_query/include/postmaster/bgworker.h +2 -1
  243. data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
  244. data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
  245. data/ext/pg_query/include/postmaster/fork_process.h +1 -1
  246. data/ext/pg_query/include/postmaster/interrupt.h +1 -1
  247. data/ext/pg_query/include/postmaster/pgarch.h +42 -8
  248. data/ext/pg_query/include/postmaster/postmaster.h +18 -17
  249. data/ext/pg_query/include/postmaster/startup.h +39 -0
  250. data/ext/pg_query/include/postmaster/syslogger.h +15 -10
  251. data/ext/pg_query/include/postmaster/walwriter.h +3 -3
  252. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1422 -916
  253. data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
  254. data/ext/pg_query/include/regex/regex.h +18 -16
  255. data/ext/pg_query/include/replication/logicallauncher.h +3 -5
  256. data/ext/pg_query/include/replication/logicalproto.h +161 -17
  257. data/ext/pg_query/include/replication/logicalworker.h +1 -1
  258. data/ext/pg_query/include/replication/origin.h +7 -7
  259. data/ext/pg_query/include/replication/reorderbuffer.h +262 -44
  260. data/ext/pg_query/include/replication/slot.h +23 -12
  261. data/ext/pg_query/include/replication/syncrep.h +5 -5
  262. data/ext/pg_query/include/replication/walreceiver.h +145 -13
  263. data/ext/pg_query/include/replication/walsender.h +8 -8
  264. data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
  265. data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
  266. data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
  267. data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
  268. data/ext/pg_query/include/storage/backendid.h +3 -3
  269. data/ext/pg_query/include/storage/block.h +4 -10
  270. data/ext/pg_query/include/storage/buf.h +1 -1
  271. data/ext/pg_query/include/storage/bufmgr.h +19 -14
  272. data/ext/pg_query/include/storage/bufpage.h +6 -8
  273. data/ext/pg_query/include/storage/condition_variable.h +13 -2
  274. data/ext/pg_query/include/storage/dsm.h +4 -1
  275. data/ext/pg_query/include/storage/dsm_impl.h +3 -2
  276. data/ext/pg_query/include/storage/fd.h +33 -3
  277. data/ext/pg_query/include/storage/fileset.h +40 -0
  278. data/ext/pg_query/include/storage/ipc.h +4 -1
  279. data/ext/pg_query/include/storage/item.h +1 -1
  280. data/ext/pg_query/include/storage/itemid.h +1 -1
  281. data/ext/pg_query/include/storage/itemptr.h +3 -1
  282. data/ext/pg_query/include/storage/large_object.h +2 -2
  283. data/ext/pg_query/include/storage/latch.h +9 -13
  284. data/ext/pg_query/include/storage/lmgr.h +2 -1
  285. data/ext/pg_query/include/storage/lock.h +17 -13
  286. data/ext/pg_query/include/storage/lockdefs.h +2 -2
  287. data/ext/pg_query/include/storage/lwlock.h +6 -32
  288. data/ext/pg_query/include/storage/lwlocknames.h +0 -1
  289. data/ext/pg_query/include/storage/off.h +1 -1
  290. data/ext/pg_query/include/storage/pg_sema.h +1 -1
  291. data/ext/pg_query/include/storage/pg_shmem.h +9 -7
  292. data/ext/pg_query/include/storage/pmsignal.h +15 -4
  293. data/ext/pg_query/include/storage/predicate.h +4 -4
  294. data/ext/pg_query/include/storage/proc.h +183 -55
  295. data/ext/pg_query/include/storage/procarray.h +98 -0
  296. data/ext/pg_query/include/storage/proclist_types.h +1 -1
  297. data/ext/pg_query/include/storage/procsignal.h +3 -7
  298. data/ext/pg_query/include/storage/relfilenode.h +1 -1
  299. data/ext/pg_query/include/storage/s_lock.h +67 -4
  300. data/ext/pg_query/include/storage/sharedfileset.h +3 -11
  301. data/ext/pg_query/include/storage/shm_mq.h +5 -4
  302. data/ext/pg_query/include/storage/shm_toc.h +1 -1
  303. data/ext/pg_query/include/storage/shmem.h +1 -1
  304. data/ext/pg_query/include/storage/sinval.h +3 -3
  305. data/ext/pg_query/include/storage/sinvaladt.h +1 -1
  306. data/ext/pg_query/include/storage/smgr.h +10 -8
  307. data/ext/pg_query/include/storage/spin.h +2 -2
  308. data/ext/pg_query/include/storage/standby.h +13 -6
  309. data/ext/pg_query/include/storage/standbydefs.h +2 -2
  310. data/ext/pg_query/include/storage/sync.h +7 -3
  311. data/ext/pg_query/include/tcop/cmdtag.h +1 -1
  312. data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
  313. data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
  314. data/ext/pg_query/include/tcop/dest.h +1 -1
  315. data/ext/pg_query/include/tcop/fastpath.h +1 -2
  316. data/ext/pg_query/include/tcop/pquery.h +7 -1
  317. data/ext/pg_query/include/tcop/tcopprot.h +19 -11
  318. data/ext/pg_query/include/tcop/utility.h +7 -3
  319. data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
  320. data/ext/pg_query/include/utils/acl.h +24 -3
  321. data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
  322. data/ext/pg_query/include/utils/array.h +7 -2
  323. data/ext/pg_query/include/utils/backend_progress.h +44 -0
  324. data/ext/pg_query/include/utils/backend_status.h +321 -0
  325. data/ext/pg_query/include/utils/builtins.h +11 -11
  326. data/ext/pg_query/include/utils/bytea.h +3 -2
  327. data/ext/pg_query/include/utils/catcache.h +1 -1
  328. data/ext/pg_query/include/utils/date.h +1 -1
  329. data/ext/pg_query/include/utils/datetime.h +8 -7
  330. data/ext/pg_query/include/utils/datum.h +9 -1
  331. data/ext/pg_query/include/utils/dsa.h +1 -1
  332. data/ext/pg_query/include/utils/dynahash.h +4 -3
  333. data/ext/pg_query/include/utils/elog.h +52 -21
  334. data/ext/pg_query/include/utils/errcodes.h +2 -0
  335. data/ext/pg_query/include/utils/expandeddatum.h +1 -1
  336. data/ext/pg_query/include/utils/expandedrecord.h +1 -1
  337. data/ext/pg_query/include/utils/float.h +7 -7
  338. data/ext/pg_query/include/utils/fmgroids.h +1300 -696
  339. data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
  340. data/ext/pg_query/include/utils/fmgrtab.h +6 -5
  341. data/ext/pg_query/include/utils/guc.h +69 -43
  342. data/ext/pg_query/include/utils/guc_tables.h +23 -19
  343. data/ext/pg_query/include/utils/hsearch.h +15 -11
  344. data/ext/pg_query/include/utils/inval.h +5 -1
  345. data/ext/pg_query/include/utils/lsyscache.h +11 -1
  346. data/ext/pg_query/include/utils/memdebug.h +1 -1
  347. data/ext/pg_query/include/utils/memutils.h +8 -3
  348. data/ext/pg_query/include/utils/numeric.h +19 -5
  349. data/ext/pg_query/include/utils/palloc.h +25 -3
  350. data/ext/pg_query/include/utils/partcache.h +1 -1
  351. data/ext/pg_query/include/utils/pg_locale.h +17 -9
  352. data/ext/pg_query/include/utils/pg_lsn.h +1 -1
  353. data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
  354. data/ext/pg_query/include/utils/pidfile.h +1 -1
  355. data/ext/pg_query/include/utils/plancache.h +6 -5
  356. data/ext/pg_query/include/utils/portal.h +12 -1
  357. data/ext/pg_query/include/utils/ps_status.h +1 -1
  358. data/ext/pg_query/include/utils/queryenvironment.h +1 -1
  359. data/ext/pg_query/include/utils/queryjumble.h +88 -0
  360. data/ext/pg_query/include/utils/regproc.h +14 -3
  361. data/ext/pg_query/include/utils/rel.h +71 -20
  362. data/ext/pg_query/include/utils/relcache.h +9 -7
  363. data/ext/pg_query/include/utils/reltrigger.h +1 -1
  364. data/ext/pg_query/include/utils/resowner.h +1 -1
  365. data/ext/pg_query/include/utils/rls.h +2 -2
  366. data/ext/pg_query/include/utils/ruleutils.h +4 -1
  367. data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
  368. data/ext/pg_query/include/utils/snapmgr.h +35 -14
  369. data/ext/pg_query/include/utils/snapshot.h +14 -1
  370. data/ext/pg_query/include/utils/sortsupport.h +117 -2
  371. data/ext/pg_query/include/utils/syscache.h +6 -1
  372. data/ext/pg_query/include/utils/timeout.h +11 -4
  373. data/ext/pg_query/include/utils/timestamp.h +6 -5
  374. data/ext/pg_query/include/utils/tuplesort.h +25 -11
  375. data/ext/pg_query/include/utils/tuplestore.h +2 -2
  376. data/ext/pg_query/include/utils/typcache.h +24 -17
  377. data/ext/pg_query/include/utils/tzparser.h +1 -1
  378. data/ext/pg_query/include/utils/varlena.h +5 -3
  379. data/ext/pg_query/include/utils/wait_event.h +289 -0
  380. data/ext/pg_query/include/utils/xml.h +4 -4
  381. data/ext/pg_query/pg_query.pb-c.c +4318 -2307
  382. data/ext/pg_query/pg_query_deparse.c +1114 -381
  383. data/ext/pg_query/pg_query_fingerprint.c +46 -10
  384. data/ext/pg_query/pg_query_fingerprint.h +3 -1
  385. data/ext/pg_query/pg_query_json_plpgsql.c +55 -12
  386. data/ext/pg_query/pg_query_normalize.c +163 -20
  387. data/ext/pg_query/pg_query_outfuncs.h +1 -0
  388. data/ext/pg_query/pg_query_outfuncs_json.c +65 -16
  389. data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
  390. data/ext/pg_query/pg_query_parse.c +1 -1
  391. data/ext/pg_query/pg_query_parse_plpgsql.c +79 -16
  392. data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
  393. data/ext/pg_query/pg_query_ruby.c +1 -1
  394. data/ext/pg_query/pg_query_scan.c +2 -1
  395. data/ext/pg_query/pg_query_split.c +3 -2
  396. data/ext/pg_query/src_backend_catalog_namespace.c +21 -9
  397. data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
  398. data/ext/pg_query/src_backend_commands_define.c +11 -1
  399. data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
  400. data/ext/pg_query/src_backend_nodes_copyfuncs.c +424 -109
  401. data/ext/pg_query/src_backend_nodes_equalfuncs.c +291 -46
  402. data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
  403. data/ext/pg_query/src_backend_nodes_list.c +86 -11
  404. data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
  405. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
  406. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  407. data/ext/pg_query/src_backend_parser_gram.c +33890 -31262
  408. data/ext/pg_query/src_backend_parser_parser.c +26 -7
  409. data/ext/pg_query/src_backend_parser_scan.c +644 -441
  410. data/ext/pg_query/src_backend_parser_scansup.c +4 -28
  411. data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
  412. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  413. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
  414. data/ext/pg_query/src_backend_tcop_postgres.c +73 -24
  415. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  416. data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
  417. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  418. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  419. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +109 -15
  420. data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
  421. data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
  422. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
  423. data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
  424. data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
  425. data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
  426. data/ext/pg_query/src_backend_utils_misc_guc.c +207 -45
  427. data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
  428. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
  429. data/ext/pg_query/src_common_encnames.c +1 -1
  430. data/ext/pg_query/src_common_hashfn.c +3 -3
  431. data/ext/pg_query/src_common_keywords.c +15 -2
  432. data/ext/pg_query/src_common_kwlist_d.h +517 -494
  433. data/ext/pg_query/src_common_kwlookup.c +1 -1
  434. data/ext/pg_query/src_common_pg_prng.c +152 -0
  435. data/ext/pg_query/src_common_psprintf.c +1 -1
  436. data/ext/pg_query/src_common_string.c +7 -1
  437. data/ext/pg_query/src_common_stringinfo.c +1 -1
  438. data/ext/pg_query/src_common_wchar.c +712 -109
  439. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +49 -22
  440. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
  441. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1235 -1261
  442. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  443. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  444. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
  445. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
  446. data/ext/pg_query/src_port_pg_bitutils.c +41 -52
  447. data/ext/pg_query/src_port_pgsleep.c +1 -1
  448. data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
  449. data/ext/pg_query/src_port_qsort.c +12 -224
  450. data/ext/pg_query/src_port_snprintf.c +46 -20
  451. data/ext/pg_query/src_port_strerror.c +9 -19
  452. data/ext/pg_query/src_port_strnlen.c +1 -1
  453. data/lib/pg_query/deparse.rb +7 -1
  454. data/lib/pg_query/filter_columns.rb +6 -4
  455. data/lib/pg_query/fingerprint.rb +18 -3
  456. data/lib/pg_query/node.rb +2 -2
  457. data/lib/pg_query/param_refs.rb +1 -1
  458. data/lib/pg_query/parse.rb +87 -51
  459. data/lib/pg_query/pg_query_pb.rb +1109 -942
  460. data/lib/pg_query/treewalker.rb +6 -0
  461. data/lib/pg_query/truncate.rb +54 -8
  462. data/lib/pg_query/version.rb +1 -1
  463. metadata +29 -18
  464. data/ext/pg_query/include/access/xloginsert.h +0 -64
  465. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  466. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  467. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  468. data/ext/pg_query/include/parser/parse_target.h +0 -46
  469. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -651
  470. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  471. data/ext/pg_query/src_port_erand48.c +0 -127
  472. data/ext/pg_query/src_port_random.c +0 -31
@@ -150,33 +150,93 @@ _outOidList(PgQuery__OidList* out, const List *node)
150
150
  // TODO: Add Bitmapset
151
151
 
152
152
  static void
153
- _outInteger(PgQuery__Integer* out, const Value *node)
153
+ _outInteger(PgQuery__Integer* out, const Integer *node)
154
154
  {
155
- out->ival = node->val.ival;
155
+ out->ival = node->ival;
156
156
  }
157
157
 
158
158
  static void
159
- _outFloat(PgQuery__Float* out, const Value *node)
159
+ _outFloat(PgQuery__Float* out, const Float *node)
160
160
  {
161
- out->str = node->val.str;
161
+ out->fval = node->fval;
162
162
  }
163
163
 
164
164
  static void
165
- _outString(PgQuery__String* out, const Value *node)
165
+ _outBoolean(PgQuery__Boolean* out, const Boolean *node)
166
166
  {
167
- out->str = node->val.str;
167
+ out->boolval = node->boolval;
168
168
  }
169
169
 
170
170
  static void
171
- _outBitString(PgQuery__BitString* out, const Value *node)
171
+ _outString(PgQuery__String* out, const String *node)
172
172
  {
173
- out->str = node->val.str;
173
+ out->sval = node->sval;
174
174
  }
175
175
 
176
176
  static void
177
- _outNull(PgQuery__Null* out, const Value *node)
177
+ _outBitString(PgQuery__BitString* out, const BitString *node)
178
178
  {
179
- // Null has no fields
179
+ out->bsval = node->bsval;
180
+ }
181
+
182
+ static void
183
+ _outAConst(PgQuery__AConst* out, const A_Const *node)
184
+ {
185
+ out->isnull = node->isnull;
186
+ out->location = node->location;
187
+
188
+ if (!node->isnull) {
189
+ switch (nodeTag(&node->val.node)) {
190
+ case T_Integer: {
191
+ PgQuery__Integer *value = palloc(sizeof(PgQuery__Integer));
192
+ pg_query__integer__init(value);
193
+ value->ival = node->val.ival.ival;
194
+
195
+ out->val_case = PG_QUERY__A__CONST__VAL_IVAL;
196
+ out->ival = value;
197
+ break;
198
+ }
199
+ case T_Float: {
200
+ PgQuery__Float *value = palloc(sizeof(PgQuery__Float));
201
+ pg_query__float__init(value);
202
+ value->fval = pstrdup(node->val.fval.fval);
203
+
204
+ out->val_case = PG_QUERY__A__CONST__VAL_FVAL;
205
+ out->fval = value;
206
+ break;
207
+ }
208
+ case T_Boolean: {
209
+ PgQuery__Boolean *value = palloc(sizeof(PgQuery__Boolean));
210
+ pg_query__boolean__init(value);
211
+ value->boolval = node->val.boolval.boolval;
212
+
213
+ out->val_case = PG_QUERY__A__CONST__VAL_BOOLVAL;
214
+ out->boolval = value;
215
+ break;
216
+ }
217
+ case T_String: {
218
+ PgQuery__String *value = palloc(sizeof(PgQuery__String));
219
+ pg_query__string__init(value);
220
+ value->sval = pstrdup(node->val.sval.sval);
221
+
222
+ out->val_case = PG_QUERY__A__CONST__VAL_SVAL;
223
+ out->sval = value;
224
+ break;
225
+ }
226
+ case T_BitString: {
227
+ PgQuery__BitString *value = palloc(sizeof(PgQuery__BitString));
228
+ pg_query__bit_string__init(value);
229
+ value->bsval = pstrdup(node->val.bsval.bsval);
230
+
231
+ out->val_case = PG_QUERY__A__CONST__VAL_BSVAL;
232
+ out->bsval = value;
233
+ break;
234
+ }
235
+ default:
236
+ // Unreachable
237
+ Assert(false);
238
+ }
239
+ }
180
240
  }
181
241
 
182
242
  #include "pg_query_enum_defs.c"
@@ -42,7 +42,7 @@ PgQueryInternalParsetreeAndError pg_query_raw_parse(const char* input)
42
42
 
43
43
  PG_TRY();
44
44
  {
45
- result.tree = raw_parser(input);
45
+ result.tree = raw_parser(input, RAW_PARSE_DEFAULT);
46
46
 
47
47
  #ifndef DEBUG
48
48
  // Save stderr for result
@@ -18,7 +18,7 @@ typedef struct {
18
18
  PgQueryError* error;
19
19
  } PgQueryInternalPlpgsqlFuncAndError;
20
20
 
21
- static PgQueryInternalPlpgsqlFuncAndError pg_query_raw_parse_plpgsql(CreateFunctionStmt* stmt);
21
+ static PgQueryInternalPlpgsqlFuncAndError pg_query_raw_parse_plpgsql(Node* stmt);
22
22
 
23
23
  static void add_dummy_return(PLpgSQL_function *function)
24
24
  {
@@ -73,6 +73,36 @@ static void plpgsql_compile_error_callback(void *arg)
73
73
  plpgsql_error_funcname, plpgsql_latest_lineno());
74
74
  }
75
75
 
76
+ static PLpgSQL_function *compile_do_stmt(DoStmt* stmt)
77
+ {
78
+ char *proc_source = NULL;
79
+ const ListCell *lc;
80
+ char *language = "plpgsql";
81
+
82
+ assert(IsA(stmt, DoStmt));
83
+
84
+ foreach(lc, stmt->args)
85
+ {
86
+ DefElem* elem = (DefElem*) lfirst(lc);
87
+
88
+ if (strcmp(elem->defname, "as") == 0) {
89
+
90
+ assert(IsA(elem->arg, String));
91
+ proc_source = strVal(elem->arg);
92
+ } else if (strcmp(elem->defname, "language") == 0) {
93
+ language = strVal(elem->arg);
94
+ }
95
+ }
96
+
97
+ assert(proc_source != NULL);
98
+
99
+ if(strcmp(language, "plpgsql") != 0) {
100
+ return (PLpgSQL_function *) palloc0(sizeof(PLpgSQL_function));
101
+ }
102
+ return plpgsql_compile_inline(proc_source);
103
+
104
+ }
105
+
76
106
  static PLpgSQL_function *compile_create_function_stmt(CreateFunctionStmt* stmt)
77
107
  {
78
108
  char *func_name;
@@ -87,6 +117,7 @@ static PLpgSQL_function *compile_create_function_stmt(CreateFunctionStmt* stmt)
87
117
  const ListCell *lc, *lc2, *lc3;
88
118
  bool is_trigger = false;
89
119
  bool is_setof = false;
120
+ char *language = "plpgsql";
90
121
 
91
122
  assert(IsA(stmt, CreateFunctionStmt));
92
123
 
@@ -105,10 +136,16 @@ static PLpgSQL_function *compile_create_function_stmt(CreateFunctionStmt* stmt)
105
136
  {
106
137
  proc_source = strVal(lfirst(lc2));
107
138
  }
139
+ } else if (strcmp(elem->defname, "language") == 0) {
140
+ language = strVal(elem->arg);
108
141
  }
109
142
  }
110
143
 
111
- assert(proc_source);
144
+ assert(proc_source != NULL);
145
+
146
+ if(strcmp(language, "plpgsql") != 0) {
147
+ return (PLpgSQL_function *) palloc0(sizeof(PLpgSQL_function));
148
+ }
112
149
 
113
150
  if (stmt->returnType != NULL) {
114
151
  foreach(lc3, stmt->returnType->names)
@@ -179,6 +216,26 @@ static PLpgSQL_function *compile_create_function_stmt(CreateFunctionStmt* stmt)
179
216
  plpgsql_DumpExecTree = false;
180
217
  plpgsql_start_datums();
181
218
 
219
+ /* Setup parameter names */
220
+ foreach(lc, stmt->parameters)
221
+ {
222
+ FunctionParameter *param = lfirst_node(FunctionParameter, lc);
223
+ if (param->name != NULL)
224
+ {
225
+ char buf[32];
226
+ PLpgSQL_type *argdtype;
227
+ PLpgSQL_variable *argvariable;
228
+ PLpgSQL_nsitem_type argitemtype;
229
+ snprintf(buf, sizeof(buf), "$%d", foreach_current_index(lc) + 1);
230
+ argdtype = plpgsql_build_datatype(UNKNOWNOID, -1, InvalidOid, NULL);
231
+ argvariable = plpgsql_build_variable(param->name ? param->name : buf, 0, argdtype, false);
232
+ argitemtype = argvariable->dtype == PLPGSQL_DTYPE_VAR ? PLPGSQL_NSTYPE_VAR : PLPGSQL_NSTYPE_REC;
233
+ plpgsql_ns_additem(argitemtype, argvariable->dno, buf);
234
+ if (param->name != NULL)
235
+ plpgsql_ns_additem(argitemtype, argvariable->dno, param->name);
236
+ }
237
+ }
238
+
182
239
  /* Set up as though in a function returning VOID */
183
240
  function->fn_rettype = VOIDOID;
184
241
  function->fn_retset = is_setof;
@@ -253,7 +310,7 @@ static PLpgSQL_function *compile_create_function_stmt(CreateFunctionStmt* stmt)
253
310
  return function;
254
311
  }
255
312
 
256
- PgQueryInternalPlpgsqlFuncAndError pg_query_raw_parse_plpgsql(CreateFunctionStmt* stmt)
313
+ PgQueryInternalPlpgsqlFuncAndError pg_query_raw_parse_plpgsql(Node* stmt)
257
314
  {
258
315
  PgQueryInternalPlpgsqlFuncAndError result = {0};
259
316
  MemoryContext cctx = CurrentMemoryContext;
@@ -286,7 +343,13 @@ PgQueryInternalPlpgsqlFuncAndError pg_query_raw_parse_plpgsql(CreateFunctionStmt
286
343
 
287
344
  PG_TRY();
288
345
  {
289
- result.func = compile_create_function_stmt(stmt);
346
+ if (IsA(stmt, CreateFunctionStmt)) {
347
+ result.func = compile_create_function_stmt((CreateFunctionStmt *) stmt);
348
+ } else if (IsA(stmt, DoStmt)){
349
+ result.func = compile_do_stmt((DoStmt *) stmt);
350
+ } else {
351
+ elog(ERROR, "Unexpected node type for PL/pgSQL parsing: %d", nodeTag(stmt));
352
+ }
290
353
 
291
354
  #ifndef DEBUG
292
355
  // Save stderr for result
@@ -334,36 +397,36 @@ PgQueryInternalPlpgsqlFuncAndError pg_query_raw_parse_plpgsql(CreateFunctionStmt
334
397
  return result;
335
398
  }
336
399
 
337
- typedef struct createFunctionStmts
400
+ typedef struct plStmts
338
401
  {
339
- CreateFunctionStmt **stmts;
402
+ Node **stmts;
340
403
  int stmts_buf_size;
341
404
  int stmts_count;
342
- } createFunctionStmts;
405
+ } plStmts;
343
406
 
344
- static bool create_function_stmts_walker(Node *node, createFunctionStmts *state)
407
+ static bool stmts_walker(Node *node, plStmts *state)
345
408
  {
346
409
  bool result;
347
410
  MemoryContext ccxt = CurrentMemoryContext;
348
411
 
349
412
  if (node == NULL) return false;
350
413
 
351
- if (IsA(node, CreateFunctionStmt))
414
+ if (IsA(node, CreateFunctionStmt) || IsA(node, DoStmt))
352
415
  {
353
416
  if (state->stmts_count >= state->stmts_buf_size)
354
417
  {
355
418
  state->stmts_buf_size *= 2;
356
- state->stmts = (CreateFunctionStmt**) repalloc(state->stmts, state->stmts_buf_size * sizeof(CreateFunctionStmt*));
419
+ state->stmts = (Node**) repalloc(state->stmts, state->stmts_buf_size * sizeof(Node*));
357
420
  }
358
- state->stmts[state->stmts_count] = (CreateFunctionStmt *) node;
421
+ state->stmts[state->stmts_count] = (Node *) node;
359
422
  state->stmts_count++;
360
423
  } else if (IsA(node, RawStmt)) {
361
- return create_function_stmts_walker((Node *) ((RawStmt *) node)->stmt, state);
424
+ return stmts_walker((Node *) ((RawStmt *) node)->stmt, state);
362
425
  }
363
426
 
364
427
  PG_TRY();
365
428
  {
366
- result = raw_expression_tree_walker(node, create_function_stmts_walker, (void*) state);
429
+ result = raw_expression_tree_walker(node, stmts_walker, (void*) state);
367
430
  }
368
431
  PG_CATCH();
369
432
  {
@@ -381,7 +444,7 @@ PgQueryPlpgsqlParseResult pg_query_parse_plpgsql(const char* input)
381
444
  MemoryContext ctx = NULL;
382
445
  PgQueryPlpgsqlParseResult result = {0};
383
446
  PgQueryInternalParsetreeAndError parse_result;
384
- createFunctionStmts statements;
447
+ plStmts statements;
385
448
  size_t i;
386
449
 
387
450
  ctx = pg_query_enter_memory_context();
@@ -394,10 +457,10 @@ PgQueryPlpgsqlParseResult pg_query_parse_plpgsql(const char* input)
394
457
  }
395
458
 
396
459
  statements.stmts_buf_size = 100;
397
- statements.stmts = (CreateFunctionStmt**) palloc(statements.stmts_buf_size * sizeof(CreateFunctionStmt*));
460
+ statements.stmts = (Node**) palloc(statements.stmts_buf_size * sizeof(Node*));
398
461
  statements.stmts_count = 0;
399
462
 
400
- create_function_stmts_walker((Node*) parse_result.tree, &statements);
463
+ stmts_walker((Node*) parse_result.tree, &statements);
401
464
 
402
465
  if (statements.stmts_count == 0) {
403
466
  result.plpgsql_funcs = strdup("[]");
@@ -74,6 +74,12 @@
74
74
 
75
75
  static Node * _readNode(PgQuery__Node *msg);
76
76
 
77
+ static String *
78
+ _readString(PgQuery__String* msg)
79
+ {
80
+ return makeString(pstrdup(msg->sval));
81
+ }
82
+
77
83
  #include "pg_query_enum_defs.c"
78
84
  #include "pg_query_readfuncs_defs.c"
79
85
 
@@ -96,17 +102,45 @@ static Node * _readNode(PgQuery__Node *msg)
96
102
  case PG_QUERY__NODE__NODE_INTEGER:
97
103
  return (Node *) makeInteger(msg->integer->ival);
98
104
  case PG_QUERY__NODE__NODE_FLOAT:
99
- return (Node *) makeFloat(pstrdup(msg->float_->str));
105
+ return (Node *) makeFloat(pstrdup(msg->float_->fval));
106
+ case PG_QUERY__NODE__NODE_BOOLEAN:
107
+ return (Node *) makeBoolean(msg->boolean->boolval);
100
108
  case PG_QUERY__NODE__NODE_STRING:
101
- return (Node *) makeString(pstrdup(msg->string->str));
109
+ return (Node *) makeString(pstrdup(msg->string->sval));
102
110
  case PG_QUERY__NODE__NODE_BIT_STRING:
103
- return (Node *) makeBitString(pstrdup(msg->bit_string->str));
104
- case PG_QUERY__NODE__NODE_NULL:
105
- {
106
- Value *v = makeNode(Value);
107
- v->type = T_Null;
108
- return (Node *) v;
111
+ return (Node *) makeBitString(pstrdup(msg->bit_string->bsval));
112
+ case PG_QUERY__NODE__NODE_A_CONST: {
113
+ A_Const *ac = makeNode(A_Const);
114
+ ac->location = msg->a_const->location;
115
+
116
+ if (msg->a_const->isnull) {
117
+ ac->isnull = true;
118
+ } else {
119
+ switch (msg->a_const->val_case) {
120
+ case PG_QUERY__A__CONST__VAL_IVAL:
121
+ ac->val.ival = *makeInteger(msg->a_const->ival->ival);
122
+ break;
123
+ case PG_QUERY__A__CONST__VAL_FVAL:
124
+ ac->val.fval = *makeFloat(pstrdup(msg->a_const->fval->fval));
125
+ break;
126
+ case PG_QUERY__A__CONST__VAL_BOOLVAL:
127
+ ac->val.boolval = *makeBoolean(msg->a_const->boolval->boolval);
128
+ break;
129
+ case PG_QUERY__A__CONST__VAL_SVAL:
130
+ ac->val.sval = *makeString(pstrdup(msg->a_const->sval->sval));
131
+ break;
132
+ case PG_QUERY__A__CONST__VAL_BSVAL:
133
+ ac->val.bsval = *makeBitString(pstrdup(msg->a_const->bsval->bsval));
134
+ break;
135
+ case PG_QUERY__A__CONST__VAL__NOT_SET:
136
+ case _PG_QUERY__A__CONST__VAL__CASE_IS_INT_SIZE:
137
+ Assert(false);
138
+ break;
139
+ }
109
140
  }
141
+
142
+ return (Node *) ac;
143
+ }
110
144
  case PG_QUERY__NODE__NODE_LIST:
111
145
  return (Node *) _readList(msg->list);
112
146
  case PG_QUERY__NODE__NODE__NOT_SET:
@@ -14,7 +14,7 @@ VALUE pg_query_ruby_fingerprint(VALUE self, VALUE input);
14
14
  VALUE pg_query_ruby_scan(VALUE self, VALUE input);
15
15
  VALUE pg_query_ruby_hash_xxh3_64(VALUE self, VALUE input, VALUE seed);
16
16
 
17
- void Init_pg_query(void)
17
+ __attribute__((visibility ("default"))) void Init_pg_query(void)
18
18
  {
19
19
  VALUE cPgQuery;
20
20
 
@@ -101,8 +101,9 @@ PgQueryScanResult pg_query_scan(const char* input)
101
101
  output_tokens[i]->token = tok;
102
102
 
103
103
  switch (tok) {
104
- #define PG_KEYWORD(a,b,c) case b: output_tokens[i]->keyword_kind = c + 1; break;
104
+ #define PG_KEYWORD(a,b,c,d) case b: output_tokens[i]->keyword_kind = c + 1; break;
105
105
  #include "parser/kwlist.h"
106
+ #undef PG_KEYWORD
106
107
  default: output_tokens[i]->keyword_kind = 0;
107
108
  }
108
109
  }
@@ -59,8 +59,9 @@ PgQuerySplitResult pg_query_split_with_scanner(const char* input)
59
59
  {
60
60
  int tok = core_yylex(&yylval, &yylloc, yyscanner);
61
61
  switch (tok) {
62
- #define PG_KEYWORD(a,b,c) case b: is_keyword = true; break;
62
+ #define PG_KEYWORD(a,b,c,d) case b: is_keyword = true; break;
63
63
  #include "parser/kwlist.h"
64
+ #undef PG_KEYWORD
64
65
  default: is_keyword = false;
65
66
  }
66
67
  if (is_keyword)
@@ -88,7 +89,7 @@ PgQuerySplitResult pg_query_split_with_scanner(const char* input)
88
89
  {
89
90
  int tok = core_yylex(&yylval, &yylloc, yyscanner);
90
91
  switch (tok) {
91
- #define PG_KEYWORD(a,b,c) case b: is_keyword = true; break;
92
+ #define PG_KEYWORD(a,b,c,d) case b: is_keyword = true; break;
92
93
  #include "parser/kwlist.h"
93
94
  default: is_keyword = false;
94
95
  }
@@ -16,7 +16,7 @@
16
16
  * and implementing search-path-controlled searches.
17
17
  *
18
18
  *
19
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
19
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
20
20
  * Portions Copyright (c) 1994, Regents of the University of California
21
21
  *
22
22
  * IDENTIFICATION
@@ -62,6 +62,7 @@
62
62
  #include "utils/inval.h"
63
63
  #include "utils/lsyscache.h"
64
64
  #include "utils/memutils.h"
65
+ #include "utils/snapmgr.h"
65
66
  #include "utils/syscache.h"
66
67
  #include "utils/varlena.h"
67
68
 
@@ -213,6 +214,7 @@ static void RemoveTempRelations(Oid tempNamespaceId);
213
214
  static void RemoveTempRelationsCallback(int code, Datum arg);
214
215
  static void NamespaceCallback(Datum arg, int cacheid, uint32 hashvalue);
215
216
  static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
217
+ bool include_out_arguments, int pronargs,
216
218
  int **argnumbers);
217
219
 
218
220
 
@@ -355,6 +357,12 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
355
357
  * of additional args (which can be retrieved from the function's
356
358
  * proargdefaults entry).
357
359
  *
360
+ * If include_out_arguments is true, then OUT-mode arguments are considered to
361
+ * be included in the argument list. Their types are included in the returned
362
+ * arrays, and argnumbers are indexes in proallargtypes not proargtypes.
363
+ * We also set nominalnargs to be the length of proallargtypes not proargtypes.
364
+ * Otherwise OUT-mode arguments are ignored.
365
+ *
358
366
  * It is not possible for nvargs and ndargs to both be nonzero in the same
359
367
  * list entry, since default insertion allows matches to functions with more
360
368
  * than nargs arguments while the variadic transformation requires the same
@@ -365,7 +373,8 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
365
373
  * first any positional arguments, then the named arguments, then defaulted
366
374
  * arguments (if needed and allowed by expand_defaults). The argnumbers[]
367
375
  * array can be used to map this back to the catalog information.
368
- * argnumbers[k] is set to the proargtypes index of the k'th call argument.
376
+ * argnumbers[k] is set to the proargtypes or proallargtypes index of the
377
+ * k'th call argument.
369
378
  *
370
379
  * We search a single namespace if the function name is qualified, else
371
380
  * all namespaces in the search path. In the multiple-namespace case,
@@ -389,7 +398,7 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
389
398
  * such an entry it should react as though the call were ambiguous.
390
399
  *
391
400
  * If missing_ok is true, an empty list (NULL) is returned if the name was
392
- * schema- qualified with a schema that does not exist. Likewise if no
401
+ * schema-qualified with a schema that does not exist. Likewise if no
393
402
  * candidate is found for other reasons.
394
403
  */
395
404
 
@@ -403,6 +412,10 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
403
412
  * the function, in positions after the last positional argument, and there
404
413
  * are defaults for all unsupplied arguments.
405
414
  *
415
+ * If include_out_arguments is true, we are treating OUT arguments as
416
+ * included in the argument list. pronargs is the number of arguments
417
+ * we're considering (the length of either proargtypes or proallargtypes).
418
+ *
406
419
  * The number of positional arguments is nargs - list_length(argnames).
407
420
  * Note caller has already done basic checks on argument count.
408
421
  *
@@ -427,8 +440,7 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
427
440
  * Given a possibly-qualified operator name and exact input datatypes,
428
441
  * look up the operator. Returns InvalidOid if not found.
429
442
  *
430
- * Pass oprleft = InvalidOid for a prefix op, oprright = InvalidOid for
431
- * a postfix op.
443
+ * Pass oprleft = InvalidOid for a prefix op.
432
444
  *
433
445
  * If the operator name is not schema-qualified, it is sought in the current
434
446
  * namespace search path. If the name is schema-qualified and the given
@@ -450,8 +462,8 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
450
462
  * namespace case, we arrange for entries in earlier namespaces to mask
451
463
  * identical entries in later namespaces.
452
464
  *
453
- * The returned items always have two args[] entries --- one or the other
454
- * will be InvalidOid for a prefix or postfix oprkind. nargs is 2, too.
465
+ * The returned items always have two args[] entries --- the first will be
466
+ * InvalidOid for a prefix oprkind. nargs is always 2, too.
455
467
  */
456
468
  #define SPACE_PER_OP MAXALIGN(offsetof(struct _FuncCandidateList, args) + \
457
469
  2 * sizeof(Oid))
@@ -676,7 +688,7 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
676
688
 
677
689
  /*
678
690
  * QualifiedNameGetCreationNamespace
679
- * Given a possibly-qualified name for an object (in List-of-Values
691
+ * Given a possibly-qualified name for an object (in List-of-Strings
680
692
  * format), determine what namespace the object should be created in.
681
693
  * Also extract and return the object name (last component of list).
682
694
  *
@@ -709,7 +721,7 @@ static bool MatchNamedCall(HeapTuple proctup, int nargs, List *argnames,
709
721
  * This is used primarily to form error messages, and so we do not quote
710
722
  * the list elements, for the sake of legibility.
711
723
  *
712
- * In most scenarios the list elements should always be Value strings,
724
+ * In most scenarios the list elements should always be String values,
713
725
  * but we also allow A_Star for the convenience of ColumnRef processing.
714
726
  */
715
727
  char *
@@ -9,7 +9,7 @@
9
9
  * pg_proc.c
10
10
  * routines to support manipulation of the pg_proc relation
11
11
  *
12
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
12
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
13
13
  * Portions Copyright (c) 1994, Regents of the University of California
14
14
  *
15
15
  *
@@ -38,8 +38,11 @@
38
38
  #include "mb/pg_wchar.h"
39
39
  #include "miscadmin.h"
40
40
  #include "nodes/nodeFuncs.h"
41
+ #include "parser/analyze.h"
41
42
  #include "parser/parse_coerce.h"
42
43
  #include "parser/parse_type.h"
44
+ #include "pgstat.h"
45
+ #include "rewrite/rewriteHandler.h"
43
46
  #include "tcop/pquery.h"
44
47
  #include "tcop/tcopprot.h"
45
48
  #include "utils/acl.h"
@@ -10,7 +10,7 @@
10
10
  * Support routines for various kinds of object creation.
11
11
  *
12
12
  *
13
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
13
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
14
14
  * Portions Copyright (c) 1994, Regents of the University of California
15
15
  *
16
16
  *
@@ -92,6 +92,11 @@ defGetInt32(DefElem *def)
92
92
  */
93
93
 
94
94
 
95
+ /*
96
+ * Extract an OID value from a DefElem.
97
+ */
98
+
99
+
95
100
  /*
96
101
  * Extract a possibly-qualified name (as a List of Strings) from a DefElem.
97
102
  */
@@ -115,3 +120,8 @@ defGetInt32(DefElem *def)
115
120
  * Extract a list of string values (otherwise uninterpreted) from a DefElem.
116
121
  */
117
122
 
123
+
124
+ /*
125
+ * Raise an error about a conflicting DefElem.
126
+ */
127
+
@@ -23,7 +23,7 @@
23
23
  * bms_is_empty() in preference to testing for NULL.)
24
24
  *
25
25
  *
26
- * Copyright (c) 2003-2020, PostgreSQL Global Development Group
26
+ * Copyright (c) 2003-2022, PostgreSQL Global Development Group
27
27
  *
28
28
  * IDENTIFICATION
29
29
  * src/backend/nodes/bitmapset.c
@@ -233,6 +233,8 @@ bms_free(Bitmapset *a)
233
233
 
234
234
  /*
235
235
  * bms_nonempty_difference - do sets have a nonempty difference?
236
+ *
237
+ * i.e., are any members set in 'a' that are not also set in 'b'.
236
238
  */
237
239
 
238
240