_qr

查询引擎模块

查询引擎模块,执行和查询引擎相关的语法。

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会执行如下操作:

  1. 将传入的state作为基础数据传入,一般会传入reference.state的计算状态。
  2. 清空这个对象中的$condition字段设置成空对象。
  3. 保留$terms字段,并触发列筛选过程中的同步(保存列查询定义)。

框架中的应用代码:

Ux.prevent(event);
const {$condition = {}} = reference.state;

// 条件不存在的时候清空条件数据,此时state传入为空
if (0 < Object.keys($condition).length) {
     Ux.qrClear(reference);
}
Parameters:
Name Type Description
reference ReactComponent

React对应组件引用。

state Object

状态数据

(static) qrCombine(query, reference, condition) → {any}

「标准」Ux.qrCombine

查询引擎专用的合并函数,深度计算,内部使用了QQuery对象。

  1. query参数为基础查询引擎数据,构造模式(query,reference)
  2. 两个参数构造QQuery对象,然后将condition用AND方式追加到查询条件中。

注,最终条件会移除掉__DELETE__值的条件。

Parameters:
Name Type Description
query Object

查询条件。

reference ReactComponent

React对应组件引用。

condition Array.<String>

查询条件处理。

Returns:

返回最终的 query 结构。

Type
any

(static) qrCommon(reference, config) → {Object}

「标准」Ux.qrCommon

复杂内容核心操作,用于设置默认的 $query 信息

优先级选取

  1. props 中的 $query 优先
  2. config 中的 query 第一级,直接合并 config.query (全合并)
  3. config 中的 ajax.magic 合并(需解析,只合并 criteria)
Parameters:
Name Type Description
reference ReactComponent

React对应组件引用。

config Object

查询配置

Returns:

返回最终的 query 结构。

Type
Object

(static) qrComplex(query, reference) → {Object}

「标准」Ux.qrComplex

复杂模式的处理流程,三合一的查询条件处理,处理不同情况的查询条件,执行合并。

  1. $condition:当前环境的基础条件,该基础条件受列过滤的影响,触发了列过滤后该变量会受到影响。
  2. $terms:该变量是计算基础,保存了列中定义了filter的列配置,换算过后的定义结果会保存在 $terms 变量中。
  3. $filters:该变量保存的是高级搜索表单存储的最终查询条件。

需要说明查询条件来自于几个源头:

  1. props属性中的$query条件,同时包含config配置中的条件,最终计算存储在state中,生成$query新变量(状态中)。
  2. 如果是列过滤功能,则直接修改$condition变量的值。
  3. 如果是基础搜索和高级搜索,则直接修改$filters变量的值。

所以最终查询条件的计算是:reference.state中的$query + $condition + $filters三者合一,借用QQuery实现查询条件的复杂运算。

Parameters:
Name Type Description
query Object

查询条件专用结构。

reference ReactComponent

React对应组件引用。

Returns:

返回最终的 query 结构。

Type
Object

(static) qrForm(input, connector, reference) → {Object}

「标准」Ux.qrForm

针对查询专用表单的条件数据收集处理,构造查询$filters变量专用,收集表单中的条件数据构造查询条件信息,

  1. connector有两个值:AND | OR,用于设置条件和条件之间的条件连接符。
  2. 如果条件中遇到值:__DELETE__的值,则将该条件删除掉。
  3. 系统会搜索同名属性,和op组合成最新条件,完成搜索表单的提交操作。

最终生成的查询条件可在日志中查看。

Parameters:
Name Type Description
input Object

输入的字段信息。

connector String

查询条件。

reference ReactComponent

React对应组件引用。

Returns:

返回最终查询条件,写入$filters变量。

Type
Object

(static) qrInherit(reference) → {Object}

「标准」Ux.qrInherit

计算Qr需要的继承变量,用于继承查询条件专用。

  1. 先从props中读取$query变量。
  2. 如果未传递props属性中的$query,则从state中读取:state.query信息(ListComplex中使用)
    • ExListComplex
    • ExListQuery
    • ExListOpen

以上三个组件为目前使用query继承的组件。

Parameters:
Name Type Description
reference 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