pg_query 2.2.0 → 6.1.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 (895) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +86 -0
  3. data/README.md +57 -31
  4. data/Rakefile +5 -6
  5. data/ext/pg_query/ext_symbols_freebsd.sym +1 -0
  6. data/ext/pg_query/ext_symbols_freebsd_with_ruby_abi_version.sym +2 -0
  7. data/ext/pg_query/ext_symbols_openbsd.sym +1 -0
  8. data/ext/pg_query/ext_symbols_openbsd_with_ruby_abi_version.sym +2 -0
  9. data/ext/pg_query/ext_symbols_with_ruby_abi_version.sym +2 -0
  10. data/ext/pg_query/extconf.rb +33 -9
  11. data/ext/pg_query/include/pg_query.h +30 -4
  12. data/ext/pg_query/include/pg_query_enum_defs.c +839 -290
  13. data/ext/pg_query/include/pg_query_fingerprint_conds.c +638 -481
  14. data/ext/pg_query/include/pg_query_fingerprint_defs.c +6786 -4193
  15. data/ext/pg_query/include/pg_query_outfuncs_conds.c +450 -330
  16. data/ext/pg_query/include/pg_query_outfuncs_defs.c +1489 -1044
  17. data/ext/pg_query/include/pg_query_readfuncs_conds.c +157 -118
  18. data/ext/pg_query/include/pg_query_readfuncs_defs.c +1933 -1410
  19. data/ext/pg_query/include/postgres/access/amapi.h +303 -0
  20. data/ext/pg_query/include/postgres/access/attmap.h +54 -0
  21. data/ext/pg_query/include/postgres/access/attnum.h +64 -0
  22. data/ext/pg_query/include/postgres/access/brin_internal.h +116 -0
  23. data/ext/pg_query/include/postgres/access/brin_tuple.h +112 -0
  24. data/ext/pg_query/include/postgres/access/clog.h +62 -0
  25. data/ext/pg_query/include/postgres/access/commit_ts.h +73 -0
  26. data/ext/pg_query/include/postgres/access/detoast.h +82 -0
  27. data/ext/pg_query/include/postgres/access/genam.h +246 -0
  28. data/ext/pg_query/include/postgres/access/gin.h +91 -0
  29. data/ext/pg_query/include/postgres/access/htup.h +89 -0
  30. data/ext/pg_query/include/postgres/access/htup_details.h +811 -0
  31. data/ext/pg_query/include/postgres/access/itup.h +170 -0
  32. data/ext/pg_query/include/postgres/access/parallel.h +81 -0
  33. data/ext/pg_query/include/postgres/access/printtup.h +35 -0
  34. data/ext/pg_query/include/postgres/access/relation.h +28 -0
  35. data/ext/pg_query/include/postgres/access/relscan.h +191 -0
  36. data/ext/pg_query/include/postgres/access/rmgr.h +62 -0
  37. data/ext/pg_query/include/postgres/access/rmgrlist.h +49 -0
  38. data/ext/pg_query/include/postgres/access/sdir.h +67 -0
  39. data/ext/pg_query/include/postgres/access/skey.h +151 -0
  40. data/ext/pg_query/include/postgres/access/slru.h +218 -0
  41. data/ext/pg_query/include/postgres/access/stratnum.h +85 -0
  42. data/ext/pg_query/include/postgres/access/sysattr.h +29 -0
  43. data/ext/pg_query/include/postgres/access/table.h +28 -0
  44. data/ext/pg_query/include/postgres/access/tableam.h +2110 -0
  45. data/ext/pg_query/include/postgres/access/tidstore.h +50 -0
  46. data/ext/pg_query/include/postgres/access/toast_compression.h +73 -0
  47. data/ext/pg_query/include/postgres/access/transam.h +418 -0
  48. data/ext/pg_query/include/postgres/access/tsmapi.h +82 -0
  49. data/ext/pg_query/include/postgres/access/tupconvert.h +54 -0
  50. data/ext/pg_query/include/postgres/access/tupdesc.h +154 -0
  51. data/ext/pg_query/include/postgres/access/tupmacs.h +207 -0
  52. data/ext/pg_query/include/postgres/access/twophase.h +65 -0
  53. data/ext/pg_query/include/postgres/access/xact.h +530 -0
  54. data/ext/pg_query/include/postgres/access/xlog.h +310 -0
  55. data/ext/pg_query/include/postgres/access/xlog_internal.h +405 -0
  56. data/ext/pg_query/include/postgres/access/xlogbackup.h +43 -0
  57. data/ext/pg_query/include/postgres/access/xlogdefs.h +82 -0
  58. data/ext/pg_query/include/postgres/access/xlogprefetcher.h +55 -0
  59. data/ext/pg_query/include/postgres/access/xlogreader.h +444 -0
  60. data/ext/pg_query/include/postgres/access/xlogrecord.h +248 -0
  61. data/ext/pg_query/include/postgres/access/xlogrecovery.h +158 -0
  62. data/ext/pg_query/include/postgres/archive/archive_module.h +67 -0
  63. data/ext/pg_query/include/postgres/c.h +1374 -0
  64. data/ext/pg_query/include/postgres/catalog/catalog.h +47 -0
  65. data/ext/pg_query/include/postgres/catalog/catversion.h +62 -0
  66. data/ext/pg_query/include/postgres/catalog/dependency.h +228 -0
  67. data/ext/pg_query/include/postgres/catalog/genbki.h +149 -0
  68. data/ext/pg_query/include/postgres/catalog/index.h +218 -0
  69. data/ext/pg_query/include/postgres/catalog/indexing.h +54 -0
  70. data/ext/pg_query/include/postgres/catalog/namespace.h +189 -0
  71. data/ext/pg_query/include/postgres/catalog/objectaccess.h +267 -0
  72. data/ext/pg_query/include/postgres/catalog/objectaddress.h +93 -0
  73. data/ext/pg_query/include/postgres/catalog/pg_aggregate.h +182 -0
  74. data/ext/pg_query/include/postgres/catalog/pg_aggregate_d.h +78 -0
  75. data/ext/pg_query/include/postgres/catalog/pg_am.h +66 -0
  76. data/ext/pg_query/include/postgres/catalog/pg_am_d.h +47 -0
  77. data/ext/pg_query/include/postgres/catalog/pg_attribute.h +240 -0
  78. data/ext/pg_query/include/postgres/catalog/pg_attribute_d.h +62 -0
  79. data/ext/pg_query/include/postgres/catalog/pg_authid.h +66 -0
  80. data/ext/pg_query/include/postgres/catalog/pg_authid_d.h +60 -0
  81. data/ext/pg_query/include/postgres/catalog/pg_class.h +235 -0
  82. data/ext/pg_query/include/postgres/catalog/pg_class_d.h +134 -0
  83. data/ext/pg_query/include/postgres/catalog/pg_collation.h +106 -0
  84. data/ext/pg_query/include/postgres/catalog/pg_collation_d.h +66 -0
  85. data/ext/pg_query/include/postgres/catalog/pg_constraint.h +278 -0
  86. data/ext/pg_query/include/postgres/catalog/pg_constraint_d.h +74 -0
  87. data/ext/pg_query/include/postgres/catalog/pg_control.h +260 -0
  88. data/ext/pg_query/include/postgres/catalog/pg_conversion.h +79 -0
  89. data/ext/pg_query/include/postgres/catalog/pg_conversion_d.h +38 -0
  90. data/ext/pg_query/include/postgres/catalog/pg_database.h +129 -0
  91. data/ext/pg_query/include/postgres/catalog/pg_database_d.h +53 -0
  92. data/ext/pg_query/include/postgres/catalog/pg_depend.h +77 -0
  93. data/ext/pg_query/include/postgres/catalog/pg_depend_d.h +36 -0
  94. data/ext/pg_query/include/postgres/catalog/pg_event_trigger.h +60 -0
  95. data/ext/pg_query/include/postgres/catalog/pg_event_trigger_d.h +36 -0
  96. data/ext/pg_query/include/postgres/catalog/pg_index.h +92 -0
  97. data/ext/pg_query/include/postgres/catalog/pg_index_d.h +59 -0
  98. data/ext/pg_query/include/postgres/catalog/pg_language.h +75 -0
  99. data/ext/pg_query/include/postgres/catalog/pg_language_d.h +41 -0
  100. data/ext/pg_query/include/postgres/catalog/pg_namespace.h +67 -0
  101. data/ext/pg_query/include/postgres/catalog/pg_namespace_d.h +36 -0
  102. data/ext/pg_query/include/postgres/catalog/pg_opclass.h +91 -0
  103. data/ext/pg_query/include/postgres/catalog/pg_opclass_d.h +51 -0
  104. data/ext/pg_query/include/postgres/catalog/pg_operator.h +124 -0
  105. data/ext/pg_query/include/postgres/catalog/pg_operator_d.h +142 -0
  106. data/ext/pg_query/include/postgres/catalog/pg_opfamily.h +67 -0
  107. data/ext/pg_query/include/postgres/catalog/pg_opfamily_d.h +51 -0
  108. data/ext/pg_query/include/postgres/catalog/pg_partitioned_table.h +76 -0
  109. data/ext/pg_query/include/postgres/catalog/pg_partitioned_table_d.h +36 -0
  110. data/ext/pg_query/include/postgres/catalog/pg_proc.h +223 -0
  111. data/ext/pg_query/include/postgres/catalog/pg_proc_d.h +101 -0
  112. data/ext/pg_query/include/postgres/catalog/pg_publication.h +161 -0
  113. data/ext/pg_query/include/postgres/catalog/pg_publication_d.h +38 -0
  114. data/ext/pg_query/include/postgres/catalog/pg_replication_origin.h +65 -0
  115. data/ext/pg_query/include/postgres/catalog/pg_replication_origin_d.h +33 -0
  116. data/ext/pg_query/include/postgres/catalog/pg_statistic.h +288 -0
  117. data/ext/pg_query/include/postgres/catalog/pg_statistic_d.h +199 -0
  118. data/ext/pg_query/include/postgres/catalog/pg_statistic_ext.h +91 -0
  119. data/ext/pg_query/include/postgres/catalog/pg_statistic_ext_d.h +45 -0
  120. data/ext/pg_query/include/postgres/catalog/pg_transform.h +51 -0
  121. data/ext/pg_query/include/postgres/catalog/pg_transform_d.h +34 -0
  122. data/ext/pg_query/include/postgres/catalog/pg_trigger.h +153 -0
  123. data/ext/pg_query/include/postgres/catalog/pg_trigger_d.h +109 -0
  124. data/ext/pg_query/include/postgres/catalog/pg_ts_config.h +56 -0
  125. data/ext/pg_query/include/postgres/catalog/pg_ts_config_d.h +34 -0
  126. data/ext/pg_query/include/postgres/catalog/pg_ts_dict.h +62 -0
  127. data/ext/pg_query/include/postgres/catalog/pg_ts_dict_d.h +35 -0
  128. data/ext/pg_query/include/postgres/catalog/pg_ts_parser.h +63 -0
  129. data/ext/pg_query/include/postgres/catalog/pg_ts_parser_d.h +37 -0
  130. data/ext/pg_query/include/postgres/catalog/pg_ts_template.h +54 -0
  131. data/ext/pg_query/include/postgres/catalog/pg_ts_template_d.h +34 -0
  132. data/ext/pg_query/include/postgres/catalog/pg_type.h +407 -0
  133. data/ext/pg_query/include/postgres/catalog/pg_type_d.h +324 -0
  134. data/ext/pg_query/include/postgres/catalog/storage.h +50 -0
  135. data/ext/pg_query/include/postgres/catalog/syscache_ids.h +104 -0
  136. data/ext/pg_query/include/postgres/commands/async.h +49 -0
  137. data/ext/pg_query/include/postgres/commands/dbcommands.h +37 -0
  138. data/ext/pg_query/include/postgres/commands/defrem.h +161 -0
  139. data/ext/pg_query/include/postgres/commands/event_trigger.h +97 -0
  140. data/ext/pg_query/include/postgres/commands/explain.h +145 -0
  141. data/ext/pg_query/include/postgres/commands/prepare.h +61 -0
  142. data/ext/pg_query/include/postgres/commands/tablespace.h +69 -0
  143. data/ext/pg_query/include/postgres/commands/trigger.h +288 -0
  144. data/ext/pg_query/include/postgres/commands/user.h +43 -0
  145. data/ext/pg_query/include/postgres/commands/vacuum.h +388 -0
  146. data/ext/pg_query/include/postgres/common/cryptohash.h +39 -0
  147. data/ext/pg_query/include/postgres/common/file_perm.h +56 -0
  148. data/ext/pg_query/include/postgres/common/file_utils.h +65 -0
  149. data/ext/pg_query/include/postgres/common/hashfn.h +119 -0
  150. data/ext/pg_query/include/postgres/common/hashfn_unstable.h +407 -0
  151. data/ext/pg_query/include/postgres/common/int.h +512 -0
  152. data/ext/pg_query/include/postgres/common/keywords.h +29 -0
  153. data/ext/pg_query/include/postgres/common/kwlookup.h +44 -0
  154. data/ext/pg_query/include/postgres/common/pg_prng.h +62 -0
  155. data/ext/pg_query/include/postgres/common/relpath.h +97 -0
  156. data/ext/pg_query/include/postgres/common/scram-common.h +70 -0
  157. data/ext/pg_query/include/postgres/common/sha2.h +32 -0
  158. data/ext/pg_query/include/postgres/common/string.h +44 -0
  159. data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +124 -0
  160. data/ext/pg_query/include/postgres/common/unicode_nonspacing_table.h +326 -0
  161. data/ext/pg_query/include/postgres/copyfuncs.funcs.c +5261 -0
  162. data/ext/pg_query/include/postgres/copyfuncs.switch.c +989 -0
  163. data/ext/pg_query/include/postgres/datatype/timestamp.h +269 -0
  164. data/ext/pg_query/include/postgres/equalfuncs.funcs.c +3310 -0
  165. data/ext/pg_query/include/postgres/equalfuncs.switch.c +836 -0
  166. data/ext/pg_query/include/postgres/executor/execdesc.h +70 -0
  167. data/ext/pg_query/include/postgres/executor/executor.h +681 -0
  168. data/ext/pg_query/include/postgres/executor/functions.h +56 -0
  169. data/ext/pg_query/include/postgres/executor/instrument.h +120 -0
  170. data/ext/pg_query/include/postgres/executor/spi.h +207 -0
  171. data/ext/pg_query/include/postgres/executor/tablefunc.h +67 -0
  172. data/ext/pg_query/include/postgres/executor/tuptable.h +523 -0
  173. data/ext/pg_query/include/postgres/fmgr.h +800 -0
  174. data/ext/pg_query/include/postgres/foreign/fdwapi.h +294 -0
  175. data/ext/pg_query/include/postgres/funcapi.h +360 -0
  176. data/ext/pg_query/include/postgres/gram.h +1168 -0
  177. data/ext/pg_query/include/postgres/gramparse.h +75 -0
  178. data/ext/pg_query/include/postgres/jit/jit.h +106 -0
  179. data/ext/pg_query/include/postgres/kwlist_d.h +1164 -0
  180. data/ext/pg_query/include/postgres/lib/dshash.h +130 -0
  181. data/ext/pg_query/include/postgres/lib/ilist.h +1159 -0
  182. data/ext/pg_query/include/postgres/lib/pairingheap.h +102 -0
  183. data/ext/pg_query/include/postgres/lib/simplehash.h +1206 -0
  184. data/ext/pg_query/include/postgres/lib/sort_template.h +445 -0
  185. data/ext/pg_query/include/postgres/lib/stringinfo.h +243 -0
  186. data/ext/pg_query/include/postgres/libpq/auth.h +37 -0
  187. data/ext/pg_query/include/postgres/libpq/crypt.h +47 -0
  188. data/ext/pg_query/include/postgres/libpq/hba.h +186 -0
  189. data/ext/pg_query/include/postgres/libpq/libpq-be.h +361 -0
  190. data/ext/pg_query/include/postgres/libpq/libpq.h +143 -0
  191. data/ext/pg_query/include/postgres/libpq/pqcomm.h +169 -0
  192. data/ext/pg_query/include/postgres/libpq/pqformat.h +209 -0
  193. data/ext/pg_query/include/postgres/libpq/pqsignal.h +54 -0
  194. data/ext/pg_query/include/postgres/libpq/protocol.h +89 -0
  195. data/ext/pg_query/include/postgres/libpq/sasl.h +136 -0
  196. data/ext/pg_query/include/postgres/libpq/scram.h +37 -0
  197. data/ext/pg_query/include/postgres/mb/pg_wchar.h +793 -0
  198. data/ext/pg_query/include/postgres/mb/stringinfo_mb.h +24 -0
  199. data/ext/pg_query/include/postgres/miscadmin.h +527 -0
  200. data/ext/pg_query/include/postgres/nodes/bitmapset.h +140 -0
  201. data/ext/pg_query/include/postgres/nodes/execnodes.h +2855 -0
  202. data/ext/pg_query/include/postgres/nodes/extensible.h +164 -0
  203. data/ext/pg_query/include/postgres/nodes/lockoptions.h +61 -0
  204. data/ext/pg_query/include/postgres/nodes/makefuncs.h +127 -0
  205. data/ext/pg_query/include/postgres/nodes/memnodes.h +152 -0
  206. data/ext/pg_query/include/postgres/nodes/miscnodes.h +56 -0
  207. data/ext/pg_query/include/postgres/nodes/nodeFuncs.h +222 -0
  208. data/ext/pg_query/include/postgres/nodes/nodes.h +435 -0
  209. data/ext/pg_query/include/postgres/nodes/nodetags.h +491 -0
  210. data/ext/pg_query/include/postgres/nodes/params.h +170 -0
  211. data/ext/pg_query/include/postgres/nodes/parsenodes.h +4233 -0
  212. data/ext/pg_query/include/postgres/nodes/pathnodes.h +3438 -0
  213. data/ext/pg_query/include/postgres/nodes/pg_list.h +686 -0
  214. data/ext/pg_query/include/postgres/nodes/plannodes.h +1593 -0
  215. data/ext/pg_query/include/postgres/nodes/primnodes.h +2339 -0
  216. data/ext/pg_query/include/postgres/nodes/print.h +34 -0
  217. data/ext/pg_query/include/postgres/nodes/queryjumble.h +86 -0
  218. data/ext/pg_query/include/postgres/nodes/replnodes.h +132 -0
  219. data/ext/pg_query/include/postgres/nodes/supportnodes.h +346 -0
  220. data/ext/pg_query/include/postgres/nodes/tidbitmap.h +75 -0
  221. data/ext/pg_query/include/postgres/nodes/value.h +90 -0
  222. data/ext/pg_query/include/postgres/optimizer/cost.h +216 -0
  223. data/ext/pg_query/include/postgres/optimizer/geqo.h +90 -0
  224. data/ext/pg_query/include/postgres/optimizer/geqo_gene.h +45 -0
  225. data/ext/pg_query/include/postgres/optimizer/optimizer.h +205 -0
  226. data/ext/pg_query/include/postgres/optimizer/paths.h +271 -0
  227. data/ext/pg_query/include/postgres/optimizer/planmain.h +123 -0
  228. data/ext/pg_query/include/postgres/parser/analyze.h +66 -0
  229. data/ext/pg_query/include/postgres/parser/kwlist.h +518 -0
  230. data/ext/pg_query/include/postgres/parser/parse_agg.h +65 -0
  231. data/ext/pg_query/include/postgres/parser/parse_coerce.h +105 -0
  232. data/ext/pg_query/include/postgres/parser/parse_expr.h +25 -0
  233. data/ext/pg_query/include/postgres/parser/parse_func.h +74 -0
  234. data/ext/pg_query/include/postgres/parser/parse_node.h +358 -0
  235. data/ext/pg_query/include/postgres/parser/parse_oper.h +68 -0
  236. data/ext/pg_query/include/postgres/parser/parse_relation.h +129 -0
  237. data/ext/pg_query/include/postgres/parser/parse_type.h +61 -0
  238. data/ext/pg_query/include/postgres/parser/parser.h +68 -0
  239. data/ext/pg_query/include/postgres/parser/parsetree.h +61 -0
  240. data/ext/pg_query/include/postgres/parser/scanner.h +152 -0
  241. data/ext/pg_query/include/postgres/parser/scansup.h +27 -0
  242. data/ext/pg_query/include/postgres/partitioning/partdefs.h +26 -0
  243. data/ext/pg_query/include/postgres/pg_config.h +985 -0
  244. data/ext/pg_query/include/postgres/pg_config_manual.h +385 -0
  245. data/ext/pg_query/include/postgres/pg_config_os.h +8 -0
  246. data/ext/pg_query/include/postgres/pg_getopt.h +56 -0
  247. data/ext/pg_query/include/postgres/pg_trace.h +17 -0
  248. data/ext/pg_query/include/postgres/pgstat.h +780 -0
  249. data/ext/pg_query/include/postgres/pgtime.h +94 -0
  250. data/ext/pg_query/include/postgres/pl_gram.h +385 -0
  251. data/ext/pg_query/include/postgres/pl_reserved_kwlist.h +52 -0
  252. data/ext/pg_query/include/postgres/pl_reserved_kwlist_d.h +114 -0
  253. data/ext/pg_query/include/postgres/pl_unreserved_kwlist.h +112 -0
  254. data/ext/pg_query/include/postgres/pl_unreserved_kwlist_d.h +246 -0
  255. data/ext/pg_query/include/postgres/plerrcodes.h +998 -0
  256. data/ext/pg_query/include/postgres/plpgsql.h +1342 -0
  257. data/ext/pg_query/include/postgres/port/atomics/arch-arm.h +32 -0
  258. data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +17 -0
  259. data/ext/pg_query/include/postgres/port/atomics/arch-ppc.h +256 -0
  260. data/ext/pg_query/include/postgres/port/atomics/arch-x86.h +254 -0
  261. data/ext/pg_query/include/postgres/port/atomics/fallback.h +170 -0
  262. data/ext/pg_query/include/postgres/port/atomics/generic-gcc.h +323 -0
  263. data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +119 -0
  264. data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +121 -0
  265. data/ext/pg_query/include/postgres/port/atomics/generic.h +437 -0
  266. data/ext/pg_query/include/postgres/port/atomics.h +606 -0
  267. data/ext/pg_query/include/postgres/port/pg_bitutils.h +421 -0
  268. data/ext/pg_query/include/postgres/port/pg_bswap.h +161 -0
  269. data/ext/pg_query/include/postgres/port/pg_crc32c.h +110 -0
  270. data/ext/pg_query/include/postgres/port/pg_iovec.h +117 -0
  271. data/ext/pg_query/include/postgres/port/simd.h +422 -0
  272. data/ext/pg_query/include/postgres/port/win32/arpa/inet.h +3 -0
  273. data/ext/pg_query/include/postgres/port/win32/dlfcn.h +1 -0
  274. data/ext/pg_query/include/postgres/port/win32/grp.h +1 -0
  275. data/ext/pg_query/include/postgres/port/win32/netdb.h +7 -0
  276. data/ext/pg_query/include/postgres/port/win32/netinet/in.h +3 -0
  277. data/ext/pg_query/include/postgres/port/win32/netinet/tcp.h +7 -0
  278. data/ext/pg_query/include/postgres/port/win32/pwd.h +3 -0
  279. data/ext/pg_query/include/postgres/port/win32/sys/resource.h +20 -0
  280. data/ext/pg_query/include/postgres/port/win32/sys/select.h +3 -0
  281. data/ext/pg_query/include/postgres/port/win32/sys/socket.h +34 -0
  282. data/ext/pg_query/include/postgres/port/win32/sys/un.h +17 -0
  283. data/ext/pg_query/include/postgres/port/win32/sys/wait.h +3 -0
  284. data/ext/pg_query/include/postgres/port/win32.h +59 -0
  285. data/ext/pg_query/include/postgres/port/win32_msvc/dirent.h +34 -0
  286. data/ext/pg_query/include/postgres/port/win32_msvc/sys/file.h +1 -0
  287. data/ext/pg_query/include/postgres/port/win32_msvc/sys/param.h +1 -0
  288. data/ext/pg_query/include/postgres/port/win32_msvc/sys/time.h +1 -0
  289. data/ext/pg_query/include/postgres/port/win32_msvc/unistd.h +9 -0
  290. data/ext/pg_query/include/postgres/port/win32_msvc/utime.h +3 -0
  291. data/ext/pg_query/include/postgres/port/win32_port.h +582 -0
  292. data/ext/pg_query/include/postgres/port.h +555 -0
  293. data/ext/pg_query/include/postgres/portability/instr_time.h +197 -0
  294. data/ext/pg_query/include/postgres/postgres.h +579 -0
  295. data/ext/pg_query/include/postgres/postgres_ext.h +73 -0
  296. data/ext/pg_query/include/postgres/postmaster/autovacuum.h +69 -0
  297. data/ext/pg_query/include/postgres/postmaster/bgworker.h +164 -0
  298. data/ext/pg_query/include/postgres/postmaster/bgworker_internals.h +60 -0
  299. data/ext/pg_query/include/postgres/postmaster/bgwriter.h +45 -0
  300. data/ext/pg_query/include/postgres/postmaster/interrupt.h +32 -0
  301. data/ext/pg_query/include/postgres/postmaster/pgarch.h +36 -0
  302. data/ext/pg_query/include/postgres/postmaster/postmaster.h +101 -0
  303. data/ext/pg_query/include/postgres/postmaster/startup.h +41 -0
  304. data/ext/pg_query/include/postgres/postmaster/syslogger.h +101 -0
  305. data/ext/pg_query/include/postgres/postmaster/walsummarizer.h +35 -0
  306. data/ext/pg_query/include/postgres/postmaster/walwriter.h +23 -0
  307. data/ext/pg_query/include/postgres/regex/regex.h +272 -0
  308. data/ext/pg_query/include/postgres/replication/logicallauncher.h +34 -0
  309. data/ext/pg_query/include/postgres/replication/logicalproto.h +274 -0
  310. data/ext/pg_query/include/postgres/replication/logicalworker.h +33 -0
  311. data/ext/pg_query/include/postgres/replication/origin.h +73 -0
  312. data/ext/pg_query/include/postgres/replication/reorderbuffer.h +734 -0
  313. data/ext/pg_query/include/postgres/replication/slot.h +289 -0
  314. data/ext/pg_query/include/postgres/replication/slotsync.h +38 -0
  315. data/ext/pg_query/include/postgres/replication/syncrep.h +109 -0
  316. data/ext/pg_query/include/postgres/replication/walreceiver.h +504 -0
  317. data/ext/pg_query/include/postgres/replication/walsender.h +76 -0
  318. data/ext/pg_query/include/postgres/rewrite/prs2lock.h +46 -0
  319. data/ext/pg_query/include/postgres/rewrite/rewriteHandler.h +41 -0
  320. data/ext/pg_query/include/postgres/rewrite/rewriteManip.h +96 -0
  321. data/ext/pg_query/include/postgres/rewrite/rewriteSupport.h +26 -0
  322. data/ext/pg_query/include/postgres/storage/block.h +108 -0
  323. data/ext/pg_query/include/postgres/storage/buf.h +46 -0
  324. data/ext/pg_query/include/postgres/storage/bufmgr.h +411 -0
  325. data/ext/pg_query/include/postgres/storage/bufpage.h +510 -0
  326. data/ext/pg_query/include/postgres/storage/condition_variable.h +73 -0
  327. data/ext/pg_query/include/postgres/storage/dsm.h +61 -0
  328. data/ext/pg_query/include/postgres/storage/dsm_impl.h +79 -0
  329. data/ext/pg_query/include/postgres/storage/fd.h +219 -0
  330. data/ext/pg_query/include/postgres/storage/fileset.h +40 -0
  331. data/ext/pg_query/include/postgres/storage/ipc.h +87 -0
  332. data/ext/pg_query/include/postgres/storage/item.h +19 -0
  333. data/ext/pg_query/include/postgres/storage/itemid.h +184 -0
  334. data/ext/pg_query/include/postgres/storage/itemptr.h +245 -0
  335. data/ext/pg_query/include/postgres/storage/large_object.h +100 -0
  336. data/ext/pg_query/include/postgres/storage/latch.h +196 -0
  337. data/ext/pg_query/include/postgres/storage/lmgr.h +126 -0
  338. data/ext/pg_query/include/postgres/storage/lock.h +624 -0
  339. data/ext/pg_query/include/postgres/storage/lockdefs.h +61 -0
  340. data/ext/pg_query/include/postgres/storage/lwlock.h +228 -0
  341. data/ext/pg_query/include/postgres/storage/lwlocknames.h +47 -0
  342. data/ext/pg_query/include/postgres/storage/off.h +57 -0
  343. data/ext/pg_query/include/postgres/storage/pg_sema.h +61 -0
  344. data/ext/pg_query/include/postgres/storage/pg_shmem.h +93 -0
  345. data/ext/pg_query/include/postgres/storage/pmsignal.h +105 -0
  346. data/ext/pg_query/include/postgres/storage/predicate.h +83 -0
  347. data/ext/pg_query/include/postgres/storage/proc.h +488 -0
  348. data/ext/pg_query/include/postgres/storage/procarray.h +103 -0
  349. data/ext/pg_query/include/postgres/storage/proclist_types.h +53 -0
  350. data/ext/pg_query/include/postgres/storage/procnumber.h +43 -0
  351. data/ext/pg_query/include/postgres/storage/procsignal.h +75 -0
  352. data/ext/pg_query/include/postgres/storage/read_stream.h +65 -0
  353. data/ext/pg_query/include/postgres/storage/relfilelocator.h +100 -0
  354. data/ext/pg_query/include/postgres/storage/s_lock.h +847 -0
  355. data/ext/pg_query/include/postgres/storage/sharedfileset.h +37 -0
  356. data/ext/pg_query/include/postgres/storage/shm_mq.h +86 -0
  357. data/ext/pg_query/include/postgres/storage/shm_toc.h +58 -0
  358. data/ext/pg_query/include/postgres/storage/shmem.h +59 -0
  359. data/ext/pg_query/include/postgres/storage/sinval.h +153 -0
  360. data/ext/pg_query/include/postgres/storage/smgr.h +130 -0
  361. data/ext/pg_query/include/postgres/storage/spin.h +77 -0
  362. data/ext/pg_query/include/postgres/storage/standby.h +109 -0
  363. data/ext/pg_query/include/postgres/storage/standbydefs.h +74 -0
  364. data/ext/pg_query/include/postgres/storage/sync.h +66 -0
  365. data/ext/pg_query/include/postgres/tcop/cmdtag.h +62 -0
  366. data/ext/pg_query/include/postgres/tcop/cmdtaglist.h +219 -0
  367. data/ext/pg_query/include/postgres/tcop/deparse_utility.h +108 -0
  368. data/ext/pg_query/include/postgres/tcop/dest.h +148 -0
  369. data/ext/pg_query/include/postgres/tcop/fastpath.h +20 -0
  370. data/ext/pg_query/include/postgres/tcop/pquery.h +51 -0
  371. data/ext/pg_query/include/postgres/tcop/tcopprot.h +98 -0
  372. data/ext/pg_query/include/postgres/tcop/utility.h +112 -0
  373. data/ext/pg_query/include/postgres/tsearch/ts_cache.h +96 -0
  374. data/ext/pg_query/include/postgres/utils/acl.h +290 -0
  375. data/ext/pg_query/include/postgres/utils/aclchk_internal.h +45 -0
  376. data/ext/pg_query/include/postgres/utils/array.h +481 -0
  377. data/ext/pg_query/include/postgres/utils/ascii.h +84 -0
  378. data/ext/pg_query/include/postgres/utils/backend_progress.h +46 -0
  379. data/ext/pg_query/include/postgres/utils/backend_status.h +340 -0
  380. data/ext/pg_query/include/postgres/utils/builtins.h +139 -0
  381. data/ext/pg_query/include/postgres/utils/bytea.h +28 -0
  382. data/ext/pg_query/include/postgres/utils/catcache.h +231 -0
  383. data/ext/pg_query/include/postgres/utils/date.h +118 -0
  384. data/ext/pg_query/include/postgres/utils/datetime.h +367 -0
  385. data/ext/pg_query/include/postgres/utils/datum.h +76 -0
  386. data/ext/pg_query/include/postgres/utils/dsa.h +166 -0
  387. data/ext/pg_query/include/postgres/utils/elog.h +540 -0
  388. data/ext/pg_query/include/postgres/utils/errcodes.h +352 -0
  389. data/ext/pg_query/include/postgres/utils/expandeddatum.h +170 -0
  390. data/ext/pg_query/include/postgres/utils/expandedrecord.h +241 -0
  391. data/ext/pg_query/include/postgres/utils/float.h +357 -0
  392. data/ext/pg_query/include/postgres/utils/fmgroids.h +3347 -0
  393. data/ext/pg_query/include/postgres/utils/fmgrprotos.h +2904 -0
  394. data/ext/pg_query/include/postgres/utils/fmgrtab.h +49 -0
  395. data/ext/pg_query/include/postgres/utils/guc.h +456 -0
  396. data/ext/pg_query/include/postgres/utils/guc_hooks.h +184 -0
  397. data/ext/pg_query/include/postgres/utils/guc_tables.h +323 -0
  398. data/ext/pg_query/include/postgres/utils/hsearch.h +153 -0
  399. data/ext/pg_query/include/postgres/utils/injection_point.h +44 -0
  400. data/ext/pg_query/include/postgres/utils/inval.h +68 -0
  401. data/ext/pg_query/include/postgres/utils/logtape.h +77 -0
  402. data/ext/pg_query/include/postgres/utils/lsyscache.h +215 -0
  403. data/ext/pg_query/include/postgres/utils/memdebug.h +82 -0
  404. data/ext/pg_query/include/postgres/utils/memutils.h +193 -0
  405. data/ext/pg_query/include/postgres/utils/memutils_internal.h +176 -0
  406. data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +253 -0
  407. data/ext/pg_query/include/postgres/utils/numeric.h +110 -0
  408. data/ext/pg_query/include/postgres/utils/palloc.h +151 -0
  409. data/ext/pg_query/include/postgres/utils/partcache.h +103 -0
  410. data/ext/pg_query/include/postgres/utils/pg_locale.h +136 -0
  411. data/ext/pg_query/include/postgres/utils/pgstat_internal.h +827 -0
  412. data/ext/pg_query/include/postgres/utils/plancache.h +238 -0
  413. data/ext/pg_query/include/postgres/utils/portal.h +252 -0
  414. data/ext/pg_query/include/postgres/utils/probes.h +114 -0
  415. data/ext/pg_query/include/postgres/utils/ps_status.h +47 -0
  416. data/ext/pg_query/include/postgres/utils/queryenvironment.h +74 -0
  417. data/ext/pg_query/include/postgres/utils/regproc.h +39 -0
  418. data/ext/pg_query/include/postgres/utils/rel.h +711 -0
  419. data/ext/pg_query/include/postgres/utils/relcache.h +155 -0
  420. data/ext/pg_query/include/postgres/utils/reltrigger.h +81 -0
  421. data/ext/pg_query/include/postgres/utils/resowner.h +167 -0
  422. data/ext/pg_query/include/postgres/utils/ruleutils.h +52 -0
  423. data/ext/pg_query/include/postgres/utils/sharedtuplestore.h +61 -0
  424. data/ext/pg_query/include/postgres/utils/snapmgr.h +130 -0
  425. data/ext/pg_query/include/postgres/utils/snapshot.h +219 -0
  426. data/ext/pg_query/include/postgres/utils/sortsupport.h +391 -0
  427. data/ext/pg_query/include/postgres/utils/syscache.h +136 -0
  428. data/ext/pg_query/include/postgres/utils/timeout.h +96 -0
  429. data/ext/pg_query/include/postgres/utils/timestamp.h +147 -0
  430. data/ext/pg_query/include/postgres/utils/tuplesort.h +472 -0
  431. data/ext/pg_query/include/postgres/utils/tuplestore.h +88 -0
  432. data/ext/pg_query/include/postgres/utils/typcache.h +210 -0
  433. data/ext/pg_query/include/postgres/utils/varlena.h +53 -0
  434. data/ext/pg_query/include/postgres/utils/wait_event.h +108 -0
  435. data/ext/pg_query/include/postgres/utils/wait_event_types.h +218 -0
  436. data/ext/pg_query/include/postgres/utils/xml.h +94 -0
  437. data/ext/pg_query/include/postgres/varatt.h +358 -0
  438. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +8077 -6217
  439. data/ext/pg_query/include/protobuf/pg_query.pb.h +132024 -88124
  440. data/ext/pg_query/pg_query.c +10 -1
  441. data/ext/pg_query/pg_query.pb-c.c +24028 -17173
  442. data/ext/pg_query/pg_query_deparse.c +1 -9902
  443. data/ext/pg_query/pg_query_fingerprint.c +42 -18
  444. data/ext/pg_query/pg_query_fingerprint.h +1 -1
  445. data/ext/pg_query/pg_query_internal.h +1 -1
  446. data/ext/pg_query/pg_query_json_plpgsql.c +1 -25
  447. data/ext/pg_query/pg_query_normalize.c +44 -3
  448. data/ext/pg_query/pg_query_outfuncs_json.c +62 -16
  449. data/ext/pg_query/pg_query_outfuncs_protobuf.c +73 -12
  450. data/ext/pg_query/pg_query_parse.c +47 -5
  451. data/ext/pg_query/pg_query_parse_plpgsql.c +19 -18
  452. data/ext/pg_query/pg_query_readfuncs_protobuf.c +45 -10
  453. data/ext/pg_query/pg_query_ruby.c +5 -0
  454. data/ext/pg_query/pg_query_scan.c +4 -3
  455. data/ext/pg_query/pg_query_split.c +6 -5
  456. data/ext/pg_query/postgres_deparse.c +11496 -0
  457. data/ext/pg_query/postgres_deparse.h +9 -0
  458. data/ext/pg_query/src_backend_catalog_namespace.c +262 -71
  459. data/ext/pg_query/src_backend_catalog_pg_proc.c +3 -2
  460. data/ext/pg_query/src_backend_commands_define.c +12 -3
  461. data/ext/pg_query/src_backend_nodes_bitmapset.c +142 -156
  462. data/ext/pg_query/src_backend_nodes_copyfuncs.c +100 -5881
  463. data/ext/pg_query/src_backend_nodes_equalfuncs.c +102 -3831
  464. data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
  465. data/ext/pg_query/src_backend_nodes_list.c +89 -18
  466. data/ext/pg_query/src_backend_nodes_makefuncs.c +138 -4
  467. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +433 -132
  468. data/ext/pg_query/src_backend_nodes_value.c +28 -19
  469. data/ext/pg_query/src_backend_parser_gram.c +45255 -38885
  470. data/ext/pg_query/src_backend_parser_parser.c +53 -8
  471. data/ext/pg_query/src_backend_parser_scan.c +6999 -3438
  472. data/ext/pg_query/src_backend_parser_scansup.c +5 -28
  473. data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
  474. data/ext/pg_query/src_backend_tcop_postgres.c +156 -114
  475. data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
  476. data/ext/pg_query/src_backend_utils_adt_datum.c +14 -2
  477. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
  478. data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
  479. data/ext/pg_query/src_backend_utils_adt_numutils.c +488 -0
  480. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +247 -34
  481. data/ext/pg_query/src_backend_utils_error_assert.c +17 -18
  482. data/ext/pg_query/src_backend_utils_error_elog.c +543 -343
  483. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +47 -18
  484. data/ext/pg_query/src_backend_utils_init_globals.c +22 -7
  485. data/ext/pg_query/src_backend_utils_mb_mbutils.c +84 -148
  486. data/ext/pg_query/src_backend_utils_misc_guc_tables.c +502 -0
  487. data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +166 -0
  488. data/ext/pg_query/src_backend_utils_mmgr_aset.c +708 -499
  489. data/ext/pg_query/src_backend_utils_mmgr_bump.c +728 -0
  490. data/ext/pg_query/src_backend_utils_mmgr_generation.c +1115 -0
  491. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +710 -218
  492. data/ext/pg_query/src_backend_utils_mmgr_slab.c +1079 -0
  493. data/ext/pg_query/src_common_encnames.c +46 -44
  494. data/ext/pg_query/src_common_hashfn.c +3 -3
  495. data/ext/pg_query/src_common_keywords.c +15 -2
  496. data/ext/pg_query/src_common_kwlist_d.h +602 -510
  497. data/ext/pg_query/src_common_kwlookup.c +1 -1
  498. data/ext/pg_query/src_common_psprintf.c +3 -3
  499. data/ext/pg_query/src_common_stringinfo.c +21 -4
  500. data/ext/pg_query/src_common_wchar.c +754 -178
  501. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +143 -24
  502. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -18
  503. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1295 -1255
  504. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
  505. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +10 -10
  506. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +20 -2
  507. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +60 -60
  508. data/ext/pg_query/src_port_pg_bitutils.c +283 -54
  509. data/ext/pg_query/src_port_pgstrcasecmp.c +57 -1
  510. data/ext/pg_query/src_port_qsort.c +12 -224
  511. data/ext/pg_query/src_port_snprintf.c +56 -39
  512. data/ext/pg_query/src_port_strerror.c +9 -21
  513. data/ext/pg_query/src_port_strlcpy.c +79 -0
  514. data/lib/pg_query/filter_columns.rb +1 -1
  515. data/lib/pg_query/fingerprint.rb +10 -9
  516. data/lib/pg_query/node.rb +18 -13
  517. data/lib/pg_query/param_refs.rb +3 -3
  518. data/lib/pg_query/parse.rb +25 -15
  519. data/lib/pg_query/parse_error.rb +1 -0
  520. data/lib/pg_query/pg_query_pb.rb +181 -3038
  521. data/lib/pg_query/scan.rb +1 -0
  522. data/lib/pg_query/treewalker.rb +55 -8
  523. data/lib/pg_query/truncate.rb +19 -21
  524. data/lib/pg_query/version.rb +1 -1
  525. metadata +447 -436
  526. data/ext/pg_query/guc-file.c +0 -0
  527. data/ext/pg_query/include/access/amapi.h +0 -246
  528. data/ext/pg_query/include/access/attmap.h +0 -52
  529. data/ext/pg_query/include/access/attnum.h +0 -64
  530. data/ext/pg_query/include/access/clog.h +0 -61
  531. data/ext/pg_query/include/access/commit_ts.h +0 -77
  532. data/ext/pg_query/include/access/detoast.h +0 -92
  533. data/ext/pg_query/include/access/genam.h +0 -228
  534. data/ext/pg_query/include/access/gin.h +0 -78
  535. data/ext/pg_query/include/access/htup.h +0 -89
  536. data/ext/pg_query/include/access/htup_details.h +0 -819
  537. data/ext/pg_query/include/access/itup.h +0 -161
  538. data/ext/pg_query/include/access/parallel.h +0 -82
  539. data/ext/pg_query/include/access/printtup.h +0 -35
  540. data/ext/pg_query/include/access/relation.h +0 -28
  541. data/ext/pg_query/include/access/relscan.h +0 -176
  542. data/ext/pg_query/include/access/rmgr.h +0 -35
  543. data/ext/pg_query/include/access/rmgrlist.h +0 -49
  544. data/ext/pg_query/include/access/sdir.h +0 -58
  545. data/ext/pg_query/include/access/skey.h +0 -151
  546. data/ext/pg_query/include/access/stratnum.h +0 -83
  547. data/ext/pg_query/include/access/sysattr.h +0 -29
  548. data/ext/pg_query/include/access/table.h +0 -27
  549. data/ext/pg_query/include/access/tableam.h +0 -1825
  550. data/ext/pg_query/include/access/transam.h +0 -265
  551. data/ext/pg_query/include/access/tupconvert.h +0 -51
  552. data/ext/pg_query/include/access/tupdesc.h +0 -154
  553. data/ext/pg_query/include/access/tupmacs.h +0 -247
  554. data/ext/pg_query/include/access/twophase.h +0 -63
  555. data/ext/pg_query/include/access/xact.h +0 -469
  556. data/ext/pg_query/include/access/xlog.h +0 -398
  557. data/ext/pg_query/include/access/xlog_internal.h +0 -339
  558. data/ext/pg_query/include/access/xlogdefs.h +0 -109
  559. data/ext/pg_query/include/access/xloginsert.h +0 -64
  560. data/ext/pg_query/include/access/xlogreader.h +0 -337
  561. data/ext/pg_query/include/access/xlogrecord.h +0 -227
  562. data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
  563. data/ext/pg_query/include/c.h +0 -1334
  564. data/ext/pg_query/include/catalog/catalog.h +0 -42
  565. data/ext/pg_query/include/catalog/catversion.h +0 -58
  566. data/ext/pg_query/include/catalog/dependency.h +0 -277
  567. data/ext/pg_query/include/catalog/genbki.h +0 -64
  568. data/ext/pg_query/include/catalog/index.h +0 -199
  569. data/ext/pg_query/include/catalog/indexing.h +0 -366
  570. data/ext/pg_query/include/catalog/namespace.h +0 -188
  571. data/ext/pg_query/include/catalog/objectaccess.h +0 -197
  572. data/ext/pg_query/include/catalog/objectaddress.h +0 -84
  573. data/ext/pg_query/include/catalog/pg_aggregate.h +0 -176
  574. data/ext/pg_query/include/catalog/pg_aggregate_d.h +0 -77
  575. data/ext/pg_query/include/catalog/pg_am.h +0 -60
  576. data/ext/pg_query/include/catalog/pg_am_d.h +0 -45
  577. data/ext/pg_query/include/catalog/pg_attribute.h +0 -204
  578. data/ext/pg_query/include/catalog/pg_attribute_d.h +0 -59
  579. data/ext/pg_query/include/catalog/pg_authid.h +0 -58
  580. data/ext/pg_query/include/catalog/pg_authid_d.h +0 -49
  581. data/ext/pg_query/include/catalog/pg_class.h +0 -200
  582. data/ext/pg_query/include/catalog/pg_class_d.h +0 -103
  583. data/ext/pg_query/include/catalog/pg_collation.h +0 -73
  584. data/ext/pg_query/include/catalog/pg_collation_d.h +0 -45
  585. data/ext/pg_query/include/catalog/pg_constraint.h +0 -247
  586. data/ext/pg_query/include/catalog/pg_constraint_d.h +0 -67
  587. data/ext/pg_query/include/catalog/pg_control.h +0 -252
  588. data/ext/pg_query/include/catalog/pg_conversion.h +0 -72
  589. data/ext/pg_query/include/catalog/pg_conversion_d.h +0 -35
  590. data/ext/pg_query/include/catalog/pg_depend.h +0 -73
  591. data/ext/pg_query/include/catalog/pg_depend_d.h +0 -34
  592. data/ext/pg_query/include/catalog/pg_event_trigger.h +0 -51
  593. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +0 -34
  594. data/ext/pg_query/include/catalog/pg_index.h +0 -80
  595. data/ext/pg_query/include/catalog/pg_index_d.h +0 -56
  596. data/ext/pg_query/include/catalog/pg_language.h +0 -67
  597. data/ext/pg_query/include/catalog/pg_language_d.h +0 -39
  598. data/ext/pg_query/include/catalog/pg_namespace.h +0 -59
  599. data/ext/pg_query/include/catalog/pg_namespace_d.h +0 -34
  600. data/ext/pg_query/include/catalog/pg_opclass.h +0 -85
  601. data/ext/pg_query/include/catalog/pg_opclass_d.h +0 -49
  602. data/ext/pg_query/include/catalog/pg_operator.h +0 -104
  603. data/ext/pg_query/include/catalog/pg_operator_d.h +0 -106
  604. data/ext/pg_query/include/catalog/pg_opfamily.h +0 -60
  605. data/ext/pg_query/include/catalog/pg_opfamily_d.h +0 -47
  606. data/ext/pg_query/include/catalog/pg_partitioned_table.h +0 -63
  607. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +0 -35
  608. data/ext/pg_query/include/catalog/pg_proc.h +0 -211
  609. data/ext/pg_query/include/catalog/pg_proc_d.h +0 -99
  610. data/ext/pg_query/include/catalog/pg_publication.h +0 -118
  611. data/ext/pg_query/include/catalog/pg_publication_d.h +0 -36
  612. data/ext/pg_query/include/catalog/pg_replication_origin.h +0 -57
  613. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +0 -29
  614. data/ext/pg_query/include/catalog/pg_statistic.h +0 -275
  615. data/ext/pg_query/include/catalog/pg_statistic_d.h +0 -194
  616. data/ext/pg_query/include/catalog/pg_statistic_ext.h +0 -74
  617. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +0 -40
  618. data/ext/pg_query/include/catalog/pg_transform.h +0 -45
  619. data/ext/pg_query/include/catalog/pg_transform_d.h +0 -32
  620. data/ext/pg_query/include/catalog/pg_trigger.h +0 -137
  621. data/ext/pg_query/include/catalog/pg_trigger_d.h +0 -106
  622. data/ext/pg_query/include/catalog/pg_ts_config.h +0 -50
  623. data/ext/pg_query/include/catalog/pg_ts_config_d.h +0 -32
  624. data/ext/pg_query/include/catalog/pg_ts_dict.h +0 -54
  625. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +0 -33
  626. data/ext/pg_query/include/catalog/pg_ts_parser.h +0 -57
  627. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +0 -35
  628. data/ext/pg_query/include/catalog/pg_ts_template.h +0 -48
  629. data/ext/pg_query/include/catalog/pg_ts_template_d.h +0 -32
  630. data/ext/pg_query/include/catalog/pg_type.h +0 -373
  631. data/ext/pg_query/include/catalog/pg_type_d.h +0 -285
  632. data/ext/pg_query/include/catalog/storage.h +0 -48
  633. data/ext/pg_query/include/commands/async.h +0 -54
  634. data/ext/pg_query/include/commands/dbcommands.h +0 -35
  635. data/ext/pg_query/include/commands/defrem.h +0 -173
  636. data/ext/pg_query/include/commands/event_trigger.h +0 -88
  637. data/ext/pg_query/include/commands/explain.h +0 -127
  638. data/ext/pg_query/include/commands/prepare.h +0 -61
  639. data/ext/pg_query/include/commands/tablespace.h +0 -69
  640. data/ext/pg_query/include/commands/trigger.h +0 -285
  641. data/ext/pg_query/include/commands/user.h +0 -37
  642. data/ext/pg_query/include/commands/vacuum.h +0 -293
  643. data/ext/pg_query/include/commands/variable.h +0 -38
  644. data/ext/pg_query/include/common/file_perm.h +0 -56
  645. data/ext/pg_query/include/common/hashfn.h +0 -104
  646. data/ext/pg_query/include/common/ip.h +0 -37
  647. data/ext/pg_query/include/common/keywords.h +0 -33
  648. data/ext/pg_query/include/common/kwlookup.h +0 -44
  649. data/ext/pg_query/include/common/relpath.h +0 -90
  650. data/ext/pg_query/include/common/string.h +0 -19
  651. data/ext/pg_query/include/common/unicode_combining_table.h +0 -196
  652. data/ext/pg_query/include/datatype/timestamp.h +0 -197
  653. data/ext/pg_query/include/executor/execdesc.h +0 -70
  654. data/ext/pg_query/include/executor/executor.h +0 -620
  655. data/ext/pg_query/include/executor/functions.h +0 -41
  656. data/ext/pg_query/include/executor/instrument.h +0 -101
  657. data/ext/pg_query/include/executor/spi.h +0 -175
  658. data/ext/pg_query/include/executor/tablefunc.h +0 -67
  659. data/ext/pg_query/include/executor/tuptable.h +0 -487
  660. data/ext/pg_query/include/fmgr.h +0 -775
  661. data/ext/pg_query/include/funcapi.h +0 -348
  662. data/ext/pg_query/include/getaddrinfo.h +0 -162
  663. data/ext/pg_query/include/jit/jit.h +0 -105
  664. data/ext/pg_query/include/kwlist_d.h +0 -1072
  665. data/ext/pg_query/include/lib/ilist.h +0 -727
  666. data/ext/pg_query/include/lib/pairingheap.h +0 -102
  667. data/ext/pg_query/include/lib/simplehash.h +0 -1059
  668. data/ext/pg_query/include/lib/stringinfo.h +0 -161
  669. data/ext/pg_query/include/libpq/auth.h +0 -29
  670. data/ext/pg_query/include/libpq/crypt.h +0 -46
  671. data/ext/pg_query/include/libpq/hba.h +0 -140
  672. data/ext/pg_query/include/libpq/libpq-be.h +0 -326
  673. data/ext/pg_query/include/libpq/libpq.h +0 -134
  674. data/ext/pg_query/include/libpq/pqcomm.h +0 -208
  675. data/ext/pg_query/include/libpq/pqformat.h +0 -210
  676. data/ext/pg_query/include/libpq/pqsignal.h +0 -42
  677. data/ext/pg_query/include/mb/pg_wchar.h +0 -673
  678. data/ext/pg_query/include/mb/stringinfo_mb.h +0 -24
  679. data/ext/pg_query/include/miscadmin.h +0 -489
  680. data/ext/pg_query/include/nodes/bitmapset.h +0 -122
  681. data/ext/pg_query/include/nodes/execnodes.h +0 -2523
  682. data/ext/pg_query/include/nodes/extensible.h +0 -160
  683. data/ext/pg_query/include/nodes/lockoptions.h +0 -61
  684. data/ext/pg_query/include/nodes/makefuncs.h +0 -108
  685. data/ext/pg_query/include/nodes/memnodes.h +0 -108
  686. data/ext/pg_query/include/nodes/nodeFuncs.h +0 -162
  687. data/ext/pg_query/include/nodes/nodes.h +0 -842
  688. data/ext/pg_query/include/nodes/params.h +0 -170
  689. data/ext/pg_query/include/nodes/parsenodes.h +0 -3580
  690. data/ext/pg_query/include/nodes/pathnodes.h +0 -2557
  691. data/ext/pg_query/include/nodes/pg_list.h +0 -606
  692. data/ext/pg_query/include/nodes/plannodes.h +0 -1266
  693. data/ext/pg_query/include/nodes/primnodes.h +0 -1541
  694. data/ext/pg_query/include/nodes/print.h +0 -34
  695. data/ext/pg_query/include/nodes/tidbitmap.h +0 -75
  696. data/ext/pg_query/include/nodes/value.h +0 -61
  697. data/ext/pg_query/include/optimizer/cost.h +0 -206
  698. data/ext/pg_query/include/optimizer/geqo.h +0 -88
  699. data/ext/pg_query/include/optimizer/geqo_gene.h +0 -45
  700. data/ext/pg_query/include/optimizer/optimizer.h +0 -194
  701. data/ext/pg_query/include/optimizer/paths.h +0 -257
  702. data/ext/pg_query/include/optimizer/planmain.h +0 -119
  703. data/ext/pg_query/include/parser/analyze.h +0 -49
  704. data/ext/pg_query/include/parser/gram.h +0 -1067
  705. data/ext/pg_query/include/parser/gramparse.h +0 -75
  706. data/ext/pg_query/include/parser/kwlist.h +0 -477
  707. data/ext/pg_query/include/parser/parse_agg.h +0 -68
  708. data/ext/pg_query/include/parser/parse_clause.h +0 -54
  709. data/ext/pg_query/include/parser/parse_coerce.h +0 -98
  710. data/ext/pg_query/include/parser/parse_collate.h +0 -27
  711. data/ext/pg_query/include/parser/parse_expr.h +0 -26
  712. data/ext/pg_query/include/parser/parse_func.h +0 -73
  713. data/ext/pg_query/include/parser/parse_node.h +0 -327
  714. data/ext/pg_query/include/parser/parse_oper.h +0 -67
  715. data/ext/pg_query/include/parser/parse_relation.h +0 -123
  716. data/ext/pg_query/include/parser/parse_target.h +0 -46
  717. data/ext/pg_query/include/parser/parse_type.h +0 -60
  718. data/ext/pg_query/include/parser/parser.h +0 -41
  719. data/ext/pg_query/include/parser/parsetree.h +0 -61
  720. data/ext/pg_query/include/parser/scanner.h +0 -152
  721. data/ext/pg_query/include/parser/scansup.h +0 -30
  722. data/ext/pg_query/include/partitioning/partdefs.h +0 -26
  723. data/ext/pg_query/include/pg_config.h +0 -995
  724. data/ext/pg_query/include/pg_config_manual.h +0 -357
  725. data/ext/pg_query/include/pg_config_os.h +0 -8
  726. data/ext/pg_query/include/pg_getopt.h +0 -56
  727. data/ext/pg_query/include/pg_trace.h +0 -17
  728. data/ext/pg_query/include/pgstat.h +0 -1488
  729. data/ext/pg_query/include/pgtime.h +0 -84
  730. data/ext/pg_query/include/pl_gram.h +0 -385
  731. data/ext/pg_query/include/pl_reserved_kwlist.h +0 -52
  732. data/ext/pg_query/include/pl_reserved_kwlist_d.h +0 -114
  733. data/ext/pg_query/include/pl_unreserved_kwlist.h +0 -112
  734. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +0 -246
  735. data/ext/pg_query/include/plerrcodes.h +0 -990
  736. data/ext/pg_query/include/plpgsql.h +0 -1347
  737. data/ext/pg_query/include/port/atomics/arch-arm.h +0 -26
  738. data/ext/pg_query/include/port/atomics/arch-ppc.h +0 -254
  739. data/ext/pg_query/include/port/atomics/arch-x86.h +0 -252
  740. data/ext/pg_query/include/port/atomics/fallback.h +0 -170
  741. data/ext/pg_query/include/port/atomics/generic-gcc.h +0 -286
  742. data/ext/pg_query/include/port/atomics/generic.h +0 -401
  743. data/ext/pg_query/include/port/atomics.h +0 -524
  744. data/ext/pg_query/include/port/pg_bitutils.h +0 -272
  745. data/ext/pg_query/include/port/pg_bswap.h +0 -161
  746. data/ext/pg_query/include/port/pg_crc32c.h +0 -101
  747. data/ext/pg_query/include/port.h +0 -528
  748. data/ext/pg_query/include/portability/instr_time.h +0 -256
  749. data/ext/pg_query/include/postgres.h +0 -764
  750. data/ext/pg_query/include/postgres_ext.h +0 -74
  751. data/ext/pg_query/include/postmaster/autovacuum.h +0 -83
  752. data/ext/pg_query/include/postmaster/bgworker.h +0 -161
  753. data/ext/pg_query/include/postmaster/bgworker_internals.h +0 -64
  754. data/ext/pg_query/include/postmaster/bgwriter.h +0 -45
  755. data/ext/pg_query/include/postmaster/fork_process.h +0 -17
  756. data/ext/pg_query/include/postmaster/interrupt.h +0 -32
  757. data/ext/pg_query/include/postmaster/pgarch.h +0 -39
  758. data/ext/pg_query/include/postmaster/postmaster.h +0 -77
  759. data/ext/pg_query/include/postmaster/syslogger.h +0 -98
  760. data/ext/pg_query/include/postmaster/walwriter.h +0 -21
  761. data/ext/pg_query/include/regex/regex.h +0 -184
  762. data/ext/pg_query/include/replication/logicallauncher.h +0 -31
  763. data/ext/pg_query/include/replication/logicalproto.h +0 -110
  764. data/ext/pg_query/include/replication/logicalworker.h +0 -19
  765. data/ext/pg_query/include/replication/origin.h +0 -73
  766. data/ext/pg_query/include/replication/reorderbuffer.h +0 -468
  767. data/ext/pg_query/include/replication/slot.h +0 -219
  768. data/ext/pg_query/include/replication/syncrep.h +0 -115
  769. data/ext/pg_query/include/replication/walreceiver.h +0 -340
  770. data/ext/pg_query/include/replication/walsender.h +0 -74
  771. data/ext/pg_query/include/rewrite/prs2lock.h +0 -46
  772. data/ext/pg_query/include/rewrite/rewriteHandler.h +0 -40
  773. data/ext/pg_query/include/rewrite/rewriteManip.h +0 -87
  774. data/ext/pg_query/include/rewrite/rewriteSupport.h +0 -26
  775. data/ext/pg_query/include/storage/backendid.h +0 -37
  776. data/ext/pg_query/include/storage/block.h +0 -121
  777. data/ext/pg_query/include/storage/buf.h +0 -46
  778. data/ext/pg_query/include/storage/bufmgr.h +0 -292
  779. data/ext/pg_query/include/storage/bufpage.h +0 -459
  780. data/ext/pg_query/include/storage/condition_variable.h +0 -62
  781. data/ext/pg_query/include/storage/dsm.h +0 -61
  782. data/ext/pg_query/include/storage/dsm_impl.h +0 -75
  783. data/ext/pg_query/include/storage/fd.h +0 -168
  784. data/ext/pg_query/include/storage/ipc.h +0 -81
  785. data/ext/pg_query/include/storage/item.h +0 -19
  786. data/ext/pg_query/include/storage/itemid.h +0 -184
  787. data/ext/pg_query/include/storage/itemptr.h +0 -206
  788. data/ext/pg_query/include/storage/large_object.h +0 -100
  789. data/ext/pg_query/include/storage/latch.h +0 -190
  790. data/ext/pg_query/include/storage/lmgr.h +0 -114
  791. data/ext/pg_query/include/storage/lock.h +0 -613
  792. data/ext/pg_query/include/storage/lockdefs.h +0 -59
  793. data/ext/pg_query/include/storage/lwlock.h +0 -233
  794. data/ext/pg_query/include/storage/lwlocknames.h +0 -51
  795. data/ext/pg_query/include/storage/off.h +0 -57
  796. data/ext/pg_query/include/storage/pg_sema.h +0 -61
  797. data/ext/pg_query/include/storage/pg_shmem.h +0 -90
  798. data/ext/pg_query/include/storage/pmsignal.h +0 -94
  799. data/ext/pg_query/include/storage/predicate.h +0 -87
  800. data/ext/pg_query/include/storage/proc.h +0 -347
  801. data/ext/pg_query/include/storage/proclist_types.h +0 -51
  802. data/ext/pg_query/include/storage/procsignal.h +0 -75
  803. data/ext/pg_query/include/storage/relfilenode.h +0 -99
  804. data/ext/pg_query/include/storage/s_lock.h +0 -1071
  805. data/ext/pg_query/include/storage/sharedfileset.h +0 -45
  806. data/ext/pg_query/include/storage/shm_mq.h +0 -85
  807. data/ext/pg_query/include/storage/shm_toc.h +0 -58
  808. data/ext/pg_query/include/storage/shmem.h +0 -81
  809. data/ext/pg_query/include/storage/sinval.h +0 -153
  810. data/ext/pg_query/include/storage/sinvaladt.h +0 -43
  811. data/ext/pg_query/include/storage/smgr.h +0 -109
  812. data/ext/pg_query/include/storage/spin.h +0 -77
  813. data/ext/pg_query/include/storage/standby.h +0 -91
  814. data/ext/pg_query/include/storage/standbydefs.h +0 -74
  815. data/ext/pg_query/include/storage/sync.h +0 -62
  816. data/ext/pg_query/include/tcop/cmdtag.h +0 -58
  817. data/ext/pg_query/include/tcop/cmdtaglist.h +0 -217
  818. data/ext/pg_query/include/tcop/deparse_utility.h +0 -108
  819. data/ext/pg_query/include/tcop/dest.h +0 -149
  820. data/ext/pg_query/include/tcop/fastpath.h +0 -21
  821. data/ext/pg_query/include/tcop/pquery.h +0 -51
  822. data/ext/pg_query/include/tcop/tcopprot.h +0 -89
  823. data/ext/pg_query/include/tcop/utility.h +0 -108
  824. data/ext/pg_query/include/tsearch/ts_cache.h +0 -98
  825. data/ext/pg_query/include/utils/acl.h +0 -312
  826. data/ext/pg_query/include/utils/aclchk_internal.h +0 -45
  827. data/ext/pg_query/include/utils/array.h +0 -459
  828. data/ext/pg_query/include/utils/builtins.h +0 -128
  829. data/ext/pg_query/include/utils/bytea.h +0 -27
  830. data/ext/pg_query/include/utils/catcache.h +0 -231
  831. data/ext/pg_query/include/utils/date.h +0 -90
  832. data/ext/pg_query/include/utils/datetime.h +0 -343
  833. data/ext/pg_query/include/utils/datum.h +0 -68
  834. data/ext/pg_query/include/utils/dsa.h +0 -123
  835. data/ext/pg_query/include/utils/dynahash.h +0 -19
  836. data/ext/pg_query/include/utils/elog.h +0 -439
  837. data/ext/pg_query/include/utils/errcodes.h +0 -352
  838. data/ext/pg_query/include/utils/expandeddatum.h +0 -159
  839. data/ext/pg_query/include/utils/expandedrecord.h +0 -231
  840. data/ext/pg_query/include/utils/float.h +0 -356
  841. data/ext/pg_query/include/utils/fmgroids.h +0 -2657
  842. data/ext/pg_query/include/utils/fmgrprotos.h +0 -2646
  843. data/ext/pg_query/include/utils/fmgrtab.h +0 -48
  844. data/ext/pg_query/include/utils/guc.h +0 -443
  845. data/ext/pg_query/include/utils/guc_tables.h +0 -272
  846. data/ext/pg_query/include/utils/hsearch.h +0 -149
  847. data/ext/pg_query/include/utils/inval.h +0 -65
  848. data/ext/pg_query/include/utils/lsyscache.h +0 -198
  849. data/ext/pg_query/include/utils/memdebug.h +0 -82
  850. data/ext/pg_query/include/utils/memutils.h +0 -225
  851. data/ext/pg_query/include/utils/numeric.h +0 -76
  852. data/ext/pg_query/include/utils/palloc.h +0 -136
  853. data/ext/pg_query/include/utils/partcache.h +0 -102
  854. data/ext/pg_query/include/utils/pg_locale.h +0 -119
  855. data/ext/pg_query/include/utils/pg_lsn.h +0 -29
  856. data/ext/pg_query/include/utils/pidfile.h +0 -56
  857. data/ext/pg_query/include/utils/plancache.h +0 -235
  858. data/ext/pg_query/include/utils/portal.h +0 -254
  859. data/ext/pg_query/include/utils/probes.h +0 -114
  860. data/ext/pg_query/include/utils/ps_status.h +0 -25
  861. data/ext/pg_query/include/utils/queryenvironment.h +0 -74
  862. data/ext/pg_query/include/utils/regproc.h +0 -28
  863. data/ext/pg_query/include/utils/rel.h +0 -643
  864. data/ext/pg_query/include/utils/relcache.h +0 -150
  865. data/ext/pg_query/include/utils/reltrigger.h +0 -81
  866. data/ext/pg_query/include/utils/resowner.h +0 -86
  867. data/ext/pg_query/include/utils/rls.h +0 -50
  868. data/ext/pg_query/include/utils/ruleutils.h +0 -44
  869. data/ext/pg_query/include/utils/sharedtuplestore.h +0 -61
  870. data/ext/pg_query/include/utils/snapmgr.h +0 -159
  871. data/ext/pg_query/include/utils/snapshot.h +0 -206
  872. data/ext/pg_query/include/utils/sortsupport.h +0 -276
  873. data/ext/pg_query/include/utils/syscache.h +0 -219
  874. data/ext/pg_query/include/utils/timeout.h +0 -88
  875. data/ext/pg_query/include/utils/timestamp.h +0 -116
  876. data/ext/pg_query/include/utils/tuplesort.h +0 -277
  877. data/ext/pg_query/include/utils/tuplestore.h +0 -91
  878. data/ext/pg_query/include/utils/typcache.h +0 -202
  879. data/ext/pg_query/include/utils/tzparser.h +0 -39
  880. data/ext/pg_query/include/utils/varlena.h +0 -39
  881. data/ext/pg_query/include/utils/xml.h +0 -84
  882. data/ext/pg_query/pg_query_ruby_freebsd.sym +0 -2
  883. data/ext/pg_query/src_backend_libpq_pqcomm.c +0 -659
  884. data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
  885. data/ext/pg_query/src_backend_postmaster_postmaster.c +0 -2230
  886. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -370
  887. data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1086
  888. data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1832
  889. data/ext/pg_query/src_common_string.c +0 -86
  890. data/ext/pg_query/src_port_erand48.c +0 -127
  891. data/ext/pg_query/src_port_pgsleep.c +0 -69
  892. data/ext/pg_query/src_port_random.c +0 -31
  893. data/ext/pg_query/src_port_strnlen.c +0 -39
  894. /data/ext/pg_query/{pg_query_ruby.sym → ext_symbols.sym} +0 -0
  895. /data/ext/pg_query/include/{pg_config_ext.h → postgres/pg_config_ext.h} +0 -0
