plrust_trusted_pgrx/
lib.rs

1//! `plrust-trusted-pgrx` is a re-export crate based on [pgrx](https://crates.io/crates/pgrx) which exposes
2//! the minimal set of `pgrx` internals necessary for `plrust` function compilation.  `plrust-trusted-pgrx`
3//! also includes a number of Rust types for interoperating with Postgres types, access to Postgres'
4//! "SPI", logging, and trigger support.
5
6/// Use all the things.  
7///
8/// `plrust` user crates use the `plrust-trusted-pgrx` crate as if it were named `pgrx`, and all user
9/// functions contain a `use pgrx::prelude::*;` statement.
10pub mod prelude {
11    pub use super::*;
12}
13
14pub use ::pgrx::{
15    debug1, debug2, debug3, debug4, debug5, ereport, error, info, log, notice, warning,
16};
17
18pub use datum::*;
19
20/// Safe Rust wrappers for various Postgres types.
21pub mod datum {
22    // traits
23    pub use ::pgrx::datum::{FromDatum, IntoDatum};
24
25    // dates & times
26    pub use ::pgrx::datum::{
27        clock_timestamp, current_date, current_time, current_timestamp, get_timezone_offset,
28        local_timestamp, now, statement_timestamp, time_of_day, to_timestamp,
29        transaction_timestamp, Date, DateTimeConversionError, DateTimeParts, HasExtractableParts,
30        Interval, IntervalConversionError, Time, TimeWithTimeZone, Timestamp, TimestampPrecision,
31        TimestampWithTimeZone, ToIsoString,
32    };
33
34    // zero-copy Arrays
35    pub use ::pgrx::datum::{Array, ArrayIntoIterator, ArrayIterator, ArrayTypedIterator};
36
37    // json
38    pub use ::pgrx::datum::{Json, JsonB};
39
40    // geometric types
41    pub use ::pgrx::pg_sys::{Point, BOX};
42
43    // uuid types
44    pub use ::pgrx::datum::Uuid;
45
46    // range types
47    pub use ::pgrx::datum::{Range, RangeBound, RangeSubType};
48
49    // dynamic types
50    pub use ::pgrx::datum::AnyNumeric;
51
52    // others
53    pub use ::pgrx::pg_sys::Oid;
54}
55
56pub use fn_call::{fn_call, Arg, FnCallArg, FnCallError};
57pub mod fn_call {
58    pub use ::pgrx::fn_call::{
59        fn_call, fn_call_with_collation, Arg, FnCallArg, FnCallError, Result,
60    };
61}
62
63#[doc(hidden)]
64pub mod fcinfo {
65    pub use ::pgrx::fcinfo::pg_getarg;
66    pub use ::pgrx::fcinfo::pg_return_null;
67    pub use ::pgrx::fcinfo::pg_return_void;
68    pub use ::pgrx::fcinfo::srf_first_call_init;
69    pub use ::pgrx::fcinfo::srf_is_first_call;
70    pub use ::pgrx::fcinfo::srf_per_call_setup;
71    pub use ::pgrx::fcinfo::srf_return_done;
72    pub use ::pgrx::fcinfo::srf_return_next;
73}
74
75pub use heap_tuple::*;
76
77/// Support for arbitrary composite types as a "heap tuple".
78pub mod heap_tuple {
79    pub use ::pgrx::composite_type;
80    pub use ::pgrx::datum::TryFromDatumError;
81    pub use ::pgrx::heap_tuple::PgHeapTuple;
82}
83
84pub use iter::*;
85
86/// Return iterators from plrust functions
87pub mod iter {
88    pub use ::pgrx::iter::{SetOfIterator, TableIterator};
89    pub use ::pgrx::name;
90}
91
92#[doc(hidden)]
93pub use memcxt::*;
94#[doc(hidden)]
95pub mod memcxt {
96    pub use ::pgrx::memcxt::PgMemoryContexts;
97}
98
99#[doc(hidden)]
100pub use pgbox::*;
101#[doc(hidden)]
102pub mod pgbox {
103    pub use ::pgrx::pgbox::{AllocatedByPostgres, AllocatedByRust, PgBox, WhoAllocated};
104}
105
106pub use pg_sys::panic::ErrorReportable;
107pub use pg_sys::*;
108
109/// Lower-level Postgres internals, which are safe to use.
110pub mod pg_sys {
111    pub use ::pgrx::pg_sys::elog::PgLogLevel;
112    pub use ::pgrx::pg_sys::errcodes::PgSqlErrorCode;
113    pub use ::pgrx::pg_sys::pg_try::PgTryBuilder;
114    pub use ::pgrx::pg_sys::Datum;
115    #[doc(hidden)]
116    pub use ::pgrx::pg_sys::FuncCallContext;
117    #[doc(hidden)]
118    pub use ::pgrx::pg_sys::FunctionCallInfo;
119    #[doc(hidden)]
120    pub use ::pgrx::pg_sys::Pg_finfo_record;
121    pub use ::pgrx::pg_sys::{BuiltinOid, PgBuiltInOids};
122    pub use ::pgrx::pg_sys::{ItemPointerData, Oid};
123
124    pub mod panic {
125        pub use super::submodules::panic::ErrorReportable;
126    }
127
128    pub mod oids {
129        pub use ::pgrx::pg_sys::oids::{NotBuiltinOid, PgBuiltInOids, PgOid};
130    }
131
132    pub mod submodules {
133        pub mod elog {
134            pub use ::pgrx::pg_sys::submodules::elog::PgLogLevel;
135        }
136
137        pub mod errcodes {
138            pub use ::pgrx::pg_sys::submodules::errcodes::PgSqlErrorCode;
139        }
140
141        pub mod panic {
142            pub use ::pgrx::pg_sys::submodules::panic::pgrx_extern_c_guard;
143            pub use ::pgrx::pg_sys::submodules::panic::ErrorReportable;
144        }
145    }
146}
147
148pub use spi::Spi;
149
150/// Use Postgres' Server Programming Interface to execute arbitrary SQL.
151pub mod spi {
152    pub use ::pgrx::spi::{
153        self, Error, Result, Spi, SpiClient, SpiCursor, SpiErrorCodes, SpiHeapTupleData,
154        SpiHeapTupleDataEntry, SpiOkCodes, SpiTupleTable, UnknownVariant,
155    };
156}
157
158pub use trigger_support::*;
159
160/// Various types for use when a `plrust` function is a trigger function.
161pub mod trigger_support {
162    pub use ::pgrx::trigger_support::{
163        PgTrigger, PgTriggerError, PgTriggerLevel, PgTriggerOperation, PgTriggerWhen, TriggerEvent,
164        TriggerTuple,
165    };
166}
167
168#[doc(hidden)]
169pub use pgrx_macros::*;
170#[doc(hidden)]
171pub mod pgrx_macros {
172    pub use ::pgrx::pgrx_macros::pg_extern;
173    pub use ::pgrx::pgrx_macros::pg_guard;
174    pub use ::pgrx::pgrx_macros::pg_trigger;
175}