Browse Source

[impala] Impala header columns are wrong

Use the names and not the types of the columns (previous bug with Beeswax interface)
Refine new app with Beeswax
Cloudera Impala as name
List tables/DDL still switches to Beeswaxd
Fix some HTML escaping
Romain Rigaux 13 years ago
parent
commit
ec560e6

+ 9 - 3
apps/beeswax/src/beeswax/server/beeswax_lib.py

@@ -110,7 +110,10 @@ class BeeswaxClient:
 
 
   def make_query(self, hql_query):
   def make_query(self, hql_query):
     # HUE-535 without having to modify Beeswaxd, add 'use database' as first option
     # HUE-535 without having to modify Beeswaxd, add 'use database' as first option
-    configuration = ['use ' + hql_query.query.get('database', 'default')]
+    if self.query_server['server_name'] == 'impala':
+      configuration = []
+    else:
+      configuration = ['use ' + hql_query.query.get('database', 'default')]
     configuration.extend(hql_query.get_configuration())
     configuration.extend(hql_query.get_configuration())
 
 
     thrift_query = BeeswaxService.Query(query=hql_query.query['query'], configuration=configuration)
     thrift_query = BeeswaxService.Query(query=hql_query.query['query'], configuration=configuration)
@@ -141,10 +144,13 @@ class BeeswaxClient:
     if rows is None:
     if rows is None:
       rows = -1
       rows = -1
 
 
-    handle = handle.get_rpc_handle()
-    results = self.db_client.fetch(handle, start_over, rows)
+    rpc_handle = handle.get_rpc_handle()
+    results = self.db_client.fetch(rpc_handle, start_over, rows)
 
 
     if results.ready:
     if results.ready:
+      # Impala does not return the name of the columns, need to fetch separately
+      if self.query_server['server_name'] == 'impala':
+        results.columns = [column.name for column in self.get_results_metadata(handle).schema.fieldSchemas]
       return BeeswaxDataTable(results)
       return BeeswaxDataTable(results)
 
 
 
 

+ 11 - 3
apps/beeswax/src/beeswax/templates/execute.mako

@@ -37,7 +37,7 @@
 
 
     <div id="validationResults">
     <div id="validationResults">
     % if len(form.query["query"].errors):
     % if len(form.query["query"].errors):
-        ${ unicode(form.query["query"].errors) }
+        ${ unicode(form.query["query"].errors) | n,unicode }
      % endif
      % endif
     </div>
     </div>
 
 
@@ -64,8 +64,16 @@ ${layout.menubar(section='query')}
             <div class="well sidebar-nav">
             <div class="well sidebar-nav">
                 <form id="advancedSettingsForm" action="${action}" method="POST" class="form form-horizontal noPadding">
                 <form id="advancedSettingsForm" action="${action}" method="POST" class="form form-horizontal noPadding">
                     <ul class="nav nav-list">
                     <ul class="nav nav-list">
-                        <li class="nav-header">${_('database')}</li>
-                        <li>
+                        <li class="nav-header
+                        % if app_name == 'impala':
+                            hide
+                        % endif
+                        ">${_('database')}</li>
+                        <li
+                        % if app_name == 'impala':
+                            class="hide"
+                        % endif
+                        >
                           ${ form.query['database'] | n,unicode }
                           ${ form.query['database'] | n,unicode }
                         </li>
                         </li>
                         <li class="nav-header">${_('settings')}</li>
                         <li class="nav-header">${_('settings')}</li>

+ 0 - 2
apps/beeswax/src/beeswax/views.py

@@ -647,8 +647,6 @@ def view_results(request, id, first_row=0):
   }
   }
 
 
   if not error:
   if not error:
-    #data = list(results.rows()) # Materialize results
-
     download_urls = {}
     download_urls = {}
     if downloadable:
     if downloadable:
       for format in common.DL_FORMATS:
       for format in common.DL_FORMATS:

+ 1 - 1
apps/impala/src/impala/settings.py

@@ -15,7 +15,7 @@
 # limitations under the License.
 # limitations under the License.
 
 
 DJANGO_APPS = ['impala']
 DJANGO_APPS = ['impala']
-NICE_NAME = 'Impala'
+NICE_NAME = 'Cloudera Impala (TM) Query UI'
 MENU_INDEX = 11
 MENU_INDEX = 11
 ICON = '/impala/static/art/icon_impala_24.png'
 ICON = '/impala/static/art/icon_impala_24.png'
 
 

+ 2 - 2
apps/oozie/src/oozie/templates/editor/create_coordinator.mako

@@ -76,10 +76,10 @@ ${ layout.menubar(section='coordinators') }
               ${ utils.render_field_no_popover(coordinator_form['name'], extra_attrs = {'validate':'true'}) }
               ${ utils.render_field_no_popover(coordinator_form['name'], extra_attrs = {'validate':'true'}) }
               ${ utils.render_field_no_popover(coordinator_form['description']) }
               ${ utils.render_field_no_popover(coordinator_form['description']) }
               ${ utils.render_field_no_popover(coordinator_form['workflow'], extra_attrs = {'validate':'true'}) }
               ${ utils.render_field_no_popover(coordinator_form['workflow'], extra_attrs = {'validate':'true'}) }
