<commit_before>"use strict";
// self.table('tableAlias').update('primaryKeyValue', 'optionalRangeValue')
//     .returnNone()
//     .set({'someKey': 'someValue'})
//     .inc('lovesCount', 1)
//     .dec('followers')
//     .expect('attrName', 'attrValue')
//     .commit()
//     .then(function(data){
//         console.log('Data should be null because we specified fields as `null`');
//     });

function UpdateQuery(model, alias, hashValue){
    this.model = model;
    this.alias = alias;
    this.hash = hashValue;
    this.schema = this.model.schema(this.alias);

    this.range = null;
    this.expectations = [];
    this.ops = [];
    this.returnValues = 'UPDATED_NEW';
}

UpdateQuery.prototype.returnAllOld = function(){
    this.returnValues = 'ALL_OLD';
    return this;
};

UpdateQuery.prototype.returnAllNew = function(){
    this.returnValues = 'ALL_NEW';
    return this;
};

UpdateQuery.prototype.returnUpdatedOld = function(){
    this.returnValues = 'UPDATED_OLD';
    return this;
};

UpdateQuery.prototype.returnUpdatedNew = function(){
    this.returnValues = 'UPDATED_NEW';
    return this;
};

UpdateQuery.prototype.returnNone = function(){
    this.returnValues = 'NONE';
    return this;
};

// Set object properties
//    update('song', 123).set({
//        'artist': '<NAME>',
//        'album': 'Silence in a Sweater'
//    }).commit();
UpdateQuery.prototype.set = function(opts){
    for(var key in opts){
        if(Array.isArray(opts[key]) && opts[key].length === 0){
            this.ops.push({
                'action': 'DELETE',
                'attributeName': key
            });
        }
        else{
            this.ops.push({
                'action': 'PUT',
                'attributeName': key,
                'newValue': opts[key]
            });
        }

    }
    return this;
};

// Add to a set
//     update('song', 123).push('tags', ['electro', 'pop']).commit();
UpdateQuery.prototype.push = function(key, value){
    if(!Array.isArray(value)){
        value = [value];
    }
    this.ops.push({
        'action': 'ADD',
        'attributeName': key,
        'newValue': value
    });
    return this;
};

UpdateQuery.prototype.add = UpdateQuery.prototype.push;
// Increment a numeric value
//     update('song', 123).inc('loves', 100000).inc('followers').commit();
UpdateQuery.prototype.inc = function(key, value){
    value = value || 1;
    this.ops.push({
        'action': 'ADD',
        'attributeName': key,
        'newValue': value
    });
    return this;<commit_msg>For update query, add unset and pop/remove for clipping sets.  #20<commit_after>"use strict";
// self.table('tableAlias').update('primaryKeyValue', 'optionalRangeValue')
//     .returnNone()
//     .set({'someKey': 'someValue'})
//     .inc('lovesCount', 1)
//     .dec('followers')
//     .expect('attrName', 'attrValue')
//     .commit()
//     .then(function(data){
//         console.log('Data should be null because we specified fields as `null`');
//     });

function UpdateQuery(model, alias, hashValue){
    this.model = model;
    this.alias = alias;
    this.hash = hashValue;
    this.schema = this.model.schema(this.alias);

    this.range = null;
    this.expectations = [];
    this.ops = [];
    this.returnValues = 'UPDATED_NEW';
}

UpdateQuery.prototype.returnAllOld = function(){
    this.returnValues = 'ALL_OLD';
    return this;
};

UpdateQuery.prototype.returnAllNew = function(){
    this.returnValues = 'ALL_NEW';
    return this;
};

UpdateQuery.prototype.returnUpdatedOld = function(){
    this.returnValues = 'UPDATED_OLD';
    return this;
};

UpdateQuery.prototype.returnUpdatedNew = function(){
    this.returnValues = 'UPDATED_NEW';
    return this;
};

UpdateQuery.prototype.returnNone = function(){
    this.returnValues = 'NONE';
    return this;
};

// Set object properties
//    update('song', 123).set({
//        'artist': '<NAME>',
//        'album': 'Silence in a Sweater'
//    }).commit();
UpdateQuery.prototype.set = function(opts){
    for(var key in opts){
        if(Array.isArray(opts[key]) && opts[key].length === 0){
            this.ops.push({
                'action': 'DELETE',
                'attributeName': key
            });
        }
        else{
            this.ops.push({
                'action': 'PUT',
                'attributeName': key,
                'newValue': opts[key]
            });
        }

    }
    return this;
};

// Add to a set
//     update('song', 123).push('tags', ['electro', 'pop']).commit();
UpdateQuery.prototype.push = function(key, value){
    if(!Array.isArray(value)){
        value = [value];
    }
    this.ops.push({
        'action': 'ADD',
        'attributeName': key,
        'newValue': value
    });
    return this;
};

UpdateQuery.prototype.add = UpdateQuery.prototype.push;

// Remove an item from a set
//     update('song', 123).pop('tags', 'pop').commit();
UpdateQuery.prototype.pop = function(key, value){
    var op = {
        'action': 'DELETE',
        'attributeName': key
    };

    if(value !== undefined){
        op.newValue = value;
    }

    this.ops.push(op);
    return this;
};

UpdateQuery.prototype.remove = UpdateQuery.prototype.pop;
UpdateQuery.prototype.unset = UpdateQuery.prototype.pop;

// Increment a numeric value
//     update('song', 123).inc('loves', 100000).inc('followers').commit();
UpdateQuery.prototype.inc = function(key, value){
    value = value || 1;
    this.ops.push({
        'action': 'ADD',
        'attributeName': key,
        'newValue': value
    });
    return this;
{'fraction_non_alphanumeric': 0.17092020129403307, 'fraction_numerical': 0.007368799424874191, 'mean_word_length': 2.467289719626168, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5152210', 'n_tokens_mistral': 1750, 'n_tokens_neox': 1686, 'n_words': 350}