This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
zhangyang-zerotierone/ext/librethinkdbxx/test/upstream/mutation/replace.yaml
2017-11-02 07:05:11 -07:00

111 lines
5.2 KiB
YAML

desc: Tests replacement of selections
table_variable_name: tbl
tests:
# Set up some data
- py: tbl.insert([{'id':i} for i in xrange(100)])
js: |
tbl.insert(function(){
var res = []
for (var i = 0; i < 100; i++) {
res.push({id:i});
}
return res;
}())
rb: tbl.insert((1..100).map{ |i| {:id => i } })
ot: ({'deleted':0.0,'replaced':0.0,'unchanged':0.0,'errors':0.0,'skipped':0.0,'inserted':100})
- cd: tbl.count()
ot: 100
# Identity
- py: tbl.get(12).replace(lambda row:{'id':row['id']})
js: tbl.get(12).replace(function(row) { return {'id':row('id')}; })
rb: tbl.get(12).replace{ |row| { :id => row[:id] } }
ot: ({'deleted':0.0,'replaced':0.0,'unchanged':1,'errors':0.0,'skipped':0.0,'inserted':0.0})
# Replace single row
- py: tbl.get(12).replace(lambda row:{'id':row['id'], 'a':row['id']})
js: tbl.get(12).replace(function(row) { return {'id':row('id'), 'a':row('id')}; })
rb: tbl.get(12).replace{ |row| { :id => row[:id], :a => row[:id] } }
ot: ({'deleted':0.0,'replaced':1,'unchanged':0.0,'errors':0.0,'skipped':0.0,'inserted':0.0})
- py: tbl.get(13).replace(lambda row:null)
js: tbl.get(13).replace(function(row) { return null; })
rb: tbl.get(13).replace{ |row| null }
ot: ({'deleted':1,'replaced':0.0,'unchanged':0.0,'errors':0.0,'skipped':0.0,'inserted':0.0})
# Replace selection of table
- py: tbl.between(10, 20, right_bound='closed').replace(lambda row:{'a':1})
js: tbl.between(10, 20, {'right_bound':'closed'}).replace(function(row) { return {'a':1}; })
ot: ({'first_error':'Inserted object must have primary key `id`:\n{\n\t\"a\":\t1\n}','deleted':0.0,'replaced':0.0,'unchanged':0.0,'errors':10,'skipped':0.0,'inserted':0.0})
- py: tbl.filter(lambda row:(row['id'] >= 10) & (row['id'] < 20)).replace(lambda row:{'id':row['id'], 'a':row['id']})
js: tbl.filter(function(row) { return row('id').ge(10).and(row('id').lt(20))}).replace(function(row) { return {'id':row('id'), 'a':row('id')}; })
rb: tbl.filter{ |row|
(row[:id] >= 10).and(row[:id] < 20)
}.replace{ |row|
{ :id => row[:id], :a => row[:id] } }
ot: ({'deleted':0.0,'replaced':8,'unchanged':1,'errors':0.0,'skipped':0.0,'inserted':0.0})
# trying to change pkey of a document
- cd: tbl.get(1).replace({'id':2,'a':1})
ot: ({'first_error':"Primary key `id` cannot be changed (`{\n\t\"id\":\t1\n}` -> `{\n\t\"a\":\t1,\n\t\"id\":\t2\n}`).",'deleted':0.0,'replaced':0.0,'unchanged':0.0,'errors':1,'skipped':0.0,'inserted':0.0})
# not passing a pkey in the first place
- cd: tbl.get(1).replace({'a':1})
ot: ({'first_error':"Inserted object must have primary key `id`:\n{\n\t\"a\":\t1\n}",'deleted':0.0,'replaced':0.0,'unchanged':0.0,'errors':1,'skipped':0.0,'inserted':0.0})
# check r.row, static value and otherwise
- py: tbl.get(1).replace({'id':r.row['id'],'a':'b'})
js: tbl.get(1).replace({'id':r.row('id'),'a':'b'})
rb: tbl.get(1).replace{ |row| { :id => row[:id], :a => 'b' } }
ot: ({'deleted':0.0,'replaced':1,'unchanged':0.0,'errors':0.0,'skipped':0.0,'inserted':0.0})
- cd: tbl.get(1).replace(r.row.merge({'a':'b'}))
rb: tbl.get(1).replace{ |row| row.merge({'a':'b'}) }
ot: ({'deleted':0.0,'replaced':0.0,'unchanged':1,'errors':0.0,'skipped':0.0,'inserted':0.0})
# test atomicity constraints
- cd: tbl.get(1).replace(r.row.merge({'c':r.js('5')}))
rb: tbl.get(1).replace{ |row| row.merge({'c':r.js('5')}) }
ot: err('ReqlQueryLogicError', 'Could not prove argument deterministic. Maybe you want to use the non_atomic flag?', [0])
- cd: tbl.get(1).replace(r.row.merge({'c':tbl.nth(0)}))
rb: tbl.get(1).replace{ |row| row.merge({'c':tbl.nth(0)}) }
ot: err('ReqlQueryLogicError', 'Could not prove argument deterministic. Maybe you want to use the non_atomic flag?', [0])
- py: tbl.get(1).replace(r.row.merge({'c':r.js('5')}), non_atomic=True)
js: tbl.get(1).replace(r.row.merge({'c':r.js('5')}), {'nonAtomic':true})
rb: tbl.get(1).replace({ :non_atomic => true }){ |row| row.merge({ :c => r.js('5') })}
ot: ({'deleted':0.0,'replaced':1,'unchanged':0.0,'errors':0.0,'skipped':0.0,'inserted':0.0})
- cd: tbl.get(1).replace({}, 'foo')
ot:
cd: err('ReqlCompileError', 'Expected 2 arguments but found 3.')
js: err('ReqlCompileError', 'Expected 1 argument (not including options) but found 2.')
- cd: tbl.get(1).replace({}, {'foo':'bar'})
py: tbl.get(1).replace({}, foo='bar')
ot: err('ReqlCompileError', 'Unrecognized optional argument `foo`.')
# Replace whole table
- py: tbl.replace(lambda row:null)
js: tbl.replace(function(row) { return null; })
rb: tbl.replace{ |row| null }
ot: ({'deleted':99,'replaced':0.0,'unchanged':0.0,'errors':0.0,'skipped':0.0,'inserted':0.0})
- cd: tbl.get('sdfjk').replace({'id':'sdfjk'})['inserted']
js: tbl.get('sdfjk').replace({'id':'sdfjk'})('inserted')
ot: 1
- cd: tbl.get('sdfjki').replace({'id':'sdfjk'})['errors']
js: tbl.get('sdfjki').replace({'id':'sdfjk'})('errors')
ot: 1