Comparing version 0.0.10 to 0.0.11
@@ -1,32 +0,47 @@ | ||
var getItem = require('./getItem'), | ||
var async = require('async'), | ||
getItem = require('./getItem'), | ||
db = require('../db') | ||
module.exports = function batchGetItem(data, cb) { | ||
var remaining = 0, responses = {}, table, seenKeys, i, key, keyStr | ||
for (table in data.RequestItems) { | ||
responses[table] = [] | ||
seenKeys = {} | ||
for (i = 0; i < data.RequestItems[table].Keys.length; i++) { | ||
key = data.RequestItems[table].Keys[i] | ||
keyStr = JSON.stringify(key) | ||
if (seenKeys[keyStr]) | ||
return cb(db.validationError('Provided list of item keys contains duplicates')) | ||
seenKeys[keyStr] = true | ||
} | ||
data.RequestItems[table].Keys.forEach(function(key) { | ||
var options = {TableName: table, Key: key} | ||
if (data.RequestItems[table].AttributesToGet) | ||
options.AttributesToGet = data.RequestItems[table].AttributesToGet | ||
getItem(options, checkDone(table)) | ||
remaining++ | ||
var requests = {} | ||
async.series([ | ||
async.each.bind(async, Object.keys(data.RequestItems), addTableRequests), | ||
async.parallel.bind(async, requests), | ||
], function(err, responses) { | ||
if (err) return cb(err) | ||
cb(null, {Responses: responses[1], UnprocessedKeys: {}}) | ||
}) | ||
function addTableRequests(tableName, cb) { | ||
db.getTable(tableName, function(err, table) { | ||
if (err) return cb(err) | ||
var req = data.RequestItems[tableName], i, key, options, gets = [], seenKeys = {} | ||
for (i = 0; i < req.Keys.length; i++) { | ||
key = req.Keys[i] | ||
options = {TableName: tableName, Key: key} | ||
if (req.AttributesToGet) options.AttributesToGet = req.AttributesToGet | ||
gets.push(options) | ||
key = db.validateKey(key, table) | ||
if (key instanceof Error) return cb(key) | ||
if (seenKeys[key]) | ||
return cb(db.validationError('Provided list of item keys contains duplicates')) | ||
seenKeys[key] = true | ||
} | ||
requests[tableName] = function(cb) { | ||
async.map(gets, getItem, function(err, resps) { | ||
if (err) return cb(err) | ||
cb(null, resps.map(function(res) { return res.Item }).filter(function(x) { return x })) | ||
}) | ||
} | ||
cb() | ||
}) | ||
} | ||
function checkDone(table) { | ||
return function(err, item) { | ||
if (err) return cb(err) | ||
if (item.Item) responses[table].push(item.Item) | ||
if (!--remaining) return cb(null, {Responses: responses, UnprocessedKeys: {}}) | ||
} | ||
} | ||
} | ||
@@ -7,5 +7,13 @@ var async = require('async'), | ||
module.exports = function batchWriteItem(data, cb) { | ||
var puts = [], deletes = [] | ||
var actions = [] | ||
function validateTableKeys(tableName, cb) { | ||
async.series([ | ||
async.each.bind(async, Object.keys(data.RequestItems), addTableActions), | ||
async.parallel.bind(async, actions), | ||
], function(err) { | ||
if (err) return cb(err) | ||
cb(null, {UnprocessedItems: {}}) | ||
}) | ||
function addTableActions(tableName, cb) { | ||
db.getTable(tableName, function(err, table) { | ||
@@ -15,23 +23,22 @@ if (err) return cb(err) | ||
var reqs = data.RequestItems[tableName], i, req, key, seenKeys = {} | ||
for (i = 0; i < reqs.length; i++) { | ||
req = reqs[i] | ||
if (req.PutRequest) { | ||
actions.push(putItem.bind(null, {TableName: tableName, Item: req.PutRequest.Item})) | ||
key = db.validateItem(req.PutRequest.Item, table) | ||
if (key instanceof Error) return cb(key) | ||
if (seenKeys[key]) | ||
return cb(db.validationError('Provided list of item keys contains duplicates')) | ||
seenKeys[key] = true | ||
puts.push({TableName: tableName, Item: req.PutRequest.Item}) | ||
} else if (req.DeleteRequest) { | ||
key = db.validateKey(req.DeleteRequest.Key, table) | ||
if (key instanceof Error) return cb(key) | ||
if (seenKeys[key]) | ||
return cb(db.validationError('Provided list of item keys contains duplicates')) | ||
seenKeys[key] = true | ||
actions.push(deleteItem.bind(null, {TableName: tableName, Key: req.DeleteRequest.Key})) | ||
deletes.push({TableName: tableName, Key: req.DeleteRequest.Key}) | ||
key = db.validateKey(req.DeleteRequest.Key, table) | ||
} | ||
if (key instanceof Error) return cb(key) | ||
if (seenKeys[key]) | ||
return cb(db.validationError('Provided list of item keys contains duplicates')) | ||
seenKeys[key] = true | ||
} | ||
@@ -42,14 +49,3 @@ | ||
} | ||
async.series([ | ||
async.apply(async.forEach, Object.keys(data.RequestItems), validateTableKeys), | ||
async.apply(async.parallel, [ | ||
async.apply(async.forEach, puts, putItem), | ||
async.apply(async.forEach, deletes, deleteItem), | ||
]) | ||
], function(err) { | ||
if (err) return cb(err) | ||
cb(null, {UnprocessedItems: {}}) | ||
}) | ||
} | ||
{ | ||
"name": "dynalite", | ||
"version": "0.0.10", | ||
"version": "0.0.11", | ||
"description": "A mock implementation of Amazon's DynamoDB", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -76,2 +76,3 @@ var validateAttributeValue = require('./index').validateAttributeValue | ||
lengthLessThanOrEqual: 255, | ||
children: 'String', | ||
}, | ||
@@ -78,0 +79,0 @@ TableName: { |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
74225
34
2045
1