Skip to content

Instantly share code, notes, and snippets.

@joshbooker
Last active April 20, 2016 19:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save joshbooker/8420b539173b2d907d5851b77f60abc5 to your computer and use it in GitHub Desktop.
Save joshbooker/8420b539173b2d907d5851b77f60abc5 to your computer and use it in GitHub Desktop.
// ----------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// ----------------------------------------------------------------------------
var helpers = require('../helpers'),
format = require('azure-odata-sql').format,
queries = require('../../../query'),
mssql = require('mssql'),
util = require('util');
module.exports = function (table, item, query) {
var tableName = helpers.formatTableName(table.schema || 'dbo', table.name),
pkName = table.pkName || 'id',
setStatements = [],
versionValue,
parameters = [],
filter = filterClause();
for (var prop in item) {
if(item.hasOwnProperty(prop)) {
var value = item[prop];
if (prop.toLowerCase() === 'version') {
versionValue = value;
} else if (prop.toLowerCase() !== 'id') {
setStatements.push(helpers.formatMember(prop) + ' = @' + prop);
parameters.push({ name: prop, value: value, type: helpers.getMssqlType(value) });
}
}
}
var sql = util.format("UPDATE %s SET %s WHERE [%s] = @id%s", tableName, setStatements.join(','), pkName, filter.sql);
parameters.push({ name: 'id', type: helpers.getMssqlType(item.id, true), value: item.id });
parameters.push.apply(parameters, filter.parameters);
if (versionValue) {
sql += " AND [version] = @version";
parameters.push({ name: 'version', type: mssql.VarBinary, value: new Buffer(versionValue, 'base64') });
}
sql += util.format("; SELECT @@ROWCOUNT as recordsAffected; SELECT * FROM %s WHERE [%s] = @id%s", tableName, pkName, filter.sql);
return {
sql: sql,
parameters: parameters,
multiple: true,
transform: helpers.statements.checkConcurrencyAndTranslate
};
function filterClause() {
if(!query)
return { sql: '', parameters: [] };
var filter = format.filter(queries.toOData(query), 'q');
if(filter.sql)
filter.sql = ' AND ' + filter.sql;
return filter;
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment