pg_query 2.2.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 (467) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +25 -0
  3. data/README.md +59 -31
  4. data/Rakefile +2 -2
  5. data/ext/pg_query/include/access/amapi.h +45 -1
  6. data/ext/pg_query/include/access/attmap.h +1 -1
  7. data/ext/pg_query/include/access/attnum.h +2 -2
  8. data/ext/pg_query/include/access/clog.h +4 -2
  9. data/ext/pg_query/include/access/commit_ts.h +6 -9
  10. data/ext/pg_query/include/access/detoast.h +1 -11
  11. data/ext/pg_query/include/access/genam.h +15 -12
  12. data/ext/pg_query/include/access/gin.h +2 -2
  13. data/ext/pg_query/include/access/htup.h +1 -1
  14. data/ext/pg_query/include/access/htup_details.h +75 -87
  15. data/ext/pg_query/include/access/itup.h +7 -1
  16. data/ext/pg_query/include/access/parallel.h +2 -2
  17. data/ext/pg_query/include/access/printtup.h +1 -1
  18. data/ext/pg_query/include/access/relation.h +1 -1
  19. data/ext/pg_query/include/access/relscan.h +17 -2
  20. data/ext/pg_query/include/access/rmgr.h +30 -3
  21. data/ext/pg_query/include/access/rmgrlist.h +23 -23
  22. data/ext/pg_query/include/access/sdir.h +1 -1
  23. data/ext/pg_query/include/access/skey.h +1 -1
  24. data/ext/pg_query/include/access/stratnum.h +4 -2
  25. data/ext/pg_query/include/access/sysattr.h +1 -1
  26. data/ext/pg_query/include/access/table.h +2 -1
  27. data/ext/pg_query/include/access/tableam.h +272 -20
  28. data/ext/pg_query/include/access/toast_compression.h +73 -0
  29. data/ext/pg_query/include/access/transam.h +123 -13
  30. data/ext/pg_query/include/access/tupconvert.h +1 -1
  31. data/ext/pg_query/include/access/tupdesc.h +1 -1
  32. data/ext/pg_query/include/access/tupmacs.h +3 -3
  33. data/ext/pg_query/include/access/twophase.h +3 -1
  34. data/ext/pg_query/include/access/xact.h +73 -19
  35. data/ext/pg_query/include/access/xlog.h +60 -155
  36. data/ext/pg_query/include/access/xlog_internal.h +40 -13
  37. data/ext/pg_query/include/access/xlogdefs.h +8 -16
  38. data/ext/pg_query/include/access/xlogprefetcher.h +55 -0
  39. data/ext/pg_query/include/access/xlogreader.h +145 -39
  40. data/ext/pg_query/include/access/xlogrecord.h +18 -9
  41. data/ext/pg_query/include/access/xlogrecovery.h +157 -0
  42. data/ext/pg_query/include/c.h +101 -44
  43. data/ext/pg_query/include/catalog/catalog.h +3 -1
  44. data/ext/pg_query/include/catalog/catversion.h +2 -2
  45. data/ext/pg_query/include/catalog/dependency.h +8 -16
  46. data/ext/pg_query/include/catalog/genbki.h +83 -5
  47. data/ext/pg_query/include/catalog/index.h +18 -3
  48. data/ext/pg_query/include/catalog/indexing.h +12 -324
  49. data/ext/pg_query/include/catalog/namespace.h +4 -2
  50. data/ext/pg_query/include/catalog/objectaccess.h +70 -2
  51. data/ext/pg_query/include/catalog/objectaddress.h +11 -6
  52. data/ext/pg_query/include/catalog/pg_aggregate.h +14 -10
  53. data/ext/pg_query/include/catalog/pg_aggregate_d.h +2 -1
  54. data/ext/pg_query/include/catalog/pg_am.h +4 -1
  55. data/ext/pg_query/include/catalog/pg_am_d.h +3 -1
  56. data/ext/pg_query/include/catalog/pg_attribute.h +27 -10
  57. data/ext/pg_query/include/catalog/pg_attribute_d.h +21 -18
  58. data/ext/pg_query/include/catalog/pg_authid.h +7 -2
  59. data/ext/pg_query/include/catalog/pg_authid_d.h +17 -9
  60. data/ext/pg_query/include/catalog/pg_class.h +44 -14
  61. data/ext/pg_query/include/catalog/pg_class_d.h +30 -1
  62. data/ext/pg_query/include/catalog/pg_collation.h +33 -8
  63. data/ext/pg_query/include/catalog/pg_collation_d.h +20 -3
  64. data/ext/pg_query/include/catalog/pg_constraint.h +38 -12
  65. data/ext/pg_query/include/catalog/pg_constraint_d.h +10 -4
  66. data/ext/pg_query/include/catalog/pg_control.h +3 -5
  67. data/ext/pg_query/include/catalog/pg_conversion.h +7 -4
  68. data/ext/pg_query/include/catalog/pg_conversion_d.h +4 -1
  69. data/ext/pg_query/include/catalog/pg_depend.h +11 -7
  70. data/ext/pg_query/include/catalog/pg_depend_d.h +3 -1
  71. data/ext/pg_query/include/catalog/pg_event_trigger.h +9 -3
  72. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +3 -1
  73. data/ext/pg_query/include/catalog/pg_index.h +17 -7
  74. data/ext/pg_query/include/catalog/pg_index_d.h +20 -17
  75. data/ext/pg_query/include/catalog/pg_language.h +10 -5
  76. data/ext/pg_query/include/catalog/pg_language_d.h +3 -1
  77. data/ext/pg_query/include/catalog/pg_namespace.h +7 -2
  78. data/ext/pg_query/include/catalog/pg_namespace_d.h +3 -1
  79. data/ext/pg_query/include/catalog/pg_opclass.h +8 -5
  80. data/ext/pg_query/include/catalog/pg_opclass_d.h +3 -1
  81. data/ext/pg_query/include/catalog/pg_operator.h +18 -15
  82. data/ext/pg_query/include/catalog/pg_operator_d.h +37 -1
  83. data/ext/pg_query/include/catalog/pg_opfamily.h +6 -3
  84. data/ext/pg_query/include/catalog/pg_opfamily_d.h +3 -1
  85. data/ext/pg_query/include/catalog/pg_parameter_acl.h +60 -0
  86. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +34 -0
  87. data/ext/pg_query/include/catalog/pg_partitioned_table.h +20 -9
  88. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +2 -1
  89. data/ext/pg_query/include/catalog/pg_proc.h +20 -11
  90. data/ext/pg_query/include/catalog/pg_proc_d.h +10 -8
  91. data/ext/pg_query/include/catalog/pg_publication.h +50 -7
  92. data/ext/pg_query/include/catalog/pg_publication_d.h +3 -1
  93. data/ext/pg_query/include/catalog/pg_replication_origin.h +6 -1
  94. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +5 -1
  95. data/ext/pg_query/include/catalog/pg_statistic.h +19 -12
  96. data/ext/pg_query/include/catalog/pg_statistic_d.h +2 -1
  97. data/ext/pg_query/include/catalog/pg_statistic_ext.h +19 -5
  98. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +7 -2
  99. data/ext/pg_query/include/catalog/pg_transform.h +8 -5
  100. data/ext/pg_query/include/catalog/pg_transform_d.h +3 -1
  101. data/ext/pg_query/include/catalog/pg_trigger.h +24 -8
  102. data/ext/pg_query/include/catalog/pg_trigger_d.h +4 -1
  103. data/ext/pg_query/include/catalog/pg_ts_config.h +6 -3
  104. data/ext/pg_query/include/catalog/pg_ts_config_d.h +3 -1
  105. data/ext/pg_query/include/catalog/pg_ts_dict.h +8 -3
  106. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +3 -1
  107. data/ext/pg_query/include/catalog/pg_ts_parser.h +6 -3
  108. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +3 -1
  109. data/ext/pg_query/include/catalog/pg_ts_template.h +6 -3
  110. data/ext/pg_query/include/catalog/pg_ts_template_d.h +3 -1
  111. data/ext/pg_query/include/catalog/pg_type.h +55 -24
  112. data/ext/pg_query/include/catalog/pg_type_d.h +70 -31
  113. data/ext/pg_query/include/catalog/storage.h +5 -3
  114. data/ext/pg_query/include/commands/async.h +3 -4
  115. data/ext/pg_query/include/commands/dbcommands.h +2 -1
  116. data/ext/pg_query/include/commands/defrem.h +11 -24
  117. data/ext/pg_query/include/commands/event_trigger.h +2 -2
  118. data/ext/pg_query/include/commands/explain.h +1 -1
  119. data/ext/pg_query/include/commands/prepare.h +1 -1
  120. data/ext/pg_query/include/commands/tablespace.h +2 -2
  121. data/ext/pg_query/include/commands/trigger.h +18 -16
  122. data/ext/pg_query/include/commands/user.h +2 -2
  123. data/ext/pg_query/include/commands/vacuum.h +88 -41
  124. data/ext/pg_query/include/commands/variable.h +1 -1
  125. data/ext/pg_query/include/common/file_perm.h +4 -4
  126. data/ext/pg_query/include/common/hashfn.h +1 -1
  127. data/ext/pg_query/include/common/ip.h +1 -7
  128. data/ext/pg_query/include/common/keywords.h +2 -6
  129. data/ext/pg_query/include/common/kwlookup.h +1 -1
  130. data/ext/pg_query/include/common/pg_prng.h +60 -0
  131. data/ext/pg_query/include/common/relpath.h +2 -2
  132. data/ext/pg_query/include/common/string.h +24 -1
  133. data/ext/pg_query/include/common/unicode_combining_table.h +114 -2
  134. data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +125 -0
  135. data/ext/pg_query/include/datatype/timestamp.h +40 -1
  136. data/ext/pg_query/include/executor/execdesc.h +1 -1
  137. data/ext/pg_query/include/executor/executor.h +65 -22
  138. data/ext/pg_query/include/executor/functions.h +17 -3
  139. data/ext/pg_query/include/executor/instrument.h +33 -16
  140. data/ext/pg_query/include/executor/spi.h +41 -3
  141. data/ext/pg_query/include/executor/tablefunc.h +1 -1
  142. data/ext/pg_query/include/executor/tuptable.h +1 -1
  143. data/ext/pg_query/include/fmgr.h +13 -7
  144. data/ext/pg_query/include/funcapi.h +16 -4
  145. data/ext/pg_query/include/getaddrinfo.h +1 -1
  146. data/ext/pg_query/include/jit/jit.h +11 -11
  147. data/ext/pg_query/include/kwlist_d.h +517 -494
  148. data/ext/pg_query/include/lib/dshash.h +112 -0
  149. data/ext/pg_query/include/lib/ilist.h +20 -1
  150. data/ext/pg_query/include/lib/pairingheap.h +1 -1
  151. data/ext/pg_query/include/lib/simplehash.h +140 -15
  152. data/ext/pg_query/include/lib/sort_template.h +432 -0
  153. data/ext/pg_query/include/lib/stringinfo.h +1 -1
  154. data/ext/pg_query/include/libpq/auth.h +6 -4
  155. data/ext/pg_query/include/libpq/crypt.h +5 -4
  156. data/ext/pg_query/include/libpq/hba.h +43 -4
  157. data/ext/pg_query/include/libpq/libpq-be.h +23 -6
  158. data/ext/pg_query/include/libpq/libpq.h +30 -20
  159. data/ext/pg_query/include/libpq/pqcomm.h +17 -31
  160. data/ext/pg_query/include/libpq/pqformat.h +1 -1
  161. data/ext/pg_query/include/libpq/pqsignal.h +4 -4
  162. data/ext/pg_query/include/mb/pg_wchar.h +105 -23
  163. data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
  164. data/ext/pg_query/include/miscadmin.h +47 -41
  165. data/ext/pg_query/include/nodes/bitmapset.h +1 -1
  166. data/ext/pg_query/include/nodes/execnodes.h +270 -78
  167. data/ext/pg_query/include/nodes/extensible.h +4 -2
  168. data/ext/pg_query/include/nodes/lockoptions.h +1 -1
  169. data/ext/pg_query/include/nodes/makefuncs.h +7 -6
  170. data/ext/pg_query/include/nodes/memnodes.h +5 -3
  171. data/ext/pg_query/include/nodes/nodeFuncs.h +1 -1
  172. data/ext/pg_query/include/nodes/nodes.h +30 -11
  173. data/ext/pg_query/include/nodes/params.h +1 -1
  174. data/ext/pg_query/include/nodes/parsenodes.h +322 -90
  175. data/ext/pg_query/include/nodes/pathnodes.h +243 -66
  176. data/ext/pg_query/include/nodes/pg_list.h +75 -69
  177. data/ext/pg_query/include/nodes/plannodes.h +111 -28
  178. data/ext/pg_query/include/nodes/primnodes.h +99 -47
  179. data/ext/pg_query/include/nodes/print.h +1 -1
  180. data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
  181. data/ext/pg_query/include/nodes/value.h +58 -39
  182. data/ext/pg_query/include/optimizer/cost.h +9 -2
  183. data/ext/pg_query/include/optimizer/geqo.h +9 -7
  184. data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
  185. data/ext/pg_query/include/optimizer/optimizer.h +25 -17
  186. data/ext/pg_query/include/optimizer/paths.h +6 -6
  187. data/ext/pg_query/include/optimizer/planmain.h +15 -14
  188. data/ext/pg_query/include/parser/analyze.h +19 -5
  189. data/ext/pg_query/include/parser/gram.h +947 -913
  190. data/ext/pg_query/include/parser/gramparse.h +1 -1
  191. data/ext/pg_query/include/parser/kwlist.h +463 -453
  192. data/ext/pg_query/include/parser/parse_agg.h +2 -7
  193. data/ext/pg_query/include/parser/parse_coerce.h +3 -1
  194. data/ext/pg_query/include/parser/parse_expr.h +2 -3
  195. data/ext/pg_query/include/parser/parse_func.h +2 -1
  196. data/ext/pg_query/include/parser/parse_node.h +21 -9
  197. data/ext/pg_query/include/parser/parse_oper.h +1 -3
  198. data/ext/pg_query/include/parser/parse_relation.h +5 -4
  199. data/ext/pg_query/include/parser/parse_type.h +1 -1
  200. data/ext/pg_query/include/parser/parser.h +31 -4
  201. data/ext/pg_query/include/parser/parsetree.h +1 -1
  202. data/ext/pg_query/include/parser/scanner.h +1 -1
  203. data/ext/pg_query/include/parser/scansup.h +2 -5
  204. data/ext/pg_query/include/partitioning/partdefs.h +1 -1
  205. data/ext/pg_query/include/pg_config.h +83 -41
  206. data/ext/pg_query/include/pg_config_manual.h +74 -21
  207. data/ext/pg_query/include/pg_getopt.h +6 -6
  208. data/ext/pg_query/include/pg_query.h +5 -4
  209. data/ext/pg_query/include/pg_query_enum_defs.c +358 -241
  210. data/ext/pg_query/include/pg_query_fingerprint_conds.c +44 -7
  211. data/ext/pg_query/include/pg_query_fingerprint_defs.c +939 -113
  212. data/ext/pg_query/include/pg_query_outfuncs_conds.c +43 -13
  213. data/ext/pg_query/include/pg_query_outfuncs_defs.c +151 -26
  214. data/ext/pg_query/include/pg_query_readfuncs_conds.c +11 -2
  215. data/ext/pg_query/include/pg_query_readfuncs_defs.c +173 -30
  216. data/ext/pg_query/include/pg_trace.h +1 -1
  217. data/ext/pg_query/include/pgstat.h +449 -1238
  218. data/ext/pg_query/include/pgtime.h +14 -4
  219. data/ext/pg_query/include/pl_gram.h +126 -128
  220. data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
  221. data/ext/pg_query/include/pl_reserved_kwlist_d.h +10 -10
  222. data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -3
  223. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +54 -56
  224. data/ext/pg_query/include/plerrcodes.h +9 -1
  225. data/ext/pg_query/include/plpgsql.h +52 -54
  226. data/ext/pg_query/include/port/atomics/arch-arm.h +7 -1
  227. data/ext/pg_query/include/port/atomics/arch-ppc.h +1 -1
  228. data/ext/pg_query/include/port/atomics/arch-x86.h +1 -1
  229. data/ext/pg_query/include/port/atomics/fallback.h +1 -1
  230. data/ext/pg_query/include/port/atomics/generic-gcc.h +3 -3
  231. data/ext/pg_query/include/port/atomics/generic.h +1 -1
  232. data/ext/pg_query/include/port/atomics.h +1 -1
  233. data/ext/pg_query/include/port/pg_bitutils.h +40 -10
  234. data/ext/pg_query/include/port/pg_bswap.h +1 -1
  235. data/ext/pg_query/include/port/pg_crc32c.h +1 -1
  236. data/ext/pg_query/include/port.h +71 -46
  237. data/ext/pg_query/include/portability/instr_time.h +1 -1
  238. data/ext/pg_query/include/postgres.h +60 -16
  239. data/ext/pg_query/include/postmaster/autovacuum.h +17 -17
  240. data/ext/pg_query/include/postmaster/auxprocess.h +20 -0
  241. data/ext/pg_query/include/postmaster/bgworker.h +2 -1
  242. data/ext/pg_query/include/postmaster/bgworker_internals.h +2 -2
  243. data/ext/pg_query/include/postmaster/bgwriter.h +5 -5
  244. data/ext/pg_query/include/postmaster/fork_process.h +1 -1
  245. data/ext/pg_query/include/postmaster/interrupt.h +1 -1
  246. data/ext/pg_query/include/postmaster/pgarch.h +42 -8
  247. data/ext/pg_query/include/postmaster/postmaster.h +18 -17
  248. data/ext/pg_query/include/postmaster/startup.h +39 -0
  249. data/ext/pg_query/include/postmaster/syslogger.h +15 -10
  250. data/ext/pg_query/include/postmaster/walwriter.h +3 -3
  251. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +1419 -914
  252. data/ext/pg_query/include/protobuf/pg_query.pb.h +43678 -32769
  253. data/ext/pg_query/include/regex/regex.h +18 -16
  254. data/ext/pg_query/include/replication/logicallauncher.h +3 -5
  255. data/ext/pg_query/include/replication/logicalproto.h +161 -17
  256. data/ext/pg_query/include/replication/logicalworker.h +1 -1
  257. data/ext/pg_query/include/replication/origin.h +7 -7
  258. data/ext/pg_query/include/replication/reorderbuffer.h +259 -42
  259. data/ext/pg_query/include/replication/slot.h +22 -11
  260. data/ext/pg_query/include/replication/syncrep.h +5 -5
  261. data/ext/pg_query/include/replication/walreceiver.h +145 -13
  262. data/ext/pg_query/include/replication/walsender.h +8 -8
  263. data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
  264. data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -3
  265. data/ext/pg_query/include/rewrite/rewriteManip.h +1 -1
  266. data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
  267. data/ext/pg_query/include/storage/backendid.h +3 -3
  268. data/ext/pg_query/include/storage/block.h +4 -10
  269. data/ext/pg_query/include/storage/buf.h +1 -1
  270. data/ext/pg_query/include/storage/bufmgr.h +19 -14
  271. data/ext/pg_query/include/storage/bufpage.h +6 -8
  272. data/ext/pg_query/include/storage/condition_variable.h +13 -2
  273. data/ext/pg_query/include/storage/dsm.h +4 -1
  274. data/ext/pg_query/include/storage/dsm_impl.h +3 -2
  275. data/ext/pg_query/include/storage/fd.h +33 -3
  276. data/ext/pg_query/include/storage/fileset.h +40 -0
  277. data/ext/pg_query/include/storage/ipc.h +4 -1
  278. data/ext/pg_query/include/storage/item.h +1 -1
  279. data/ext/pg_query/include/storage/itemid.h +1 -1
  280. data/ext/pg_query/include/storage/itemptr.h +3 -1
  281. data/ext/pg_query/include/storage/large_object.h +2 -2
  282. data/ext/pg_query/include/storage/latch.h +9 -13
  283. data/ext/pg_query/include/storage/lmgr.h +2 -1
  284. data/ext/pg_query/include/storage/lock.h +11 -8
  285. data/ext/pg_query/include/storage/lockdefs.h +2 -2
  286. data/ext/pg_query/include/storage/lwlock.h +5 -32
  287. data/ext/pg_query/include/storage/lwlocknames.h +0 -1
  288. data/ext/pg_query/include/storage/off.h +1 -1
  289. data/ext/pg_query/include/storage/pg_sema.h +1 -1
  290. data/ext/pg_query/include/storage/pg_shmem.h +9 -7
  291. data/ext/pg_query/include/storage/pmsignal.h +15 -4
  292. data/ext/pg_query/include/storage/predicate.h +4 -4
  293. data/ext/pg_query/include/storage/proc.h +173 -59
  294. data/ext/pg_query/include/storage/procarray.h +98 -0
  295. data/ext/pg_query/include/storage/proclist_types.h +1 -1
  296. data/ext/pg_query/include/storage/procsignal.h +3 -7
  297. data/ext/pg_query/include/storage/relfilenode.h +1 -1
  298. data/ext/pg_query/include/storage/s_lock.h +60 -21
  299. data/ext/pg_query/include/storage/sharedfileset.h +3 -11
  300. data/ext/pg_query/include/storage/shm_mq.h +5 -4
  301. data/ext/pg_query/include/storage/shm_toc.h +1 -1
  302. data/ext/pg_query/include/storage/shmem.h +1 -1
  303. data/ext/pg_query/include/storage/sinval.h +3 -3
  304. data/ext/pg_query/include/storage/sinvaladt.h +1 -1
  305. data/ext/pg_query/include/storage/smgr.h +10 -8
  306. data/ext/pg_query/include/storage/spin.h +2 -2
  307. data/ext/pg_query/include/storage/standby.h +13 -6
  308. data/ext/pg_query/include/storage/standbydefs.h +2 -2
  309. data/ext/pg_query/include/storage/sync.h +7 -3
  310. data/ext/pg_query/include/tcop/cmdtag.h +1 -1
  311. data/ext/pg_query/include/tcop/cmdtaglist.h +3 -2
  312. data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
  313. data/ext/pg_query/include/tcop/dest.h +1 -1
  314. data/ext/pg_query/include/tcop/fastpath.h +1 -2
  315. data/ext/pg_query/include/tcop/pquery.h +1 -1
  316. data/ext/pg_query/include/tcop/tcopprot.h +19 -11
  317. data/ext/pg_query/include/tcop/utility.h +7 -3
  318. data/ext/pg_query/include/tsearch/ts_cache.h +2 -2
  319. data/ext/pg_query/include/utils/acl.h +24 -3
  320. data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
  321. data/ext/pg_query/include/utils/array.h +7 -2
  322. data/ext/pg_query/include/utils/backend_progress.h +44 -0
  323. data/ext/pg_query/include/utils/backend_status.h +321 -0
  324. data/ext/pg_query/include/utils/builtins.h +10 -11
  325. data/ext/pg_query/include/utils/bytea.h +3 -2
  326. data/ext/pg_query/include/utils/catcache.h +1 -1
  327. data/ext/pg_query/include/utils/date.h +1 -1
  328. data/ext/pg_query/include/utils/datetime.h +8 -7
  329. data/ext/pg_query/include/utils/datum.h +9 -1
  330. data/ext/pg_query/include/utils/dsa.h +1 -1
  331. data/ext/pg_query/include/utils/dynahash.h +4 -3
  332. data/ext/pg_query/include/utils/elog.h +52 -21
  333. data/ext/pg_query/include/utils/errcodes.h +2 -0
  334. data/ext/pg_query/include/utils/expandeddatum.h +1 -1
  335. data/ext/pg_query/include/utils/expandedrecord.h +1 -1
  336. data/ext/pg_query/include/utils/float.h +7 -7
  337. data/ext/pg_query/include/utils/fmgroids.h +1300 -696
  338. data/ext/pg_query/include/utils/fmgrprotos.h +199 -16
  339. data/ext/pg_query/include/utils/fmgrtab.h +6 -5
  340. data/ext/pg_query/include/utils/guc.h +69 -43
  341. data/ext/pg_query/include/utils/guc_tables.h +23 -19
  342. data/ext/pg_query/include/utils/hsearch.h +15 -11
  343. data/ext/pg_query/include/utils/inval.h +4 -1
  344. data/ext/pg_query/include/utils/lsyscache.h +11 -1
  345. data/ext/pg_query/include/utils/memdebug.h +1 -1
  346. data/ext/pg_query/include/utils/memutils.h +8 -3
  347. data/ext/pg_query/include/utils/numeric.h +19 -5
  348. data/ext/pg_query/include/utils/palloc.h +25 -3
  349. data/ext/pg_query/include/utils/partcache.h +1 -1
  350. data/ext/pg_query/include/utils/pg_locale.h +17 -9
  351. data/ext/pg_query/include/utils/pg_lsn.h +1 -1
  352. data/ext/pg_query/include/utils/pgstat_internal.h +784 -0
  353. data/ext/pg_query/include/utils/pidfile.h +1 -1
  354. data/ext/pg_query/include/utils/plancache.h +6 -5
  355. data/ext/pg_query/include/utils/portal.h +10 -12
  356. data/ext/pg_query/include/utils/ps_status.h +1 -1
  357. data/ext/pg_query/include/utils/queryenvironment.h +1 -1
  358. data/ext/pg_query/include/utils/queryjumble.h +88 -0
  359. data/ext/pg_query/include/utils/regproc.h +14 -3
  360. data/ext/pg_query/include/utils/rel.h +71 -19
  361. data/ext/pg_query/include/utils/relcache.h +8 -5
  362. data/ext/pg_query/include/utils/reltrigger.h +1 -1
  363. data/ext/pg_query/include/utils/resowner.h +1 -1
  364. data/ext/pg_query/include/utils/rls.h +2 -2
  365. data/ext/pg_query/include/utils/ruleutils.h +4 -1
  366. data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
  367. data/ext/pg_query/include/utils/snapmgr.h +34 -14
  368. data/ext/pg_query/include/utils/snapshot.h +14 -1
  369. data/ext/pg_query/include/utils/sortsupport.h +117 -2
  370. data/ext/pg_query/include/utils/syscache.h +6 -1
  371. data/ext/pg_query/include/utils/timeout.h +11 -4
  372. data/ext/pg_query/include/utils/timestamp.h +6 -5
  373. data/ext/pg_query/include/utils/tuplesort.h +25 -11
  374. data/ext/pg_query/include/utils/tuplestore.h +2 -2
  375. data/ext/pg_query/include/utils/typcache.h +24 -17
  376. data/ext/pg_query/include/utils/tzparser.h +1 -1
  377. data/ext/pg_query/include/utils/varlena.h +5 -3
  378. data/ext/pg_query/include/utils/wait_event.h +289 -0
  379. data/ext/pg_query/include/utils/xml.h +4 -4
  380. data/ext/pg_query/pg_query.pb-c.c +4302 -2304
  381. data/ext/pg_query/pg_query_deparse.c +1106 -373
  382. data/ext/pg_query/pg_query_fingerprint.c +30 -10
  383. data/ext/pg_query/pg_query_json_plpgsql.c +0 -25
  384. data/ext/pg_query/pg_query_normalize.c +1 -1
  385. data/ext/pg_query/pg_query_outfuncs_json.c +54 -16
  386. data/ext/pg_query/pg_query_outfuncs_protobuf.c +70 -10
  387. data/ext/pg_query/pg_query_parse.c +1 -1
  388. data/ext/pg_query/pg_query_readfuncs_protobuf.c +42 -8
  389. data/ext/pg_query/pg_query_scan.c +2 -1
  390. data/ext/pg_query/pg_query_split.c +3 -2
  391. data/ext/pg_query/src_backend_catalog_namespace.c +20 -9
  392. data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
  393. data/ext/pg_query/src_backend_commands_define.c +11 -1
  394. data/ext/pg_query/src_backend_nodes_bitmapset.c +3 -1
  395. data/ext/pg_query/src_backend_nodes_copyfuncs.c +401 -76
  396. data/ext/pg_query/src_backend_nodes_equalfuncs.c +290 -46
  397. data/ext/pg_query/src_backend_nodes_extensible.c +1 -1
  398. data/ext/pg_query/src_backend_nodes_list.c +74 -11
  399. data/ext/pg_query/src_backend_nodes_makefuncs.c +5 -4
  400. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +55 -12
  401. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  402. data/ext/pg_query/src_backend_parser_gram.c +33874 -31261
  403. data/ext/pg_query/src_backend_parser_parser.c +26 -7
  404. data/ext/pg_query/src_backend_parser_scan.c +172 -209
  405. data/ext/pg_query/src_backend_parser_scansup.c +4 -28
  406. data/ext/pg_query/src_backend_postmaster_postmaster.c +77 -106
  407. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  408. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +5 -4
  409. data/ext/pg_query/src_backend_tcop_postgres.c +62 -23
  410. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  411. data/ext/pg_query/src_backend_utils_adt_datum.c +13 -1
  412. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  413. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  414. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +71 -5
  415. data/ext/pg_query/src_backend_utils_error_assert.c +16 -14
  416. data/ext/pg_query/src_backend_utils_error_elog.c +172 -99
  417. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +12 -17
  418. data/ext/pg_query/src_backend_utils_hash_dynahash.c +40 -10
  419. data/ext/pg_query/src_backend_utils_init_globals.c +5 -5
  420. data/ext/pg_query/src_backend_utils_mb_mbutils.c +55 -66
  421. data/ext/pg_query/src_backend_utils_misc_guc.c +206 -45
  422. data/ext/pg_query/src_backend_utils_mmgr_aset.c +7 -5
  423. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +123 -35
  424. data/ext/pg_query/src_common_encnames.c +1 -1
  425. data/ext/pg_query/src_common_hashfn.c +3 -3
  426. data/ext/pg_query/src_common_keywords.c +15 -2
  427. data/ext/pg_query/src_common_kwlist_d.h +517 -494
  428. data/ext/pg_query/src_common_kwlookup.c +1 -1
  429. data/ext/pg_query/src_common_pg_prng.c +152 -0
  430. data/ext/pg_query/src_common_psprintf.c +1 -1
  431. data/ext/pg_query/src_common_string.c +7 -1
  432. data/ext/pg_query/src_common_stringinfo.c +1 -1
  433. data/ext/pg_query/src_common_wchar.c +701 -109
  434. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +45 -20
  435. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +1 -18
  436. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1233 -1259
  437. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  438. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  439. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
  440. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +54 -56
  441. data/ext/pg_query/src_port_pg_bitutils.c +41 -31
  442. data/ext/pg_query/src_port_pgsleep.c +1 -1
  443. data/ext/pg_query/src_port_pgstrcasecmp.c +1 -1
  444. data/ext/pg_query/src_port_qsort.c +12 -224
  445. data/ext/pg_query/src_port_snprintf.c +37 -13
  446. data/ext/pg_query/src_port_strerror.c +9 -19
  447. data/ext/pg_query/src_port_strnlen.c +1 -1
  448. data/lib/pg_query/filter_columns.rb +1 -1
  449. data/lib/pg_query/fingerprint.rb +5 -1
  450. data/lib/pg_query/node.rb +2 -2
  451. data/lib/pg_query/param_refs.rb +1 -1
  452. data/lib/pg_query/parse.rb +20 -8
  453. data/lib/pg_query/pg_query_pb.rb +1108 -942
  454. data/lib/pg_query/treewalker.rb +6 -0
  455. data/lib/pg_query/truncate.rb +1 -1
  456. data/lib/pg_query/version.rb +1 -1
  457. metadata +27 -17
  458. data/ext/pg_query/include/access/xloginsert.h +0 -64
  459. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  460. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  461. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  462. data/ext/pg_query/include/parser/parse_target.h +0 -46
  463. data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -2
  464. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -659
  465. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  466. data/ext/pg_query/src_port_erand48.c +0 -127
  467. data/ext/pg_query/src_port_random.c +0 -31
