pg_query 4.2.3 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (486) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/README.md +6 -8
  4. data/Rakefile +3 -3
  5. data/ext/pg_query/extconf.rb +1 -3
  6. data/ext/pg_query/include/access/amapi.h +3 -1
  7. data/ext/pg_query/include/access/attmap.h +5 -3
  8. data/ext/pg_query/include/access/attnum.h +1 -1
  9. data/ext/pg_query/include/access/clog.h +1 -1
  10. data/ext/pg_query/include/access/commit_ts.h +1 -1
  11. data/ext/pg_query/include/access/detoast.h +1 -1
  12. data/ext/pg_query/include/access/genam.h +7 -5
  13. data/ext/pg_query/include/access/gin.h +16 -3
  14. data/ext/pg_query/include/access/htup.h +1 -1
  15. data/ext/pg_query/include/access/htup_details.h +6 -2
  16. data/ext/pg_query/include/access/itup.h +61 -58
  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 +1 -1
  21. data/ext/pg_query/include/access/rmgrlist.h +2 -2
  22. data/ext/pg_query/include/access/sdir.h +12 -3
  23. data/ext/pg_query/include/access/skey.h +1 -1
  24. data/ext/pg_query/include/access/stratnum.h +1 -1
  25. data/ext/pg_query/include/access/sysattr.h +1 -1
  26. data/ext/pg_query/include/access/table.h +1 -1
  27. data/ext/pg_query/include/access/tableam.h +68 -45
  28. data/ext/pg_query/include/access/toast_compression.h +1 -1
  29. data/ext/pg_query/include/access/transam.h +1 -1
  30. data/ext/pg_query/include/access/tsmapi.h +82 -0
  31. data/ext/pg_query/include/access/tupconvert.h +5 -2
  32. data/ext/pg_query/include/access/tupdesc.h +2 -2
  33. data/ext/pg_query/include/access/tupmacs.h +58 -98
  34. data/ext/pg_query/include/access/twophase.h +2 -2
  35. data/ext/pg_query/include/access/xact.h +25 -18
  36. data/ext/pg_query/include/access/xlog.h +15 -16
  37. data/ext/pg_query/include/access/xlog_internal.h +100 -62
  38. data/ext/pg_query/include/access/xlogbackup.h +41 -0
  39. data/ext/pg_query/include/access/xlogdefs.h +6 -25
  40. data/ext/pg_query/include/access/xlogprefetcher.h +1 -1
  41. data/ext/pg_query/include/access/xlogreader.h +7 -6
  42. data/ext/pg_query/include/access/xlogrecord.h +17 -5
  43. data/ext/pg_query/include/access/xlogrecovery.h +4 -3
  44. data/ext/pg_query/include/archive/archive_module.h +59 -0
  45. data/ext/pg_query/include/c.h +144 -156
  46. data/ext/pg_query/include/catalog/catalog.h +4 -3
  47. data/ext/pg_query/include/catalog/catversion.h +6 -2
  48. data/ext/pg_query/include/catalog/dependency.h +5 -4
  49. data/ext/pg_query/include/catalog/genbki.h +7 -6
  50. data/ext/pg_query/include/catalog/index.h +4 -4
  51. data/ext/pg_query/include/catalog/indexing.h +1 -1
  52. data/ext/pg_query/include/catalog/namespace.h +2 -2
  53. data/ext/pg_query/include/catalog/objectaccess.h +10 -8
  54. data/ext/pg_query/include/catalog/objectaddress.h +3 -3
  55. data/ext/pg_query/include/catalog/pg_aggregate.h +1 -1
  56. data/ext/pg_query/include/catalog/pg_aggregate_d.h +1 -1
  57. data/ext/pg_query/include/catalog/pg_am.h +1 -1
  58. data/ext/pg_query/include/catalog/pg_am_d.h +1 -1
  59. data/ext/pg_query/include/catalog/pg_attribute.h +19 -17
  60. data/ext/pg_query/include/catalog/pg_attribute_d.h +19 -19
  61. data/ext/pg_query/include/catalog/pg_authid.h +1 -1
  62. data/ext/pg_query/include/catalog/pg_authid_d.h +3 -1
  63. data/ext/pg_query/include/catalog/pg_class.h +1 -1
  64. data/ext/pg_query/include/catalog/pg_class_d.h +1 -1
  65. data/ext/pg_query/include/catalog/pg_collation.h +3 -1
  66. data/ext/pg_query/include/catalog/pg_collation_d.h +4 -3
  67. data/ext/pg_query/include/catalog/pg_constraint.h +2 -2
  68. data/ext/pg_query/include/catalog/pg_constraint_d.h +1 -1
  69. data/ext/pg_query/include/catalog/pg_control.h +9 -1
  70. data/ext/pg_query/include/catalog/pg_conversion.h +2 -2
  71. data/ext/pg_query/include/catalog/pg_conversion_d.h +1 -1
  72. data/ext/pg_query/include/catalog/pg_database.h +124 -0
  73. data/ext/pg_query/include/catalog/pg_database_d.h +52 -0
  74. data/ext/pg_query/include/catalog/pg_depend.h +1 -1
  75. data/ext/pg_query/include/catalog/pg_depend_d.h +1 -1
  76. data/ext/pg_query/include/catalog/pg_event_trigger.h +1 -1
  77. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +1 -1
  78. data/ext/pg_query/include/catalog/pg_index.h +1 -1
  79. data/ext/pg_query/include/catalog/pg_index_d.h +1 -1
  80. data/ext/pg_query/include/catalog/pg_language.h +1 -1
  81. data/ext/pg_query/include/catalog/pg_language_d.h +1 -1
  82. data/ext/pg_query/include/catalog/pg_namespace.h +1 -1
  83. data/ext/pg_query/include/catalog/pg_namespace_d.h +1 -1
  84. data/ext/pg_query/include/catalog/pg_opclass.h +1 -1
  85. data/ext/pg_query/include/catalog/pg_opclass_d.h +1 -1
  86. data/ext/pg_query/include/catalog/pg_operator.h +1 -1
  87. data/ext/pg_query/include/catalog/pg_operator_d.h +1 -1
  88. data/ext/pg_query/include/catalog/pg_opfamily.h +3 -2
  89. data/ext/pg_query/include/catalog/pg_opfamily_d.h +4 -2
  90. data/ext/pg_query/include/catalog/pg_partitioned_table.h +1 -1
  91. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +1 -1
  92. data/ext/pg_query/include/catalog/pg_proc.h +1 -1
  93. data/ext/pg_query/include/catalog/pg_proc_d.h +1 -1
  94. data/ext/pg_query/include/catalog/pg_publication.h +2 -5
  95. data/ext/pg_query/include/catalog/pg_publication_d.h +1 -1
  96. data/ext/pg_query/include/catalog/pg_replication_origin.h +1 -1
  97. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +1 -1
  98. data/ext/pg_query/include/catalog/pg_statistic.h +1 -1
  99. data/ext/pg_query/include/catalog/pg_statistic_d.h +1 -1
  100. data/ext/pg_query/include/catalog/pg_statistic_ext.h +1 -1
  101. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +1 -1
  102. data/ext/pg_query/include/catalog/pg_transform.h +1 -1
  103. data/ext/pg_query/include/catalog/pg_transform_d.h +1 -1
  104. data/ext/pg_query/include/catalog/pg_trigger.h +1 -1
  105. data/ext/pg_query/include/catalog/pg_trigger_d.h +1 -1
  106. data/ext/pg_query/include/catalog/pg_ts_config.h +1 -1
  107. data/ext/pg_query/include/catalog/pg_ts_config_d.h +1 -1
  108. data/ext/pg_query/include/catalog/pg_ts_dict.h +1 -1
  109. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +1 -1
  110. data/ext/pg_query/include/catalog/pg_ts_parser.h +1 -1
  111. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +1 -1
  112. data/ext/pg_query/include/catalog/pg_ts_template.h +1 -1
  113. data/ext/pg_query/include/catalog/pg_ts_template_d.h +1 -1
  114. data/ext/pg_query/include/catalog/pg_type.h +1 -1
  115. data/ext/pg_query/include/catalog/pg_type_d.h +1 -1
  116. data/ext/pg_query/include/catalog/storage.h +6 -6
  117. data/ext/pg_query/include/commands/async.h +1 -1
  118. data/ext/pg_query/include/commands/dbcommands.h +2 -1
  119. data/ext/pg_query/include/commands/defrem.h +2 -1
  120. data/ext/pg_query/include/commands/event_trigger.h +1 -1
  121. data/ext/pg_query/include/commands/explain.h +3 -1
  122. data/ext/pg_query/include/commands/prepare.h +1 -1
  123. data/ext/pg_query/include/commands/tablespace.h +4 -4
  124. data/ext/pg_query/include/commands/trigger.h +15 -14
  125. data/ext/pg_query/include/commands/user.h +9 -3
  126. data/ext/pg_query/include/commands/vacuum.h +60 -14
  127. data/ext/pg_query/include/common/cryptohash.h +39 -0
  128. data/ext/pg_query/include/common/file_perm.h +1 -1
  129. data/ext/pg_query/include/common/hashfn.h +1 -1
  130. data/ext/pg_query/include/common/int.h +437 -0
  131. data/ext/pg_query/include/common/ip.h +4 -2
  132. data/ext/pg_query/include/common/keywords.h +1 -1
  133. data/ext/pg_query/include/common/kwlookup.h +2 -2
  134. data/ext/pg_query/include/common/pg_prng.h +3 -2
  135. data/ext/pg_query/include/common/relpath.h +20 -13
  136. data/ext/pg_query/include/common/scram-common.h +70 -0
  137. data/ext/pg_query/include/common/sha2.h +32 -0
  138. data/ext/pg_query/include/common/string.h +5 -3
  139. data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +10 -10
  140. data/ext/pg_query/include/common/{unicode_combining_table.h → unicode_nonspacing_table.h} +31 -13
  141. data/ext/pg_query/include/copyfuncs.funcs.c +5013 -0
  142. data/ext/pg_query/include/copyfuncs.switch.c +938 -0
  143. data/ext/pg_query/include/datatype/timestamp.h +11 -4
  144. data/ext/pg_query/include/equalfuncs.funcs.c +3097 -0
  145. data/ext/pg_query/include/equalfuncs.switch.c +785 -0
  146. data/ext/pg_query/include/executor/execdesc.h +1 -1
  147. data/ext/pg_query/include/executor/executor.h +34 -17
  148. data/ext/pg_query/include/executor/functions.h +1 -1
  149. data/ext/pg_query/include/executor/instrument.h +1 -1
  150. data/ext/pg_query/include/executor/spi.h +2 -2
  151. data/ext/pg_query/include/executor/tablefunc.h +1 -1
  152. data/ext/pg_query/include/executor/tuptable.h +18 -11
  153. data/ext/pg_query/include/fmgr.h +21 -2
  154. data/ext/pg_query/include/foreign/fdwapi.h +294 -0
  155. data/ext/pg_query/include/funcapi.h +12 -12
  156. data/ext/pg_query/include/gram.h +1127 -0
  157. data/ext/pg_query/include/{parser/gramparse.h → gramparse.h} +4 -4
  158. data/ext/pg_query/include/jit/jit.h +2 -2
  159. data/ext/pg_query/include/kwlist_d.h +534 -510
  160. data/ext/pg_query/include/lib/dshash.h +4 -1
  161. data/ext/pg_query/include/lib/ilist.h +435 -22
  162. data/ext/pg_query/include/lib/pairingheap.h +1 -1
  163. data/ext/pg_query/include/lib/simplehash.h +9 -9
  164. data/ext/pg_query/include/lib/sort_template.h +1 -1
  165. data/ext/pg_query/include/lib/stringinfo.h +3 -3
  166. data/ext/pg_query/include/libpq/auth.h +8 -2
  167. data/ext/pg_query/include/libpq/crypt.h +1 -1
  168. data/ext/pg_query/include/libpq/hba.h +24 -17
  169. data/ext/pg_query/include/libpq/libpq-be.h +36 -25
  170. data/ext/pg_query/include/libpq/libpq.h +1 -1
  171. data/ext/pg_query/include/libpq/pqcomm.h +10 -41
  172. data/ext/pg_query/include/libpq/pqformat.h +2 -2
  173. data/ext/pg_query/include/libpq/pqsignal.h +22 -10
  174. data/ext/pg_query/include/libpq/sasl.h +136 -0
  175. data/ext/pg_query/include/libpq/scram.h +37 -0
  176. data/ext/pg_query/include/mb/pg_wchar.h +35 -18
  177. data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
  178. data/ext/pg_query/include/miscadmin.h +26 -14
  179. data/ext/pg_query/include/nodes/bitmapset.h +11 -7
  180. data/ext/pg_query/include/nodes/execnodes.h +83 -30
  181. data/ext/pg_query/include/nodes/extensible.h +5 -3
  182. data/ext/pg_query/include/nodes/lockoptions.h +1 -1
  183. data/ext/pg_query/include/nodes/makefuncs.h +14 -2
  184. data/ext/pg_query/include/nodes/memnodes.h +7 -4
  185. data/ext/pg_query/include/nodes/miscnodes.h +56 -0
  186. data/ext/pg_query/include/nodes/nodeFuncs.h +89 -29
  187. data/ext/pg_query/include/nodes/nodes.h +95 -510
  188. data/ext/pg_query/include/nodes/nodetags.h +471 -0
  189. data/ext/pg_query/include/nodes/params.h +3 -3
  190. data/ext/pg_query/include/nodes/parsenodes.h +377 -139
  191. data/ext/pg_query/include/nodes/pathnodes.h +1090 -440
  192. data/ext/pg_query/include/nodes/pg_list.h +30 -7
  193. data/ext/pg_query/include/nodes/plannodes.h +367 -124
  194. data/ext/pg_query/include/nodes/primnodes.h +670 -222
  195. data/ext/pg_query/include/nodes/print.h +1 -1
  196. data/ext/pg_query/include/{utils → nodes}/queryjumble.h +5 -7
  197. data/ext/pg_query/include/nodes/replnodes.h +111 -0
  198. data/ext/pg_query/include/nodes/supportnodes.h +346 -0
  199. data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
  200. data/ext/pg_query/include/nodes/value.h +12 -2
  201. data/ext/pg_query/include/optimizer/cost.h +6 -4
  202. data/ext/pg_query/include/optimizer/geqo.h +1 -1
  203. data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
  204. data/ext/pg_query/include/optimizer/optimizer.h +8 -8
  205. data/ext/pg_query/include/optimizer/paths.h +16 -7
  206. data/ext/pg_query/include/optimizer/planmain.h +3 -6
  207. data/ext/pg_query/include/parser/analyze.h +4 -3
  208. data/ext/pg_query/include/parser/kwlist.h +12 -1
  209. data/ext/pg_query/include/parser/parse_agg.h +4 -2
  210. data/ext/pg_query/include/parser/parse_coerce.h +3 -1
  211. data/ext/pg_query/include/parser/parse_expr.h +1 -1
  212. data/ext/pg_query/include/parser/parse_func.h +1 -1
  213. data/ext/pg_query/include/parser/parse_node.h +22 -4
  214. data/ext/pg_query/include/parser/parse_oper.h +3 -3
  215. data/ext/pg_query/include/parser/parse_relation.h +8 -3
  216. data/ext/pg_query/include/parser/parse_type.h +4 -3
  217. data/ext/pg_query/include/parser/parser.h +1 -1
  218. data/ext/pg_query/include/parser/parsetree.h +1 -1
  219. data/ext/pg_query/include/parser/scanner.h +2 -2
  220. data/ext/pg_query/include/parser/scansup.h +1 -1
  221. data/ext/pg_query/include/partitioning/partdefs.h +1 -1
  222. data/ext/pg_query/include/pg_config.h +21 -216
  223. data/ext/pg_query/include/pg_config_manual.h +8 -46
  224. data/ext/pg_query/include/pg_getopt.h +1 -1
  225. data/ext/pg_query/include/pg_query.h +27 -3
  226. data/ext/pg_query/include/pg_query_enum_defs.c +311 -149
  227. data/ext/pg_query/include/pg_query_fingerprint_conds.c +545 -489
  228. data/ext/pg_query/include/pg_query_fingerprint_defs.c +5092 -4432
  229. data/ext/pg_query/include/pg_query_outfuncs_conds.c +385 -343
  230. data/ext/pg_query/include/pg_query_outfuncs_defs.c +1294 -1161
  231. data/ext/pg_query/include/pg_query_readfuncs_conds.c +137 -123
  232. data/ext/pg_query/include/pg_query_readfuncs_defs.c +1657 -1496
  233. data/ext/pg_query/include/pg_trace.h +1 -1
  234. data/ext/pg_query/include/pgstat.h +172 -93
  235. data/ext/pg_query/include/pgtime.h +3 -3
  236. data/ext/pg_query/include/pl_gram.h +64 -62
  237. data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
  238. data/ext/pg_query/include/pl_reserved_kwlist_d.h +1 -1
  239. data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -1
  240. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +48 -46
  241. data/ext/pg_query/include/plpgsql.h +17 -22
  242. data/ext/pg_query/include/port/atomics/arch-arm.h +3 -3
  243. data/ext/pg_query/include/port/atomics/arch-ppc.h +21 -21
  244. data/ext/pg_query/include/port/atomics/arch-x86.h +2 -2
  245. data/ext/pg_query/include/port/atomics/fallback.h +3 -3
  246. data/ext/pg_query/include/port/atomics/generic-gcc.h +1 -1
  247. data/ext/pg_query/include/port/atomics/generic.h +1 -1
  248. data/ext/pg_query/include/port/atomics.h +2 -7
  249. data/ext/pg_query/include/port/pg_bitutils.h +62 -25
  250. data/ext/pg_query/include/port/pg_bswap.h +1 -1
  251. data/ext/pg_query/include/port/pg_crc32c.h +1 -1
  252. data/ext/pg_query/include/port/simd.h +375 -0
  253. data/ext/pg_query/include/port.h +42 -75
  254. data/ext/pg_query/include/portability/instr_time.h +81 -140
  255. data/ext/pg_query/include/postgres.h +205 -434
  256. data/ext/pg_query/include/postgres_ext.h +0 -1
  257. data/ext/pg_query/include/postmaster/autovacuum.h +1 -4
  258. data/ext/pg_query/include/postmaster/auxprocess.h +1 -1
  259. data/ext/pg_query/include/postmaster/bgworker.h +2 -2
  260. data/ext/pg_query/include/postmaster/bgworker_internals.h +1 -1
  261. data/ext/pg_query/include/postmaster/bgwriter.h +2 -2
  262. data/ext/pg_query/include/postmaster/fork_process.h +1 -1
  263. data/ext/pg_query/include/postmaster/interrupt.h +1 -1
  264. data/ext/pg_query/include/postmaster/pgarch.h +1 -38
  265. data/ext/pg_query/include/postmaster/postmaster.h +5 -2
  266. data/ext/pg_query/include/postmaster/startup.h +3 -1
  267. data/ext/pg_query/include/postmaster/syslogger.h +2 -2
  268. data/ext/pg_query/include/postmaster/walwriter.h +3 -1
  269. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +6186 -5585
  270. data/ext/pg_query/include/protobuf/pg_query.pb.h +112443 -91222
  271. data/ext/pg_query/include/regex/regex.h +9 -6
  272. data/ext/pg_query/include/replication/logicallauncher.h +6 -1
  273. data/ext/pg_query/include/replication/logicalproto.h +30 -10
  274. data/ext/pg_query/include/replication/logicalworker.h +14 -1
  275. data/ext/pg_query/include/replication/origin.h +4 -4
  276. data/ext/pg_query/include/replication/reorderbuffer.h +113 -45
  277. data/ext/pg_query/include/replication/slot.h +25 -6
  278. data/ext/pg_query/include/replication/syncrep.h +2 -8
  279. data/ext/pg_query/include/replication/walreceiver.h +15 -9
  280. data/ext/pg_query/include/replication/walsender.h +13 -13
  281. data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
  282. data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -4
  283. data/ext/pg_query/include/rewrite/rewriteManip.h +11 -2
  284. data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
  285. data/ext/pg_query/include/src_backend_nodes_copyfuncs.funcs.c +5321 -0
  286. data/ext/pg_query/include/src_backend_nodes_equalfuncs.funcs.c +3354 -0
  287. data/ext/pg_query/include/storage/backendid.h +1 -1
  288. data/ext/pg_query/include/storage/block.h +24 -31
  289. data/ext/pg_query/include/storage/buf.h +1 -1
  290. data/ext/pg_query/include/storage/bufmgr.h +183 -87
  291. data/ext/pg_query/include/storage/bufpage.h +146 -93
  292. data/ext/pg_query/include/storage/condition_variable.h +2 -2
  293. data/ext/pg_query/include/storage/dsm.h +3 -6
  294. data/ext/pg_query/include/storage/dsm_impl.h +4 -1
  295. data/ext/pg_query/include/storage/fd.h +24 -20
  296. data/ext/pg_query/include/storage/fileset.h +1 -1
  297. data/ext/pg_query/include/storage/ipc.h +1 -1
  298. data/ext/pg_query/include/storage/item.h +1 -1
  299. data/ext/pg_query/include/storage/itemid.h +1 -1
  300. data/ext/pg_query/include/storage/itemptr.h +94 -57
  301. data/ext/pg_query/include/storage/large_object.h +1 -1
  302. data/ext/pg_query/include/storage/latch.h +9 -1
  303. data/ext/pg_query/include/storage/lmgr.h +6 -1
  304. data/ext/pg_query/include/storage/lock.h +21 -13
  305. data/ext/pg_query/include/storage/lockdefs.h +3 -3
  306. data/ext/pg_query/include/storage/lwlock.h +16 -2
  307. data/ext/pg_query/include/storage/off.h +1 -1
  308. data/ext/pg_query/include/storage/pg_sema.h +1 -1
  309. data/ext/pg_query/include/storage/pg_shmem.h +1 -1
  310. data/ext/pg_query/include/storage/pmsignal.h +1 -1
  311. data/ext/pg_query/include/storage/predicate.h +2 -2
  312. data/ext/pg_query/include/storage/proc.h +22 -17
  313. data/ext/pg_query/include/storage/procarray.h +3 -2
  314. data/ext/pg_query/include/storage/proclist_types.h +1 -1
  315. data/ext/pg_query/include/storage/procsignal.h +3 -1
  316. data/ext/pg_query/include/storage/relfilelocator.h +99 -0
  317. data/ext/pg_query/include/storage/s_lock.h +66 -309
  318. data/ext/pg_query/include/storage/sharedfileset.h +1 -1
  319. data/ext/pg_query/include/storage/shm_mq.h +1 -1
  320. data/ext/pg_query/include/storage/shm_toc.h +1 -1
  321. data/ext/pg_query/include/storage/shmem.h +1 -23
  322. data/ext/pg_query/include/storage/sinval.h +3 -3
  323. data/ext/pg_query/include/storage/sinvaladt.h +4 -2
  324. data/ext/pg_query/include/storage/smgr.h +12 -10
  325. data/ext/pg_query/include/storage/spin.h +1 -1
  326. data/ext/pg_query/include/storage/standby.h +9 -8
  327. data/ext/pg_query/include/storage/standbydefs.h +1 -1
  328. data/ext/pg_query/include/storage/sync.h +3 -3
  329. data/ext/pg_query/include/tcop/cmdtag.h +7 -2
  330. data/ext/pg_query/include/tcop/cmdtaglist.h +1 -1
  331. data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
  332. data/ext/pg_query/include/tcop/dest.h +1 -3
  333. data/ext/pg_query/include/tcop/fastpath.h +1 -1
  334. data/ext/pg_query/include/tcop/pquery.h +1 -1
  335. data/ext/pg_query/include/tcop/tcopprot.h +1 -4
  336. data/ext/pg_query/include/tcop/utility.h +1 -1
  337. data/ext/pg_query/include/tsearch/ts_cache.h +2 -4
  338. data/ext/pg_query/include/utils/acl.h +26 -81
  339. data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
  340. data/ext/pg_query/include/utils/array.h +19 -1
  341. data/ext/pg_query/include/utils/backend_progress.h +2 -1
  342. data/ext/pg_query/include/utils/backend_status.h +24 -3
  343. data/ext/pg_query/include/utils/builtins.h +14 -5
  344. data/ext/pg_query/include/utils/bytea.h +1 -1
  345. data/ext/pg_query/include/utils/catcache.h +1 -1
  346. data/ext/pg_query/include/utils/date.h +37 -9
  347. data/ext/pg_query/include/utils/datetime.h +41 -21
  348. data/ext/pg_query/include/utils/datum.h +1 -1
  349. data/ext/pg_query/include/utils/dsa.h +5 -1
  350. data/ext/pg_query/include/utils/elog.h +101 -26
  351. data/ext/pg_query/include/utils/expandeddatum.h +14 -3
  352. data/ext/pg_query/include/utils/expandedrecord.h +14 -4
  353. data/ext/pg_query/include/utils/float.h +7 -6
  354. data/ext/pg_query/include/utils/fmgroids.h +54 -1
  355. data/ext/pg_query/include/utils/fmgrprotos.h +45 -3
  356. data/ext/pg_query/include/utils/fmgrtab.h +1 -1
  357. data/ext/pg_query/include/utils/guc.h +55 -82
  358. data/ext/pg_query/include/utils/guc_hooks.h +163 -0
  359. data/ext/pg_query/include/utils/guc_tables.h +49 -3
  360. data/ext/pg_query/include/utils/hsearch.h +1 -1
  361. data/ext/pg_query/include/utils/inval.h +3 -3
  362. data/ext/pg_query/include/utils/logtape.h +77 -0
  363. data/ext/pg_query/include/utils/lsyscache.h +5 -1
  364. data/ext/pg_query/include/utils/memdebug.h +1 -1
  365. data/ext/pg_query/include/utils/memutils.h +5 -49
  366. data/ext/pg_query/include/utils/memutils_internal.h +136 -0
  367. data/ext/pg_query/include/utils/memutils_memorychunk.h +237 -0
  368. data/ext/pg_query/include/utils/numeric.h +20 -5
  369. data/ext/pg_query/include/utils/palloc.h +8 -1
  370. data/ext/pg_query/include/utils/partcache.h +3 -2
  371. data/ext/pg_query/include/utils/pg_locale.h +22 -14
  372. data/ext/pg_query/include/utils/pgstat_internal.h +37 -7
  373. data/ext/pg_query/include/utils/pidfile.h +1 -1
  374. data/ext/pg_query/include/utils/plancache.h +1 -1
  375. data/ext/pg_query/include/utils/portal.h +1 -1
  376. data/ext/pg_query/include/utils/probes.h +6 -6
  377. data/ext/pg_query/include/utils/ps_status.h +23 -1
  378. data/ext/pg_query/include/utils/queryenvironment.h +1 -1
  379. data/ext/pg_query/include/utils/regproc.h +3 -3
  380. data/ext/pg_query/include/utils/rel.h +60 -43
  381. data/ext/pg_query/include/utils/relcache.h +13 -8
  382. data/ext/pg_query/include/utils/reltrigger.h +1 -1
  383. data/ext/pg_query/include/utils/resowner.h +1 -1
  384. data/ext/pg_query/include/utils/ruleutils.h +6 -1
  385. data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
  386. data/ext/pg_query/include/utils/snapmgr.h +4 -2
  387. data/ext/pg_query/include/utils/snapshot.h +1 -1
  388. data/ext/pg_query/include/utils/sortsupport.h +2 -2
  389. data/ext/pg_query/include/utils/syscache.h +4 -1
  390. data/ext/pg_query/include/utils/timeout.h +1 -1
  391. data/ext/pg_query/include/utils/timestamp.h +41 -11
  392. data/ext/pg_query/include/utils/tuplesort.h +189 -35
  393. data/ext/pg_query/include/utils/tuplestore.h +1 -1
  394. data/ext/pg_query/include/utils/typcache.h +1 -1
  395. data/ext/pg_query/include/utils/varlena.h +13 -1
  396. data/ext/pg_query/include/utils/wait_event.h +9 -4
  397. data/ext/pg_query/include/utils/xml.h +15 -5
  398. data/ext/pg_query/include/varatt.h +358 -0
  399. data/ext/pg_query/pg_query.c +1 -1
  400. data/ext/pg_query/pg_query.pb-c.c +19755 -17757
  401. data/ext/pg_query/pg_query_fingerprint.c +8 -3
  402. data/ext/pg_query/pg_query_fingerprint.h +1 -1
  403. data/ext/pg_query/pg_query_internal.h +1 -1
  404. data/ext/pg_query/pg_query_json_plpgsql.c +1 -0
  405. data/ext/pg_query/pg_query_normalize.c +1 -1
  406. data/ext/pg_query/pg_query_outfuncs_protobuf.c +2 -2
  407. data/ext/pg_query/pg_query_parse.c +46 -4
  408. data/ext/pg_query/pg_query_parse_plpgsql.c +1 -1
  409. data/ext/pg_query/pg_query_scan.c +1 -1
  410. data/ext/pg_query/pg_query_split.c +2 -2
  411. data/ext/pg_query/postgres_deparse.c +503 -105
  412. data/ext/pg_query/src_backend_catalog_namespace.c +7 -2
  413. data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -1
  414. data/ext/pg_query/src_backend_commands_define.c +1 -1
  415. data/ext/pg_query/src_backend_nodes_bitmapset.c +11 -70
  416. data/ext/pg_query/src_backend_nodes_copyfuncs.c +96 -6202
  417. data/ext/pg_query/src_backend_nodes_equalfuncs.c +95 -4068
  418. data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
  419. data/ext/pg_query/src_backend_nodes_list.c +14 -2
  420. data/ext/pg_query/src_backend_nodes_makefuncs.c +95 -1
  421. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +283 -132
  422. data/ext/pg_query/src_backend_nodes_value.c +1 -1
  423. data/ext/pg_query/src_backend_parser_gram.c +33208 -31806
  424. data/ext/pg_query/src_backend_parser_parser.c +28 -2
  425. data/ext/pg_query/src_backend_parser_scan.c +4318 -3329
  426. data/ext/pg_query/src_backend_parser_scansup.c +1 -1
  427. data/ext/pg_query/src_backend_postmaster_postmaster.c +129 -110
  428. data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
  429. data/ext/pg_query/src_backend_tcop_postgres.c +66 -87
  430. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +1 -1
  431. data/ext/pg_query/src_backend_utils_adt_datum.c +5 -7
  432. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  433. data/ext/pg_query/src_backend_utils_adt_format_type.c +1 -1
  434. data/ext/pg_query/src_backend_utils_adt_numutils.c +489 -0
  435. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +79 -5
  436. data/ext/pg_query/src_backend_utils_error_assert.c +4 -7
  437. data/ext/pg_query/src_backend_utils_error_elog.c +354 -97
  438. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +33 -1
  439. data/ext/pg_query/src_backend_utils_init_globals.c +5 -2
  440. data/ext/pg_query/src_backend_utils_mb_mbutils.c +13 -4
  441. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +494 -0
  442. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +163 -0
  443. data/ext/pg_query/src_backend_utils_mmgr_aset.c +449 -312
  444. data/ext/pg_query/src_backend_utils_mmgr_generation.c +1039 -0
  445. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +398 -49
  446. data/ext/pg_query/src_backend_utils_mmgr_slab.c +1021 -0
  447. data/ext/pg_query/src_common_encnames.c +4 -1
  448. data/ext/pg_query/src_common_hashfn.c +1 -1
  449. data/ext/pg_query/src_common_keywords.c +1 -1
  450. data/ext/pg_query/src_common_kwlist_d.h +534 -510
  451. data/ext/pg_query/src_common_kwlookup.c +1 -1
  452. data/ext/pg_query/src_common_psprintf.c +1 -1
  453. data/ext/pg_query/src_common_stringinfo.c +4 -4
  454. data/ext/pg_query/src_common_wchar.c +9 -8
  455. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +1 -1
  456. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -1
  457. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +661 -694
  458. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  459. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +1 -1
  460. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +1 -1
  461. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +48 -46
  462. data/ext/pg_query/src_port_pg_bitutils.c +1 -1
  463. data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
  464. data/ext/pg_query/src_port_snprintf.c +3 -7
  465. data/ext/pg_query/src_port_strerror.c +1 -1
  466. data/ext/pg_query/src_port_strnlen.c +1 -1
  467. data/lib/pg_query/pg_query_pb.rb +166 -3191
  468. data/lib/pg_query/treewalker.rb +7 -2
  469. data/lib/pg_query/version.rb +1 -1
  470. metadata +43 -24
  471. data/ext/pg_query/include/catalog/pg_parameter_acl.h +0 -60
  472. data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +0 -34
  473. data/ext/pg_query/include/commands/variable.h +0 -38
  474. data/ext/pg_query/include/getaddrinfo.h +0 -162
  475. data/ext/pg_query/include/parser/gram.h +0 -1101
  476. data/ext/pg_query/include/storage/relfilenode.h +0 -99
  477. data/ext/pg_query/include/utils/dynahash.h +0 -20
  478. data/ext/pg_query/include/utils/pg_lsn.h +0 -29
  479. data/ext/pg_query/include/utils/rls.h +0 -50
  480. data/ext/pg_query/include/utils/tzparser.h +0 -39
  481. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -371
  482. data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1116
  483. data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1993
  484. data/ext/pg_query/src_common_pg_prng.c +0 -152
  485. data/ext/pg_query/src_common_string.c +0 -92
  486. data/ext/pg_query/src_port_pgsleep.c +0 -69
