var fs = require('fs');
function readDir() {
var tableList = fs.readdirSync('.');
tableList.splice(0, 1);
for (var i in tableList) {
formatterTable(tableList[i]);
}
}
function formatterTable(tblName) {
var colLen = 0,
typeLen = 0,
nullLen = 'nullable'.length,
defLen = 0,
uniqLen = 'unique'.length,
descLen = 0;
var tblJson = require('./' + tblName);
var colArr = tblJson.columnArray;
for (var i in colArr) {
var arr = colArr[i].split('|');
var len1 = arr[0].trim().length;
var len2 = arr[1].trim().length;
var len3 = arr[3].trim().length;
var bufLen = new Buffer(arr[5].trim()).length;
var strLen = arr[5].trim().length;
var len4 = strLen + Math.floor((bufLen - strLen) / 2) - Math.floor((bufLen - strLen) / 7);
colLen = len1 > colLen ? len1 : colLen;
typeLen = len2 > typeLen ? len2 : typeLen;
defLen = len3 > defLen ? len3 : defLen;
descLen = len4 > descLen ? len4 : descLen;
}
colLen = colLen > 'column'.length ? colLen : 'column'.length;
defLen = defLen > 'default'.length ? defLen : 'default'.length;
descLen = descLen > 'description'.length ? descLen : 'description'.length;
var tableStr = '{\r\n "tableName": "' + tblJson.tableName + '",\r\n\r\n ' +
'"columnFiled": [ "' + header() + '",' + '\r\n ' + '"' + delimiter() + '"],\r\n ' +
'"columnArray": [ ';
var colArrLen = colArr.length - 1;
for (var i in colArr) {
tableStr += '"' + columnStr(colArr[i]) + '"';
if (i < colArrLen) {
tableStr += ',\r\n ';
} else {
tableStr += '\r\n ';
}
}
tableStr += '],\r\n ';
tableStr += '"pkey": "' + tblJson.pkey + '"\r\n';
tableStr += '}';
function header() {
var arr1 = ['Column', 'Type', 'Nullable', 'Default', 'Unique'];
var arr2 = [colLen, typeLen, nullLen, defLen, uniqLen];
var str = '';
for (var i in arr1) {
str += fillIntoSpecifiedLength(arr1[i], arr2[i]) + '|';
}
str += fillIntoSpecifiedLength('Description', descLen);
return str;
}
function delimiter() {
var arr = [colLen, typeLen, nullLen, defLen, uniqLen];
var str = '';
for (var i in arr) {
str += fillIntoSpecifiedLength('-', arr[i], '-') + '+';
}
str += fillIntoSpecifiedLength('-', descLen, '-');
return str;
}
function columnStr(colInfo) {
var str = '';
var arr = colInfo.split('|');
var lenArr = [colLen, typeLen, nullLen, defLen, uniqLen, descLen];
for (var i = 0; i < arr.length - 1; i++) {
str += fillIntoSpecifiedLength(arr[i].trim(), lenArr[i]) + '|';
}
str += fillIntoSpecifiedLength(arr[5].trim(), descLen);
return str;
}
console.log(tableStr);
fs.writeFileSync(tblJson.tableName + '.json', tableStr);
}
function fillIntoSpecifiedLength(str, num, fill) {
var filler = fill || ' ';
var strLen = str.length;
var bufLen = new Buffer(str).length;
if (bufLen > strLen) {
strLen = strLen + ((bufLen - strLen) / 2) - Math.floor((bufLen - strLen) / 7);
} else {
}
str = filler + str;
do {
num--;
str += filler;
} while (num >= strLen);
return str;
}
readDir();