def test_group_by_error(self): '''Test that selecting a varying non-group-by-key raises an error''' sql_query = 'SELECT d FROM `my_project.my_dataset.table2` GROUP BY a' with self.assertRaisesRegexp(ValueError, "not aggregated or grouped by"): execute_query(sql_query, self.datasets)
def test_query_error(self): '''Issue a query with insufficient context, to trigger general Exception catch''' sql_query = 'SELECT * FROM SomeTable' expected_error = (r"Attempt to look up path \('SomeTable',\) " r"with no projects/datasets/tables given") with self.assertRaisesRegexp(ValueError, expected_error): execute_query(sql_query, {})
def test_leftover_error(self): '''A nonsensical query, to trigger "Could not fully parse query"''' sql_query = 'a b c' expected_error = ( "Could not fully parse query: leftover tokens \\['a', 'b', 'c'\\]\n" "simplified query 'a b c'\n" "raw query 'a b c'") with self.assertRaisesRegexp(RuntimeError, expected_error): execute_query(sql_query, self.datasets)
def test_join_conditions(self, condition, expected_result): self.datasets['my_project']['my_dataset']['lefty'] = TypedDataFrame( pd.DataFrame([[1., 10.], [2., 20.]], columns=['a', 'b']), types=[BQScalarType.FLOAT, BQScalarType.FLOAT]) self.datasets['my_project']['my_dataset']['righty'] = TypedDataFrame( pd.DataFrame([[1., 100.], [3., 300.]], columns=['a', 'c']), types=[BQScalarType.FLOAT, BQScalarType.FLOAT]) sql_query = ( ('select lefty.a,righty.a,b,c from `my_project.my_dataset.lefty`' 'full outer join `my_project.my_dataset.righty` {}' ).format(condition)) result = execute_query(sql_query, self.datasets) self.assertEqual(result.to_list_of_lists(), expected_result)
def test_join_types(self, join_type, expected_result): # Missing join stuff to test. # alias with AS; alias without AS self.datasets['my_project']['my_dataset']['lefty'] = TypedDataFrame( pd.DataFrame([[1., 10.], [2., 20.]], columns=['a', 'b']), types=[BQScalarType.FLOAT, BQScalarType.FLOAT]) self.datasets['my_project']['my_dataset']['righty'] = TypedDataFrame( pd.DataFrame([[1., 100.], [3., 300.]], columns=['a', 'c']), types=[BQScalarType.FLOAT, BQScalarType.FLOAT]) sql_query = (( 'select lefty.a, righty.a, b, c from `my_project.my_dataset.lefty`' '{} join `my_project.my_dataset.righty` on lefty.a=righty.a' ).format(join_type)) result = execute_query(sql_query, self.datasets) self.assertEqual(result.to_list_of_lists(), expected_result)
def test_scalar_selects(self, sql_query, expected_result): result = execute_query(sql_query, self.datasets) self.assertEqual(result.to_list_of_lists(), expected_result)