@@ -0,0 +1,489 @@
1
+ /*--------------------------------------------------------------------
2
+ * Symbols referenced in this file:
3
+ * - pg_strtoint32_safe
4
+ * - hexlookup
5
+ *--------------------------------------------------------------------
6
+ */
7
+
8
+ /*-------------------------------------------------------------------------
9
+ *
10
+ * numutils.c
11
+ * utility functions for I/O of built-in numeric types.
12
+ *
13
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
14
+ * Portions Copyright (c) 1994, Regents of the University of California
15
+ *
16
+ *
17
+ * IDENTIFICATION
18
+ * src/backend/utils/adt/numutils.c
19
+ *
20
+ *-------------------------------------------------------------------------
21
+ */
22
+ #include "postgres.h"
23
+
24
+ #include <math.h>
25
+ #include <limits.h>
26
+ #include <ctype.h>
27
+
28
+ #include "common/int.h"
29
+ #include "utils/builtins.h"
30
+ #include "port/pg_bitutils.h"
31
+
32
+ /*
33
+ * A table of all two-digit numbers. This is used to speed up decimal digit
34
+ * generation by copying pairs of digits into the final output.
35
+ */
36
+
37
+
38
+ /*
39
+ * Adapted from http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog10
40
+ */
41
+
42
+
43
+
44
+
45
+ static const int8 hexlookup[128] = {
46
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
47
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
48
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
49
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1,
50
+ -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,
51
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
52
+ -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1,
53
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
54
+ };
55
+
56
+ /*
57
+ * Convert input string to a signed 16 bit integer. Input strings may be
58
+ * expressed in base-10, hexadecimal, octal, or binary format, all of which
59
+ * can be prefixed by an optional sign character, either '+' (the default) or
60
+ * '-' for negative numbers. Hex strings are recognized by the digits being
61
+ * prefixed by 0x or 0X while octal strings are recognized by the 0o or 0O
62
+ * prefix. The binary representation is recognized by the 0b or 0B prefix.
63
+ *
64
+ * Allows any number of leading or trailing whitespace characters. Digits may
65
+ * optionally be separated by a single underscore character. These can only
66
+ * come between digits and not before or after the digits. Underscores have
67
+ * no effect on the return value and are supported only to assist in improving
68
+ * the human readability of the input strings.
69
+ *
70
+ * pg_strtoint16() will throw ereport() upon bad input format or overflow;
71
+ * while pg_strtoint16_safe() instead returns such complaints in *escontext,
72
+ * if it's an ErrorSaveContext.
73
+ *
74
+ * NB: Accumulate input as an unsigned number, to deal with two's complement
75
+ * representation of the most negative number, which can't be represented as a
76
+ * signed positive number.
77
+ */
78
+
79
+
80
+
81
+
82
+ /*
83
+ * Convert input string to a signed 32 bit integer. Input strings may be
84
+ * expressed in base-10, hexadecimal, octal, or binary format, all of which
85
+ * can be prefixed by an optional sign character, either '+' (the default) or
86
+ * '-' for negative numbers. Hex strings are recognized by the digits being
87
+ * prefixed by 0x or 0X while octal strings are recognized by the 0o or 0O
88
+ * prefix. The binary representation is recognized by the 0b or 0B prefix.
89
+ *
90
+ * Allows any number of leading or trailing whitespace characters. Digits may
91
+ * optionally be separated by a single underscore character. These can only
92
+ * come between digits and not before or after the digits. Underscores have
93
+ * no effect on the return value and are supported only to assist in improving
94
+ * the human readability of the input strings.
95
+ *
96
+ * pg_strtoint32() will throw ereport() upon bad input format or overflow;
97
+ * while pg_strtoint32_safe() instead returns such complaints in *escontext,
98
+ * if it's an ErrorSaveContext.
99
+ *
100
+ * NB: Accumulate input as an unsigned number, to deal with two's complement
101
+ * representation of the most negative number, which can't be represented as a
102
+ * signed positive number.
103
+ */
104
+
105
+
106
+ int32
107
+ pg_strtoint32_safe(const char *s, Node *escontext)
108
+ {
109
+ const char *ptr = s;
110
+ const char *firstdigit;
111
+ uint32 tmp = 0;
112
+ bool neg = false;
113
+ unsigned char digit;
114
+
115
+ /*
116
+ * The majority of cases are likely to be base-10 digits without any
117
+ * underscore separator characters. We'll first try to parse the string
118
+ * with the assumption that's the case and only fallback on a slower
119
+ * implementation which handles hex, octal and binary strings and
120
+ * underscores if the fastpath version cannot parse the string.
121
+ */
122
+
123
+ /* leave it up to the slow path to look for leading spaces */
124
+
125
+ if (*ptr == '-')
126
+ {
127
+ ptr++;
128
+ neg = true;
129
+ }
130
+
131
+ /* a leading '+' is uncommon so leave that for the slow path */
132
+
133
+ /* process the first digit */
134
+ digit = (*ptr - '0');
135
+
136
+ /*
137
+ * Exploit unsigned arithmetic to save having to check both the upper and
138
+ * lower bounds of the digit.
139
+ */
140
+ if (likely(digit < 10))
141
+ {
142
+ ptr++;
143
+ tmp = digit;
144
+ }
145
+ else
146
+ {
147
+ /* we need at least one digit */
148
+ goto slow;
149
+ }
150
+
151
+ /* process remaining digits */
152
+ for (;;)
153
+ {
154
+ digit = (*ptr - '0');
155
+
156
+ if (digit >= 10)
157
+ break;
158
+
159
+ ptr++;
160
+
161
+ if (unlikely(tmp > -(PG_INT32_MIN / 10)))
162
+ goto out_of_range;
163
+
164
+ tmp = tmp * 10 + digit;
165
+ }
166
+
167
+ /* when the string does not end in a digit, let the slow path handle it */
168
+ if (unlikely(*ptr != '\0'))
169
+ goto slow;
170
+
171
+ if (neg)
172
+ {
173
+ /* check the negative equivalent will fit without overflowing */
174
+ if (unlikely(tmp > (uint32) (-(PG_INT32_MIN + 1)) + 1))
175
+ goto out_of_range;
176
+ return -((int32) tmp);
177
+ }
178
+
179
+ if (unlikely(tmp > PG_INT32_MAX))
180
+ goto out_of_range;
181
+
182
+ return (int32) tmp;
183
+
184
+ slow:
185
+ tmp = 0;
186
+ ptr = s;
187
+ /* no need to reset neg */
188
+
189
+ /* skip leading spaces */
190
+ while (isspace((unsigned char) *ptr))
191
+ ptr++;
192
+
193
+ /* handle sign */
194
+ if (*ptr == '-')
195
+ {
196
+ ptr++;
197
+ neg = true;
198
+ }
199
+ else if (*ptr == '+')
200
+ ptr++;
201
+
202
+ /* process digits */
203
+ if (ptr[0] == '0' && (ptr[1] == 'x' || ptr[1] == 'X'))
204
+ {
205
+ firstdigit = ptr += 2;
206
+
207
+ for (;;)
208
+ {
209
+ if (isxdigit((unsigned char) *ptr))
210
+ {
211
+ if (unlikely(tmp > -(PG_INT32_MIN / 16)))
212
+ goto out_of_range;
213
+
214
+ tmp = tmp * 16 + hexlookup[(unsigned char) *ptr++];
215
+ }
216
+ else if (*ptr == '_')
217
+ {
218
+ /* underscore must be followed by more digits */
219
+ ptr++;
220
+ if (*ptr == '\0' || !isxdigit((unsigned char) *ptr))
221
+ goto invalid_syntax;
222
+ }
223
+ else
224
+ break;
225
+ }
226
+ }
227
+ else if (ptr[0] == '0' && (ptr[1] == 'o' || ptr[1] == 'O'))
228
+ {
229
+ firstdigit = ptr += 2;
230
+
231
+ for (;;)
232
+ {
233
+ if (*ptr >= '0' && *ptr <= '7')
234
+ {
235
+ if (unlikely(tmp > -(PG_INT32_MIN / 8)))
236
+ goto out_of_range;
237
+
238
+ tmp = tmp * 8 + (*ptr++ - '0');
239
+ }
240
+ else if (*ptr == '_')
241
+ {
242
+ /* underscore must be followed by more digits */
243
+ ptr++;
244
+ if (*ptr == '\0' || *ptr < '0' || *ptr > '7')
245
+ goto invalid_syntax;
246
+ }
247
+ else
248
+ break;
249
+ }
250
+ }
251
+ else if (ptr[0] == '0' && (ptr[1] == 'b' || ptr[1] == 'B'))
252
+ {
253
+ firstdigit = ptr += 2;
254
+
255
+ for (;;)
256
+ {
257
+ if (*ptr >= '0' && *ptr <= '1')
258
+ {
259
+ if (unlikely(tmp > -(PG_INT32_MIN / 2)))
260
+ goto out_of_range;
261
+
262
+ tmp = tmp * 2 + (*ptr++ - '0');
263
+ }
264
+ else if (*ptr == '_')
265
+ {
266
+ /* underscore must be followed by more digits */
267
+ ptr++;
268
+ if (*ptr == '\0' || *ptr < '0' || *ptr > '1')
269
+ goto invalid_syntax;
270
+ }
271
+ else
272
+ break;
273
+ }
274
+ }
275
+ else
276
+ {
277
+ firstdigit = ptr;
278
+
279
+ for (;;)
280
+ {
281
+ if (*ptr >= '0' && *ptr <= '9')
282
+ {
283
+ if (unlikely(tmp > -(PG_INT32_MIN / 10)))
284
+ goto out_of_range;
285
+
286
+ tmp = tmp * 10 + (*ptr++ - '0');
287
+ }
288
+ else if (*ptr == '_')
289
+ {
290
+ /* underscore may not be first */
291
+ if (unlikely(ptr == firstdigit))
292
+ goto invalid_syntax;
293
+ /* and it must be followed by more digits */
294
+ ptr++;
295
+ if (*ptr == '\0' || !isdigit((unsigned char) *ptr))
296
+ goto invalid_syntax;
297
+ }
298
+ else
299
+ break;
300
+ }
301
+ }
302
+
303
+ /* require at least one digit */
304
+ if (unlikely(ptr == firstdigit))
305
+ goto invalid_syntax;
306
+
307
+ /* allow trailing whitespace, but not other trailing chars */
308
+ while (isspace((unsigned char) *ptr))
309
+ ptr++;
310
+
311
+ if (unlikely(*ptr != '\0'))
312
+ goto invalid_syntax;
313
+
314
+ if (neg)
315
+ {
316
+ /* check the negative equivalent will fit without overflowing */
317
+ if (tmp > (uint32) (-(PG_INT32_MIN + 1)) + 1)
318
+ goto out_of_range;
319
+ return -((int32) tmp);
320
+ }
321
+
322
+ if (tmp > PG_INT32_MAX)
323
+ goto out_of_range;
324
+
325
+ return (int32) tmp;
326
+
327
+ out_of_range:
328
+ ereturn(escontext, 0,
329
+ (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
330
+ errmsg("value \"%s\" is out of range for type %s",
331
+ s, "integer")));
332
+
333
+ invalid_syntax:
334
+ ereturn(escontext, 0,
335
+ (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
336
+ errmsg("invalid input syntax for type %s: \"%s\"",
337
+ "integer", s)));
338
+ }
339
+
340
+ /*
341
+ * Convert input string to a signed 64 bit integer. Input strings may be
342
+ * expressed in base-10, hexadecimal, octal, or binary format, all of which
343
+ * can be prefixed by an optional sign character, either '+' (the default) or
344
+ * '-' for negative numbers. Hex strings are recognized by the digits being
345
+ * prefixed by 0x or 0X while octal strings are recognized by the 0o or 0O
346
+ * prefix. The binary representation is recognized by the 0b or 0B prefix.
347
+ *
348
+ * Allows any number of leading or trailing whitespace characters. Digits may
349
+ * optionally be separated by a single underscore character. These can only
350
+ * come between digits and not before or after the digits. Underscores have
351
+ * no effect on the return value and are supported only to assist in improving
352
+ * the human readability of the input strings.
353
+ *
354
+ * pg_strtoint64() will throw ereport() upon bad input format or overflow;
355
+ * while pg_strtoint64_safe() instead returns such complaints in *escontext,
356
+ * if it's an ErrorSaveContext.
357
+ *
358
+ * NB: Accumulate input as an unsigned number, to deal with two's complement
359
+ * representation of the most negative number, which can't be represented as a
360
+ * signed positive number.
361
+ */
362
+
363
+
364
+
365
+
366
+ /*
367
+ * Convert input string to an unsigned 32 bit integer.
368
+ *
369
+ * Allows any number of leading or trailing whitespace characters.
370
+ *
371
+ * If endloc isn't NULL, store a pointer to the rest of the string there,
372
+ * so that caller can parse the rest. Otherwise, it's an error if anything
373
+ * but whitespace follows.
374
+ *
375
+ * typname is what is reported in error messges.
376
+ *
377
+ * If escontext points to an ErrorSaveContext node, that is filled instead
378
+ * of throwing an error; the caller must check SOFT_ERROR_OCCURRED()
379
+ * to detect errors.
380
+ */
381
+ #if PG_UINT32_MAX != ULONG_MAX
382
+ #endif
383
+
384
+ /*
385
+ * Convert input string to an unsigned 64 bit integer.
386
+ *
387
+ * Allows any number of leading or trailing whitespace characters.
388
+ *
389
+ * If endloc isn't NULL, store a pointer to the rest of the string there,
390
+ * so that caller can parse the rest. Otherwise, it's an error if anything
391
+ * but whitespace follows.
392
+ *
393
+ * typname is what is reported in error messges.
394
+ *
395
+ * If escontext points to an ErrorSaveContext node, that is filled instead
396
+ * of throwing an error; the caller must check SOFT_ERROR_OCCURRED()
397
+ * to detect errors.
398
+ */
399
+
400
+
401
+ /*
402
+ * pg_itoa: converts a signed 16-bit integer to its string representation
403
+ * and returns strlen(a).
404
+ *
405
+ * Caller must ensure that 'a' points to enough memory to hold the result
406
+ * (at least 7 bytes, counting a leading sign and trailing NUL).
407
+ *
408
+ * It doesn't seem worth implementing this separately.
409
+ */
410
+
411
+
412
+ /*
413
+ * pg_ultoa_n: converts an unsigned 32-bit integer to its string representation,
414
+ * not NUL-terminated, and returns the length of that string representation
415
+ *
416
+ * Caller must ensure that 'a' points to enough memory to hold the result (at
417
+ * least 10 bytes)
418
+ */
419
+
420
+
421
+ /*
422
+ * pg_ltoa: converts a signed 32-bit integer to its string representation and
423
+ * returns strlen(a).
424
+ *
425
+ * It is the caller's responsibility to ensure that a is at least 12 bytes long,
426
+ * which is enough room to hold a minus sign, a maximally long int32, and the
427
+ * above terminating NUL.
428
+ */
429
+
430
+
431
+ /*
432
+ * Get the decimal representation, not NUL-terminated, and return the length of
433
+ * same. Caller must ensure that a points to at least MAXINT8LEN bytes.
434
+ */
435
+
436
+
437
+ /*
438
+ * pg_lltoa: converts a signed 64-bit integer to its string representation and
439
+ * returns strlen(a).
440
+ *
441
+ * Caller must ensure that 'a' points to enough memory to hold the result
442
+ * (at least MAXINT8LEN + 1 bytes, counting a leading sign and trailing NUL).
443
+ */
444
+
445
+
446
+
447
+ /*
448
+ * pg_ultostr_zeropad
449
+ * Converts 'value' into a decimal string representation stored at 'str'.
450
+ * 'minwidth' specifies the minimum width of the result; any extra space
451
+ * is filled up by prefixing the number with zeros.
452
+ *
453
+ * Returns the ending address of the string result (the last character written
454
+ * plus 1). Note that no NUL terminator is written.
455
+ *
456
+ * The intended use-case for this function is to build strings that contain
457
+ * multiple individual numbers, for example:
458
+ *
459
+ * str = pg_ultostr_zeropad(str, hours, 2);
460
+ * *str++ = ':';
461
+ * str = pg_ultostr_zeropad(str, mins, 2);
462
+ * *str++ = ':';
463
+ * str = pg_ultostr_zeropad(str, secs, 2);
464
+ * *str = '\0';
465
+ *
466
+ * Note: Caller must ensure that 'str' points to enough memory to hold the
467
+ * result.
468
+ */
469
+
470
+
471
+ /*
472
+ * pg_ultostr
473
+ * Converts 'value' into a decimal string representation stored at 'str'.
474
+ *
475
+ * Returns the ending address of the string result (the last character written
476
+ * plus 1). Note that no NUL terminator is written.
477
+ *
478
+ * The intended use-case for this function is to build strings that contain
479
+ * multiple individual numbers, for example:
480
+ *
481
+ * str = pg_ultostr(str, a);
482
+ * *str++ = ' ';
483
+ * str = pg_ultostr(str, b);
484
+ * *str = '\0';
485
+ *
486
+ * Note: Caller must ensure that 'str' points to enough memory to hold the
487
+ * result.
488
+ */
489
+
@@ -11,7 +11,7 @@
11
11
  * Functions to convert stored expressions/querytrees back to
