Browse Source

[hive] Add quoting when doing a "use" database

That way DBs like __test can be selected in the UI.
Romain Rigaux 10 years ago
parent
commit
8fd9e95
2 changed files with 14 additions and 2 deletions
  1. 2 2
      apps/beeswax/src/beeswax/server/dbms.py
  2. 12 0
      apps/beeswax/src/beeswax/tests.py

+ 2 - 2
apps/beeswax/src/beeswax/server/dbms.py

@@ -123,7 +123,7 @@ class HiveServer2Dbms(object):
 
 
   def get_tables(self, database='default', table_names='*'):
-    hql = "SHOW TABLES IN %s '%s'" % (database, table_names) # self.client.get_tables(database, table_names) is too slow
+    hql = "SHOW TABLES IN `%s` '%s'" % (database, table_names) # self.client.get_tables(database, table_names) is too slow
     query = hql_query(hql)
     handle = self.execute_and_wait(query, timeout_sec=15.0)
 
@@ -459,7 +459,7 @@ class HiveServer2Dbms(object):
 
 
   def use(self, database):
-    query = hql_query('USE %s' % database)
+    query = hql_query('USE `%s`' % database)
     return self.client.use(query)
 
 

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

@@ -1746,6 +1746,18 @@ for x in sys.stdin:
     assert_true("fields" in json_resp)
     assert_true("extended_fields" in json_resp)
 
+  def test_databases_quote(self):
+    c = self.client
+    db_name = '__%s' % self.db_name
+    _make_query(c, "CREATE DATABASE IF NOT EXISTS `%s`" % db_name, database=self.db_name)
+
+    try:
+      self.db.use(db_name)
+      self.db.get_tables(db_name)
+    finally:
+      self.db.use(self.db_name)
+      _make_query(c, "DROP DATABASE IF EXISTS `%s`" % db_name, database=self.db_name)
+
 
 def test_beeswax_api_get_simple_data_type():
   # Return just the outer type name for complex nested types