使用sqlite-loadable-rs开发一个简单sqlite uuid 扩展
默认sqlite 缺少uuid 函数, sqlite-loadable-rs 是一个基于rust包装的框架,可以用来快速开发sqlite 扩展,以下是一个简单测试
项目准备
- cargo.toml
注意当前edition = "2021" ,2024 因为一些macro的问题,编译会有问题,对于uuid 的生成使用了uuid crate
[package]
name = "uuid"
version = "0.1.0"
edition = "2021"[dependencies]
sqlite-loadable = "0.0.5"
uuid = {version="1.17.0","features"=["v4"]}
[lib]
crate-type=["lib", "staticlib", "cdylib"]
开发uuid 函数
核心就是提供方法并通过sqlite-loadable-rs 提供的macro 进行暴露
- lib.rs
use sqlite_loadable::prelude::*;
use uuid::Uuid;use sqlite_loadable::{api, define_scalar_function, Result};fn uuid(context: *mut sqlite3_context, _values: &[*mut sqlite3_value]) -> Result<()> {api::result_text(context, &Uuid::new_v4().to_string())?;Ok(())
}#[sqlite_entrypoint]
fn sqlite3_uuid_init(db: *mut sqlite3) -> Result<()> {let flags = FunctionFlags::UTF8;define_scalar_function(db, "uuid", 0, uuid, flags)?;Ok(())
}
代码使用
通过python 使用
- app.py
import sqlite3
import numpy as np
import sqlite_vec
from sqlite_vec import serialize_float32
db = sqlite3.connect("examplev2.db")
db.enable_load_extension(True)
sqlite_vec.load(db)
db.load_extension("./libsqlite_uuid.dylib")
db.enable_load_extension(False)
vector = np.random.rand(2).astype(np.float32)
vector = [1,8]
db.execute('''
CREATE virtual TABLE IF NOT EXISTS vec_documents using vec0 (id INTEGER PRIMARY KEY,embedding FLOAT[2],name text,version text)
''')
# 插入数据
db.execute("INSERT INTO vec_documents (embedding,name,version) VALUES (?,?,uuid())",(serialize_float32(vector),"example_name")
)
result = db.execute('''select * from vec_documents where embedding=?;
''', (serialize_float32(vector),))print(result.fetchall())
db.commit()
db.close()
- 效果
说明
通过sqlite-loadable-rs 对于sqlite 进行扩展是一个挺不错的选择,但是当前对于rust 新版本的支持不是很好
参考资料
https://github.com/asg017/sqlite-base64/blob/main/src/lib.rs
https://github.com/asg017/sqlite-loadable-rs
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/932289.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!相关文章
C语言数据结构笔记3:Union联合体+结构体取8位Bool量 - 指南
pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …
多机器人协同首现基础模型技术突破
某机构研发出首个多机器人协同基础模型DeepFleet,通过Transformer架构处理机器人导航数据,能预测交通模式并提升10%运营效率。该技术利用数十亿小时真实数据训练,包含四种不同架构模型的对比实验。多机器人协同首现…
文登做网站的公司wordpress建英文博客
HTML placeholder 属性实例 1带有 placeholder 文本的两个输入字段:尝试一下 placeholder 文本也可以指定颜色。实例 2带有 placeholder 文本设置颜色:尝试一下 浏览器支持Internet Explorer 10、Firefox、Opera、Chrome 和 Safari 支持 placeholder 属性…
做查询系统网站如何写网站文案
OpenSSL(Open Secure Sockets Layer)是一个开源的软件库,提供了SSL和TLS协议的实现,用于加密通信。它广泛用于安全连接,例如在网站上通过HTTPS协议进行安全的数据传输. 但是从openssl申请道德证书是不安全的。对于网站…
PHP 图像处理实战 GD/Imagick 从入门到精通,构建高性能图像服务
PHP 图像处理实战 GD/Imagick 从入门到精通,构建高性能图像服务
网页上经常能看到模糊的用户头像、被拉伸变形的卡片图片,还有动辄几 MB 大小的 JPEG 文件。其实这些问题完全可以避免,关键在于建立合适的图像处理流…
上海百度整站优化服务wordpress获取指定图片大小
1. 作用
匹配文档中的某些元素为其应用样式。根据不同需求把不同的标签选出来。 2. 分类
分类 基础选择器 包含 标签选择器、ID选择器、类选择器、通用选择器等 复合选择器 包含 后代选择器、子代选择器、伪类选择器等
1 标签选择器 介绍 又称为元素选择器,根…
湘潭营销网站建设物理机安装虚拟机做网站好处
说明 vue路由切换时,当前页面左侧和右侧容器分别从两侧滑出,新页面左右分别从两侧滑入 效果展示
路由切换-滑入滑出效果 难点和踩坑
现路由和新路由始终存在一个页面根容器,通过<transition>组件,效果只能对页面根容器有效…
完全免费的网站源码做app网站的软件
咳咳,请各位小伙伴们注意啦!我们要聊的主题可是相当高大上——小动物呼吸机! 我们得先了解一下什么是小动物呼吸机。这可不是一般的机器哦,它是一种实验设备,主要用于各种各样的科学研究实验中。比如,在基…
注销主体和注销网站互联网广告精准营销
因项目原因,公司需要在钉钉里面开发小程序。之前用uniapp开发过app,H5,小程序。还真没尝试过钉钉小程序,今天就简单的记录下uniapp运行钉钉小程序中的过程。
在项目目录新建package.json文件,在文件中添加如下代码&am…
农业服务网站建设方案互联网制作公司
时态篇开篇导言:英语的时态是一种动词形式,不同的时态表示动作行为的不同时间与发生方式。粤语同样也有时态,这种时态是通过动词与对应的前后缀以及时间词共同表示。 (一)普通时态说明:普通时态一般指经常发…
网站开发外包 验收国内设计的企业网站
简介: 由汽车之家实时计算平台负责人邸星星在 4 月 17 日上海站 Meetup 分享的,基于 Flink Iceberg 的湖仓一体架构实践。 内容简要: 一、数据仓库架构升级的背景 二、基于 Iceberg 的湖仓一体架构实践 三、总结与收益 四、后续规划 一、数据…
江苏省城乡建设局网站兰州网站设计制作
QT学习笔记(一):VS2013 QT 5.8 运行、编译问题解决
jom: E:\C\4.QT\HelloWord\Makefile.Debug [debug\moc_predefs.h] Error 1 ‘cl’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 jom: E:\C\4.QT\HelloWord\Makefile…
淘宝api 做网站关注公众号平台
在介绍开发板之前,让我们先来区分一下核心板和开发板的区别。核心板是一种集成度高、功能完整的计算模块,搭载系统,简化了外围接口,体积尺寸相对较小,主要适用于嵌入式系统。而开发板由核心板底板组成,提供…
17网站一起做网店质量怎么样秦皇岛网站制作电话
二维教组A[12][18]采用列优先的存储方法,若每个元素各占3个存储单元,且第1个元素的地址为150,则元素A[9][7]的地址为 ( ) A.429 B.432 C.435 D.438 [分析] 本题考查数组元素存储地址的计算。…
手机端网站界面如何做唐山做网站
本节课程将学习以下内容:函数的复写(override)使用super调用父类的成员函数函数的复写(override)复写(override),也被称为覆盖或者重写。在你对父类的成员方法不满意的时候,你可以在子类中复写这个方法,来写出符合自己要求的方法。…
凡科可以做视频网站吗wordpress完美重置
一.服务器端获取Session对象依赖于客户端携带的Cookie中的JSESSIONID数据。如果用户把浏览器的隐私级别调到最高,这时浏览器是不会接受Cookie、这样导致永远在服务器端都拿不到的JSESSIONID信息。这样就导致服务器端的Session使用不了。Java针对Cookie禁用ÿ…
2025氧化镁厂家、活性氧化镁厂家、肥料级氧化镁厂家最新推荐榜:实力生产与优质供应之选
在当今工业发展的大背景下,氧化镁作为重要的工业原料,在冶金、建材、环保、医药等众多领域发挥着不可替代的作用。随着各行业对氧化镁品质要求的不断提升,如何选择可靠的氧化镁生产厂家成为众多采购企业面临的重要课…
建设网站目的微信里的小程序在哪
存储基础
存储设备 DAS:IDE、SATA、SCSI、SAS、USBNAS:NFS、CIFSSAN:SCSI、FC SAN、iSCSI 存储内容包括元数据和数据,名称节点(NameNode)存放元数据,数据节点(DataNode)…
vue 企业网站模板广告平面设计软件
嗨喽,大家好呀~这里是爱看美女的茜茜呐 1.Python如何递归删除空文件夹,这个问题很常见。
但大多数人的解决办法都是自己实现递归函数解决这个问题,其实根本不用那么麻烦。
Python中的os.walk提供了一种从内到外的遍历目录树的方法ÿ…
网站建设课程设计论文做网站常用的软件
点击上方蓝字关注我们不迷路!字符串与编码一、了解计算机编码1.1 编码定义:将信息从一种形式转换为另外一种形式的过程叫做编码,即信息转换过程举例:信息加密解密、语言翻译1.2 计算机编码定义:将计算机可读信息转换…