Skip to content

Commit 78de59b

Browse files
committed
Read constants from both MySQL 5 and 8
1 parent b169e14 commit 78de59b

File tree

1 file changed

+33
-15
lines changed

1 file changed

+33
-15
lines changed

tool/generate-error-constants.js

+33-15
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,18 @@ var fs = require('fs');
33
var path = require('path');
44
var script = path.basename(__filename);
55

6-
var srcDir = process.argv[2];
7-
if (!srcDir) {
6+
var srcDir5 = process.argv[2];
7+
var srcDir8 = process.argv[3];
8+
if (!srcDir5 || !srcDir8) {
89
var args = [];
910
args[0] = process.argv[0].indexOf(' ') !== -1
1011
? '"' + process.argv[0] + '"'
1112
: process.argv[0];
1213
args[1] = process.argv[1].indexOf(' ') !== -1
1314
? '"' + process.argv[1] + '"'
1415
: process.argv[1];
15-
args[2] = path.join('path', 'to', 'mysql', 'src');
16+
args[2] = path.join('path', 'to', 'mysql5', 'src');
17+
args[3] = path.join('path', 'to', 'mysql8', 'src');
1618
console.error('Usage: ' + args.join(' '));
1719
process.exit(1);
1820
}
@@ -21,14 +23,26 @@ var codes = [];
2123
var targetFile = path.join(__dirname, '..', 'lib', 'protocol', 'constants', 'errors.js');
2224
var previous = fs.existsSync(targetFile) ? require(targetFile) : {};
2325
var stream = fs.createWriteStream(targetFile);
24-
var version = extractMySqlVersion(srcDir);
26+
var version5 = extractMySqlVersion(srcDir5);
27+
if (!version5.startsWith('5.')){
28+
console.error('Expected ' + srcDir5 + ' to contain MySQL 5.x.x sources, got ' + version5);
29+
process.exit(1);
30+
}
31+
var version8 = extractMySqlVersion(srcDir8);
32+
if (!version8.startsWith('8.')){
33+
console.error('Expected ' + srcDir5 + ' to contain MySQL 8.x.x sources, got ' + version8);
34+
process.exit(1);
35+
}
2536

26-
appendGlobalErrorCodes(srcDir, codes);
27-
appendDatabseErrorCodes(srcDir, codes);
28-
appendSqlErrorCodes(srcDir, codes);
37+
appendGlobalErrorCodes(srcDir5, codes);
38+
appendGlobalErrorCodes(srcDir8, codes);
39+
appendDatabseErrorCodes(srcDir5, codes);
40+
appendDatabseErrorCodes(srcDir8, codes);
41+
appendSqlErrorCodes(srcDir5, codes, path.join(srcDir5, 'sql', 'share', 'errmsg-utf8.txt'));
42+
appendSqlErrorCodes(srcDir8, codes, path.join(srcDir8, 'share', 'messages_to_clients.txt'));
2943
keepUnusedCodes(previous, codes);
3044

31-
stream.write('/**\n * MySQL error constants\n *\n * Extracted from version ' + version + '\n *\n * !! Generated by ' + script + ', do not modify by hand !!\n */\n\n');
45+
stream.write('/**\n * MySQL error constants\n *\n * Extracted from versions ' + version5 + ' and ' + version8 + '\n *\n * !! Generated by ' + script + ', do not modify by hand !!\n */\n\n');
3246

3347
var alignment = codes.reduce(maxLength, 0);
3448
for (var i = 0; i < codes.length; i++) {
@@ -48,6 +62,12 @@ for (var i = 0; i < codes.length; i++) {
4862

4963
console.log('Wrote constants to ' + targetFile);
5064

65+
function keepOldDefinitionIfMarkedObsolete(codes, num, code) {
66+
if (!codes[num] || !code.startsWith('OBSOLETE_')) {
67+
codes[num] = code;
68+
}
69+
}
70+
5171
function appendGlobalErrorCodes(srcDir, codes) {
5272
var headerFile = path.join(srcDir, 'include', 'mysys_err.h');
5373
var code = '';
@@ -70,7 +90,7 @@ function appendGlobalErrorCodes(srcDir, codes) {
7090
break;
7191
}
7292

73-
codes[num] = code;
93+
keepOldDefinitionIfMarkedObsolete(codes, num, code);
7494
}
7595

7696
return codes;
@@ -98,24 +118,22 @@ function appendDatabseErrorCodes(srcDir, codes) {
98118
break;
99119
}
100120

101-
codes[num] = code;
121+
keepOldDefinitionIfMarkedObsolete(codes, num, code);
102122
}
103123

104124
return codes;
105125
}
106126

107-
function appendSqlErrorCodes(srcDir, codes) {
108-
var errorFile = version.startsWith("5.") ?
109-
path.join(srcDir, 'sql', 'share', 'errmsg-utf8.txt') : path.join(srcDir, 'share', 'messages_to_clients.txt');
110-
var contents = fs.readFileSync(errorFile, 'utf-8').replace(/^#.*$/gm,"");
127+
function appendSqlErrorCodes(srcDir, codes, errorFile) {
128+
var contents = fs.readFileSync(errorFile, 'utf-8').replace(/^#.*$/gm, '');
111129
var sections = contents.split(/^start-error-number (\d+)$/m);
112130

113131
for (var i = 1; i < sections.length; i += 2) {
114132
var offset = Number(sections[i]);
115133
var names = sections[i + 1].match(/^([A-Z0-9_]+)/mg).map(fixupCode);
116134

117135
for (var j = 0; j < names.length; j++) {
118-
codes[offset + j] = names[j];
136+
keepOldDefinitionIfMarkedObsolete(codes, offset + j, names[j]);
119137
}
120138
}
121139

0 commit comments

Comments
 (0)