查询引擎模块
查询引擎模块,执行和查询引擎相关的语法。
1. 函数列表
函数名 | 说明 |
---|---|
qrClear | 清空$condition查询条件。 |
qrCombine | (参数传入)合并计算查询条件。 |
qrCommon | 计算默认的query,此处执行合并计算,在很多组件中会直接使用。 |
qrComplex | (标准传入)以reference.state中的$query,$condition,$filters 为基础计算最终查询条件。 |
qrForm | 搜索表单提交数据构造。 |
qrInherit | 继承查询条件专用的方法。 |
qrInput | 这个方法主要用于单值多字段操作,基本搜索框的数据收集,如果__DELETE__ 则清空。 |
qrTerms | 收集<Table/> 配置的列配置中配置了$filter 的列信息,列过滤定义数据存储。 |
2. 查询引擎
2.1. 查询引擎语法
该查询引擎语法是遵循Zero中的查询引擎语法,参数的基础结构如:
{
"criteria":{
},
"pager":{
"page":1,
"size":10
},
"sorter":[
"name,DESC"
],
"projection":[]
}
- criteria:查询条件(查询树语法)
- pager:分页参数,从第一页开始(page = 1)
- sorter:排序,数组格式,支持多字段优先排序
- projection:列过滤
2.2. 查询条件基本语法
{
"field,op": "value",
"related.field,op": "value"
}
field,op
表示直接字段和OP操作符。related.field,op
表示关联字段和OP操作符(二级嵌套对象)。
2.3. OP操作符
操作符 | JSON键值格式 | 说明 | SQL条件 |
---|---|---|---|
< | "age,<":20 | 小于某个值 | AGE < 20 |
<= | "age,<=":20 | 小于等于某个值 | AGE < 20 |
> | "age,>":16 | 大于某个值 | AGE >= 16 |
>= | "age,>=":16 | 大于等于某个值 | AGE >= 16 |
= | "age,=":12 或 "age":12 | 等于某个值 | AGE = 12 |
<> | "name,<>":"LANG" | 不等于 | NAME <> 'LANG' |
!n | "name,!n":"随意" | 不为空 | NAME IS NOT NULL |
n | "name,n":"随意" | 为空 | NAME IS NULL |
t | "active,t":"随意" | 等于TRUE | NAME = TRUE |
f | "active,f":"随意" | 等于FALSE | NAME = FALSE |
i | "name,i":["A","B"] | 在某些值内 | NAME IN ('A','B') |
!i | "name,!i":["C","D"] | 不在某些值内 | NAME NOT IN('A','B') |
s | "name,s":"Lang" | 以某个值开始 | NAME LIKE 'Lang%' |
e | "name,e":"Lang" | 以某个值结束 | NAME LIKE '%Lang' |
c | "name,c":"Lang" | 模糊匹配 | NAME LIKE '%Lang%' |
2.4. 连接符
查询引擎中的同一级数据中通过""
键值来判断是AND还是OR操作符。
键 | 值 | 连接符 |
---|---|---|
"" | true | AND(默认值,或不写) |
"" | false | OR |
2.5. 例子
简单例子
{
"age,>":16,
"active,f":"$0"
}
对应的SQL语法:
AGE > 16 AND ACTIVE = FALSE
复杂例子
{
"active,f":"$0",
"":false,
"$0":{
"name,s":"Duplicated",
"active,t":"$1"
}
}
对应的SQL语法:
ACTIVE = FALSE OR (NAME LIKE 'Duplicated%' AND ACTIVE=TRUE)
Methods
(static) qrClear(reference, state)
「标准」Ux.qrClear
列筛选专用的清除筛选条件专用API,该API会执行如下操作:
- 将传入的
state
作为基础数据传入,一般会传入reference.state的计算状态。 - 清空这个对象中的
$condition
字段设置成空对象。 - 保留
$terms
字段,并触发列筛选过程中的同步(保存列查询定义)。
框架中的应用代码:
Ux.prevent(event);
const {$condition = {}} = reference.state;
// 条件不存在的时候清空条件数据,此时state传入为空
if (0 < Object.keys($condition).length) {
Ux.qrClear(reference);
}
Parameters:
Name | Type | Description |
---|---|---|
reference |
Object | ReactComponent | React对应组件引用。 |
state |
Object | 状态数据 |
(static) qrCombine(query, reference, condition) → {any}
「标准」Ux.qrCombine
查询引擎专用的合并函数,深度计算,内部使用了QQuery
对象。
- 以
query
参数为基础查询引擎数据,构造模式(query,reference)
。 - 两个参数构造
QQuery
对象,然后将condition用AND方式追加到查询条件中。
注,最终条件会移除掉
__DELETE__
值的条件。
Parameters:
Name | Type | Description |
---|---|---|
query |
Object | 查询条件。 |
reference |
Object | ReactComponent | React对应组件引用。 |
condition |
Array.<String> | 查询条件处理。 |
Returns:
返回最终的 query 结构。
- Type
- any
(static) qrCommon(reference, config) → {Object}
「标准」Ux.qrCommon
复杂内容核心操作,用于设置默认的 $query 信息
优先级选取
- props 中的 $query 优先
- config 中的 query 第一级,直接合并 config.query (全合并)
- config 中的 ajax.magic 合并(需解析,只合并 criteria)
Parameters:
Name | Type | Description |
---|---|---|
reference |
Object | ReactComponent | React对应组件引用。 |
config |
Object | 查询配置 |
Returns:
返回最终的 query 结构。
- Type
- Object
(static) qrComplex(query, reference) → {Object}
「标准」Ux.qrComplex
复杂模式的处理流程,三合一的查询条件处理,处理不同情况的查询条件,执行合并。
$condition
:当前环境的基础条件,该基础条件受列过滤
的影响,触发了列过滤后该变量会受到影响。$terms
:该变量是计算基础,保存了列中定义了filter
的列配置,换算过后的定义结果会保存在 $terms 变量中。$filters
:该变量保存的是高级搜索表单存储的最终查询条件。
需要说明查询条件来自于几个源头:
- props属性中的$query条件,同时包含config配置中的条件,最终计算存储在state中,生成$query新变量(状态中)。
- 如果是列过滤功能,则直接修改$condition变量的值。
- 如果是基础搜索和高级搜索,则直接修改$filters变量的值。
所以最终查询条件的计算是:reference.state中的
$query + $condition + $filters
三者合一,借用QQuery
实现查询条件的复杂运算。
Parameters:
Name | Type | Description |
---|---|---|
query |
Object | 查询条件专用结构。 |
reference |
Object | ReactComponent | React对应组件引用。 |
Returns:
返回最终的 query 结构。
- Type
- Object
(static) qrForm(input, connector, reference) → {Object}
「标准」Ux.qrForm
针对查询专用表单的条件数据收集处理,构造查询$filters变量专用,收集表单中的条件数据构造查询条件信息,
- connector有两个值:
AND | OR
,用于设置条件和条件之间的条件连接符。 - 如果条件中遇到值:
__DELETE__
的值,则将该条件删除掉。 - 系统会搜索同名属性,和
op
组合成最新条件,完成搜索表单的提交操作。
最终生成的查询条件可在日志中查看。
Parameters:
Name | Type | Description |
---|---|---|
input |
Object | 输入的字段信息。 |
connector |
String | 查询条件。 |
reference |
Object | ReactComponent | React对应组件引用。 |
Returns:
返回最终查询条件,写入$filters变量。
- Type
- Object
(static) qrInherit(reference) → {Object}
「标准」Ux.qrInherit
计算Qr需要的继承变量,用于继承查询条件专用。
- 先从props中读取$query变量。
- 如果未传递props属性中的$query,则从state中读取:
state.query
信息(ListComplex中使用)- ExListComplex
- ExListQuery
- ExListOpen
以上三个组件为目前使用query继承的组件。
Parameters:
Name | Type | Description |
---|---|---|
reference |
Object | ReactComponent | React对应组件引用。 |
Returns:
返回最终的 query 结构。
- Type
- Object
(static) qrInput(cond, value)
「标准」Ux.qrInput
单独输入框的搜索条件构造专用函数,如果清除则值设为__DELETE__
。
Parameters:
Name | Type | Description |
---|---|---|
cond |
Array | 查询条件字段信息。 |
value |
any | 值信息,如果无值则清除条件。 |
(static) qrTerms(columns) → {Object}
「标准」Ux.qrTerms
收集列中的$filter
过滤配置数据,生成最终的 $terms 变量。
Parameters:
Name | Type | Description |
---|---|---|
columns |
Array | 列过滤中的所有列配置数据 |
Returns:
返回列配置构造的数据
- Type
- Object