gitlab-pg_query 1.3.1 → 2.0.4

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 (480) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +217 -99
  3. data/README.md +92 -69
  4. data/Rakefile +85 -5
  5. data/ext/pg_query/extconf.rb +3 -40
  6. data/ext/pg_query/guc-file.c +0 -0
  7. data/ext/pg_query/include/access/amapi.h +246 -0
  8. data/ext/pg_query/include/access/attmap.h +52 -0
  9. data/ext/pg_query/include/access/attnum.h +64 -0
  10. data/ext/pg_query/include/access/clog.h +61 -0
  11. data/ext/pg_query/include/access/commit_ts.h +77 -0
  12. data/ext/pg_query/include/access/detoast.h +92 -0
  13. data/ext/pg_query/include/access/genam.h +228 -0
  14. data/ext/pg_query/include/access/gin.h +78 -0
  15. data/ext/pg_query/include/access/htup.h +89 -0
  16. data/ext/pg_query/include/access/htup_details.h +819 -0
  17. data/ext/pg_query/include/access/itup.h +161 -0
  18. data/ext/pg_query/include/access/parallel.h +82 -0
  19. data/ext/pg_query/include/access/printtup.h +35 -0
  20. data/ext/pg_query/include/access/relation.h +28 -0
  21. data/ext/pg_query/include/access/relscan.h +176 -0
  22. data/ext/pg_query/include/access/rmgr.h +35 -0
  23. data/ext/pg_query/include/access/rmgrlist.h +49 -0
  24. data/ext/pg_query/include/access/sdir.h +58 -0
  25. data/ext/pg_query/include/access/skey.h +151 -0
  26. data/ext/pg_query/include/access/stratnum.h +83 -0
  27. data/ext/pg_query/include/access/sysattr.h +29 -0
  28. data/ext/pg_query/include/access/table.h +27 -0
  29. data/ext/pg_query/include/access/tableam.h +1825 -0
  30. data/ext/pg_query/include/access/transam.h +265 -0
  31. data/ext/pg_query/include/access/tupconvert.h +51 -0
  32. data/ext/pg_query/include/access/tupdesc.h +154 -0
  33. data/ext/pg_query/include/access/tupmacs.h +247 -0
  34. data/ext/pg_query/include/access/twophase.h +61 -0
  35. data/ext/pg_query/include/access/xact.h +463 -0
  36. data/ext/pg_query/include/access/xlog.h +398 -0
  37. data/ext/pg_query/include/access/xlog_internal.h +330 -0
  38. data/ext/pg_query/include/access/xlogdefs.h +109 -0
  39. data/ext/pg_query/include/access/xloginsert.h +64 -0
  40. data/ext/pg_query/include/access/xlogreader.h +327 -0
  41. data/ext/pg_query/include/access/xlogrecord.h +227 -0
  42. data/ext/pg_query/include/bootstrap/bootstrap.h +62 -0
  43. data/ext/pg_query/include/c.h +1322 -0
  44. data/ext/pg_query/include/catalog/catalog.h +42 -0
  45. data/ext/pg_query/include/catalog/catversion.h +58 -0
  46. data/ext/pg_query/include/catalog/dependency.h +275 -0
  47. data/ext/pg_query/include/catalog/genbki.h +64 -0
  48. data/ext/pg_query/include/catalog/index.h +199 -0
  49. data/ext/pg_query/include/catalog/indexing.h +366 -0
  50. data/ext/pg_query/include/catalog/namespace.h +188 -0
  51. data/ext/pg_query/include/catalog/objectaccess.h +197 -0
  52. data/ext/pg_query/include/catalog/objectaddress.h +84 -0
  53. data/ext/pg_query/include/catalog/pg_aggregate.h +176 -0
  54. data/ext/pg_query/include/catalog/pg_aggregate_d.h +77 -0
  55. data/ext/pg_query/include/catalog/pg_am.h +60 -0
  56. data/ext/pg_query/include/catalog/pg_am_d.h +45 -0
  57. data/ext/pg_query/include/catalog/pg_attribute.h +204 -0
  58. data/ext/pg_query/include/catalog/pg_attribute_d.h +59 -0
  59. data/ext/pg_query/include/catalog/pg_authid.h +58 -0
  60. data/ext/pg_query/include/catalog/pg_authid_d.h +49 -0
  61. data/ext/pg_query/include/catalog/pg_class.h +200 -0
  62. data/ext/pg_query/include/catalog/pg_class_d.h +103 -0
  63. data/ext/pg_query/include/catalog/pg_collation.h +73 -0
  64. data/ext/pg_query/include/catalog/pg_collation_d.h +45 -0
  65. data/ext/pg_query/include/catalog/pg_constraint.h +247 -0
  66. data/ext/pg_query/include/catalog/pg_constraint_d.h +67 -0
  67. data/ext/pg_query/include/catalog/pg_control.h +250 -0
  68. data/ext/pg_query/include/catalog/pg_conversion.h +72 -0
  69. data/ext/pg_query/include/catalog/pg_conversion_d.h +35 -0
  70. data/ext/pg_query/include/catalog/pg_depend.h +73 -0
  71. data/ext/pg_query/include/catalog/pg_depend_d.h +34 -0
  72. data/ext/pg_query/include/catalog/pg_event_trigger.h +51 -0
  73. data/ext/pg_query/include/catalog/pg_event_trigger_d.h +34 -0
  74. data/ext/pg_query/include/catalog/pg_index.h +80 -0
  75. data/ext/pg_query/include/catalog/pg_index_d.h +56 -0
  76. data/ext/pg_query/include/catalog/pg_language.h +67 -0
  77. data/ext/pg_query/include/catalog/pg_language_d.h +39 -0
  78. data/ext/pg_query/include/catalog/pg_namespace.h +59 -0
  79. data/ext/pg_query/include/catalog/pg_namespace_d.h +34 -0
  80. data/ext/pg_query/include/catalog/pg_opclass.h +85 -0
  81. data/ext/pg_query/include/catalog/pg_opclass_d.h +49 -0
  82. data/ext/pg_query/include/catalog/pg_operator.h +102 -0
  83. data/ext/pg_query/include/catalog/pg_operator_d.h +106 -0
  84. data/ext/pg_query/include/catalog/pg_opfamily.h +60 -0
  85. data/ext/pg_query/include/catalog/pg_opfamily_d.h +47 -0
  86. data/ext/pg_query/include/catalog/pg_partitioned_table.h +63 -0
  87. data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +35 -0
  88. data/ext/pg_query/include/catalog/pg_proc.h +211 -0
  89. data/ext/pg_query/include/catalog/pg_proc_d.h +99 -0
  90. data/ext/pg_query/include/catalog/pg_publication.h +115 -0
  91. data/ext/pg_query/include/catalog/pg_publication_d.h +36 -0
  92. data/ext/pg_query/include/catalog/pg_replication_origin.h +57 -0
  93. data/ext/pg_query/include/catalog/pg_replication_origin_d.h +29 -0
  94. data/ext/pg_query/include/catalog/pg_statistic.h +275 -0
  95. data/ext/pg_query/include/catalog/pg_statistic_d.h +194 -0
  96. data/ext/pg_query/include/catalog/pg_statistic_ext.h +74 -0
  97. data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +40 -0
  98. data/ext/pg_query/include/catalog/pg_transform.h +45 -0
  99. data/ext/pg_query/include/catalog/pg_transform_d.h +32 -0
  100. data/ext/pg_query/include/catalog/pg_trigger.h +137 -0
  101. data/ext/pg_query/include/catalog/pg_trigger_d.h +106 -0
  102. data/ext/pg_query/include/catalog/pg_ts_config.h +50 -0
  103. data/ext/pg_query/include/catalog/pg_ts_config_d.h +32 -0
  104. data/ext/pg_query/include/catalog/pg_ts_dict.h +54 -0
  105. data/ext/pg_query/include/catalog/pg_ts_dict_d.h +33 -0
  106. data/ext/pg_query/include/catalog/pg_ts_parser.h +57 -0
  107. data/ext/pg_query/include/catalog/pg_ts_parser_d.h +35 -0
  108. data/ext/pg_query/include/catalog/pg_ts_template.h +48 -0
  109. data/ext/pg_query/include/catalog/pg_ts_template_d.h +32 -0
  110. data/ext/pg_query/include/catalog/pg_type.h +372 -0
  111. data/ext/pg_query/include/catalog/pg_type_d.h +285 -0
  112. data/ext/pg_query/include/catalog/storage.h +48 -0
  113. data/ext/pg_query/include/commands/async.h +54 -0
  114. data/ext/pg_query/include/commands/dbcommands.h +35 -0
  115. data/ext/pg_query/include/commands/defrem.h +173 -0
  116. data/ext/pg_query/include/commands/event_trigger.h +88 -0
  117. data/ext/pg_query/include/commands/explain.h +127 -0
  118. data/ext/pg_query/include/commands/prepare.h +61 -0
  119. data/ext/pg_query/include/commands/tablespace.h +67 -0
  120. data/ext/pg_query/include/commands/trigger.h +277 -0
  121. data/ext/pg_query/include/commands/user.h +37 -0
  122. data/ext/pg_query/include/commands/vacuum.h +293 -0
  123. data/ext/pg_query/include/commands/variable.h +38 -0
  124. data/ext/pg_query/include/common/file_perm.h +56 -0
  125. data/ext/pg_query/include/common/hashfn.h +104 -0
  126. data/ext/pg_query/include/common/ip.h +37 -0
  127. data/ext/pg_query/include/common/keywords.h +33 -0
  128. data/ext/pg_query/include/common/kwlookup.h +44 -0
  129. data/ext/pg_query/include/common/relpath.h +90 -0
  130. data/ext/pg_query/include/common/string.h +19 -0
  131. data/ext/pg_query/include/common/unicode_combining_table.h +196 -0
  132. data/ext/pg_query/include/datatype/timestamp.h +197 -0
  133. data/ext/pg_query/include/executor/execdesc.h +70 -0
  134. data/ext/pg_query/include/executor/executor.h +614 -0
  135. data/ext/pg_query/include/executor/functions.h +41 -0
  136. data/ext/pg_query/include/executor/instrument.h +101 -0
  137. data/ext/pg_query/include/executor/spi.h +175 -0
  138. data/ext/pg_query/include/executor/tablefunc.h +67 -0
  139. data/ext/pg_query/include/executor/tuptable.h +487 -0
  140. data/ext/pg_query/include/fmgr.h +775 -0
  141. data/ext/pg_query/include/funcapi.h +348 -0
  142. data/ext/pg_query/include/getaddrinfo.h +162 -0
  143. data/ext/pg_query/include/jit/jit.h +105 -0
  144. data/ext/pg_query/include/kwlist_d.h +1072 -0
  145. data/ext/pg_query/include/lib/ilist.h +727 -0
  146. data/ext/pg_query/include/lib/pairingheap.h +102 -0
  147. data/ext/pg_query/include/lib/simplehash.h +1059 -0
  148. data/ext/pg_query/include/lib/stringinfo.h +161 -0
  149. data/ext/pg_query/include/libpq/auth.h +29 -0
  150. data/ext/pg_query/include/libpq/crypt.h +46 -0
  151. data/ext/pg_query/include/libpq/hba.h +140 -0
  152. data/ext/pg_query/include/libpq/libpq-be.h +326 -0
  153. data/ext/pg_query/include/libpq/libpq.h +133 -0
  154. data/ext/pg_query/include/libpq/pqcomm.h +208 -0
  155. data/ext/pg_query/include/libpq/pqformat.h +210 -0
  156. data/ext/pg_query/include/libpq/pqsignal.h +42 -0
  157. data/ext/pg_query/include/mb/pg_wchar.h +672 -0
  158. data/ext/pg_query/include/mb/stringinfo_mb.h +24 -0
  159. data/ext/pg_query/include/miscadmin.h +476 -0
  160. data/ext/pg_query/include/nodes/bitmapset.h +122 -0
  161. data/ext/pg_query/include/nodes/execnodes.h +2520 -0
  162. data/ext/pg_query/include/nodes/extensible.h +160 -0
  163. data/ext/pg_query/include/nodes/lockoptions.h +61 -0
  164. data/ext/pg_query/include/nodes/makefuncs.h +108 -0
  165. data/ext/pg_query/include/nodes/memnodes.h +108 -0
  166. data/ext/pg_query/include/nodes/nodeFuncs.h +162 -0
  167. data/ext/pg_query/include/nodes/nodes.h +842 -0
  168. data/ext/pg_query/include/nodes/params.h +170 -0
  169. data/ext/pg_query/include/nodes/parsenodes.h +3579 -0
  170. data/ext/pg_query/include/nodes/pathnodes.h +2556 -0
  171. data/ext/pg_query/include/nodes/pg_list.h +605 -0
  172. data/ext/pg_query/include/nodes/plannodes.h +1251 -0
  173. data/ext/pg_query/include/nodes/primnodes.h +1541 -0
  174. data/ext/pg_query/include/nodes/print.h +34 -0
  175. data/ext/pg_query/include/nodes/tidbitmap.h +75 -0
  176. data/ext/pg_query/include/nodes/value.h +61 -0
  177. data/ext/pg_query/include/optimizer/cost.h +206 -0
  178. data/ext/pg_query/include/optimizer/geqo.h +88 -0
  179. data/ext/pg_query/include/optimizer/geqo_gene.h +45 -0
  180. data/ext/pg_query/include/optimizer/optimizer.h +199 -0
  181. data/ext/pg_query/include/optimizer/paths.h +249 -0
  182. data/ext/pg_query/include/optimizer/planmain.h +119 -0
  183. data/ext/pg_query/include/parser/analyze.h +49 -0
  184. data/ext/pg_query/include/parser/gram.h +1067 -0
  185. data/ext/pg_query/include/parser/gramparse.h +75 -0
  186. data/ext/pg_query/include/parser/kwlist.h +477 -0
  187. data/ext/pg_query/include/parser/parse_agg.h +68 -0
  188. data/ext/pg_query/include/parser/parse_clause.h +54 -0
  189. data/ext/pg_query/include/parser/parse_coerce.h +97 -0
  190. data/ext/pg_query/include/parser/parse_collate.h +27 -0
  191. data/ext/pg_query/include/parser/parse_expr.h +26 -0
  192. data/ext/pg_query/include/parser/parse_func.h +73 -0
  193. data/ext/pg_query/include/parser/parse_node.h +327 -0
  194. data/ext/pg_query/include/parser/parse_oper.h +67 -0
  195. data/ext/pg_query/include/parser/parse_relation.h +123 -0
  196. data/ext/pg_query/include/parser/parse_target.h +46 -0
  197. data/ext/pg_query/include/parser/parse_type.h +60 -0
  198. data/ext/pg_query/include/parser/parser.h +41 -0
  199. data/ext/pg_query/include/parser/parsetree.h +61 -0
  200. data/ext/pg_query/include/parser/scanner.h +152 -0
  201. data/ext/pg_query/include/parser/scansup.h +30 -0
  202. data/ext/pg_query/include/partitioning/partdefs.h +26 -0
  203. data/ext/pg_query/include/pg_config.h +989 -0
  204. data/ext/pg_query/include/pg_config_ext.h +8 -0
  205. data/ext/pg_query/include/pg_config_manual.h +350 -0
  206. data/ext/pg_query/include/pg_config_os.h +8 -0
  207. data/ext/pg_query/include/pg_getopt.h +56 -0
  208. data/ext/pg_query/include/pg_query.h +121 -0
  209. data/ext/pg_query/include/pg_query_enum_defs.c +2454 -0
  210. data/ext/pg_query/include/pg_query_fingerprint_conds.c +875 -0
  211. data/ext/pg_query/include/pg_query_fingerprint_defs.c +12413 -0
  212. data/ext/pg_query/include/pg_query_json_helper.c +61 -0
  213. data/ext/pg_query/include/pg_query_outfuncs_conds.c +686 -0
  214. data/ext/pg_query/include/pg_query_outfuncs_defs.c +2437 -0
  215. data/ext/pg_query/include/pg_query_readfuncs_conds.c +222 -0
  216. data/ext/pg_query/include/pg_query_readfuncs_defs.c +2878 -0
  217. data/ext/pg_query/include/pg_trace.h +17 -0
  218. data/ext/pg_query/include/pgstat.h +1487 -0
  219. data/ext/pg_query/include/pgtime.h +84 -0
  220. data/ext/pg_query/include/pl_gram.h +385 -0
  221. data/ext/pg_query/include/pl_reserved_kwlist.h +52 -0
  222. data/ext/pg_query/include/pl_reserved_kwlist_d.h +114 -0
  223. data/ext/pg_query/include/pl_unreserved_kwlist.h +112 -0
  224. data/ext/pg_query/include/pl_unreserved_kwlist_d.h +246 -0
  225. data/ext/pg_query/include/plerrcodes.h +990 -0
  226. data/ext/pg_query/include/plpgsql.h +1347 -0
  227. data/ext/pg_query/include/port.h +524 -0
  228. data/ext/pg_query/include/port/atomics.h +524 -0
  229. data/ext/pg_query/include/port/atomics/arch-arm.h +26 -0
  230. data/ext/pg_query/include/port/atomics/arch-ppc.h +254 -0
  231. data/ext/pg_query/include/port/atomics/arch-x86.h +252 -0
  232. data/ext/pg_query/include/port/atomics/fallback.h +170 -0
  233. data/ext/pg_query/include/port/atomics/generic-gcc.h +286 -0
  234. data/ext/pg_query/include/port/atomics/generic.h +401 -0
  235. data/ext/pg_query/include/port/pg_bitutils.h +226 -0
  236. data/ext/pg_query/include/port/pg_bswap.h +161 -0
  237. data/ext/pg_query/include/port/pg_crc32c.h +101 -0
  238. data/ext/pg_query/include/portability/instr_time.h +256 -0
  239. data/ext/pg_query/include/postgres.h +764 -0
  240. data/ext/pg_query/include/postgres_ext.h +74 -0
  241. data/ext/pg_query/include/postmaster/autovacuum.h +83 -0
  242. data/ext/pg_query/include/postmaster/bgworker.h +161 -0
  243. data/ext/pg_query/include/postmaster/bgworker_internals.h +64 -0
  244. data/ext/pg_query/include/postmaster/bgwriter.h +45 -0
  245. data/ext/pg_query/include/postmaster/fork_process.h +17 -0
  246. data/ext/pg_query/include/postmaster/interrupt.h +32 -0
  247. data/ext/pg_query/include/postmaster/pgarch.h +39 -0
  248. data/ext/pg_query/include/postmaster/postmaster.h +77 -0
  249. data/ext/pg_query/include/postmaster/syslogger.h +98 -0
  250. data/ext/pg_query/include/postmaster/walwriter.h +21 -0
  251. data/ext/pg_query/include/protobuf-c.h +1106 -0
  252. data/ext/pg_query/include/protobuf-c/protobuf-c.h +1106 -0
  253. data/ext/pg_query/include/protobuf/pg_query.pb-c.h +10846 -0
  254. data/ext/pg_query/include/protobuf/pg_query.pb.h +124718 -0
  255. data/ext/pg_query/include/regex/regex.h +184 -0
  256. data/ext/pg_query/include/replication/logicallauncher.h +31 -0
  257. data/ext/pg_query/include/replication/logicalproto.h +110 -0
  258. data/ext/pg_query/include/replication/logicalworker.h +19 -0
  259. data/ext/pg_query/include/replication/origin.h +73 -0
  260. data/ext/pg_query/include/replication/reorderbuffer.h +467 -0
  261. data/ext/pg_query/include/replication/slot.h +219 -0
  262. data/ext/pg_query/include/replication/syncrep.h +115 -0
  263. data/ext/pg_query/include/replication/walreceiver.h +340 -0
  264. data/ext/pg_query/include/replication/walsender.h +74 -0
  265. data/ext/pg_query/include/rewrite/prs2lock.h +46 -0
  266. data/ext/pg_query/include/rewrite/rewriteHandler.h +40 -0
  267. data/ext/pg_query/include/rewrite/rewriteManip.h +87 -0
  268. data/ext/pg_query/include/rewrite/rewriteSupport.h +26 -0
  269. data/ext/pg_query/include/storage/backendid.h +37 -0
  270. data/ext/pg_query/include/storage/block.h +121 -0
  271. data/ext/pg_query/include/storage/buf.h +46 -0
  272. data/ext/pg_query/include/storage/bufmgr.h +292 -0
  273. data/ext/pg_query/include/storage/bufpage.h +459 -0
  274. data/ext/pg_query/include/storage/condition_variable.h +62 -0
  275. data/ext/pg_query/include/storage/dsm.h +61 -0
  276. data/ext/pg_query/include/storage/dsm_impl.h +75 -0
  277. data/ext/pg_query/include/storage/fd.h +168 -0
  278. data/ext/pg_query/include/storage/ipc.h +81 -0
  279. data/ext/pg_query/include/storage/item.h +19 -0
  280. data/ext/pg_query/include/storage/itemid.h +184 -0
  281. data/ext/pg_query/include/storage/itemptr.h +206 -0
  282. data/ext/pg_query/include/storage/large_object.h +100 -0
  283. data/ext/pg_query/include/storage/latch.h +190 -0
  284. data/ext/pg_query/include/storage/lmgr.h +114 -0
  285. data/ext/pg_query/include/storage/lock.h +612 -0
  286. data/ext/pg_query/include/storage/lockdefs.h +59 -0
  287. data/ext/pg_query/include/storage/lwlock.h +232 -0
  288. data/ext/pg_query/include/storage/lwlocknames.h +51 -0
  289. data/ext/pg_query/include/storage/off.h +57 -0
  290. data/ext/pg_query/include/storage/pg_sema.h +61 -0
  291. data/ext/pg_query/include/storage/pg_shmem.h +90 -0
  292. data/ext/pg_query/include/storage/pmsignal.h +94 -0
  293. data/ext/pg_query/include/storage/predicate.h +87 -0
  294. data/ext/pg_query/include/storage/proc.h +333 -0
  295. data/ext/pg_query/include/storage/proclist_types.h +51 -0
  296. data/ext/pg_query/include/storage/procsignal.h +75 -0
  297. data/ext/pg_query/include/storage/relfilenode.h +99 -0
  298. data/ext/pg_query/include/storage/s_lock.h +1047 -0
  299. data/ext/pg_query/include/storage/sharedfileset.h +45 -0
  300. data/ext/pg_query/include/storage/shm_mq.h +85 -0
  301. data/ext/pg_query/include/storage/shm_toc.h +58 -0
  302. data/ext/pg_query/include/storage/shmem.h +81 -0
  303. data/ext/pg_query/include/storage/sinval.h +153 -0
  304. data/ext/pg_query/include/storage/sinvaladt.h +43 -0
  305. data/ext/pg_query/include/storage/smgr.h +109 -0
  306. data/ext/pg_query/include/storage/spin.h +77 -0
  307. data/ext/pg_query/include/storage/standby.h +91 -0
  308. data/ext/pg_query/include/storage/standbydefs.h +74 -0
  309. data/ext/pg_query/include/storage/sync.h +62 -0
  310. data/ext/pg_query/include/tcop/cmdtag.h +58 -0
  311. data/ext/pg_query/include/tcop/cmdtaglist.h +217 -0
  312. data/ext/pg_query/include/tcop/deparse_utility.h +108 -0
  313. data/ext/pg_query/include/tcop/dest.h +149 -0
  314. data/ext/pg_query/include/tcop/fastpath.h +21 -0
  315. data/ext/pg_query/include/tcop/pquery.h +45 -0
  316. data/ext/pg_query/include/tcop/tcopprot.h +89 -0
  317. data/ext/pg_query/include/tcop/utility.h +108 -0
  318. data/ext/pg_query/include/tsearch/ts_cache.h +98 -0
  319. data/ext/pg_query/include/utils/acl.h +312 -0
  320. data/ext/pg_query/include/utils/aclchk_internal.h +45 -0
  321. data/ext/pg_query/include/utils/array.h +458 -0
  322. data/ext/pg_query/include/utils/builtins.h +127 -0
  323. data/ext/pg_query/include/utils/bytea.h +27 -0
  324. data/ext/pg_query/include/utils/catcache.h +231 -0
  325. data/ext/pg_query/include/utils/date.h +90 -0
  326. data/ext/pg_query/include/utils/datetime.h +343 -0
  327. data/ext/pg_query/include/utils/datum.h +68 -0
  328. data/ext/pg_query/include/utils/dsa.h +123 -0
  329. data/ext/pg_query/include/utils/dynahash.h +19 -0
  330. data/ext/pg_query/include/utils/elog.h +439 -0
  331. data/ext/pg_query/include/utils/errcodes.h +352 -0
  332. data/ext/pg_query/include/utils/expandeddatum.h +159 -0
  333. data/ext/pg_query/include/utils/expandedrecord.h +231 -0
  334. data/ext/pg_query/include/utils/float.h +356 -0
  335. data/ext/pg_query/include/utils/fmgroids.h +2657 -0
  336. data/ext/pg_query/include/utils/fmgrprotos.h +2646 -0
  337. data/ext/pg_query/include/utils/fmgrtab.h +48 -0
  338. data/ext/pg_query/include/utils/guc.h +443 -0
  339. data/ext/pg_query/include/utils/guc_tables.h +272 -0
  340. data/ext/pg_query/include/utils/hsearch.h +149 -0
  341. data/ext/pg_query/include/utils/inval.h +64 -0
  342. data/ext/pg_query/include/utils/lsyscache.h +197 -0
  343. data/ext/pg_query/include/utils/memdebug.h +82 -0
  344. data/ext/pg_query/include/utils/memutils.h +225 -0
  345. data/ext/pg_query/include/utils/numeric.h +76 -0
  346. data/ext/pg_query/include/utils/palloc.h +136 -0
  347. data/ext/pg_query/include/utils/partcache.h +102 -0
  348. data/ext/pg_query/include/utils/pg_locale.h +119 -0
  349. data/ext/pg_query/include/utils/pg_lsn.h +29 -0
  350. data/ext/pg_query/include/utils/pidfile.h +56 -0
  351. data/ext/pg_query/include/utils/plancache.h +235 -0
  352. data/ext/pg_query/include/utils/portal.h +241 -0
  353. data/ext/pg_query/include/utils/probes.h +114 -0
  354. data/ext/pg_query/include/utils/ps_status.h +25 -0
  355. data/ext/pg_query/include/utils/queryenvironment.h +74 -0
  356. data/ext/pg_query/include/utils/regproc.h +28 -0
  357. data/ext/pg_query/include/utils/rel.h +644 -0
  358. data/ext/pg_query/include/utils/relcache.h +151 -0
  359. data/ext/pg_query/include/utils/reltrigger.h +81 -0
  360. data/ext/pg_query/include/utils/resowner.h +86 -0
  361. data/ext/pg_query/include/utils/rls.h +50 -0
  362. data/ext/pg_query/include/utils/ruleutils.h +44 -0
  363. data/ext/pg_query/include/utils/sharedtuplestore.h +61 -0
  364. data/ext/pg_query/include/utils/snapmgr.h +158 -0
  365. data/ext/pg_query/include/utils/snapshot.h +206 -0
  366. data/ext/pg_query/include/utils/sortsupport.h +276 -0
  367. data/ext/pg_query/include/utils/syscache.h +219 -0
  368. data/ext/pg_query/include/utils/timeout.h +88 -0
  369. data/ext/pg_query/include/utils/timestamp.h +116 -0
  370. data/ext/pg_query/include/utils/tuplesort.h +277 -0
  371. data/ext/pg_query/include/utils/tuplestore.h +91 -0
  372. data/ext/pg_query/include/utils/typcache.h +202 -0
  373. data/ext/pg_query/include/utils/tzparser.h +39 -0
  374. data/ext/pg_query/include/utils/varlena.h +39 -0
  375. data/ext/pg_query/include/utils/xml.h +84 -0
  376. data/ext/pg_query/include/xxhash.h +5445 -0
  377. data/ext/pg_query/include/xxhash/xxhash.h +5445 -0
  378. data/ext/pg_query/pg_query.c +104 -0
  379. data/ext/pg_query/pg_query.pb-c.c +37628 -0
  380. data/ext/pg_query/pg_query_deparse.c +9959 -0
  381. data/ext/pg_query/pg_query_fingerprint.c +295 -0
  382. data/ext/pg_query/pg_query_fingerprint.h +8 -0
  383. data/ext/pg_query/pg_query_internal.h +24 -0
  384. data/ext/pg_query/pg_query_json_plpgsql.c +738 -0
  385. data/ext/pg_query/pg_query_json_plpgsql.h +9 -0
  386. data/ext/pg_query/pg_query_normalize.c +439 -0
  387. data/ext/pg_query/pg_query_outfuncs.h +10 -0
  388. data/ext/pg_query/pg_query_outfuncs_json.c +297 -0
  389. data/ext/pg_query/pg_query_outfuncs_protobuf.c +237 -0
  390. data/ext/pg_query/pg_query_parse.c +148 -0
  391. data/ext/pg_query/pg_query_parse_plpgsql.c +460 -0
  392. data/ext/pg_query/pg_query_readfuncs.h +11 -0
  393. data/ext/pg_query/pg_query_readfuncs_protobuf.c +142 -0
  394. data/ext/pg_query/pg_query_ruby.c +108 -12
  395. data/ext/pg_query/pg_query_scan.c +173 -0
  396. data/ext/pg_query/pg_query_split.c +221 -0
  397. data/ext/pg_query/protobuf-c.c +3660 -0
  398. data/ext/pg_query/src_backend_catalog_namespace.c +1051 -0
  399. data/ext/pg_query/src_backend_catalog_pg_proc.c +142 -0
  400. data/ext/pg_query/src_backend_commands_define.c +117 -0
  401. data/ext/pg_query/src_backend_libpq_pqcomm.c +651 -0
  402. data/ext/pg_query/src_backend_nodes_bitmapset.c +513 -0
  403. data/ext/pg_query/src_backend_nodes_copyfuncs.c +6013 -0
  404. data/ext/pg_query/src_backend_nodes_equalfuncs.c +4003 -0
  405. data/ext/pg_query/src_backend_nodes_extensible.c +99 -0
  406. data/ext/pg_query/src_backend_nodes_list.c +922 -0
  407. data/ext/pg_query/src_backend_nodes_makefuncs.c +417 -0
  408. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +1363 -0
  409. data/ext/pg_query/src_backend_nodes_value.c +84 -0
  410. data/ext/pg_query/src_backend_parser_gram.c +47456 -0
  411. data/ext/pg_query/src_backend_parser_parse_expr.c +313 -0
  412. data/ext/pg_query/src_backend_parser_parser.c +497 -0
  413. data/ext/pg_query/src_backend_parser_scan.c +7091 -0
  414. data/ext/pg_query/src_backend_parser_scansup.c +160 -0
  415. data/ext/pg_query/src_backend_postmaster_postmaster.c +2230 -0
  416. data/ext/pg_query/src_backend_storage_ipc_ipc.c +192 -0
  417. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +370 -0
  418. data/ext/pg_query/src_backend_tcop_postgres.c +776 -0
  419. data/ext/pg_query/src_backend_utils_adt_datum.c +326 -0
  420. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +98 -0
  421. data/ext/pg_query/src_backend_utils_adt_format_type.c +136 -0
  422. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +1683 -0
  423. data/ext/pg_query/src_backend_utils_error_assert.c +74 -0
  424. data/ext/pg_query/src_backend_utils_error_elog.c +1748 -0
  425. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +570 -0
  426. data/ext/pg_query/src_backend_utils_hash_dynahash.c +1086 -0
  427. data/ext/pg_query/src_backend_utils_init_globals.c +168 -0
  428. data/ext/pg_query/src_backend_utils_mb_mbutils.c +839 -0
  429. data/ext/pg_query/src_backend_utils_misc_guc.c +1831 -0
  430. data/ext/pg_query/src_backend_utils_mmgr_aset.c +1560 -0
  431. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +1006 -0
  432. data/ext/pg_query/src_common_encnames.c +158 -0
  433. data/ext/pg_query/src_common_keywords.c +39 -0
  434. data/ext/pg_query/src_common_kwlist_d.h +1081 -0
  435. data/ext/pg_query/src_common_kwlookup.c +91 -0
  436. data/ext/pg_query/src_common_psprintf.c +158 -0
  437. data/ext/pg_query/src_common_string.c +86 -0
  438. data/ext/pg_query/src_common_stringinfo.c +336 -0
  439. data/ext/pg_query/src_common_wchar.c +1651 -0
  440. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +1133 -0
  441. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +877 -0
  442. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +6533 -0
  443. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +107 -0
  444. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +123 -0
  445. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +671 -0
  446. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +255 -0
  447. data/ext/pg_query/src_port_erand48.c +127 -0
  448. data/ext/pg_query/src_port_pg_bitutils.c +246 -0
  449. data/ext/pg_query/src_port_pgsleep.c +69 -0
  450. data/ext/pg_query/src_port_pgstrcasecmp.c +83 -0
  451. data/ext/pg_query/src_port_qsort.c +240 -0
  452. data/ext/pg_query/src_port_random.c +31 -0
  453. data/ext/pg_query/src_port_snprintf.c +1449 -0
  454. data/ext/pg_query/src_port_strerror.c +324 -0
  455. data/ext/pg_query/src_port_strnlen.c +39 -0
  456. data/ext/pg_query/xxhash.c +43 -0
  457. data/lib/pg_query.rb +7 -4
  458. data/lib/pg_query/constants.rb +21 -0
  459. data/lib/pg_query/deparse.rb +15 -1581
  460. data/lib/pg_query/filter_columns.rb +88 -85
  461. data/lib/pg_query/fingerprint.rb +122 -87
  462. data/lib/pg_query/json_field_names.rb +1402 -0
  463. data/lib/pg_query/node.rb +31 -0
  464. data/lib/pg_query/param_refs.rb +42 -37
  465. data/lib/pg_query/parse.rb +220 -203
  466. data/lib/pg_query/parse_error.rb +1 -1
  467. data/lib/pg_query/pg_query_pb.rb +3211 -0
  468. data/lib/pg_query/scan.rb +23 -0
  469. data/lib/pg_query/treewalker.rb +24 -40
  470. data/lib/pg_query/truncate.rb +71 -42
  471. data/lib/pg_query/version.rb +2 -2
  472. metadata +472 -11
  473. data/ext/pg_query/pg_query_ruby.h +0 -10
  474. data/lib/pg_query/deep_dup.rb +0 -16
  475. data/lib/pg_query/deparse/alter_table.rb +0 -42
  476. data/lib/pg_query/deparse/interval.rb +0 -105
  477. data/lib/pg_query/deparse/keywords.rb +0 -159
  478. data/lib/pg_query/deparse/rename.rb +0 -41
  479. data/lib/pg_query/legacy_parsetree.rb +0 -109
  480. data/lib/pg_query/node_types.rb +0 -296
