pg_query 1.1.0 → 2.0.1

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 (478) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +163 -52
  3. data/README.md +80 -69
  4. data/Rakefile +82 -1
  5. data/ext/pg_query/extconf.rb +3 -31
  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 +988 -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 +9953 -0
  381. data/ext/pg_query/pg_query_fingerprint.c +292 -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 +437 -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 +16 -1117
  460. data/lib/pg_query/filter_columns.rb +86 -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 -200
  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 +64 -43
  471. data/lib/pg_query/version.rb +2 -2
  472. metadata +473 -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/legacy_parsetree.rb +0 -109
  478. data/lib/pg_query/node_types.rb +0 -284
@@ -0,0 +1,343 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * datetime.h
4
+ * Definitions for date/time support code.
5
+ * The support code is shared with other date data types,
6
+ * including date, and time.
7
+ *
8
+ *
9
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
10
+ * Portions Copyright (c) 1994, Regents of the University of California
11
+ *
12
+ * src/include/utils/datetime.h
13
+ *
14
+ *-------------------------------------------------------------------------
15
+ */
16
+ #ifndef DATETIME_H
17
+ #define DATETIME_H
18
+
19
+ #include "nodes/nodes.h"
20
+ #include "utils/timestamp.h"
21
+
22
+ /* this struct is declared in utils/tzparser.h: */
23
+ struct tzEntry;
24
+
25
+
26
+ /* ----------------------------------------------------------------
27
+ * time types + support macros
28
+ *
29
+ * String definitions for standard time quantities.
30
+ *
31
+ * These strings are the defaults used to form output time strings.
32
+ * Other alternative forms are hardcoded into token tables in datetime.c.
33
+ * ----------------------------------------------------------------
34
+ */
35
+
36
+ #define DAGO "ago"
37
+ #define DCURRENT "current"
38
+ #define EPOCH "epoch"
39
+ #define INVALID "invalid"
40
+ #define EARLY "-infinity"
41
+ #define LATE "infinity"
42
+ #define NOW "now"
43
+ #define TODAY "today"
44
+ #define TOMORROW "tomorrow"
45
+ #define YESTERDAY "yesterday"
46
+ #define ZULU "zulu"
47
+
48
+ #define DMICROSEC "usecond"
49
+ #define DMILLISEC "msecond"
50
+ #define DSECOND "second"
51
+ #define DMINUTE "minute"
52
+ #define DHOUR "hour"
53
+ #define DDAY "day"
54
+ #define DWEEK "week"
55
+ #define DMONTH "month"
56
+ #define DQUARTER "quarter"
57
+ #define DYEAR "year"
58
+ #define DDECADE "decade"
59
+ #define DCENTURY "century"
60
+ #define DMILLENNIUM "millennium"
61
+ #define DA_D "ad"
62
+ #define DB_C "bc"
63
+ #define DTIMEZONE "timezone"
64
+
65
+ /*
66
+ * Fundamental time field definitions for parsing.
67
+ *
68
+ * Meridian: am, pm, or 24-hour style.
69
+ * Millennium: ad, bc
70
+ */
71
+
72
+ #define AM 0
73
+ #define PM 1
74
+ #define HR24 2
75
+
76
+ #define AD 0
77
+ #define BC 1
78
+
79
+ /*
80
+ * Field types for time decoding.
81
+ *
82
+ * Can't have more of these than there are bits in an unsigned int
83
+ * since these are turned into bit masks during parsing and decoding.
84
+ *
85
+ * Furthermore, the values for YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
86
+ * must be in the range 0..14 so that the associated bitmasks can fit
87
+ * into the left half of an INTERVAL's typmod value. Since those bits
88
+ * are stored in typmods, you can't change them without initdb!
89
+ */
90
+
91
+ #define RESERV 0
92
+ #define MONTH 1
93
+ #define YEAR 2
94
+ #define DAY 3
95
+ #define JULIAN 4
96
+ #define TZ 5 /* fixed-offset timezone abbreviation */
97
+ #define DTZ 6 /* fixed-offset timezone abbrev, DST */
98
+ #define DYNTZ 7 /* dynamic timezone abbreviation */
99
+ #define IGNORE_DTF 8
100
+ #define AMPM 9
101
+ #define HOUR 10
102
+ #define MINUTE 11
103
+ #define SECOND 12
104
+ #define MILLISECOND 13
105
+ #define MICROSECOND 14
106
+ #define DOY 15
107
+ #define DOW 16
108
+ #define UNITS 17
109
+ #define ADBC 18
110
+ /* these are only for relative dates */
111
+ #define AGO 19
112
+ #define ABS_BEFORE 20
113
+ #define ABS_AFTER 21
114
+ /* generic fields to help with parsing */
115
+ #define ISODATE 22
116
+ #define ISOTIME 23
117
+ /* these are only for parsing intervals */
118
+ #define WEEK 24
119
+ #define DECADE 25
120
+ #define CENTURY 26
121
+ #define MILLENNIUM 27
122
+ /* hack for parsing two-word timezone specs "MET DST" etc */
123
+ #define DTZMOD 28 /* "DST" as a separate word */
124
+ /* reserved for unrecognized string values */
125
+ #define UNKNOWN_FIELD 31
126
+
127
+ /*
128
+ * Token field definitions for time parsing and decoding.
129
+ *
130
+ * Some field type codes (see above) use these as the "value" in datetktbl[].
131
+ * These are also used for bit masks in DecodeDateTime and friends
132
+ * so actually restrict them to within [0,31] for now.
133
+ * - thomas 97/06/19
134
+ * Not all of these fields are used for masks in DecodeDateTime
135
+ * so allow some larger than 31. - thomas 1997-11-17
136
+ *
137
+ * Caution: there are undocumented assumptions in the code that most of these
138
+ * values are not equal to IGNORE_DTF nor RESERV. Be very careful when
139
+ * renumbering values in either of these apparently-independent lists :-(
140
+ */
141
+
142
+ #define DTK_NUMBER 0
143
+ #define DTK_STRING 1
144
+
145
+ #define DTK_DATE 2
146
+ #define DTK_TIME 3
147
+ #define DTK_TZ 4
148
+ #define DTK_AGO 5
149
+
150
+ #define DTK_SPECIAL 6
151
+ #define DTK_EARLY 9
152
+ #define DTK_LATE 10
153
+ #define DTK_EPOCH 11
154
+ #define DTK_NOW 12
155
+ #define DTK_YESTERDAY 13
156
+ #define DTK_TODAY 14
157
+ #define DTK_TOMORROW 15
158
+ #define DTK_ZULU 16
159
+
160
+ #define DTK_DELTA 17
161
+ #define DTK_SECOND 18
162
+ #define DTK_MINUTE 19
163
+ #define DTK_HOUR 20
164
+ #define DTK_DAY 21
165
+ #define DTK_WEEK 22
166
+ #define DTK_MONTH 23
167
+ #define DTK_QUARTER 24
168
+ #define DTK_YEAR 25
169
+ #define DTK_DECADE 26
170
+ #define DTK_CENTURY 27
171
+ #define DTK_MILLENNIUM 28
172
+ #define DTK_MILLISEC 29
173
+ #define DTK_MICROSEC 30
174
+ #define DTK_JULIAN 31
175
+
176
+ #define DTK_DOW 32
177
+ #define DTK_DOY 33
178
+ #define DTK_TZ_HOUR 34
179
+ #define DTK_TZ_MINUTE 35
180
+ #define DTK_ISOYEAR 36
181
+ #define DTK_ISODOW 37
182
+
183
+
184
+ /*
185
+ * Bit mask definitions for time parsing.
186
+ */
187
+
188
+ #define DTK_M(t) (0x01 << (t))
189
+
190
+ /* Convenience: a second, plus any fractional component */
191
+ #define DTK_ALL_SECS_M (DTK_M(SECOND) | DTK_M(MILLISECOND) | DTK_M(MICROSECOND))
192
+ #define DTK_DATE_M (DTK_M(YEAR) | DTK_M(MONTH) | DTK_M(DAY))
193
+ #define DTK_TIME_M (DTK_M(HOUR) | DTK_M(MINUTE) | DTK_ALL_SECS_M)
194
+
195
+ /*
196
+ * Working buffer size for input and output of interval, timestamp, etc.
197
+ * Inputs that need more working space will be rejected early. Longer outputs
198
+ * will overrun buffers, so this must suffice for all possible output. As of
199
+ * this writing, interval_out() needs the most space at ~90 bytes.
200
+ */
201
+ #define MAXDATELEN 128
202
+ /* maximum possible number of fields in a date string */
203
+ #define MAXDATEFIELDS 25
204
+ /* only this many chars are stored in datetktbl */
205
+ #define TOKMAXLEN 10
206
+
207
+ /* keep this struct small; it gets used a lot */
208
+ typedef struct
209
+ {
210
+ char token[TOKMAXLEN + 1]; /* always NUL-terminated */
211
+ char type; /* see field type codes above */
212
+ int32 value; /* meaning depends on type */
213
+ } datetkn;
214
+
215
+ /* one of its uses is in tables of time zone abbreviations */
216
+ typedef struct TimeZoneAbbrevTable
217
+ {
218
+ Size tblsize; /* size in bytes of TimeZoneAbbrevTable */
219
+ int numabbrevs; /* number of entries in abbrevs[] array */
220
+ datetkn abbrevs[FLEXIBLE_ARRAY_MEMBER];
221
+ /* DynamicZoneAbbrev(s) may follow the abbrevs[] array */
222
+ } TimeZoneAbbrevTable;
223
+
224
+ /* auxiliary data for a dynamic time zone abbreviation (non-fixed-offset) */
225
+ typedef struct DynamicZoneAbbrev
226
+ {
227
+ pg_tz *tz; /* NULL if not yet looked up */
228
+ char zone[FLEXIBLE_ARRAY_MEMBER]; /* NUL-terminated zone name */
229
+ } DynamicZoneAbbrev;
230
+
231
+
232
+ /* FMODULO()
233
+ * Macro to replace modf(), which is broken on some platforms.
234
+ * t = input and remainder
235
+ * q = integer part
236
+ * u = divisor
237
+ */
238
+ #define FMODULO(t,q,u) \
239
+ do { \
240
+ (q) = (((t) < 0) ? ceil((t) / (u)) : floor((t) / (u))); \
241
+ if ((q) != 0) (t) -= rint((q) * (u)); \
242
+ } while(0)
243
+
244
+ /* TMODULO()
245
+ * Like FMODULO(), but work on the timestamp datatype (now always int64).
246
+ * We assume that int64 follows the C99 semantics for division (negative
247
+ * quotients truncate towards zero).
248
+ */
249
+ #define TMODULO(t,q,u) \
250
+ do { \
251
+ (q) = ((t) / (u)); \
252
+ if ((q) != 0) (t) -= ((q) * (u)); \
253
+ } while(0)
254
+
255
+ /*
256
+ * Date/time validation
257
+ * Include check for leap year.
258
+ */
259
+
260
+ extern const char *const months[]; /* months (3-char abbreviations) */
261
+ extern const char *const days[]; /* days (full names) */
262
+ extern const int day_tab[2][13];
263
+
264
+ /*
265
+ * These are the rules for the Gregorian calendar, which was adopted in 1582.
266
+ * However, we use this calculation for all prior years as well because the
267
+ * SQL standard specifies use of the Gregorian calendar. This prevents the
268
+ * date 1500-02-29 from being stored, even though it is valid in the Julian
269
+ * calendar.
270
+ */
271
+ #define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
272
+
273
+
274
+ /*
275
+ * Datetime input parsing routines (ParseDateTime, DecodeDateTime, etc)
276
+ * return zero or a positive value on success. On failure, they return
277
+ * one of these negative code values. DateTimeParseError may be used to
278
+ * produce a correct ereport.
279
+ */
280
+ #define DTERR_BAD_FORMAT (-1)
281
+ #define DTERR_FIELD_OVERFLOW (-2)
282
+ #define DTERR_MD_FIELD_OVERFLOW (-3) /* triggers hint about DateStyle */
283
+ #define DTERR_INTERVAL_OVERFLOW (-4)
284
+ #define DTERR_TZDISP_OVERFLOW (-5)
285
+
286
+
287
+ extern void GetCurrentDateTime(struct pg_tm *tm);
288
+ extern void GetCurrentTimeUsec(struct pg_tm *tm, fsec_t *fsec, int *tzp);
289
+ extern void j2date(int jd, int *year, int *month, int *day);
290
+ extern int date2j(int year, int month, int day);
291
+
292
+ extern int ParseDateTime(const char *timestr, char *workbuf, size_t buflen,
293
+ char **field, int *ftype,
294
+ int maxfields, int *numfields);
295
+ extern int DecodeDateTime(char **field, int *ftype,
296
+ int nf, int *dtype,
297
+ struct pg_tm *tm, fsec_t *fsec, int *tzp);
298
+ extern int DecodeTimezone(char *str, int *tzp);
299
+ extern int DecodeTimeOnly(char **field, int *ftype,
300
+ int nf, int *dtype,
301
+ struct pg_tm *tm, fsec_t *fsec, int *tzp);
302
+ extern int DecodeInterval(char **field, int *ftype, int nf, int range,
303
+ int *dtype, struct pg_tm *tm, fsec_t *fsec);
304
+ extern int DecodeISO8601Interval(char *str,
305
+ int *dtype, struct pg_tm *tm, fsec_t *fsec);
306
+
307
+ extern void DateTimeParseError(int dterr, const char *str,
308
+ const char *datatype) pg_attribute_noreturn();
309
+
310
+ extern int DetermineTimeZoneOffset(struct pg_tm *tm, pg_tz *tzp);
311
+ extern int DetermineTimeZoneAbbrevOffset(struct pg_tm *tm, const char *abbr, pg_tz *tzp);
312
+ extern int DetermineTimeZoneAbbrevOffsetTS(TimestampTz ts, const char *abbr,
313
+ pg_tz *tzp, int *isdst);
314
+
315
+ extern void EncodeDateOnly(struct pg_tm *tm, int style, char *str);
316
+ extern void EncodeTimeOnly(struct pg_tm *tm, fsec_t fsec, bool print_tz, int tz, int style, char *str);
317
+ extern void EncodeDateTime(struct pg_tm *tm, fsec_t fsec, bool print_tz, int tz, const char *tzn, int style, char *str);
318
+ extern void EncodeInterval(struct pg_tm *tm, fsec_t fsec, int style, char *str);
319
+ extern void EncodeSpecialTimestamp(Timestamp dt, char *str);
320
+
321
+ extern int ValidateDate(int fmask, bool isjulian, bool is2digits, bool bc,
322
+ struct pg_tm *tm);
323
+
324
+ extern int DecodeTimezoneAbbrev(int field, char *lowtoken,
325
+ int *offset, pg_tz **tz);
326
+ extern int DecodeSpecial(int field, char *lowtoken, int *val);
327
+ extern int DecodeUnits(int field, char *lowtoken, int *val);
328
+
329
+ extern int j2day(int jd);
330
+
331
+ extern Node *TemporalSimplify(int32 max_precis, Node *node);
332
+
333
+ extern bool CheckDateTokenTables(void);
334
+
335
+ extern TimeZoneAbbrevTable *ConvertTimeZoneAbbrevs(struct tzEntry *abbrevs,
336
+ int n);
337
+ extern void InstallTimeZoneAbbrevs(TimeZoneAbbrevTable *tbl);
338
+
339
+ extern void AdjustTimestampForTypmod(Timestamp *time, int32 typmod);
340
+ extern bool AdjustTimestampForTypmodError(Timestamp *time, int32 typmod,
341
+ bool *error);
342
+
343
+ #endif /* DATETIME_H */
@@ -0,0 +1,68 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * datum.h
4
+ * POSTGRES Datum (abstract data type) manipulation routines.
5
+ *
6
+ * These routines are driven by the 'typbyval' and 'typlen' information,
7
+ * which must previously have been obtained by the caller for the datatype
8
+ * of the Datum. (We do it this way because in most situations the caller
9
+ * can look up the info just once and use it for many per-datum operations.)
10
+ *
11
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
12
+ * Portions Copyright (c) 1994, Regents of the University of California
13
+ *
14
+ * src/include/utils/datum.h
15
+ *
16
+ *-------------------------------------------------------------------------
17
+ */
18
+ #ifndef DATUM_H
19
+ #define DATUM_H
20
+
21
+ /*
22
+ * datumGetSize - find the "real" length of a datum
23
+ */
24
+ extern Size datumGetSize(Datum value, bool typByVal, int typLen);
25
+
26
+ /*
27
+ * datumCopy - make a copy of a non-NULL datum.
28
+ *
29
+ * If the datatype is pass-by-reference, memory is obtained with palloc().
30
+ */
31
+ extern Datum datumCopy(Datum value, bool typByVal, int typLen);
32
+
33
+ /*
34
+ * datumTransfer - transfer a non-NULL datum into the current memory context.
35
+ *
36
+ * Differs from datumCopy() in its handling of read-write expanded objects.
37
+ */
38
+ extern Datum datumTransfer(Datum value, bool typByVal, int typLen);
39
+
40
+ /*
41
+ * datumIsEqual
42
+ * return true if two datums of the same type are equal, false otherwise.
43
+ *
44
+ * XXX : See comments in the code for restrictions!
45
+ */
46
+ extern bool datumIsEqual(Datum value1, Datum value2,
47
+ bool typByVal, int typLen);
48
+
49
+ /*
50
+ * datum_image_eq
51
+ *
52
+ * Compares two datums for identical contents, based on byte images. Return
53
+ * true if the two datums are equal, false otherwise.
54
+ */
55
+ extern bool datum_image_eq(Datum value1, Datum value2,
56
+ bool typByVal, int typLen);
57
+
58
+ /*
59
+ * Serialize and restore datums so that we can transfer them to parallel
60
+ * workers.
61
+ */
62
+ extern Size datumEstimateSpace(Datum value, bool isnull, bool typByVal,
63
+ int typLen);
64
+ extern void datumSerialize(Datum value, bool isnull, bool typByVal,
65
+ int typLen, char **start_address);
66
+ extern Datum datumRestore(char **start_address, bool *isnull);
67
+
68
+ #endif /* DATUM_H */
@@ -0,0 +1,123 @@
1
+ /*-------------------------------------------------------------------------
2
+ *
3
+ * dsa.h
4
+ * Dynamic shared memory areas.
5
+ *
6
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
7
+ * Portions Copyright (c) 1994, Regents of the University of California
8
+ *
9
+ * IDENTIFICATION
10
+ * src/include/utils/dsa.h
11
+ *
12
+ *-------------------------------------------------------------------------
13
+ */
14
+ #ifndef DSA_H
15
+ #define DSA_H
16
+
17
+ #include "port/atomics.h"
18
+ #include "storage/dsm.h"
19
+
20
+ /* The opaque type used for an area. */
21
+ struct dsa_area;
22
+ typedef struct dsa_area dsa_area;
23
+
24
+ /*
25
+ * If this system only uses a 32-bit value for size_t, then use the 32-bit
26
+ * implementation of DSA. This limits the amount of DSA that can be created
27
+ * to something significantly less than the entire 4GB address space because
28
+ * the DSA pointer must encode both a segment identifier and an offset, but
29
+ * that shouldn't be a significant limitation in practice.
30
+ *
31
+ * If this system doesn't support atomic operations on 64-bit values, then
32
+ * we fall back to 32-bit dsa_pointer for lack of other options.
33
+ *
34
+ * For testing purposes, USE_SMALL_DSA_POINTER can be defined to force the use
35
+ * of 32-bit dsa_pointer even on systems capable of supporting a 64-bit
36
+ * dsa_pointer.
37
+ */
38
+ #if SIZEOF_SIZE_T == 4 || !defined(PG_HAVE_ATOMIC_U64_SUPPORT) || \
39
+ defined(USE_SMALL_DSA_POINTER)
40
+ #define SIZEOF_DSA_POINTER 4
41
+ #else
42
+ #define SIZEOF_DSA_POINTER 8
43
+ #endif
44
+
45
+ /*
46
+ * The type of 'relative pointers' to memory allocated by a dynamic shared
47
+ * area. dsa_pointer values can be shared with other processes, but must be
48
+ * converted to backend-local pointers before they can be dereferenced. See
49
+ * dsa_get_address. Also, an atomic version and appropriately sized atomic
50
+ * operations.
51
+ */
52
+ #if SIZEOF_DSA_POINTER == 4
53
+ typedef uint32 dsa_pointer;
54
+ typedef pg_atomic_uint32 dsa_pointer_atomic;
55
+ #define dsa_pointer_atomic_init pg_atomic_init_u32
56
+ #define dsa_pointer_atomic_read pg_atomic_read_u32
57
+ #define dsa_pointer_atomic_write pg_atomic_write_u32
58
+ #define dsa_pointer_atomic_fetch_add pg_atomic_fetch_add_u32
59
+ #define dsa_pointer_atomic_compare_exchange pg_atomic_compare_exchange_u32
60
+ #define DSA_POINTER_FORMAT "%08x"
61
+ #else
62
+ typedef uint64 dsa_pointer;
63
+ typedef pg_atomic_uint64 dsa_pointer_atomic;
64
+ #define dsa_pointer_atomic_init pg_atomic_init_u64
65
+ #define dsa_pointer_atomic_read pg_atomic_read_u64
66
+ #define dsa_pointer_atomic_write pg_atomic_write_u64
67
+ #define dsa_pointer_atomic_fetch_add pg_atomic_fetch_add_u64
68
+ #define dsa_pointer_atomic_compare_exchange pg_atomic_compare_exchange_u64
69
+ #define DSA_POINTER_FORMAT "%016" INT64_MODIFIER "x"
70
+ #endif
71
+
72
+ /* Flags for dsa_allocate_extended. */
73
+ #define DSA_ALLOC_HUGE 0x01 /* allow huge allocation (> 1 GB) */
74
+ #define DSA_ALLOC_NO_OOM 0x02 /* no failure if out-of-memory */
75
+ #define DSA_ALLOC_ZERO 0x04 /* zero allocated memory */
76
+
77
+ /* A sentinel value for dsa_pointer used to indicate failure to allocate. */
78
+ #define InvalidDsaPointer ((dsa_pointer) 0)
79
+
80
+ /* Check if a dsa_pointer value is valid. */
81
+ #define DsaPointerIsValid(x) ((x) != InvalidDsaPointer)
82
+
83
+ /* Allocate uninitialized memory with error on out-of-memory. */
84
+ #define dsa_allocate(area, size) \
85
+ dsa_allocate_extended(area, size, 0)
86
+
87
+ /* Allocate zero-initialized memory with error on out-of-memory. */
88
+ #define dsa_allocate0(area, size) \
89
+ dsa_allocate_extended(area, size, DSA_ALLOC_ZERO)
90
+
91
+ /*
92
+ * The type used for dsa_area handles. dsa_handle values can be shared with
93
+ * other processes, so that they can attach to them. This provides a way to
94
+ * share allocated storage with other processes.
95
+ *
96
+ * The handle for a dsa_area is currently implemented as the dsm_handle
97
+ * for the first DSM segment backing this dynamic storage area, but client
98
+ * code shouldn't assume that is true.
99
+ */
100
+ typedef dsm_handle dsa_handle;
101
+
102
+ extern dsa_area *dsa_create(int tranche_id);
103
+ extern dsa_area *dsa_create_in_place(void *place, size_t size,
104
+ int tranche_id, dsm_segment *segment);
105
+ extern dsa_area *dsa_attach(dsa_handle handle);
106
+ extern dsa_area *dsa_attach_in_place(void *place, dsm_segment *segment);
107
+ extern void dsa_release_in_place(void *place);
108
+ extern void dsa_on_dsm_detach_release_in_place(dsm_segment *, Datum);
109
+ extern void dsa_on_shmem_exit_release_in_place(int, Datum);
110
+ extern void dsa_pin_mapping(dsa_area *area);
111
+ extern void dsa_detach(dsa_area *area);
112
+ extern void dsa_pin(dsa_area *area);
113
+ extern void dsa_unpin(dsa_area *area);
114
+ extern void dsa_set_size_limit(dsa_area *area, size_t limit);
115
+ extern size_t dsa_minimum_size(void);
116
+ extern dsa_handle dsa_get_handle(dsa_area *area);
117
+ extern dsa_pointer dsa_allocate_extended(dsa_area *area, size_t size, int flags);
118
+ extern void dsa_free(dsa_area *area, dsa_pointer dp);
119
+ extern void *dsa_get_address(dsa_area *area, dsa_pointer dp);
120
+ extern void dsa_trim(dsa_area *area);
121
+ extern void dsa_dump(dsa_area *area);
122
+
123
+ #endif /* DSA_H */