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
@@ -3,7 +3,7 @@
3
3
  * snapmgr.h
4
4
  * POSTGRES snapshot manager
5
5
  *
6
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/utils/snapmgr.h
@@ -37,8 +37,7 @@
37
37
  */
38
38
  #define RelationAllowsEarlyPruning(rel) \
39
39
  ( \
40
- (rel)->rd_rel->relpersistence == RELPERSISTENCE_PERMANENT \
41
- && !IsCatalogRelation(rel) \
40
+ RelationIsPermanent(rel) && !IsCatalogRelation(rel) \
42
41
  && !RelationIsAccessibleInLogicalDecoding(rel) \
43
42
  )
44
43
 
@@ -52,13 +51,12 @@ extern Size SnapMgrShmemSize(void);
52
51
  extern void SnapMgrInit(void);
53
52
  extern TimestampTz GetSnapshotCurrentTimestamp(void);
54
53
  extern TimestampTz GetOldSnapshotThresholdTimestamp(void);
54
+ extern void SnapshotTooOldMagicForTest(void);
55
55
 
56
- extern bool FirstSnapshotSet;
56
+ extern PGDLLIMPORT bool FirstSnapshotSet;
57
57
 
58
58
  extern PGDLLIMPORT TransactionId TransactionXmin;
59
59
  extern PGDLLIMPORT TransactionId RecentXmin;
60
- extern PGDLLIMPORT TransactionId RecentGlobalXmin;
61
- extern PGDLLIMPORT TransactionId RecentGlobalDataXmin;
62
60
 
63
61
  /* Variables representing various special snapshot semantics */
64
62
  extern PGDLLIMPORT SnapshotData SnapshotSelfData;
@@ -78,11 +76,12 @@ extern PGDLLIMPORT SnapshotData CatalogSnapshotData;
78
76
 
79
77
  /*
80
78
  * Similarly, some initialization is required for a NonVacuumable snapshot.
81
- * The caller must supply the xmin horizon to use (e.g., RecentGlobalXmin).
79
+ * The caller must supply the visibility cutoff state to use (c.f.
80
+ * GlobalVisTestFor()).
82
81
  */
83
- #define InitNonVacuumableSnapshot(snapshotdata, xmin_horizon) \
82
+ #define InitNonVacuumableSnapshot(snapshotdata, vistestp) \
84
83
  ((snapshotdata).snapshot_type = SNAPSHOT_NON_VACUUMABLE, \
85
- (snapshotdata).xmin = (xmin_horizon))
84
+ (snapshotdata).vistest = (vistestp))
86
85
 
