UNPKG

lubejs-mssql

Version:

The lubejs driver for mssql.

467 lines (466 loc) 20.2 kB
"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);