1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
//LICENSE Portions Copyright 2019-2021 ZomboDB, LLC.
//LICENSE
//LICENSE Portions Copyright 2021-2023 Technology Concepts & Design, Inc.
//LICENSE
//LICENSE Portions Copyright 2023-2023 PgCentral Foundation, Inc. <contact@pgcentral.org>
//LICENSE
//LICENSE All rights reserved.
//LICENSE
//LICENSE Use of this source code is governed by the MIT license that can be found in the LICENSE file.
/*!
Rust to SQL mapping support for dependency graph generation
> Like all of the [`sql_entity_graph`][crate::pgrx_sql_entity_graph] APIs, this is considered **internal**
to the `pgrx` framework and very subject to change between versions. While you may use this, please do it with caution.
*/
use core::any::TypeId;
/// A mapping from a Rust type to a SQL type, with a `TypeId`.
///
/// ```rust
/// use pgrx_sql_entity_graph::RustSqlMapping;
///
/// let constructed = RustSqlMapping::of::<i32>(String::from("int"));
/// let raw = RustSqlMapping {
/// rust: core::any::type_name::<i32>().to_string(),
/// sql: String::from("int"),
/// id: core::any::TypeId::of::<i32>(),
/// };
///
/// assert_eq!(constructed, raw);
/// ```
#[derive(Debug, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
pub struct RustSqlMapping {
// This is the **resolved** type, not the raw source. This means a Type Alias of `type Foo = u32` would appear as `u32`.
pub rust: String,
pub sql: String,
pub id: TypeId,
}
impl RustSqlMapping {
pub fn of<T: 'static>(sql: String) -> Self {
Self {
rust: core::any::type_name::<T>().to_string(),
sql: sql.to_string(),
id: core::any::TypeId::of::<T>(),
}
}
}