tedious 1.12.3 → 1.14.0

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 (62) hide show
  1. package/README.md +1 -1
  2. package/appveyor.yml +9 -5
  3. package/benchmarks/README.md +33 -0
  4. package/benchmarks/common.js +82 -0
  5. package/benchmarks/index.js +34 -0
  6. package/benchmarks/query/many-result-rows.js +49 -0
  7. package/benchmarks/query/nvarchar-large.js +44 -0
  8. package/benchmarks/query/nvarchar-small.js +44 -0
  9. package/benchmarks/query/varbinary-4.js +42 -0
  10. package/benchmarks/query/varbinary-huge.js +46 -0
  11. package/benchmarks/query/varbinary-large.js +46 -0
  12. package/benchmarks/query/varbinary-small.js +42 -0
  13. package/benchmarks/token-parser/colmetadata-token.js +42 -0
  14. package/benchmarks/token-parser/done-token.js +42 -0
  15. package/benchmarks/token-parser/simple-tokens.js +366 -0
  16. package/lib/all-headers.js +9 -11
  17. package/lib/buffertools.js +17 -13
  18. package/lib/bulk-load.js +196 -169
  19. package/lib/collation.js +80 -2
  20. package/lib/connection.js +1086 -1060
  21. package/lib/data-type.js +450 -253
  22. package/lib/debug.js +57 -51
  23. package/lib/errors.js +40 -55
  24. package/lib/guid-parser.js +12 -36
  25. package/lib/instance-lookup.js +57 -54
  26. package/lib/library.js +3 -2
  27. package/lib/login7-payload.js +187 -180
  28. package/lib/message-io.js +169 -199
  29. package/lib/metadata-parser.js +169 -255
  30. package/lib/ntlm-payload.js +173 -160
  31. package/lib/packet.js +166 -152
  32. package/lib/prelogin-payload.js +170 -160
  33. package/lib/request.js +122 -122
  34. package/lib/rpcrequest-payload.js +64 -38
  35. package/lib/special-stored-procedure.js +3 -2
  36. package/lib/sqlbatch-payload.js +20 -16
  37. package/lib/stream-parser.js +116 -104
  38. package/lib/tds-versions.js +5 -8
  39. package/lib/tedious.js +8 -14
  40. package/lib/token/colmetadata-token-parser.js +79 -125
  41. package/lib/token/done-token-parser.js +47 -129
  42. package/lib/token/env-change-token-parser.js +90 -126
  43. package/lib/token/infoerror-token-parser.js +47 -125
  44. package/lib/token/loginack-token-parser.js +36 -74
  45. package/lib/token/nbcrow-token-parser.js +40 -64
  46. package/lib/token/order-token-parser.js +26 -43
  47. package/lib/token/returnstatus-token-parser.js +11 -23
  48. package/lib/token/returnvalue-token-parser.js +31 -54
  49. package/lib/token/row-token-parser.js +39 -52
  50. package/lib/token/sspi-token-parser.js +14 -32
  51. package/lib/token/stream-parser.js +424 -304
  52. package/lib/token/token-stream-parser.js +39 -34
  53. package/lib/token/token.js +3 -6
  54. package/lib/tracking-buffer/bigint.js +45 -48
  55. package/lib/tracking-buffer/readable-tracking-buffer.js +238 -223
  56. package/lib/tracking-buffer/tracking-buffer.js +3 -9
  57. package/lib/tracking-buffer/writable-tracking-buffer.js +272 -244
  58. package/lib/transaction.js +112 -102
  59. package/lib/value-parser.js +559 -1154
  60. package/package.json +10 -9
  61. package/benchmarks/benchmarks.coffee +0 -122
  62. package/benchmarks/query.coffee +0 -57
