tedious 2.2.2 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +1 -1
  2. package/lib/bulk-load.js +1 -1
  3. package/lib/connection.js +149 -132
  4. package/lib/data-type.js +147 -1684
  5. package/lib/data-types/bigint.js +46 -0
  6. package/lib/data-types/binary.js +57 -0
  7. package/lib/data-types/bit.js +38 -0
  8. package/lib/data-types/bitn.js +8 -0
  9. package/lib/data-types/char.js +72 -0
  10. package/lib/data-types/date.js +47 -0
  11. package/lib/data-types/datetime.js +68 -0
  12. package/lib/data-types/datetime2.js +104 -0
  13. package/lib/data-types/datetimen.js +8 -0
  14. package/lib/data-types/datetimeoffset.js +90 -0
  15. package/lib/data-types/decimal.js +88 -0
  16. package/lib/data-types/decimaln.js +10 -0
  17. package/lib/data-types/float.js +38 -0
  18. package/lib/data-types/floatn.js +8 -0
  19. package/lib/data-types/image.js +46 -0
  20. package/lib/data-types/int.js +41 -0
  21. package/lib/data-types/intn.js +8 -0
  22. package/lib/data-types/money.js +38 -0
  23. package/lib/data-types/moneyn.js +8 -0
  24. package/lib/data-types/nchar.js +72 -0
  25. package/lib/data-types/ntext.js +11 -0
  26. package/lib/data-types/null.js +7 -0
  27. package/lib/data-types/numeric.js +88 -0
  28. package/lib/data-types/numericn.js +10 -0
  29. package/lib/data-types/nvarchar.js +86 -0
  30. package/lib/data-types/real.js +38 -0
  31. package/lib/data-types/smalldatetime.js +60 -0
  32. package/lib/data-types/smallint.js +41 -0
  33. package/lib/data-types/smallmoney.js +41 -0
  34. package/lib/data-types/sql-variant.js +12 -0
  35. package/lib/data-types/text.js +51 -0
  36. package/lib/data-types/time.js +94 -0
  37. package/lib/data-types/tinyint.js +41 -0
  38. package/lib/data-types/tvp.js +83 -0
  39. package/lib/data-types/udt.js +8 -0
  40. package/lib/data-types/uniqueidentifier.js +45 -0
  41. package/lib/data-types/varbinary.js +77 -0
  42. package/lib/data-types/varchar.js +86 -0
  43. package/lib/data-types/xml.js +8 -0
  44. package/lib/instance-lookup.js +8 -7
  45. package/lib/message-io.js +1 -1
  46. package/lib/packet.js +2 -2
  47. package/lib/prelogin-payload.js +6 -6
  48. package/lib/request.js +14 -10
  49. package/lib/tracking-buffer/writable-tracking-buffer.js +29 -31
  50. package/lib/value-parser.js +5 -5
  51. package/package.json +5 -7