12
12
  * source text
13
13
  *
14
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
14
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
15
15
  * Portions Copyright (c) 1994, Regents of the University of California
16
16
  *
17
17
  *
@@ -419,6 +419,8 @@ static void get_update_query_targetlist_def(Query *query, List *targetList,
419
419
  RangeTblEntry *rte);
420
420
  static void get_delete_query_def(Query *query, deparse_context *context,
421
421
  bool colNamesVisible);
422
+ static void get_merge_query_def(Query *query, deparse_context *context,
423
+ bool colNamesVisible);
422
424
  static void get_utility_query_def(Query *query, deparse_context *context);
423
425
  static void get_basic_select_query(Query *query, deparse_context *context,
424
426
  TupleDesc resultDesc, bool colNamesVisible);
@@ -465,9 +467,15 @@ static void get_func_expr(FuncExpr *expr, deparse_context *context,
465
467
  bool showimplicit);
466
468
  static void get_agg_expr(Aggref *aggref, deparse_context *context,
467
469
  Aggref *original_aggref);
470
+ static void get_agg_expr_helper(Aggref *aggref, deparse_context *context,
471
+ Aggref *original_aggref, const char *funcname,
472
+ const char *options, bool is_json_objectagg);
468
473
  static void get_agg_combine_expr(Node *node, deparse_context *context,
469
474
  void *callback_arg);
