lubejs-mssql
Version:
The lubejs driver for mssql.
467 lines (466 loc) • 20.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.cos = exports.ceiling = exports.atan2 = exports.atan = exports.asin = exports.acos = exports.abs = exports.replace = exports.upper = exports.lower = exports.quotedName = exports.stuff = exports.reverse = exports.space = exports.rtrim = exports.ltrim = exports.patIndex = exports.nchar = exports.char = exports.unicode = exports.ascii = exports.substring = exports.str = exports.right = exports.left = exports.charIndex = exports.switchOffset = exports.sysDateTimeOffset = exports.sysUtcDateTime = exports.sysDateTime = exports.dateDiff = exports.dateAdd = exports.day = exports.year = exports.month = exports.getUtcDate = exports.getDate = exports.len = exports.isNull = exports.datePart = exports.dateName = exports.stdev = exports.nvl = exports.round = exports.exp = exports.min = exports.max = exports.sum = exports.avg = exports.count = void 0;
exports.CPU_BUSY = exports.CONNECTIONS = exports.ROWCOUNT = exports.IDENTITY = exports.DATE_PART = exports.MS = exports.MILLISECOND = exports.S = exports.SS = exports.SECOND = exports.N = exports.MI = exports.MINUTE = exports.HH = exports.HOUR = exports.DW = exports.WEEKDAY = exports.WW = exports.WK = exports.WEEK = exports.D = exports.DD = exports.DAY = exports.Y = exports.DY = exports.DAYOFYEAR = exports.M = exports.MM = exports.MONTH = exports.Q = exports.QQ = exports.QUARTER = exports.YYYY = exports.YY = exports.YEAR = exports.FUNCTION = exports.tan = exports.square = exports.sqrt = exports.sin = exports.sign = exports.rand = exports.radians = exports.power = exports.pi = exports.log10 = exports.log = exports.floor = exports.degrees = exports.cot = void 0;
exports.sp_updateextendedproperty = exports.sp_dropextendedproperty = exports.sp_addextendedproperty = exports.sp_rename = exports.db_id = exports.database_principal_id = exports.object_definition = exports.object_name = exports.object_id = exports.schema_name = exports.db_name = exports.format = exports.convert = exports.MssqlDbType = exports.VARIANTS = exports.TOTAL_READ = exports.VERSION = exports.TOTAL_WRITE = exports.TOTAL_ERRORS = exports.TIMETICKS = exports.SPID = exports.SERVICENAME = exports.SERVERNAME = exports.PACKET_ERRORS = exports.PACK_SENT = exports.PACK_RECEIVED = exports.MAX_CONNECTIONS = exports.LANGUAGE = exports.LANGID = exports.IO_BUSY = exports.DATEFIRST = void 0;
const types_1 = require("./types");
const core_1 = require("lubejs/core");
const { makeExec, var: variant, builtIn, func, makeInvoke } = core_1.SQL;
exports.count = makeInvoke('scalar', 'count', true);
exports.avg = makeInvoke('scalar', 'avg', true);
exports.sum = makeInvoke('scalar', 'sum', true);
exports.max = makeInvoke('scalar', 'max', true);
exports.min = makeInvoke('scalar', 'min', true);
exports.exp = makeInvoke('scalar', 'exp', true);
exports.round = makeInvoke('scalar', 'round', true);
exports.nvl = makeInvoke('scalar', 'nvl', true);
exports.stdev = makeInvoke('scalar', 'stdev', true);
exports.dateName = makeInvoke('scalar', 'dateName', true);
exports.datePart = makeInvoke('scalar', 'datePart', true);
exports.isNull = makeInvoke('scalar', 'isNull', true);
exports.len = makeInvoke('scalar', 'len', true);
exports.getDate = makeInvoke('scalar', 'getDate', true);
exports.getUtcDate = makeInvoke('scalar', 'getUtcDate', true);
// export const export const date: NoneParameterInvoke<Date> = makeFunc('scalar', 'date', true);
exports.month = makeInvoke('scalar', 'month', true);
exports.year = makeInvoke('scalar', 'year', true);
exports.day = makeInvoke('scalar', 'day', true);
exports.dateAdd = makeInvoke('scalar', 'dateAdd', true);
exports.dateDiff = makeInvoke('scalar', 'dateDiff', true);
exports.sysDateTime = makeInvoke('scalar', 'sysDateTime', true);
exports.sysUtcDateTime = makeInvoke('scalar', 'sysUtcDateTime', true);
exports.sysDateTimeOffset = makeInvoke('scalar', 'sysDateTimeOffset', true);
exports.switchOffset = makeInvoke('scalar', 'switchOffset', true);
exports.charIndex = makeInvoke('scalar', 'charIndex', true);
exports.left = makeInvoke('scalar', 'left', true);
exports.right = makeInvoke('scalar', 'right', true);
exports.str = makeInvoke('scalar', 'str', true);
exports.substring = makeInvoke('scalar', 'substring', true);
exports.ascii = makeInvoke('scalar', 'ascii', true);
exports.unicode = makeInvoke('scalar', 'unicode', true);
exports.char = makeInvoke('scalar', 'char', true);
exports.nchar = makeInvoke('scalar', 'nchar', true);
exports.patIndex = makeInvoke('scalar', 'patIndex', true);
exports.ltrim = makeInvoke('scalar', 'ltrim', true);
exports.rtrim = makeInvoke('scalar', 'rtrim', true);
exports.space = makeInvoke('scalar', 'space', true);
exports.reverse = makeInvoke('scalar', 'reverse', true);
exports.stuff = makeInvoke('scalar', 'stuff', true);
exports.quotedName = makeInvoke('scalar', 'quotedName', true);
exports.lower = makeInvoke('scalar', 'lower', true);
exports.upper = makeInvoke('scalar', 'upper', true);
exports.replace = makeInvoke('scalar', 'replace', true);
exports.abs = makeInvoke('scalar', 'abs', true);
exports.acos = makeInvoke('scalar', 'acos', true);
exports.asin = makeInvoke('scalar', 'asin', true);
exports.atan = makeInvoke('scalar', 'atan', true);
exports.atan2 = makeInvoke('scalar', 'atan2', true);
exports.ceiling = makeInvoke('scalar', 'ceiling', true);
exports.cos = makeInvoke('scalar', 'cos', true);
exports.cot = makeInvoke('scalar', 'cot', true);
exports.degrees = makeInvoke('scalar', 'degrees', true);
exports.floor = makeInvoke('scalar', 'floor', true);
exports.log = makeInvoke('scalar', 'log', true);
exports.log10 = makeInvoke('scalar', 'log10', true);
exports.pi = makeInvoke('scalar', 'pi', true);
exports.power = makeInvoke('scalar', 'power', true);
exports.radians = makeInvoke('scalar', 'radians', true);
exports.rand = makeInvoke('scalar', 'rand', true);
exports.sign = makeInvoke('scalar', 'sign', true);
exports.sin = makeInvoke('scalar', 'sin', true);
exports.sqrt = makeInvoke('scalar', 'sqrt', true);
exports.square = makeInvoke('scalar', 'square', true);
exports.tan = makeInvoke('scalar', 'tan', true);
/**
* 系统函数声明
*/
exports.FUNCTION = {
count: exports.count,
avg: exports.avg,
sum: exports.sum,
max: exports.max,
min: exports.min,
abs: exports.abs,
exp: exports.exp,
round: exports.round,
floor: exports.floor,
sqrt: exports.sqrt,
power: exports.power,
nvl: exports.nvl,
stdev: exports.stdev,
square: exports.square,
dateName: exports.dateName,
datePart: exports.datePart,
isNull: exports.isNull,
len: exports.len,
getDate: exports.getDate,
getUtcDate: exports.getUtcDate,
month: exports.month,
year: exports.year,
dateAdd: exports.dateAdd,
dateDiff: exports.dateDiff,
sysDateTime: exports.sysDateTime,
sysUtcDateTime: exports.sysUtcDateTime,
charIndex: exports.charIndex,
left: exports.left,
right: exports.right,
str: exports.str,
substring: exports.substring,
ascii: exports.ascii,
char: exports.char,
unicode: exports.unicode,
nchar: exports.nchar,
patIndex: exports.patIndex,
ltrim: exports.ltrim,
rtrim: exports.rtrim,
space: exports.space,
reverse: exports.reverse,
stuff: exports.stuff,
quotedName: exports.quotedName,
lower: exports.lower,
upper: exports.upper,
replace: exports.replace,
rand: exports.rand,
acos: exports.acos,
asin: exports.asin,
atan: exports.atan,
atan2: exports.atan2,
ceiling: exports.ceiling,
cos: exports.cos,
cot: exports.cot,
degrees: exports.degrees,
log: exports.log,
log10: exports.log10,
pi: exports.pi,
radians: exports.radians,
sign: exports.sign,
sin: exports.sin,
tan: exports.tan,
};
exports.YEAR = builtIn('YEAR');
exports.YY = builtIn('YY');
exports.YYYY = builtIn('YYYY');
exports.QUARTER = builtIn('QUARTER');
exports.QQ = builtIn('QQ');
exports.Q = builtIn('Q');
exports.MONTH = builtIn('MONTH');
exports.MM = builtIn('MM');
exports.M = builtIn('M');
exports.DAYOFYEAR = builtIn('DAYOFYEAR');
exports.DY = builtIn('DY');
exports.Y = builtIn('Y');
exports.DAY = builtIn('DAY');
exports.DD = builtIn('DD');
exports.D = builtIn('D');
exports.WEEK = builtIn('WEEK');
exports.WK = builtIn('WK');
exports.WW = builtIn('WW');
exports.WEEKDAY = builtIn('WEEKDAY');
exports.DW = builtIn('DW');
exports.HOUR = builtIn('HOUR');
exports.HH = builtIn('HH');
exports.MINUTE = builtIn('MINUTE');
exports.MI = builtIn('MI');
exports.N = builtIn('N');
exports.SECOND = builtIn('SECOND');
exports.SS = builtIn('SS');
exports.S = builtIn('S');
exports.MILLISECOND = builtIn('MILLISECOND');
exports.MS = builtIn('MS');
/**
* 日期格式部分
*/
exports.DATE_PART = {
YEAR: exports.YEAR,
YY: exports.YY,
YYYY: exports.YYYY,
QUARTER: exports.QUARTER,
QQ: exports.QQ,
Q: exports.Q,
MONTH: exports.MONTH,
MM: exports.MM,
M: exports.M,
DAYOFYEAR: exports.DAYOFYEAR,
DY: exports.DY,
Y: exports.Y,
DAY: exports.DAY,
DD: exports.DD,
D: exports.D,
WEEK: exports.WEEK,
WK: exports.WK,
WW: exports.WW,
WEEKDAY: exports.WEEKDAY,
DW: exports.DW,
HOUR: exports.HOUR,
HH: exports.HH,
MINUTE: exports.MINUTE,
MI: exports.MI,
N: exports.N,
SECOND: exports.SECOND,
SS: exports.SS,
S: exports.S,
MILLISECOND: exports.MILLISECOND,
MS: exports.MS,
};
/**
* 最后一次插入数据的标识列值
*/
exports.IDENTITY = variant('@IDENTITY', core_1.DbType.int32);
/**
* 最后一次执行受影响函数
*/
exports.ROWCOUNT = variant('@ROWCOUNT', core_1.DbType.int32);
/**
* 返回自上次启动 Microsoft SQL Server以来连接或试图连接的次数。
*/
exports.CONNECTIONS = variant('@CONNECTIONS', core_1.DbType.int64);
/**
* 返回自上次启动 Microsoft SQL Server以来 CPU 的工作时间,单位为毫秒(基于系统计时器的分辨率)。
*/
exports.CPU_BUSY = variant('@CPU_BUSY', core_1.DbType.float64);
/**
* 返回 SET DATEFIRST 参数的当前值,SET DATEFIRST 参数指明所规定的每周第一天:1 对应星期一,2 对应星期二,依次类推,用 7 对应星期日。
*/
exports.DATEFIRST = variant('@DATEFIRST', core_1.DbType.int32);
/**
* 返回 Microsoft SQL Server自上次启动后用于执行输入和输出操作的时间,单位为毫秒(基于系统计时器的分辨率)。
*/
exports.IO_BUSY = variant('@IO_BUSY', core_1.DbType.int32);
/**
* 返回当前所使用语言的本地语言标识符(ID)。
*/
exports.LANGID = variant('@LANGID', core_1.DbType.int32);
/**
* 返回当前使用的语言名。
*/
exports.LANGUAGE = variant('@LANGUAGE', core_1.DbType.string(core_1.DbType.MAX));
/**
* 返回 Microsoft SQL Server上允许的同时用户连接的最大数。返回的数不必为当前配置的数值。
*/
exports.MAX_CONNECTIONS = variant('@MAX_CONNECTIONS', core_1.DbType.int32);
/**
* 返回 Microsoft SQL Server自上次启动后从网络上读取的输入数据包数目。
*/
exports.PACK_RECEIVED = variant('@PACK_RECEIVED', core_1.DbType.int32);
/**
* 返回 Microsoft SQL Server自上次启动后写到网络上的输出数据包数目。
*/
exports.PACK_SENT = variant('@PACK_SENT', core_1.DbType.int32);
/**
* 返回自 SQL Server 上次启动后,在 Microsoft SQL Server连接上发生的网络数据包错误数。
*/
exports.PACKET_ERRORS = variant('@PACKET_ERRORS', core_1.DbType.int32);
/**
* 返回运行 Microsoft SQL Server的本地服务器名称。
*/
exports.SERVERNAME = variant('@SERVERNAME', core_1.DbType.string(core_1.DbType.MAX));
/**
* 返回 Microsoft SQL Server正在其下运行的注册表键名。若当前实例为默认实例,则 @SERVICENAME 返回 MSSQLServer;若当前实例是命名实例,则该函数返回实例名。
*/
exports.SERVICENAME = variant('@SERVICENAME', core_1.DbType.string(core_1.DbType.MAX));
/**
* 返回当前用户进程的服务器进程标识符 (ID)。
*/
exports.SPID = variant('@SPID', core_1.DbType.int32);
/**
* 返回一刻度的微秒数。
*/
exports.TIMETICKS = variant('@TIMETICKS', core_1.DbType.int32);
/**
* 返回 Microsoft SQL Server自上次启动后,所遇到的磁盘读/写错误数。
*/
exports.TOTAL_ERRORS = variant('@TOTAL_ERRORS', core_1.DbType.int32);
/**
* 返回 Microsoft SQL Server自上次启动后写入磁盘的次数。
*/
exports.TOTAL_WRITE = variant('@TOTAL_WRITE', core_1.DbType.int32);
/**
* 返回 Microsoft SQL Server当前安装的日期、版本和处理器类型。
*/
exports.VERSION = variant('@VERSION', core_1.DbType.string(core_1.DbType.MAX));
/**
* 返回 Microsoft SQL Server自上次启动后读取磁盘(不是读取高速缓存)的次数。
*/
exports.TOTAL_READ = variant('@TOTAL_READ', core_1.DbType.int32);
/**
* 系统变量
*/
exports.VARIANTS = {
/**
* 最后一次插入数据的标识列值
*/
IDENTITY: exports.IDENTITY,
/**
* 最后一次执行受影响函数
*/
ROWCOUNT: exports.ROWCOUNT,
/**
* 返回自上次启动 Microsoft SQL Server以来连接或试图连接的次数。
*/
CONNECTIONS: exports.CONNECTIONS,
/**
* 返回自上次启动 Microsoft SQL Server以来 CPU 的工作时间,单位为毫秒(基于系统计时器的分辨率)。
*/
CPU_BUSY: exports.CPU_BUSY,
/**
* 返回 SET DATEFIRST 参数的当前值,SET DATEFIRST 参数指明所规定的每周第一天:1 对应星期一,2 对应星期二,依次类推,用 7 对应星期日。
*/
DATEFIRST: exports.DATEFIRST,
/**
* 返回 Microsoft SQL Server自上次启动后用于执行输入和输出操作的时间,单位为毫秒(基于系统计时器的分辨率)。
*/
IO_BUSY: exports.IO_BUSY,
/**
* 返回当前所使用语言的本地语言标识符(ID)。
*/
LANGID: exports.LANGID,
/**
* 返回当前使用的语言名。
*/
LANGUAGE: exports.LANGUAGE,
/**
* 返回 Microsoft SQL Server上允许的同时用户连接的最大数。返回的数不必为当前配置的数值。
*/
MAX_CONNECTIONS: exports.MAX_CONNECTIONS,
/**
* 返回 Microsoft SQL Server自上次启动后从网络上读取的输入数据包数目。
*/
PACK_RECEIVED: exports.PACK_RECEIVED,
/**
* 返回 Microsoft SQL Server自上次启动后写到网络上的输出数据包数目。
*/
PACK_SENT: exports.PACK_SENT,
/**
* 返回自 SQL Server 上次启动后,在 Microsoft SQL Server连接上发生的网络数据包错误数。
*/
PACKET_ERRORS: exports.PACKET_ERRORS,
/**
* 返回运行 Microsoft SQL Server的本地服务器名称。
*/
SERVERNAME: exports.SERVERNAME,
/**
* 返回 Microsoft SQL Server正在其下运行的注册表键名。若当前实例为默认实例,则 @SERVICENAME 返回 MSSQLServer;若当前实例是命名实例,则该函数返回实例名。
*/
SERVICENAME: exports.SERVICENAME,
/**
* 返回当前用户进程的服务器进程标识符 (ID)。
*/
SPID: exports.SPID,
/**
* 返回一刻度的微秒数。
*/
TIMETICKS: exports.TIMETICKS,
/**
* 返回 Microsoft SQL Server自上次启动后,所遇到的磁盘读/写错误数。
*/
TOTAL_ERRORS: exports.TOTAL_ERRORS,
/**
* 返回 Microsoft SQL Server自上次启动后写入磁盘的次数。
*/
TOTAL_WRITE: exports.TOTAL_WRITE,
/**
* 返回 Microsoft SQL Server当前安装的日期、版本和处理器类型。
*/
VERSION: exports.VERSION,
/**
* 返回 Microsoft SQL Server自上次启动后读取磁盘(不是读取高速缓存)的次数。
*/
TOTAL_READ: exports.TOTAL_READ,
};
// const text = Object.assign(function(length: number | 'MAX' | 'max'): DbType {
// return DbType.raw(`text(${length})`)
// }, {
// })
// const x: Raw = text;
function defaultType(type, builder) {
const result = Object.assign(builder, type);
Object.setPrototypeOf(result, Object.getPrototypeOf(type));
return result;
}
exports.MssqlDbType = {
bit: core_1.DbType.raw('bit'),
decimal(p, s) {
return core_1.DbType.raw(`decimal(${p}` + (s !== undefined ? `, ${s}` : '') + ')');
},
numeric(p, s) {
return core_1.DbType.raw(`numeric(${p}` + (s !== undefined ? `, ${s}` : '') + ')');
},
money: core_1.DbType.raw('money'),
smallmoney: core_1.DbType.raw('smallmoney'),
tinyint: core_1.DbType.raw('tinyint'),
smallint: core_1.DbType.raw('smallint'),
int: core_1.DbType.raw('int'),
bigint: core_1.DbType.raw('bigint'),
float: defaultType(core_1.DbType.raw('FLOAT32'), (n) => core_1.DbType.raw(`float(${n})`)),
real: core_1.DbType.raw('real'),
date: core_1.DbType.raw('date'),
time: defaultType(core_1.DbType.raw('time'), (s) => core_1.DbType.raw(`time(${s})`)),
datetime: core_1.DbType.raw('datetime'),
smalldatetime: core_1.DbType.raw('smalldatetime'),
datetime2: defaultType(core_1.DbType.raw('datetime2'), (p) => core_1.DbType.raw(`datetime2(${p})`)),
datetimeoffset: defaultType(core_1.DbType.raw('datetimeoffset'), (p) => core_1.DbType.raw(`datetimeoffset(${p})`)),
char: defaultType(core_1.DbType.raw('char'), (l) => core_1.DbType.raw(`char(${l})`)),
nchar: defaultType(core_1.DbType.raw('nchar'), (l) => core_1.DbType.raw(`nchar(${l})`)),
varchar: defaultType(core_1.DbType.raw('varchar'), (l) => core_1.DbType.raw(`varchar(${l})`)),
nvarchar: defaultType(core_1.DbType.raw('nvarchar'), (l) => core_1.DbType.raw(`nvarchar(${l})`)),
/**
* @deprecated 该类型在未来版本将被删除
*/
text: core_1.DbType.raw(`text`),
/**
* @deprecated 该类型在未来版本将被删除
*/
ntext: core_1.DbType.raw(`text`),
/**
* @deprecated 该类型在未来版本将被删除
*/
image: core_1.DbType.raw(`image`),
binary: defaultType(core_1.DbType.raw('binary'), (l) => core_1.DbType.raw(`binary(${l})`)),
varbinary: defaultType(core_1.DbType.raw('varbinary'), (l) => core_1.DbType.raw(`varbinary(${l})`)),
};
function convert(type, expr, styleId) {
const typeDesc = builtIn((0, types_1.sqlifyDbType)(type));
if (styleId === undefined) {
return func('CONVERT', true).invokeAsScalar(typeDesc, expr);
}
else {
return func('CONVERT', true).invokeAsScalar(typeDesc, expr, styleId);
}
}
exports.convert = convert;
exports.format = makeInvoke('scalar', 'FORMAT', true);
/**
* 获取当前数据库名称
*/
exports.db_name = makeInvoke('scalar', 'db_name', true);
/**
* 获取当前架构名称
*/
exports.schema_name = makeInvoke('scalar', 'schema_name', true);
/**
* 获取对象ID
*/
exports.object_id = makeInvoke('scalar', 'object_id', true);
/**
* 通过对象ID获取对象名称
*/
exports.object_name = makeInvoke('scalar', 'object_id', true);
/**
* 获取对象定义代码
*/
exports.object_definition = makeInvoke('scalar', 'object_definition', true);
/**
* 获取数据库的上级ID
*/
exports.database_principal_id = makeInvoke('scalar', 'database_principal_id', true);
/**
* 获取数据库的上级ID
*/
exports.db_id = makeInvoke('scalar', 'db_id', true);
/**
* 系统重命名函数
*/
exports.sp_rename = makeExec('sp_rename', true);
exports.sp_addextendedproperty = makeExec({ name: 'sp_addextendedproperty', schema: 'sys' }, false);
exports.sp_dropextendedproperty = makeExec({ name: 'sp_addextendedproperty', schema: 'sys' }, true);
exports.sp_updateextendedproperty = makeExec({ name: 'sp_updateextendedproperty', schema: 'sys' }, true);