111 lines
5.2 KiB
YAML
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
|
|
|