@@ -0,0 +1,46 @@
1
+ 'use strict';
2
+
3
+ var IntN = require('./intn');
4
+
5
+ module.exports = {
6
+ id: 0x7F,
7
+ type: 'INT8',
8
+ name: 'BigInt',
9
+
10
+ declaration: function declaration() {
11
+ return 'bigint';
12
+ },
13
+
14
+ writeTypeInfo: function writeTypeInfo(buffer) {
15
+ buffer.writeUInt8(IntN.id);
16
+ buffer.writeUInt8(8);
17
+ },
18
+
19
+ writeParameterData: function writeParameterData(buffer, parameter) {
20
+ if (parameter.value != null) {
21
+ var val = typeof parameter.value !== 'number' ? parameter.value : parseInt(parameter.value);
22
+ buffer.writeUInt8(8);
23
+ buffer.writeInt64LE(val);
24
+ } else {
25
+ buffer.writeUInt8(0);
26
+ }
27
+ },
28
+
29
+ validate: function validate(value) {
30
+ if (value == null) {
31
+ return null;
32
+ }
33
+ if (isNaN(value)) {
34
+ return new TypeError('Invalid number.');
35
+ }
36
+ if (value < -9007199254740991 || value > 9007199254740991) {
37
+ // Number.MIN_SAFE_INTEGER = -9007199254740991
38
+ // Number.MAX_SAFE_INTEGER = 9007199254740991
39
+ // 9007199254740991 = (2**53) - 1
40
+ // Can't use Number.MIN_SAFE_INTEGER and Number.MAX_SAFE_INTEGER directly though
41
+ // as these constants are not available in node 0.10.
42
+ return new TypeError('Value must be between -9007199254740991 and 9007199254740991, inclusive.' + ' For bigger numbers, use VarChar type.');
43
+ }
44
+ return value;
45
+ }
46
+ };
@@ -0,0 +1,57 @@
1
+ 'use strict';
2
+
3
+ var NULL = (1 << 16) - 1;
4
+
5
+ module.exports = {
6
+ id: 0xAD,
7
+ type: 'BIGBinary',
8
+ name: 'Binary',
9
+ dataLengthLength: 2,
10
+ maximumLength: 8000,
11
+
12
+ declaration: function declaration(parameter) {
13
+ var length;
14
+ if (parameter.length) {
15
+ length = parameter.length;
16
+ } else if (parameter.value != null) {
17
+ length = parameter.value.length || 1;
18
+ } else if (parameter.value === null && !parameter.output) {
19
+ length = 1;
20
+ } else {
21
+ length = this.maximumLength;
22
+ }
23
+ return 'binary(' + length + ')';
24
+ },
25
+
26
+ resolveLength: function resolveLength(parameter) {
27
+ if (parameter.value != null) {
28
+ return parameter.value.length;
29
+ } else {
30
+ return this.maximumLength;
31
+ }
32
+ },
33
+
34
+ writeTypeInfo: function writeTypeInfo(buffer, parameter) {
35
+ buffer.writeUInt8(this.id);
36
+ buffer.writeUInt16LE(parameter.length);
37
+ },
38
+
39
+ writeParameterData: function writeParameterData(buffer, parameter) {
40
+ if (parameter.value != null) {
41
+ buffer.writeUInt16LE(parameter.length);
42
+ buffer.writeBuffer(parameter.value.slice(0, Math.min(parameter.length, this.maximumLength)));
43
+ } else {
44
+ buffer.writeUInt16LE(NULL);
45
+ }
46
+ },
47
+
48
+ validate: function validate(value) {
49
+ if (value == null) {
50
+ return null;
51
+ }
52
+ if (!Buffer.isBuffer(value)) {
53
+ return new TypeError('Invalid buffer.');
54
+ }
55
+ return value;
56
+ }
57
+ };
@@ -0,0 +1,38 @@
1
+ 'use strict';
2
+
3
+ var BitN = require('./bitn');
4
+
5
+ module.exports = {
6
+ id: 0x32,
7
+ type: 'BIT',
8
+ name: 'Bit',
9
+
10
+ declaration: function declaration() {
11
+ return 'bit';
12
+ },
13
+
14
+ writeTypeInfo: function writeTypeInfo(buffer) {
15
+ buffer.writeUInt8(BitN.id);
16
+ buffer.writeUInt8(1);
17
+ },
18
+
19
+ writeParameterData: function writeParameterData(buffer, parameter) {
20
+ if (typeof parameter.value === 'undefined' || parameter.value === null) {
21
+ buffer.writeUInt8(0);
22
+ } else {
23
+ buffer.writeUInt8(1);
24
+ buffer.writeUInt8(parameter.value ? 1 : 0);
25
+ }
26
+ },
27
+
28
+ validate: function validate(value) {
29
+ if (value == null) {
30
+ return null;
31
+ }
32
+ if (value) {
33
+ return true;
34
+ } else {
35
+ return false;
36
+ }
37
+ }
38
+ };
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ module.exports = {
4
+ id: 0x68,
5
+ type: 'BITN',
6
+ name: 'BitN',
7
+ dataLengthLength: 1
8
+ };
@@ -0,0 +1,72 @@
1
+ 'use strict';
2
+
3
+ var NULL = (1 << 16) - 1;
4
+
5
+ module.exports = {
6
+ id: 0xAF,
7
+ type: 'BIGCHAR',
8
+ name: 'Char',
9
+ hasCollation: true,
10
+ dataLengthLength: 2,
11
+ maximumLength: 8000,
12
+
13
+ declaration: function declaration(parameter) {
14
+ var length = void 0;
15
+ if (parameter.length) {
16
+ length = parameter.length;
17
+ } else if (parameter.value != null) {
18
+ length = parameter.value.toString().length || 1;
19
+ } else if (parameter.value === null && !parameter.output) {
20
+ length = 1;
21
+ } else {
22
+ length = this.maximumLength;
23
+ }
24
+
25
+ if (length < this.maximumLength) {
26
+ return 'char(' + length + ')';
27
+ } else {
28
+ return 'char(' + this.maximumLength + ')';
29
+ }
30
+ },
31
+
32
+ resolveLength: function resolveLength(parameter) {
33
+ if (parameter.length != null) {
34
+ return parameter.length;
35
+ } else if (parameter.value != null) {
36
+ if (Buffer.isBuffer(parameter.value)) {
37
+ return parameter.value.length || 1;
38
+ } else {
39
+ return parameter.value.toString().length || 1;
40
+ }
41
+ } else {
42
+ return this.maximumLength;
43
+ }
44
+ },
45
+
46
+ writeTypeInfo: function writeTypeInfo(buffer, parameter) {
47
+ buffer.writeUInt8(this.id);
48
+ buffer.writeUInt16LE(parameter.length);
49
+ buffer.writeBuffer(new Buffer([0x00, 0x00, 0x00, 0x00, 0x00]));
50
+ },
51
+
52
+ writeParameterData: function writeParameterData(buffer, parameter) {
53
+ if (parameter.value != null) {
54
+ buffer.writeUsVarbyte(parameter.value, 'ascii');
55
+ } else {
56
+ buffer.writeUInt16LE(NULL);
57
+ }
58
+ },
59
+
60
+ validate: function validate(value) {
61
+ if (value == null) {
62
+ return null;
63
+ }
64
+ if (typeof value !== 'string') {
65
+ if (typeof value.toString !== 'function') {
66
+ return TypeError('Invalid string.');
67
+ }
68
+ value = value.toString();
69
+ }
70
+ return value;
71
+ }
72
+ };
@@ -0,0 +1,47 @@
1
+ 'use strict';
2
+
3
+ var YEAR_ONE = new Date(2000, 0, -730118);
4
+ var UTC_YEAR_ONE = Date.UTC(2000, 0, -730118);
5
+
6
+ module.exports = {
7
+ id: 0x28,
8
+ type: 'DATEN',
9
+ name: 'Date',
10
+ dataLengthLength: 1,
11
+ fixedDataLength: 3,
12
+
13
+ declaration: function declaration() {
14
+ return 'date';
15
+ },
16
+
17
+ writeTypeInfo: function writeTypeInfo(buffer) {
18
+ buffer.writeUInt8(this.id);
19
+ },
20
+
21
+ writeParameterData: function writeParameterData(buffer, parameter, options) {
22
+ if (parameter.value != null) {
23
+ buffer.writeUInt8(3);
24
+ if (options.useUTC) {
25
+ buffer.writeUInt24LE(Math.floor((+parameter.value - UTC_YEAR_ONE) / 86400000));
26
+ } else {
27
+ var dstDiff = -(parameter.value.getTimezoneOffset() - YEAR_ONE.getTimezoneOffset()) * 60 * 1000;
28
+ buffer.writeUInt24LE(Math.floor((+parameter.value - YEAR_ONE + dstDiff) / 86400000));
29
+ }
30
+ } else {
31
+ buffer.writeUInt8(0);
32
+ }
33
+ },
34
+
35
+ validate: function validate(value) {
36
+ if (value == null) {
37
+ return null;
38
+ }
39
+ if (!(value instanceof Date)) {
40
+ value = Date.parse(value);
41
+ }
42
+ if (isNaN(value)) {
43
+ return new TypeError('Invalid date.');
44
+ }
45
+ return value;
46
+ }
47
+ };
@@ -0,0 +1,68 @@
1
+ 'use strict';
2
+
3
+ var DateTimeN = require('./datetimen');
4
+
5
+ var EPOCH_DATE = new Date(1900, 0, 1);
6
+ var UTC_EPOCH_DATE = new Date(Date.UTC(1900, 0, 1));
7
+
8
+ module.exports = {
9
+ id: 0x3D,
10
+ type: 'DATETIME',
11
+ name: 'DateTime',
12
+
13
+ declaration: function declaration() {
14
+ return 'datetime';
15
+ },
16
+
17
+ writeTypeInfo: function writeTypeInfo(buffer) {
18
+ buffer.writeUInt8(DateTimeN.id);
19
+ buffer.writeUInt8(8);
20
+ },
21
+
22
+ writeParameterData: function writeParameterData(buffer, parameter, options) {
23
+ if (parameter.value != null) {
24
+ var days = void 0,
25
+ dstDiff = void 0,
26
+ milliseconds = void 0,
27
+ seconds = void 0,
28
+ threeHundredthsOfSecond = void 0;
29
+ if (options.useUTC) {
30
+ days = Math.floor((parameter.value.getTime() - UTC_EPOCH_DATE.getTime()) / (1000 * 60 * 60 * 24));
31
+ seconds = parameter.value.getUTCHours() * 60 * 60;
32
+ seconds += parameter.value.getUTCMinutes() * 60;
33
+ seconds += parameter.value.getUTCSeconds();
34
+ milliseconds = seconds * 1000 + parameter.value.getUTCMilliseconds();
35
+ } else {
36
+ dstDiff = -(parameter.value.getTimezoneOffset() - EPOCH_DATE.getTimezoneOffset()) * 60 * 1000;
37
+ days = Math.floor((parameter.value.getTime() - EPOCH_DATE.getTime() + dstDiff) / (1000 * 60 * 60 * 24));
38
+ seconds = parameter.value.getHours() * 60 * 60;
39
+ seconds += parameter.value.getMinutes() * 60;
40
+ seconds += parameter.value.getSeconds();
41
+ milliseconds = seconds * 1000 + parameter.value.getMilliseconds();
42
+ }
43
+
44
+ threeHundredthsOfSecond = milliseconds / (3 + 1 / 3);
45
+ threeHundredthsOfSecond = Math.round(threeHundredthsOfSecond);
46
+
47
+ buffer.writeUInt8(8);
48
+ buffer.writeInt32LE(days);
49
+
50
+ buffer.writeUInt32LE(threeHundredthsOfSecond);
51
+ } else {
52
+ buffer.writeUInt8(0);
53
+ }
54
+ },
55
+
56
+ validate: function validate(value) {
57
+ if (value == null) {
58
+ return null;
59
+ }
60
+ if (!(value instanceof Date)) {
61
+ value = Date.parse(value);
62
+ }
63
+ if (isNaN(value)) {
64
+ return new TypeError('Invalid date.');
65
+ }
66
+ return value;
67
+ }
68
+ };
@@ -0,0 +1,104 @@
1
+ 'use strict';
2
+
3
+ var YEAR_ONE = new Date(2000, 0, -730118);
4
+ var UTC_YEAR_ONE = Date.UTC(2000, 0, -730118);
5
+
6
+ module.exports = {
7
+ id: 0x2A,
8
+ type: 'DATETIME2N',
9
+ name: 'DateTime2',
10
+ hasScale: true,
11
+ dataLengthLength: 1,
12
+
13
+ dataLengthFromScale: function dataLengthFromScale(scale) {
14
+ switch (scale) {
15
+ case 0:
16
+ case 1:
17
+ case 2:
18
+ return 3;
19
+ case 3:
20
+ case 4:
21
+ return 4;
22
+ case 5:
23
+ case 6:
24
+ case 7:
25
+ return 5;
26
+ }
27
+ },
28
+
29
+ declaration: function declaration(parameter) {
30
+ return 'datetime2(' + this.resolveScale(parameter) + ')';
31
+ },
32
+
33
+ resolveScale: function resolveScale(parameter) {
34
+ if (parameter.scale != null) {
35
+ return parameter.scale;
36
+ } else if (parameter.value === null) {
37
+ return 0;
38
+ } else {
39
+ return 7;
40
+ }
41
+ },
42
+
43
+ writeTypeInfo: function writeTypeInfo(buffer, parameter) {
44
+ buffer.writeUInt8(this.id);
45
+ buffer.writeUInt8(parameter.scale);
46
+ },
47
+
48
+ writeParameterData: function writeParameterData(buffer, parameter, options) {
49
+ if (parameter.value != null) {
50
+ var time = new Date(+parameter.value);
51
+
52
+ var timestamp = void 0;
53
+ if (options.useUTC) {
54
+ timestamp = ((time.getUTCHours() * 60 + time.getUTCMinutes()) * 60 + time.getUTCSeconds()) * 1000 + time.getUTCMilliseconds();
55
+ } else {
56
+ timestamp = ((time.getHours() * 60 + time.getMinutes()) * 60 + time.getSeconds()) * 1000 + time.getMilliseconds();
57
+ }
58
+
59
+ timestamp = timestamp * Math.pow(10, parameter.scale - 3);
60
+ timestamp += (parameter.value.nanosecondDelta != null ? parameter.value.nanosecondDelta : 0) * Math.pow(10, parameter.scale);
61
+ timestamp = Math.round(timestamp);
62
+
63
+ switch (parameter.scale) {
64
+ case 0:
65
+ case 1:
66
+ case 2:
67
+ buffer.writeUInt8(6);
68
+ buffer.writeUInt24LE(timestamp);
69
+ break;
70
+ case 3:
71
+ case 4:
72
+ buffer.writeUInt8(7);
73
+ buffer.writeUInt32LE(timestamp);
74
+ break;
75
+ case 5:
76
+ case 6:
77
+ case 7:
78
+ buffer.writeUInt8(8);
79
+ buffer.writeUInt40LE(timestamp);
80
+ }
81
+ if (options.useUTC) {
82
+ buffer.writeUInt24LE(Math.floor((+parameter.value - UTC_YEAR_ONE) / 86400000));
83
+ } else {
84
+ var dstDiff = -(parameter.value.getTimezoneOffset() - YEAR_ONE.getTimezoneOffset()) * 60 * 1000;
85
+ buffer.writeUInt24LE(Math.floor((+parameter.value - YEAR_ONE + dstDiff) / 86400000));
86
+ }
87
+ } else {
88
+ buffer.writeUInt8(0);
89
+ }
90
+ },
91
+
92
+ validate: function validate(value) {
93
+ if (value == null) {
94
+ return null;
95
+ }
96
+ if (!(value instanceof Date)) {
97
+ value = Date.parse(value);
98
+ }
99
+ if (isNaN(value)) {
100
+ return new TypeError('Invalid date.');
101
+ }
102
+ return value;
103
+ }
104
+ };
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ module.exports = {
4
+ id: 0x6F,
5
+ type: 'DATETIMN',
6
+ name: 'DateTimeN',
7
+ dataLengthLength: 1
8
+ };
@@ -0,0 +1,90 @@
1
+ 'use strict';
2
+
3
+ var UTC_YEAR_ONE = Date.UTC(2000, 0, -730118);
4
+
5
+ module.exports = {
6
+ id: 0x2B,
7
+ type: 'DATETIMEOFFSETN',
8
+ name: 'DateTimeOffset',
9
+ hasScale: true,
10
+ dataLengthLength: 1,
11
+ dataLengthFromScale: function dataLengthFromScale(scale) {
12
+ switch (scale) {
13
+ case 0:
14
+ case 1:
15
+ case 2:
16
+ return 3;
17
+ case 3:
18
+ case 4:
19
+ return 4;
20
+ case 5:
21
+ case 6:
22
+ case 7:
23
+ return 5;
24
+ }
25
+ },
26
+ declaration: function declaration(parameter) {
27
+ return 'datetimeoffset(' + this.resolveScale(parameter) + ')';
28
+ },
29
+ resolveScale: function resolveScale(parameter) {
30
+ if (parameter.scale != null) {
31
+ return parameter.scale;
32
+ } else if (parameter.value === null) {
33
+ return 0;
34
+ } else {
35
+ return 7;
36
+ }
37
+ },
38
+ writeTypeInfo: function writeTypeInfo(buffer, parameter) {
39
+ buffer.writeUInt8(this.id);
40
+ buffer.writeUInt8(parameter.scale);
41
+ },
42
+ writeParameterData: function writeParameterData(buffer, parameter) {
43
+ if (parameter.value != null) {
44
+ var time = new Date(+parameter.value);
45
+ time.setUTCFullYear(1970);
46
+ time.setUTCMonth(0);
47
+ time.setUTCDate(1);
48
+
49
+ var timestamp = time * Math.pow(10, parameter.scale - 3);
50
+ timestamp += (parameter.value.nanosecondDelta != null ? parameter.value.nanosecondDelta : 0) * Math.pow(10, parameter.scale);
51
+ timestamp = Math.round(timestamp);
52
+
53
+ var offset = -parameter.value.getTimezoneOffset();
54
+ switch (parameter.scale) {
55
+ case 0:
56
+ case 1:
57
+ case 2:
58
+ buffer.writeUInt8(8);
59
+ buffer.writeUInt24LE(timestamp);
60
+ break;
61
+ case 3:
62
+ case 4:
63
+ buffer.writeUInt8(9);
64
+ buffer.writeUInt32LE(timestamp);
65
+ break;
66
+ case 5:
67
+ case 6:
68
+ case 7:
69
+ buffer.writeUInt8(10);
70
+ buffer.writeUInt40LE(timestamp);
71
+ }
72
+ buffer.writeUInt24LE(Math.floor((+parameter.value - UTC_YEAR_ONE) / 86400000));
73
+ buffer.writeInt16LE(offset);
74
+ } else {
75
+ buffer.writeUInt8(0);
76
+ }
77
+ },
78
+ validate: function validate(value) {
79
+ if (value == null) {
80
+ return null;
81
+ }
82
+ if (!(value instanceof Date)) {
83
+ value = Date.parse(value);
84
+ }
85
+ if (isNaN(value)) {
86
+ return new TypeError('Invalid date.');
87
+ }
88
+ return value;
89
+ }
90
+ };
@@ -0,0 +1,88 @@
1
+ 'use strict';
2
+
3
+ var DecimalN = require('./decimaln');
4
+
5
+ module.exports = {
6
+ id: 0x37,
7
+ type: 'DECIMAL',
8
+ name: 'Decimal',
9
+ hasPrecision: true,
10
+ hasScale: true,
11
+
12
+ declaration: function declaration(parameter) {
13
+ return 'decimal(' + this.resolvePrecision(parameter) + ', ' + this.resolveScale(parameter) + ')';
14
+ },
15
+
16
+ resolvePrecision: function resolvePrecision(parameter) {
17
+ if (parameter.precision != null) {
18
+ return parameter.precision;
19
+ } else if (parameter.value === null) {
20
+ return 1;
21
+ } else {
22
+ return 18;
23
+ }
24
+ },
25
+
26
+ resolveScale: function resolveScale(parameter) {
27
+ if (parameter.scale != null) {
28
+ return parameter.scale;
29
+ } else {
30
+ return 0;
31
+ }
32
+ },
33
+
34
+ writeTypeInfo: function writeTypeInfo(buffer, parameter) {
35
+ buffer.writeUInt8(DecimalN.id);
36
+ if (parameter.precision <= 9) {
37
+ buffer.writeUInt8(5);
38
+ } else if (parameter.precision <= 19) {
39
+ buffer.writeUInt8(9);
40
+ } else if (parameter.precision <= 28) {
41
+ buffer.writeUInt8(13);
42
+ } else {
43
+ buffer.writeUInt8(17);
44
+ }
45
+ buffer.writeUInt8(parameter.precision);
46
+ buffer.writeUInt8(parameter.scale);
47
+ },
48
+
49
+ writeParameterData: function writeParameterData(buffer, parameter) {
50
+ if (parameter.value != null) {
51
+ var sign = parameter.value < 0 ? 0 : 1;
52
+ var value = Math.round(Math.abs(parameter.value * Math.pow(10, parameter.scale)));
53
+ if (parameter.precision <= 9) {
54
+ buffer.writeUInt8(5);
55
+ buffer.writeUInt8(sign);
56
+ buffer.writeUInt32LE(value);
57
+ } else if (parameter.precision <= 19) {
58
+ buffer.writeUInt8(9);
59
+ buffer.writeUInt8(sign);
60
+ buffer.writeUInt64LE(value);
61
+ } else if (parameter.precision <= 28) {
62
+ buffer.writeUInt8(13);
63
+ buffer.writeUInt8(sign);
64
+ buffer.writeUInt64LE(value);
65
+ buffer.writeUInt32LE(0x00000000);
66
+ } else {
67
+ buffer.writeUInt8(17);
68
+ buffer.writeUInt8(sign);
69
+ buffer.writeUInt64LE(value);
70
+ buffer.writeUInt32LE(0x00000000);
71
+ buffer.writeUInt32LE(0x00000000);
72
+ }
73
+ } else {
74
+ buffer.writeUInt8(0);
75
+ }
76
+ },
77
+
78
+ validate: function validate(value) {
79
+ if (value == null) {
80
+ return null;
81
+ }
82
+ value = parseFloat(value);
83
+ if (isNaN(value)) {
84
+ return new TypeError('Invalid number.');
85
+ }
86
+ return value;
87
+ }
88
+ };
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ module.exports = {
4
+ id: 0x6A,
5
+ type: 'DECIMALN',
6
+ name: 'DecimalN',
7
+ dataLengthLength: 1,
8
+ hasPrecision: true,
9
+ hasScale: true
10
+ };
@@ -0,0 +1,38 @@
1
+ 'use strict';
2
+
3
+ var FloatN = require('./floatn');
4
+
5
+ module.exports = {
6
+ id: 0x3E,
7
+ type: 'FLT8',
8
+ name: 'Float',
9
+
10
+ declaration: function declaration() {
11
+ return 'float';
12
+ },
13
+
14
+ writeTypeInfo: function writeTypeInfo(buffer) {
15
+ buffer.writeUInt8(FloatN.id);
16
+ buffer.writeUInt8(8);
17
+ },
18
+
19
+ writeParameterData: function writeParameterData(buffer, parameter) {
20
+ if (parameter.value != null) {
21
+ buffer.writeUInt8(8);
22
+ buffer.writeDoubleLE(parseFloat(parameter.value));
23
+ } else {
24
+ buffer.writeUInt8(0);
25
+ }
26
+ },
27
+
28
+ validate: function validate(value) {
29
+ if (value == null) {
30
+ return null;
31
+ }
32
+ value = parseFloat(value);
33
+ if (isNaN(value)) {
34
+ return new TypeError('Invalid number.');
35
+ }
36
+ return value;
37
+ }
38
+ };
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ module.exports = {
4
+ id: 0x6D,
5
+ type: 'FLTN',
6
+ name: 'FloatN',
7
+ dataLengthLength: 1
8
+ };