Skip to main content

sqlx_pg_ext_uint/
lib.rs

1pub mod c_u128;
2pub mod c_u16;
3pub mod c_u32;
4/// 和 usize 一个样,只是整一个兼容而已(不必 as u64
5pub mod c_u64;
6pub mod c_usize;
7
8/// test
9#[cfg(test)]
10pub mod test {
11    use sqlx::{self, Row};
12    use tokio;
13
14    use crate::c_u128::U128;
15
16    #[tokio::test]
17    pub async fn main() {
18        let pool = sqlx::PgPool::connect(
19            "postgres://root:TeamNovaCollaboration@192.168.2.254:65500/postgres",
20        )
21        .await
22        .unwrap();
23
24        // use c_u128
25        // extension for uint128
26
27        sqlx::query("CREATE EXTENSION IF NOT EXISTS uint128;")
28            .execute(&pool)
29            .await
30            .expect("Failed to create extension");
31        // create table
32        sqlx::query("CREATE TABLE IF NOT EXISTS test (id uint16 PRIMARY KEY, data uint16[]);")
33            .execute(&pool)
34            .await
35            .expect("Failed to create table");
36        // insert data
37        // unsigned 16 bit integer
38        // 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
39        let id = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFu128;
40        let data = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFu128 - 1;
41        let data2 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFu128 - 2;
42        sqlx::query("INSERT INTO test (id, data) VALUES ($1, $2)")
43            .bind(U128::from(id))
44            .bind(vec![U128::from(data), U128::from(data2)])
45            .execute(&pool)
46            .await
47            .expect("Failed to insert data");
48
49        // select data
50        let res = sqlx::query("SELECT id, data FROM test WHERE id = $1")
51            .bind(U128::from(id))
52            .fetch_one(&pool)
53            .await
54            .expect("Failed to select data");
55        println!(
56            "id: {:?}, data: {:?}",
57            res.get::<U128, _>(0),
58            res.get::<Vec<U128>, _>(1)
59        );
60
61        // clean
62        sqlx::query("DROP TABLE test;")
63            .execute(&pool)
64            .await
65            .unwrap();
66        sqlx::query("DROP EXTENSION uint128;")
67            .execute(&pool)
68            .await
69            .unwrap();
70    }
71}