87
86
  /*
88
87
  * Similarly, some initialization is required for SnapshotToast. We need
@@ -98,6 +97,11 @@ extern PGDLLIMPORT SnapshotData CatalogSnapshotData;
98
97
  ((snapshot)->snapshot_type == SNAPSHOT_MVCC || \
99
98
  (snapshot)->snapshot_type == SNAPSHOT_HISTORIC_MVCC)
100
99
 
100
+ static inline bool
101
+ OldSnapshotThresholdActive(void)
102
+ {
103
+ return old_snapshot_threshold >= 0;
104
+ }
101
105
 
102
106
  extern Snapshot GetTransactionSnapshot(void);
103
107
  extern Snapshot GetLatestSnapshot(void);
@@ -110,6 +114,7 @@ extern void InvalidateCatalogSnapshot(void);
110
114
  extern void InvalidateCatalogSnapshotConditionally(void);
111
115
 
112
116
  extern void PushActiveSnapshot(Snapshot snapshot);
117
+ extern void PushActiveSnapshotWithLevel(Snapshot snapshot, int snap_level);
113
118
  extern void PushCopiedSnapshot(Snapshot snapshot);
114
119
  extern void UpdateActiveSnapshotCommandId(void);
115
120
  extern void PopActiveSnapshot(void);
@@ -121,8 +126,6 @@ extern void UnregisterSnapshot(Snapshot snapshot);
121
126
  extern Snapshot RegisterSnapshotOnOwner(Snapshot snapshot, ResourceOwner owner);
122
127
  extern void UnregisterSnapshotFromOwner(Snapshot snapshot, ResourceOwner owner);
123
128
 
124
- extern FullTransactionId GetFullRecentGlobalXmin(void);
125
-
126
129
  extern void AtSubCommit_Snapshot(int level);
127
130
  extern void AtSubAbort_Snapshot(int level);
128
131
  extern void AtEOXact_Snapshot(bool isCommit, bool resetXmin);
@@ -130,14 +133,32 @@ extern void AtEOXact_Snapshot(bool isCommit, bool resetXmin);
130
133
  extern void ImportSnapshot(const char *idstr);
131
134
  extern bool XactHasExportedSnapshots(void);
132
135
  extern void DeleteAllExportedSnapshotFiles(void);
136
+ extern void WaitForOlderSnapshots(TransactionId limitXmin, bool progress);
133
137
  extern bool ThereAreNoPriorRegisteredSnapshots(void);
134
- extern TransactionId TransactionIdLimitedForOldSnapshots(TransactionId recentXmin,
135
- Relation relation);
138
+ extern bool HaveRegisteredOrActiveSnapshot(void);
139
+ extern bool TransactionIdLimitedForOldSnapshots(TransactionId recentXmin,
140
+ Relation relation,
141
+ TransactionId *limit_xid,
142
+ TimestampTz *limit_ts);
143
+ extern void SetOldSnapshotThresholdTimestamp(TimestampTz ts, TransactionId xlimit);
136
144
  extern void MaintainOldSnapshotTimeMapping(TimestampTz whenTaken,
137
145
  TransactionId xmin);
138
146
 
139
147
  extern char *ExportSnapshot(Snapshot snapshot);
140
148
 
149
+ /*
150
+ * These live in procarray.c because they're intimately linked to the
151
+ * procarray contents, but thematically they better fit into snapmgr.h.
152
+ */
153
+ typedef struct GlobalVisState GlobalVisState;
154
+ extern GlobalVisState *GlobalVisTestFor(Relation rel);
155
+ extern bool GlobalVisTestIsRemovableXid(GlobalVisState *state, TransactionId xid);
156
+ extern bool GlobalVisTestIsRemovableFullXid(GlobalVisState *state, FullTransactionId fxid);
157
+ extern FullTransactionId GlobalVisTestNonRemovableFullHorizon(GlobalVisState *state);
158
+ extern TransactionId GlobalVisTestNonRemovableHorizon(GlobalVisState *state);
159
+ extern bool GlobalVisCheckRemovableXid(Relation rel, TransactionId xid);
160
+ extern bool GlobalVisCheckRemovableFullXid(Relation rel, FullTransactionId fxid);
161
+
141
162
  /*
142
163
  * Utility functions for implementing visibility routines in table AMs.
143
164
  */
@@ -153,6 +174,6 @@ extern bool HistoricSnapshotActive(void);
153
174
  extern Size EstimateSnapshotSpace(Snapshot snapshot);
154
175
  extern void SerializeSnapshot(Snapshot snapshot, char *start_address);
155
176
  extern Snapshot RestoreSnapshot(char *start_address);
156
- extern void RestoreTransactionSnapshot(Snapshot snapshot, void *master_pgproc);
177
+ extern void RestoreTransactionSnapshot(Snapshot snapshot, void *source_pgproc);
157
178
 
158
179
  #endif /* SNAPMGR_H */
@@ -3,7 +3,7 @@
3
3
  * snapshot.h
4
4
  * POSTGRES snapshot definition
5
5
  *
6
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/utils/snapshot.h
@@ -192,6 +192,12 @@ typedef struct SnapshotData
192
192
  */
