def test_table_run_simple(self): input_table = [('Roosevelt', 1858), ('Napoleon', 1769), ('Confucius', -551)] query = 'select a2 // 10, "name " + a1 order by a2' expected_output_table = [[-56, 'name Confucius'], [176, 'name Napoleon'], [185, 'name Roosevelt']] output_table = [] error_info, warnings = rbql.table_run(query, input_table, output_table) self.assertEqual(error_info, None) self.assertEqual(warnings, []) self.assertEqual(expected_output_table, output_table)
def test_table_run_simple_join(self): input_table = [('Roosevelt', 1858, 'USA'), ('Napoleon', 1769, 'France'), ('Confucius', -551, 'China')] join_table = [('China', 1386), ('France', 67), ('USA', 327), ('Russia', 140)] query = 'select a2 // 10, b2, "name " + a1 order by a2 JOIN B on a3 == b1' expected_output_table = [[-56, 1386, 'name Confucius'], [176, 67, 'name Napoleon'], [185, 327, 'name Roosevelt']] output_table = [] error_info, warnings = rbql.table_run(query, input_table, output_table, join_table) self.assertEqual(error_info, None) self.assertEqual(warnings, []) self.assertEqual(expected_output_table, output_table)
def process_test_case(self, test_case): test_name = test_case['test_name'] query = test_case.get('query_python', None) if query is None: self.assertTrue(test_case.get('query_js', None) is not None) return # Skip this test input_table = test_case['input_table'] join_table = test_case.get('join_table', None) user_init_code = test_case.get('python_init_code', '') expected_output_table = test_case.get('expected_output_table', None) expected_error_type = test_case.get('expected_error_type', None) expected_error = test_case.get('expected_error', None) if expected_error is None: expected_error = test_case.get('expected_error_py', None) expected_warnings = test_case.get('expected_warnings', []) output_table = [] error_info, warnings = rbql.table_run(query, input_table, output_table, join_table, user_init_code=user_init_code) warnings = sorted(normalize_warnings(warnings)) expected_warnings = sorted(expected_warnings) self.assertEqual(expected_warnings, warnings, 'Inside json test: {}'.format(test_name)) self.assertTrue((expected_error is not None) == (error_info is not None), 'Inside json test: {}'.format(test_name)) if expected_error_type is not None: self.assertTrue(error_info['type'] == expected_error_type, 'Inside json test: {}'.format(test_name)) if expected_error is not None: self.assertTrue(error_info['message'].find(expected_error) != -1, 'Inside json test: {}'.format(test_name)) else: round_floats(expected_output_table) round_floats(output_table) self.assertEqual(expected_output_table, output_table)
import rbql input_table = [ ['Roosevelt', 1858, 'USA'], ['Napoleon', 1769, 'France'], ['Dmitri Mendeleev', 1834, 'Russia'], ['Jane Austen', 1775, 'England'], ['Hayao Miyazaki', 1941, 'Japan'], ] user_query = 'SELECT a1, a2 % 1000 WHERE a3 != "USA" LIMIT 3' output_table = [] error_info, warnings = rbql.table_run(user_query, input_table, output_table) if error_info is None: for record in output_table: print(','.join([str(v) for v in record])) else: print('Error: {}: {}'.format(error_info['type'], error_info['message']))
def process_test_case(self, test_case): test_name = test_case['test_name'] query = test_case.get('query_python', None) debug_mode = test_case.get('debug_mode', False) minimal_python_version = float( test_case.get('minimal_python_version', 2.7)) if python_version < minimal_python_version: print( 'Skipping {}: python version must be at least {}. Interpreter version is {}' .format(test_name, minimal_python_version, python_version)) return randomly_replace_var_names = test_case.get( 'randomly_replace_var_names', True) if query is None: self.assertTrue(test_case.get('query_js', None) is not None) return # Skip this test if randomly_replace_var_names: query = randomly_replace_column_variable_style(query) input_table = test_case['input_table'] join_table = test_case.get('join_table', None) user_init_code = test_case.get('python_init_code', '') expected_output_table = test_case.get('expected_output_table', None) expected_error_type = test_case.get('expected_error_type', None) expected_error = test_case.get('expected_error', None) if expected_error is None: expected_error = test_case.get('expected_error_py', None) if expected_error is None: if python_version >= 3: expected_error = test_case.get('expected_error_py_3', None) else: expected_error = test_case.get('expected_error_py_2', None) expected_error_exact = test_case.get('expected_error_exact', False) expected_warnings = test_case.get('expected_warnings', []) output_table = [] if debug_mode: rbql.set_debug_mode() error_info, warnings = rbql.table_run(query, input_table, output_table, join_table, user_init_code=user_init_code) warnings = sorted(normalize_warnings(warnings)) expected_warnings = sorted(expected_warnings) self.assertEqual( expected_warnings, warnings, 'Inside json test: {}. Expected warnings: {}; Actual warnings: {}'. format(test_name, ','.join(expected_warnings), ','.join(warnings))) self.assertTrue( (expected_error is not None) == (error_info is not None), 'Inside json test: {}. expected_error: {}, error_info: {}'.format( test_name, expected_error, error_info)) if expected_error_type is not None: self.assertTrue(error_info['type'] == expected_error_type, 'Inside json test: {}'.format(test_name)) if expected_error is not None: if expected_error_exact: #self.assertEqual(expected_error, error_info['message'], 'Inside json test: {}'.format(test_name)) self.assertEqual(expected_error, error_info['message']) else: self.assertTrue( error_info['message'].find(expected_error) != -1, 'Inside json test: {}'.format(test_name)) else: round_floats(expected_output_table) round_floats(output_table) self.assertEqual(expected_output_table, output_table, 'Inside json test: {}'.format(test_name))