dataql的内部实现

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值