15个版本 (稳定)
2.4.1 | 2024年7月21日 |
---|---|
2.3.1 | 2024年4月6日 |
2.3.0 | 2024年1月7日 |
2.2.1 | 2023年7月16日 |
0.1.0 | 2021年2月21日 |
#69 在 数据库接口
12,269 每月下载量
120KB
3K SLoC
PostGIS Diesel
Diesel框架扩展,支持PostGIS类型。
使用示例
为确保Geometry类型在作用域内,阅读本指南,并将postgis_diesel::sql_types::*
添加到您的diesel.toml
文件中的import_types键。
假设表定义如下
CREATE EXTENSION IF NOT EXISTS postgis;
CREATE TABLE geometry_samples
(
id SERIAL PRIMARY KEY,
point geometry(Point,4326) NOT NULL,
linestring geometry(Linestring,4326) NOT NULL
);
然后Rust代码可能如下所示
#[macro_use]
extern crate diesel;
use postgis_diesel::operators::*;
use postgis_diesel::types::*;
#[derive(Insertable)]
#[diesel(table_name = geometry_samples)]
struct NewGeometrySample {
point: Point,
linestring: LineString<Point>,
}
#[derive(Queryable)]
struct GeometrySample {
id: i32,
point: Point,
linestring: LineString<Point>,
}
table! {
use postgis_diesel::sql_types::*;
use diesel::sql_types::*;
geometry_samples (id) {
id -> Int4,
point -> Geometry,
linestring -> Geometry,
}
}
有关更完整的示例,请参阅集成测试。
如何从模式中删除自动生成的类型
- 使用diesel生成模式文件
print-schema > src/full_schema.rs
。 - 从其中删除不需要的SQL类型并将其保存到
src/schema.rs
。 - 运行
diff -U6 src/full_schema.rs src/schema.rs > src/schema.patch
。 - 将
patch_file = "src/schema.patch"
添加到diesel.toml。 - 删除
src/full_schema.rs
,检查diesel print-schema > src/schema.rs
不会添加Geometry类型。
补丁文件的示例
@@ -1,12 +1,9 @@
// @generated automatically by Diesel CLI.
pub mod sql_types {
- #[derive(diesel::query_builder::QueryId, diesel::sql_types::SqlType)]
- #[diesel(postgres_type(name = "geometry"))]
- pub struct Geometry;
#[derive(diesel::query_builder::QueryId, diesel::sql_types::SqlType)]
#[diesel(postgres_type(name = "intensity"))]
pub struct Intensity;
#[derive(diesel::query_builder::QueryId, diesel::sql_types::SqlType)]
@@ -52,13 +49,12 @@
diesel::table! {
use diesel::sql_types::*;
use postgis_diesel::sql_types::*;
use super::sql_types::Intensity;
use super::sql_types::Triggermethod;
- use super::sql_types::Geometry;
laps (activity_id, started_at, manual_track) {
activity_id -> Uuid,
started_at -> Timestamptz,
total_time_seconds -> Float8,
distance_meters -> Float8,
如何运行测试
- 启动Postgis数据库
docker compose up
- 运行测试
cargo test
依赖项
~3.5MB
~71K SLoC