This is an automated email from the ASF dual-hosted git repository. njayaram pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/madlib.git
commit 3bf6da956e05a3df052807d3e5c784681287e0cb Author: Nandish Jayaram <[email protected]> AuthorDate: Thu Apr 11 17:13:41 2019 -0700 Utilities: Add unit tests for create_cols_from_array_sql_string() JIRA: MADLIB-1315 Closes #370 Co-authored-by: Ekta Khanna <[email protected]> --- .../utilities/test/unit_tests/test_utilities.py_in | 125 +++++++++++++++++++++ 1 file changed, 125 insertions(+) diff --git a/src/ports/postgres/modules/utilities/test/unit_tests/test_utilities.py_in b/src/ports/postgres/modules/utilities/test/unit_tests/test_utilities.py_in index 2d2c481..b884eec 100644 --- a/src/ports/postgres/modules/utilities/test/unit_tests/test_utilities.py_in +++ b/src/ports/postgres/modules/utilities/test/unit_tests/test_utilities.py_in @@ -247,5 +247,130 @@ class UtilitiesTestCase(unittest.TestCase): self.assertTrue(s.is_valid_psql_type('boolean[]', s.INTEGER | s.ANY_ARRAY)) self.assertFalse(s.is_valid_psql_type('boolean', s.ANY_ARRAY)) + def test_create_cols_from_array_sql_string_empty_pylist(self): + utils = self.subject + self.py_list = None + self.sql_array_col = 'sqlcol' + self.colname = 'estimated_col' + self.coltype = 'dummy' + self.has_one_ele = True + out_sql = utils.create_cols_from_array_sql_string( + self.py_list, self.sql_array_col, self.colname, self.coltype, + self.has_one_ele, "dummy_module") + self.assertEqual(out_sql, 'sqlcol[1]+1 AS estimated_col') + self.has_one_ele = False + out_sql = utils.create_cols_from_array_sql_string( + self.py_list, self.sql_array_col, self.colname, self.coltype, + self.has_one_ele, "dummy_module") + self.assertEqual(out_sql, 'sqlcol AS estimated_col') + + def test_create_cols_from_array_sql_string_one_ele(self): + utils = self.subject + self.py_list = ['cat', 'dog'] + self.sql_array_col = 'sqlcol' + self.colname = 'estimated_pred' + self.coltype = 'TEXT' + self.has_one_ele = True + out_sql = utils.create_cols_from_array_sql_string( + self.py_list, self.sql_array_col, self.colname, self.coltype, + self.has_one_ele, "dummy_module") + self.assertTrue(out_sql, "(ARRAY['cat','dog'])[sqlcol[1]+1]::TEXT AS estimated_pred") + + def test_create_cols_from_array_sql_string_one_ele_with_NULL(self): + utils = self.subject + self.py_list = [None, 1, 2] + self.sql_array_col = 'sqlcol' + self.colname = 'estimated_pred' + self.coltype = 'INTEGER' + self.has_one_ele = True + out_sql = utils.create_cols_from_array_sql_string( + self.py_list, self.sql_array_col, self.colname, self.coltype, + self.has_one_ele, "dummy_module") + self.assertEqual(out_sql, "(ARRAY[ NULL,1,2 ]::INTEGER[])[sqlcol[1]+1]::INTEGER AS estimated_pred") + + def test_create_cols_from_array_sql_string_one_ele_with_many_NULL(self): + utils = self.subject + self.py_list = [None, 'cat', 'dog', None, None] + self.sql_array_col = 'sqlcol' + self.colname = 'estimated_pred' + self.coltype = 'TEXT' + self.has_one_ele = True + with self.assertRaises(plpy.PLPYException): + utils.create_cols_from_array_sql_string( + self.py_list, self.sql_array_col, self.colname, self.coltype, + self.has_one_ele, "dummy_module") + + def test_create_cols_from_array_sql_string_many_ele(self): + utils = self.subject + self.py_list = ['cat', 'dog'] + self.sql_array_col = 'sqlcol' + self.colname = 'prob' + self.coltype = 'TEXT' + self.has_one_ele = False + out_sql = utils.create_cols_from_array_sql_string( + self.py_list, self.sql_array_col, self.colname, self.coltype, + self.has_one_ele, "dummy_module") + self.assertEqual(out_sql, "CAST(sqlcol[1] AS TEXT) AS \"prob_cat\", CAST(sqlcol[2] AS TEXT) AS \"prob_dog\"") + + def test_create_cols_from_array_sql_string_many_ele_with_NULL(self): + utils = self.subject + self.py_list = [None, 'cat', 'dog'] + self.sql_array_col = 'sqlcol' + self.colname = 'prob' + self.coltype = 'TEXT' + self.has_one_ele = False + out_sql = utils.create_cols_from_array_sql_string( + self.py_list, self.sql_array_col, self.colname, self.coltype, + self.has_one_ele, "dummy_module") + self.assertEqual(out_sql, "CAST(sqlcol[1] AS TEXT) AS \"prob_NULL\", CAST(sqlcol[2] AS TEXT) AS \"prob_cat\", CAST(sqlcol[3] AS TEXT) AS \"prob_dog\"") + + def test_create_cols_from_array_sql_string_many_ele_with_many_NULL(self): + utils = self.subject + self.py_list = [None, 'cat', 'dog', None, None] + self.sql_array_col = 'sqlcol' + self.colname = 'prob' + self.coltype = 'TEXT' + self.has_one_ele = False + with self.assertRaises(plpy.PLPYException): + utils.create_cols_from_array_sql_string( + self.py_list, self.sql_array_col, self.colname, self.coltype, + self.has_one_ele, "dummy_module") + + def test_create_cols_from_array_sql_string_invalid_sql_array(self): + utils = self.subject + self.py_list = ['cat', 'dog'] + self.sql_array_col = None + self.colname = 'prob' + self.coltype = 'TEXT' + self.has_one_ele = False + with self.assertRaises(plpy.PLPYException): + utils.create_cols_from_array_sql_string( + self.py_list, self.sql_array_col, self.colname, self.coltype, + self.has_one_ele, "dummy_module") + + def test_create_cols_from_array_sql_string_invalid_colname(self): + utils = self.subject + self.py_list = ['cat', 'dog'] + self.sql_array_col = 'sqlcol' + self.colname = '' + self.coltype = 'TEXT' + self.has_one_ele = False + with self.assertRaises(plpy.PLPYException): + utils.create_cols_from_array_sql_string( + self.py_list, self.sql_array_col, self.colname, self.coltype, + self.has_one_ele, "dummy_module") + + def test_create_cols_from_array_sql_string_invalid_coltype(self): + utils = self.subject + self.py_list = ['cat', 'dog'] + self.sql_array_col = 'sqlcol' + self.colname = 'prob' + self.coltype = '' + self.has_one_ele = False + with self.assertRaises(plpy.PLPYException): + utils.create_cols_from_array_sql_string( + self.py_list, self.sql_array_col, self.colname, self.coltype, + self.has_one_ele, "dummy_module") + if __name__ == '__main__': unittest.main()
