From 41489ba1502a28856153ef81e297cbf81b92c3df Mon Sep 17 00:00:00 2001 From: oyo Date: Mon, 27 Oct 2025 15:16:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20knowledge.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- knowledge.md | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/knowledge.md b/knowledge.md index 73e00bc..7ce614d 100644 --- a/knowledge.md +++ b/knowledge.md @@ -705,9 +705,12 @@ meeting_with_room_and_agenda_wo示例: - 提取需求中的查询信息,以输入的查询对象作为上下文,构建查询语句 - 如返回数据有列表属性过滤需求(filter):提取需求中的过滤信息,针对可过滤字段(列表属性)分别创建过滤条件。过滤条件不能使用列表属性作为查询条件属性(不能使用contains语法)。属性字段是从根节点属性到当前属性的路径 - **查询语法和过滤语法** + - **核心规则**:所有一元和二元操作符的左侧必须是字段或对象属性 + - 字段:来自WO定义中的属性,包括关联对象的字段 + - 变量:以#开头的变量,由调用方传入 - 基本语法格式:属性名 操作符 变量或常量,变量格式为#变量名;枚举类型常量用单引号包围,例如:'MALE' - - 数值、时间类型属性操作符:!=, ==, >, <, <=, >=, in, notIn, isNullOrNot - - 文本类型属性操作符:like, isNotNull, isNull, !=, ==, in, notIn, isNullOrNot + - 数值、时间类型属性操作符(左侧必须是字段,不能是#变量):!=, ==, >, <, <=, >=, in, notIn, isNullOrNot + - 文本类型属性操作符(左侧必须是字段,不能是#变量):like, isNotNull, isNull, !=, ==, in, notIn, isNullOrNot - isNullOrNot是三元操作符,根据入参判断过滤某值是否为null。例如:gender isNullOrNot #genderIsNullOrNot,若入参为true等价于where gender is null,若为false等价于where gender is not null - 对象属性或列表对象属性操作符:isNull, isNotNull, isNullOrNot。本对象不能直接用此操作符 - 对象属性可对其子属性进行上述查询 @@ -716,7 +719,7 @@ meeting_with_room_and_agenda_wo示例: - 可插入括号()对条件分组 - 列表对象属性只能使用contains、isNull、isNotNull操作符:wo列表类型可用contains(子查询),表示列表属性中需包含至少一个满足子查询条件的对象;其他列表类型只能用isNull或isNotNull - 通过and, or, not连接符拼装子查询完成查询。不要使用未提及的操作符号、连接符 - - 查询条件中的入参可在运行时传入或不传入值,不传入值表示该参数相关条件不起作用;基于这种动态效果,多条件联合查询可优先使用AND + - 查询条件中的变量可在运行时传入或不传入值,不传入值表示该变量相关条件不起作用;基于这种动态效果,多条件联合查询可优先使用AND - 使用点号(.)访问当前对象的单值对象类型子属性,可多个点号组合访问嵌套单值对象属性 - 查询条件中的属性必须是当前查询对象的属性或单值对象属性或单值对象子属性 - 禁止使用filter语法 @@ -794,9 +797,37 @@ meeting_with_room_and_agenda_wo示例: } @detectDelim +- **操作符使用的核心规范,必须遵循** +读方案查询条件遵循严格的操作符规范。以下是完整的操作符使用白名单: + - **一元操作符(仅作用于字段):** + - isNull:判断字段值是否为null + 用法:field isNull + 示例:meeting_title isNull + - isNotNull:判断字段值是否不为null + 用法:field isNotNull + 示例:creator_id isNotNull + - **二元操作符(字段 操作符 值/变量):** + - 比较类:==, !=, >, <, >=, <= + 用法:field == #param 或 field == 'constant' + 示例:meeting_date == #meetingDate + - 集合类:in, notIn + 用法:field in #paramList 或 field notIn #presetConstants + 示例:status in #statusList + - 文本类:like + 用法:field like #keyword + 示例:title like #searchKeyword + - **三元操作符(仅isNullOrNot):** + - isNullOrNot:根据布尔变量判断字段值是否为null + 用法:field isNullOrNot #booleanParam + 语义:如果#booleanParam为true,等价于 field is null + 如果#booleanParam为false,等价于 field is not null + 示例:gender isNullOrNot #filterNullGender + - **禁止的错误用法(黑名单):** + - 错误1: #param isNull / isNotNull / isNullOrNot(变量不能是操作符左侧) + - 错误2: (field == #param OR #param isNull)(不能对变量使用判空操作符) + - 错误3: #param == 'constant'(变量只能作为右侧值) + - 错误4: #paramA in #paramB(变量不能作为操作符左侧) - **创建读方案易错点,必须严格参照,如果违背则为非法读方案** - - 读方案查询语法中,#name == 'a' 或 #type isNull为非法,原因是参数不能在操作符的左侧 - - 读方案查询语法中,判空语句只有以下三种是合法的:1.name isNull;2.name isNotNull;3.name isNullOrNot #nameIsNull(参数名可以按需指定) - 读方案至少需要选择一种返回方式,请设置supportPagination为true或者supportWaterfall为true或者supportQueryAll或者supportCount为true - 如果读方案的supportPagination为true或者supportWaterfall为true,则必须至少设置一个默认排序字段 - **读方案设计元素的表达**