dataql的内部实现

本文介绍了如何构建一套自定义的DSL,包括QueryModel语法树和QIL指令集,以及执行器的实现。关键组件包括用户定义函数(UDF)、运行时逻辑和标准库函数,涉及集合操作、数据库操作和加解密等。此外,DataQL被应用于API和数据发布,通过ApiCallService实现脚本执行。总结中提到,可以考虑使用j2v8的JS语法和Node.js来替代实现部分功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、整体是自定义了一门dsl,并实现了指令集和执行器
2、核心数据结构
QueryModel  语法树   QIL 指令集 Query:整体dsl解析执行的门面  DataModel:通用数据类型,可以解包成具体的object list 原子类型等
UDF (User-Defined Function)用户定义函数,mysql的udf是用c写的,dataql的udf是用java写的(注册后可以在脚本中使用)
3、运行时核心逻辑
QueryResultImpl QueryImpl.execute(CustomizeScope customize)
1》创建上下文,塞入环境变量
2》准备好栈、堆、符号表等信息
3》依次执行每个指令(涉及到对栈等的处理)
4》通过栈取出执行的结果
4、内置标准库函数(fx)
集合操作、比较、时间日期日历、id生成、json、字符串下滑驼峰转换、自增自减
数据库操作(自己实现了sql的语句解析生成FxSql、适配了多数据库的分页)
加解密(base64、加解密、摘要)
servletFilter、request、response等的封装
5、dataway
抽象了api和release,把sql用dataql做了解析执行。
InterfaceApiFilter把所有配置的api路由到ApiCallService.doCall,
后者查询出脚本字符串、解析出get或post的参数,调用dataql返回结果

6、总结
如果我个人实现类似的项目,我会用j2v8的js做语法,udf范围会参考dataql的,但是db相关的可能会考虑nodejs的实现

js层的封装设计:
函数的参数包含 元数据、业务对象、上下文、实现一个简易的执行器吗?是的
初始加载的脚本:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值