193
193
  uint32 speculativeToken;
194
194
 
195
+ /*
196
+ * For SNAPSHOT_NON_VACUUMABLE (and hopefully more in the future) this is
197
+ * used to determine whether row could be vacuumed.
198
+ */
199
+ struct GlobalVisState *vistest;
200
+
195
201
  /*
196
202
  * Book-keeping information, used by the snapshot manager
197
203
  */
@@ -201,6 +207,13 @@ typedef struct SnapshotData
201
207
 
202
208
  TimestampTz whenTaken; /* timestamp when snapshot was taken */
203
209
  XLogRecPtr lsn; /* position in the WAL stream when taken */
210
+
211
+ /*
212
+ * The transaction completion count at the time GetSnapshotData() built
213
+ * this snapshot. Allows to avoid re-computing static snapshots when no
214
+ * transactions completed since the last GetSnapshotData().
215
+ */
216
+ uint64 snapXactCompletionCount;
204
217
  } SnapshotData;
205
218
 
206
219
  #endif /* SNAPSHOT_H */
@@ -24,7 +24,7 @@
24
24
  * function will have a shim set up by sort support automatically. However,
25
25
  * opclasses that support the optional additional abbreviated key capability
26
26
  * must always provide an authoritative comparator used to tie-break
27
- * inconclusive abbreviated comparisons and also used when aborting
27
+ * inconclusive abbreviated comparisons and also used when aborting
28
28
  * abbreviation. Furthermore, a converter and abort/costing function must be
29
29
  * provided.
30
30
  *
@@ -42,7 +42,7 @@
42
42
  * function for such cases, but probably not any other acceleration method.
43
43
  *
44
44
  *
45
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
45
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
46
46
  * Portions Copyright (c) 1994, Regents of the University of California
47
47
  *
48
48
  * src/include/utils/sortsupport.h
@@ -229,6 +229,109 @@ ApplySortComparator(Datum datum1, bool isNull1,
229
229
  return compare;
230
230
  }
231
231
 
