amis-model-design
Version:
amis模型设计器
321 lines (319 loc) • 5.87 kB
TypeScript
/**
* 条件
*/
type FXString = string;
type ConditonOP = 'in' | 'not in' | '=' | '<>' | '<' | '<=' | '>' | '>=' | '@>' | '<@' | '&&' | 'is distinct from' | 'is not distinct from' | 'like' | 'not like' | 'similar to' | 'not similar to' | 'ilike' | 'not ilike' | 'is null' | 'is not null' | 'is true' | 'is not true' | 'is fase' | 'is not fase' | 'between' | 'not exists' | 'exists' | 'regexp' | 'any' | 'some' | 'all' | 'starts with' | 'ends with';
interface Condition {
/**
* 条件的连接符
*/
operator?: 'and' | 'or';
/**
* 取否
*/
not?: boolean;
/**
* 比较方法
*/
op?: ConditonOP;
/**
* 比较的左值
*/
left?: ExpressionOrValue;
/**
* 比较的右值
*/
right?: ExpressionOrValue | JSONQL;
/**
* 比较子条件
*/
children?: Condition[];
/**
* 默认值
*/
default?: string | number | number[] | string[];
}
interface Value {
/**
* 常量
*/
val?: string;
/**
* 变量
*/
var?: string;
}
export interface OrderBy {
/**
* 列名
*/
column?: string | Expression;
/**
* 名称,对应前面的 alias
*/
name?: string | number;
/**
* 排序方式
*/
sort?: 'desc' | 'asc' | FXString;
/**
* null 值在前面还是后面
*/
null?: 'first' | 'last';
}
/**
* case 语句的内容
*/
interface Case {
when: Condition;
then: string | Value;
}
type JoinType = 'left join' | 'right join' | 'join' | 'full join' | 'left outer join' | 'right outer join' | 'full outer join';
/**
* join 语句
*/
interface Join {
/**
* 要 join 的表名
*/
table: string;
/**
* join 类型
*/
joinType: JoinType;
/**
* join 的条件
*/
on?: Condition;
/**
* using 语句,不推荐使用
*/
using?: Expression[];
}
interface Over {
/**
* 窗口函数的 partition by
*/
partitionBy?: Expression[];
/**
* 窗口函数的的 order by
*/
orderBy?: OrderBy[];
}
interface Column {
/**
* 查询列
*/
column?: string | '*';
/**
* 所属表
*/
table?: string;
/**
* 级联名称
*/
cascadeName?: string;
/**
* 级联字段
*/
cascadeColumn?: string;
}
/**
* 表达式
*/
interface Expression extends Column {
/**
* 表达式字符串写法
*/
exp?: string;
/**
* alias 名称
*/
name?: string;
/**
* 常量
*/
val?: string | number;
/**
* 变量
*/
var?: string | number;
/**
* 是否加上 distinct
*/
distinct?: boolean;
/**
* 两位计算
*/
binary?: string;
/**
* 两位计算的左值
*/
left?: Expression;
/**
* 两位计算的右值
*/
right?: Expression;
/**
* 单符号计算
*/
sign?: '-' | '+' | '~' | '!';
/**
* 单符号计算的内容
*/
body?: Expression;
/**
* case 语句
*/
case?: Case[];
/**
* case 语句的 else
*/
else?: Expression | string;
/**
* alias
*
*/
as?: string;
/**
* 调用函数
*
*/
func?: string;
/**
* 结果过滤函数
*
*/
filter?: string;
/**
* 函数参数
*/
arg?: number | string;
/**
* 函数多个参数
*/
args?: ExpressionOrValue[];
/**
* 窗口函数
*/
over?: Over;
/**
* 关系查询
*/
relation?: string;
/**
* 关系查询的 select
*/
select?: Expression[];
/**
* 关系查询的 join 类型
*/
joinType?: JoinType;
}
type ExpressionOrValue = Expression | string | number | string[] | number[];
/**
* JSONQL 定义
*/
export interface JSONQL {
/**
* sql 字符串写法
*
*/
sql?: string;
/**
* 语句,不填就是 select
*/
statement?: 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE' | 'select' | 'insert' | 'update' | 'delete';
/**
* 是否返回多条结果
*/
many?: boolean;
/**
* 查询哪个表
*
*/
from?: string;
/**
* 写入或删除哪个表
*/
table?: string;
/**
* 写入的数据
*/
values?: object | FXString;
/**
* 更新数据
*/
set?: object | FXString;
/**
* 更新表达式
*/
setExp?: {
[]: Expression;
};
/**
* 查询字段
*/
select?: Expression[] | String[];
/**
* 是否返回所有结果计数,也就是去掉 where 过滤条件的结果
*/
count?: boolean;
/**
* 查询条件
*/
where?: Condition | object;
/**
* 对聚合的过滤
*/
having?: Condition;
/**
* 排序方式
*/
orderBy?: Array<OrderBy | number>;
/**
* groupBy
*/
groupBy?: Array<ExpressionOrValue>;
/**
* 限制返回结果数量
*
* @minimum 0
*/
limit?: number | FXString;
/**
* 结果偏移量
*
* @minimum 0
*/
offset?: number | FXString;
page?: number | FXString;
perPage?: number | FXString;
/**
* 查询结果是否加上 with ties,只有 oracle、sql server 等支持
*/
withTies?: boolean;
/**
* join 其它表
*/
join?: Join[];
/**
* 合并多表
*/
union?: JSONQL[];
/**
* 不去重合并多表
*/
unionAll?: JSONQL[];
/**
* 二次查询
*/
secondQuery?: JSONQL[];
/**
* 是否强制返回主键
*/
primaryKeyRequired?: boolean;
}
export type JSONQLWhereCondition = Condition;
export type JSONQLWhereConditionOP = ConditonOP;
export {};