{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$ref": "#/definitions/YaoQuery.QueryDSL",
  "definitions": {
    "YaoQuery.QueryDSL": {
      "type": "object",
      "properties": {
        "comment": {
          "type": "string",
          "description": "备注【管理字段】"
        },
        "select": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "选择字段列表"
        },
        "from": {
          "type": "string",
          "description": "查询数据表名称或数据模型"
        },
        "wheres": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/definitions/YaoQuery.Where"
              }
            },
            {
              "$ref": "#/definitions/YaoQuery.Recordable"
            }
          ],
          "description": "数据查询条件"
        },
        "orders": {
          "$ref": "#/definitions/YaoQuery.Orders",
          "description": "排序条件"
        },
        "offset": {
          "type": "number",
          "description": "记录开始位置"
        },
        "limit": {
          "type": "number",
          "description": "读取数据的数量"
        },
        "page": {
          "type": "number",
          "description": "分页查询当前页面页码"
        },
        "pagesize": {
          "type": "number",
          "description": "每页读取记录数量"
        },
        "data-only": {
          "type": "boolean",
          "description": "设定为 true, 查询结果为 []Record; 设定为 false, 查询结果为 Paginate, 仅在设定 `page` 或 `pagesize`时有效。"
        },
        "groups": {
          "$ref": "#/definitions/YaoQuery.Groups",
          "description": "聚合字段和统计层级设置"
        },
        "havings": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/YaoQuery.Having"
          },
          "description": "聚合查询结果筛选, 仅在设定 `groups` 时有效"
        },
        "unions": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/YaoQuery.QueryDSL"
          },
          "description": "联合查询。多个查询将结果合并为一张表"
        },
        "query": {
          "$ref": "#/definitions/YaoQuery.QueryDSL",
          "description": "子查询。按 QueryDSL 描述查询逻辑，生成一张二维数据表或数值。"
        },
        "name": {
          "type": "string",
          "description": "子查询别名"
        },
        "joins": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/YaoQuery.Join"
          },
          "description": "表连接。连接数据量较大的数据表时 **不推荐使用**。| 否 |"
        },
        "sql": {
          "$ref": "#/definitions/YaoQuery.SQL",
          "description": "SQL 语句。**非必要，勿使用**"
        },
        "debug": {
          "type": "boolean",
          "description": "是否开启调试(开启后计入查询日志)"
        }
      },
      "additionalProperties": false,
      "description": "QueryDSL Gou Query Domain Specific Language"
    },
    "YaoQuery.Where": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string",
          "description": "查询字段"
        },
        "value": {
          "type": "string",
          "description": "匹配数值"
        },
        "op": {
          "type": "string",
          "description": "匹配关系运算符"
        },
        "or": {
          "type": "string",
          "description": "true 查询条件逻辑关系为 or, 默认为 false 查询条件逻辑关系为 and"
        },
        "query": {
          "type": "string",
          "description": "子查询, 如设定 query 则忽略 value 数值。"
        },
        "comment": {
          "type": "string",
          "description": "查询条件注释"
        },
        "wheres": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/YaoQuery.Where"
          },
          "description": "分组查询。用于 condition 1 and ( condition 2 OR condition 3) 的场景"
        }
      },
      "additionalProperties": {
        "description": "可以使用类似简化的操作，比如：{ \":score\": \"分数\", \"in\": [10, 20] }"
      },
      "description": "Where 查询条件"
    },
    "YaoQuery.Recordable": {
      "type": "object"
    },
    "YaoQuery.Orders": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/YaoQuery.Order"
      },
      "description": "Orders 排序条件集合"
    },
    "YaoQuery.Order": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string",
          "description": "排序字段"
        },
        "sort": {
          "type": "string",
          "description": "排序方式"
        },
        "comment": {
          "type": "string",
          "description": "查询条件注释"
        }
      },
      "required": [
        "field"
      ],
      "additionalProperties": false,
      "description": "Order 排序条件"
    },
    "YaoQuery.Groups": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "$ref": "#/definitions/YaoQuery.Group"
          }
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      ],
      "description": "Groups 聚合条件集合"
    },
    "YaoQuery.Group": {
      "type": "object",
      "properties": {
        "field": {
          "$ref": "#/definitions/YaoQuery.Expression",
          "description": "排序字段"
        },
        "rollup": {
          "type": "string",
          "description": "同时返回多层级统计结果，对应聚合字段数值的名称。"
        },
        "comment": {
          "type": "string",
          "description": "查询条件注释"
        }
      },
      "additionalProperties": false,
      "description": "Group 聚合条件"
    },
    "YaoQuery.Expression": {
      "type": "string"
    },
    "YaoQuery.Having": {
      "type": "object",
      "properties": {
        "havings": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/YaoQuery.Having"
          },
          "description": "分组查询。用于 condition 1 and ( condition 2 OR condition 3) 的场景"
        }
      },
      "additionalProperties": false,
      "description": "Having 聚合结果筛选条件"
    },
    "YaoQuery.Join": {
      "type": "object",
      "properties": {
        "from": {
          "$ref": "#/definitions/YaoQuery.Table",
          "description": "查询数据表名称或数据模型"
        },
        "key": {
          "$ref": "#/definitions/YaoQuery.Expression",
          "description": "关联连接表字段名称"
        },
        "foreign": {
          "$ref": "#/definitions/YaoQuery.Expression",
          "description": "关联目标表字段名称(需指定表名或别名)"
        },
        "left": {
          "type": "boolean",
          "description": "true 连接方式为 LEFT JOIN, 默认为 false 连接方式为 JOIN"
        },
        "right": {
          "type": "boolean",
          "description": "true 连接方式为 RIGHT JOIN, 默认为 false 连接方式为 JOIN"
        },
        "comment": {
          "type": "string",
          "description": "关联条件注释"
        }
      },
      "additionalProperties": false,
      "description": "Join 数据表连接"
    },
    "YaoQuery.Table": {
      "type": "string"
    },
    "YaoQuery.SQL": {
      "type": "object",
      "properties": {
        "stmt": {
          "type": "string",
          "description": "SQL 语句,不可跟其它sql查询条件一起混用"
        },
        "args": {
          "type": "array",
          "items": {},
          "description": "绑定参数表"
        },
        "comment": {
          "type": "string",
          "description": "SQL语句注释"
        }
      },
      "additionalProperties": false,
      "description": "SQL 语句"
    }
  }
}