Ver código fonte

[beeswax] Fetch query based on server configuration

Romain Rigaux 13 anos atrás
pai
commit
aa942cc

+ 8 - 1
apps/beeswax/src/beeswax/db_utils.py

@@ -64,7 +64,7 @@ def execute_directly(user, query_msg, design=None, notify=False):
   # Now submit it
   try:
     handle = db_client().query(query_msg)
-    if not handle or not handle.id or not handle.log_context:
+    if not handle or not handle.id:
       # It really shouldn't happen
       msg = _("BeeswaxServer returning invalid handle for query id %(id)d [%(query)s]...") % \
             {'id': query_history.id, 'query': query_msg.query[:40]}
@@ -178,6 +178,13 @@ def db_client():
       return _decode_struct_attr(res, 'textual')
 
     def fetch(self, *args, **kwargs):
+      no_start_over_support = [ config_variable for config_variable in self.get_default_configuration(False)
+                                if config_variable.key == 'support_start_over' and config_variable.value == 'false' ]
+      if no_start_over_support:
+        copy = list(args)
+        copy[1] = False
+        args = copy
+
       res = self._client.fetch(*args, **kwargs)
       if res.ready:
         res.columns = [ force_unicode(col, errors='replace') for col in res.columns ]

+ 42 - 0
apps/beeswax/src/beeswax/tests.py

@@ -321,6 +321,48 @@ for x in sys.stdin:
       assert_equal(bex.errorCode, 11)
       assert_equal(bex.SQLState, "42000")
 
+  def test_fetch_configuration(self):
+    class MockClient:
+      """Check if sent fetch correctly supports start_over."""
+      def __init__(self, support_start_over):
+        self.support_start_over = support_start_over
+
+      def fetch(self, query_id, start_over, fetch_size):
+        assert_equal(self.support_start_over, start_over)
+        class Result: pass
+        res = Result()
+        res.ready = False
+        return res
+
+    class ConfigVariable:
+      def __init__(self, **entries):
+        self.__dict__.update(entries)
+
+    client = beeswax.db_utils.db_client()
+
+    prev_get_default_configuration = client.get_default_configuration
+    prev_client = client._client
+
+    try:
+      client._client = MockClient(True)
+      client.get_default_configuration = lambda a: []
+      client.fetch(None, True, 5)
+
+      client._client = MockClient(False)
+      client.get_default_configuration = lambda a: []
+      client.fetch(None, False, 5)
+
+      client._client = MockClient(True)
+      client.get_default_configuration = lambda a: [ConfigVariable(key='support_start_over', value='true')]
+      client.fetch(None, True, 5)
+
+      client._client = MockClient(False)
+      client.get_default_configuration = lambda a: [ConfigVariable(key='support_start_over', value='false')]
+      client.fetch(None, True, 5)
+    finally:
+      client.get_default_configuration = prev_get_default_configuration
+      client._client = prev_client
+
 
   def test_parameterization(self):
     """

+ 1 - 1
apps/beeswax/src/beeswax/views.py

@@ -34,7 +34,7 @@ from desktop.lib import django_mako
 from desktop.lib.paginator import Paginator
 from desktop.lib.django_util import copy_query_dict, format_preserving_redirect, render
 from desktop.lib.django_util import login_notrequired, get_desktop_uri_prefix
-from desktop.lib.django_util import render_injected, PopupException
+from desktop.lib.django_util import PopupException
 
 from hadoop.fs.exceptions import WebHdfsException