@@ -10,7 +10,7 @@
10
10
  * pl_handler.c - Handler for the PL/pgSQL
11
11
  * procedural language
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
  *
@@ -12,7 +12,7 @@
12
12
  * pl_reserved_kwlist_d.h
13
13
  * List of keywords represented as a ScanKeywordList.
14
14
  *
15
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
15
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
16
16
  * Portions Copyright (c) 1994, Regents of the University of California
17
17
  *
18
18
  * NOTES
@@ -89,13 +89,13 @@ static int
89
89
  ReservedPLKeywords_hash_func(const void *key, size_t keylen)
90
90
  {
91
91
  static const int8 h[49] = {
92
- -2, 127, 7, 127, 0, 127, 127, 127,
93
- 18, 5, 127, 27, 127, 0, 127, 127,
94
- 0, 39, 32, 22, 10, 127, 19, -26,
95
- 127, -11, 0, 12, 127, 127, -1, 28,
96
- 20, 0, 23, 127, 0, 14, -8, 127,
97
- 127, 127, 13, 5, 127, -23, 1, 0,
98
- 127,
92
+ 127, 7, 127, 127, -2, 127, 13, 127,
93
+ 127, 5, 0, 23, 0, 2, 127, 0,
94
+ 17, 0, 127, 19, 5, 127, 6, 2,
95
+ -3, 17, 0, 6, 127, 8, 18, 127,
96
+ -6, 3, -5, 0, 127, 0, 0, 11,
97
+ 15, 127, 127, 127, 13, 127, 0, 17,
98
+ 127
99
99
  };
100
100
 
101
101
  const unsigned char *k = (const unsigned char *) key;
@@ -106,8 +106,8 @@ ReservedPLKeywords_hash_func(const void *key, size_t keylen)
106
106
  {
107
107
  unsigned char c = *k++ | 0x20;
108
108
 
109
- a = a * 31 + c;
110
- b = b * 127 + c;
109
+ a = a * 257 + c;
110
+ b = b * 8191 + c;
111
111
  }
112
112
  return h[a % 49] + h[b % 49];
113
113
  }