232
+ static inline int
233
+ ApplyUnsignedSortComparator(Datum datum1, bool isNull1,
234
+ Datum datum2, bool isNull2,
235
+ SortSupport ssup)
236
+ {
237
+ int compare;
238
+
239
+ if (isNull1)
240
+ {
241
+ if (isNull2)
242
+ compare = 0; /* NULL "=" NULL */
243
+ else if (ssup->ssup_nulls_first)
244
+ compare = -1; /* NULL "<" NOT_NULL */
245
+ else
246
+ compare = 1; /* NULL ">" NOT_NULL */
247
+ }
248
+ else if (isNull2)
249
+ {
250
+ if (ssup->ssup_nulls_first)
251
+ compare = 1; /* NOT_NULL ">" NULL */
252
+ else
253
+ compare = -1; /* NOT_NULL "<" NULL */
254
+ }
255
+ else
256
+ {
257
+ compare = datum1 < datum2 ? -1 : datum1 > datum2 ? 1 : 0;
258
+ if (ssup->ssup_reverse)
259
+ INVERT_COMPARE_RESULT(compare);
260
+ }
261
+
262
+ return compare;
263
+ }
264
+
265
+ #if SIZEOF_DATUM >= 8
266
+ static inline int
267
+ ApplySignedSortComparator(Datum datum1, bool isNull1,
268
+ Datum datum2, bool isNull2,
269
+ SortSupport ssup)
270
+ {
271
+ int compare;
272
+
273
+ if (isNull1)
274
+ {
275
+ if (isNull2)
276
+ compare = 0; /* NULL "=" NULL */
277
+ else if (ssup->ssup_nulls_first)
278
+ compare = -1; /* NULL "<" NOT_NULL */
279
+ else
280
+ compare = 1; /* NULL ">" NOT_NULL */
281
+ }
282
+ else if (isNull2)
283
+ {
284
+ if (ssup->ssup_nulls_first)
285
+ compare = 1; /* NOT_NULL ">" NULL */
286
+ else
287
+ compare = -1; /* NOT_NULL "<" NULL */
288
+ }
289
+ else
290
+ {
291
+ compare = DatumGetInt64(datum1) < DatumGetInt64(datum2) ? -1 :
292
+ DatumGetInt64(datum1) > DatumGetInt64(datum2) ? 1 : 0;
293
+ if (ssup->ssup_reverse)
294
+ INVERT_COMPARE_RESULT(compare);
295
+ }
296
+
297
+ return compare;
298
+ }
299
+ #endif
300
+
301
+ static inline int
302
+ ApplyInt32SortComparator(Datum datum1, bool isNull1,
303
+ Datum datum2, bool isNull2,
304
+ SortSupport ssup)
305
+ {
306
+ int compare;
307
+
308
+ if (isNull1)
309
+ {
310
+ if (isNull2)
311
+ compare = 0; /* NULL "=" NULL */
312
+ else if (ssup->ssup_nulls_first)
313
+ compare = -1; /* NULL "<" NOT_NULL */
314
+ else
315
+ compare = 1; /* NULL ">" NOT_NULL */
316
+ }
317
+ else if (isNull2)
318
+ {
319
+ if (ssup->ssup_nulls_first)
320
+ compare = 1; /* NOT_NULL ">" NULL */
321
+ else
322
+ compare = -1; /* NOT_NULL "<" NULL */
323
+ }
324
+ else
325
+ {
326
+ compare = DatumGetInt32(datum1) < DatumGetInt32(datum2) ? -1 :
327
+ DatumGetInt32(datum1) > DatumGetInt32(datum2) ? 1 : 0;
328
+ if (ssup->ssup_reverse)
329
+ INVERT_COMPARE_RESULT(compare);
330
+ }
331
+
332
+ return compare;
333
+ }
334
+
232
335
  /*
233
336
  * Apply a sort comparator function and return a 3-way comparison using full,
234
337
  * authoritative comparator. This takes care of handling reverse-sort and
@@ -267,10 +370,22 @@ ApplySortAbbrevFullComparator(Datum datum1, bool isNull1,
267
370
  return compare;
268
371
  }
269
372
 
373
+ /*
374
+ * Datum comparison functions that we have specialized sort routines for.
375
+ * Datatypes that install these as their comparator or abbrevated comparator
376
+ * are eligible for faster sorting.
377
+ */
378
+ extern int ssup_datum_unsigned_cmp(Datum x, Datum y, SortSupport ssup);
379
+ #if SIZEOF_DATUM >= 8
380
+ extern int ssup_datum_signed_cmp(Datum x, Datum y, SortSupport ssup);
381
+ #endif
382
+ extern int ssup_datum_int32_cmp(Datum x, Datum y, SortSupport ssup);
383
+
270
384
  /* Other functions in utils/sort/sortsupport.c */
271
385
  extern void PrepareSortSupportComparisonShim(Oid cmpFunc, SortSupport ssup);
272
386
  extern void PrepareSortSupportFromOrderingOp(Oid orderingOp, SortSupport ssup);
273
387
  extern void PrepareSortSupportFromIndexRel(Relation indexRel, int16 strategy,
274
388
  SortSupport ssup);
389
+ extern void PrepareSortSupportFromGistIndexRel(Relation indexRel, SortSupport ssup);
275
390
 
276
391
  #endif /* SORTSUPPORT_H */
@@ -6,7 +6,7 @@
6
6
  * See also lsyscache.h, which provides convenience routines for
7
7
  * common cache-lookup operations.
8
8
  *
9
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
9
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
10
10
  * Portions Copyright (c) 1994, Regents of the University of California
11
11
  *
12
12
  * src/include/utils/syscache.h
@@ -72,13 +72,18 @@ enum SysCacheIdentifier
72
72
  OPEROID,
