134 lines
6.0 KiB
YAML
134 lines
6.0 KiB
YAML
desc: Tests that manipulation data in tables
|
|
table_variable_name: tbl, tbl2, senders, receivers, messages, otbl, otbl2
|
|
tests:
|
|
|
|
# Setup some more tables
|
|
|
|
- py: r.db('test').table_create('test3', primary_key='foo')
|
|
rb: r.db('test').table_create('test3', {:primary_key=>'foo'})
|
|
js: r.db('test').tableCreate('test3', {'primaryKey':'foo'})
|
|
ot: partial({'tables_created':1})
|
|
- def: tbl3 = r.db('test').table('test3')
|
|
|
|
- py: tbl.insert(r.range(0, 100).map({'id':r.row, 'a':r.row % 4}))
|
|
rb: tbl.insert(r.range(0, 100).map{|row| {'id':row, a:row % 4}})
|
|
js: tbl.insert(r.range(0, 100).map(function (row) { return {'id':row, 'a':row.mod(4)}; }))
|
|
ot: partial({'errors':0, 'inserted':100})
|
|
|
|
- py: tbl2.insert(r.range(0, 100).map({'id':r.row, 'b':r.row % 4}))
|
|
rb: tbl2.insert(r.range(0, 100).map{|row| {'id':row, b:row % 4}})
|
|
js: tbl2.insert(r.range(0, 100).map(function (row) { return {'id':row, 'b':row.mod(4)}; }))
|
|
ot: partial({'errors':0, 'inserted':100})
|
|
|
|
- py: tbl3.insert(r.range(0, 100).map({'foo':r.row, 'b':r.row % 4}))
|
|
rb: tbl3.insert(r.range(0, 100).map{|row| {'foo':row, b:row % 4}})
|
|
js: tbl3.insert(r.range(0, 100).map(function (row) { return {'foo':row, 'b':row.mod(4)}; }))
|
|
ot: partial({'errors':0, 'inserted':100})
|
|
|
|
- py: otbl.insert(r.range(1,100).map({'id': r.row, 'a': r.row}))
|
|
- py: otbl2.insert(r.range(1,100).map({'id': r.row, 'b': 2 * r.row}))
|
|
|
|
# Inner-Join
|
|
|
|
- def:
|
|
py: ij = tbl.inner_join(tbl2, lambda x,y:x['a'] == y['b']).zip()
|
|
js: ij = tbl.innerJoin(tbl2, function(x, y) { return x('a').eq(y('b')); }).zip()
|
|
rb: ij = tbl.inner_join(tbl2){ |x, y| x[:a].eq y[:b] }.zip
|
|
- cd: ij.count()
|
|
ot: 2500
|
|
- py: ij.filter(lambda row:row['a'] != row['b']).count()
|
|
js: ij.filter(function(row) { return row('a').ne(row('b')); }).count()
|
|
rb: ij.filter{ |row| row[:a].ne row[:b] }.count
|
|
ot: 0
|
|
|
|
# Outer-Join
|
|
- def:
|
|
py: oj = tbl.outer_join(tbl2, lambda x,y:x['a'] == y['b']).zip()
|
|
js: oj = tbl.outerJoin(tbl2, function(x, y) { return x('a').eq(y('b')); }).zip()
|
|
rb: oj = tbl.outer_join(tbl2){ |x, y| x[:a].eq y[:b] }.zip
|
|
- cd: oj.count()
|
|
ot: 2500
|
|
- py: oj.filter(lambda row:row['a'] != row['b']).count()
|
|
js: oj.filter(function(row) { return row('a').ne(row('b')); }).count()
|
|
rb: oj.filter{ |row| row[:a].ne row[:b] }.count
|
|
ot: 0
|
|
|
|
# Ordered eq_join
|
|
- py: blah = otbl.order_by("id").eq_join(r.row['id'], otbl2, ordered=True).zip()
|
|
ot: [{'id': i, 'a': i, 'b': i * 2} for i in range(1, 100)]
|
|
- py: blah = otbl.order_by(r.desc("id")).eq_join(r.row['id'], otbl2, ordered=True).zip()
|
|
ot: [{'id': i, 'a': i, 'b': i * 2} for i in range(99, 0, -1)]
|
|
- py: blah = otbl.order_by("id").eq_join(r.row['a'], otbl2, ordered=True).zip()
|
|
ot: [{'id': i, 'a': i, 'b': i * 2} for i in range(1, 100)]
|
|
|
|
# Eq-Join
|
|
- cd: tbl.eq_join('a', tbl2).zip().count()
|
|
ot: 100
|
|
|
|
- cd: tbl.eq_join('fake', tbl2).zip().count()
|
|
ot: 0
|
|
|
|
- py: tbl.eq_join(lambda x:x['a'], tbl2).zip().count()
|
|
rb: tbl.eq_join(lambda{|x| x['a']}, tbl2).zip().count()
|
|
js: tbl.eq_join(function(x) { return x('a'); }, tbl2).zip().count()
|
|
ot: 100
|
|
|
|
- py: tbl.eq_join(lambda x:x['fake'], tbl2).zip().count()
|
|
rb: tbl.eq_join(lambda{|x| x['fake']}, tbl2).zip().count()
|
|
js: tbl.eq_join(function(x) { return x('fake'); }, tbl2).zip().count()
|
|
ot: 0
|
|
|
|
- py: tbl.eq_join(lambda x:null, tbl2).zip().count()
|
|
rb: tbl.eq_join(lambda{|x| null}, tbl2).zip().count()
|
|
js: tbl.eq_join(function(x) { return null; }, tbl2).zip().count()
|
|
ot: 0
|
|
|
|
- py: tbl.eq_join(lambda x:x['a'], tbl2).count()
|
|
rb: tbl.eq_join(lambda {|x| x[:a]}, tbl2).count()
|
|
js: tbl.eq_join(function(x) { return x('a'); }, tbl2).count()
|
|
ot: 100
|
|
|
|
# eqjoin where id isn't a primary key
|
|
- cd: tbl.eq_join('a', tbl3).zip().count()
|
|
ot: 100
|
|
|
|
- py: tbl.eq_join(lambda x:x['a'], tbl3).count()
|
|
rb: tbl.eq_join(lambda {|x| x[:a]}, tbl3).count()
|
|
js: tbl.eq_join(function(x) { return x('a'); }, tbl3).count()
|
|
ot: 100
|
|
|
|
# eq_join with r.row
|
|
- py: tbl.eq_join(r.row['a'], tbl2).count()
|
|
js: tbl.eq_join(r.row('a'), tbl2).count()
|
|
ot: 100
|
|
|
|
# test an inner-join condition where inner-join differs from outer-join
|
|
- def: left = r.expr([{'a':1},{'a':2},{'a':3}])
|
|
- def: right = r.expr([{'b':2},{'b':3}])
|
|
|
|
- py: left.inner_join(right, lambda l, r:l['a'] == r['b']).zip()
|
|
js: left.innerJoin(right, function(l, r) { return l('a').eq(r('b')); }).zip()
|
|
rb: left.inner_join(right){ |lt, rt| lt[:a].eq(rt[:b]) }.zip
|
|
ot: [{'a':2,'b':2},{'a':3,'b':3}]
|
|
|
|
# test an outer-join condition where outer-join differs from inner-join
|
|
- py: left.outer_join(right, lambda l, r:l['a'] == r['b']).zip()
|
|
js: left.outerJoin(right, function(l, r) { return l('a').eq(r('b')); }).zip()
|
|
rb: left.outer_join(right){ |lt, rt| lt[:a].eq(rt[:b]) }.zip
|
|
ot: [{'a':1},{'a':2,'b':2},{'a':3,'b':3}]
|
|
|
|
- rb: senders.insert({id:1, sender:'Sender One'})['inserted']
|
|
ot: 1
|
|
- rb: receivers.insert({id:1, receiver:'Receiver One'})['inserted']
|
|
ot: 1
|
|
- rb: messages.insert([{id:10, sender_id:1, receiver_id:1, msg:'Message One'}, {id:20, sender_id:1, receiver_id:1, msg:'Message Two'}, {id:30, sender_id:1, receiver_id:1, msg:'Message Three'}])['inserted']
|
|
ot: 3
|
|
|
|
- rb: messages.orderby(index:'id').eq_join('sender_id', senders).without({right:{id:true}}).zip.eq_join('receiver_id', receivers).without({right:{id:true}}).zip
|
|
ot: [{'id':10,'msg':'Message One','receiver':'Receiver One','receiver_id':1,'sender':'Sender One','sender_id':1},{'id':20,'msg':'Message Two','receiver':'Receiver One','receiver_id':1,'sender':'Sender One','sender_id':1},{'id':30,'msg':'Message Three','receiver':'Receiver One','receiver_id':1,'sender':'Sender One','sender_id':1}]
|
|
|
|
# Clean up
|
|
|
|
- cd: r.db('test').table_drop('test3')
|
|
ot: partial({'tables_dropped':1})
|