@@ -23,8 +23,8 @@
23
23
  * - plpgsql_scanner_errposition
24
24
  * - plpgsql_yyerror
25
25
  * - plpgsql_push_back_token
26
- * - plpgsql_token_is_unreserved_keyword
27
26
  * - plpgsql_peek
27
+ * - plpgsql_token_is_unreserved_keyword
28
28
  * - plpgsql_append_source_text
29
29
  * - plpgsql_peek2
30
30
  * - plpgsql_scanner_finish
@@ -38,7 +38,7 @@
38
38
  * lexical scanning for PL/pgSQL
39
39
  *
40
40
  *
41
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
41
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
42
42
  * Portions Copyright (c) 1994, Regents of the University of California
43
43
  *
44
44
  *
@@ -12,7 +12,7 @@
12
12
  * pl_unreserved_kwlist_d.h
13
13
  * List of keywords represented as a ScanKeywordList.
14
14
  *
15
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
15
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
16
16
  * Portions Copyright (c) 1994, Regents of the University of California
17
17
  *
18
18
  * NOTES
@@ -74,6 +74,7 @@ static const char UnreservedPLKeywords_kw_string[] =
74
74
  "is\0"
75
75
  "last\0"
76
76
  "log\0"
77
+ "merge\0"
77
78
  "message\0"