package/lib/bulk-load.js CHANGED
@@ -1,40 +1,32 @@
1
- // Generated by CoffeeScript 1.10.0
2
- var BulkLoad,
3
- DONE_STATUS,
4
- EventEmitter,
5
- FLAGS,
6
- TOKEN_TYPE,
7
- WritableTrackingBuffer,
8
- extend = function (child, parent) {
9
- for (var key in parent) {
10
- if (hasProp.call(parent, key)) child[key] = parent[key];
11
- }function ctor() {
12
- this.constructor = child;
13
- }ctor.prototype = parent.prototype;child.prototype = new ctor();child.__super__ = parent.prototype;return child;
14
- },
15
- hasProp = ({}).hasOwnProperty;
16
-
17
- EventEmitter = require('events').EventEmitter;
18
-
19
- WritableTrackingBuffer = require('./tracking-buffer/tracking-buffer').WritableTrackingBuffer;
20
-
21
- TOKEN_TYPE = require('./token/token').TYPE;
22
-
23
- FLAGS = {
1
+ 'use strict';
2
+
3
+ var _get = require('babel-runtime/helpers/get')['default'];
4
+
5
+ var _inherits = require('babel-runtime/helpers/inherits')['default'];
6
+
7
+ var _createClass = require('babel-runtime/helpers/create-class')['default'];
8
+
9
+ var _classCallCheck = require('babel-runtime/helpers/class-call-check')['default'];
10
+
11
+ var EventEmitter = require('events').EventEmitter;
12
+ var WritableTrackingBuffer = require('./tracking-buffer/tracking-buffer').WritableTrackingBuffer;
13
+ var TOKEN_TYPE = require('./token/token').TYPE;
14
+
15
+ var FLAGS = {
24
16
  nullable: 1 << 0,
25
17
  caseSen: 1 << 1,
26
18
  updateableReadWrite: 1 << 2,
27
19
  updateableUnknown: 1 << 3,
28
20
  identity: 1 << 4,
29
- computed: 1 << 5,
30
- fixedLenCLRType: 1 << 8,
31
- sparseColumnSet: 1 << 10,
32
- hidden: 1 << 13,
33
- key: 1 << 14,
34
- nullableUnknown: 1 << 15
21
+ computed: 1 << 5, // introduced in TDS 7.2
22
+ fixedLenCLRType: 1 << 8, // introduced in TDS 7.2
23
+ sparseColumnSet: 1 << 10, // introduced in TDS 7.3.B
24
+ hidden: 1 << 13, // introduced in TDS 7.2
25
+ key: 1 << 14, // introduced in TDS 7.2
26
+ nullableUnknown: 1 << 15 // introduced in TDS 7.2
35
27
  };
36
28
 
37
- DONE_STATUS = {
29
+ var DONE_STATUS = {
38
30
  FINAL: 0x00,
39
31
  MORE: 0x1,
40
32
  ERROR: 0x2,
@@ -44,14 +36,17 @@ DONE_STATUS = {
44
36
  SRVERROR: 0x100
45
37
  };
46
38
 
47
- BulkLoad = (function (superClass) {
48
- extend(BulkLoad, superClass);
39
+ module.exports = (function (_EventEmitter) {
40
+ _inherits(BulkLoad, _EventEmitter);
41
+
42
+ function BulkLoad(table, options1, callback) {
43
+ _classCallCheck(this, BulkLoad);
49
44
 
50
- BulkLoad.prototype.error = null;
45
+ _get(Object.getPrototypeOf(BulkLoad.prototype), 'constructor', this).call(this);
51
46
 
52
- BulkLoad.prototype.canceled = false;
47
+ this.error = undefined;
48
+ this.canceled = false;
53
49
 
54
- function BulkLoad(table, options1, callback) {
55
50
  this.table = table;
56
51
  this.options = options1;
57
52
  this.callback = callback;
@@ -61,149 +56,181 @@ BulkLoad = (function (superClass) {
61
56
  this.firstRowWritten = false;
62
57
  }
63
58
 
64
- BulkLoad.prototype.addColumn = function (name, type, options) {
65
- var column, ref, ref1, ref2;
66
- if (options == null) {
67
- options = {};
68
- }
69
- if (this.firstRowWritten) {
70
- throw new Error('Columns cannot be added to bulk insert after the first row has been written.');
71
- }
72
- column = {
73
- type: type,
74
- name: name,
75
- value: null,
76
- output: options.output || (options.output = false),
77
- length: options.length,
78
- precision: options.precision,
79
- scale: options.scale,
80
- objName: options.objName || name,
81
- nullable: options.nullable
82
- };
83
- if ((type.id & 0x30) === 0x20) {
84
- column.length = (ref = column.length) != null ? ref : typeof type.resolveLength === "function" ? type.resolveLength(column) : void 0;
85
- }
86
- if (type.hasPrecision) {
87
- column.precision = (ref1 = column.precision) != null ? ref1 : typeof type.resolvePrecision === "function" ? type.resolvePrecision(column) : void 0;
88
- }
89
- if (type.hasScale) {
90
- column.scale = (ref2 = column.scale) != null ? ref2 : typeof type.resolveScale === "function" ? type.resolveScale(column) : void 0;
91
- }
92
- this.columns.push(column);
93
- return this.columnsByName[name] = column;
94
- };
95
-
96
- BulkLoad.prototype.addRow = function (row) {
97
- var arr, arrTemp, c, i, j, k, len, len1, ref, results;
98
- this.firstRowWritten = true;
99
- if (arguments.length > 1 || !row || typeof row !== 'object') {
100
- arrTemp = new Array(arguments.length);
101
- for (i = j = 0, len = arguments.length; j < len; i = ++j) {
102
- c = arguments[i];
103
- arrTemp[i] = c;
59
+ _createClass(BulkLoad, [{
60
+ key: 'addColumn',
61
+ value: function addColumn(name, type, options) {
62
+ if (options == null) {
63
+ options = {};
104
64
  }
105
- row = arrTemp;
106
- }
107
- this.rowsData.writeUInt8(TOKEN_TYPE.ROW);
108
- arr = row instanceof Array;
109
- ref = this.columns;
110
- results = [];
111
- for (i = k = 0, len1 = ref.length; k < len1; i = ++k) {
112
- c = ref[i];
113
- results.push(c.type.writeParameterData(this.rowsData, {
114
- length: c.length,
115
- scale: c.scale,
116
- precision: c.precision,
117
- value: row[arr ? i : c.objName]
118
- }, this.options));
119
- }
120
- return results;
121
- };
122
-
123
- BulkLoad.prototype.getBulkInsertSql = function () {
124
- var c, i, j, len, ref, sql;
125
- sql = 'insert bulk ' + this.table + '(';
126
- ref = this.columns;
127
- for (i = j = 0, len = ref.length; j < len; i = ++j) {
128
- c = ref[i];
129
- if (i !== 0) {
130
- sql += ', ';
65
+
66
+ if (this.firstRowWritten) {
67
+ throw new Error('Columns cannot be added to bulk insert after the first row has been written.');
131
68
  }
132
- sql += "[" + c.name + "] " + c.type.declaration(c);
69
+
70
+ var column = {
71
+ type: type,
72
+ name: name,
73
+ value: null,
74
+ output: options.output || (options.output = false),
75
+ length: options.length,
76
+ precision: options.precision,
77
+ scale: options.scale,
78
+ objName: options.objName || name,
79
+ nullable: options.nullable
80
+ };
81
+
82
+ if ((type.id & 0x30) === 0x20) {
83
+ if (column.length == undefined && type.resolveLength) {
84
+ column.length = type.resolveLength(column);
85
+ }
86
+ }
87
+
88
+ if (type.hasPrecision) {
89
+ if (column.precision == undefined && type.resolvePrecision) {
90
+ column.precision = type.resolvePrecision(column);
91
+ }
92
+ }
93
+
94
+ if (type.hasScale) {
95
+ if (column.scale == undefined && type.resolveScale) {
96
+ column.scale = type.resolveScale(column);
97
+ }
98
+ }
99
+
100
+ this.columns.push(column);
101
+
102
+ return this.columnsByName[name] = column;
133
103
  }
134
- sql += ')';
135
- return sql;
136
- };
137
-
138
- BulkLoad.prototype.getTableCreationSql = function () {
139
- var c, i, j, len, ref, sql;
140
- sql = 'CREATE TABLE ' + this.table + '(\n';
141
- ref = this.columns;
142
- for (i = j = 0, len = ref.length; j < len; i = ++j) {
143
- c = ref[i];
144
- if (i !== 0) {
145
- sql += ',\n';
104
+ }, {
105
+ key: 'addRow',
106
+ value: function addRow(row) {
107
+ this.firstRowWritten = true;
108
+
109
+ if (arguments.length > 1 || !row || typeof row !== 'object') {
110
+ // convert arguments to array in a way the optimizer can handle
111
+ var arrTemp = new Array(arguments.length);
112
+ for (var i = 0, len = arguments.length; i < len; i++) {
113
+ var c = arguments[i];
114
+ arrTemp[i] = c;
115
+ }
116
+ row = arrTemp;
146
117
  }
147
- sql += "[" + c.name + "] " + c.type.declaration(c);
148
- if (c.nullable !== void 0) {
149
- sql += " " + (c.nullable ? "NULL" : "NOT NULL");
118
+
119
+ // write row token
120
+ this.rowsData.writeUInt8(TOKEN_TYPE.ROW);
121
+
122
+ // write each column
123
+ var arr = row instanceof Array;
124
+ for (var i = 0, len = this.columns.length; i < len; i++) {
125
+ var c = this.columns[i];
126
+ c.type.writeParameterData(this.rowsData, {
127
+ length: c.length,
128
+ scale: c.scale,
129
+ precision: c.precision,
130
+ value: row[arr ? i : c.objName]
131
+ }, this.options);
132
+ }
133
+ }
134
+ }, {
135
+ key: 'getBulkInsertSql',
136
+ value: function getBulkInsertSql() {
137
+ var sql = 'insert bulk ' + this.table + '(';
138
+ for (var i = 0, len = this.columns.length; i < len; i++) {
139
+ var c = this.columns[i];
140
+ if (i !== 0) {
141
+ sql += ', ';
142
+ }
143
+ sql += '[' + c.name + '] ' + c.type.declaration(c);
150
144
  }
145
+ sql += ')';
146
+ return sql;
151
147
  }
152
- sql += '\n)';
153
- return sql;
154
- };
155
-
156
- BulkLoad.prototype.getPayload = function () {
157
- var done, length, metaData, payload, rows, status, tBuf;
158
- metaData = this.getColMetaData();
159
- length = metaData.length;
160
- rows = this.rowsData.data;
161
- length += rows.length;
162
- tBuf = new WritableTrackingBuffer(this.options.tdsVersion < "7_2" ? 9 : 13);
163
- tBuf.writeUInt8(TOKEN_TYPE.DONE);
164
- status = DONE_STATUS.FINAL;
165
- tBuf.writeUInt16LE(status);
166
- tBuf.writeUInt16LE(0);
167
- tBuf.writeUInt32LE(0);
168
- if (this.options.tdsVersion >= "7_2") {
169
- tBuf.writeUInt32LE(0);
148
+ }, {
149
+ key: 'getTableCreationSql',
150
+ value: function getTableCreationSql() {
151
+ var sql = 'CREATE TABLE ' + this.table + '(\n';
152
+ for (var i = 0, len = this.columns.length; i < len; i++) {
153
+ var c = this.columns[i];
154
+ if (i !== 0) {
155
+ sql += ',\n';
156
+ }
157
+ sql += '[' + c.name + '] ' + c.type.declaration(c);
158
+ if (c.nullable !== void 0) {
159
+ sql += ' ' + (c.nullable ? 'NULL' : 'NOT NULL');
160
+ }
161
+ }
162
+ sql += '\n)';
163
+ return sql;
170
164
  }
171
- done = tBuf.data;
172
- length += done.length;
173
- payload = new WritableTrackingBuffer(length);
174
- payload.copyFrom(metaData);
175
- payload.copyFrom(rows);
176
- payload.copyFrom(done);
177
- return payload;
178
- };
179
-
180
- BulkLoad.prototype.getColMetaData = function () {
181
- var c, flags, j, len, ref, tBuf;
182
- tBuf = new WritableTrackingBuffer(100, null, true);
183
- tBuf.writeUInt8(TOKEN_TYPE.COLMETADATA);
184
- tBuf.writeUInt16LE(this.columns.length);
185
- ref = this.columns;
186
- for (j = 0, len = ref.length; j < len; j++) {
187
- c = ref[j];
188
- if (this.options.tdsVersion < "7_2") {
189
- tBuf.writeUInt16LE(0);
190
- } else {
191
- tBuf.writeUInt32LE(0);
165
+ }, {
166
+ key: 'getPayload',
167
+ value: function getPayload() {
168
+ // Create COLMETADATA token
169
+ var metaData = this.getColMetaData();
170
+ var length = metaData.length;
171
+
172
+ // row data
173
+ var rows = this.rowsData.data;
174
+ length += rows.length;
175
+
176
+ // Create DONE token
177
+ // It might be nice to make DoneToken a class if anything needs to create them, but for now, just do it here
178
+ var tBuf = new WritableTrackingBuffer(this.options.tdsVersion < '7_2' ? 9 : 13);
179
+ tBuf.writeUInt8(TOKEN_TYPE.DONE);
180
+ var status = DONE_STATUS.FINAL;
181
+ tBuf.writeUInt16LE(status);
182
+ tBuf.writeUInt16LE(0); // CurCmd (TDS ignores this)
183
+ tBuf.writeUInt32LE(0); // row count - doesn't really matter
184
+ if (this.options.tdsVersion >= '7_2') {
185
+ tBuf.writeUInt32LE(0); // row count is 64 bits in >= TDS 7.2
192
186
  }
193
- flags = FLAGS.updateableReadWrite;
194
- if (c.nullable) {
195
- flags |= FLAGS.nullable;
196
- } else if (c.nullable === void 0 && this.options.tdsVersion >= "7_2") {
197
- flags |= FLAGS.nullableUnknown;
187
+
188
+ var done = tBuf.data;
189
+ length += done.length;
190
+
191
+ // composite payload
192
+ var payload = new WritableTrackingBuffer(length);
193
+ payload.copyFrom(metaData);
194
+ payload.copyFrom(rows);
195
+ payload.copyFrom(done);
196
+ return payload;
197
+ }
198
+ }, {
199
+ key: 'getColMetaData',
200
+ value: function getColMetaData() {
201
+ var tBuf = new WritableTrackingBuffer(100, null, true);
202
+ // TokenType
203
+ tBuf.writeUInt8(TOKEN_TYPE.COLMETADATA);
204
+ // Count
205
+ tBuf.writeUInt16LE(this.columns.length);
206
+
207
+ for (var j = 0, len = this.columns.length; j < len; j++) {
208
+ var c = this.columns[j];
209
+ // UserType
210
+ if (this.options.tdsVersion < '7_2') {
211
+ tBuf.writeUInt16LE(0);
212
+ } else {
213
+ tBuf.writeUInt32LE(0);
214
+ }
215
+
216
+ // Flags
217
+ var flags = FLAGS.updateableReadWrite;
218
+ if (c.nullable) {
219
+ flags |= FLAGS.nullable;
220
+ } else if (c.nullable === void 0 && this.options.tdsVersion >= '7_2') {
221
+ flags |= FLAGS.nullableUnknown;
222
+ }
223
+ tBuf.writeUInt16LE(flags);
224
+
225
+ // TYPE_INFO
226
+ c.type.writeTypeInfo(tBuf, c, this.options);
227
+
228
+ // ColName
229
+ tBuf.writeBVarchar(c.name, 'ucs2');
198
230
  }
199
- tBuf.writeUInt16LE(flags);
200
- c.type.writeTypeInfo(tBuf, c, this.options);
201
- tBuf.writeBVarchar(c.name, 'ucs2');
231
+ return tBuf.data;
202
232
  }
203
- return tBuf.data;
204
- };
233
+ }]);
205
234
 
206
235
  return BulkLoad;
207
- })(EventEmitter);
208
-
209
- module.exports = BulkLoad;
236
+ })(EventEmitter);
package/lib/collation.js CHANGED
@@ -1,5 +1,7 @@
1
- // Generated by CoffeeScript 1.10.0
2
- exports.codepageByLcid = {
1
+ 'use strict';
2
+
3
+ // http://technet.microsoft.com/en-us/library/aa176553(v=sql.80).aspx
4
+ module.exports.codepageByLcid = {
3
5
  0x436: 'CP1252',
4
6
  0x401: 'CP1256',
5
7
  0x801: 'CP1256',
@@ -105,4 +107,80 @@ exports.codepageByLcid = {
105
107
  0x422: 'CP1251',
106
108
  0x420: 'CP1256',
107
109
  0x42A: 'CP1258'
110
+ };
111
+
112
+ module.exports.codepageBySortId = {
113
+ 30: 'CP437', // SQL_Latin1_General_CP437_BIN
114
+ 31: 'CP437', // SQL_Latin1_General_CP437_CS_AS
115
+ 32: 'CP437', // SQL_Latin1_General_CP437_CI_AS
116
+ 33: 'CP437', // SQL_Latin1_General_Pref_CP437_CI_AS
117
+ 34: 'CP437', // SQL_Latin1_General_CP437_CI_AI
118
+ 40: 'CP850', // SQL_Latin1_General_CP850_BIN
119
+ 41: 'CP850', // SQL_Latin1_General_CP850_CS_AS
120
+ 42: 'CP850', // SQL_Latin1_General_CP850_CI_AS
121
+ 43: 'CP850', // SQL_Latin1_General_Pref_CP850_CI_AS
122
+ 44: 'CP850', // SQL_Latin1_General_CP850_CI_AI
123
+ 49: 'CP850', // SQL_1xCompat_CP850_CI_AS
124
+ 51: 'CP1252', // SQL_Latin1_General_Cp1_CS_AS_KI_WI
125
+ 52: 'CP1252', // SQL_Latin1_General_Cp1_CI_AS_KI_WI
126
+ 53: 'CP1252', // SQL_Latin1_General_Pref_Cp1_CI_AS_KI_WI
127
+ 54: 'CP1252', // SQL_Latin1_General_Cp1_CI_AI_KI_WI
128
+ 55: 'CP850', // SQL_AltDiction_CP850_CS_AS
129
+ 56: 'CP850', // SQL_AltDiction_Pref_CP850_CI_AS
130
+ 57: 'CP850', // SQL_AltDiction_CP850_CI_AI
131
+ 58: 'CP850', // SQL_Scandinavian_Pref_CP850_CI_AS
132
+ 59: 'CP850', // SQL_Scandinavian_CP850_CS_AS
133
+ 60: 'CP850', // SQL_Scandinavian_CP850_CI_AS
134
+ 61: 'CP850', // SQL_AltDiction_CP850_CI_AS
135
+ 80: 'CP1250', // SQL_Latin1_General_1250_BIN
136
+ 81: 'CP1250', // SQL_Latin1_General_CP1250_CS_AS
137
+ 82: 'CP1250', // SQL_Latin1_General_Cp1250_CI_AS_KI_WI
138
+ 83: 'CP1250', // SQL_Czech_Cp1250_CS_AS_KI_WI
139
+ 84: 'CP1250', // SQL_Czech_Cp1250_CI_AS_KI_WI
140
+ 85: 'CP1250', // SQL_Hungarian_Cp1250_CS_AS_KI_WI
141
+ 86: 'CP1250', // SQL_Hungarian_Cp1250_CI_AS_KI_WI
142
+ 87: 'CP1250', // SQL_Polish_Cp1250_CS_AS_KI_WI
143
+ 88: 'CP1250', // SQL_Polish_Cp1250_CI_AS_KI_WI
144
+ 89: 'CP1250', // SQL_Romanian_Cp1250_CS_AS_KI_WI
145
+ 90: 'CP1250', // SQL_Romanian_Cp1250_CI_AS_KI_WI
146
+ 91: 'CP1250', // SQL_Croatian_Cp1250_CS_AS_KI_WI
147
+ 92: 'CP1250', // SQL_Croatian_Cp1250_CI_AS_KI_WI
148
+ 93: 'CP1250', // SQL_Slovak_Cp1250_CS_AS_KI_WI
149
+ 94: 'CP1250', // SQL_Slovak_Cp1250_CI_AS_KI_WI
150
+ 95: 'CP1250', // SQL_Slovenian_Cp1250_CS_AS_KI_WI
151
+ 96: 'CP1250', // SQL_Slovenian_Cp1250_CI_AS_KI_WI
152
+ 104: 'CP1251', // SQL_Latin1_General_1251_BIN
153
+ 105: 'CP1251', // SQL_Latin1_General_CP1251_CS_AS
154
+ 106: 'CP1251', // SQL_Latin1_General_CP1251_CI_AS
155
+ 107: 'CP1251', // SQL_Ukrainian_Cp1251_CS_AS_KI_WI
156
+ 108: 'CP1251', // SQL_Ukrainian_Cp1251_CI_AS_KI_WI
157
+ 112: 'CP1253', // SQL_Latin1_General_1253_BIN
158
+ 113: 'CP1253', // SQL_Latin1_General_CP1253_CS_AS
159
+ 114: 'CP1253', // SQL_Latin1_General_CP1253_CI_AS
160
+ 120: 'CP1253', // SQL_MixDiction_CP1253_CS_AS
161
+ 121: 'CP1253', // SQL_AltDiction_CP1253_CS_AS
162
+ 122: 'CP1253', // SQL_AltDiction2_CP1253_CS_AS
163
+ 124: 'CP1253', // SQL_Latin1_General_CP1253_CI_AI
164
+ 128: 'CP1254', // SQL_Latin1_General_1254_BIN
165
+ 129: 'CP1254', // SQL_Latin1_General_Cp1254_CS_AS_KI_WI
166
+ 130: 'CP1254', // SQL_Latin1_General_Cp1254_CI_AS_KI_WI
167
+ 136: 'CP1255', // SQL_Latin1_General_1255_BIN
168
+ 137: 'CP1255', // SQL_Latin1_General_CP1255_CS_AS
169
+ 138: 'CP1255', // SQL_Latin1_General_CP1255_CI_AS
170
+ 144: 'CP1256', // SQL_Latin1_General_1256_BIN
171
+ 145: 'CP1256', // SQL_Latin1_General_CP1256_CS_AS
172
+ 146: 'CP1256', // SQL_Latin1_General_CP1256_CI_AS
173
+ 152: 'CP1257', // SQL_Latin1_General_1257_BIN
174
+ 153: 'CP1257', // SQL_Latin1_General_CP1257_CS_AS
175
+ 154: 'CP1257', // SQL_Latin1_General_CP1257_CI_AS
176
+ 155: 'CP1257', // SQL_Estonian_Cp1257_CS_AS_KI_WI
177
+ 156: 'CP1257', // SQL_Estonian_Cp1257_CI_AS_KI_WI
178
+ 157: 'CP1257', // SQL_Latvian_Cp1257_CS_AS_KI_WI
179
+ 158: 'CP1257', // SQL_Latvian_Cp1257_CI_AS_KI_WI
180
+ 159: 'CP1257', // SQL_Lithuanian_Cp1257_CS_AS_KI_WI
181
+ 160: 'CP1257', // SQL_Lithuanian_Cp1257_CI_AS_KI_WI
182
+ 183: 'CP1252', // SQL_Danish_Pref_Cp1_CI_AS_KI_WI
183
+ 184: 'CP1252', // SQL_SwedishPhone_Pref_Cp1_CI_AS_KI_WI
184
+ 185: 'CP1252', // SQL_SwedishStd_Pref_Cp1_CI_AS_KI_WI
185
+ 186: 'CP1252' // SQL_Icelandic_Pref_Cp1_CI_AS_KI_WI
108
186
  };