当前位置: 首页 > 软件库 > 程序开发 > 常用工具包 >

DataQL

数据查询引擎
授权协议 Apache
开发语言 Java
所属分类 程序开发、 常用工具包
软件类型 开源软件
地区 国产
投 递 者 东方建修
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

什么是DataQL?

DataQL(Data Query Language)DataQL 是一种查询语言。旨在通过提供直观、灵活的语法来描述客户端应用程序的数据需求和交互。

数据的存储根据其业务形式通常是较为简单的,并不适合直接在页面上进行展示。因此开发页面的前端工程师需要为此做大量的工作,这就是 DataQL 极力解决的问题。

例如:下面这个 DataQL 从 user 函数中查询 id 为 4 的用户相关信息并返回给应用。

1
2
3
4
5
return userByID({'id': 4}) => {
    'name',
    'sex',
    'age'
}

返回结果:

1
2
3
4
5
{
    'name' : '马三',
    'sex'  : 'F',
    'age'  : 25
}

在比如:性别数据的字典映射,为此您可以通过 DataQL 的表达式进行快速的转换。从而无需任何服务端和前端的开发。

1
2
3
4
5
return userByID({'id': 4}) => {
    'name',
    'sex' : (sex == 'F') ? '男' : '女' ,
    'age' : age + '岁'
}

返回结果:

1
2
3
4
5
{
    'name' : '马三',
    'sex'  : '男',
    'age'  : '25岁'
}

还可以定义一个查询函数来重用这一逻辑。

1
2
3
4
5
6
7
8
var sex_str = (sex) -> {
    return (sex == 'F' ? '男' : '女');
}
return userByID({'id': 4}) => {
    'name',
    'sex' : sex_str(sex),
    'age' : age + '岁'
}

架构

特性

DataQL 有一些设计原则,这也使其成为有一定的特性。

  • 层次结构:多数产品都涉及数据的层次结构,为了保证结构的一致性 DataQL 结果也是分层的。

  • 数据为中心:前端工程是一个比较典型的场景,但是 DataQL 不局限于此(后端友好性)。

  • 弱类型定义:语言中不会要求声明任何形式的类型结构。

  • 简单逻辑:具备简单逻辑处理能力:表达式计算、对象取值、条件分支、lambda和函数。

  • 编译运行:查询的执行是基于编译结果的。

  • 混合语言:允许查询中混合任意的其它语言代码,典型的场景是查询中混合 SQL 查询语句。

  • 类 JS 语法:类JS语法设计,学习成本极低。

基于这些原则和特性,DataQL变为构建应用程序的强大而高效的环境。

目前 DataQL 提供了 Java 版的指令执行引擎,使用这个引擎您只需要依赖一个 Jar 包即可。任何一个Web应用或者 Spring Boot 的 jar 应用使用都变得非常容易。

 

 

请注意 DataQL 不是一门脚本语言,它对逻辑的处理仅限于简单场景。DataQL 的解决问题的重点集中在:数据的聚合和转换以及过程中的简单加工处理。

  • 简介 DataQL(Data Query Language)DataQL 是一种查询语言。旨在通过提供直观、灵活的语法来描述客户端应用程序的数据需求和交互。 数据的存储根据其业务形式通常是较为简单的,并不适合直接在页面上进行展示。因此开发页面的前端工程师需要为此做大量的工作,这就是 DataQL 极力解决的问题。 请注意 DataQL 不是一门编程语言,它是查询语言。它对逻辑的处理仅限于简单场景。

  • 1、整体是自定义了一门dsl,并实现了指令集和执行器 2、核心数据结构 QueryModel  语法树   QIL 指令集 Query:整体dsl解析执行的门面  DataModel:通用数据类型,可以解包成具体的object list 原子类型等 UDF (User-Defined Function)用户定义函数,mysql的udf是用c写的,dataql的udf是用java写的(注册后可以在脚

  • 万能查询执行步骤 引用包 <dependency> <groupId>net.hasor</groupId> <artifactId>hasor-dataql</artifactId> <version>4.1.13</version> <!-- 查看最新版本:https://mvnrepository.com/artifact/net.hasor/hasor-da

  • import 'net.hasor.dataql.fx.basic.StringUdfSource' as string; import 'net.hasor.dataql.fx.basic.CollectionUdfSource' as collect; // 要求获取男同学中,成绩为优秀的科目 var students = [ {"name":"A", "sex":"F", "re

  • hint FRAGMENT_SQL_DATA_SOURCE = "73ea3095cb514320934a6cc46581145e" hint FRAGMENT_SQL_QUERY_BY_PAGE = true hint FRAGMENT_SQL_QUERY_BY_PAGE_NUMBER_OFFSET = 1 var dataSet = @@sql(apiNo)<% select * from 

  • 词法记号 以下正式的语法规范可以用来帮助更深入的了解如何使用 DataQL 的所有特性。 源码文本 DataQL 文档表示建议使用 Unicode字符序列。但这并不是强制的,您可以通过 java.io.Reader 来读取您的字符流数据。故本文不会强调您的编写查询语言所使用的字符集。 DataQL 支持单行注释和多行注释两种注释方式。与 JavaScript 一样,您可以使用://、/* ...

 相关资料
  • 概述 使用find()方法在MongoDB集合中查询数据。MongoDB所有的查询范围都是单个集合的。也就是说MongoDB不能跨集合查询数据。 查询可以返回集合中的所有文档,或者仅仅返回指定过滤条件的文档。你可以指定一个过滤条件或才一个判断条件作为参数传递给find()方法。 find()方法在一个游标中返回所有的结果集,通过游标的迭代可以输出所有文档。 查询集合中的所有文档 查询集合中的所有文

  • 获取单个数据 获取单个数据的方法包括: 取出主键为1的数据 $user = UserModel::get(1); echo $user->user_nickname; // 使用数组查询 $user = UserModel::get(['user_nickname' => '老猫']); // 使用闭包查询 $user = UserModel::get(function($query){

  • 数据库操作使用 Db类封装方法,请事先在引入 Db类 use think\Db; 以上可以引入 Db,后面的文档不再说明,直接使用; 查询一个数据使用: // table方法必须指定完整的数据表名 Db::name('user')->where('id',1)->find(); find 方法查询结果不存在,返回 null 查询数据集使用: Db::name('user')->where('s

  • 获取单个数据 获取单个数据的方法包括: 取出主键为1的数据 $user = UserModel::find(1); echo $user->user_nickname; 如果你是在模型内部,请不要使用$this->user_nickname的方式来获取数据,请使用$this->getAttr('user_nickname') 替代。 或者在实例化模型后调用查询方法 $user = new Use

  • 数据库操作使用 Db类封装方法,请事先在引入 Db类 use think\facade\Db; 以上可以引入 Db,后面的文档不再说明,直接使用; 查询一个数据使用: // table方法必须指定完整的数据表名 Db::name('user')->where('id',1)->find(); find 方法查询结果不存在,返回 null 查询数据集使用: Db::name('user')->w

  • 我们废弃了v2.0的一些API,如 getItems(), getItem() 这些API的参数太多,不容易记得,现在都采用find(), findOne(), findById() 来替换了,全部使用连贯操作。 查询数据列表 public function find(); public function getList($sql) $model->getList("select * from u