UNPKG

@lcap/nasl

Version:

NetEase Application Specific Language

375 lines (348 loc) 29.2 kB
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])