Skip to content

Commit

Permalink
'insert-limit' para #24
Browse files Browse the repository at this point in the history
  • Loading branch information
diegoefe committed Nov 7, 2016
1 parent 2998db5 commit 54fa1bc
Show file tree
Hide file tree
Showing 5 changed files with 91 additions and 56 deletions.
9 changes: 6 additions & 3 deletions bin/fast.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,13 @@ function fastAnalyzeLines(info) {
function fastInsert(outStream, info, line) {
if(line.trim() !=='') {
var row = [txtToSql.separateOneRow(info, line)];
var rows = txtToSql.createAdaptedRows(info, row);
var adaptedRows = txtToSql.createAdaptedRows(info, row);
var insertInto = txtToSql.createInsertInto(info);
var insertValues = txtToSql.createInsertValues(rows, info.columnsInfo).map(function(c) { return insertInto + c + ";"; }).join('\n');
outStream.write('\n'+insertValues);
var insertValues = txtToSql.createInsertValues(info,adaptedRows);
var insertLines = insertValues.map(function(iv) {
return iv.map(function(c) { return insertInto + c + ";"; }).join('\n');
}).join('\n');
outStream.write('\n'+insertLines);
}
}

Expand Down
50 changes: 33 additions & 17 deletions lib/txt-to-sql.js
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,11 @@ function verifyInputParams(info){
info.opts = changing(txtToSql.defaultOpts, info.opts || {});
var errors=[];
if(! info.tableName) { errors.push('undefined table name'); }
if(! info.rawTable) { errors.push('no rawTable in input'); } else if(!(info.rawTable instanceof Buffer)){ errors.push('info.rawTable must be an Buffer');}
if(! info.rawTable) {
errors.push('no rawTable in input');
} else if(!(info.rawTable instanceof Buffer)) {
errors.push('info.rawTable must be an Buffer');
}
if(! (info.opts.columnNamesFormat in formatFunctions)) {
errors.push("inexistent column names format '"+info.opts.columnNamesFormat+"'");
}
Expand All @@ -162,7 +166,7 @@ function verifyInputParams(info){
var precision = parseInt(columnInfo.maxLength)+scale+(scale>0?1:0);
return name + (columnInfo.maxLength<1 ?'':('('+precision+(scale>0 ? ','+scale:'')+')'));
};

info.compactInsertLimit = info.opts.compactInsertLimit || info.outputEngine.compactInsertLimit || txtToSql.defaultOpts.compactInsertLimit;
return info;
}

Expand Down Expand Up @@ -531,6 +535,12 @@ function removeIgnoredLines(info) {
return info;
}

function createInsertInto(info) {
return "insert into "+info.formatedTableName+" ("+info.columnsInfo.map(function(columnInfo){
return columnInfo.name;
}).join(', ')+") values";
}

function createAdaptedRows(info, rows) {
return rows.map(function(row, rowIndex) {
return info.columnsInfo.map(function(column, columnIndex) {
Expand All @@ -545,17 +555,17 @@ function createAdaptedRows(info, rows) {
});
}

function createInsertInto(info) {
return "insert into "+info.formatedTableName+" ("+info.columnsInfo.map(function(columnInfo){
return columnInfo.name;
}).join(', ')+") values";
}

function createInsertValues(rows, columnsInfo) {
return rows.map(function(row){
function createInsertValues(info, rows) {
var inserts = [];
var group = [];
rows.forEach(function(row, index){
var owedLength = 0;
return margin+"("+row.map(function(adaptedValue,columnIndex){
var column = columnsInfo[columnIndex];
if(info.compactInsertLimit>0 && ! info.outputEngine.noCompactInsert && index === info.compactInsertLimit) {
inserts.push(group);
group = [];
}
group.push(margin+"("+row.map(function(adaptedValue,columnIndex){
var column = info.columnsInfo[columnIndex];
var recoveredLength = 0;
if(adaptedValue.length>column.columnLength-owedLength){
owedLength=adaptedValue.length-(column.columnLength-owedLength);
Expand All @@ -569,23 +579,29 @@ function createInsertValues(rows, columnsInfo) {
}
}
return column.typeInfo.pad(column.columnLength-recoveredLength, adaptedValue);
}).join(', ')+')';
}).join(', ')+')');
});
inserts.push(group);
return inserts;
}

function generateInsertScript(info){
var insertInto = createInsertInto(info);
var adaptedRows = createAdaptedRows(info, info.rows);
info.columnsInfo.forEach(function(column){
column.columnLength = info.opts.columnAlignedCommas?
Math.min(column.columnLength, info.opts.columnAlignedMaxWidth):0;
});
var insertInto = createInsertInto(info);
var insertValues = createInsertValues(adaptedRows, info.columnsInfo);
var insertValues = createInsertValues(info, adaptedRows);
info.scripts.push({
type:'insert',
sql:info.outputEngine.noCompactInsert ?
insertValues.map(function(c) { return insertInto + c + ";"; }).join('\n') :
insertInto + '\n' +insertValues.join(',\n')+';'
insertValues.map(function(iv) {
return iv.map(function(c) {return insertInto + c + ";"; }).join('\n');
}).join('\n') :
insertValues.map(function(insertValue) {
return insertInto + '\n' +insertValue.join(',\n')+';';
}).join('\n\n')
});
return info;
}
Expand Down
36 changes: 18 additions & 18 deletions test/fixtures/insert-limit.sql
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,24 @@ create table "insert-limit" (

insert into "insert-limit" ("texto", "numero") values
('uno', 1),
('dos, 2),
('tres, 3),
('cuatro, 4),
('cinco, 5),
('seis, 6),
('siete, 7),
('ocho, 8),
('nueve, 9),
('dos', 2),
('tres', 3),
('cuatro', 4),
('cinco', 5),
('seis', 6),
('siete', 7),
('ocho', 8),
('nueve', 9),
('diez', 10);

insert into "insert-limit" ("texto", "numero") values
('once, 11),
('doce, 12),
('trece, 13),
('catorce, 14),
('quince, 15),
('dieciseis, 16),
('diecisiete, 17),
('dieciocho, 18),
('diecinueve, 19),
('veinte', 20);
('once', 11),
('doce', 12),
('trece', 13),
('catorce', 14),
('quince', 15),
('dieciseis', 16),
('diecisiete', 17),
('dieciocho', 18),
('diecinueve', 19),
('veinte', 20);
2 changes: 1 addition & 1 deletion test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ describe("fixtures", function(){
{name:'with-null-lines'},
{name:'csv-simple'},
{name:'csv-harder'},
{name:'insert-limit', skip:true},
{name:'insert-limit'/*, skip:true*/},
].forEach(function(fixture){
if(fixture.skip) {
it.skip("fixture: "+fixture.name);
Expand Down
50 changes: 33 additions & 17 deletions web/txt-to-sql.js
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,11 @@ function verifyInputParams(info){
info.opts = changing(txtToSql.defaultOpts, info.opts || {});
var errors=[];
if(! info.tableName) { errors.push('undefined table name'); }
if(! info.rawTable) { errors.push('no rawTable in input'); } else if(!(info.rawTable instanceof Buffer)){ errors.push('info.rawTable must be an Buffer');}
if(! info.rawTable) {
errors.push('no rawTable in input');
} else if(!(info.rawTable instanceof Buffer)) {
errors.push('info.rawTable must be an Buffer');
}
if(! (info.opts.columnNamesFormat in formatFunctions)) {
errors.push("inexistent column names format '"+info.opts.columnNamesFormat+"'");
}
Expand All @@ -162,7 +166,7 @@ function verifyInputParams(info){
var precision = parseInt(columnInfo.maxLength)+scale+(scale>0?1:0);
return name + (columnInfo.maxLength<1 ?'':('('+precision+(scale>0 ? ','+scale:'')+')'));
};

info.compactInsertLimit = info.opts.compactInsertLimit || info.outputEngine.compactInsertLimit || txtToSql.defaultOpts.compactInsertLimit;
return info;
}

Expand Down Expand Up @@ -531,6 +535,12 @@ function removeIgnoredLines(info) {
return info;
}

function createInsertInto(info) {
return "insert into "+info.formatedTableName+" ("+info.columnsInfo.map(function(columnInfo){
return columnInfo.name;
}).join(', ')+") values";
}

function createAdaptedRows(info, rows) {
return rows.map(function(row, rowIndex) {
return info.columnsInfo.map(function(column, columnIndex) {
Expand All @@ -545,17 +555,17 @@ function createAdaptedRows(info, rows) {
});
}

function createInsertInto(info) {
return "insert into "+info.formatedTableName+" ("+info.columnsInfo.map(function(columnInfo){
return columnInfo.name;
}).join(', ')+") values";
}

function createInsertValues(rows, columnsInfo) {
return rows.map(function(row){
function createInsertValues(info, rows) {
var inserts = [];
var group = [];
rows.forEach(function(row, index){
var owedLength = 0;
return margin+"("+row.map(function(adaptedValue,columnIndex){
var column = columnsInfo[columnIndex];
if(info.compactInsertLimit>0 && ! info.outputEngine.noCompactInsert && index === info.compactInsertLimit) {
inserts.push(group);
group = [];
}
group.push(margin+"("+row.map(function(adaptedValue,columnIndex){
var column = info.columnsInfo[columnIndex];
var recoveredLength = 0;
if(adaptedValue.length>column.columnLength-owedLength){
owedLength=adaptedValue.length-(column.columnLength-owedLength);
Expand All @@ -569,23 +579,29 @@ function createInsertValues(rows, columnsInfo) {
}
}
return column.typeInfo.pad(column.columnLength-recoveredLength, adaptedValue);
}).join(', ')+')';
}).join(', ')+')');
});
inserts.push(group);
return inserts;
}

function generateInsertScript(info){
var insertInto = createInsertInto(info);
var adaptedRows = createAdaptedRows(info, info.rows);
info.columnsInfo.forEach(function(column){
column.columnLength = info.opts.columnAlignedCommas?
Math.min(column.columnLength, info.opts.columnAlignedMaxWidth):0;
});
var insertInto = createInsertInto(info);
var insertValues = createInsertValues(adaptedRows, info.columnsInfo);
var insertValues = createInsertValues(info, adaptedRows);
info.scripts.push({
type:'insert',
sql:info.outputEngine.noCompactInsert ?
insertValues.map(function(c) { return insertInto + c + ";"; }).join('\n') :
insertInto + '\n' +insertValues.join(',\n')+';'
insertValues.map(function(iv) {
return iv.map(function(c) {return insertInto + c + ";"; }).join('\n');
}).join('\n') :
insertValues.map(function(insertValue) {
return insertInto + '\n' +insertValue.join(',\n')+';';
}).join('\n\n')
});
return info;
}
Expand Down

0 comments on commit 54fa1bc

Please sign in to comment.