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,326 @@
1
+ /*--------------------------------------------------------------------
2
+ * Symbols referenced in this file:
3
+ * - datumCopy
4
+ * - datumGetSize
5
+ * - datumIsEqual
6
+ *--------------------------------------------------------------------
7
+ */
8
+
9
+ /*-------------------------------------------------------------------------
10
+ *
11
+ * datum.c
12
+ * POSTGRES Datum (abstract data type) manipulation routines.
13
+ *
14
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
15
+ * Portions Copyright (c) 1994, Regents of the University of California
16
+ *
17
+ *
18
+ * IDENTIFICATION
19
+ * src/backend/utils/adt/datum.c
20
+ *
21
+ *-------------------------------------------------------------------------
22
+ */
23
+
24
+ /*
25
+ * In the implementation of these routines we assume the following:
26
+ *
27
+ * A) if a type is "byVal" then all the information is stored in the
28
+ * Datum itself (i.e. no pointers involved!). In this case the
29
+ * length of the type is always greater than zero and not more than
30
+ * "sizeof(Datum)"
31
+ *
32
+ * B) if a type is not "byVal" and it has a fixed length (typlen > 0),
33
+ * then the "Datum" always contains a pointer to a stream of bytes.
34
+ * The number of significant bytes are always equal to the typlen.
35
+ *
36
+ * C) if a type is not "byVal" and has typlen == -1,
37
+ * then the "Datum" always points to a "struct varlena".
38
+ * This varlena structure has information about the actual length of this
39
+ * particular instance of the type and about its value.
40
+ *
41
+ * D) if a type is not "byVal" and has typlen == -2,
42
+ * then the "Datum" always points to a null-terminated C string.
43
+ *
44
+ * Note that we do not treat "toasted" datums specially; therefore what
45
+ * will be copied or compared is the compressed data or toast reference.
46
+ * An exception is made for datumCopy() of an expanded object, however,
47
+ * because most callers expect to get a simple contiguous (and pfree'able)
48
+ * result from datumCopy(). See also datumTransfer().
49
+ */
50
+
51
+ #include "postgres.h"
52
+
53
+ #include "access/detoast.h"
54
+ #include "fmgr.h"
55
+ #include "utils/builtins.h"
56
+ #include "utils/datum.h"
57
+ #include "utils/expandeddatum.h"
58
+
59
+
60
+ /*-------------------------------------------------------------------------
61
+ * datumGetSize
62
+ *
63
+ * Find the "real" size of a datum, given the datum value,
64
+ * whether it is a "by value", and the declared type length.
65
+ * (For TOAST pointer datums, this is the size of the pointer datum.)
66
+ *
67
+ * This is essentially an out-of-line version of the att_addlength_datum()
68
+ * macro in access/tupmacs.h. We do a tad more error checking though.
69
+ *-------------------------------------------------------------------------
70
+ */
71
+ Size
72
+ datumGetSize(Datum value, bool typByVal, int typLen)
73
+ {
74
+ Size size;
75
+
76
+ if (typByVal)
77
+ {
78
+ /* Pass-by-value types are always fixed-length */
79
+ Assert(typLen > 0 && typLen <= sizeof(Datum));
80
+ size = (Size) typLen;
81
+ }
82
+ else
83
+ {
84
+ if (typLen > 0)
85
+ {
86
+ /* Fixed-length pass-by-ref type */
87
+ size = (Size) typLen;
88
+ }
89
+ else if (typLen == -1)
90
+ {
91
+ /* It is a varlena datatype */
92
+ struct varlena *s = (struct varlena *) DatumGetPointer(value);
93
+
94
+ if (!PointerIsValid(s))
95
+ ereport(ERROR,
96
+ (errcode(ERRCODE_DATA_EXCEPTION),
97
+ errmsg("invalid Datum pointer")));
98
+
99
+ size = (Size) VARSIZE_ANY(s);
100
+ }
101
+ else if (typLen == -2)
102
+ {
103
+ /* It is a cstring datatype */
104
+ char *s = (char *) DatumGetPointer(value);
105
+
106
+ if (!PointerIsValid(s))
107
+ ereport(ERROR,
108
+ (errcode(ERRCODE_DATA_EXCEPTION),
109
+ errmsg("invalid Datum pointer")));
110
+
111
+ size = (Size) (strlen(s) + 1);
112
+ }
113
+ else
114
+ {
115
+ elog(ERROR, "invalid typLen: %d", typLen);
116
+ size = 0; /* keep compiler quiet */
117
+ }
118
+ }
119
+
120
+ return size;
121
+ }
122
+
123
+ /*-------------------------------------------------------------------------
124
+ * datumCopy
125
+ *
126
+ * Make a copy of a non-NULL datum.
127
+ *
128
+ * If the datatype is pass-by-reference, memory is obtained with palloc().
129
+ *
130
+ * If the value is a reference to an expanded object, we flatten into memory
131
+ * obtained with palloc(). We need to copy because one of the main uses of
132
+ * this function is to copy a datum out of a transient memory context that's
133
+ * about to be destroyed, and the expanded object is probably in a child
134
+ * context that will also go away. Moreover, many callers assume that the
135
+ * result is a single pfree-able chunk.
136
+ *-------------------------------------------------------------------------
137
+ */
138
+ Datum
139
+ datumCopy(Datum value, bool typByVal, int typLen)
140
+ {
141
+ Datum res;
142
+
143
+ if (typByVal)
144
+ res = value;
145
+ else if (typLen == -1)
146
+ {
147
+ /* It is a varlena datatype */
148
+ struct varlena *vl = (struct varlena *) DatumGetPointer(value);
149
+
150
+ if (VARATT_IS_EXTERNAL_EXPANDED(vl))
151
+ {
152
+ /* Flatten into the caller's memory context */
153
+ ExpandedObjectHeader *eoh = DatumGetEOHP(value);
154
+ Size resultsize;
155
+ char *resultptr;
156
+
157
+ resultsize = EOH_get_flat_size(eoh);
158
+ resultptr = (char *) palloc(resultsize);
159
+ EOH_flatten_into(eoh, (void *) resultptr, resultsize);
160
+ res = PointerGetDatum(resultptr);
161
+ }
162
+ else
163
+ {
164
+ /* Otherwise, just copy the varlena datum verbatim */
165
+ Size realSize;
166
+ char *resultptr;
167
+
168
+ realSize = (Size) VARSIZE_ANY(vl);
169
+ resultptr = (char *) palloc(realSize);
170
+ memcpy(resultptr, vl, realSize);
171
+ res = PointerGetDatum(resultptr);
172
+ }
173
+ }
174
+ else
175
+ {
176
+ /* Pass by reference, but not varlena, so not toasted */
177
+ Size realSize;
178
+ char *resultptr;
179
+
180
+ realSize = datumGetSize(value, typByVal, typLen);
181
+
182
+ resultptr = (char *) palloc(realSize);
183
+ memcpy(resultptr, DatumGetPointer(value), realSize);
184
+ res = PointerGetDatum(resultptr);
185
+ }
186
+ return res;
187
+ }
188
+
189
+ /*-------------------------------------------------------------------------
190
+ * datumTransfer
191
+ *
192
+ * Transfer a non-NULL datum into the current memory context.
193
+ *
194
+ * This is equivalent to datumCopy() except when the datum is a read-write
195
+ * pointer to an expanded object. In that case we merely reparent the object
196
+ * into the current context, and return its standard R/W pointer (in case the
197
+ * given one is a transient pointer of shorter lifespan).
198
+ *-------------------------------------------------------------------------
199
+ */
200
+
201
+
202
+ /*-------------------------------------------------------------------------
203
+ * datumIsEqual
204
+ *
205
+ * Return true if two datums are equal, false otherwise
206
+ *
207
+ * NOTE: XXX!
208
+ * We just compare the bytes of the two values, one by one.
209
+ * This routine will return false if there are 2 different
210
+ * representations of the same value (something along the lines
211
+ * of say the representation of zero in one's complement arithmetic).
212
+ * Also, it will probably not give the answer you want if either
213
+ * datum has been "toasted".
214
+ *
215
+ * Do not try to make this any smarter than it currently is with respect
216
+ * to "toasted" datums, because some of the callers could be working in the
217
+ * context of an aborted transaction.
218
+ *-------------------------------------------------------------------------
219
+ */
220
+ bool
221
+ datumIsEqual(Datum value1, Datum value2, bool typByVal, int typLen)
222
+ {
223
+ bool res;
224
+
225
+ if (typByVal)
226
+ {
227
+ /*
228
+ * just compare the two datums. NOTE: just comparing "len" bytes will
229
+ * not do the work, because we do not know how these bytes are aligned
230
+ * inside the "Datum". We assume instead that any given datatype is
231
+ * consistent about how it fills extraneous bits in the Datum.
232
+ */
233
+ res = (value1 == value2);
234
+ }
235
+ else
236
+ {
237
+ Size size1,
238
+ size2;
239
+ char *s1,
240
+ *s2;
241
+
242
+ /*
243
+ * Compare the bytes pointed by the pointers stored in the datums.
244
+ */
245
+ size1 = datumGetSize(value1, typByVal, typLen);
246
+ size2 = datumGetSize(value2, typByVal, typLen);
247
+ if (size1 != size2)
248
+ return false;
249
+ s1 = (char *) DatumGetPointer(value1);
250
+ s2 = (char *) DatumGetPointer(value2);
251
+ res = (memcmp(s1, s2, size1) == 0);
252
+ }
253
+ return res;
254
+ }
255
+
256
+ /*-------------------------------------------------------------------------
257
+ * datum_image_eq
258
+ *
259
+ * Compares two datums for identical contents, based on byte images. Return
260
+ * true if the two datums are equal, false otherwise.
261
+ *-------------------------------------------------------------------------
262
+ */
263
+
264
+
265
+ /*-------------------------------------------------------------------------
266
+ * btequalimage
267
+ *
268
+ * Generic "equalimage" support function.
269
+ *
270
+ * B-Tree operator classes whose equality function could safely be replaced by
271
+ * datum_image_eq() in all cases can use this as their "equalimage" support
272
+ * function.
273
+ *
274
+ * Currently, we unconditionally assume that any B-Tree operator class that
275
+ * registers btequalimage as its support function 4 must be able to safely use
276
+ * optimizations like deduplication (i.e. we return true unconditionally). If
277
+ * it ever proved necessary to rescind support for an operator class, we could
278
+ * do that in a targeted fashion by doing something with the opcintype
279
+ * argument.
280
+ *-------------------------------------------------------------------------
281
+ */
282
+
283
+
284
+ /*-------------------------------------------------------------------------
285
+ * datumEstimateSpace
286
+ *
287
+ * Compute the amount of space that datumSerialize will require for a
288
+ * particular Datum.
289
+ *-------------------------------------------------------------------------
290
+ */
291
+
292
+
293
+ /*-------------------------------------------------------------------------
294
+ * datumSerialize
295
+ *
296
+ * Serialize a possibly-NULL datum into caller-provided storage.
297
+ *
298
+ * Note: "expanded" objects are flattened so as to produce a self-contained
299
+ * representation, but other sorts of toast pointers are transferred as-is.
300
+ * This is because the intended use of this function is to pass the value
301
+ * to another process within the same database server. The other process
302
+ * could not access an "expanded" object within this process's memory, but
303
+ * we assume it can dereference the same TOAST pointers this one can.
304
+ *
305
+ * The format is as follows: first, we write a 4-byte header word, which
306
+ * is either the length of a pass-by-reference datum, -1 for a
307
+ * pass-by-value datum, or -2 for a NULL. If the value is NULL, nothing
308
+ * further is written. If it is pass-by-value, sizeof(Datum) bytes
309
+ * follow. Otherwise, the number of bytes indicated by the header word
310
+ * follow. The caller is responsible for ensuring that there is enough
311
+ * storage to store the number of bytes that will be written; use
312
+ * datumEstimateSpace() to find out how many will be needed.
313
+ * *start_address is updated to point to the byte immediately following
314
+ * those written.
315
+ *-------------------------------------------------------------------------
316
+ */
317
+
318
+
319
+ /*-------------------------------------------------------------------------
320
+ * datumRestore
321
+ *
322
+ * Restore a possibly-NULL datum previously serialized by datumSerialize.
323
+ * *start_address is updated according to the number of bytes consumed.
324
+ *-------------------------------------------------------------------------
325
+ */
326
+
@@ -0,0 +1,98 @@
1
+ /*--------------------------------------------------------------------
2
+ * Symbols referenced in this file:
3
+ * - DatumGetEOHP
4
+ * - EOH_get_flat_size
5
+ * - EOH_flatten_into
6
+ *--------------------------------------------------------------------
7
+ */
8
+
9
+ /*-------------------------------------------------------------------------
10
+ *
11
+ * expandeddatum.c
12
+ * Support functions for "expanded" value representations.
13
+ *
14
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
15
+ * Portions Copyright (c) 1994, Regents of the University of California
16
+ *
17
+ *
18
+ * IDENTIFICATION
19
+ * src/backend/utils/adt/expandeddatum.c
20
+ *
21
+ *-------------------------------------------------------------------------
22
+ */
23
+ #include "postgres.h"
24
+
25
+ #include "utils/expandeddatum.h"
26
+ #include "utils/memutils.h"
27
+
28
+ /*
29
+ * DatumGetEOHP
30
+ *
31
+ * Given a Datum that is an expanded-object reference, extract the pointer.
32
+ *
33
+ * This is a bit tedious since the pointer may not be properly aligned;
34
+ * compare VARATT_EXTERNAL_GET_POINTER().
35
+ */
36
+ ExpandedObjectHeader *
37
+ DatumGetEOHP(Datum d)
38
+ {
39
+ varattrib_1b_e *datum = (varattrib_1b_e *) DatumGetPointer(d);
40
+ varatt_expanded ptr;
41
+
42
+ Assert(VARATT_IS_EXTERNAL_EXPANDED(datum));
43
+ memcpy(&ptr, VARDATA_EXTERNAL(datum), sizeof(ptr));
44
+ Assert(VARATT_IS_EXPANDED_HEADER(ptr.eohptr));
45
+ return ptr.eohptr;
46
+ }
47
+
48
+ /*
49
+ * EOH_init_header
50
+ *
51
+ * Initialize the common header of an expanded object.
52
+ *
53
+ * The main thing this encapsulates is initializing the TOAST pointers.
54
+ */
55
+
56
+
57
+ /*
58
+ * EOH_get_flat_size
59
+ * EOH_flatten_into
60
+ *
61
+ * Convenience functions for invoking the "methods" of an expanded object.
62
+ */
63
+
64
+ Size
65
+ EOH_get_flat_size(ExpandedObjectHeader *eohptr)
66
+ {
67
+ return eohptr->eoh_methods->get_flat_size(eohptr);
68
+ }
69
+
70
+ void
71
+ EOH_flatten_into(ExpandedObjectHeader *eohptr,
72
+ void *result, Size allocated_size)
73
+ {
74
+ eohptr->eoh_methods->flatten_into(eohptr, result, allocated_size);
75
+ }
76
+
77
+ /*
78
+ * If the Datum represents a R/W expanded object, change it to R/O.
79
+ * Otherwise return the original Datum.
80
+ *
81
+ * Caller must ensure that the datum is a non-null varlena value. Typically
82
+ * this is invoked via MakeExpandedObjectReadOnly(), which checks that.
83
+ */
84
+
85
+
86
+ /*
87
+ * Transfer ownership of an expanded object to a new parent memory context.
88
+ * The object must be referenced by a R/W pointer, and what we return is
89
+ * always its "standard" R/W pointer, which is certain to have the same
90
+ * lifespan as the object itself. (The passed-in pointer might not, and
91
+ * in any case wouldn't provide a unique identifier if it's not that one.)
92
+ */
93
+
94
+
95
+ /*
96
+ * Delete an expanded object (must be referenced by a R/W pointer).
97
+ */
98
+
@@ -0,0 +1,136 @@
1
+ /*--------------------------------------------------------------------
2
+ * Symbols referenced in this file:
3
+ * - format_type_be
4
+ *--------------------------------------------------------------------
5
+ */
6
+
7
+ /*-------------------------------------------------------------------------
8
+ *
9
+ * format_type.c
10
+ * Display type names "nicely".
11
+ *
12
+ *
13
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
14
+ * Portions Copyright (c) 1994, Regents of the University of California
15
+ *
16
+ * IDENTIFICATION
17
+ * src/backend/utils/adt/format_type.c
18
+ *
19
+ *-------------------------------------------------------------------------
20
+ */
21
+
22
+ #include "postgres.h"
23
+
24
+ #include <ctype.h>
25
+
26
+ #include "access/htup_details.h"
27
+ #include "catalog/namespace.h"
28
+ #include "catalog/pg_type.h"
29
+ #include "mb/pg_wchar.h"
30
+ #include "utils/builtins.h"
31
+ #include "utils/lsyscache.h"
32
+ #include "utils/numeric.h"
33
+ #include "utils/syscache.h"
34
+
35
+ static char *printTypmod(const char *typname, int32 typmod, Oid typmodout);
36
+
37
+
38
+ /*
39
+ * SQL function: format_type(type_oid, typemod)
40
+ *
41
+ * `type_oid' is from pg_type.oid, `typemod' is from
42
+ * pg_attribute.atttypmod. This function will get the type name and
43
+ * format it and the modifier to canonical SQL format, if the type is
44
+ * a standard type. Otherwise you just get pg_type.typname back,
45
+ * double quoted if it contains funny characters or matches a keyword.
46
+ *
47
+ * If typemod is NULL then we are formatting a type name in a context where
48
+ * no typemod is available, eg a function argument or result type. This
49
+ * yields a slightly different result from specifying typemod = -1 in some
50
+ * cases. Given typemod = -1 we feel compelled to produce an output that
51
+ * the parser will interpret as having typemod -1, so that pg_dump will
52
+ * produce CREATE TABLE commands that recreate the original state. But
53
+ * given NULL typemod, we assume that the parser's interpretation of
54
+ * typemod doesn't matter, and so we are willing to output a slightly
55
+ * "prettier" representation of the same type. For example, type = bpchar
56
+ * and typemod = NULL gets you "character", whereas typemod = -1 gets you
57
+ * "bpchar" --- the former will be interpreted as character(1) by the
58
+ * parser, which does not yield typemod -1.
59
+ *
60
+ * XXX encoding a meaning in typemod = NULL is ugly; it'd have been
61
+ * cleaner to make two functions of one and two arguments respectively.
62
+ * Not worth changing it now, however.
63
+ */
64
+
65
+
66
+ /*
67
+ * format_type_extended
68
+ * Generate a possibly-qualified type name.
69
+ *
70
+ * The default behavior is to only qualify if the type is not in the search
71
+ * path, to ignore the given typmod, and to raise an error if a non-existent
72
+ * type_oid is given.
73
+ *
74
+ * The following bits in 'flags' modify the behavior:
75
+ * - FORMAT_TYPE_TYPEMOD_GIVEN
76
+ * include the typmod in the output (typmod could still be -1 though)
77
+ * - FORMAT_TYPE_ALLOW_INVALID
78
+ * if the type OID is invalid or unknown, return ??? or such instead
79
+ * of failing
80
+ * - FORMAT_TYPE_FORCE_QUALIFY
81
+ * always schema-qualify type names, regardless of search_path
82
+ *
83
+ * Note that TYPEMOD_GIVEN is not interchangeable with "typemod == -1";
84
+ * see the comments above for format_type().
85
+ *
86
+ * Returns a palloc'd string.
87
+ */
88
+
89
+
90
+ /*
91
+ * This version is for use within the backend in error messages, etc.
92
+ * One difference is that it will fail for an invalid type.
93
+ *
94
+ * The result is always a palloc'd string.
95
+ */
96
+ char * format_type_be(Oid type_oid) { return pstrdup("-"); }
97
+
98
+
99
+ /*
100
+ * This version returns a name that is always qualified (unless it's one
101
+ * of the SQL-keyword type names, such as TIMESTAMP WITH TIME ZONE).
102
+ */
103
+
104
+
105
+ /*
106
+ * This version allows a nondefault typemod to be specified.
107
+ */
108
+
109
+
110
+ /*
111
+ * Add typmod decoration to the basic type name
112
+ */
113
+
114
+
115
+
116
+ /*
117
+ * type_maximum_size --- determine maximum width of a variable-width column
118
+ *
119
+ * If the max width is indeterminate, return -1. In particular, we return
120
+ * -1 for any type not known to this routine. We assume the caller has
121
+ * already determined that the type is a variable-width type, so it's not
122
+ * necessary to look up the type's pg_type tuple here.
123
+ *
124
+ * This may appear unrelated to format_type(), but in fact the two routines
125
+ * share knowledge of the encoding of typmod for different types, so it's
126
+ * convenient to keep them together. (XXX now that most of this knowledge
127
+ * has been pushed out of format_type into the typmodout functions, it's
128
+ * interesting to wonder if it's worth trying to factor this code too...)
129
+ */
130
+
131
+
132
+
133
+ /*
134
+ * oidvectortypes - converts a vector of type OIDs to "typname" list
135
+ */
136
+