@@ -678,6 +678,120 @@ def test_does_nothing_for_setoutputsizes(self):
678
678
cursor .setoutputsizes (123 )
679
679
680
680
# 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 )
681
795
682
796
683
797
class AsyncCursorTest (IsolatedAsyncioTestCase ):
0 commit comments