@@ -0,0 +1,19 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * item.h
4
+ * POSTGRES disk item definitions.
5
+ *
6
+ *
7
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
8
+ * Portions Copyright (c) 1994, Regents of the University of California
9
+ *
10
+ * src/include/storage/item.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef ITEM_H
15
+ #define ITEM_H
16
+
17
+ typedef Pointer Item;
18
+
19
+ #endif /* ITEM_H */
@@ -0,0 +1,184 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * itemid.h
4
+ * Standard POSTGRES buffer page item identifier/line pointer definitions.
5
+ *
6
+ *
7
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
8
+ * Portions Copyright (c) 1994, Regents of the University of California
9
+ *
10
+ * src/include/storage/itemid.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef ITEMID_H
15
+ #define ITEMID_H
16
+
17
+ /*
18
+ * A line pointer on a buffer page. See buffer page definitions and comments
19
+ * for an explanation of how line pointers are used.
20
+ *
21
+ * In some cases a line pointer is "in use" but does not have any associated
22
+ * storage on the page. By convention, lp_len == 0 in every line pointer
23
+ * that does not have storage, independently of its lp_flags state.
24
+ */
25
+ typedef struct ItemIdData
26
+ {
27
+ unsigned lp_off:15, /* offset to tuple (from start of page) */
28
+ lp_flags:2, /* state of line pointer, see below */
29
+ lp_len:15; /* byte length of tuple */
30
+ } ItemIdData;
31
+
32
+ typedef ItemIdData *ItemId;
33
+
34
+ /*
35
+ * lp_flags has these possible states. An UNUSED line pointer is available
36
+ * for immediate re-use, the other states are not.
37
+ */
38
+ #define LP_UNUSED 0 /* unused (should always have lp_len=0) */
39
+ #define LP_NORMAL 1 /* used (should always have lp_len>0) */
40
+ #define LP_REDIRECT 2 /* HOT redirect (should have lp_len=0) */
41
+ #define LP_DEAD 3 /* dead, may or may not have storage */
42
+
43
+ /*
44
+ * Item offsets and lengths are represented by these types when
45
+ * they're not actually stored in an ItemIdData.
46
+ */
47
+ typedef uint16 ItemOffset;
48
+ typedef uint16 ItemLength;
49
+
50
+
51
+ /* ----------------
52
+ * support macros
53
+ * ----------------
54
+ */
55
+
56
+ /*
57
+ * ItemIdGetLength
58
+ */
59
+ #define ItemIdGetLength(itemId) \
60
+ ((itemId)->lp_len)
61
+
62
+ /*
63
+ * ItemIdGetOffset
64
+ */
65
+ #define ItemIdGetOffset(itemId) \
66
+ ((itemId)->lp_off)
67
+
68
+ /*
69
+ * ItemIdGetFlags
70
+ */
71
+ #define ItemIdGetFlags(itemId) \
72
+ ((itemId)->lp_flags)
73
+
74
+ /*
75
+ * ItemIdGetRedirect
76
+ * In a REDIRECT pointer, lp_off holds offset number for next line pointer
77
+ */
78
+ #define ItemIdGetRedirect(itemId) \
79
+ ((itemId)->lp_off)
80
+
81
+ /*
82
+ * ItemIdIsValid
83
+ * True iff item identifier is valid.
84
+ * This is a pretty weak test, probably useful only in Asserts.
85
+ */
86
+ #define ItemIdIsValid(itemId) PointerIsValid(itemId)
87
+
88
+ /*
89
+ * ItemIdIsUsed
90
+ * True iff item identifier is in use.
91
+ */
92
+ #define ItemIdIsUsed(itemId) \
93
+ ((itemId)->lp_flags != LP_UNUSED)
94
+
95
+ /*
96
+ * ItemIdIsNormal
97
+ * True iff item identifier is in state NORMAL.
98
+ */
99
+ #define ItemIdIsNormal(itemId) \
100
+ ((itemId)->lp_flags == LP_NORMAL)
101
+
102
+ /*
103
+ * ItemIdIsRedirected
104
+ * True iff item identifier is in state REDIRECT.
105
+ */
106
+ #define ItemIdIsRedirected(itemId) \
107
+ ((itemId)->lp_flags == LP_REDIRECT)
108
+
109
+ /*
110
+ * ItemIdIsDead
111
+ * True iff item identifier is in state DEAD.
112
+ */
113
+ #define ItemIdIsDead(itemId) \
114
+ ((itemId)->lp_flags == LP_DEAD)
115
+
116
+ /*
117
+ * ItemIdHasStorage
118
+ * True iff item identifier has associated storage.
119
+ */
120
+ #define ItemIdHasStorage(itemId) \
121
+ ((itemId)->lp_len != 0)
122
+
123
+ /*
124
+ * ItemIdSetUnused
125
+ * Set the item identifier to be UNUSED, with no storage.
126
+ * Beware of multiple evaluations of itemId!
127
+ */
128
+ #define ItemIdSetUnused(itemId) \
129
+ ( \
130
+ (itemId)->lp_flags = LP_UNUSED, \
131
+ (itemId)->lp_off = 0, \
132
+ (itemId)->lp_len = 0 \
133
+ )
134
+
135
+ /*
136
+ * ItemIdSetNormal
137
+ * Set the item identifier to be NORMAL, with the specified storage.
138
+ * Beware of multiple evaluations of itemId!
139
+ */
140
+ #define ItemIdSetNormal(itemId, off, len) \
141
+ ( \
142
+ (itemId)->lp_flags = LP_NORMAL, \
143
+ (itemId)->lp_off = (off), \
144
+ (itemId)->lp_len = (len) \
145
+ )
146
+
147
+ /*
148
+ * ItemIdSetRedirect
149
+ * Set the item identifier to be REDIRECT, with the specified link.
150
+ * Beware of multiple evaluations of itemId!
151
+ */
152
+ #define ItemIdSetRedirect(itemId, link) \
153
+ ( \
154
+ (itemId)->lp_flags = LP_REDIRECT, \
155
+ (itemId)->lp_off = (link), \
156
+ (itemId)->lp_len = 0 \
157
+ )
158
+
159
+ /*
160
+ * ItemIdSetDead
161
+ * Set the item identifier to be DEAD, with no storage.
162
+ * Beware of multiple evaluations of itemId!
163
+ */
164
+ #define ItemIdSetDead(itemId) \
165
+ ( \
166
+ (itemId)->lp_flags = LP_DEAD, \
167
+ (itemId)->lp_off = 0, \
168
+ (itemId)->lp_len = 0 \
169
+ )
170
+
171
+ /*
172
+ * ItemIdMarkDead
173
+ * Set the item identifier to be DEAD, keeping its existing storage.
174
+ *
175
+ * Note: in indexes, this is used as if it were a hint-bit mechanism;
176
+ * we trust that multiple processors can do this in parallel and get
177
+ * the same result.
178
+ */
179
+ #define ItemIdMarkDead(itemId) \
180
+ ( \
181
+ (itemId)->lp_flags = LP_DEAD \
182
+ )
183
+
184
+ #endif /* ITEMID_H */
@@ -0,0 +1,206 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * itemptr.h
4
+ * POSTGRES disk item pointer definitions.
5
+ *
6
+ *
7
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
8
+ * Portions Copyright (c) 1994, Regents of the University of California
9
+ *
10
+ * src/include/storage/itemptr.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef ITEMPTR_H
15
+ #define ITEMPTR_H
16
+
17
+ #include "storage/block.h"
18
+ #include "storage/off.h"
19
+
20
+ /*
21
+ * ItemPointer:
22
+ *
23
+ * This is a pointer to an item within a disk page of a known file
24
+ * (for example, a cross-link from an index to its parent table).
25
+ * ip_blkid tells us which block, ip_posid tells us which entry in
26
+ * the linp (ItemIdData) array we want.
27
+ *
28
+ * Note: because there is an item pointer in each tuple header and index
29
+ * tuple header on disk, it's very important not to waste space with
30
+ * structure padding bytes. The struct is designed to be six bytes long
31
+ * (it contains three int16 fields) but a few compilers will pad it to
32
+ * eight bytes unless coerced. We apply appropriate persuasion where
33
+ * possible. If your compiler can't be made to play along, you'll waste
34
+ * lots of space.
35
+ */
36
+ typedef struct ItemPointerData
37
+ {
38
+ BlockIdData ip_blkid;
39
+ OffsetNumber ip_posid;
40
+ }
41
+
42
+ /* If compiler understands packed and aligned pragmas, use those */
43
+ #if defined(pg_attribute_packed) && defined(pg_attribute_aligned)
44
+ pg_attribute_packed()
45
+ pg_attribute_aligned(2)
46
+ #endif
47
+ ItemPointerData;
48
+
49
+ typedef ItemPointerData *ItemPointer;
50
+
51
+ /* ----------------
52
+ * special values used in heap tuples (t_ctid)
53
+ * ----------------
54
+ */
55
+
56
+ /*
57
+ * If a heap tuple holds a speculative insertion token rather than a real
58
+ * TID, ip_posid is set to SpecTokenOffsetNumber, and the token is stored in
59
+ * ip_blkid. SpecTokenOffsetNumber must be higher than MaxOffsetNumber, so
60
+ * that it can be distinguished from a valid offset number in a regular item
61
+ * pointer.
62
+ */
63
+ #define SpecTokenOffsetNumber 0xfffe
64
+
65
+ /*
66
+ * When a tuple is moved to a different partition by UPDATE, the t_ctid of
67
+ * the old tuple version is set to this magic value.
68
+ */
69
+ #define MovedPartitionsOffsetNumber 0xfffd
70
+ #define MovedPartitionsBlockNumber InvalidBlockNumber
71
+
72
+
73
+ /* ----------------
74
+ * support macros
75
+ * ----------------
76
+ */
77
+
78
+ /*
79
+ * ItemPointerIsValid
80
+ * True iff the disk item pointer is not NULL.
81
+ */
82
+ #define ItemPointerIsValid(pointer) \
83
+ ((bool) (PointerIsValid(pointer) && ((pointer)->ip_posid != 0)))
84
+
85
+ /*
86
+ * ItemPointerGetBlockNumberNoCheck
87
+ * Returns the block number of a disk item pointer.
88
+ */
89
+ #define ItemPointerGetBlockNumberNoCheck(pointer) \
90
+ ( \
91
+ BlockIdGetBlockNumber(&(pointer)->ip_blkid) \
92
+ )
93
+
94
+ /*
95
+ * ItemPointerGetBlockNumber
96
+ * As above, but verifies that the item pointer looks valid.
97
+ */
98
+ #define ItemPointerGetBlockNumber(pointer) \
99
+ ( \
100
+ AssertMacro(ItemPointerIsValid(pointer)), \
101
+ ItemPointerGetBlockNumberNoCheck(pointer) \
102
+ )
103
+
104
+ /*
105
+ * ItemPointerGetOffsetNumberNoCheck
106
+ * Returns the offset number of a disk item pointer.
107
+ */
108
+ #define ItemPointerGetOffsetNumberNoCheck(pointer) \
109
+ ( \
110
+ (pointer)->ip_posid \
111
+ )
112
+
113
+ /*
114
+ * ItemPointerGetOffsetNumber
115
+ * As above, but verifies that the item pointer looks valid.
116
+ */
117
+ #define ItemPointerGetOffsetNumber(pointer) \
118
+ ( \
119
+ AssertMacro(ItemPointerIsValid(pointer)), \
120
+ ItemPointerGetOffsetNumberNoCheck(pointer) \
121
+ )
122
+
123
+ /*
124
+ * ItemPointerSet
125
+ * Sets a disk item pointer to the specified block and offset.
126
+ */
127
+ #define ItemPointerSet(pointer, blockNumber, offNum) \
128
+ ( \
129
+ AssertMacro(PointerIsValid(pointer)), \
130
+ BlockIdSet(&((pointer)->ip_blkid), blockNumber), \
131
+ (pointer)->ip_posid = offNum \
132
+ )
133
+
134
+ /*
135
+ * ItemPointerSetBlockNumber
136
+ * Sets a disk item pointer to the specified block.
137
+ */
138
+ #define ItemPointerSetBlockNumber(pointer, blockNumber) \
139
+ ( \
140
+ AssertMacro(PointerIsValid(pointer)), \
141
+ BlockIdSet(&((pointer)->ip_blkid), blockNumber) \
142
+ )
143
+
144
+ /*
145
+ * ItemPointerSetOffsetNumber
146
+ * Sets a disk item pointer to the specified offset.
147
+ */
148
+ #define ItemPointerSetOffsetNumber(pointer, offsetNumber) \
149
+ ( \
150
+ AssertMacro(PointerIsValid(pointer)), \
151
+ (pointer)->ip_posid = (offsetNumber) \
152
+ )
153
+
154
+ /*
155
+ * ItemPointerCopy
156
+ * Copies the contents of one disk item pointer to another.
157
+ *
158
+ * Should there ever be padding in an ItemPointer this would need to be handled
159
+ * differently as it's used as hash key.
160
+ */
161
+ #define ItemPointerCopy(fromPointer, toPointer) \
162
+ ( \
163
+ AssertMacro(PointerIsValid(toPointer)), \
164
+ AssertMacro(PointerIsValid(fromPointer)), \
165
+ *(toPointer) = *(fromPointer) \
166
+ )
167
+
168
+ /*
169
+ * ItemPointerSetInvalid
170
+ * Sets a disk item pointer to be invalid.
171
+ */
172
+ #define ItemPointerSetInvalid(pointer) \
173
+ ( \
174
+ AssertMacro(PointerIsValid(pointer)), \
175
+ BlockIdSet(&((pointer)->ip_blkid), InvalidBlockNumber), \
176
+ (pointer)->ip_posid = InvalidOffsetNumber \
177
+ )
178
+
179
+ /*
180
+ * ItemPointerIndicatesMovedPartitions
181
+ * True iff the block number indicates the tuple has moved to another
182
+ * partition.
183
+ */
184
+ #define ItemPointerIndicatesMovedPartitions(pointer) \
185
+ ( \
186
+ ItemPointerGetOffsetNumber(pointer) == MovedPartitionsOffsetNumber && \
187
+ ItemPointerGetBlockNumberNoCheck(pointer) == MovedPartitionsBlockNumber \
188
+ )
189
+
190
+ /*
191
+ * ItemPointerSetMovedPartitions
192
+ * Indicate that the item referenced by the itempointer has moved into a
193
+ * different partition.
194
+ */
195
+ #define ItemPointerSetMovedPartitions(pointer) \
196
+ ItemPointerSet((pointer), MovedPartitionsBlockNumber, MovedPartitionsOffsetNumber)
197
+
198
+ /* ----------------
199
+ * externs
200
+ * ----------------
201
+ */
202
+
203
+ extern bool ItemPointerEquals(ItemPointer pointer1, ItemPointer pointer2);
204
+ extern int32 ItemPointerCompare(ItemPointer arg1, ItemPointer arg2);
205
+
206
+ #endif /* ITEMPTR_H */
@@ -0,0 +1,100 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * large_object.h
4
+ * Declarations for PostgreSQL large objects. POSTGRES 4.2 supported
5
+ * zillions of large objects (internal, external, jaquith, inversion).
6
+ * Now we only support inversion.
7
+ *
8
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
9
+ * Portions Copyright (c) 1994, Regents of the University of California
10
+ *
11
+ * src/include/storage/large_object.h
12
+ *
13
+ *-------------------------------------------------------------------------
14
+ */
15
+ #ifndef LARGE_OBJECT_H
16
+ #define LARGE_OBJECT_H
17
+
18
+ #include "utils/snapshot.h"
19
+
20
+
21
+ /*----------
22
+ * Data about a currently-open large object.
23
+ *
24
+ * id is the logical OID of the large object
25
+ * snapshot is the snapshot to use for read/write operations
26
+ * subid is the subtransaction that opened the desc (or currently owns it)
27
+ * offset is the current seek offset within the LO
28
+ * flags contains some flag bits
29
+ *
30
+ * NOTE: as of v11, permission checks are made when the large object is
31
+ * opened; therefore IFS_RDLOCK/IFS_WRLOCK indicate that read or write mode
32
+ * has been requested *and* the corresponding permission has been checked.
33
+ *
34
+ * NOTE: before 7.1, we also had to store references to the separate table
35
+ * and index of a specific large object. Now they all live in pg_largeobject
36
+ * and are accessed via a common relation descriptor.
37
+ *----------
38
+ */
39
+ typedef struct LargeObjectDesc
40
+ {
41
+ Oid id; /* LO's identifier */
42
+ Snapshot snapshot; /* snapshot to use */
43
+ SubTransactionId subid; /* owning subtransaction ID */
44
+ uint64 offset; /* current seek pointer */
45
+ int flags; /* see flag bits below */
46
+
47
+ /* bits in flags: */
48
+ #define IFS_RDLOCK (1 << 0) /* LO was opened for reading */
49
+ #define IFS_WRLOCK (1 << 1) /* LO was opened for writing */
50
+
51
+ } LargeObjectDesc;
52
+
53
+
54
+ /*
55
+ * Each "page" (tuple) of a large object can hold this much data
56
+ *
57
+ * We could set this as high as BLCKSZ less some overhead, but it seems
58
+ * better to make it a smaller value, so that not as much space is used
59
+ * up when a page-tuple is updated. Note that the value is deliberately
60
+ * chosen large enough to trigger the tuple toaster, so that we will
61
+ * attempt to compress page tuples in-line. (But they won't be moved off
62
+ * unless the user creates a toast-table for pg_largeobject...)
63
+ *
64
+ * Also, it seems to be a smart move to make the page size be a power of 2,
65
+ * since clients will often be written to send data in power-of-2 blocks.
66
+ * This avoids unnecessary tuple updates caused by partial-page writes.
67
+ *
68
+ * NB: Changing LOBLKSIZE requires an initdb.
69
+ */
70
+ #define LOBLKSIZE (BLCKSZ / 4)
71
+
72
+ /*
73
+ * Maximum length in bytes for a large object. To make this larger, we'd
74
+ * have to widen pg_largeobject.pageno as well as various internal variables.
75
+ */
76
+ #define MAX_LARGE_OBJECT_SIZE ((int64) INT_MAX * LOBLKSIZE)
77
+
78
+
79
+ /*
80
+ * GUC: backwards-compatibility flag to suppress LO permission checks
81
+ */
82
+ extern bool lo_compat_privileges;
83
+
84
+ /*
85
+ * Function definitions...
86
+ */
87
+
88
+ /* inversion stuff in inv_api.c */
89
+ extern void close_lo_relation(bool isCommit);
90
+ extern Oid inv_create(Oid lobjId);
91
+ extern LargeObjectDesc *inv_open(Oid lobjId, int flags, MemoryContext mcxt);
92
+ extern void inv_close(LargeObjectDesc *obj_desc);
93
+ extern int inv_drop(Oid lobjId);
94
+ extern int64 inv_seek(LargeObjectDesc *obj_desc, int64 offset, int whence);
95
+ extern int64 inv_tell(LargeObjectDesc *obj_desc);
96
+ extern int inv_read(LargeObjectDesc *obj_desc, char *buf, int nbytes);
97
+ extern int inv_write(LargeObjectDesc *obj_desc, const char *buf, int nbytes);
98
+ extern void inv_truncate(LargeObjectDesc *obj_desc, int64 len);
99
+
100
+ #endif /* LARGE_OBJECT_H */