73
73
  OPFAMILYAMNAMENSP,
74
74
  OPFAMILYOID,
75
+ PARAMETERACLNAME,
76
+ PARAMETERACLOID,
75
77
  PARTRELID,
76
78
  PROCNAMEARGSNSP,
77
79
  PROCOID,
78
80
  PUBLICATIONNAME,
81
+ PUBLICATIONNAMESPACE,
82
+ PUBLICATIONNAMESPACEMAP,
79
83
  PUBLICATIONOID,
80
84
  PUBLICATIONREL,
81
85
  PUBLICATIONRELMAP,
86
+ RANGEMULTIRANGE,
82
87
  RANGETYPE,
83
88
  RELNAMENSP,
84
89
  RELOID,
@@ -4,7 +4,7 @@
4
4
  * Routines to multiplex SIGALRM interrupts for multiple timeout reasons.
5
5
  *
6
6
  *
7
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
8
8
  * Portions Copyright (c) 1994, Regents of the University of California
9
9
  *
10
10
  * src/include/utils/timeout.h
@@ -31,10 +31,14 @@ typedef enum TimeoutId
31
31
  STANDBY_TIMEOUT,
32
32
  STANDBY_LOCK_TIMEOUT,
33
33
  IDLE_IN_TRANSACTION_SESSION_TIMEOUT,
34
+ IDLE_SESSION_TIMEOUT,
35
+ IDLE_STATS_UPDATE_TIMEOUT,
36
+ CLIENT_CONNECTION_CHECK_TIMEOUT,
37
+ STARTUP_PROGRESS_TIMEOUT,
34
38
  /* First user-definable timeout reason */
35
39
  USER_TIMEOUT,
36
40
  /* Maximum number of timeout reasons */
37
- MAX_TIMEOUTS = 16
41
+ MAX_TIMEOUTS = USER_TIMEOUT + 10
38
42
  } TimeoutId;
39
43
 
40
44
  /* callback function signature */
@@ -46,14 +50,15 @@ typedef void (*timeout_handler_proc) (void);
46
50
  typedef enum TimeoutType
47
51
  {
48
52
  TMPARAM_AFTER,
49
- TMPARAM_AT
53
+ TMPARAM_AT,
54
+ TMPARAM_EVERY
50
55
  } TimeoutType;
51
56
 
52
57
  typedef struct
53
58
  {
54
59
  TimeoutId id; /* timeout to set */
55
60
  TimeoutType type; /* TMPARAM_AFTER or TMPARAM_AT */
56
- int delay_ms; /* only used for TMPARAM_AFTER */
61
+ int delay_ms; /* only used for TMPARAM_AFTER/EVERY */
57
62
  TimestampTz fin_time; /* only used for TMPARAM_AT */
58
63
  } EnableTimeoutParams;
59
64
 
@@ -73,6 +78,8 @@ extern void reschedule_timeouts(void);
73
78
 
74
79
  /* timeout operation */
75
80
  extern void enable_timeout_after(TimeoutId id, int delay_ms);
81
+ extern void enable_timeout_every(TimeoutId id, TimestampTz fin_time,
82
+ int delay_ms);
76
83
  extern void enable_timeout_at(TimeoutId id, TimestampTz fin_time);
77
84
  extern void enable_timeouts(const EnableTimeoutParams *timeouts, int count);
78
85
  extern void disable_timeout(TimeoutId id, bool keep_indicator);
@@ -3,7 +3,7 @@
3
3
  * timestamp.h
4
4
  * Definitions for the SQL "timestamp" and "interval" types.
5
5
  *
6
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/utils/timestamp.h
@@ -57,10 +57,10 @@
57
57
 
58
58
 
59
59
  /* Set at postmaster start */
60
- extern TimestampTz PgStartTime;
60
+ extern PGDLLIMPORT TimestampTz PgStartTime;
61
61
 
