type IfEquals = (() => G extends T ? 1 : 2) extends (() => G extends U ? 1 : 2) ? Y : N; type GetItem = T extends Array ? U : T; type KeysExclude__name = Exclude; type Values = T[keyof T] type UnionToIntersection = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never type LastOfUnion = UnionToIntersection T : never> extends () => (infer R) ? R : never // TS4.0+ type Push = [...T, V]; // TS4.1+ type TuplifyUnion, N = [T] extends [never] ? true : false> = true extends N ? [] : Push>, L> type GetTypeIfOnlyOneField = TuplifyUnion['length'] extends 0 | 1 ? Values : T; type GetFinalType = NoList extends true ? GetTypeIfOnlyOneField : (GetTypeIfOnlyOneField extends never ? never : nasl.collection.List>); type Shift = T extends [infer First, ...infer RightRest] ? RightRest : never; type FirstOf = T extends [infer First, ...infer RightRest] ? First : never; type CheckUniqueKeys = E extends never ? true : ( KeysExclude__name & Keys extends never ? CheckUniqueKeys, FirstOf, Keys | KeysExclude__name> : (KeysExclude__name & Keys extends Keys ? KeysExclude__name & Keys : CheckUniqueKeys, FirstOf, Keys | KeysExclude__name>) ); declare namespace nasl.oql { // 一次平铺的查询视为一次Query,FROM查询的依据为实体Entity function checkUniqueKeys(...args: RecordList): CheckUniqueKeys; export class Query> { FROM(): Query<[Record]>; FROM>(query: Query): Query<[...Record, ...JoinRecord]>; FROM_SUBQUERY>(query: Query): Query<[...JoinRecord]>; PARTITION(expr: (...record: Record) => any): Query; INDEXHIT(expr: (...record: Record) => any): Query; JOIN(): Query<[Record]>; JOIN>(query: Query): Query<[...Record, ...JoinRecord]>; USING(...expr: Array<(...record: Record) => any>): Query; ON(expr: (...record: Record) => nasl.core.Boolean): Query; // UNION>(union: Query & IfEquals): Query; UNION>(union: Query): Query; WHERE(...expr: Array<(...record: Record) => nasl.core.Boolean>): Query; GROUP_BY(...expr: Array<(...record: Record) => any>): Query; HAVING(...expr: Array<(...record: Record) => nasl.core.Boolean>): Query; SELECT(expr: (...record: Record) => SelectRecord, check?: (...record: Record) => true, check2?: void): Query<[SelectRecord]>; // 内存临时表 SELECT_WITH_TEMP_TABLE(expr: (...record: Record) => SelectRecord): Query<[SelectRecord, ...Record]>; SELECT_SUBQUERY_EXPR(expr: (...record: Record) => SelectRecord): SelectRecord; ORDER_BY(...expr: Array<(...record: Record) => any>): Query; LIMIT_OFFSET(limit: nasl.core.Long, offset?: nasl.core.Long): Query; PAGINATE(page: nasl.core.Long, size: nasl.core.Long): Query; DynamicIfJoinExpr>(testExpr: nasl.core.Boolean, sqlExpr: Query): Query<[...Record, ...JoinRecord]>; GET(noList?: NoList): core.MakeAStructure, 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): nasl.core.String; export function CHAR_LENGTH(str: nasl.core.String ): nasl.core.Long; export function CONCAT(...strs: Array): nasl.core.String; export function CONCAT_WS(seperator: nasl.core.String , ...strs: Array): nasl.core.String; export function ELT(expr: nasl.core.Long, ...strs: Array): 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.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; 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.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; export function GREATEST(...value: Array): nasl.core.Long; export function GREATEST(...value: Array): nasl.core.Long; export function GREATEST(...value: Array): nasl.core.Decimal; export function GREATEST(...value: Array): nasl.core.Decimal; export function GREATEST(...value: Array): nasl.core.String; export function LEAST(...value: Array): nasl.core.Long; export function LEAST(...value: Array): nasl.core.Long; export function LEAST(...value: Array): nasl.core.Decimal; export function LEAST(...value: Array): nasl.core.Decimal; export function LEAST(...value: Array): nasl.core.String; // Miscellaneous Functions export function ANY_VALUE(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): 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 MAX(value: nasl.core.String): nasl.core.String; 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; export function MIN(value: nasl.core.String): nasl.core.String; // 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(value: T, list: nasl.collection.List): nasl.core.Boolean; export function IN(value: T, ...array: Array): nasl.core.Boolean; export function IN_SUBQUERY(value: T, expr: Query<[SelectRecord]>): nasl.core.Boolean; export function COMPARE_SUBQUERY(value: T, expr: Query<[SelectRecord]>): nasl.core.Boolean; export function ISNULL(value: any): nasl.core.Boolean; export function IFNULL(expr1: T, expr2: nasl.core.Decimal): nasl.core.Decimal; export function IFNULL(expr1: nasl.core.Decimal, expr2: T): nasl.core.Decimal; export function IFNULL(expr1: T1, expr2: T2): T1 | T2; export function CASE_WHEN(caseCase: any, ...caseWhen: Array<[() => any, () => THEN]>): THEN; export function CASE_WHEN(caseCase: any, caseElse: THEN, ...caseWhen: Array<[() => any, () => THEN]>): THEN; export function BETWEEN_AND(value: T, between: T, and: T): nasl.core.Boolean; export function GROUP_CONCAT(...value: Array): nasl.core.String; export function IF(expr1: nasl.core.Boolean, expr2: THEN, expr3: ELSE): THEN | ELSE; export function ISBOOLEAN(value: nasl.core.Boolean): nasl.core.Boolean; export function COMPARE(left: T, right: T): nasl.core.Boolean; export function CAST(value: any, dataType: T): T; export function CONVERT(value: any, dataType: T): T; export function CONVERT(value: T): T; export function EXISTS_EXPR>(value: Query): nasl.core.Boolean; export function COALESCE(...args: Array): T // others export let NULL: never export function DynamicIfExpr(testExpr: nasl.core.Boolean, sqlExpr: Record): Record; export function checkDynamicReference(...expr1: Array): void; // 单项查询 export function SINGLE_SELECT_ELEMENT(query: Record): Record; } // let result = new nasl.oql.Query() // .FROM_SUBQUERY( // new nasl.oql.Query() // .FROM() // .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() // .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])