pg_query 4.2.3 → 5.0.0

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 (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,358 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * varatt.h
4
+ * variable-length datatypes (TOAST support)
5
+ *
6
+ *
7
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
8
+ * Portions Copyright (c) 1995, Regents of the University of California
9
+ *
10
+ * src/include/varatt.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+
15
+ #ifndef VARATT_H
16
+ #define VARATT_H
17
+
18
+ /*
19
+ * struct varatt_external is a traditional "TOAST pointer", that is, the
20
+ * information needed to fetch a Datum stored out-of-line in a TOAST table.
21
+ * The data is compressed if and only if the external size stored in
22
+ * va_extinfo is less than va_rawsize - VARHDRSZ.
23
+ *
24
+ * This struct must not contain any padding, because we sometimes compare
25
+ * these pointers using memcmp.
26
+ *
27
+ * Note that this information is stored unaligned within actual tuples, so
28
+ * you need to memcpy from the tuple into a local struct variable before
29
+ * you can look at these fields! (The reason we use memcmp is to avoid
30
+ * having to do that just to detect equality of two TOAST pointers...)
31
+ */
32
+ typedef struct varatt_external
33
+ {
34
+ int32 va_rawsize; /* Original data size (includes header) */
35
+ uint32 va_extinfo; /* External saved size (without header) and
36
+ * compression method */
37
+ Oid va_valueid; /* Unique ID of value within TOAST table */
38
+ Oid va_toastrelid; /* RelID of TOAST table containing it */
39
+ } varatt_external;
40
+
41
+ /*
42
+ * These macros define the "saved size" portion of va_extinfo. Its remaining
43
+ * two high-order bits identify the compression method.
44
+ */
45
+ #define VARLENA_EXTSIZE_BITS 30
46
+ #define VARLENA_EXTSIZE_MASK ((1U << VARLENA_EXTSIZE_BITS) - 1)
47
+
48
+ /*
49
+ * struct varatt_indirect is a "TOAST pointer" representing an out-of-line
50
+ * Datum that's stored in memory, not in an external toast relation.
51
+ * The creator of such a Datum is entirely responsible that the referenced
52
+ * storage survives for as long as referencing pointer Datums can exist.
53
+ *
54
+ * Note that just as for struct varatt_external, this struct is stored
55
+ * unaligned within any containing tuple.
56
+ */
57
+ typedef struct varatt_indirect
58
+ {
59
+ struct varlena *pointer; /* Pointer to in-memory varlena */
60
+ } varatt_indirect;
61
+
62
+ /*
63
+ * struct varatt_expanded is a "TOAST pointer" representing an out-of-line
64
+ * Datum that is stored in memory, in some type-specific, not necessarily
65
+ * physically contiguous format that is convenient for computation not
66
+ * storage. APIs for this, in particular the definition of struct
67
+ * ExpandedObjectHeader, are in src/include/utils/expandeddatum.h.
68
+ *
69
+ * Note that just as for struct varatt_external, this struct is stored
70
+ * unaligned within any containing tuple.
71
+ */
72
+ typedef struct ExpandedObjectHeader ExpandedObjectHeader;
73
+
74
+ typedef struct varatt_expanded
75
+ {
76
+ ExpandedObjectHeader *eohptr;
77
+ } varatt_expanded;
78
+
79
+ /*
80
+ * Type tag for the various sorts of "TOAST pointer" datums. The peculiar
81
+ * value for VARTAG_ONDISK comes from a requirement for on-disk compatibility
82
+ * with a previous notion that the tag field was the pointer datum's length.
83
+ */
84
+ typedef enum vartag_external
85
+ {
86
+ VARTAG_INDIRECT = 1,
87
+ VARTAG_EXPANDED_RO = 2,
88
+ VARTAG_EXPANDED_RW = 3,
89
+ VARTAG_ONDISK = 18
90
+ } vartag_external;
91
+
92
+ /* this test relies on the specific tag values above */
93
+ #define VARTAG_IS_EXPANDED(tag) \
94
+ (((tag) & ~1) == VARTAG_EXPANDED_RO)
95
+
96
+ #define VARTAG_SIZE(tag) \
97
+ ((tag) == VARTAG_INDIRECT ? sizeof(varatt_indirect) : \
98
+ VARTAG_IS_EXPANDED(tag) ? sizeof(varatt_expanded) : \
99
+ (tag) == VARTAG_ONDISK ? sizeof(varatt_external) : \
100
+ (AssertMacro(false), 0))
101
+
102
+ /*
103
+ * These structs describe the header of a varlena object that may have been
104
+ * TOASTed. Generally, don't reference these structs directly, but use the
105
+ * macros below.
106
+ *
107
+ * We use separate structs for the aligned and unaligned cases because the
108
+ * compiler might otherwise think it could generate code that assumes
109
+ * alignment while touching fields of a 1-byte-header varlena.
110
+ */
111
+ typedef union
112
+ {
113
+ struct /* Normal varlena (4-byte length) */
114
+ {
115
+ uint32 va_header;
116
+ char va_data[FLEXIBLE_ARRAY_MEMBER];
117
+ } va_4byte;
118
+ struct /* Compressed-in-line format */
119
+ {
120
+ uint32 va_header;
121
+ uint32 va_tcinfo; /* Original data size (excludes header) and
122
+ * compression method; see va_extinfo */
123
+ char va_data[FLEXIBLE_ARRAY_MEMBER]; /* Compressed data */
124
+ } va_compressed;
125
+ } varattrib_4b;
126
+
127
+ typedef struct
128
+ {
129
+ uint8 va_header;
130
+ char va_data[FLEXIBLE_ARRAY_MEMBER]; /* Data begins here */
131
+ } varattrib_1b;
132
+
133
+ /* TOAST pointers are a subset of varattrib_1b with an identifying tag byte */
134
+ typedef struct
135
+ {
136
+ uint8 va_header; /* Always 0x80 or 0x01 */
137
+ uint8 va_tag; /* Type of datum */
138
+ char va_data[FLEXIBLE_ARRAY_MEMBER]; /* Type-specific data */
139
+ } varattrib_1b_e;
140
+
141
+ /*
142
+ * Bit layouts for varlena headers on big-endian machines:
143
+ *
144
+ * 00xxxxxx 4-byte length word, aligned, uncompressed data (up to 1G)
145
+ * 01xxxxxx 4-byte length word, aligned, *compressed* data (up to 1G)
146
+ * 10000000 1-byte length word, unaligned, TOAST pointer
147
+ * 1xxxxxxx 1-byte length word, unaligned, uncompressed data (up to 126b)
148
+ *
149
+ * Bit layouts for varlena headers on little-endian machines:
150
+ *
151
+ * xxxxxx00 4-byte length word, aligned, uncompressed data (up to 1G)
152
+ * xxxxxx10 4-byte length word, aligned, *compressed* data (up to 1G)
153
+ * 00000001 1-byte length word, unaligned, TOAST pointer
154
+ * xxxxxxx1 1-byte length word, unaligned, uncompressed data (up to 126b)
155
+ *
156
+ * The "xxx" bits are the length field (which includes itself in all cases).
157
+ * In the big-endian case we mask to extract the length, in the little-endian
158
+ * case we shift. Note that in both cases the flag bits are in the physically
159
+ * first byte. Also, it is not possible for a 1-byte length word to be zero;
160
+ * this lets us disambiguate alignment padding bytes from the start of an
161
+ * unaligned datum. (We now *require* pad bytes to be filled with zero!)
162
+ *
163
+ * In TOAST pointers the va_tag field (see varattrib_1b_e) is used to discern
164
+ * the specific type and length of the pointer datum.
165
+ */
166
+
167
+ /*
168
+ * Endian-dependent macros. These are considered internal --- use the
169
+ * external macros below instead of using these directly.
170
+ *
171
+ * Note: IS_1B is true for external toast records but VARSIZE_1B will return 0
172
+ * for such records. Hence you should usually check for IS_EXTERNAL before
173
+ * checking for IS_1B.
174
+ */
175
+
176
+ #ifdef WORDS_BIGENDIAN
177
+
178
+ #define VARATT_IS_4B(PTR) \
179
+ ((((varattrib_1b *) (PTR))->va_header & 0x80) == 0x00)
180
+ #define VARATT_IS_4B_U(PTR) \
181
+ ((((varattrib_1b *) (PTR))->va_header & 0xC0) == 0x00)
182
+ #define VARATT_IS_4B_C(PTR) \
183
+ ((((varattrib_1b *) (PTR))->va_header & 0xC0) == 0x40)
184
+ #define VARATT_IS_1B(PTR) \
185
+ ((((varattrib_1b *) (PTR))->va_header & 0x80) == 0x80)
186
+ #define VARATT_IS_1B_E(PTR) \
187
+ ((((varattrib_1b *) (PTR))->va_header) == 0x80)
188
+ #define VARATT_NOT_PAD_BYTE(PTR) \
189
+ (*((uint8 *) (PTR)) != 0)
190
+
191
+ /* VARSIZE_4B() should only be used on known-aligned data */
192
+ #define VARSIZE_4B(PTR) \
193
+ (((varattrib_4b *) (PTR))->va_4byte.va_header & 0x3FFFFFFF)
194
+ #define VARSIZE_1B(PTR) \
195
+ (((varattrib_1b *) (PTR))->va_header & 0x7F)
196
+ #define VARTAG_1B_E(PTR) \
197
+ (((varattrib_1b_e *) (PTR))->va_tag)
198
+
199
+ #define SET_VARSIZE_4B(PTR,len) \
200
+ (((varattrib_4b *) (PTR))->va_4byte.va_header = (len) & 0x3FFFFFFF)
201
+ #define SET_VARSIZE_4B_C(PTR,len) \
202
+ (((varattrib_4b *) (PTR))->va_4byte.va_header = ((len) & 0x3FFFFFFF) | 0x40000000)
203
+ #define SET_VARSIZE_1B(PTR,len) \
204
+ (((varattrib_1b *) (PTR))->va_header = (len) | 0x80)
205
+ #define SET_VARTAG_1B_E(PTR,tag) \
206
+ (((varattrib_1b_e *) (PTR))->va_header = 0x80, \
207
+ ((varattrib_1b_e *) (PTR))->va_tag = (tag))
208
+
209
+ #else /* !WORDS_BIGENDIAN */
210
+
211
+ #define VARATT_IS_4B(PTR) \
212
+ ((((varattrib_1b *) (PTR))->va_header & 0x01) == 0x00)
213
+ #define VARATT_IS_4B_U(PTR) \
214
+ ((((varattrib_1b *) (PTR))->va_header & 0x03) == 0x00)
215
+ #define VARATT_IS_4B_C(PTR) \
216
+ ((((varattrib_1b *) (PTR))->va_header & 0x03) == 0x02)
217
+ #define VARATT_IS_1B(PTR) \
218
+ ((((varattrib_1b *) (PTR))->va_header & 0x01) == 0x01)
219
+ #define VARATT_IS_1B_E(PTR) \
220
+ ((((varattrib_1b *) (PTR))->va_header) == 0x01)
221
+ #define VARATT_NOT_PAD_BYTE(PTR) \
222
+ (*((uint8 *) (PTR)) != 0)
223
+
224
+ /* VARSIZE_4B() should only be used on known-aligned data */
225
+ #define VARSIZE_4B(PTR) \
226
+ ((((varattrib_4b *) (PTR))->va_4byte.va_header >> 2) & 0x3FFFFFFF)
227
+ #define VARSIZE_1B(PTR) \
228
+ ((((varattrib_1b *) (PTR))->va_header >> 1) & 0x7F)
229
+ #define VARTAG_1B_E(PTR) \
230
+ (((varattrib_1b_e *) (PTR))->va_tag)
231
+
232
+ #define SET_VARSIZE_4B(PTR,len) \
233
+ (((varattrib_4b *) (PTR))->va_4byte.va_header = (((uint32) (len)) << 2))
234
+ #define SET_VARSIZE_4B_C(PTR,len) \
235
+ (((varattrib_4b *) (PTR))->va_4byte.va_header = (((uint32) (len)) << 2) | 0x02)
236
+ #define SET_VARSIZE_1B(PTR,len) \
237
+ (((varattrib_1b *) (PTR))->va_header = (((uint8) (len)) << 1) | 0x01)
238
+ #define SET_VARTAG_1B_E(PTR,tag) \
239
+ (((varattrib_1b_e *) (PTR))->va_header = 0x01, \
240
+ ((varattrib_1b_e *) (PTR))->va_tag = (tag))
241
+
242
+ #endif /* WORDS_BIGENDIAN */
243
+
244
+ #define VARDATA_4B(PTR) (((varattrib_4b *) (PTR))->va_4byte.va_data)
245
+ #define VARDATA_4B_C(PTR) (((varattrib_4b *) (PTR))->va_compressed.va_data)
246
+ #define VARDATA_1B(PTR) (((varattrib_1b *) (PTR))->va_data)
247
+ #define VARDATA_1B_E(PTR) (((varattrib_1b_e *) (PTR))->va_data)
248
+
249
+ /*
250
+ * Externally visible TOAST macros begin here.
251
+ */
252
+
253
+ #define VARHDRSZ_EXTERNAL offsetof(varattrib_1b_e, va_data)
254
+ #define VARHDRSZ_COMPRESSED offsetof(varattrib_4b, va_compressed.va_data)
255
+ #define VARHDRSZ_SHORT offsetof(varattrib_1b, va_data)
256
+
257
+ #define VARATT_SHORT_MAX 0x7F
258
+ #define VARATT_CAN_MAKE_SHORT(PTR) \
259
+ (VARATT_IS_4B_U(PTR) && \
260
+ (VARSIZE(PTR) - VARHDRSZ + VARHDRSZ_SHORT) <= VARATT_SHORT_MAX)
261
+ #define VARATT_CONVERTED_SHORT_SIZE(PTR) \
262
+ (VARSIZE(PTR) - VARHDRSZ + VARHDRSZ_SHORT)
263
+
264
+ /*
265
+ * In consumers oblivious to data alignment, call PG_DETOAST_DATUM_PACKED(),
266
+ * VARDATA_ANY(), VARSIZE_ANY() and VARSIZE_ANY_EXHDR(). Elsewhere, call
267
+ * PG_DETOAST_DATUM(), VARDATA() and VARSIZE(). Directly fetching an int16,
268
+ * int32 or wider field in the struct representing the datum layout requires
269
+ * aligned data. memcpy() is alignment-oblivious, as are most operations on
270
+ * datatypes, such as text, whose layout struct contains only char fields.
271
+ *
272
+ * Code assembling a new datum should call VARDATA() and SET_VARSIZE().
273
+ * (Datums begin life untoasted.)
274
+ *
275
+ * Other macros here should usually be used only by tuple assembly/disassembly
276
+ * code and code that specifically wants to work with still-toasted Datums.
277
+ */
278
+ #define VARDATA(PTR) VARDATA_4B(PTR)
279
+ #define VARSIZE(PTR) VARSIZE_4B(PTR)
280
+
281
+ #define VARSIZE_SHORT(PTR) VARSIZE_1B(PTR)
282
+ #define VARDATA_SHORT(PTR) VARDATA_1B(PTR)
283
+
284
+ #define VARTAG_EXTERNAL(PTR) VARTAG_1B_E(PTR)
285
+ #define VARSIZE_EXTERNAL(PTR) (VARHDRSZ_EXTERNAL + VARTAG_SIZE(VARTAG_EXTERNAL(PTR)))
286
+ #define VARDATA_EXTERNAL(PTR) VARDATA_1B_E(PTR)
287
+
288
+ #define VARATT_IS_COMPRESSED(PTR) VARATT_IS_4B_C(PTR)
289
+ #define VARATT_IS_EXTERNAL(PTR) VARATT_IS_1B_E(PTR)
290
+ #define VARATT_IS_EXTERNAL_ONDISK(PTR) \
291
+ (VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_ONDISK)
292
+ #define VARATT_IS_EXTERNAL_INDIRECT(PTR) \
293
+ (VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_INDIRECT)
294
+ #define VARATT_IS_EXTERNAL_EXPANDED_RO(PTR) \
295
+ (VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_EXPANDED_RO)
296
+ #define VARATT_IS_EXTERNAL_EXPANDED_RW(PTR) \
297
+ (VARATT_IS_EXTERNAL(PTR) && VARTAG_EXTERNAL(PTR) == VARTAG_EXPANDED_RW)
298
+ #define VARATT_IS_EXTERNAL_EXPANDED(PTR) \
299
+ (VARATT_IS_EXTERNAL(PTR) && VARTAG_IS_EXPANDED(VARTAG_EXTERNAL(PTR)))
300
+ #define VARATT_IS_EXTERNAL_NON_EXPANDED(PTR) \
301
+ (VARATT_IS_EXTERNAL(PTR) && !VARTAG_IS_EXPANDED(VARTAG_EXTERNAL(PTR)))
302
+ #define VARATT_IS_SHORT(PTR) VARATT_IS_1B(PTR)
303
+ #define VARATT_IS_EXTENDED(PTR) (!VARATT_IS_4B_U(PTR))
304
+
305
+ #define SET_VARSIZE(PTR, len) SET_VARSIZE_4B(PTR, len)
306
+ #define SET_VARSIZE_SHORT(PTR, len) SET_VARSIZE_1B(PTR, len)
307
+ #define SET_VARSIZE_COMPRESSED(PTR, len) SET_VARSIZE_4B_C(PTR, len)
308
+
309
+ #define SET_VARTAG_EXTERNAL(PTR, tag) SET_VARTAG_1B_E(PTR, tag)
310
+
311
+ #define VARSIZE_ANY(PTR) \
312
+ (VARATT_IS_1B_E(PTR) ? VARSIZE_EXTERNAL(PTR) : \
313
+ (VARATT_IS_1B(PTR) ? VARSIZE_1B(PTR) : \
314
+ VARSIZE_4B(PTR)))
315
+
316
+ /* Size of a varlena data, excluding header */
317
+ #define VARSIZE_ANY_EXHDR(PTR) \
318
+ (VARATT_IS_1B_E(PTR) ? VARSIZE_EXTERNAL(PTR)-VARHDRSZ_EXTERNAL : \
319
+ (VARATT_IS_1B(PTR) ? VARSIZE_1B(PTR)-VARHDRSZ_SHORT : \
320
+ VARSIZE_4B(PTR)-VARHDRSZ))
321
+
322
+ /* caution: this will not work on an external or compressed-in-line Datum */
323
+ /* caution: this will return a possibly unaligned pointer */
324
+ #define VARDATA_ANY(PTR) \
325
+ (VARATT_IS_1B(PTR) ? VARDATA_1B(PTR) : VARDATA_4B(PTR))
326
+
327
+ /* Decompressed size and compression method of a compressed-in-line Datum */
328
+ #define VARDATA_COMPRESSED_GET_EXTSIZE(PTR) \
329
+ (((varattrib_4b *) (PTR))->va_compressed.va_tcinfo & VARLENA_EXTSIZE_MASK)
330
+ #define VARDATA_COMPRESSED_GET_COMPRESS_METHOD(PTR) \
331
+ (((varattrib_4b *) (PTR))->va_compressed.va_tcinfo >> VARLENA_EXTSIZE_BITS)
332
+
333
+ /* Same for external Datums; but note argument is a struct varatt_external */
334
+ #define VARATT_EXTERNAL_GET_EXTSIZE(toast_pointer) \
335
+ ((toast_pointer).va_extinfo & VARLENA_EXTSIZE_MASK)
336
+ #define VARATT_EXTERNAL_GET_COMPRESS_METHOD(toast_pointer) \
337
+ ((toast_pointer).va_extinfo >> VARLENA_EXTSIZE_BITS)
338
+
339
+ #define VARATT_EXTERNAL_SET_SIZE_AND_COMPRESS_METHOD(toast_pointer, len, cm) \
340
+ do { \
341
+ Assert((cm) == TOAST_PGLZ_COMPRESSION_ID || \
342
+ (cm) == TOAST_LZ4_COMPRESSION_ID); \
343
+ ((toast_pointer).va_extinfo = \
344
+ (len) | ((uint32) (cm) << VARLENA_EXTSIZE_BITS)); \
345
+ } while (0)
346
+
347
+ /*
348
+ * Testing whether an externally-stored value is compressed now requires
349
+ * comparing size stored in va_extinfo (the actual length of the external data)
350
+ * to rawsize (the original uncompressed datum's size). The latter includes
351
+ * VARHDRSZ overhead, the former doesn't. We never use compression unless it
352
+ * actually saves space, so we expect either equality or less-than.
353
+ */
354
+ #define VARATT_EXTERNAL_IS_COMPRESSED(toast_pointer) \
355
+ (VARATT_EXTERNAL_GET_EXTSIZE(toast_pointer) < \
356
+ (toast_pointer).va_rawsize - VARHDRSZ)
357
+
358
+ #endif
@@ -29,7 +29,7 @@ void pg_query_init(void)
29
29
 
30
30
  void pg_query_free_top_memory_context(MemoryContext context)
31
31
  {
32
- AssertArg(MemoryContextIsValid(context));
32
+ Assert(MemoryContextIsValid(context));
33
33
 
34
34
  /*
35
35
  * After this, no memory contexts are valid anymore, so ensure that