pub unsafe trait SqlTranslatable {
const TYPE_IDENT: &'static str;
const TYPE_ORIGIN: TypeOrigin;
const ARGUMENT_SQL: Result<SqlMappingRef, ArgumentError>;
const RETURN_SQL: Result<ReturnsRef, ReturnsError>;
// Provided methods
fn type_name() -> &'static str { ... }
fn argument_sql() -> Result<SqlMapping, ArgumentError> { ... }
fn return_sql() -> Result<Returns, ReturnsError> { ... }
fn entity() -> FunctionMetadataTypeEntity<'static> { ... }
}Expand description
A value which can be represented in SQL
If you need the common “fixed external SQL type” case, prefer
impl_sql_translatable!. Spell out this trait impl when (1) the type is owned
by this extension or (2) when the argument or return SQL is unusual.
§Safety
By implementing this, you assert you are not lying to either Postgres or Rust in doing so. This trait asserts a safe translation exists between values of this type from Rust to SQL, or from SQL into Rust. If you are mistaken about how this works, either the Postgres C API or the Rust handling in PGRX may emit undefined behavior.
It cannot be made private or sealed due to details of the structure of the PGRX framework. Nonetheless, if you are not confident the translation is valid: do not implement this trait.
Required Associated Constants§
const TYPE_IDENT: &'static str
const TYPE_ORIGIN: TypeOrigin
const ARGUMENT_SQL: Result<SqlMappingRef, ArgumentError>
const RETURN_SQL: Result<ReturnsRef, ReturnsError>
Provided Methods§
fn type_name() -> &'static str
fn argument_sql() -> Result<SqlMapping, ArgumentError>
fn return_sql() -> Result<Returns, ReturnsError>
fn entity() -> FunctionMetadataTypeEntity<'static>
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.