-              ${ coordinator_form['parameters'] }
+              ${ coordinator_form['parameters'] | n,unicode }
               <div class="hide">
               <div class="hide">
                 ${ utils.render_field(coordinator_form['timeout']) }
                 ${ utils.render_field(coordinator_form['timeout']) }
-                ${ coordinator_form['schema_version'] }
+                ${ coordinator_form['schema_version'] | n,unicode }
               </div>
               </div>
             </div>
             </div>
           </div>
           </div>

+ 3 - 3
apps/oozie/src/oozie/templates/editor/create_coordinator_data.mako

@@ -66,9 +66,9 @@ from django.utils.safestring import mark_safe
 
 
   <script type="text/javascript">
   <script type="text/javascript">
     $(document).ready(function(){
     $(document).ready(function(){
-      var initial = ${ [{'name': str(form['name']), 'dataset': str(form['dataset']), 'error_message': str(form.errors) } for form in formset.forms] };
-      var nameHTML = '${ str(formset.empty_form["name"]).replace("\r", "").replace("\n", "").replace("\s", "") }';
-      var datasetHTML = '${ str(formset.empty_form["dataset"]).replace("\r", "").replace("\n", "").replace("\s", "") }';
+      var initial = ${ [{'name': str(form['name']), 'dataset': str(form['dataset']), 'error_message': str(form.errors) } for form in formset.forms]  | n,unicode };
+      var nameHTML = '${ str(formset.empty_form["name"]).replace("\r", "").replace("\n", "").replace("\s", "") | n,unicode }';
+      var datasetHTML = '${ str(formset.empty_form["dataset"]).replace("\r", "").replace("\n", "").replace("\s", "") | n,unicode }';
       var count = initial.length;
       var count = initial.length;
       var root = $('#${element}');
       var root = $('#${element}');
       var table = root.find('table');
       var table = root.find('table');

+ 8 - 7
apps/oozie/src/oozie/templates/editor/edit_coordinator.mako

@@ -86,12 +86,13 @@ ${ layout.menubar(section='coordinators') }
           <li><a href="#step4" class="step">${ _('Step 4: Outputs') }</a></li>
           <li><a href="#step4" class="step">${ _('Step 4: Outputs') }</a></li>
           <li><a href="#step5" class="step">${ _('Step 5: Advanced settings') }</a></li>
           <li><a href="#step5" class="step">${ _('Step 5: Advanced settings') }</a></li>
         </ul>
         </ul>
+
         ${ dataset_formset.management_form | n,unicode }
         ${ dataset_formset.management_form | n,unicode }
         ${ data_input_formset.management_form | n,unicode }
         ${ data_input_formset.management_form | n,unicode }
         ${ data_output_formset.management_form | n,unicode }
         ${ data_output_formset.management_form | n,unicode }
         ${ properties.init_viewmodel(coordinator) }
         ${ properties.init_viewmodel(coordinator) }
-        <div class="steps">
 
 
+        <div class="steps">
           <div id="step1" class="stepDetails">
           <div id="step1" class="stepDetails">
             <div class="alert alert-info"><h3>${ _('Coordinator data') }</h3></div>
             <div class="alert alert-info"><h3>${ _('Coordinator data') }</h3></div>
             <div class="fieldWrapper">
             <div class="fieldWrapper">
@@ -156,9 +157,9 @@ ${ layout.menubar(section='coordinators') }
                 <tbody>
                 <tbody>
                 % for form in data_input_formset.forms:
                 % for form in data_input_formset.forms:
                 <tr>
                 <tr>
-                  ${ form['id'] }
-                  <td>${ form['name'] }</td>
-                  <td>${ form['dataset'] }</td>
+                  ${ form['id'] | n,unicode }
+                  <td>${ form['name'] | n,unicode }</td>
+                  <td>${ form['dataset'] | n,unicode }</td>
                   <td>${ form['dataset'].form.instance.dataset.uri }</td>
                   <td>${ form['dataset'].form.instance.dataset.uri }</td>
                 % if coordinator.is_editable(user):
                 % if coordinator.is_editable(user):
                   <td><a class="btn btn-small delete-row" href="javascript:void(0);">${ _('Delete') }${ form['DELETE'] | n,unicode }</a></td>
                   <td><a class="btn btn-small delete-row" href="javascript:void(0);">${ _('Delete') }${ form['DELETE'] | n,unicode }</a></td>
@@ -209,9 +210,9 @@ ${ layout.menubar(section='coordinators') }
               <tbody>
               <tbody>
                 % for form in data_output_formset.forms:
                 % for form in data_output_formset.forms:
                   <tr>
                   <tr>
-                    ${ form['id'] }
-                    <td>${ form['name'] }</td>
-                    <td>${ form['dataset'] }</td>
+                    ${ form['id'] | n,unicode }
+                    <td>${ form['name'] | n,unicode }</td>
+                    <td>${ form['dataset'] | n,unicode }</td>
                     <td>${ form['dataset'].form.instance.dataset.uri }</td>
                     <td>${ form['dataset'].form.instance.dataset.uri }</td>
                     % if coordinator.is_editable(user):
                     % if coordinator.is_editable(user):
                       <td><a class="btn btn-small delete-row" href="javascript:void(0);">${ _('Delete') }${ form['DELETE'] | n,unicode }</a></td>
                       <td><a class="btn btn-small delete-row" href="javascript:void(0);">${ _('Delete') }${ form['DELETE'] | n,unicode }</a></td>