def test_bind_values_for_unsharded_keyspace(self): stm = vtrouting.create_parallel_task_keyrange_map(1, 1) self.assertEqual(len(stm.keyrange_list), 1) where_clause, bind_vars = vtrouting._create_where_clause_for_keyrange( stm.keyrange_list[0]) self.assertEqual(where_clause, '') self.assertEqual(bind_vars, {})
def test_bind_values_for_str_keyspace(self): stm = vtrouting.create_parallel_task_keyrange_map(16, 16) for _, kr in enumerate(stm.keyrange_list): kr_parts = kr.split("-") where_clause, bind_vars = vtrouting._create_where_clause_for_keyrange( kr, keyspace_col_type=keyrange_constants.KIT_BYTES ) if len(bind_vars.keys()) == 1: if kr_parts[0]: self.assertNotEqual(where_clause.find(">="), -1) else: self.assertNotEqual(where_clause.find("<"), -1) else: self.assertNotEqual(where_clause.find(">="), -1) self.assertNotEqual(where_clause.find(">="), -1) self.assertNotEqual(where_clause.find("AND"), -1) kid_list = str_shard_kid_map[kr] for keyspace_id in kid_list: if len(bind_vars.keys()) == 1: if kr_parts[0]: self.assertGreaterEqual(keyspace_id.encode("hex"), bind_vars["keyspace_id0"]) else: self.assertLess(keyspace_id.encode("hex"), bind_vars["keyspace_id0"]) else: self.assertGreaterEqual(keyspace_id.encode("hex"), bind_vars["keyspace_id0"]) self.assertLess(keyspace_id.encode("hex"), bind_vars["keyspace_id1"])
def test_bind_values_for_str_keyspace(self): stm = vtrouting.create_parallel_task_keyrange_map(16, 16) for _, kr in enumerate(stm.keyrange_list): kr_parts = kr.split('-') where_clause, bind_vars = vtrouting._create_where_clause_for_keyrange( kr, keyspace_col_type=keyrange_constants.KIT_BYTES) if len(bind_vars.keys()) == 1: if kr_parts[0] == '': self.assertNotEqual(where_clause.find('<'), -1) else: self.assertNotEqual(where_clause.find('>='), -1) else: self.assertNotEqual(where_clause.find('>='), -1) self.assertNotEqual(where_clause.find('>='), -1) self.assertNotEqual(where_clause.find('AND'), -1) kid_list = str_shard_kid_map[kr] for keyspace_id in kid_list: if len(bind_vars.keys()) == 1: if kr_parts[0] == '': self.assertLess(keyspace_id.encode('hex'), bind_vars['keyspace_id0']) else: self.assertGreaterEqual(keyspace_id.encode('hex'), bind_vars['keyspace_id0']) else: self.assertGreaterEqual(keyspace_id.encode('hex'), bind_vars['keyspace_id0']) self.assertLess(keyspace_id.encode('hex'), bind_vars['keyspace_id1'])
def test_bind_values_for_unsharded_keyspace(self): stm = vtrouting.create_parallel_task_keyrange_map(1, 1) self.assertEqual(len(stm.keyrange_list), 1) where_clause, bind_vars = vtrouting._create_where_clause_for_keyrange( stm.keyrange_list[0]) self.assertEqual(where_clause, '') self.assertEqual(bind_vars, {})
def test_bind_values_for_int_keyspace(self): stm = vtrouting.create_parallel_task_keyrange_map(16, 16) for kr in stm.keyrange_list: kr_parts = kr.split('-') where_clause, bind_vars = vtrouting._create_where_clause_for_keyrange( kr) if len(bind_vars.keys()) == 1: if kr_parts[0]: self.assertNotEqual(where_clause.find('>='), -1) else: self.assertNotEqual(where_clause.find('<'), -1) else: self.assertNotEqual(where_clause.find('>='), -1) self.assertNotEqual(where_clause.find('AND'), -1) kid_list = int_shard_kid_map[kr] for keyspace_id in kid_list: if len(bind_vars.keys()) == 1: if kr_parts[0]: self.assertGreaterEqual(keyspace_id, bind_vars['keyspace_id0']) else: self.assertLess(keyspace_id, bind_vars['keyspace_id0']) else: self.assertGreaterEqual(keyspace_id, bind_vars['keyspace_id0']) self.assertLess(keyspace_id, bind_vars['keyspace_id1'])
def test_bind_values_for_str_keyspace(self): stm = vtrouting.create_parallel_task_keyrange_map(16, 16) for kr in stm.keyrange_list: kr_parts = kr.split('-') where_clause, bind_vars = vtrouting._create_where_clause_for_keyrange( kr, keyspace_col_type=keyrange_constants.KIT_BYTES) if len(bind_vars.keys()) == 1: if kr_parts[0]: self.assertNotEqual(where_clause.find('>='), -1) else: self.assertNotEqual(where_clause.find('<'), -1) else: self.assertNotEqual(where_clause.find('>='), -1) self.assertNotEqual(where_clause.find('>='), -1) self.assertNotEqual(where_clause.find('AND'), -1) kid_list = str_shard_kid_map[kr] for keyspace_id in kid_list: if len(bind_vars.keys()) == 1: if kr_parts[0]: self.assertGreaterEqual( keyspace_id.encode('hex'), bind_vars['keyspace_id0']) else: self.assertLess( keyspace_id.encode('hex'), bind_vars['keyspace_id0']) else: self.assertGreaterEqual( keyspace_id.encode('hex'), bind_vars['keyspace_id0']) self.assertLess(keyspace_id.encode('hex'), bind_vars['keyspace_id1'])
def test_vt_routing(self): key_range = "80-C0" routing_sql, routing_bind_vars = vtrouting._create_where_clause_for_keyrange(key_range) vt_routing_info = vtrouting.VTRoutingInfo(key_range, routing_sql, routing_bind_vars) sql, bind_vars = sql_builder.select_by_columns_query( select_column_list=["col_a", sql_builder.Min("col_b")], table_name="my_table", column_value_pairs=[("col_a", [1, 2, 3])], vt_routing_info=vt_routing_info, ) self.assertEqual( sql, "SELECT col_a, MIN(col_b) FROM my_table " "WHERE col_a IN (%(col_a_1)s, %(col_a_2)s, %(col_a_3)s) " "AND keyspace_id >= %(keyspace_id0)s " "AND keyspace_id < %(keyspace_id1)s", ) self.assertEqual( bind_vars, dict(col_a_1=1, col_a_2=2, col_a_3=3, keyspace_id0=(0x80 << 56), keyspace_id1=(0xC0 << 56)) )
def test_vt_routing(self): key_range = '80-C0' routing_sql, routing_bind_vars = ( vtrouting._create_where_clause_for_keyrange(key_range)) vt_routing_info = vtrouting.VTRoutingInfo( key_range, routing_sql, routing_bind_vars) sql, bind_vars = sql_builder.select_by_columns_query( select_column_list=['col_a', sql_builder.Min('col_b')], table_name='my_table', column_value_pairs=[('col_a', [1, 2, 3])], vt_routing_info=vt_routing_info) self.assertEqual( sql, 'SELECT col_a, MIN(col_b) FROM my_table ' 'WHERE col_a IN (%(col_a_1)s, %(col_a_2)s, %(col_a_3)s) ' 'AND keyspace_id >= %(keyspace_id0)s ' 'AND keyspace_id < %(keyspace_id1)s') self.assertEqual( bind_vars, dict(col_a_1=1, col_a_2=2, col_a_3=3, keyspace_id0=(0x80 << 56), keyspace_id1=(0xC0 << 56)))
def test_vt_routing(self): key_range = '80-C0' routing_sql, routing_bind_vars = ( vtrouting._create_where_clause_for_keyrange(key_range)) vt_routing_info = vtrouting.VTRoutingInfo( key_range, routing_sql, routing_bind_vars) sql, bind_vars = sql_builder.select_by_columns_query( select_column_list=['col_a', sql_builder.Min('col_b')], table_name='my_table', column_value_pairs=[('col_a', [1, 2, 3])], vt_routing_info=vt_routing_info) self.assertEqual( sql, 'SELECT col_a, MIN(col_b) FROM my_table ' 'WHERE col_a IN (%(col_a_1)s, %(col_a_2)s, %(col_a_3)s) ' 'AND keyspace_id >= %(keyspace_id0)s ' 'AND keyspace_id < %(keyspace_id1)s') self.assertEqual( bind_vars, dict(col_a_1=1, col_a_2=2, col_a_3=3, keyspace_id0=(0x80 << 56), keyspace_id1=(0xC0 << 56)))
def test_bind_values_for_int_keyspace(self): stm = vtrouting.create_parallel_task_keyrange_map(16, 16) for _, kr in enumerate(stm.keyrange_list): kr_parts = kr.split('-') where_clause, bind_vars = vtrouting._create_where_clause_for_keyrange(kr) if len(bind_vars.keys()) == 1: if kr_parts[0] == '': self.assertNotEqual(where_clause.find('<'), -1) else: self.assertNotEqual(where_clause.find('>='), -1) else: self.assertNotEqual(where_clause.find('>='), -1) self.assertNotEqual(where_clause.find('>='), -1) self.assertNotEqual(where_clause.find('AND'), -1) kid_list = int_shard_kid_map[kr] for keyspace_id in kid_list: if len(bind_vars.keys()) == 1: if kr_parts[0] == '': self.assertLess(keyspace_id, bind_vars['keyspace_id0']) else: self.assertGreaterEqual(keyspace_id, bind_vars['keyspace_id0']) else: self.assertGreaterEqual(keyspace_id, bind_vars['keyspace_id0']) self.assertLess(keyspace_id, bind_vars['keyspace_id1'])