@lcap/nasl
Version:
NetEase Application Specific Language
375 lines (348 loc) • 29.2 kB
text/typescript
type IfEquals<T, U, Y = unknown, N = never> =
(<G>() => G extends T ? 1 : 2) extends
(<G>() => G extends U ? 1 : 2) ? Y : N;
type GetItem<T> = T extends Array<infer U> ? U : T;
type KeysExclude__name<T> = Exclude<keyof T, '__name'>;
type Values<T> = T[keyof T]
type UnionToIntersection<U> =
(U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never
type LastOfUnion<T> =
UnionToIntersection<T extends any ? () => T : never> extends () => (infer R) ? R : never
// TS4.0+
type Push<T extends any[], V> = [...T, V];
// TS4.1+
type TuplifyUnion<T, L = LastOfUnion<T>, N = [T] extends [never] ? true : false> =
true extends N ? [] : Push<TuplifyUnion<Exclude<T, L>>, L>
type GetTypeIfOnlyOneField<T> = TuplifyUnion<keyof T>['length'] extends 0 | 1 ? Values<T> : T;
type GetFinalType<T, NoList = false> = NoList extends true ? GetTypeIfOnlyOneField<T> : (GetTypeIfOnlyOneField<T> extends never ? never : nasl.collection.List<GetTypeIfOnlyOneField<T>>);
type Shift<T extends any[]> = T extends [infer First, ...infer RightRest]
? RightRest
: never;
type FirstOf<T extends any[]> = T extends [infer First, ...infer RightRest]
? First
: never;
type CheckUniqueKeys<T extends any[], E = {}, Keys = never> =
E extends never ? true : (
KeysExclude__name<E> & Keys extends never ? CheckUniqueKeys<Shift<T>, FirstOf<T>, Keys | KeysExclude__name<E>>
: (KeysExclude__name<E> & Keys extends Keys ? KeysExclude__name<E> & Keys : CheckUniqueKeys<Shift<T>, FirstOf<T>, Keys | KeysExclude__name<E>>)
);
declare namespace nasl.oql {
// 一次平铺的查询视为一次Query,FROM查询的依据为实体Entity
function checkUniqueKeys<RecordList extends unknown[]>(...args: RecordList): CheckUniqueKeys<RecordList>;
export class Query<Record extends Array<any>> {
FROM<Record>(): Query<[Record]>;
FROM<JoinRecord extends Array<any>>(query: Query<JoinRecord>): Query<[...Record, ...JoinRecord]>;
FROM_SUBQUERY<JoinRecord extends Array<any>>(query: Query<JoinRecord>): Query<[...JoinRecord]>;
PARTITION(expr: (...record: Record) => any): Query<Record>;
INDEXHIT(expr: (...record: Record) => any): Query<Record>;
JOIN<Record>(): Query<[Record]>;
JOIN<JoinRecord extends Array<any>>(query: Query<JoinRecord>): Query<[...Record, ...JoinRecord]>;
USING(...expr: Array<(...record: Record) => any>): Query<Record>;
ON(expr: (...record: Record) => nasl.core.Boolean): Query<Record>;
// UNION<T2 extends Array<any>>(union: Query<T2> & IfEquals<Record, T2>): Query<Record>;
UNION<UnionRecord extends Array<any>>(union: Query<UnionRecord>): Query<Record>;
WHERE(...expr: Array<(...record: Record) => nasl.core.Boolean>): Query<Record>;
GROUP_BY(...expr: Array<(...record: Record) => any>): Query<Record>;
HAVING(...expr: Array<(...record: Record) => nasl.core.Boolean>): Query<Record>;
SELECT<SelectRecord>(expr: (...record: Record) => SelectRecord, check?: (...record: Record) => true, check2?: void): Query<[SelectRecord]>;
// 内存临时表
SELECT_WITH_TEMP_TABLE<SelectRecord>(expr: (...record: Record) => SelectRecord): Query<[SelectRecord, ...Record]>;
SELECT_SUBQUERY_EXPR<SelectRecord>(expr: (...record: Record) => SelectRecord): SelectRecord;
ORDER_BY(...expr: Array<(...record: Record) => any>): Query<Record>;
LIMIT_OFFSET(limit: nasl.core.Long, offset?: nasl.core.Long): Query<Record>;
PAGINATE(page: nasl.core.Long, size: nasl.core.Long): Query<Record>;
DynamicIfJoinExpr<JoinRecord extends Array<any>>(testExpr: nasl.core.Boolean, sqlExpr: Query<JoinRecord>): Query<[...Record, ...JoinRecord]>;
GET<NoList extends boolean>(noList?: NoList): core.MakeAStructure<GetFinalType<GetItem<Record>, NoList>>;
}
// String functions
export function ASCII(str: nasl.core.String ): nasl.core.String;
export function BIN(expr: nasl.core.Long ): nasl.core.String;
export function BIT_LENGTH(str: nasl.core.String ): nasl.core.Long;
export function CHAR(charset?: nasl.core.String , ...exprs: Array<any>): nasl.core.String;
export function CHAR_LENGTH(str: nasl.core.String ): nasl.core.Long;
export function CONCAT(...strs: Array<any>): nasl.core.String;
export function CONCAT_WS(seperator: nasl.core.String , ...strs: Array<nasl.core.String >): nasl.core.String;
export function ELT(expr: nasl.core.Long, ...strs: Array<nasl.core.String >): nasl.core.String;
export function EXPORT_SET(bits: nasl.core.Long, on: nasl.core.String , off: nasl.core.String , separator?: nasl.core.String , number_of_bits?: nasl.core.Long): nasl.core.String;
export function FIELD(str: nasl.core.String , ...strs: Array<nasl.core.String >): nasl.core.Long;
export function FIND_IN_SET(str: nasl.core.String , strs: nasl.core.String ): nasl.core.Long;
export function FORMAT(expr1: nasl.core.Long | nasl.core.Decimal, expr2: nasl.core.Long, locale?: nasl.core.String ): nasl.core.String;
export function FROM_BASE64(str: nasl.core.String ): nasl.core.String;
export function HEX(expr: nasl.core.String ): nasl.core.String;
export function INSERT(str: nasl.core.String , pos: nasl.core.Long, len: nasl.core.Long, newStr: nasl.core.String ): nasl.core.String;
export function INSTR(str: nasl.core.String , newStr: nasl.core.String ): nasl.core.Long;
export function LCASE(str: nasl.core.String ): nasl.core.String;
export function LEFT(str: nasl.core.String | nasl.core.Date, len: nasl.core.Long): nasl.core.String;
export function LENGTH(str: nasl.core.String ): nasl.core.Long;
export function LOAD_FILE(fileName: nasl.core.String ): nasl.core.String;
export function LOCATE(subStr: nasl.core.String , str: nasl.core.String, pos?: nasl.core.Long): nasl.core.Long;
export function LOWER(str: nasl.core.String ): nasl.core.String;
export function LPAD(str: nasl.core.String , len: nasl.core.Long, padStr: nasl.core.String ): nasl.core.String;
export function LTRIM(str: nasl.core.String ): nasl.core.String;
export function MAKE_SET(bits: nasl.core.Long, ...strs: Array<nasl.core.String >): nasl.core.String;
export function MID(str: nasl.core.String , pos: nasl.core.Long, len: nasl.core.Long): nasl.core.String;
export function OCT(expr: nasl.core.Long ): nasl.core.String;
export function OCTET_LENGTH(str: nasl.core.String ): nasl.core.Long;
export function ORD(str: nasl.core.String ): nasl.core.Long;
export function POSITION(subStr: nasl.core.String , str: nasl.core.String ): nasl.core.Long;
export function QUOTE(str: nasl.core.String ): nasl.core.String;
export function REPEAT(str: nasl.core.String , count: nasl.core.Long): nasl.core.String;
export function REPLACE(str: nasl.core.String , fromStr: nasl.core.String , toStr: nasl.core.String ): nasl.core.String;
export function REVERSE(str: nasl.core.String ): nasl.core.String;
export function RIGHT(str: nasl.core.String , len: nasl.core.Long): nasl.core.String;
export function RPAD(str: nasl.core.String , len: nasl.core.Long, padStr: nasl.core.String ): nasl.core.String;
export function RTRIM(str: nasl.core.String ): nasl.core.String;
export function SOUNDEX(str: nasl.core.String ): nasl.core.String;
export function SOUNDES_LIKE(str1: nasl.core.String , str2: nasl.core.String ): nasl.core.Boolean;
export function SPACE(expr: nasl.core.Long): nasl.core.Long;
export function SUBSTR(str: nasl.core.String , pos: nasl.core.Long, len?: nasl.core.Long): nasl.core.String;
export function SUBSTRING(str: nasl.core.String , pos: nasl.core.Long, len?: nasl.core.Long): nasl.core.String;
export function SUBSTRING_INDEX(str: nasl.core.String , delim: nasl.core.String, count: nasl.core.Long): nasl.core.String;
export function TO_BASE64(str: nasl.core.String ): nasl.core.String;
export function TRIM(remStr: nasl.core.String , str: nasl.core.String ): nasl.core.String;
export function UCASE(str: nasl.core.String ): nasl.core.String;
export function UNHEX(str: nasl.core.String ): nasl.core.String;
export function UPPER(str: nasl.core.String ): nasl.core.String;
export function WEIGHT_STRING(str: nasl.core.String , as: 'CHAR' | 'BINARY', ...level: Array<nasl.core.Long>): nasl.core.String;
// String comparison functions
export function LIKE(str1: nasl.core.String , str2: nasl.core.String , escape?: nasl.core.String ): nasl.core.Boolean;
export function NOT_LIKE(str1: nasl.core.String , str2: nasl.core.String , escape?: nasl.core.String ): nasl.core.Boolean;
export function STRCMP(str1: nasl.core.String , str2: nasl.core.String ): nasl.core.Boolean;
// Regular Expressions
export function REGEXP(str1: nasl.core.String , str2: nasl.core.String ): nasl.core.Boolean;
export function NOT_REGEXP(str1: nasl.core.String , str2: nasl.core.String ): nasl.core.Boolean;
export function RLIKE(str1: nasl.core.String , str2: nasl.core.String ): nasl.core.Boolean;
// Character Set and Collation of Function Results
// Mathematical Functions
export function ABS(expr: nasl.core.Long): nasl.core.Long;
export function ABS(expr: nasl.core.Long): nasl.core.Long;
export function ABS(expr: nasl.core.Decimal): nasl.core.Decimal;
export function ABS(expr: nasl.core.Decimal): nasl.core.Decimal;
export function ACOS(expr: nasl.core.Long ): nasl.core.Decimal;
export function ACOS(expr: nasl.core.Decimal): nasl.core.Decimal;
export function ASIN(expr: nasl.core.Long ): nasl.core.Decimal;
export function ASIN(expr: nasl.core.Decimal): nasl.core.Decimal;
export function ATAN(expr: nasl.core.Long ): nasl.core.Decimal;
export function ATAN(expr: nasl.core.Decimal): nasl.core.Decimal;
export function ATAN(expr1: nasl.core.Long | nasl.core.Decimal, expr2: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function ATAN(expr1: nasl.core.Long | nasl.core.Decimal, expr2: nasl.core.Decimal): nasl.core.Decimal;
export function ATAN(expr1: nasl.core.Decimal, expr2: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function ATAN2(expr1: nasl.core.Long | nasl.core.Decimal, expr2: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function ATAN2(expr1: nasl.core.Long | nasl.core.Decimal, expr2: nasl.core.Decimal): nasl.core.Decimal;
export function ATAN2(expr1: nasl.core.Decimal, expr2: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function CEIL(expr1: nasl.core.Long | nasl.core.Decimal): nasl.core.Long;
export function CEILING(expr1: nasl.core.Long | nasl.core.Decimal): nasl.core.Long;
export function CONV(expr1: nasl.core.Long | nasl.core.String, expr2: nasl.core.Long, expr3: nasl.core.Long): nasl.core.String;
export function COS(expr1: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function COS(expr1: nasl.core.Decimal): nasl.core.Decimal;
export function COT(expr1: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function COT(expr1: nasl.core.Decimal): nasl.core.Decimal;
export function CRC32(expr1: nasl.core.String): nasl.core.Long;
export function DEGREES(expr1: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function DEGREES(expr1: nasl.core.Decimal): nasl.core.Decimal;
export function EXP(expr1: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function EXP(expr1: nasl.core.Decimal): nasl.core.Decimal;
export function FLOOR(expr1: nasl.core.Long | nasl.core.Decimal): nasl.core.Long;
export function LN(expr1: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function LN(expr1: nasl.core.Decimal): nasl.core.Decimal;
export function LOG(expr1: nasl.core.Decimal): nasl.core.Decimal;
export function LOG(expr1: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function LOG(expr1: nasl.core.Long | nasl.core.Decimal, expr2: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function LOG(expr1: nasl.core.Decimal, expr2: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function LOG(expr1: nasl.core.Long | nasl.core.Decimal, expr2: nasl.core.Decimal): nasl.core.Decimal;
export function LOG2(expr1: nasl.core.Decimal): nasl.core.Decimal;
export function LOG2(expr1: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function LOG10(expr1: nasl.core.Decimal): nasl.core.Decimal;
export function LOG10(expr1: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function MOD(expr1: nasl.core.Long | nasl.core.Decimal, expr2: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function MOD(expr1: nasl.core.Decimal, expr2: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function MOD(expr1: nasl.core.Long | nasl.core.Decimal, expr2: nasl.core.Decimal): nasl.core.Decimal;
export function PI(): nasl.core.Decimal;
export function POW(expr1: nasl.core.Long , expr2: nasl.core.Long ): nasl.core.Long;
export function POW(expr1: nasl.core.Long , expr2: nasl.core.Decimal): nasl.core.Decimal;
export function POW(expr1: nasl.core.Decimal, expr2: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function POWER(expr1: nasl.core.Long , expr2: nasl.core.Long ): nasl.core.Long;
export function POWER(expr1: nasl.core.Long , expr2: nasl.core.Decimal): nasl.core.Decimal;
export function POWER(expr1: nasl.core.Decimal, expr2: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function RADIANS(expr1: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function RAND(expr1?: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function RAND(expr1: nasl.core.Decimal): nasl.core.Decimal;
export function ROUND(expr1: nasl.core.Long | nasl.core.Decimal): nasl.core.Long;
export function ROUND(expr1: nasl.core.Long | nasl.core.Decimal, expr2: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function SIGN(expr1: nasl.core.Long | nasl.core.Decimal): nasl.core.Long;
export function SIN(expr1: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function SQRT(expr1: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function TAN(expr1: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function TRUNCATE(expr1: nasl.core.Long | nasl.core.Decimal, expr2: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
// Date and Time Functions
type TIME_UNIT = 'MICROSECOND' | 'SECOND' | 'MINUTE' | 'HOUR' | 'DAY' | 'WEEK' | 'MONTH' | 'QUARTER' | 'YEAR' | 'SECOND_MICROSECOND' | 'MINUTE_MICROSECOND' | 'MINUTE_SECOND' | 'HOUR_MICROSECOND' | 'HOUR_SECOND' | 'HOUR_MINUTE' | 'DAY_MICROSECOND' | 'DAY_SECOND' | 'DAY_MINUTE' | 'DAY_HOUR' | 'YEAR_MONTH';
type fsp = 0 | 1 | 2 | 3 | 4 | 5 | 6; // fractional seconds precision
export function DATE_ADD(date: nasl.core.Date, interval: "INTERVAL", expr: nasl.core.Long, unit: 'YEAR' | 'MONTH' | 'DAY'): nasl.core.Date;
export function DATE_ADD(date: nasl.core.DateTime, interval: "INTERVAL", expr: nasl.core.Long, unit: TIME_UNIT): nasl.core.DateTime;
export function DATE_ADD(date: nasl.core.Date, interval: "INTERVAL", expr: nasl.core.String, unit: 'YEAR' | 'MONTH' | 'DAY'): nasl.core.Date;
export function DATE_ADD(date: nasl.core.DateTime, interval: "INTERVAL", expr: nasl.core.String, unit: TIME_UNIT): nasl.core.DateTime;
export function DATE_SUB(date: nasl.core.Date, interval: "INTERVAL", expr: nasl.core.Long, unit: 'YEAR' | 'MONTH' | 'DAY'): nasl.core.Date;
export function DATE_SUB(date: nasl.core.DateTime, interval: "INTERVAL", expr: nasl.core.Long, unit: TIME_UNIT): nasl.core.DateTime;
export function DATE_SUB(date: nasl.core.Date, interval: "INTERVAL", expr: nasl.core.String, unit: 'YEAR' | 'MONTH' | 'DAY'): nasl.core.Date;
export function DATE_SUB(date: nasl.core.DateTime, interval: "INTERVAL", expr: nasl.core.String, unit: TIME_UNIT): nasl.core.DateTime;
export function ADDDATE(date: nasl.core.Date, interval: "INTERVAL", expr: nasl.core.Long, unit: 'YEAR' | 'MONTH' | 'DAY'): nasl.core.Date;
export function ADDDATE(date: nasl.core.DateTime, interval: "INTERVAL", expr: nasl.core.Long, unit: TIME_UNIT): nasl.core.DateTime;
export function ADDDATE(date: nasl.core.Date, interval: "INTERVAL", expr: nasl.core.String, unit: 'YEAR' | 'MONTH' | 'DAY'): nasl.core.Date;
export function ADDDATE(date: nasl.core.DateTime, interval: "INTERVAL", expr: nasl.core.String, unit: TIME_UNIT): nasl.core.DateTime;
export function ADDDATE(date: nasl.core.Date, expr: nasl.core.Long): nasl.core.Date;
export function ADDDATE(date: nasl.core.DateTime, expr: nasl.core.Long): nasl.core.DateTime;
export function ADDTIME(expr1: nasl.core.DateTime, expr: nasl.core.Time): nasl.core.DateTime;
export function ADDTIME(expr1: nasl.core.Time, expr: nasl.core.Time): nasl.core.Time;
export function CONVERT_TZ(expr1: nasl.core.DateTime, fromTz: nasl.core.String, toTz: nasl.core.String): nasl.core.DateTime;
export function CURDATE(): nasl.core.Date;
export function CURRENT_DATE(): nasl.core.Date;
export function CURTIME(): nasl.core.Time;
export function CURTIME(fsp: fsp): nasl.core.Decimal;
export function CURRENT_TIME(): nasl.core.Time;
export function CURRENT_TIME(fsp: fsp): nasl.core.Decimal;
export function DATE(expr: nasl.core.Date | nasl.core.DateTime): nasl.core.Date;
export function DATEDIFF(expr1: nasl.core.Date | nasl.core.DateTime, expr2: nasl.core.Date | nasl.core.DateTime): nasl.core.Long;
export function DATE_FORMAT(expr1: nasl.core.Date | nasl.core.DateTime | nasl.core.Time, format: nasl.core.String): nasl.core.String;
export function DAY(expr1: nasl.core.Date | nasl.core.DateTime): nasl.core.Long;
export function DAYNAME(expr1: nasl.core.Date | nasl.core.DateTime): nasl.core.String;
export function DAYOFMONTH(expr1: nasl.core.Date | nasl.core.DateTime): nasl.core.Long;
export function DAYOFWEEK(expr1: nasl.core.Date | nasl.core.DateTime): nasl.core.Long;
export function EXTRACT(unit: TIME_UNIT, expr1: nasl.core.Date | nasl.core.DateTime): nasl.core.Long;
export function FROM_DAYS(days: nasl.core.Long): nasl.core.Date;
export function FROM_UNIXTIME(timestamp: nasl.core.Long, format?: nasl.core.String): nasl.core.DateTime;
export function GET_FORMAT(str1: 'DATE' | 'TIME' | 'DATETIME', str2: 'EUR' | 'USA' | 'JIS' | 'ISO' | 'INTERNAL'): nasl.core.String;
export function LAST_DAY(date: nasl.core.Date | nasl.core.DateTime): nasl.core.Date;
export function LOCALTIME(): nasl.core.DateTime;
export function LOCALTIMESTAMP(): nasl.core.DateTime;
export function MAKEDATE(year: nasl.core.Long, dayOfYear: nasl.core.Long): nasl.core.Date;
export function MAKETIME(hour: nasl.core.Long, minute: nasl.core.Long, second: nasl.core.Long): nasl.core.Time;
export function MICROSECOND(expr: nasl.core.Time | nasl.core.DateTime): nasl.core.Long;
export function MINUTE(expr: nasl.core.Time | nasl.core.DateTime): nasl.core.Long;
export function MONTH(expr: nasl.core.Date | nasl.core.DateTime): nasl.core.Long;
export function MONTHNAME(expr: nasl.core.Date | nasl.core.DateTime): nasl.core.String;
export function PERIOD_ADD(expr1: nasl.core.Long, expr2: nasl.core.Long): nasl.core.Long;
export function PERIOD_DIFF(expr1: nasl.core.Long, expr2: nasl.core.Long): nasl.core.Long;
export function QUARTER(expr1: nasl.core.Date | nasl.core.DateTime): nasl.core.Long;
export function SECOND(expr1: nasl.core.Time | nasl.core.DateTime): nasl.core.Long;
export function SEC_TO_TIME(expr1: nasl.core.Long): nasl.core.Time;
export function STR_TO_DATE(str: nasl.core.String, format: nasl.core.String): nasl.core.DateTime;
export function SUBDATE(date: nasl.core.Date, interval: "INTERVAL", expr: nasl.core.Long, unit: 'YEAR' | 'MONTH' | 'DAY'): nasl.core.Date;
export function SUBDATE(date: nasl.core.DateTime, interval: "INTERVAL", expr: nasl.core.Long, unit: TIME_UNIT): nasl.core.DateTime;
export function SUBDATE(date: nasl.core.Date, interval: "INTERVAL", expr: nasl.core.String, unit: 'YEAR' | 'MONTH' | 'DAY'): nasl.core.Date;
export function SUBDATE(date: nasl.core.DateTime, interval: "INTERVAL", expr: nasl.core.String, unit: TIME_UNIT): nasl.core.DateTime;
export function SUBDATE(date: nasl.core.Date, expr: nasl.core.Long): nasl.core.Date;
export function SUBDATE(date: nasl.core.DateTime, expr: nasl.core.Long): nasl.core.DateTime;
export function SUBTIME(expr1: nasl.core.DateTime, expr2: nasl.core.Time): nasl.core.DateTime;
export function SUBTIME(expr1: nasl.core.Time, expr2: nasl.core.Time): nasl.core.Time;
export function TIME(expr: nasl.core.Time | nasl.core.DateTime): nasl.core.Time;
export function TIMEDIFF(expr1: nasl.core.Time | nasl.core.DateTime, expr2: nasl.core.Time | nasl.core.DateTime): nasl.core.Time;
export function TO_DAYS(expr: nasl.core.Date | nasl.core.DateTime): nasl.core.Long;
export function TO_SECONDS(expr: nasl.core.Date | nasl.core.DateTime): nasl.core.Long;
export function UNIX_TIMESTAMP(date?: nasl.core.DateTime): nasl.core.Long;
export function UTC_DATE(): nasl.core.Date;
export function UTC_TIME(): nasl.core.Time;
export function UTC_TIMESTAMP(): nasl.core.DateTime;
export function WEEK(date: nasl.core.Date | nasl.core.DateTime, mode?: nasl.core.Long): nasl.core.Long;
export function WEEKDAY(date: nasl.core.Date | nasl.core.DateTime): nasl.core.Long;
export function DAYOFYEAR(date: nasl.core.Date | nasl.core.DateTime): nasl.core.Long
export function WEEKOFYEAR(date: nasl.core.Date | nasl.core.DateTime): nasl.core.Long;
export function YEAR(date: nasl.core.Date | nasl.core.DateTime): nasl.core.Long;
export function YEARWEEK(date: nasl.core.Date, mode?: nasl.core.Long): nasl.core.Long;
export function HOUR(date: nasl.core.Date | nasl.core.DateTime): nasl.core.Long;
export function NOW(): nasl.core.DateTime;
// Comparison Functions
export function INTERVAL(...value: Array<nasl.core.Long>): nasl.core.Long;
export function GREATEST(...value: Array<nasl.core.Long>): nasl.core.Long;
export function GREATEST(...value: Array<nasl.core.Long>): nasl.core.Long;
export function GREATEST(...value: Array<nasl.core.Decimal>): nasl.core.Decimal;
export function GREATEST(...value: Array<nasl.core.Decimal>): nasl.core.Decimal;
export function GREATEST(...value: Array<nasl.core.String>): nasl.core.String;
export function LEAST(...value: Array<nasl.core.Long>): nasl.core.Long;
export function LEAST(...value: Array<nasl.core.Long>): nasl.core.Long;
export function LEAST(...value: Array<nasl.core.Decimal>): nasl.core.Decimal;
export function LEAST(...value: Array<nasl.core.Decimal>): nasl.core.Decimal;
export function LEAST(...value: Array<nasl.core.String>): nasl.core.String;
// Miscellaneous Functions
export function ANY_VALUE<T>(arg: T): T;
// nonAggregateWindowedFunction
export function CUME_DIST(): nasl.core.Decimal;
export function DENSE_RANK(): nasl.core.Long;
export function PERCENT_RANK(): nasl.core.Decimal;
export function RANK(): nasl.core.Long;
export function ROW_NUMBER(): nasl.core.Long;
// aggregateWindowedFunction
export function COUNT(...value: Array<any>): nasl.core.Long;
export function SUM(value: nasl.core.Long): nasl.core.Long;
export function SUM(value: nasl.core.Decimal): nasl.core.Decimal;
export function SUM(value: nasl.core.Boolean): nasl.core.Long;
export function AVG(value: nasl.core.Long | nasl.core.Decimal): nasl.core.Decimal;
export function AVG(value: nasl.core.Decimal): nasl.core.Decimal;
export function MAX(value: nasl.core.Long): nasl.core.Long;
export function MAX(value: nasl.core.Decimal): nasl.core.Decimal;
export function MAX(value: nasl.core.Date): nasl.core.Date;
export function MAX(value: nasl.core.DateTime): nasl.core.DateTime;
export function MAX(value: nasl.core.Time): nasl.core.Time;
export function MAX(value: nasl.core.Boolean): nasl.core.Boolean;
export function MIN(value: nasl.core.Long): nasl.core.Long;
export function MIN(value: nasl.core.Decimal): nasl.core.Decimal;
export function MIN(value: nasl.core.Date): nasl.core.Date;
export function MIN(value: nasl.core.DateTime): nasl.core.DateTime;
export function MIN(value: nasl.core.Time): nasl.core.Time;
export function MIN(value: nasl.core.Boolean): nasl.core.Boolean;
// self
export function STARTWITH(str1: nasl.core.String, str2: nasl.core.String): nasl.core.Boolean;
export function ENDWITH(str1: nasl.core.String, str2: nasl.core.String): nasl.core.Boolean;
export function IN<T>(value: T, list: nasl.collection.List<T>): nasl.core.Boolean;
export function IN<T>(value: T, ...array: Array<T>): nasl.core.Boolean;
export function IN_SUBQUERY<SelectRecord, T>(value: T, expr: Query<[SelectRecord]>): nasl.core.Boolean;
export function COMPARE_SUBQUERY<SelectRecord, T extends SelectRecord>(value: T, expr: Query<[SelectRecord]>): nasl.core.Boolean;
export function ISNULL(value: any): nasl.core.Boolean;
export function IFNULL<T extends nasl.core.Long | nasl.core.Decimal>(expr1: T, expr2: nasl.core.Decimal): nasl.core.Decimal;
export function IFNULL<T extends nasl.core.Decimal | nasl.core.Long>(expr1: nasl.core.Decimal, expr2: T): nasl.core.Decimal;
export function IFNULL<T1, T2>(expr1: T1, expr2: T2): T1 | T2;
export function CASE_WHEN<THEN>(caseCase: any, ...caseWhen: Array<[() => any, () => THEN]>): THEN;
export function CASE_WHEN<THEN>(caseCase: any, caseElse: THEN, ...caseWhen: Array<[() => any, () => THEN]>): THEN;
export function BETWEEN_AND<T>(value: T, between: T, and: T): nasl.core.Boolean;
export function GROUP_CONCAT(...value: Array<any>): nasl.core.String;
export function IF<THEN, ELSE>(expr1: nasl.core.Boolean, expr2: THEN, expr3: ELSE): THEN | ELSE;
export function ISBOOLEAN(value: nasl.core.Boolean): nasl.core.Boolean;
export function COMPARE<T>(left: T, right: T): nasl.core.Boolean;
export function CAST<T>(value: any, dataType: T): T;
export function CONVERT<T>(value: any, dataType: T): T;
export function CONVERT<T>(value: T): T;
export function EXISTS_EXPR<Record extends Array<any>>(value: Query<Record>): nasl.core.Boolean;
export function COALESCE<T>(...args: Array<T>): T
// others
export let NULL: never
export function DynamicIfExpr<Record>(testExpr: nasl.core.Boolean, sqlExpr: Record): Record;
export function checkDynamicReference(...expr1: Array<any>): void;
// 单项查询
export function SINGLE_SELECT_ELEMENT<Record>(query: Record): Record;
}
// let result = new nasl.oql.Query()
// .FROM_SUBQUERY(
// new nasl.oql.Query()
// .FROM<app.dataSources.defaultDS.entities.Student>()
// .SELECT_WITH_TEMP_TABLE((s) => ({...s}))
// .SELECT((_mock_temp_table_alias, s) => ({..._mock_temp_table_alias, ...s}))
// )
// .SELECT_WITH_TEMP_TABLE((sub) => ({...sub, id: sub.id}))
// .SELECT(
// (_mock_temp_table_alias, sub) => ({ ..._mock_temp_table_alias, id2: sub.id }),
// (_mock_temp_table_alias, sub) => nasl.oql.checkUniqueKeys(_mock_temp_table_alias, { id2: sub.id }),
// )
// .GET(true);
// CASE_WHEN
// let a = nasl.oql.CASE_WHEN("mockCase", [() => new nasl.core.Long(1), () => new nasl.core.Long(1)])
// let b = nasl.oql.CASE_WHEN("mockCase", new nasl.core.Long(1), [() => new nasl.core.Long(1), () => new nasl.core.Long(1)])
// let c = nasl.oql.CASE_WHEN("mockCase", new nasl.core.Long(0), [() => new nasl.core.Long(1), () => new nasl.core.Long(1)], [() => new nasl.core.Long(2), () => new nasl.core.Long(2)], [() => new nasl.core.Long(3), () => new nasl.core.Long(3)])
// CASE_WHEN null
// const t = new nasl.oql.Query()
// .FROM<app.dataSources.defaultDS.entities.Entity1>()
// .SELECT_WITH_TEMP_TABLE((Entity1) => ({...Entity1, id: Entity1.id, aa: nasl.oql.CASE_WHEN("mockCase", null, [() => new nasl.core.Long(1), () => null])}))
// .SELECT((_mock_temp_table_alias, Entity1) => ({...{id: _mock_temp_table_alias.id, aa: nasl.oql.CASE_WHEN("mockCase", null, [() => new nasl.core.Long(1), null])}}),(_mock_temp_table_alias, Entity1) => nasl.oql.checkUniqueKeys({id: _mock_temp_table_alias.id, aa: nasl.oql.CASE_WHEN("mockCase", null, [() => new nasl.core.Long(1), () => null])}))
// .GET(false)
// const a1 = nasl.oql.CASE_WHEN("mockCase", null, [() => new nasl.core.Long(1), () => new nasl.core.Long(1)])
// const a11 = nasl.oql.CASE_WHEN("mockCase", null, [() => new nasl.core.Long(1), () => null])
// const a2 = nasl.oql.CASE_WHEN("mockCase", nasl.oql.NULL, [() => new nasl.core.Long(1), () => new nasl.core.Long(1)])
// const a22 = nasl.oql.CASE_WHEN("mockCase", nasl.oql.NULL, [() => new nasl.core.Long(1), () => nasl.oql.NULL])