Skip to content

Commit ee9b2ad

Browse files
author
Andrey Sidorov
committed
WIP: pass encoding to writers and readers
1 parent c7e6ad6 commit ee9b2ad

File tree

6 files changed

+23
-22
lines changed

6 files changed

+23
-22
lines changed

lib/commands/server_handshake.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ ServerHandshake.prototype.dispatchCommands = function (packet, connection) {
9999

100100
case CommandCode.QUERY:
101101
if (connection.listeners('query').length) {
102-
var query = packet.readString(encoding);
102+
var query = packet.readString(undefined, encoding);
103103
connection.emit('query', query);
104104
} else {
105105
connection.writeError({

lib/compile_text_parser.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -125,24 +125,24 @@ function readCodeFor (type, charset, config, options) {
125125
if (config.decimalNumbers) {
126126
return 'packet.parseLengthCodedFloat()';
127127
}
128-
return 'packet.readLengthCodedString()';
128+
return 'packet.readLengthCodedString("ascii")';
129129
case Types.DATE:
130130
if (config.dateStrings) {
131-
return 'packet.readLengthCodedString()';
131+
return 'packet.readLengthCodedString("ascii")';
132132
}
133133
return 'packet.parseDate()';
134134
case Types.DATETIME:
135135
case Types.TIMESTAMP:
136136
if (config.dateStrings) {
137-
return 'packet.readLengthCodedString()';
137+
return 'packet.readLengthCodedString("ascii")';
138138
}
139139
return 'packet.parseDateTime()';
140140
case Types.TIME:
141-
return 'packet.readLengthCodedString()';
141+
return 'packet.readLengthCodedString("ascii")';
142142
case Types.GEOMETRY:
143143
return 'packet.parseGeometryValue()';
144144
case Types.JSON:
145-
return 'JSON.parse(packet.readLengthCodedString())';
145+
return 'JSON.parse(packet.readLengthCodedString("' + CharsetToEncoding[charset] + '"))';
146146
default:
147147
if (charset == Charsets.BINARY) {
148148
return 'packet.readLengthCodedBuffer()';

lib/connection.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ function Connection (opts)
7777

7878
this._outOfOrderPackets = [];
7979

80-
this.stream.once('error', function(err) {
80+
this.stream.once('error', function (err) {
8181
connection._handleNetworkError(err);
8282
});
8383

@@ -109,15 +109,15 @@ function Connection (opts)
109109
connection.threadId = handshakeCommand.handshake.connectionId;
110110
connection.emit('connect', handshakeCommand.handshake);
111111
});
112-
handshakeCommand.on('error', function(err) {
112+
handshakeCommand.on('error', function (err) {
113113
connection._notifyError(err);
114114
});
115115
this.addCommand(handshakeCommand);
116116
}
117117
}
118118
util.inherits(Connection, EventEmitter);
119119

120-
Connection.prototype._handleNetworkError = function(err) {
120+
Connection.prototype._handleNetworkError = function (err) {
121121
var connection = this;
122122
err.fatal = true;
123123
// stop receiving packets
@@ -202,24 +202,24 @@ if (tls.TLSSocket) {
202202
});
203203

204204
var rejectUnauthorized = this.config.ssl.rejectUnauthorized;
205-
var secureEstablished = false;
206-
var secureSocket = new tls.TLSSocket(connection.stream, {
205+
var secureEstablished = false;
206+
var secureSocket = new tls.TLSSocket(connection.stream, {
207207
rejectUnauthorized : rejectUnauthorized,
208208
requestCert : true,
209209
secureContext : secureContext,
210210
isServer : false
211211
});
212212

213213
// error handler for secure socket
214-
secureSocket.on('_tlsError', function(err) {
214+
secureSocket.on('_tlsError', function (err) {
215215
if (secureEstablished) {
216216
connection._handleNetworkError(err);
217217
} else {
218218
onSecure(err);
219219
}
220220
});
221221

222-
secureSocket.on('secure', function() {
222+
secureSocket.on('secure', function () {
223223
secureEstablished = true;
224224
onSecure(rejectUnauthorized ? this.ssl.verifyError() : null);
225225
});
@@ -440,7 +440,7 @@ Connection.prototype.resume = function resume () {
440440
};
441441

442442
Connection.prototype.keyFromFields = function keyFromFields (fields, options) {
443-
var res = (typeof options.nestTables) + '/' + options.nestTables + '/' + options.rowsAsArray +
443+
var res = (typeof options.nestTables) + '/' + options.nestTables + '/' + options.rowsAsArray
444444
+ options.supportBigNumbers + '/' + options.bigNumberStrings;
445445
for (var i = 0; i < fields.length; ++i) {
446446
res += '/' + fields[i].name + ':' + fields[i].columnType + ':' + fields[i].flags;

lib/packets/handshake_response.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ HandshakeResponse.fromPacket = function (packet)
4242
args.maxPacketSize = packet.readInt32();
4343
args.charsetNumber = packet.readInt8();
4444
var encoding = CharsetToEncoding[args.charsetNumber];
45+
args.encoding = encoding;
4546
packet.skip(23);
4647
args.user = packet.readNullTerminatedString(encoding);
4748
var authTokenLength;

lib/packets/text_row.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,22 @@ TextRow.fromPacket = function (packet) {
1616
return new TextRow(columns);
1717
};
1818

19-
TextRow.toPacket = function (column) {
19+
TextRow.toPacket = function (columns, encoding) {
2020
var sequenceId = 0; // TODO remove, this is calculated now in connecton
2121
var buffer, packet;
2222
var length = 0;
23-
column.forEach(function (val) {
23+
columns.forEach(function (val) {
2424
if (val === null || typeof (val) == 'undefined') {
2525
++length;
2626
return;
2727
}
28-
length += Packet.lengthCodedStringLength(val.toString(10), CharsetToEncoding[column.characterSet]);
28+
length += Packet.lengthCodedStringLength(val.toString(10), encoding);
2929
});
3030

3131
buffer = Buffer.allocUnsafe(length + 4);
3232
packet = new Packet(sequenceId, buffer, 0, length + 4);
3333
packet.offset = 4;
34-
column.forEach(function (val) {
34+
columns.forEach(function (val) {
3535
if (val === null) {
3636
packet.writeNull();
3737
return;
@@ -40,7 +40,7 @@ TextRow.toPacket = function (column) {
4040
packet.writeInt8(0);
4141
return;
4242
}
43-
packet.writeLengthCodedString(val.toString(10), CharsetToEncoding[column.characterSet]);
43+
packet.writeLengthCodedString(val.toString(10), encoding);
4444
});
4545
return packet;
4646
};

test/unit/packets/test-text-row.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ var assert = require('assert');
22
var TextRow = require('../../../lib/packets/text_row.js');
33

44
// simple
5-
var packet = TextRow.toPacket(['Hello', 'World']);
5+
var packet = TextRow.toPacket(['Hello', 'World'], 'cesu8');
66
assert.equal(packet.buffer.toString('hex', 4), '0548656c6c6f05576f726c64');
77

88
// Russian (unicode)
9-
var packet = TextRow.toPacket(['Ну,', 'погоди!']);
9+
var packet = TextRow.toPacket(['Ну,', 'погоди!'], 'cesu8');
1010
assert.equal(packet.buffer.toString('hex', 4), '05d09dd1832c0dd0bfd0bed0b3d0bed0b4d0b821');
1111

1212
// Long > 256 byte
13-
var packet = TextRow.toPacket(['Пушкин родился 26 мая (6 июня) 1799 г. в Москве. В метрической книге церкви Богоявления в Елохове (сейчас на её месте находится Богоявленский собор в Елохове) на дату 8 июня 1799 г.']);
13+
var packet = TextRow.toPacket(['Пушкин родился 26 мая (6 июня) 1799 г. в Москве. В метрической книге церкви Богоявления в Елохове (сейчас на её месте находится Богоявленский собор в Елохове) на дату 8 июня 1799 г.'], 'cesu8');
1414
assert.equal(
1515
packet.buffer.toString('hex', 4),
1616
'fc3801d09fd183d188d0bad0b8d0bd20d180d0bed0b4d0b8d0bbd181d18f20323620d0bcd0b0d18f20283620d0b8d18ed0bdd18f29203137393920d0b32e20d0b220d09cd0bed181d0bad0b2d0b52e20d09220d0bcd0b5d182d180d0b8d187d0b5d181d0bad0bed0b920d0bad0bdd0b8d0b3d0b520d186d0b5d180d0bad0b2d0b820d091d0bed0b3d0bed18fd0b2d0bbd0b5d0bdd0b8d18f20d0b220d095d0bbd0bed185d0bed0b2d0b52028d181d0b5d0b9d187d0b0d18120d0bdd0b020d0b5d19120d0bcd0b5d181d182d0b520d0bdd0b0d185d0bed0b4d0b8d182d181d18f20d091d0bed0b3d0bed18fd0b2d0bbd0b5d0bdd181d0bad0b8d0b920d181d0bed0b1d0bed18020d0b220d095d0bbd0bed185d0bed0b2d0b52920d0bdd0b020d0b4d0b0d182d183203820d0b8d18ed0bdd18f203137393920d0b32e'

0 commit comments

Comments
 (0)