62
62
  /* Set at configuration reload */
63
- extern TimestampTz PgReloadTime;
63
+ extern PGDLLIMPORT TimestampTz PgReloadTime;
64
64
 
65
65
 
66
66
  /* Internal routines (not fmgr-callable) */
@@ -88,8 +88,9 @@ extern int timestamp2tm(Timestamp dt, int *tzp, struct pg_tm *tm,
88
88
  fsec_t *fsec, const char **tzn, pg_tz *attimezone);
89
89
  extern void dt2time(Timestamp dt, int *hour, int *min, int *sec, fsec_t *fsec);
90
90
 
91
- extern int interval2tm(Interval span, struct pg_tm *tm, fsec_t *fsec);
92
- extern int tm2interval(struct pg_tm *tm, fsec_t fsec, Interval *span);
91
+ extern void interval2itm(Interval span, struct pg_itm *itm);
92
+ extern int itm2interval(struct pg_itm *itm, Interval *span);
93
+ extern int itmin2interval(struct pg_itm_in *itm_in, Interval *span);
93
94
 
94
95
  extern Timestamp SetEpochTimestamp(void);
95
96
  extern void GetEpochTime(struct pg_tm *tm);
@@ -11,7 +11,7 @@
11
11
  * algorithm. Parallel sorts use a variant of this external sort
12
12
  * algorithm, and are typically only used for large amounts of data.
13
13
  *
14
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
14
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
15
15
  * Portions Copyright (c) 1994, Regents of the University of California
16
16
  *
17
17
  * src/include/utils/tuplesort.h
@@ -86,6 +86,15 @@ typedef enum
86
86
  SORT_SPACE_TYPE_MEMORY
87
87
  } TuplesortSpaceType;
88
88
 
89
+ /* Bitwise option flags for tuple sorts */
90
+ #define TUPLESORT_NONE 0
91
+
92
+ /* specifies whether non-sequential access to the sort result is required */
93
+ #define TUPLESORT_RANDOMACCESS (1 << 0)
94
+
95
+ /* specifies if the tuplesort is able to support bounded sorts */
96
+ #define TUPLESORT_ALLOWBOUNDED (1 << 1)
97
+
89
98
  typedef struct TuplesortInstrumentation
90
99
  {
91
100
  TuplesortMethod sortMethod; /* sort algorithm used */
@@ -201,27 +210,33 @@ extern Tuplesortstate *tuplesort_begin_heap(TupleDesc tupDesc,
201
210
  Oid *sortOperators, Oid *sortCollations,
202
211
  bool *nullsFirstFlags,
203
212
  int workMem, SortCoordinate coordinate,
204
- bool randomAccess);
213
+ int sortopt);
205
214
  extern Tuplesortstate *tuplesort_begin_cluster(TupleDesc tupDesc,
206
215
  Relation indexRel, int workMem,
207
- SortCoordinate coordinate, bool randomAccess);
216
+ SortCoordinate coordinate,
217
+ int sortopt);
208
218
  extern Tuplesortstate *tuplesort_begin_index_btree(Relation heapRel,
209
219
  Relation indexRel,
210
220
  bool enforceUnique,
221
+ bool uniqueNullsNotDistinct,
211
222
  int workMem, SortCoordinate coordinate,
212
- bool randomAccess);
223
+ int sortopt);
213
224
  extern Tuplesortstate *tuplesort_begin_index_hash(Relation heapRel,
214
225
  Relation indexRel,
215
226
  uint32 high_mask,
216
227
  uint32 low_mask,
217
228
  uint32 max_buckets,
218
229
  int workMem, SortCoordinate coordinate,
219
- bool randomAccess);
230
+ int sortopt);
231
+ extern Tuplesortstate *tuplesort_begin_index_gist(Relation heapRel,
232
+ Relation indexRel,
233
+ int workMem, SortCoordinate coordinate,
234
+ int sortopt);
220
235
  extern Tuplesortstate *tuplesort_begin_datum(Oid datumType,
221
236
  Oid sortOperator, Oid sortCollation,
222
237
  bool nullsFirstFlag,
223
238
  int workMem, SortCoordinate coordinate,
224
- bool randomAccess);
239
+ int sortopt);
225
240
 