470
475
  static void get_windowfunc_expr(WindowFunc *wfunc, deparse_context *context);
476
+ static void get_windowfunc_expr_helper(WindowFunc *wfunc, deparse_context *context,
477
+ const char *funcname, const char *options,
478
+ bool is_json_objectagg);
471
479
  static bool get_func_sql_syntax(FuncExpr *expr, deparse_context *context);
472
480
  static void get_coercion_expr(Node *arg, deparse_context *context,
473
481
  Oid resulttype, int32 resulttypmod,
@@ -475,6 +483,15 @@ static void get_coercion_expr(Node *arg, deparse_context *context,
475
483
  static void get_const_expr(Const *constval, deparse_context *context,
476
484
  int showtype);
477
485
  static void get_const_collation(Const *constval, deparse_context *context);
486
+ static void get_json_format(JsonFormat *format, StringInfo buf);
487
+ static void get_json_constructor(JsonConstructorExpr *ctor,
488
+ deparse_context *context, bool showimplicit);
489
+ static void get_json_constructor_options(JsonConstructorExpr *ctor,
490
+ StringInfo buf);
491
+ static void get_json_agg_constructor(JsonConstructorExpr *ctor,
492
+ deparse_context *context,
493
+ const char *funcname,
494
+ bool is_json_objectagg);
478
495
  static void simple_quote_literal(StringInfo buf, const char *val);
479
496
  static void get_sublink_expr(SubLink *sublink, deparse_context *context);
480
497
  static void get_tablefunc(TableFunc *tf, deparse_context *context,
@@ -483,6 +500,8 @@ static void get_from_clause(Query *query, const char *prefix,
483
500
  deparse_context *context);
484
501
  static void get_from_clause_item(Node *jtnode, Query *query,
485
502
  deparse_context *context);
503
+ static void get_rte_alias(RangeTblEntry *rte, int varno, bool use_as,
504
+ deparse_context *context);
486
505
  static void get_column_alias_list(deparse_columns *colinfo,
487
506
  deparse_context *context);
488
507
  static void get_from_clause_coldeflist(RangeTblFunction *rtfunc,
@@ -584,6 +603,9 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
584
603
  /* Internal version that just reports the key-column definitions */
585
604
 
586
605
 
606
+ /* Internal version, extensible with flags to control its behavior */
607
+
608
+
587
609
  /*
588
610
  * Internal workhorse to decompile an index definition.
589
611
  *
@@ -637,7 +659,7 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
637
659
  *
638
660
  * Returns the partition key specification, ie, the following:
639
661
  *
640
- * PARTITION BY { RANGE | LIST | HASH } (column opt_collation opt_opclass [, ...])
662
+ * { RANGE | LIST | HASH } (column opt_collation opt_opclass [, ...])
641
663
  */
642
664
 
643
665
 
@@ -744,8 +766,8 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
744
766
  *
745
767
  * Note: if you change the output format of this function, be careful not
746
768
  * to break psql's rules (in \ef and \sf) for identifying the start of the
747
- * function body. To wit: the function body starts on a line that begins
748
- * with "AS ", and no preceding line will look like that.
769
+ * function body. To wit: the function body starts on a line that begins with
770
+ * "AS ", "BEGIN ", or "RETURN ", and no preceding line will look like that.
749
771
  */
750
772
 
751
773
 
@@ -1214,6 +1236,13 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
1214
1236
 
1215
1237
 
1216
1238
 
1239
+ /* ----------
1240
+ * get_merge_query_def - Parse back a MERGE parsetree
1241
+ * ----------
1242
+ */
1243
+
1244
+
1245
+
1217
1246
  /* ----------
1218
1247
  * get_utility_query_def - Parse back a UTILITY parsetree
1219
1248
  * ----------
@@ -1413,6 +1442,12 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
1413
1442
  */
1414
1443
 
1415
1444
 
1445
+ /*
1446
+ * get_agg_expr_helper - subroutine for get_agg_expr and
1447
+ * get_json_agg_constructor
1448
+ */
1449
+
1450
+
1416
1451
  /*
1417
1452
  * This is a helper function for get_agg_expr(). It's used when we deparse
1418
1453
  * a combining Aggref; resolve_special_varno locates the corresponding partial
@@ -1425,6 +1460,13 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
1425
1460
  */
1426
1461
 
1427
1462
 
1463
+
1464
+ /*
1465
+ * get_windowfunc_expr_helper - subroutine for get_windowfunc_expr and
1466
+ * get_json_agg_constructor
1467
+ */
1468
+
1469
+
1428
1470
  /*
1429
1471
  * get_func_sql_syntax - Parse back a SQL-syntax function call
1430
1472
  *
@@ -1463,6 +1505,31 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
1463
1505
  */
1464
1506
 
1465
1507
 
1508
+ /*
1509
+ * get_json_format - Parse back a JsonFormat node
1510
+ */
1511
+
1512
+
1513
+ /*
1514
+ * get_json_returning - Parse back a JsonReturning structure
1515
+ */
1516
+
1517
+
1518
+ /*
1519
+ * get_json_constructor - Parse back a JsonConstructorExpr node
1520
+ */
1521
+
1522
+
1523
+ /*
1524
+ * Append options, if any, to the JSON constructor being deparsed
1525
+ */
1526
+
1527
+
1528
+ /*
1529
+ * get_json_agg_constructor - Parse back an aggregate JsonConstructorExpr node
1530
+ */
1531
+
1532
+
1466
1533
  /*
1467
1534
  * simple_quote_literal - Format a string as a SQL literal, append to buf
1468
1535
  */
@@ -1494,6 +1561,13 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
1494
1561
 
1495
1562
 
1496
1563
 
1564
+ /*
1565
+ * get_rte_alias - print the relation's alias, if needed
1566
+ *
1567
+ * If printed, the alias is preceded by a space, or by " AS " if use_as is true.
1568
+ */
1569
+
1570
+
1497
1571
  /*
1498
1572
  * get_column_alias_list - print column alias list for an RTE
1499
1573
  *
@@ -1533,7 +1607,7 @@ static void get_reloptions(StringInfo buf, Datum reloptions);
1533
1607
 
1534
1608
  /*
1535
1609
  * generate_opclass_name
1536
- * Compute the name to display for a opclass specified by OID
1610
+ * Compute the name to display for an opclass specified by OID
1537
1611
  *
1538
1612
  * The result includes all necessary quoting and schema-prefixing.
1539
1613
  */
@@ -9,7 +9,7 @@
9
9
  * assert.c
10
10
  * Assert support code.
11
11
  *
12
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
12
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
13
13
  * Portions Copyright (c) 1994, Regents of the University of California
14
14
  *
15
15
  *
@@ -34,20 +34,17 @@
34
34
  */
35
35
  void
36
36
  ExceptionalCondition(const char *conditionName,
37
- const char *errorType,
38
37
  const char *fileName,
39
38
  int lineNumber)
40
39
  {
41
40
  /* Report the failure on stderr (or local equivalent) */
42
41
  if (!PointerIsValid(conditionName)
43
- || !PointerIsValid(fileName)
44
- || !PointerIsValid(errorType))
42
+ || !PointerIsValid(fileName))
45
43
  write_stderr("TRAP: ExceptionalCondition: bad arguments in PID %d\n",
46
44
  (int) getpid());
47
45
  else
48
- write_stderr("TRAP: %s(\"%s\", File: \"%s\", Line: %d, PID: %d)\n",
49
- errorType, conditionName,
50
- fileName, lineNumber, (int) getpid());
46
+ write_stderr("TRAP: failed Assert(\"%s\"), File: \"%s\", Line: %d, PID: %d\n",
47
+ conditionName, fileName, lineNumber, (int) getpid());
51
48
 
52
49
  /* Usually this shouldn't be needed, but make sure the msg went out */
53
50
  fflush(stderr);