Beispiel #1
0
 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)
Beispiel #2
0
 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)
Beispiel #3
0
    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)
Beispiel #4
0
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']))
Beispiel #5
0
    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))