UNPKG

mssql2

Version:

Microsoft SQL Server client for Node.js (fork)

105 lines (88 loc) 3.43 kB
TYPES = VarChar: (length) -> type: TYPES.VarChar, length: length NVarChar: (length) -> type: TYPES.NVarChar, length: length Text: -> type: TYPES.Text Int: -> type: TYPES.Int BigInt: -> type: TYPES.BigInt TinyInt: -> type: TYPES.TinyInt SmallInt: -> type: TYPES.SmallInt Bit: -> type: TYPES.Bit Float: -> type: TYPES.Float Numeric: (precision, scale) -> type: TYPES.Numeric, precision: precision, scale: scale Decimal: (precision, scale) -> type: TYPES.Decimal, precision: precision, scale: scale Real: -> type: TYPES.Real Date: -> type: TYPES.Date DateTime: -> type: TYPES.DateTime DateTime2: (scale) -> type: TYPES.DateTime2, scale: scale DateTimeOffset: (scale) -> type: TYPES.DateTimeOffset, scale: scale SmallDateTime: -> type: TYPES.SmallDateTime Time: (scale) -> type: TYPES.Time, scale: scale UniqueIdentifier: -> type: TYPES.UniqueIdentifier SmallMoney: -> type: TYPES.SmallMoney Money: -> type: TYPES.Money Binary: (length) -> type: TYPES.Binary, length: length VarBinary: (length) -> type: TYPES.VarBinary, length: length Image: -> type: TYPES.Image Xml: -> type: TYPES.Xml Char: (length) -> type: TYPES.Char, length: length NChar: (length) -> type: TYPES.NChar, length: length NText: -> type: TYPES.NText TVP: (tvpType) -> type: TYPES.TVP, tvpType: tvpType UDT: -> type: TYPES.UDT Geography: -> type: TYPES.Geography Geometry: -> type: TYPES.Geometry Variant: -> type: TYPES.Variant module.exports.TYPES = TYPES module.exports.DECLARATIONS = {} for key, value of TYPES value.declaration = key.toLowerCase() module.exports.DECLARATIONS[value.declaration] = value do (key, value) -> value.inspect = -> "[sql.#{key}]" module.exports.declare = (type, options) -> switch type when TYPES.VarChar, TYPES.NVarChar, TYPES.VarBinary return "#{type.declaration} (#{if options.length > 8000 then 'MAX' else (options.length ? 'MAX')})" when TYPES.NVarChar return "#{type.declaration} (#{if options.length > 4000 then 'MAX' else (options.length ? 'MAX')})" when TYPES.Char, TYPES.NChar, TYPES.Binary return "#{type.declaration} (#{options.length ? 1})" when TYPES.Decimal, TYPES.Numeric return "#{type.declaration} (#{options.precision ? 18}, #{options.scale ? 0})" when TYPES.Time, TYPES.DateTime2, TYPES.DateTimeOffset return "#{type.declaration} (#{options.scale ? 7})" when TYPES.TVP return "#{options.tvpType} readonly" else return type.declaration module.exports.cast = (value, type, options) -> unless value? then return null switch typeof value when 'string' return "N'#{value.replace(/'/g, '\'\'')}'" when 'number' return value when 'boolean' return if value then 1 else 0 when 'object' if value instanceof Date ns = value.getUTCMilliseconds() / 1000 if value.nanosecondDelta? then ns += value.nanosecondDelta scale = options.scale ? 7 if scale > 0 ns = String(ns).substr(1, scale + 1) else ns = "" return "N'#{value.getUTCFullYear()}-#{zero(value.getUTCMonth() + 1)}-#{zero(value.getUTCDate())} #{zero(value.getUTCHours())}:#{zero(value.getUTCMinutes())}:#{zero(value.getUTCSeconds())}#{ns}'" else if Buffer.isBuffer value return "0x#{value.toString 'hex'}" else return null else return null zero = (value, length = 2) -> value = String(value) if value.length < length for i in [1..length - value.length] value = "0#{value}" value