@@ -678,6 +678,120 @@ def test_does_nothing_for_setoutputsizes(self):
678678 cursor .setoutputsizes (123 )
679679
680680 # All good, nothing happened
681+
682+ def test_checks_raw_query_response_with_single_stage_and_status_code_200 (self ):
683+ cursor = self .create_cursor (
684+ {
685+ 'dataSchema' : {
686+ 'columnNames' : ['age' ],
687+ 'columnDataTypes' : ['INT' ],
688+ },
689+ 'rows' : [[1 ], [2 ], [3 ]],
690+ },
691+ status_code = 200 ,
692+ extra_payload = {'numGroupsLimitReached' : True },
693+ use_multistage_engine = False
694+ )
695+ cursor .execute ('some statement' )
696+ raw_query_response = {
697+ 'response' : {
698+ 'numServersResponded' : 1 ,
699+ 'numServersQueried' : 1 ,
700+ 'resultTable' : {
701+ 'dataSchema' : {'columnNames' : ['age' ], 'columnDataTypes' : ['INT' ]},
702+ 'rows' : [[1 ], [2 ], [3 ]],
703+ },
704+ 'numGroupsLimitReached' : True ,
705+ },
706+ 'status_code' : 200 ,
707+ }
708+ self .assertEqual (cursor .raw_query_response , raw_query_response )
709+
710+ def test_checks_raw_query_response_with_multi_stage_and_status_code_200 (self ):
711+ cursor = self .create_cursor (
712+ {
713+ 'dataSchema' : {
714+ 'columnNames' : ['age' ],
715+ 'columnDataTypes' : ['INT' ],
716+ },
717+ 'rows' : [[1 ], [2 ], [3 ]],
718+ },
719+ status_code = 200 ,
720+ extra_payload = {'numGroupsLimitReached' : True },
721+ use_multistage_engine = True
722+ )
723+ cursor .execute ('some statement' )
724+ raw_query_response = {
725+ 'response' : {
726+ 'numServersResponded' : 1 ,
727+ 'numServersQueried' : 1 ,
728+ 'resultTable' : {
729+ 'dataSchema' : {'columnNames' : ['age' ], 'columnDataTypes' : ['INT' ]},
730+ 'rows' : [[1 ], [2 ], [3 ]],
731+ },
732+ 'numGroupsLimitReached' : True ,
733+ },
734+ 'status_code' : 200 ,
735+ }
736+ self .assertEqual (cursor .raw_query_response , raw_query_response )
737+
738+ def test_checks_raw_query_response_with_single_stage_and_status_code_400 (self ):
739+ cursor = self .create_cursor (
740+ {
741+ 'dataSchema' : {
742+ 'columnNames' : ['age' ],
743+ 'columnDataTypes' : ['INT' ],
744+ },
745+ 'rows' : [[1 ], [2 ], [3 ]],
746+ },
747+ status_code = 400 ,
748+ extra_payload = {'exceptions' : ['something' , 'wrong' ]},
749+ use_multistage_engine = False
750+ )
751+ with self .assertRaises (exceptions .ProgrammingError ):
752+ cursor .execute ('some statement' )
753+ raw_query_response = {
754+ 'response' : {
755+ 'numServersResponded' : 1 ,
756+ 'numServersQueried' : 1 ,
757+ 'resultTable' : {
758+ 'dataSchema' : {'columnNames' : ['age' ], 'columnDataTypes' : ['INT' ]},
759+ 'rows' : [[1 ], [2 ], [3 ]],
760+ },
761+ 'exceptions' : ['something' , 'wrong' ],
762+ },
763+ 'status_code' : 400 ,
764+ }
765+ self .assertEqual (cursor .raw_query_response , raw_query_response )
766+
767+ def test_checks_raw_query_response_with_multi_stage_and_status_code_400 (self ):
768+ cursor = self .create_cursor (
769+ {
770+ 'dataSchema' : {
771+ 'columnNames' : ['age' ],
772+ 'columnDataTypes' : ['INT' ],
773+ },
774+ 'rows' : [[1 ], [2 ], [3 ]],
775+ },
776+ status_code = 400 ,
777+ extra_payload = {'exceptions' : ['something' , 'wrong' ]},
778+ use_multistage_engine = True
779+ )
780+ with self .assertRaises (exceptions .ProgrammingError ):
781+ cursor .execute ('some statement' )
782+ raw_query_response = {
783+ 'response' : {
784+ 'numServersResponded' : 1 ,
785+ 'numServersQueried' : 1 ,
786+ 'resultTable' : {
787+ 'dataSchema' : {'columnNames' : ['age' ], 'columnDataTypes' : ['INT' ]},
788+ 'rows' : [[1 ], [2 ], [3 ]],
789+ },
790+ 'exceptions' : ['something' , 'wrong' ],
791+ },
792+ 'status_code' : 400 ,
793+ }
794+ self .assertEqual (cursor .raw_query_response , raw_query_response )
681795
682796
683797class AsyncCursorTest (IsolatedAsyncioTestCase ):
0 commit comments