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,45 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * aclchk_internal.h
4
+ *
5
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
6
+ * Portions Copyright (c) 1994, Regents of the University of California
7
+ *
8
+ * src/include/utils/aclchk_internal.h
9
+ *
10
+ *-------------------------------------------------------------------------
11
+ */
12
+ #ifndef ACLCHK_INTERNAL_H
13
+ #define ACLCHK_INTERNAL_H
14
+
15
+ #include "nodes/parsenodes.h"
16
+ #include "nodes/pg_list.h"
17
+
18
+ /*
19
+ * The information about one Grant/Revoke statement, in internal format: object
20
+ * and grantees names have been turned into Oids, the privilege list is an
21
+ * AclMode bitmask. If 'privileges' is ACL_NO_RIGHTS (the 0 value) and
22
+ * all_privs is true, 'privileges' will be internally set to the right kind of
23
+ * ACL_ALL_RIGHTS_*, depending on the object type (NB - this will modify the
24
+ * InternalGrant struct!)
25
+ *
26
+ * Note: 'all_privs' and 'privileges' represent object-level privileges only.
27
+ * There might also be column-level privilege specifications, which are
28
+ * represented in col_privs (this is a list of untransformed AccessPriv nodes).
29
+ * Column privileges are only valid for objtype OBJECT_TABLE.
30
+ */
31
+ typedef struct
32
+ {
33
+ bool is_grant;
34
+ ObjectType objtype;
35
+ List *objects;
36
+ bool all_privs;
37
+ AclMode privileges;
38
+ List *col_privs;
39
+ List *grantees;
40
+ bool grant_option;
41
+ DropBehavior behavior;
42
+ } InternalGrant;
43
+
44
+
45
+ #endif /* ACLCHK_INTERNAL_H */
@@ -0,0 +1,458 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * array.h
4
+ * Declarations for Postgres arrays.
5
+ *
6
+ * A standard varlena array has the following internal structure:
7
+ * <vl_len_> - standard varlena header word
8
+ * <ndim> - number of dimensions of the array
9
+ * <dataoffset> - offset to stored data, or 0 if no nulls bitmap
10
+ * <elemtype> - element type OID
11
+ * <dimensions> - length of each array axis (C array of int)
12
+ * <lower bnds> - lower boundary of each dimension (C array of int)
13
+ * <null bitmap> - bitmap showing locations of nulls (OPTIONAL)
14
+ * <actual data> - whatever is the stored data
15
+ *
16
+ * The <dimensions> and <lower bnds> arrays each have ndim elements.
17
+ *
18
+ * The <null bitmap> may be omitted if the array contains no NULL elements.
19
+ * If it is absent, the <dataoffset> field is zero and the offset to the
20
+ * stored data must be computed on-the-fly. If the bitmap is present,
21
+ * <dataoffset> is nonzero and is equal to the offset from the array start
22
+ * to the first data element (including any alignment padding). The bitmap
23
+ * follows the same conventions as tuple null bitmaps, ie, a 1 indicates
24
+ * a non-null entry and the LSB of each bitmap byte is used first.
25
+ *
26
+ * The actual data starts on a MAXALIGN boundary. Individual items in the
27
+ * array are aligned as specified by the array element type. They are
28
+ * stored in row-major order (last subscript varies most rapidly).
29
+ *
30
+ * NOTE: it is important that array elements of toastable datatypes NOT be
31
+ * toasted, since the tupletoaster won't know they are there. (We could
32
+ * support compressed toasted items; only out-of-line items are dangerous.
33
+ * However, it seems preferable to store such items uncompressed and allow
34
+ * the toaster to compress the whole array as one input.)
35
+ *
36
+ *
37
+ * The OIDVECTOR and INT2VECTOR datatypes are storage-compatible with
38
+ * generic arrays, but they support only one-dimensional arrays with no
39
+ * nulls (and no null bitmap). They don't support being toasted, either.
40
+ *
41
+ * There are also some "fixed-length array" datatypes, such as NAME and
42
+ * POINT. These are simply a sequence of a fixed number of items each
43
+ * of a fixed-length datatype, with no overhead; the item size must be
44
+ * a multiple of its alignment requirement, because we do no padding.
45
+ * We support subscripting on these types, but array_in() and array_out()
46
+ * only work with varlena arrays.
47
+ *
48
+ * In addition, arrays are a major user of the "expanded object" TOAST
49
+ * infrastructure. This allows a varlena array to be converted to a
50
+ * separate representation that may include "deconstructed" Datum/isnull
51
+ * arrays holding the elements.
52
+ *
53
+ *
54
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
55
+ * Portions Copyright (c) 1994, Regents of the University of California
56
+ *
57
+ * src/include/utils/array.h
58
+ *
59
+ *-------------------------------------------------------------------------
60
+ */
61
+ #ifndef ARRAY_H
62
+ #define ARRAY_H
63
+
64
+ #include "fmgr.h"
65
+ #include "utils/expandeddatum.h"
66
+
67
+ /* avoid including execnodes.h here */
68
+ struct ExprState;
69
+ struct ExprContext;
70
+
71
+
72
+ /*
73
+ * Arrays are varlena objects, so must meet the varlena convention that
74
+ * the first int32 of the object contains the total object size in bytes.
75
+ * Be sure to use VARSIZE() and SET_VARSIZE() to access it, though!
76
+ *
77
+ * CAUTION: if you change the header for ordinary arrays you will also
78
+ * need to change the headers for oidvector and int2vector!
79
+ */
80
+ typedef struct ArrayType
81
+ {
82
+ int32 vl_len_; /* varlena header (do not touch directly!) */
83
+ int ndim; /* # of dimensions */
84
+ int32 dataoffset; /* offset to data, or 0 if no bitmap */
85
+ Oid elemtype; /* element type OID */
86
+ } ArrayType;
87
+
88
+ /*
89
+ * An expanded array is contained within a private memory context (as
90
+ * all expanded objects must be) and has a control structure as below.
91
+ *
92
+ * The expanded array might contain a regular "flat" array if that was the
93
+ * original input and we've not modified it significantly. Otherwise, the
94
+ * contents are represented by Datum/isnull arrays plus dimensionality and
95
+ * type information. We could also have both forms, if we've deconstructed
96
+ * the original array for access purposes but not yet changed it. For pass-
97
+ * by-reference element types, the Datums would point into the flat array in
98
+ * this situation. Once we start modifying array elements, new pass-by-ref
99
+ * elements are separately palloc'd within the memory context.
100
+ */
101
+ #define EA_MAGIC 689375833 /* ID for debugging crosschecks */
102
+
103
+ typedef struct ExpandedArrayHeader
104
+ {
105
+ /* Standard header for expanded objects */
106
+ ExpandedObjectHeader hdr;
107
+
108
+ /* Magic value identifying an expanded array (for debugging only) */
109
+ int ea_magic;
110
+
111
+ /* Dimensionality info (always valid) */
112
+ int ndims; /* # of dimensions */
113
+ int *dims; /* array dimensions */
114
+ int *lbound; /* index lower bounds for each dimension */
115
+
116
+ /* Element type info (always valid) */
117
+ Oid element_type; /* element type OID */
118
+ int16 typlen; /* needed info about element datatype */
119
+ bool typbyval;
120
+ char typalign;
121
+
122
+ /*
123
+ * If we have a Datum-array representation of the array, it's kept here;
124
+ * else dvalues/dnulls are NULL. The dvalues and dnulls arrays are always
125
+ * palloc'd within the object private context, but may change size from
126
+ * time to time. For pass-by-ref element types, dvalues entries might
127
+ * point either into the fstartptr..fendptr area, or to separately
128
+ * palloc'd chunks. Elements should always be fully detoasted, as they
129
+ * are in the standard flat representation.
130
+ *
131
+ * Even when dvalues is valid, dnulls can be NULL if there are no null
132
+ * elements.
133
+ */
134
+ Datum *dvalues; /* array of Datums */
135
+ bool *dnulls; /* array of is-null flags for Datums */
136
+ int dvalueslen; /* allocated length of above arrays */
137
+ int nelems; /* number of valid entries in above arrays */
138
+
139
+ /*
140
+ * flat_size is the current space requirement for the flat equivalent of
141
+ * the expanded array, if known; otherwise it's 0. We store this to make
142
+ * consecutive calls of get_flat_size cheap.
143
+ */
144
+ Size flat_size;
145
+
146
+ /*
147
+ * fvalue points to the flat representation if it is valid, else it is
148
+ * NULL. If we have or ever had a flat representation then
149
+ * fstartptr/fendptr point to the start and end+1 of its data area; this
150
+ * is so that we can tell which Datum pointers point into the flat
151
+ * representation rather than being pointers to separately palloc'd data.
152
+ */
153
+ ArrayType *fvalue; /* must be a fully detoasted array */
154
+ char *fstartptr; /* start of its data area */
155
+ char *fendptr; /* end+1 of its data area */
156
+ } ExpandedArrayHeader;
157
+
158
+ /*
159
+ * Functions that can handle either a "flat" varlena array or an expanded
160
+ * array use this union to work with their input. Don't refer to "flt";
161
+ * instead, cast to ArrayType. This struct nominally requires 8-byte
162
+ * alignment on 64-bit, but it's often used for an ArrayType having 4-byte
163
+ * alignment. UBSan complains about referencing "flt" in such cases.
164
+ */
165
+ typedef union AnyArrayType
166
+ {
167
+ ArrayType flt;
168
+ ExpandedArrayHeader xpn;
169
+ } AnyArrayType;
170
+
171
+ /*
172
+ * working state for accumArrayResult() and friends
173
+ * note that the input must be scalars (legal array elements)
174
+ */
175
+ typedef struct ArrayBuildState
176
+ {
177
+ MemoryContext mcontext; /* where all the temp stuff is kept */
178
+ Datum *dvalues; /* array of accumulated Datums */
179
+ bool *dnulls; /* array of is-null flags for Datums */
180
+ int alen; /* allocated length of above arrays */
181
+ int nelems; /* number of valid entries in above arrays */
182
+ Oid element_type; /* data type of the Datums */
183
+ int16 typlen; /* needed info about datatype */
184
+ bool typbyval;
185
+ char typalign;
186
+ bool private_cxt; /* use private memory context */
187
+ } ArrayBuildState;
188
+
189
+ /*
190
+ * working state for accumArrayResultArr() and friends
191
+ * note that the input must be arrays, and the same array type is returned
192
+ */
193
+ typedef struct ArrayBuildStateArr
194
+ {
195
+ MemoryContext mcontext; /* where all the temp stuff is kept */
196
+ char *data; /* accumulated data */
197
+ bits8 *nullbitmap; /* bitmap of is-null flags, or NULL if none */
198
+ int abytes; /* allocated length of "data" */
199
+ int nbytes; /* number of bytes used so far */
200
+ int aitems; /* allocated length of bitmap (in elements) */
201
+ int nitems; /* total number of elements in result */
202
+ int ndims; /* current dimensions of result */
203
+ int dims[MAXDIM];
204
+ int lbs[MAXDIM];
205
+ Oid array_type; /* data type of the arrays */
206
+ Oid element_type; /* data type of the array elements */
207
+ bool private_cxt; /* use private memory context */
208
+ } ArrayBuildStateArr;
209
+
210
+ /*
211
+ * working state for accumArrayResultAny() and friends
212
+ * these functions handle both cases
213
+ */
214
+ typedef struct ArrayBuildStateAny
215
+ {
216
+ /* Exactly one of these is not NULL: */
217
+ ArrayBuildState *scalarstate;
218
+ ArrayBuildStateArr *arraystate;
219
+ } ArrayBuildStateAny;
220
+
221
+ /*
222
+ * structure to cache type metadata needed for array manipulation
223
+ */
224
+ typedef struct ArrayMetaState
225
+ {
226
+ Oid element_type;
227
+ int16 typlen;
228
+ bool typbyval;
229
+ char typalign;
230
+ char typdelim;
231
+ Oid typioparam;
232
+ Oid typiofunc;
233
+ FmgrInfo proc;
234
+ } ArrayMetaState;
235
+
236
+ /*
237
+ * private state needed by array_map (here because caller must provide it)
238
+ */
239
+ typedef struct ArrayMapState
240
+ {
241
+ ArrayMetaState inp_extra;
242
+ ArrayMetaState ret_extra;
243
+ } ArrayMapState;
244
+
245
+ /* ArrayIteratorData is private in arrayfuncs.c */
246
+ typedef struct ArrayIteratorData *ArrayIterator;
247
+
248
+ /* fmgr macros for regular varlena array objects */
249
+ #define DatumGetArrayTypeP(X) ((ArrayType *) PG_DETOAST_DATUM(X))
250
+ #define DatumGetArrayTypePCopy(X) ((ArrayType *) PG_DETOAST_DATUM_COPY(X))
251
+ #define PG_GETARG_ARRAYTYPE_P(n) DatumGetArrayTypeP(PG_GETARG_DATUM(n))
252
+ #define PG_GETARG_ARRAYTYPE_P_COPY(n) DatumGetArrayTypePCopy(PG_GETARG_DATUM(n))
253
+ #define PG_RETURN_ARRAYTYPE_P(x) PG_RETURN_POINTER(x)
254
+
255
+ /* fmgr macros for expanded array objects */
256
+ #define PG_GETARG_EXPANDED_ARRAY(n) DatumGetExpandedArray(PG_GETARG_DATUM(n))
257
+ #define PG_GETARG_EXPANDED_ARRAYX(n, metacache) \
258
+ DatumGetExpandedArrayX(PG_GETARG_DATUM(n), metacache)
259
+ #define PG_RETURN_EXPANDED_ARRAY(x) PG_RETURN_DATUM(EOHPGetRWDatum(&(x)->hdr))
260
+
261
+ /* fmgr macros for AnyArrayType (ie, get either varlena or expanded form) */
262
+ #define PG_GETARG_ANY_ARRAY_P(n) DatumGetAnyArrayP(PG_GETARG_DATUM(n))
263
+
264
+ /*
265
+ * Access macros for varlena array header fields.
266
+ *
267
+ * ARR_DIMS returns a pointer to an array of array dimensions (number of
268
+ * elements along the various array axes).
269
+ *
270
+ * ARR_LBOUND returns a pointer to an array of array lower bounds.
271
+ *
272
+ * That is: if the third axis of an array has elements 5 through 8, then
273
+ * ARR_DIMS(a)[2] == 4 and ARR_LBOUND(a)[2] == 5.
274
+ *
275
+ * Unlike C, the default lower bound is 1.
276
+ */
277
+ #define ARR_SIZE(a) VARSIZE(a)
278
+ #define ARR_NDIM(a) ((a)->ndim)
279
+ #define ARR_HASNULL(a) ((a)->dataoffset != 0)
280
+ #define ARR_ELEMTYPE(a) ((a)->elemtype)
281
+
282
+ #define ARR_DIMS(a) \
283
+ ((int *) (((char *) (a)) + sizeof(ArrayType)))
284
+ #define ARR_LBOUND(a) \
285
+ ((int *) (((char *) (a)) + sizeof(ArrayType) + \
286
+ sizeof(int) * ARR_NDIM(a)))
287
+
288
+ #define ARR_NULLBITMAP(a) \
289
+ (ARR_HASNULL(a) ? \
290
+ (bits8 *) (((char *) (a)) + sizeof(ArrayType) + \
291
+ 2 * sizeof(int) * ARR_NDIM(a)) \
292
+ : (bits8 *) NULL)
293
+
294
+ /*
295
+ * The total array header size (in bytes) for an array with the specified
296
+ * number of dimensions and total number of items.
297
+ */
298
+ #define ARR_OVERHEAD_NONULLS(ndims) \
299
+ MAXALIGN(sizeof(ArrayType) + 2 * sizeof(int) * (ndims))
300
+ #define ARR_OVERHEAD_WITHNULLS(ndims, nitems) \
301
+ MAXALIGN(sizeof(ArrayType) + 2 * sizeof(int) * (ndims) + \
302
+ ((nitems) + 7) / 8)
303
+
304
+ #define ARR_DATA_OFFSET(a) \
305
+ (ARR_HASNULL(a) ? (a)->dataoffset : ARR_OVERHEAD_NONULLS(ARR_NDIM(a)))
306
+
307
+ /*
308
+ * Returns a pointer to the actual array data.
309
+ */
310
+ #define ARR_DATA_PTR(a) \
311
+ (((char *) (a)) + ARR_DATA_OFFSET(a))
312
+
313
+ /*
314
+ * Macros for working with AnyArrayType inputs. Beware multiple references!
315
+ */
316
+ #define AARR_NDIM(a) \
317
+ (VARATT_IS_EXPANDED_HEADER(a) ? \
318
+ (a)->xpn.ndims : ARR_NDIM((ArrayType *) (a)))
319
+ #define AARR_HASNULL(a) \
320
+ (VARATT_IS_EXPANDED_HEADER(a) ? \
321
+ ((a)->xpn.dvalues != NULL ? (a)->xpn.dnulls != NULL : ARR_HASNULL((a)->xpn.fvalue)) : \
322
+ ARR_HASNULL((ArrayType *) (a)))
323
+ #define AARR_ELEMTYPE(a) \
324
+ (VARATT_IS_EXPANDED_HEADER(a) ? \
325
+ (a)->xpn.element_type : ARR_ELEMTYPE((ArrayType *) (a)))
326
+ #define AARR_DIMS(a) \
327
+ (VARATT_IS_EXPANDED_HEADER(a) ? \
328
+ (a)->xpn.dims : ARR_DIMS((ArrayType *) (a)))
329
+ #define AARR_LBOUND(a) \
330
+ (VARATT_IS_EXPANDED_HEADER(a) ? \
331
+ (a)->xpn.lbound : ARR_LBOUND((ArrayType *) (a)))
332
+
333
+
334
+ /*
335
+ * GUC parameter
336
+ */
337
+ extern bool Array_nulls;
338
+
339
+ /*
340
+ * prototypes for functions defined in arrayfuncs.c
341
+ */
342
+ extern void CopyArrayEls(ArrayType *array,
343
+ Datum *values,
344
+ bool *nulls,
345
+ int nitems,
346
+ int typlen,
347
+ bool typbyval,
348
+ char typalign,
349
+ bool freedata);
350
+
351
+ extern Datum array_get_element(Datum arraydatum, int nSubscripts, int *indx,
352
+ int arraytyplen, int elmlen, bool elmbyval, char elmalign,
353
+ bool *isNull);
354
+ extern Datum array_set_element(Datum arraydatum, int nSubscripts, int *indx,
355
+ Datum dataValue, bool isNull,
356
+ int arraytyplen, int elmlen, bool elmbyval, char elmalign);
357
+ extern Datum array_get_slice(Datum arraydatum, int nSubscripts,
358
+ int *upperIndx, int *lowerIndx,
359
+ bool *upperProvided, bool *lowerProvided,
360
+ int arraytyplen, int elmlen, bool elmbyval, char elmalign);
361
+ extern Datum array_set_slice(Datum arraydatum, int nSubscripts,
362
+ int *upperIndx, int *lowerIndx,
363
+ bool *upperProvided, bool *lowerProvided,
364
+ Datum srcArrayDatum, bool isNull,
365
+ int arraytyplen, int elmlen, bool elmbyval, char elmalign);
366
+
367
+ extern Datum array_ref(ArrayType *array, int nSubscripts, int *indx,
368
+ int arraytyplen, int elmlen, bool elmbyval, char elmalign,
369
+ bool *isNull);
370
+ extern ArrayType *array_set(ArrayType *array, int nSubscripts, int *indx,
371
+ Datum dataValue, bool isNull,
372
+ int arraytyplen, int elmlen, bool elmbyval, char elmalign);
373
+
374
+ extern Datum array_map(Datum arrayd,
375
+ struct ExprState *exprstate, struct ExprContext *econtext,
376
+ Oid retType, ArrayMapState *amstate);
377
+
378
+ extern void array_bitmap_copy(bits8 *destbitmap, int destoffset,
379
+ const bits8 *srcbitmap, int srcoffset,
380
+ int nitems);
381
+
382
+ extern ArrayType *construct_array(Datum *elems, int nelems,
383
+ Oid elmtype,
384
+ int elmlen, bool elmbyval, char elmalign);
385
+ extern ArrayType *construct_md_array(Datum *elems,
386
+ bool *nulls,
387
+ int ndims,
388
+ int *dims,
389
+ int *lbs,
390
+ Oid elmtype, int elmlen, bool elmbyval, char elmalign);
391
+ extern ArrayType *construct_empty_array(Oid elmtype);
392
+ extern ExpandedArrayHeader *construct_empty_expanded_array(Oid element_type,
393
+ MemoryContext parentcontext,
394
+ ArrayMetaState *metacache);
395
+ extern void deconstruct_array(ArrayType *array,
396
+ Oid elmtype,
397
+ int elmlen, bool elmbyval, char elmalign,
398
+ Datum **elemsp, bool **nullsp, int *nelemsp);
399
+ extern bool array_contains_nulls(ArrayType *array);
400
+
401
+ extern ArrayBuildState *initArrayResult(Oid element_type,
402
+ MemoryContext rcontext, bool subcontext);
403
+ extern ArrayBuildState *accumArrayResult(ArrayBuildState *astate,
404
+ Datum dvalue, bool disnull,
405
+ Oid element_type,
406
+ MemoryContext rcontext);
407
+ extern Datum makeArrayResult(ArrayBuildState *astate,
408
+ MemoryContext rcontext);
409
+ extern Datum makeMdArrayResult(ArrayBuildState *astate, int ndims,
410
+ int *dims, int *lbs, MemoryContext rcontext, bool release);
411
+
412
+ extern ArrayBuildStateArr *initArrayResultArr(Oid array_type, Oid element_type,
413
+ MemoryContext rcontext, bool subcontext);
414
+ extern ArrayBuildStateArr *accumArrayResultArr(ArrayBuildStateArr *astate,
415
+ Datum dvalue, bool disnull,
416
+ Oid array_type,
417
+ MemoryContext rcontext);
418
+ extern Datum makeArrayResultArr(ArrayBuildStateArr *astate,
419
+ MemoryContext rcontext, bool release);
420
+
421
+ extern ArrayBuildStateAny *initArrayResultAny(Oid input_type,
422
+ MemoryContext rcontext, bool subcontext);
423
+ extern ArrayBuildStateAny *accumArrayResultAny(ArrayBuildStateAny *astate,
424
+ Datum dvalue, bool disnull,
425
+ Oid input_type,
426
+ MemoryContext rcontext);
427
+ extern Datum makeArrayResultAny(ArrayBuildStateAny *astate,
428
+ MemoryContext rcontext, bool release);
429
+
430
+ extern ArrayIterator array_create_iterator(ArrayType *arr, int slice_ndim, ArrayMetaState *mstate);
431
+ extern bool array_iterate(ArrayIterator iterator, Datum *value, bool *isnull);
432
+ extern void array_free_iterator(ArrayIterator iterator);
433
+
434
+ /*
435
+ * prototypes for functions defined in arrayutils.c
436
+ */
437
+
438
+ extern int ArrayGetOffset(int n, const int *dim, const int *lb, const int *indx);
439
+ extern int ArrayGetOffset0(int n, const int *tup, const int *scale);
440
+ extern int ArrayGetNItems(int ndim, const int *dims);
441
+ extern void mda_get_range(int n, int *span, const int *st, const int *endp);
442
+ extern void mda_get_prod(int n, const int *range, int *prod);
443
+ extern void mda_get_offset_values(int n, int *dist, const int *prod, const int *span);
444
+ extern int mda_next_tuple(int n, int *curr, const int *span);
445
+ extern int32 *ArrayGetIntegerTypmods(ArrayType *arr, int *n);
446
+
447
+ /*
448
+ * prototypes for functions defined in array_expanded.c
449
+ */
450
+ extern Datum expand_array(Datum arraydatum, MemoryContext parentcontext,
451
+ ArrayMetaState *metacache);
452
+ extern ExpandedArrayHeader *DatumGetExpandedArray(Datum d);
453
+ extern ExpandedArrayHeader *DatumGetExpandedArrayX(Datum d,
454
+ ArrayMetaState *metacache);
455
+ extern AnyArrayType *DatumGetAnyArrayP(Datum d);
456
+ extern void deconstruct_expanded_array(ExpandedArrayHeader *eah);
457
+
458
+ #endif /* ARRAY_H */