Procházet zdrojové kódy

[beeswax] Allow saving results to fully-qualified name database

Derek Chen-Becker před 11 roky
rodič
revize
98dfa50

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

@@ -24,7 +24,7 @@ import re
 from django import forms
 
 
-HIVE_IDENTIFER_REGEX = re.compile("^[a-zA-Z0-9]\w*$")
+HIVE_IDENTIFER_REGEX = re.compile("(^[a-zA-Z0-9]\w*\.)?[a-zA-Z0-9]\w*$")
 
 DL_FORMATS = [ 'csv', 'xls' ]
 

+ 10 - 1
apps/beeswax/src/beeswax/forms.py

@@ -111,7 +111,16 @@ class SaveResultsForm(DependencyAwareForm):
         if tbl:
           try:
             if self.db is not None:
-              self.db.get_table('default', tbl) # Assumes 'default' DB
+              db_name = 'default'
+              name_parts = tbl.split(".")
+              if len(name_parts) == 1:
+                tbl_name = tbl
+              elif len(name_parts) == 2:
+                db_name, tbl_name = name_parts
+              else:
+                self._errors['target_table'] = self.error_class([_('Invalid table name')])
+
+              self.db.get_table(db_name, tbl_name)
             self._errors['target_table'] = self.error_class([_('Table already exists')])
             del cleaned_data['target_table']
           except Exception:

+ 4 - 0
apps/beeswax/src/beeswax/server/dbms.py

@@ -246,6 +246,10 @@ class HiveServer2Dbms(object):
     design = query_history.design.get_design()
     database = design.query['database']
 
+    name_parts = target_table.split(".")
+    if len(name_parts) == 2:
+      database, target_table = name_parts
+
     # Case 1: Hive Server 2 backend or results straight from an existing table
     if result_meta.in_tablename:
       self.use(database)