|
var assert = require('assert'); |
|
var cradle = require('cradle'); |
|
var program = require('commander'); |
|
|
|
|
|
program |
|
.option('-c, --count [value]', 'Number of documents to bulk insert', int, 1000) |
|
.option('-d, --database [value]', 'Name of database', 'test_bulk_insert') |
|
.option('-h, --host [value]', 'CouchDB host', 'http://localhost') |
|
.option('-p, --port [value]', 'CouchDB port', int, 5984) |
|
.parse(process.argv); |
|
console.log('Using database: %s', program.database); |
|
console.log('Number of documents: %d', program.count); |
|
|
|
var connection = new cradle.Connection({ host: program.host, port: program.port }); |
|
var database = connection.database(program.database); |
|
var saveResult = []; |
|
|
|
// Kick off the script! |
|
start(); |
|
|
|
function createDatabase() { |
|
console.log('Creating database %s.', database.name); |
|
database.create(function (error, result) { |
|
if (error || !result.ok) { |
|
exitWithError(error); |
|
} |
|
console.log('Successfully created database: %s.', database.name); |
|
insertDocuments(); |
|
}); |
|
} |
|
|
|
function destroyDatabase() { |
|
database.exists(function (error, result) { |
|
if (error) { |
|
exitWithError(error); |
|
} |
|
if (result) { |
|
console.log('Database %s already exists. Deleting database.', database.name); |
|
database.destroy(function (error, result) { |
|
if (error || !result.ok) { |
|
exitWithError(error); |
|
} |
|
console.log('Successfully deleted database %s.', database.name); |
|
createDatabase(); |
|
}); |
|
} else { |
|
createDatabase(); |
|
} |
|
}); |
|
} |
|
|
|
function exitWithError(error) { |
|
console.error(error); |
|
process.exit(-1); |
|
} |
|
|
|
function insertDocuments() { |
|
var docs = []; |
|
for (var i = 1; i <= program.count; i += 1) { |
|
var doc = { |
|
name: 'test', |
|
value: i, |
|
timestamp: new Date().toISOString() |
|
}; |
|
docs.push(doc); |
|
} |
|
database.save(docs, function (error, result) { |
|
if (error) { |
|
exitWithError(error); |
|
} |
|
console.log('Successfully inserted %d documents.', result.length); |
|
for (var i = 0; i < program.count; i += 1) { |
|
docs[i]._id = result[i].id; |
|
docs[i]._rev = result[i].rev; |
|
} |
|
saveResult = docs; |
|
verifyResult(); |
|
}); |
|
} |
|
|
|
function int(value) { |
|
return parseInt(value, 10); |
|
} |
|
|
|
function start() { |
|
destroyDatabase(); |
|
} |
|
|
|
function verifyResult() { |
|
var count = 0, errors = 0; |
|
saveResult.forEach(function (doc) { |
|
database.get(doc._id, function (error, result) { |
|
if (error) { |
|
exitWithError(error); |
|
} |
|
count += 1; |
|
if (result.value === doc.value) { |
|
console.log('+ id: %s, expected: %d, actual: %d', doc._id, doc.value, result.value); |
|
} else { |
|
console.error(' Expected document %s to have value %d, but found %d.', doc._id, doc.value, result.value); |
|
errors += 1; |
|
} |
|
if (count === program.count) { |
|
console.log('Done with %d documents.', count); |
|
console.log('Number of errors: %d.', errors); |
|
process.exit(0); |
|
} |
|
}); |
|
}); |
|
} |
|
|