78
79
  "message_text\0"
79
80
  "move\0"
@@ -93,7 +94,6 @@ static const char UnreservedPLKeywords_kw_string[] =
93
94
  "query\0"
94
95
  "raise\0"
95
96
  "relative\0"
96
- "reset\0"
97
97
  "return\0"
98
98
  "returned_sqlstate\0"
99
99
  "reverse\0"
@@ -103,7 +103,6 @@ static const char UnreservedPLKeywords_kw_string[] =
103
103
  "schema\0"
104
104
  "schema_name\0"
105
105
  "scroll\0"
106
- "set\0"
107
106
  "slice\0"
108
107
  "sqlstate\0"
109
108
  "stacked\0"
@@ -160,25 +159,25 @@ static const uint16 UnreservedPLKeywords_kw_offsets[] = {
160
159
  295,
161
160
  300,
162
161
  304,
163
- 312,
164
- 325,
165
- 330,
166
- 335,
167
- 338,
168
- 345,
169
- 350,
170
- 357,
171
- 365,
172
- 376,
173
- 393,
174
- 414,
175
- 434,
176
- 452,
177
- 472,
162
+ 310,
163
+ 318,
164
+ 331,
165
+ 336,
166
+ 341,
167
+ 344,
168
+ 351,
169
+ 356,
170
+ 363,
171
+ 371,
172
+ 382,
173
+ 399,
174
+ 420,
175
+ 440,
176
+ 458,
178
177
  478,
179
178
  484,
180
179
  490,
181
- 499,
180
+ 496,
182
181
  505,
183
182
  512,
184
183
  530,
@@ -189,59 +188,58 @@ static const uint16 UnreservedPLKeywords_kw_offsets[] = {
189
188
  572,
190
189
  584,
191
190
  591,
192
- 595,
193
- 601,
194
- 610,
195
- 618,
196
- 624,
197
- 635,
198
- 640,
199
- 651,
200
- 664,
201
- 682,
191
+ 597,
192
+ 606,
193
+ 614,
194
+ 620,
195
+ 631,
196
+ 636,
197
+ 647,
198
+ 660,
199
+ 678,
202
200
  };
203
201
 
204
- #define UNRESERVEDPLKEYWORDS_NUM_KEYWORDS 83
202
+ #define UNRESERVEDPLKEYWORDS_NUM_KEYWORDS 82
205
203
 
206
204
  static int
207
205
  UnreservedPLKeywords_hash_func(const void *key, size_t keylen)
208
206
  {
209
- static const int16 h[167] = {
210
- 10, 32767, 32767, 57, 32767, 62, 21, 32767,
211
- 54, 18, 32767, 58, 59, -54, 47, 0,
212
- -22, -64, 32767, -22, 33, 44, -5, 32767,
213
- 32767, 43, 57, 102, 32767, -65, 7, 32767,
214
- 13, 32767, -28, 14, 32767, 32767, 82, 32767,
215
- 0, 0, 32767, 8, -43, 0, 19, 8,
216
- 75, -58, 32767, 32767, 0, 22, 29, 32767,
217
- -50, 6, 32767, 0, 30, 32767, 32767, 29,
218
- 0, 104, 32767, 32767, 26, 0, 32767, 32767,
219
- -9, 2, 32767, 50, 39, 38, 39, 80,
220
- 32767, 32767, 32767, 32767, -67, 89, 32767, -40,
221
- 64, 32767, 32767, 26, 10, 27, 32767, 19,
222
- 51, -13, 26, 32767, 32767, 32767, 84, 23,
223
- 0, 66, 12, -5, 32767, 32767, 0, 50,
224
- 141, 72, 45, 32767, 32767, 0, -22, 0,
225
- 32767, 32767, -34, 0, 19, -5, 32767, 32767,
226
- 32767, 0, 37, 13, 32767, 32767, 32767, 32767,
227
- -68, -4, 32767, 32767, 78, 32767, 32767, 0,
228
- 85, 32767, 32767, 32767, -93, 32767, 0, 0,
229
- 32767, 74, 5, 32767, 32767, 71, 0, 32767,
230
- 32767, 0, 32767, 32767, 32767, 46, 70,
207
+ static const int16 h[165] = {
208
+ 58, 0, 26, 32767, 0, 0, 9, 32767,
209
+ 0, 32767, 37, 74, 32767, -7, 32767, 39,
210
+ 58, -5, 32767, 31, 32767, 32767, 75, -23,
211
+ 32767, 0, 32767, 32767, 32767, -14, 32767, 81,
212
+ 32767, 32767, 32767, -36, -9, 32767, 32767, 32767,
213
+ 40, 32767, 54, 10, 11, 43, 32767, 0,
214
+ 52, 105, -22, 15, 32767, -33, 49, -65,
215
+ 48, 32767, 32767, 32767, 25, 49, -47, 37,
216
+ 21, 32767, 32767, -15, 70, 32767, 32767, 64,
217
+ -10, 126, 32767, 51, 0, 36, 32767, -55,
218
+ -22, 32767, 32767, 32767, 32767, 32767, -26, -35,
219
+ 32767, 61, 32767, 32767, 32767, -23, 98, 48,
220
+ 23, 19, 32767, 7, 35, 5, -18, 71,
221
+ 28, 5, 32767, 32767, 32767, 74, 32767, 82,
222
+ 32767, 0, 32767, 32767, 66, 0, 0, 50,
223
+ 32767, 32767, 5, 2, 0, 32767, 55, 32767,
224
+ 32767, 45, 79, 32767, 32767, 73, 22, 0,
225
+ 103, 32767, -20, 72, 32767, 0, 29, 32767,
226
+ 0, 32767, 32767, 0, 50, 28, 32767, -40,
227
+ 32767, 32767, 34, 56, 32767, 32767, 32767, 17,
228
+ -36, 32767, 67, 32767, 0
231
229
  };
232
230
 
233
231
  const unsigned char *k = (const unsigned char *) key;
234
232
  uint32 a = 0;
235
- uint32 b = 1;
233
+ uint32 b = 0;
236
234
 
237
235
  while (keylen--)
238
236
  {
239
237
  unsigned char c = *k++ | 0x20;
240
238
 
241
- a = a * 31 + c;
242
- b = b * 127 + c;
239
+ a = a * 257 + c;
240
+ b = b * 8191 + c;
243
241
  }
244
- return h[a % 167] + h[b % 167];
242
+ return h[a % 165] + h[b % 165];
245
243
  }
246
244
 
247
245
  static const ScanKeywordList UnreservedPLKeywords = {
@@ -10,7 +10,7 @@
10
10
  * pg_bitutils.c
11
11
  * Miscellaneous functions for bit-wise operations.
12
12
  *
13
- * Copyright (c) 2019-2020, PostgreSQL Global Development Group
13
+ * Copyright (c) 2019-2022, PostgreSQL Global Development Group
14
14
  *
15
15
  * IDENTIFICATION
16
16
  * src/port/pg_bitutils.c
@@ -59,37 +59,21 @@
59
59
  */
60
60
 
61
61
 
62
- /*
63
- * On x86_64, we can use the hardware popcount instruction, but only if
64
- * we can verify that the CPU supports it via the cpuid instruction.
65
- *
66
- * Otherwise, we fall back to __builtin_popcount if the compiler has that,
67
- * or a hand-rolled implementation if not.
68
- */
69
- #ifdef HAVE_X86_64_POPCNTQ
70
- #if defined(HAVE__GET_CPUID) || defined(HAVE__CPUID)
71
- #define USE_POPCNT_ASM 1
72
- #endif
73
- #endif
74
-
75
62
  static int pg_popcount32_slow(uint32 word);
76
63
  static int pg_popcount64_slow(uint64 word);
77
64
 
78
- #ifdef USE_POPCNT_ASM
65
+ #ifdef TRY_POPCNT_FAST
79
66
  static bool pg_popcount_available(void);
80
67
  static int pg_popcount32_choose(uint32 word);
81
68
  static int pg_popcount64_choose(uint64 word);
82
- static int pg_popcount32_asm(uint32 word);
83
- static int pg_popcount64_asm(uint64 word);
69
+ static int pg_popcount32_fast(uint32 word);
70
+ static int pg_popcount64_fast(uint64 word);
84
71
 
85
72
  int (*pg_popcount32) (uint32 word) = pg_popcount32_choose;
86
73
  int (*pg_popcount64) (uint64 word) = pg_popcount64_choose;
87
- #else
88
-
89
- int (*pg_popcount64) (uint64 word) = pg_popcount64_slow;
90
- #endif /* USE_POPCNT_ASM */
74
+ #endif /* TRY_POPCNT_FAST */
91
75
 
92
- #ifdef USE_POPCNT_ASM
76
+ #ifdef TRY_POPCNT_FAST
93
77
 
94
78
  /*
95
79
  * Return true if CPUID indicates that the POPCNT instruction is available.
@@ -121,8 +105,8 @@ pg_popcount32_choose(uint32 word)
121
105
  {
122
106
  if (pg_popcount_available())
123
107
  {
124
- pg_popcount32 = pg_popcount32_asm;
125
- pg_popcount64 = pg_popcount64_asm;
108
+ pg_popcount32 = pg_popcount32_fast;
109
+ pg_popcount64 = pg_popcount64_fast;
126
110
  }
127
111
  else
128
112
  {
@@ -138,8 +122,8 @@ pg_popcount64_choose(uint64 word)
138
122
  {
139
123
  if (pg_popcount_available())
140
124
  {
141
- pg_popcount32 = pg_popcount32_asm;
142
- pg_popcount64 = pg_popcount64_asm;
125
+ pg_popcount32 = pg_popcount32_fast;
126
+ pg_popcount64 = pg_popcount64_fast;
143
127
  }
144
128
  else
145
129
  {
@@ -151,32 +135,40 @@ pg_popcount64_choose(uint64 word)
151
135
  }
152
136
 
153
137
  /*
154
- * pg_popcount32_asm
138
+ * pg_popcount32_fast
155
139
  * Return the number of 1 bits set in word
156
140
  */
157
141
  static int
158
- pg_popcount32_asm(uint32 word)
142
+ pg_popcount32_fast(uint32 word)
159
143
  {
144
+ #ifdef _MSC_VER
145
+ return __popcnt(word);
146
+ #else
160
147
  uint32 res;
161
148
 
162
149
  __asm__ __volatile__(" popcntl %1,%0\n":"=q"(res):"rm"(word):"cc");
163
150
  return (int) res;
151
+ #endif
164
152
  }
165
153
 
166
154
  /*
167
- * pg_popcount64_asm
155
+ * pg_popcount64_fast
168
156
  * Return the number of 1 bits set in word
169
157
  */
170
158
  static int
171
- pg_popcount64_asm(uint64 word)
159
+ pg_popcount64_fast(uint64 word)
172
160
  {
161
+ #ifdef _MSC_VER
162
+ return __popcnt64(word);
163
+ #else
173
164
  uint64 res;
174
165
 
175
166
  __asm__ __volatile__(" popcntq %1,%0\n":"=q"(res):"rm"(word):"cc");
176
167
  return (int) res;
168
+ #endif
177
169
  }
178
170
 
179
- #endif /* USE_POPCNT_ASM */
171
+ #endif /* TRY_POPCNT_FAST */
180
172
 
181
173
 
182
174
  /*
@@ -215,6 +207,24 @@ pg_popcount64_slow(uint64 word)
215
207
  #endif /* HAVE__BUILTIN_POPCOUNT */
216
208
  }
217
209
 
210
+ #ifndef TRY_POPCNT_FAST
211
+
212
+ /*
213
+ * When the POPCNT instruction is not available, there's no point in using
214
+ * function pointers to vary the implementation between the fast and slow
215
+ * method. We instead just make these actual external functions when
216
+ * TRY_POPCNT_FAST is not defined. The compiler should be able to inline
217
+ * the slow versions here.
218
+ */
219
+
220
+
221
+ int
222
+ pg_popcount64(uint64 word)
223
+ {
224
+ return pg_popcount64_slow(word);
225
+ }
226
+
227
+ #endif /* !TRY_POPCNT_FAST */
218
228
 
219
229
  /*
220
230
  * pg_popcount
@@ -10,7 +10,7 @@
10
10
  * Portable delay handling.
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
  *
15
15
  * src/port/pgsleep.c
16
16
  *
@@ -24,7 +24,7 @@
24
24
  * C library thinks the locale is.
25
25
  *
26
26
  *
27
- * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
27
+ * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
28
28
  *
29
29
  * src/port/pgstrcasecmp.c
30
30
  *
@@ -1,240 +1,28 @@
1
1
  /*--------------------------------------------------------------------
2
2
  * Symbols referenced in this file:
3
- * - pg_qsort
4
- * - pg_qsort
5
- * - swapfunc
6
- * - med3
3
+ * - pg_qsort_strcmp
7
4
  *--------------------------------------------------------------------
8
5
  */
9
6
 
10
7
  /*
11
8
  * qsort.c: standard quicksort algorithm
12
- *
13
- * Modifications from vanilla NetBSD source:
14
- * Add do ... while() macro fix
15
- * Remove __inline, _DIAGASSERTs, __P
16
- * Remove ill-considered "swap_cnt" switch to insertion sort,
17
- * in favor of a simple check for presorted input.
18
- * Take care to recurse on the smaller partition, to bound stack usage.
19
- *
20
- * CAUTION: if you change this file, see also qsort_arg.c, gen_qsort_tuple.pl
21
- *
22
- * src/port/qsort.c
23
- */
24
-
25
- /* $NetBSD: qsort.c,v 1.13 2003/08/07 16:43:42 agc Exp $ */
26
-
27
- /*-
28
- * Copyright (c) 1992, 1993
29
- * The Regents of the University of California. All rights reserved.
30
- *
31
- * Redistribution and use in source and binary forms, with or without
32
- * modification, are permitted provided that the following conditions
33
- * are met:
34
- * 1. Redistributions of source code must retain the above copyright
35
- * notice, this list of conditions and the following disclaimer.
36
- * 2. Redistributions in binary form must reproduce the above copyright
37
- * notice, this list of conditions and the following disclaimer in the
38
- * documentation and/or other materials provided with the distribution.
39
- * 3. Neither the name of the University nor the names of its contributors
40
- * may be used to endorse or promote products derived from this software
41
- * without specific prior written permission.
42
- *
43
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
44
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
45
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
46
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
47
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
48
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
49
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
50
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
51
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
52
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
53
- * SUCH DAMAGE.
54
9
  */
55
10
 
56
11
  #include "c.h"
57
12
 
58
-
59
- static char *med3(char *a, char *b, char *c,
60
- int (*cmp) (const void *, const void *));
61
- static void swapfunc(char *, char *, size_t, int);
13
+ #define ST_SORT pg_qsort
14
+ #define ST_ELEMENT_TYPE_VOID
15
+ #define ST_COMPARE_RUNTIME_POINTER
16
+ #define ST_SCOPE
17
+ #define ST_DECLARE
18
+ #define ST_DEFINE
19
+ #include "lib/sort_template.h"
62
20
 
63
21
  /*
64
- * Qsort routine based on J. L. Bentley and M. D. McIlroy,
65
- * "Engineering a sort function",
66
- * Software--Practice and Experience 23 (1993) 1249-1265.
67
- *
68
- * We have modified their original by adding a check for already-sorted input,
69
- * which seems to be a win per discussions on pgsql-hackers around 2006-03-21.
70
- *
71
- * Also, we recurse on the smaller partition and iterate on the larger one,
72
- * which ensures we cannot recurse more than log(N) levels (since the
73
- * partition recursed to is surely no more than half of the input). Bentley
74
- * and McIlroy explicitly rejected doing this on the grounds that it's "not
75
- * worth the effort", but we have seen crashes in the field due to stack
76
- * overrun, so that judgment seems wrong.
22
+ * qsort comparator wrapper for strcmp.
77
23
  */
78
-
79
- #define swapcode(TYPE, parmi, parmj, n) \
80
- do { \
81
- size_t i = (n) / sizeof (TYPE); \
82
- TYPE *pi = (TYPE *)(void *)(parmi); \
83
- TYPE *pj = (TYPE *)(void *)(parmj); \
84
- do { \
85
- TYPE t = *pi; \
86
- *pi++ = *pj; \
87
- *pj++ = t; \
88
- } while (--i > 0); \
89
- } while (0)
90
-
91
- #define SWAPINIT(a, es) swaptype = ((char *)(a) - (char *)0) % sizeof(long) || \
92
- (es) % sizeof(long) ? 2 : (es) == sizeof(long)? 0 : 1
93
-
94
- static void
95
- swapfunc(char *a, char *b, size_t n, int swaptype)
24
+ int
25
+ pg_qsort_strcmp(const void *a, const void *b)
96
26
  {
97
- if (swaptype <= 1)
98
- swapcode(long, a, b, n);
99
- else
100
- swapcode(char, a, b, n);
27
+ return strcmp(*(const char *const *) a, *(const char *const *) b);
101
28
  }
102
-
103
- #define swap(a, b) \
104
- if (swaptype == 0) { \
105
- long t = *(long *)(void *)(a); \
106
- *(long *)(void *)(a) = *(long *)(void *)(b); \
107
- *(long *)(void *)(b) = t; \
108
- } else \
109
- swapfunc(a, b, es, swaptype)
110
-
111
- #define vecswap(a, b, n) if ((n) > 0) swapfunc(a, b, n, swaptype)
112
-
113
- static char *
114
- med3(char *a, char *b, char *c, int (*cmp) (const void *, const void *))
115
- {
116
- return cmp(a, b) < 0 ?
117
- (cmp(b, c) < 0 ? b : (cmp(a, c) < 0 ? c : a))
118
- : (cmp(b, c) > 0 ? b : (cmp(a, c) < 0 ? a : c));
119
- }
120
-
121
- void
122
- pg_qsort(void *a, size_t n, size_t es, int (*cmp) (const void *, const void *))
123
- {
124
- char *pa,
125
- *pb,
126
- *pc,
127
- *pd,
128
- *pl,
129
- *pm,
130
- *pn;
131
- size_t d1,
132
- d2;
133
- int r,
134
- swaptype,
135
- presorted;
136
-
137
- loop:SWAPINIT(a, es);
138
- if (n < 7)
139
- {
140
- for (pm = (char *) a + es; pm < (char *) a + n * es; pm += es)
141
- for (pl = pm; pl > (char *) a && cmp(pl - es, pl) > 0;
142
- pl -= es)
143
- swap(pl, pl - es);
144
- return;
145
- }
146
- presorted = 1;
147
- for (pm = (char *) a + es; pm < (char *) a + n * es; pm += es)
148
- {
149
- if (cmp(pm - es, pm) > 0)
150
- {
151
- presorted = 0;
152
- break;
153
- }
154
- }
155
- if (presorted)
156
- return;
157
- pm = (char *) a + (n / 2) * es;
158
- if (n > 7)
159
- {
160
- pl = (char *) a;
161
- pn = (char *) a + (n - 1) * es;
162
- if (n > 40)
163
- {
164
- size_t d = (n / 8) * es;
165
-
166
- pl = med3(pl, pl + d, pl + 2 * d, cmp);
167
- pm = med3(pm - d, pm, pm + d, cmp);
168
- pn = med3(pn - 2 * d, pn - d, pn, cmp);
169
- }
170
- pm = med3(pl, pm, pn, cmp);
171
- }
172
- swap(a, pm);
173
- pa = pb = (char *) a + es;
174
- pc = pd = (char *) a + (n - 1) * es;
175
- for (;;)
176
- {
177
- while (pb <= pc && (r = cmp(pb, a)) <= 0)
178
- {
179
- if (r == 0)
180
- {
181
- swap(pa, pb);
182
- pa += es;
183
- }
184
- pb += es;
185
- }
186
- while (pb <= pc && (r = cmp(pc, a)) >= 0)
187
- {
188
- if (r == 0)
189
- {
190
- swap(pc, pd);
191
- pd -= es;
192
- }
193
- pc -= es;
194
- }
195
- if (pb > pc)
196
- break;
197
- swap(pb, pc);
198
- pb += es;
199
- pc -= es;
200
- }
201
- pn = (char *) a + n * es;
202
- d1 = Min(pa - (char *) a, pb - pa);
203
- vecswap(a, pb - d1, d1);
204
- d1 = Min(pd - pc, pn - pd - es);
205
- vecswap(pb, pn - d1, d1);
206
- d1 = pb - pa;
207
- d2 = pd - pc;
208
- if (d1 <= d2)
209
- {
210
- /* Recurse on left partition, then iterate on right partition */
211
- if (d1 > es)
212
- pg_qsort(a, d1 / es, es, cmp);
213
- if (d2 > es)
214
- {
215
- /* Iterate rather than recurse to save stack space */
216
- /* pg_qsort(pn - d2, d2 / es, es, cmp); */
217
- a = pn - d2;
218
- n = d2 / es;
219
- goto loop;
220
- }
221
- }
222
- else
223
- {
224
- /* Recurse on right partition, then iterate on left partition */
225
- if (d2 > es)
226
- pg_qsort(pn - d2, d2 / es, es, cmp);
227
- if (d1 > es)
228
- {
229
- /* Iterate rather than recurse to save stack space */
230
- /* pg_qsort(a, d1 / es, es, cmp); */
231
- n = d1 / es;
232
- goto loop;
233
- }
234
- }
235
- }
236
-
237
- /*
238
- * qsort comparator wrapper for strcmp.
239
- */
240
-