@@ -0,0 +1,1374 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * c.h
4
+ * Fundamental C definitions. This is included by every .c file in
5
+ * PostgreSQL (via either postgres.h or postgres_fe.h, as appropriate).
6
+ *
7
+ * Note that the definitions here are not intended to be exposed to clients
8
+ * of the frontend interface libraries --- so we don't worry much about
9
+ * polluting the namespace with lots of stuff...
10
+ *
11
+ *
12
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
13
+ * Portions Copyright (c) 1994, Regents of the University of California
14
+ *
15
+ * src/include/c.h
16
+ *
17
+ *-------------------------------------------------------------------------
18
+ */
19
+ /*
20
+ *----------------------------------------------------------------
21
+ * TABLE OF CONTENTS
22
+ *
23
+ * When adding stuff to this file, please try to put stuff
24
+ * into the relevant section, or add new sections as appropriate.
25
+ *
26
+ * section description
27
+ * ------- ------------------------------------------------
28
+ * 0) pg_config.h and standard system headers
29
+ * 1) compiler characteristics
30
+ * 2) bool, true, false
31
+ * 3) standard system types
32
+ * 4) IsValid macros for system types
33
+ * 5) lengthof, alignment
34
+ * 6) assertions
35
+ * 7) widely useful macros
36
+ * 8) random stuff
37
+ * 9) system-specific hacks
38
+ *
39
+ * NOTE: since this file is included by both frontend and backend modules,
40
+ * it's usually wrong to put an "extern" declaration here, unless it's
41
+ * ifdef'd so that it's seen in only one case or the other.
42
+ * typedefs and macros are the kind of thing that might go here.
43
+ *
44
+ *----------------------------------------------------------------
45
+ */
46
+ #ifndef C_H
47
+ #define C_H
48
+
49
+ #include "postgres_ext.h"
50
+
51
+ /* Must undef pg_config_ext.h symbols before including pg_config.h */
52
+ #undef PG_INT64_TYPE
53
+
54
+ #include "pg_config.h"
55
+ #include "pg_config_manual.h" /* must be after pg_config.h */
56
+ #include "pg_config_os.h" /* must be before any system header files */
57
+
58
+ /* System header files that should be available everywhere in Postgres */
59
+ #include <stdio.h>
60
+ #include <stdlib.h>
61
+ #include <string.h>
62
+ #include <stddef.h>
63
+ #include <stdarg.h>
64
+ #ifdef HAVE_STRINGS_H
65
+ #include <strings.h>
66
+ #endif
67
+ #include <stdint.h>
68
+ #include <sys/types.h>
69
+ #include <errno.h>
70
+ #if defined(WIN32) || defined(__CYGWIN__)
71
+ #include <fcntl.h> /* ensure O_BINARY is available */
72
+ #endif
73
+ #include <locale.h>
74
+ #ifdef ENABLE_NLS
75
+ #include <libintl.h>
76
+ #endif
77
+
78
+ /* Define before including zlib.h to add const decorations to zlib API. */
79
+ #ifdef HAVE_LIBZ
80
+ #define ZLIB_CONST
81
+ #endif
82
+
83
+
84
+ /* ----------------------------------------------------------------
85
+ * Section 1: compiler characteristics
86
+ *
87
+ * type prefixes (const, signed, volatile, inline) are handled in pg_config.h.
88
+ * ----------------------------------------------------------------
89
+ */
90
+
91
+ /*
92
+ * Disable "inline" if PG_FORCE_DISABLE_INLINE is defined.
93
+ * This is used to work around compiler bugs and might also be useful for
94
+ * investigatory purposes.
95
+ */
96
+ #ifdef PG_FORCE_DISABLE_INLINE
97
+ #undef inline
98
+ #define inline
99
+ #endif
100
+
101
+ /*
102
+ * Attribute macros
103
+ *
104
+ * GCC: https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
105
+ * GCC: https://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html
106
+ * Clang: https://clang.llvm.org/docs/AttributeReference.html
107
+ * Sunpro: https://docs.oracle.com/cd/E18659_01/html/821-1384/gjzke.html
108
+ */
109
+
110
+ /*
111
+ * For compilers which don't support __has_attribute, we just define
112
+ * __has_attribute(x) to 0 so that we can define macros for various
113
+ * __attribute__s more easily below.
114
+ */
115
+ #ifndef __has_attribute
116
+ #define __has_attribute(attribute) 0
117
+ #endif
118
+
119
+ /* only GCC supports the unused attribute */
120
+ #ifdef __GNUC__
121
+ #define pg_attribute_unused() __attribute__((unused))
122
+ #else
123
+ #define pg_attribute_unused()
124
+ #endif
125
+
126
+ /*
127
+ * pg_nodiscard means the compiler should warn if the result of a function
128
+ * call is ignored. The name "nodiscard" is chosen in alignment with
129
+ * (possibly future) C and C++ standards. For maximum compatibility, use it
130
+ * as a function declaration specifier, so it goes before the return type.
131
+ */
132
+ #ifdef __GNUC__
133
+ #define pg_nodiscard __attribute__((warn_unused_result))
134
+ #else
135
+ #define pg_nodiscard
136
+ #endif
137
+
138
+ /*
139
+ * This macro will disable address safety instrumentation for a function
140
+ * when running with "-fsanitize=address". Think twice before using this!
141
+ */
142
+ #if defined(__clang__) || __GNUC__ >= 8
143
+ #define pg_attribute_no_sanitize_address() __attribute__((no_sanitize("address")))
144
+ #elif __has_attribute(no_sanitize_address)
145
+ /* This would work for clang, but it's deprecated. */
146
+ #define pg_attribute_no_sanitize_address() __attribute__((no_sanitize_address))
147
+ #else
148
+ #define pg_attribute_no_sanitize_address()
149
+ #endif
150
+
151
+ /*
152
+ * Place this macro before functions that should be allowed to make misaligned
153
+ * accesses. Think twice before using it on non-x86-specific code!
154
+ * Testing can be done with "-fsanitize=alignment -fsanitize-trap=alignment"
155
+ * on clang, or "-fsanitize=alignment -fno-sanitize-recover=alignment" on gcc.
156
+ */
157
+ #if __clang_major__ >= 7 || __GNUC__ >= 8
158
+ #define pg_attribute_no_sanitize_alignment() __attribute__((no_sanitize("alignment")))
159
+ #else
160
+ #define pg_attribute_no_sanitize_alignment()
161
+ #endif
162
+
163
+ /*
164
+ * pg_attribute_nonnull means the compiler should warn if the function is
165
+ * called with the listed arguments set to NULL. If no arguments are
166
+ * listed, the compiler should warn if any pointer arguments are set to NULL.
167
+ */
168
+ #if __has_attribute (nonnull)
169
+ #define pg_attribute_nonnull(...) __attribute__((nonnull(__VA_ARGS__)))
170
+ #else
171
+ #define pg_attribute_nonnull(...)
172
+ #endif
173
+
174
+ /*
175
+ * Append PG_USED_FOR_ASSERTS_ONLY to definitions of variables that are only
176
+ * used in assert-enabled builds, to avoid compiler warnings about unused
177
+ * variables in assert-disabled builds.
178
+ */
179
+ #ifdef USE_ASSERT_CHECKING
180
+ #define PG_USED_FOR_ASSERTS_ONLY
181
+ #else
182
+ #define PG_USED_FOR_ASSERTS_ONLY pg_attribute_unused()
183
+ #endif
184
+
185
+ /* GCC supports format attributes */
186
+ #if defined(__GNUC__)
187
+ #define pg_attribute_format_arg(a) __attribute__((format_arg(a)))
188
+ #define pg_attribute_printf(f,a) __attribute__((format(PG_PRINTF_ATTRIBUTE, f, a)))
189
+ #else
190
+ #define pg_attribute_format_arg(a)
191
+ #define pg_attribute_printf(f,a)
192
+ #endif
193
+
194
+ /* GCC and Sunpro support aligned, packed and noreturn */
195
+ #if defined(__GNUC__) || defined(__SUNPRO_C)
196
+ #define pg_attribute_aligned(a) __attribute__((aligned(a)))
197
+ #define pg_attribute_noreturn() __attribute__((noreturn))
198
+ #define pg_attribute_packed() __attribute__((packed))
199
+ #define HAVE_PG_ATTRIBUTE_NORETURN 1
200
+ #elif defined(_MSC_VER)
201
+ /*
202
+ * MSVC supports aligned. noreturn is also possible but in MSVC it is
203
+ * declared before the definition while pg_attribute_noreturn() macro
204
+ * is currently used after the definition.
205
+ *
206
+ * Packing is also possible but only by wrapping the entire struct definition
207
+ * which doesn't fit into our current macro declarations.
208
+ */
209
+ #define pg_attribute_aligned(a) __declspec(align(a))
210
+ #define pg_attribute_noreturn()
211
+ #else
212
+ /*
213
+ * NB: aligned and packed are not given default definitions because they
214
+ * affect code functionality; they *must* be implemented by the compiler
215
+ * if they are to be used.
216
+ */
217
+ #define pg_attribute_noreturn()
218
+ #endif
219
+
220
+ /*
221
+ * Use "pg_attribute_always_inline" in place of "inline" for functions that
222
+ * we wish to force inlining of, even when the compiler's heuristics would
223
+ * choose not to. But, if possible, don't force inlining in unoptimized
224
+ * debug builds.
225
+ */
226
+ #if (defined(__GNUC__) && __GNUC__ > 3 && defined(__OPTIMIZE__)) || defined(__SUNPRO_C)
227
+ /* GCC > 3 and Sunpro support always_inline via __attribute__ */
228
+ #define pg_attribute_always_inline __attribute__((always_inline)) inline
229
+ #elif defined(_MSC_VER)
230
+ /* MSVC has a special keyword for this */
231
+ #define pg_attribute_always_inline __forceinline
232
+ #else
233
+ /* Otherwise, the best we can do is to say "inline" */
234
+ #define pg_attribute_always_inline inline
235
+ #endif
236
+
237
+ /*
238
+ * Forcing a function not to be inlined can be useful if it's the slow path of
239
+ * a performance-critical function, or should be visible in profiles to allow
240
+ * for proper cost attribution. Note that unlike the pg_attribute_XXX macros
241
+ * above, this should be placed before the function's return type and name.
242
+ */
243
+ /* GCC and Sunpro support noinline via __attribute__ */
244
+ #if (defined(__GNUC__) && __GNUC__ > 2) || defined(__SUNPRO_C)
245
+ #define pg_noinline __attribute__((noinline))
246
+ /* msvc via declspec */
247
+ #elif defined(_MSC_VER)
248
+ #define pg_noinline __declspec(noinline)
249
+ #else
250
+ #define pg_noinline
251
+ #endif
252
+
253
+ /*
254
+ * For now, just define pg_attribute_cold and pg_attribute_hot to be empty
255
+ * macros on minGW 8.1. There appears to be a compiler bug that results in
256
+ * compilation failure. At this time, we still have at least one buildfarm
257
+ * animal running that compiler, so this should make that green again. It's
258
+ * likely this compiler is not popular enough to warrant keeping this code
259
+ * around forever, so let's just remove it once the last buildfarm animal
260
+ * upgrades.
261
+ */
262
+ #if defined(__MINGW64__) && __GNUC__ == 8 && __GNUC_MINOR__ == 1
263
+
264
+ #define pg_attribute_cold
265
+ #define pg_attribute_hot
266
+
267
+ #else
268
+ /*
269
+ * Marking certain functions as "hot" or "cold" can be useful to assist the
270
+ * compiler in arranging the assembly code in a more efficient way.
271
+ */
272
+ #if __has_attribute (cold)
273
+ #define pg_attribute_cold __attribute__((cold))
274
+ #else
275
+ #define pg_attribute_cold
276
+ #endif
277
+
278
+ #if __has_attribute (hot)
279
+ #define pg_attribute_hot __attribute__((hot))
280
+ #else
281
+ #define pg_attribute_hot
282
+ #endif
283
+
284
+ #endif /* defined(__MINGW64__) && __GNUC__ == 8 &&
285
+ * __GNUC_MINOR__ == 1 */
286
+ /*
287
+ * Mark a point as unreachable in a portable fashion. This should preferably
288
+ * be something that the compiler understands, to aid code generation.
289
+ * In assert-enabled builds, we prefer abort() for debugging reasons.
290
+ */
291
+ #if defined(HAVE__BUILTIN_UNREACHABLE) && !defined(USE_ASSERT_CHECKING)
292
+ #define pg_unreachable() __builtin_unreachable()
293
+ #elif defined(_MSC_VER) && !defined(USE_ASSERT_CHECKING)
294
+ #define pg_unreachable() __assume(0)
295
+ #else
296
+ #define pg_unreachable() abort()
297
+ #endif
298
+
299
+ /*
300
+ * Hints to the compiler about the likelihood of a branch. Both likely() and
301
+ * unlikely() return the boolean value of the contained expression.
302
+ *
303
+ * These should only be used sparingly, in very hot code paths. It's very easy
304
+ * to mis-estimate likelihoods.
305
+ */
306
+ #if __GNUC__ >= 3
307
+ #define likely(x) __builtin_expect((x) != 0, 1)
308
+ #define unlikely(x) __builtin_expect((x) != 0, 0)
309
+ #else
310
+ #define likely(x) ((x) != 0)
311
+ #define unlikely(x) ((x) != 0)
312
+ #endif
313
+
314
+ /*
315
+ * CppAsString
316
+ * Convert the argument to a string, using the C preprocessor.
317
+ * CppAsString2
318
+ * Convert the argument to a string, after one round of macro expansion.
319
+ * CppConcat
320
+ * Concatenate two arguments together, using the C preprocessor.
321
+ *
322
+ * Note: There used to be support here for pre-ANSI C compilers that didn't
323
+ * support # and ##. Nowadays, these macros are just for clarity and/or
324
+ * backward compatibility with existing PostgreSQL code.
325
+ */
326
+ #define CppAsString(identifier) #identifier
327
+ #define CppAsString2(x) CppAsString(x)
328
+ #define CppConcat(x, y) x##y
329
+
330
+ /*
331
+ * VA_ARGS_NARGS
332
+ * Returns the number of macro arguments it is passed.
333
+ *
334
+ * An empty argument still counts as an argument, so effectively, this is
335
+ * "one more than the number of commas in the argument list".
336
+ *
337
+ * This works for up to 63 arguments. Internally, VA_ARGS_NARGS_() is passed
338
+ * 64+N arguments, and the C99 standard only requires macros to allow up to
339
+ * 127 arguments, so we can't portably go higher. The implementation is
340
+ * pretty trivial: VA_ARGS_NARGS_() returns its 64th argument, and we set up
341
+ * the call so that that is the appropriate one of the list of constants.
342
+ * This idea is due to Laurent Deniau.
343
+ *
344
+ * MSVC has an implementation of __VA_ARGS__ that doesn't conform to the
345
+ * standard unless you use the /Zc:preprocessor compiler flag, but that
346
+ * isn't available before Visual Studio 2019. For now, use a different
347
+ * definition that also works on older compilers.
348
+ */
349
+ #ifdef _MSC_VER
350
+ #define EXPAND(args) args
351
+ #define VA_ARGS_NARGS(...) \
352
+ VA_ARGS_NARGS_ EXPAND((__VA_ARGS__, \
353
+ 63,62,61,60, \
354
+ 59,58,57,56,55,54,53,52,51,50, \
355
+ 49,48,47,46,45,44,43,42,41,40, \
356
+ 39,38,37,36,35,34,33,32,31,30, \
357
+ 29,28,27,26,25,24,23,22,21,20, \
358
+ 19,18,17,16,15,14,13,12,11,10, \
359
+ 9, 8, 7, 6, 5, 4, 3, 2, 1, 0))
360
+ #else
361
+
362
+ #define VA_ARGS_NARGS(...) \
363
+ VA_ARGS_NARGS_(__VA_ARGS__, \
364
+ 63,62,61,60, \
365
+ 59,58,57,56,55,54,53,52,51,50, \
366
+ 49,48,47,46,45,44,43,42,41,40, \
367
+ 39,38,37,36,35,34,33,32,31,30, \
368
+ 29,28,27,26,25,24,23,22,21,20, \
369
+ 19,18,17,16,15,14,13,12,11,10, \
370
+ 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
371
+ #endif
372
+
373
+ #define VA_ARGS_NARGS_( \
374
+ _01,_02,_03,_04,_05,_06,_07,_08,_09,_10, \
375
+ _11,_12,_13,_14,_15,_16,_17,_18,_19,_20, \
376
+ _21,_22,_23,_24,_25,_26,_27,_28,_29,_30, \
377
+ _31,_32,_33,_34,_35,_36,_37,_38,_39,_40, \
378
+ _41,_42,_43,_44,_45,_46,_47,_48,_49,_50, \
379
+ _51,_52,_53,_54,_55,_56,_57,_58,_59,_60, \
380
+ _61,_62,_63, N, ...) \
381
+ (N)
382
+
383
+ /*
384
+ * Generic function pointer. This can be used in the rare cases where it's
385
+ * necessary to cast a function pointer to a seemingly incompatible function
386
+ * pointer type while avoiding gcc's -Wcast-function-type warnings.
387
+ */
388
+ typedef void (*pg_funcptr_t) (void);
389
+
390
+ /*
391
+ * We require C99, hence the compiler should understand flexible array
392
+ * members. However, for documentation purposes we still consider it to be
393
+ * project style to write "field[FLEXIBLE_ARRAY_MEMBER]" not just "field[]".
394
+ * When computing the size of such an object, use "offsetof(struct s, f)"
395
+ * for portability. Don't use "offsetof(struct s, f[0])", as this doesn't
396
+ * work with MSVC and with C++ compilers.
397
+ */
398
+ #define FLEXIBLE_ARRAY_MEMBER /* empty */
399
+
400
+ /*
401
+ * Does the compiler support #pragma GCC system_header? We optionally use it
402
+ * to avoid warnings that we can't fix (e.g. in the perl headers).
403
+ * See https://gcc.gnu.org/onlinedocs/cpp/System-Headers.html
404
+ *
405
+ * Headers for which we do not want to show compiler warnings can,
406
+ * conditionally, use #pragma GCC system_header to avoid warnings. Obviously
407
+ * this should only be used for external headers over which we do not have
408
+ * control.
409
+ *
410
+ * Support for the pragma is tested here, instead of during configure, as gcc
411
+ * also warns about the pragma being used in a .c file. It's surprisingly hard
412
+ * to get autoconf to use .h as the file-ending. Looks like gcc has
413
+ * implemented the pragma since the 2000, so this test should suffice.
414
+ *
415
+ *
416
+ * Alternatively, we could add the include paths for problematic headers with
417
+ * -isystem, but that is a larger hammer and is harder to search for.
418
+ *
419
+ * A more granular alternative would be to use #pragma GCC diagnostic
420
+ * push/ignored/pop, but gcc warns about unknown warnings being ignored, so
421
+ * every to-be-ignored-temporarily compiler warning would require its own
422
+ * pg_config.h symbol and #ifdef.
423
+ */
424
+ #ifdef __GNUC__
425
+ #define HAVE_PRAGMA_GCC_SYSTEM_HEADER 1
426
+ #endif
427
+
428
+
429
+ /* ----------------------------------------------------------------
430
+ * Section 2: bool, true, false
431
+ * ----------------------------------------------------------------
432
+ */
433
+
434
+ /*
435
+ * bool
436
+ * Boolean value, either true or false.
437
+ *
438
+ * We use stdbool.h if bool has size 1 after including it. That's useful for
439
+ * better compiler and debugger output and for compatibility with third-party
440
+ * libraries. But PostgreSQL currently cannot deal with bool of other sizes;
441
+ * there are static assertions around the code to prevent that.
442
+ *
443
+ * For C++ compilers, we assume the compiler has a compatible built-in
444
+ * definition of bool.
445
+ *
446
+ * See also the version of this code in src/interfaces/ecpg/include/ecpglib.h.
447
+ */
448
+
449
+ #ifndef __cplusplus
450
+
451
+ #ifdef PG_USE_STDBOOL
452
+ #include <stdbool.h>
453
+ #else
454
+
455
+ #ifndef bool
456
+ typedef unsigned char bool;
457
+ #endif
458
+
459
+ #ifndef true
460
+ #define true ((bool) 1)
461
+ #endif
462
+
463
+ #ifndef false
464
+ #define false ((bool) 0)
465
+ #endif
466
+
467
+ #endif /* not PG_USE_STDBOOL */
468
+ #endif /* not C++ */
469
+
470
+
471
+ /* ----------------------------------------------------------------
472
+ * Section 3: standard system types
473
+ * ----------------------------------------------------------------
474
+ */
475
+
476
+ /*
477
+ * Pointer
478
+ * Variable holding address of any memory resident object.
479
+ *
480
+ * XXX Pointer arithmetic is done with this, so it can't be void *
481
+ * under "true" ANSI compilers.
482
+ */
483
+ typedef char *Pointer;
484
+
485
+ /*
486
+ * intN
487
+ * Signed integer, EXACTLY N BITS IN SIZE,
488
+ * used for numerical computations and the
489
+ * frontend/backend protocol.
490
+ */
491
+ #ifndef HAVE_INT8
492
+ typedef signed char int8; /* == 8 bits */
493
+ typedef signed short int16; /* == 16 bits */
494
+ typedef signed int int32; /* == 32 bits */
495
+ #endif /* not HAVE_INT8 */
496
+
497
+ /*
498
+ * uintN
499
+ * Unsigned integer, EXACTLY N BITS IN SIZE,
500
+ * used for numerical computations and the
501
+ * frontend/backend protocol.
502
+ */
503
+ #ifndef HAVE_UINT8
504
+ typedef unsigned char uint8; /* == 8 bits */
505
+ typedef unsigned short uint16; /* == 16 bits */
506
+ typedef unsigned int uint32; /* == 32 bits */
507
+ #endif /* not HAVE_UINT8 */
508
+
509
+ /*
510
+ * bitsN
511
+ * Unit of bitwise operation, AT LEAST N BITS IN SIZE.
512
+ */
513
+ typedef uint8 bits8; /* >= 8 bits */
514
+ typedef uint16 bits16; /* >= 16 bits */
515
+ typedef uint32 bits32; /* >= 32 bits */
516
+
517
+ /*
518
+ * 64-bit integers
519
+ */
520
+ #ifdef HAVE_LONG_INT_64
521
+ /* Plain "long int" fits, use it */
522
+
523
+ #ifndef HAVE_INT64
524
+ typedef long int int64;
525
+ #endif
526
+ #ifndef HAVE_UINT64
527
+ typedef unsigned long int uint64;
528
+ #endif
529
+ #define INT64CONST(x) (x##L)
530
+ #define UINT64CONST(x) (x##UL)
531
+ #elif defined(HAVE_LONG_LONG_INT_64)
532
+ /* We have working support for "long long int", use that */
533
+
534
+ #ifndef HAVE_INT64
535
+ typedef long long int int64;
536
+ #endif
537
+ #ifndef HAVE_UINT64
538
+ typedef unsigned long long int uint64;
539
+ #endif
540
+ #define INT64CONST(x) (x##LL)
541
+ #define UINT64CONST(x) (x##ULL)
542
+ #else
543
+ /* neither HAVE_LONG_INT_64 nor HAVE_LONG_LONG_INT_64 */
544
+ #error must have a working 64-bit integer datatype
545
+ #endif
546
+
547
+ /* snprintf format strings to use for 64-bit integers */
548
+ #define INT64_FORMAT "%" INT64_MODIFIER "d"
549
+ #define UINT64_FORMAT "%" INT64_MODIFIER "u"
550
+
551
+ /*
552
+ * 128-bit signed and unsigned integers
553
+ * There currently is only limited support for such types.
554
+ * E.g. 128bit literals and snprintf are not supported; but math is.
555
+ * Also, because we exclude such types when choosing MAXIMUM_ALIGNOF,
556
+ * it must be possible to coerce the compiler to allocate them on no
557
+ * more than MAXALIGN boundaries.
558
+ */
559
+ #if defined(PG_INT128_TYPE)
560
+ #if defined(pg_attribute_aligned) || ALIGNOF_PG_INT128_TYPE <= MAXIMUM_ALIGNOF
561
+ #define HAVE_INT128 1
562
+
563
+ typedef PG_INT128_TYPE int128
564
+ #if defined(pg_attribute_aligned)
565
+ pg_attribute_aligned(MAXIMUM_ALIGNOF)
566
+ #endif
567
+ ;
568
+
569
+ typedef unsigned PG_INT128_TYPE uint128
570
+ #if defined(pg_attribute_aligned)
571
+ pg_attribute_aligned(MAXIMUM_ALIGNOF)
572
+ #endif
573
+ ;
574
+
575
+ #endif
576
+ #endif
577
+
578
+ /*
579
+ * stdint.h limits aren't guaranteed to have compatible types with our fixed
580
+ * width types. So just define our own.
581
+ */
582
+ #define PG_INT8_MIN (-0x7F-1)
583
+ #define PG_INT8_MAX (0x7F)
584
+ #define PG_UINT8_MAX (0xFF)
585
+ #define PG_INT16_MIN (-0x7FFF-1)
586
+ #define PG_INT16_MAX (0x7FFF)
587
+ #define PG_UINT16_MAX (0xFFFF)
588
+ #define PG_INT32_MIN (-0x7FFFFFFF-1)
589
+ #define PG_INT32_MAX (0x7FFFFFFF)
590
+ #define PG_UINT32_MAX (0xFFFFFFFFU)
591
+ #define PG_INT64_MIN (-INT64CONST(0x7FFFFFFFFFFFFFFF) - 1)
592
+ #define PG_INT64_MAX INT64CONST(0x7FFFFFFFFFFFFFFF)
593
+ #define PG_UINT64_MAX UINT64CONST(0xFFFFFFFFFFFFFFFF)
594
+
595
+ /*
596
+ * We now always use int64 timestamps, but keep this symbol defined for the
597
+ * benefit of external code that might test it.
598
+ */
599
+ #define HAVE_INT64_TIMESTAMP
600
+
601
+ /*
602
+ * Size
603
+ * Size of any memory resident object, as returned by sizeof.
604
+ */
605
+ typedef size_t Size;
606
+
607
+ /*
608
+ * Index
609
+ * Index into any memory resident array.
610
+ *
611
+ * Note:
612
+ * Indices are non negative.
613
+ */
614
+ typedef unsigned int Index;
615
+
616
+ /*
617
+ * Offset
618
+ * Offset into any memory resident array.
619
+ *
620
+ * Note:
621
+ * This differs from an Index in that an Index is always
622
+ * non negative, whereas Offset may be negative.
623
+ */
624
+ typedef signed int Offset;
625
+
626
+ /*
627
+ * Common Postgres datatype names (as used in the catalogs)
628
+ */
629
+ typedef float float4;
630
+ typedef double float8;
631
+
632
+ #ifdef USE_FLOAT8_BYVAL
633
+ #define FLOAT8PASSBYVAL true
634
+ #else
635
+ #define FLOAT8PASSBYVAL false
636
+ #endif
637
+
638
+ /*
639
+ * Oid, RegProcedure, TransactionId, SubTransactionId, MultiXactId,
640
+ * CommandId
641
+ */
642
+
643
+ /* typedef Oid is in postgres_ext.h */
644
+
645
+ /*
646
+ * regproc is the type name used in the include/catalog headers, but
647
+ * RegProcedure is the preferred name in C code.
648
+ */
649
+ typedef Oid regproc;
650
+ typedef regproc RegProcedure;
651
+
652
+ typedef uint32 TransactionId;
653
+
654
+ typedef uint32 LocalTransactionId;
655
+
656
+ typedef uint32 SubTransactionId;
657
+
658
+ #define InvalidSubTransactionId ((SubTransactionId) 0)
659
+ #define TopSubTransactionId ((SubTransactionId) 1)
660
+
661
+ /* MultiXactId must be equivalent to TransactionId, to fit in t_xmax */
662
+ typedef TransactionId MultiXactId;
663
+
664
+ typedef uint32 MultiXactOffset;
665
+
666
+ typedef uint32 CommandId;
667
+
668
+ #define FirstCommandId ((CommandId) 0)
669
+ #define InvalidCommandId (~(CommandId)0)
670
+
671
+
672
+ /* ----------------
673
+ * Variable-length datatypes all share the 'struct varlena' header.
674
+ *
675
+ * NOTE: for TOASTable types, this is an oversimplification, since the value
676
+ * may be compressed or moved out-of-line. However datatype-specific routines
677
+ * are mostly content to deal with de-TOASTed values only, and of course
678
+ * client-side routines should never see a TOASTed value. But even in a
679
+ * de-TOASTed value, beware of touching vl_len_ directly, as its
680
+ * representation is no longer convenient. It's recommended that code always
681
+ * use macros VARDATA_ANY, VARSIZE_ANY, VARSIZE_ANY_EXHDR, VARDATA, VARSIZE,
682
+ * and SET_VARSIZE instead of relying on direct mentions of the struct fields.
683
+ * See postgres.h for details of the TOASTed form.
684
+ * ----------------
685
+ */
686
+ struct varlena
687
+ {
688
+ char vl_len_[4]; /* Do not touch this field directly! */
689
+ char vl_dat[FLEXIBLE_ARRAY_MEMBER]; /* Data content is here */
690
+ };
691
+
692
+ #define VARHDRSZ ((int32) sizeof(int32))
693
+
694
+ /*
695
+ * These widely-used datatypes are just a varlena header and the data bytes.
696
+ * There is no terminating null or anything like that --- the data length is
697
+ * always VARSIZE_ANY_EXHDR(ptr).
698
+ */
699
+ typedef struct varlena bytea;
700
+ typedef struct varlena text;
701
+ typedef struct varlena BpChar; /* blank-padded char, ie SQL char(n) */
702
+ typedef struct varlena VarChar; /* var-length char, ie SQL varchar(n) */
703
+
704
+ /*
705
+ * Specialized array types. These are physically laid out just the same
706
+ * as regular arrays (so that the regular array subscripting code works
707
+ * with them). They exist as distinct types mostly for historical reasons:
708
+ * they have nonstandard I/O behavior which we don't want to change for fear
709
+ * of breaking applications that look at the system catalogs. There is also
710
+ * an implementation issue for oidvector: it's part of the primary key for
711
+ * pg_proc, and we can't use the normal btree array support routines for that
712
+ * without circularity.
713
+ */
714
+ typedef struct
715
+ {
716
+ int32 vl_len_; /* these fields must match ArrayType! */
717
+ int ndim; /* always 1 for int2vector */
718
+ int32 dataoffset; /* always 0 for int2vector */
719
+ Oid elemtype;
720
+ int dim1;
721
+ int lbound1;
722
+ int16 values[FLEXIBLE_ARRAY_MEMBER];
723
+ } int2vector;
724
+
725
+ typedef struct
726
+ {
727
+ int32 vl_len_; /* these fields must match ArrayType! */
728
+ int ndim; /* always 1 for oidvector */
729
+ int32 dataoffset; /* always 0 for oidvector */
730
+ Oid elemtype;
731
+ int dim1;
732
+ int lbound1;
733
+ Oid values[FLEXIBLE_ARRAY_MEMBER];
734
+ } oidvector;
735
+
736
+ /*
737
+ * Representation of a Name: effectively just a C string, but null-padded to
738
+ * exactly NAMEDATALEN bytes. The use of a struct is historical.
739
+ */
740
+ typedef struct nameData
741
+ {
742
+ char data[NAMEDATALEN];
743
+ } NameData;
744
+ typedef NameData *Name;
745
+
746
+ #define NameStr(name) ((name).data)
747
+
748
+
749
+ /* ----------------------------------------------------------------
750
+ * Section 4: IsValid macros for system types
751
+ * ----------------------------------------------------------------
752
+ */
753
+ /*
754
+ * BoolIsValid
755
+ * True iff bool is valid.
756
+ */
757
+ #define BoolIsValid(boolean) ((boolean) == false || (boolean) == true)
758
+
759
+ /*
760
+ * PointerIsValid
761
+ * True iff pointer is valid.
762
+ */
763
+ #define PointerIsValid(pointer) ((const void*)(pointer) != NULL)
764
+
765
+ /*
766
+ * PointerIsAligned
767
+ * True iff pointer is properly aligned to point to the given type.
768
+ */
769
+ #define PointerIsAligned(pointer, type) \
770
+ (((uintptr_t)(pointer) % (sizeof (type))) == 0)
771
+
772
+ #define OffsetToPointer(base, offset) \
773
+ ((void *)((char *) base + offset))
774
+
775
+ #define OidIsValid(objectId) ((bool) ((objectId) != InvalidOid))
776
+
777
+ #define RegProcedureIsValid(p) OidIsValid(p)
778
+
779
+
780
+ /* ----------------------------------------------------------------
781
+ * Section 5: lengthof, alignment
782
+ * ----------------------------------------------------------------
783
+ */
784
+ /*
785
+ * lengthof
786
+ * Number of elements in an array.
787
+ */
788
+ #define lengthof(array) (sizeof (array) / sizeof ((array)[0]))
789
+
790
+ /* ----------------
791
+ * Alignment macros: align a length or address appropriately for a given type.
792
+ * The fooALIGN() macros round up to a multiple of the required alignment,
793
+ * while the fooALIGN_DOWN() macros round down. The latter are more useful
794
+ * for problems like "how many X-sized structures will fit in a page?".
795
+ *
796
+ * NOTE: TYPEALIGN[_DOWN] will not work if ALIGNVAL is not a power of 2.
797
+ * That case seems extremely unlikely to be needed in practice, however.
798
+ *
799
+ * NOTE: MAXIMUM_ALIGNOF, and hence MAXALIGN(), intentionally exclude any
800
+ * larger-than-8-byte types the compiler might have.
801
+ * ----------------
802
+ */
803
+
804
+ #define TYPEALIGN(ALIGNVAL,LEN) \
805
+ (((uintptr_t) (LEN) + ((ALIGNVAL) - 1)) & ~((uintptr_t) ((ALIGNVAL) - 1)))
806
+
807
+ #define SHORTALIGN(LEN) TYPEALIGN(ALIGNOF_SHORT, (LEN))
808
+ #define INTALIGN(LEN) TYPEALIGN(ALIGNOF_INT, (LEN))
809
+ #define LONGALIGN(LEN) TYPEALIGN(ALIGNOF_LONG, (LEN))
810
+ #define DOUBLEALIGN(LEN) TYPEALIGN(ALIGNOF_DOUBLE, (LEN))
811
+ #define MAXALIGN(LEN) TYPEALIGN(MAXIMUM_ALIGNOF, (LEN))
812
+ /* MAXALIGN covers only built-in types, not buffers */
813
+ #define BUFFERALIGN(LEN) TYPEALIGN(ALIGNOF_BUFFER, (LEN))
814
+ #define CACHELINEALIGN(LEN) TYPEALIGN(PG_CACHE_LINE_SIZE, (LEN))
815
+
816
+ #define TYPEALIGN_DOWN(ALIGNVAL,LEN) \
817
+ (((uintptr_t) (LEN)) & ~((uintptr_t) ((ALIGNVAL) - 1)))
818
+
819
+ #define SHORTALIGN_DOWN(LEN) TYPEALIGN_DOWN(ALIGNOF_SHORT, (LEN))
820
+ #define INTALIGN_DOWN(LEN) TYPEALIGN_DOWN(ALIGNOF_INT, (LEN))
821
+ #define LONGALIGN_DOWN(LEN) TYPEALIGN_DOWN(ALIGNOF_LONG, (LEN))
822
+ #define DOUBLEALIGN_DOWN(LEN) TYPEALIGN_DOWN(ALIGNOF_DOUBLE, (LEN))
823
+ #define MAXALIGN_DOWN(LEN) TYPEALIGN_DOWN(MAXIMUM_ALIGNOF, (LEN))
824
+ #define BUFFERALIGN_DOWN(LEN) TYPEALIGN_DOWN(ALIGNOF_BUFFER, (LEN))
825
+
826
+ /*
827
+ * The above macros will not work with types wider than uintptr_t, like with
828
+ * uint64 on 32-bit platforms. That's not problem for the usual use where a
829
+ * pointer or a length is aligned, but for the odd case that you need to
830
+ * align something (potentially) wider, use TYPEALIGN64.
831
+ */
832
+ #define TYPEALIGN64(ALIGNVAL,LEN) \
833
+ (((uint64) (LEN) + ((ALIGNVAL) - 1)) & ~((uint64) ((ALIGNVAL) - 1)))
834
+
835
+ /* we don't currently need wider versions of the other ALIGN macros */
836
+ #define MAXALIGN64(LEN) TYPEALIGN64(MAXIMUM_ALIGNOF, (LEN))
837
+
838
+
839
+ /* ----------------------------------------------------------------
840
+ * Section 6: assertions
841
+ * ----------------------------------------------------------------
842
+ */
843
+
844
+ /*
845
+ * USE_ASSERT_CHECKING, if defined, turns on all the assertions.
846
+ * - plai 9/5/90
847
+ *
848
+ * It should _NOT_ be defined in releases or in benchmark copies
849
+ */
850
+
851
+ /*
852
+ * Assert() can be used in both frontend and backend code. In frontend code it
853
+ * just calls the standard assert, if it's available. If use of assertions is
854
+ * not configured, it does nothing.
855
+ */
856
+ #ifndef USE_ASSERT_CHECKING
857
+
858
+ #define Assert(condition) ((void)true)
859
+ #define AssertMacro(condition) ((void)true)
860
+
861
+ #elif defined(FRONTEND)
862
+
863
+ #include <assert.h>
864
+ #define Assert(p) assert(p)
865
+ #define AssertMacro(p) ((void) assert(p))
866
+
867
+ #else /* USE_ASSERT_CHECKING && !FRONTEND */
868
+
869
+ /*
870
+ * Assert
871
+ * Generates a fatal exception if the given condition is false.
872
+ */
873
+ #define Assert(condition) \
874
+ do { \
875
+ if (!(condition)) \
876
+ ExceptionalCondition(#condition, __FILE__, __LINE__); \
877
+ } while (0)
878
+
879
+ /*
880
+ * AssertMacro is the same as Assert but it's suitable for use in
881
+ * expression-like macros, for example:
882
+ *
883
+ * #define foo(x) (AssertMacro(x != 0), bar(x))
884
+ */
885
+ #define AssertMacro(condition) \
886
+ ((void) ((condition) || \
887
+ (ExceptionalCondition(#condition, __FILE__, __LINE__), 0)))
888
+
889
+ #endif /* USE_ASSERT_CHECKING && !FRONTEND */
890
+
891
+ /*
892
+ * Check that `ptr' is `bndr' aligned.
893
+ */
894
+ #define AssertPointerAlignment(ptr, bndr) \
895
+ Assert(TYPEALIGN(bndr, (uintptr_t)(ptr)) == (uintptr_t)(ptr))
896
+
897
+ /*
898
+ * ExceptionalCondition is compiled into the backend whether or not
899
+ * USE_ASSERT_CHECKING is defined, so as to support use of extensions
900
+ * that are built with that #define with a backend that isn't. Hence,
901
+ * we should declare it as long as !FRONTEND.
902
+ */
903
+ #ifndef FRONTEND
904
+ extern void ExceptionalCondition(const char *conditionName,
905
+ const char *fileName, int lineNumber) pg_attribute_noreturn();
906
+ #endif
907
+
908
+ /*
909
+ * Macros to support compile-time assertion checks.
910
+ *
911
+ * If the "condition" (a compile-time-constant expression) evaluates to false,
912
+ * throw a compile error using the "errmessage" (a string literal).
913
+ *
914
+ * C11 has _Static_assert(), and most C99 compilers already support that. For
915
+ * portability, we wrap it into StaticAssertDecl(). _Static_assert() is a
916
+ * "declaration", and so it must be placed where for example a variable
917
+ * declaration would be valid. As long as we compile with
918
+ * -Wno-declaration-after-statement, that also means it cannot be placed after
919
+ * statements in a function. Macros StaticAssertStmt() and StaticAssertExpr()
920
+ * make it safe to use as a statement or in an expression, respectively.
921
+ *
922
+ * For compilers without _Static_assert(), we fall back on a kluge that
923
+ * assumes the compiler will complain about a negative width for a struct
924
+ * bit-field. This will not include a helpful error message, but it beats not
925
+ * getting an error at all.
926
+ */
927
+ #ifndef __cplusplus
928
+ #ifdef HAVE__STATIC_ASSERT
929
+ #define StaticAssertDecl(condition, errmessage) \
930
+ _Static_assert(condition, errmessage)
931
+ #define StaticAssertStmt(condition, errmessage) \
932
+ do { _Static_assert(condition, errmessage); } while(0)
933
+ #define StaticAssertExpr(condition, errmessage) \
934
+ ((void) ({ StaticAssertStmt(condition, errmessage); true; }))
935
+ #else /* !HAVE__STATIC_ASSERT */
936
+ #define StaticAssertDecl(condition, errmessage) \
937
+ extern void static_assert_func(int static_assert_failure[(condition) ? 1 : -1])
938
+ #define StaticAssertStmt(condition, errmessage) \
939
+ ((void) sizeof(struct { int static_assert_failure : (condition) ? 1 : -1; }))
940
+ #define StaticAssertExpr(condition, errmessage) \
941
+ StaticAssertStmt(condition, errmessage)
942
+ #endif /* HAVE__STATIC_ASSERT */
943
+ #else /* C++ */
944
+ #if defined(__cpp_static_assert) && __cpp_static_assert >= 200410
945
+ #define StaticAssertDecl(condition, errmessage) \
946
+ static_assert(condition, errmessage)
947
+ #define StaticAssertStmt(condition, errmessage) \
948
+ static_assert(condition, errmessage)
949
+ #define StaticAssertExpr(condition, errmessage) \
950
+ ({ static_assert(condition, errmessage); })
951
+ #else /* !__cpp_static_assert */
952
+ #define StaticAssertDecl(condition, errmessage) \
953
+ extern void static_assert_func(int static_assert_failure[(condition) ? 1 : -1])
954
+ #define StaticAssertStmt(condition, errmessage) \
955
+ do { struct static_assert_struct { int static_assert_failure : (condition) ? 1 : -1; }; } while(0)
956
+ #define StaticAssertExpr(condition, errmessage) \
957
+ ((void) ({ StaticAssertStmt(condition, errmessage); }))
958
+ #endif /* __cpp_static_assert */
959
+ #endif /* C++ */
960
+
961
+
962
+ /*
963
+ * Compile-time checks that a variable (or expression) has the specified type.
964
+ *
965
+ * AssertVariableIsOfType() can be used as a statement.
966
+ * AssertVariableIsOfTypeMacro() is intended for use in macros, eg
967
+ * #define foo(x) (AssertVariableIsOfTypeMacro(x, int), bar(x))
968
+ *
969
+ * If we don't have __builtin_types_compatible_p, we can still assert that
970
+ * the types have the same size. This is far from ideal (especially on 32-bit
971
+ * platforms) but it provides at least some coverage.
972
+ */
973
+ #ifdef HAVE__BUILTIN_TYPES_COMPATIBLE_P
974
+ #define AssertVariableIsOfType(varname, typename) \
975
+ StaticAssertStmt(__builtin_types_compatible_p(__typeof__(varname), typename), \
976
+ CppAsString(varname) " does not have type " CppAsString(typename))
977
+ #define AssertVariableIsOfTypeMacro(varname, typename) \
978
+ (StaticAssertExpr(__builtin_types_compatible_p(__typeof__(varname), typename), \
979
+ CppAsString(varname) " does not have type " CppAsString(typename)))
980
+ #else /* !HAVE__BUILTIN_TYPES_COMPATIBLE_P */
981
+ #define AssertVariableIsOfType(varname, typename) \
982
+ StaticAssertStmt(sizeof(varname) == sizeof(typename), \
983
+ CppAsString(varname) " does not have type " CppAsString(typename))
984
+ #define AssertVariableIsOfTypeMacro(varname, typename) \
985
+ (StaticAssertExpr(sizeof(varname) == sizeof(typename), \
986
+ CppAsString(varname) " does not have type " CppAsString(typename)))
987
+ #endif /* HAVE__BUILTIN_TYPES_COMPATIBLE_P */
988
+
989
+
990
+ /* ----------------------------------------------------------------
991
+ * Section 7: widely useful macros
992
+ * ----------------------------------------------------------------
993
+ */
994
+ /*
995
+ * Max
996
+ * Return the maximum of two numbers.
997
+ */
998
+ #define Max(x, y) ((x) > (y) ? (x) : (y))
999
+
1000
+ /*
1001
+ * Min
1002
+ * Return the minimum of two numbers.
1003
+ */
1004
+ #define Min(x, y) ((x) < (y) ? (x) : (y))
1005
+
1006
+
1007
+ /* Get a bit mask of the bits set in non-long aligned addresses */
1008
+ #define LONG_ALIGN_MASK (sizeof(long) - 1)
1009
+
1010
+ /*
1011
+ * MemSet
1012
+ * Exactly the same as standard library function memset(), but considerably
1013
+ * faster for zeroing small word-aligned structures (such as parsetree nodes).
1014
+ * This has to be a macro because the main point is to avoid function-call
1015
+ * overhead. However, we have also found that the loop is faster than
1016
+ * native libc memset() on some platforms, even those with assembler
1017
+ * memset() functions. More research needs to be done, perhaps with
1018
+ * MEMSET_LOOP_LIMIT tests in configure.
1019
+ */
1020
+ #define MemSet(start, val, len) \
1021
+ do \
1022
+ { \
1023
+ /* must be void* because we don't know if it is integer aligned yet */ \
1024
+ void *_vstart = (void *) (start); \
1025
+ int _val = (val); \
1026
+ Size _len = (len); \
1027
+ \
1028
+ if ((((uintptr_t) _vstart) & LONG_ALIGN_MASK) == 0 && \
1029
+ (_len & LONG_ALIGN_MASK) == 0 && \
1030
+ _val == 0 && \
1031
+ _len <= MEMSET_LOOP_LIMIT && \
1032
+ /* \
1033
+ * If MEMSET_LOOP_LIMIT == 0, optimizer should find \
1034
+ * the whole "if" false at compile time. \
1035
+ */ \
1036
+ MEMSET_LOOP_LIMIT != 0) \
1037
+ { \
1038
+ long *_start = (long *) _vstart; \
1039
+ long *_stop = (long *) ((char *) _start + _len); \
1040
+ while (_start < _stop) \
1041
+ *_start++ = 0; \
1042
+ } \
1043
+ else \
1044
+ memset(_vstart, _val, _len); \
1045
+ } while (0)
1046
+
1047
+ /*
1048
+ * MemSetAligned is the same as MemSet except it omits the test to see if
1049
+ * "start" is word-aligned. This is okay to use if the caller knows a-priori
1050
+ * that the pointer is suitably aligned (typically, because he just got it
1051
+ * from palloc(), which always delivers a max-aligned pointer).
1052
+ */
1053
+ #define MemSetAligned(start, val, len) \
1054
+ do \
1055
+ { \
1056
+ long *_start = (long *) (start); \
1057
+ int _val = (val); \
1058
+ Size _len = (len); \
1059
+ \
1060
+ if ((_len & LONG_ALIGN_MASK) == 0 && \
1061
+ _val == 0 && \
1062
+ _len <= MEMSET_LOOP_LIMIT && \
1063
+ MEMSET_LOOP_LIMIT != 0) \
1064
+ { \
1065
+ long *_stop = (long *) ((char *) _start + _len); \
1066
+ while (_start < _stop) \
1067
+ *_start++ = 0; \
1068
+ } \
1069
+ else \
1070
+ memset(_start, _val, _len); \
1071
+ } while (0)
1072
+
1073
+
1074
+ /*
1075
+ * Macros for range-checking float values before converting to integer.
1076
+ * We must be careful here that the boundary values are expressed exactly
1077
+ * in the float domain. PG_INTnn_MIN is an exact power of 2, so it will
1078
+ * be represented exactly; but PG_INTnn_MAX isn't, and might get rounded
1079
+ * off, so avoid using that.
1080
+ * The input must be rounded to an integer beforehand, typically with rint(),
1081
+ * else we might draw the wrong conclusion about close-to-the-limit values.
1082
+ * These macros will do the right thing for Inf, but not necessarily for NaN,
1083
+ * so check isnan(num) first if that's a possibility.
1084
+ */
1085
+ #define FLOAT4_FITS_IN_INT16(num) \
1086
+ ((num) >= (float4) PG_INT16_MIN && (num) < -((float4) PG_INT16_MIN))
1087
+ #define FLOAT4_FITS_IN_INT32(num) \
1088
+ ((num) >= (float4) PG_INT32_MIN && (num) < -((float4) PG_INT32_MIN))
1089
+ #define FLOAT4_FITS_IN_INT64(num) \
1090
+ ((num) >= (float4) PG_INT64_MIN && (num) < -((float4) PG_INT64_MIN))
1091
+ #define FLOAT8_FITS_IN_INT16(num) \
1092
+ ((num) >= (float8) PG_INT16_MIN && (num) < -((float8) PG_INT16_MIN))
1093
+ #define FLOAT8_FITS_IN_INT32(num) \
1094
+ ((num) >= (float8) PG_INT32_MIN && (num) < -((float8) PG_INT32_MIN))
1095
+ #define FLOAT8_FITS_IN_INT64(num) \
1096
+ ((num) >= (float8) PG_INT64_MIN && (num) < -((float8) PG_INT64_MIN))
1097
+
1098
+
1099
+ /* ----------------------------------------------------------------
1100
+ * Section 8: random stuff
1101
+ * ----------------------------------------------------------------
1102
+ */
1103
+
1104
+ /*
1105
+ * Invert the sign of a qsort-style comparison result, ie, exchange negative
1106
+ * and positive integer values, being careful not to get the wrong answer
1107
+ * for INT_MIN. The argument should be an integral variable.
1108
+ */
1109
+ #define INVERT_COMPARE_RESULT(var) \
1110
+ ((var) = ((var) < 0) ? 1 : -(var))
1111
+
1112
+ /*
1113
+ * Use this, not "char buf[BLCKSZ]", to declare a field or local variable
1114
+ * holding a page buffer, if that page might be accessed as a page. Otherwise
1115
+ * the variable might be under-aligned, causing problems on alignment-picky
1116
+ * hardware. We include both "double" and "int64" in the union to ensure that
1117
+ * the compiler knows the value must be MAXALIGN'ed (cf. configure's
1118
+ * computation of MAXIMUM_ALIGNOF).
1119
+ */
1120
+ typedef union PGAlignedBlock
1121
+ {
1122
+ char data[BLCKSZ];
1123
+ double force_align_d;
1124
+ int64 force_align_i64;
1125
+ } PGAlignedBlock;
1126
+
1127
+ /*
1128
+ * Use this to declare a field or local variable holding a page buffer, if that
1129
+ * page might be accessed as a page or passed to an SMgr I/O function. If
1130
+ * allocating using the MemoryContext API, the aligned allocation functions
1131
+ * should be used with PG_IO_ALIGN_SIZE. This alignment may be more efficient
1132
+ * for I/O in general, but may be strictly required on some platforms when
1133
+ * using direct I/O.
1134
+ */
1135
+ typedef union PGIOAlignedBlock
1136
+ {
1137
+ #ifdef pg_attribute_aligned
1138
+ pg_attribute_aligned(PG_IO_ALIGN_SIZE)
1139
+ #endif
1140
+ char data[BLCKSZ];
1141
+ double force_align_d;
1142
+ int64 force_align_i64;
1143
+ } PGIOAlignedBlock;
1144
+
1145
+ /* Same, but for an XLOG_BLCKSZ-sized buffer */
1146
+ typedef union PGAlignedXLogBlock
1147
+ {
1148
+ #ifdef pg_attribute_aligned
1149
+ pg_attribute_aligned(PG_IO_ALIGN_SIZE)
1150
+ #endif
1151
+ char data[XLOG_BLCKSZ];
1152
+ double force_align_d;
1153
+ int64 force_align_i64;
1154
+ } PGAlignedXLogBlock;
1155
+
1156
+ /* msb for char */
1157
+ #define HIGHBIT (0x80)
1158
+ #define IS_HIGHBIT_SET(ch) ((unsigned char)(ch) & HIGHBIT)
1159
+
1160
+ /*
1161
+ * Support macros for escaping strings. escape_backslash should be true
1162
+ * if generating a non-standard-conforming string. Prefixing a string
1163
+ * with ESCAPE_STRING_SYNTAX guarantees it is non-standard-conforming.
1164
+ * Beware of multiple evaluation of the "ch" argument!
1165
+ */
1166
+ #define SQL_STR_DOUBLE(ch, escape_backslash) \
1167
+ ((ch) == '\'' || ((ch) == '\\' && (escape_backslash)))
1168
+
1169
+ #define ESCAPE_STRING_SYNTAX 'E'
1170
+
1171
+
1172
+ #define STATUS_OK (0)
1173
+ #define STATUS_ERROR (-1)
1174
+ #define STATUS_EOF (-2)
1175
+
1176
+ /*
1177
+ * gettext support
1178
+ */
1179
+
1180
+ #ifndef ENABLE_NLS
1181
+ /* stuff we'd otherwise get from <libintl.h> */
1182
+ #define gettext(x) (x)
1183
+ #define dgettext(d,x) (x)
1184
+ #define ngettext(s,p,n) ((n) == 1 ? (s) : (p))
1185
+ #define dngettext(d,s,p,n) ((n) == 1 ? (s) : (p))
1186
+ #endif
1187
+
1188
+ #define _(x) gettext(x)
1189
+
1190
+ /*
1191
+ * Use this to mark string constants as needing translation at some later
1192
+ * time, rather than immediately. This is useful for cases where you need
1193
+ * access to the original string and translated string, and for cases where
1194
+ * immediate translation is not possible, like when initializing global
1195
+ * variables.
1196
+ *
1197
+ * https://www.gnu.org/software/gettext/manual/html_node/Special-cases.html
1198
+ */
1199
+ #define gettext_noop(x) (x)
1200
+
1201
+ /*
1202
+ * To better support parallel installations of major PostgreSQL
1203
+ * versions as well as parallel installations of major library soname
1204
+ * versions, we mangle the gettext domain name by appending those
1205
+ * version numbers. The coding rule ought to be that wherever the
1206
+ * domain name is mentioned as a literal, it must be wrapped into
1207
+ * PG_TEXTDOMAIN(). The macros below do not work on non-literals; but
1208
+ * that is somewhat intentional because it avoids having to worry
1209
+ * about multiple states of premangling and postmangling as the values
1210
+ * are being passed around.
1211
+ *
1212
+ * Make sure this matches the installation rules in nls-global.mk.
1213
+ */
1214
+ #ifdef SO_MAJOR_VERSION
1215
+ #define PG_TEXTDOMAIN(domain) (domain CppAsString2(SO_MAJOR_VERSION) "-" PG_MAJORVERSION)
1216
+ #else
1217
+ #define PG_TEXTDOMAIN(domain) (domain "-" PG_MAJORVERSION)
1218
+ #endif
1219
+
1220
+ /*
1221
+ * Macro that allows to cast constness and volatile away from an expression, but doesn't
1222
+ * allow changing the underlying type. Enforcement of the latter
1223
+ * currently only works for gcc like compilers.
1224
+ *
1225
+ * Please note IT IS NOT SAFE to cast constness away if the result will ever
1226
+ * be modified (it would be undefined behaviour). Doing so anyway can cause
1227
+ * compiler misoptimizations or runtime crashes (modifying readonly memory).
1228
+ * It is only safe to use when the result will not be modified, but API
1229
+ * design or language restrictions prevent you from declaring that
1230
+ * (e.g. because a function returns both const and non-const variables).
1231
+ *
1232
+ * Note that this only works in function scope, not for global variables (it'd
1233
+ * be nice, but not trivial, to improve that).
1234
+ */
1235
+ #if defined(__cplusplus)
1236
+ #define unconstify(underlying_type, expr) const_cast<underlying_type>(expr)
1237
+ #define unvolatize(underlying_type, expr) const_cast<underlying_type>(expr)
1238
+ #elif defined(HAVE__BUILTIN_TYPES_COMPATIBLE_P)
1239
+ #define unconstify(underlying_type, expr) \
1240
+ (StaticAssertExpr(__builtin_types_compatible_p(__typeof(expr), const underlying_type), \
1241
+ "wrong cast"), \
1242
+ (underlying_type) (expr))
1243
+ #define unvolatize(underlying_type, expr) \
1244
+ (StaticAssertExpr(__builtin_types_compatible_p(__typeof(expr), volatile underlying_type), \
1245
+ "wrong cast"), \
1246
+ (underlying_type) (expr))
1247
+ #else
1248
+ #define unconstify(underlying_type, expr) \
1249
+ ((underlying_type) (expr))
1250
+ #define unvolatize(underlying_type, expr) \
1251
+ ((underlying_type) (expr))
1252
+ #endif
1253
+
1254
+ /* ----------------------------------------------------------------
1255
+ * Section 9: system-specific hacks
1256
+ *
1257
+ * This should be limited to things that absolutely have to be
1258
+ * included in every source file. The port-specific header file
1259
+ * is usually a better place for this sort of thing.
1260
+ * ----------------------------------------------------------------
1261
+ */
1262
+
1263
+ /*
1264
+ * NOTE: this is also used for opening text files.
1265
+ * WIN32 treats Control-Z as EOF in files opened in text mode.
1266
+ * Therefore, we open files in binary mode on Win32 so we can read
1267
+ * literal control-Z. The other affect is that we see CRLF, but
1268
+ * that is OK because we can already handle those cleanly.
1269
+ */
1270
+ #if defined(WIN32) || defined(__CYGWIN__)
1271
+ #define PG_BINARY O_BINARY
1272
+ #define PG_BINARY_A "ab"
1273
+ #define PG_BINARY_R "rb"
1274
+ #define PG_BINARY_W "wb"
1275
+ #else
1276
+ #define PG_BINARY 0
1277
+ #define PG_BINARY_A "a"
1278
+ #define PG_BINARY_R "r"
1279
+ #define PG_BINARY_W "w"
1280
+ #endif
1281
+
1282
+ /*
1283
+ * Provide prototypes for routines not present in a particular machine's
1284
+ * standard C library.
1285
+ */
1286
+
1287
+ #if !HAVE_DECL_FDATASYNC
1288
+ extern int fdatasync(int fildes);
1289
+ #endif
1290
+
1291
+ /*
1292
+ * Thin wrappers that convert strings to exactly 64-bit integers, matching our
1293
+ * definition of int64. (For the naming, compare that POSIX has
1294
+ * strtoimax()/strtoumax() which return intmax_t/uintmax_t.)
1295
+ */
1296
+ #ifdef HAVE_LONG_INT_64
1297
+ #define strtoi64(str, endptr, base) ((int64) strtol(str, endptr, base))
1298
+ #define strtou64(str, endptr, base) ((uint64) strtoul(str, endptr, base))
1299
+ #else
1300
+ #define strtoi64(str, endptr, base) ((int64) strtoll(str, endptr, base))
1301
+ #define strtou64(str, endptr, base) ((uint64) strtoull(str, endptr, base))
1302
+ #endif
1303
+
1304
+ /*
1305
+ * Similarly, wrappers around labs()/llabs() matching our int64.
1306
+ */
1307
+ #ifdef HAVE_LONG_INT_64
1308
+ #define i64abs(i) labs(i)
1309
+ #else
1310
+ #define i64abs(i) llabs(i)
1311
+ #endif
1312
+
1313
+ /*
1314
+ * Use "extern PGDLLIMPORT ..." to declare variables that are defined
1315
+ * in the core backend and need to be accessible by loadable modules.
1316
+ * No special marking is required on most ports.
1317
+ */
1318
+ #ifndef PGDLLIMPORT
1319
+ #define PGDLLIMPORT
1320
+ #endif
1321
+
1322
+ /*
1323
+ * Use "extern PGDLLEXPORT ..." to declare functions that are defined in
1324
+ * loadable modules and need to be callable by the core backend or other
1325
+ * loadable modules.
1326
+ * If the compiler knows __attribute__((visibility("*"))), we use that,
1327
+ * unless we already have a platform-specific definition. Otherwise,
1328
+ * no special marking is required.
1329
+ */
1330
+ #ifndef PGDLLEXPORT
1331
+ #ifdef HAVE_VISIBILITY_ATTRIBUTE
1332
+ #define PGDLLEXPORT __attribute__((visibility("default")))
1333
+ #else
1334
+ #define PGDLLEXPORT
1335
+ #endif
1336
+ #endif
1337
+
1338
+ /*
1339
+ * The following is used as the arg list for signal handlers. Any ports
1340
+ * that take something other than an int argument should override this in
1341
+ * their pg_config_os.h file. Note that variable names are required
1342
+ * because it is used in both the prototypes as well as the definitions.
1343
+ * Note also the long name. We expect that this won't collide with
1344
+ * other names causing compiler warnings.
1345
+ */
1346
+
1347
+ #ifndef SIGNAL_ARGS
1348
+ #define SIGNAL_ARGS int postgres_signal_arg
1349
+ #endif
1350
+
1351
+ /*
1352
+ * When there is no sigsetjmp, its functionality is provided by plain
1353
+ * setjmp. We now support the case only on Windows. However, it seems
1354
+ * that MinGW-64 has some longstanding issues in its setjmp support,
1355
+ * so on that toolchain we cheat and use gcc's builtins.
1356
+ */
1357
+ #ifdef WIN32
1358
+ #ifdef __MINGW64__
1359
+ typedef intptr_t sigjmp_buf[5];
1360
+ #define sigsetjmp(x,y) __builtin_setjmp(x)
1361
+ #define siglongjmp __builtin_longjmp
1362
+ #else /* !__MINGW64__ */
1363
+ #define sigjmp_buf jmp_buf
1364
+ #define sigsetjmp(x,y) setjmp(x)
1365
+ #define siglongjmp longjmp
1366
+ #endif /* __MINGW64__ */
1367
+ #endif /* WIN32 */
1368
+
1369
+ /* /port compatibility functions */
1370
+ #include "port.h"
1371
+
1372
+ #endif /* C_H */
1373
+ #undef StaticAssertDecl
1374
+ #define StaticAssertDecl(condition, errmessage)