226
241
  extern void tuplesort_set_bound(Tuplesortstate *state, int64 bound);
227
242
  extern bool tuplesort_used_bound(Tuplesortstate *state);
@@ -264,12 +279,11 @@ extern void tuplesort_initialize_shared(Sharedsort *shared, int nWorkers,
264
279
  extern void tuplesort_attach_shared(Sharedsort *shared, dsm_segment *seg);
265
280
 
266
281
  /*
267
- * These routines may only be called if randomAccess was specified 'true'.
268
- * Likewise, backwards scan in gettuple/getdatum is only allowed if
269
- * randomAccess was specified. Note that parallel sorts do not support
270
- * randomAccess.
282
+ * These routines may only be called if TUPLESORT_RANDOMACCESS was specified
283
+ * during tuplesort_begin_*. Additionally backwards scan in gettuple/getdatum
284
+ * also require TUPLESORT_RANDOMACCESS. Note that parallel sorts do not
285
+ * support random access.
271
286
  */
272
-
273
287
  extern void tuplesort_rescan(Tuplesortstate *state);
274
288
  extern void tuplesort_markpos(Tuplesortstate *state);
275
289
  extern void tuplesort_restorepos(Tuplesortstate *state);
@@ -21,7 +21,7 @@
21
21
  * Also, we have changed the API to return tuples in TupleTableSlots,
22
22
  * so that there is a check to prevent attempted access to system columns.
23
23
  *
24
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
24
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
25
25
  * Portions Copyright (c) 1994, Regents of the University of California
26
26
  *
27
27
  * src/include/utils/tuplestore.h
@@ -56,7 +56,7 @@ extern void tuplestore_puttuple(Tuplestorestate *state, HeapTuple tuple);
56
56
  extern void tuplestore_putvalues(Tuplestorestate *state, TupleDesc tdesc,
57
57
  Datum *values, bool *isnull);
58
58
 
59
- /* tuplestore_donestoring() used to be required, but is no longer used */
59
+ /* Backwards compatibility macro */
60
60
  #define tuplestore_donestoring(state) ((void) 0)
61
61
 
62
62
  extern int tuplestore_alloc_read_pointer(Tuplestorestate *state, int eflags);
@@ -6,7 +6,7 @@
6
6
  * The type cache exists to speed lookup of certain information about data
7
7
  * types that is not directly available from a type's pg_type row.
8
8
  *
9
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
9
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
10
10
  * Portions Copyright (c) 1994, Regents of the University of California
11
11
  *
12
12
  * src/include/utils/typcache.h
@@ -42,6 +42,7 @@ typedef struct TypeCacheEntry
42
42
  char typstorage;
43
43
  char typtype;
44
44
  Oid typrelid;
45
+ Oid typsubscript;
45
46
  Oid typelem;
46
47
  Oid typcollation;
47
48
 
@@ -100,6 +101,11 @@ typedef struct TypeCacheEntry
100
101
  FmgrInfo rng_canonical_finfo; /* canonicalization function, if any */
101
102
  FmgrInfo rng_subdiff_finfo; /* difference function, if any */
102
103
 
104
+ /*
105
+ * Fields computed when TYPECACHE_MULTIRANGE_INFO is required.
106
+ */
107
+ struct TypeCacheEntry *rngtype; /* multirange's range underlying type */
108
+
103
109
  /*
104
110
  * Domain's base type and typmod if it's a domain type. Zeroes if not
105
111
  * domain, or if information hasn't been requested.
@@ -127,22 +133,23 @@ typedef struct TypeCacheEntry
127
133
  } TypeCacheEntry;
128
134
 
129
135
  /* Bit flags to indicate which fields a given caller needs to have set */
130
- #define TYPECACHE_EQ_OPR 0x0001
131
- #define TYPECACHE_LT_OPR 0x0002
132
- #define TYPECACHE_GT_OPR 0x0004
133
- #define TYPECACHE_CMP_PROC 0x0008
134
- #define TYPECACHE_HASH_PROC 0x0010
135
- #define TYPECACHE_EQ_OPR_FINFO 0x0020
136
- #define TYPECACHE_CMP_PROC_FINFO 0x0040
137
- #define TYPECACHE_HASH_PROC_FINFO 0x0080
138
- #define TYPECACHE_TUPDESC 0x0100
139
- #define TYPECACHE_BTREE_OPFAMILY 0x0200
140
- #define TYPECACHE_HASH_OPFAMILY 0x0400
141
- #define TYPECACHE_RANGE_INFO 0x0800
142
- #define TYPECACHE_DOMAIN_BASE_INFO 0x1000
143
- #define TYPECACHE_DOMAIN_CONSTR_INFO 0x2000
144
- #define TYPECACHE_HASH_EXTENDED_PROC 0x4000
145
- #define TYPECACHE_HASH_EXTENDED_PROC_FINFO 0x8000
136
+ #define TYPECACHE_EQ_OPR 0x00001
137
+ #define TYPECACHE_LT_OPR 0x00002
138
+ #define TYPECACHE_GT_OPR 0x00004
139
+ #define TYPECACHE_CMP_PROC 0x00008
140
+ #define TYPECACHE_HASH_PROC 0x00010
141
+ #define TYPECACHE_EQ_OPR_FINFO 0x00020
142
+ #define TYPECACHE_CMP_PROC_FINFO 0x00040
143
+ #define TYPECACHE_HASH_PROC_FINFO 0x00080
144
+ #define TYPECACHE_TUPDESC 0x00100
145
+ #define TYPECACHE_BTREE_OPFAMILY 0x00200
146
+ #define TYPECACHE_HASH_OPFAMILY 0x00400
147
+ #define TYPECACHE_RANGE_INFO 0x00800
148
+ #define TYPECACHE_DOMAIN_BASE_INFO 0x01000
149
+ #define TYPECACHE_DOMAIN_CONSTR_INFO 0x02000
150
+ #define TYPECACHE_HASH_EXTENDED_PROC 0x04000
151
+ #define TYPECACHE_HASH_EXTENDED_PROC_FINFO 0x08000
152
+ #define TYPECACHE_MULTIRANGE_INFO 0x10000
146
153
 
147
154
  /* This value will not equal any valid tupledesc identifier, nor 0 */
148
155
  #define INVALID_TUPLEDESC_IDENTIFIER ((uint64) 1)
@@ -3,7 +3,7 @@
3
3
  * tzparser.h
4
4
  * Timezone offset file parsing definitions.
5
5
  *
6
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/utils/tzparser.h
@@ -3,7 +3,7 @@
3
3
  * varlena.h
4
4
  * Functions for the variable-length built-in types.
5
5
  *
6
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
7
7
  * Portions Copyright (c) 1994, Regents of the University of California
8
8
  *
9
9
  * src/include/utils/varlena.h
@@ -33,7 +33,9 @@ extern bool SplitDirectoriesString(char *rawstring, char separator,
33
33
  List **namelist);
34
34
  extern bool SplitGUCList(char *rawstring, char separator,
35
35
  List **namelist);
36
- extern text *replace_text_regexp(text *src_text, void *regexp,
37
- text *replace_text, bool glob);
36
+ extern text *replace_text_regexp(text *src_text, text *pattern_text,
37
+ text *replace_text,
38
+ int cflags, Oid collation,
39
+ int search_start, int n);
38
40
 
39
41
  #endif