1 个不稳定版本
0.1.0 | 2022年7月4日 |
---|
#10 in #federation
在 3 个crate中使用
225KB
6K SLoC
dialtone_sqlx
sqlx crate 集成 dialtone 服务器与 PostgreSQL。
关于 dialtone
Dialtone 是一个未预想的 Activity Pub 系统。什么是“未预想”?基本上,没有意图将此软件锁定在特定垂直“市场”中。相反,将解决新兴的使用案例。
此软件处于积极、初始开发阶段,功能远未完善,也不适合使用。
许可证
许可协议为以下之一
- Apache 许可证 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 https://open-source.org.cn/licenses/MIT),任选其一。
贡献
除非你明确声明,否则任何提交以包含在作品中的贡献,根据 Apache-2.0 许可证的定义,应以上述双重许可,不附加任何额外条款或条件。
一些注意事项....
你知道你可以将迁移嵌入到你的应用程序二进制文件中吗?在启动时,创建数据库连接或池之后,添加
sqlx::migrate!().run(<&your_pool OR &mut your_connection>).await?;
请注意,如果没有任何 Rust 源文件已更改,编译器不会选择新的迁移。你可以创建一个 Cargo 构建脚本来解决这个问题,使用 sqlx migrate build-script
。
参见:https://docs.rs/sqlx/0.5/sqlx/macro.migrate.html
实现说明
测试表
create table user_test (
acct varchar not null primary key, -- user_name@host_name
login_data jsonb
);
insert into user_test (acct, login_data)
values ('test', '[]'::jsonb );
这将更新 JSON 数据,但将数组中的条目数限制为最后 5 个。
update user_test
set login_data = jsonb_path_query_array('"foo"'::jsonb || login_data, '$[0 to 4]')
where acct = 'test';
使用 CTE 记录尝试登录时检查有效登录
with pcheck as (
select exists (
select true from user_principal
where
acct = 'test8@test4.example'
and
status = 'Active'
and
(auth_data->'password_auth'->'bcrypt_password'->>'crypted_password') =
'$2b$12$x6ot7Gd6mvQBZF1p6iWbROyRIABByIBSwGbOkcRP8NHTSpI8S42Ou'
) as success
)
update user_principal
set last_login_data =
jsonb_path_query_array(
jsonb_build_object('from', '$FROM', 'at', '$AT', 'success', pcheck.success)
|| last_login_data, '$[0 to 10]')
from pcheck
where
acct = 'test8@test4.example'
returning last_login_data;
依赖项
~30–42MB
~832K SLoC