{"action":"created","comment":{"url":"https://api.github.com/repos/caskdata/cdap/pulls/comments/25302212","id":25302212,"diff_hunk":"@@ -591,7 +595,52 @@ public QueryHandle getTypeInfo() throws ExploreException, SQLException {\n   }\n \n   @Override\n-  public QueryHandle execute(String statement) throws ExploreException, SQLException {\n+  public QueryHandle createNamespace(Id.Namespace namespace) throws ExploreException, SQLException {\n+    startAndWait();\n+\n+    try {\n+      String namespaceId = namespace.getId();\n+      Map<String, String> sessionConf = startSession();\n+      // It looks like the username and password below is not used when security is disabled in Hive Server2.\n+      SessionHandle sessionHandle = cliService.openSession(\"\", \"\", sessionConf);\n+\n+      // \"IF NOT EXISTS\" so that this operation is idempotent.\n+      String statement = String.format(\"CREATE DATABASE IF NOT EXISTS %s\", namespaceId);\n+      OperationHandle operationHandle = doExecute(sessionHandle, statement);\n+      QueryHandle handle = saveOperationInfo(operationHandle, sessionHandle, sessionConf, statement, namespaceId);\n+      LOG.trace(\"Creating database {} with handle {}\", namespaceId, handle);\n+      return handle;\n+    } catch (HiveSQLException e) {\n+      throw getSqlException(e);\n+    } catch (Throwable e) {\n+      throw new ExploreException(e);\n+    }\n+  }\n+\n+  @Override\n+  public QueryHandle deleteNamespace(Id.Namespace namespace) throws ExploreException, SQLException {\n+    startAndWait();\n+\n+    try {\n+      String namespaceId = namespace.getId();\n+      Map<String, String> sessionConf = startSession();\n+      // It looks like the username and password below is not used when security is disabled in Hive Server2.\n+      SessionHandle sessionHandle = cliService.openSession(\"\", \"\", sessionConf);\n+\n+      String statement = String.format(\"DROP DATABASE %s\", namespaceId);\n+      OperationHandle operationHandle = doExecute(sessionHandle, statement);\n+      QueryHandle handle = saveOperationInfo(operationHandle, sessionHandle, sessionConf, statement, namespaceId);\n+      LOG.trace(\"Creating database {} with handle {}\", namespaceId, handle);\n+      return handle;\n+    } catch (HiveSQLException e) {\n+      throw getSqlException(e);\n+    } catch (Throwable e) {\n+      throw new ExploreException(e);\n+    }\n+  }\n+\n+  @Override\n+  public QueryHandle execute(String namespace, String statement) throws ExploreException, SQLException {","path":"cdap-explore/src/main/java/co/cask/cdap/explore/service/hive/BaseHiveExploreService.java","position":140,"original_position":140,"commit_id":"d0beb4f3293d920a56a95858bf140f8cc059f71d","original_commit_id":"d0beb4f3293d920a56a95858bf140f8cc059f71d","user":{"login":"bdmogal","id":3895099,"avatar_url":"https://avatars.githubusercontent.com/u/3895099?v=3","gravatar_id":"","url":"https://api.github.com/users/bdmogal","html_url":"https://github.com/bdmogal","followers_url":"https://api.github.com/users/bdmogal/followers","following_url":"https://api.github.com/users/bdmogal/following{/other_user}","gists_url":"https://api.github.com/users/bdmogal/gists{/gist_id}","starred_url":"https://api.github.com/users/bdmogal/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bdmogal/subscriptions","organizations_url":"https://api.github.com/users/bdmogal/orgs","repos_url":"https://api.github.com/users/bdmogal/repos","events_url":"https://api.github.com/users/bdmogal/events{/privacy}","received_events_url":"https://api.github.com/users/bdmogal/received_events","type":"User","site_admin":false},"body":"Better to pass ``Id.Namespace`` to keep it consistent","created_at":"2015-02-24T22:56:58Z","updated_at":"2015-02-24T22:56:58Z","html_url":"https://github.com/caskdata/cdap/pull/1383#discussion_r25302212","pull_request_url":"https://api.github.com/repos/caskdata/cdap/pulls/1383","_links":{"self":{"href":"https://api.github.com/repos/caskdata/cdap/pulls/comments/25302212"},"html":{"href":"https://github.com/caskdata/cdap/pull/1383#discussion_r25302212"},"pull_request":{"href":"https://api.github.com/repos/caskdata/cdap/pulls/1383"}}},"pull_request":{"url":"https://api.github.com/repos/caskdata/cdap/pulls/1383","id":29765315,"html_url":"https://github.com/caskdata/cdap/pull/1383","diff_url":"https://github.com/caskdata/cdap/pull/1383.diff","patch_url":"https://github.com/caskdata/cdap/pull/1383.patch","issue_url":"https://api.github.com/repos/caskdata/cdap/issues/1383","number":1383,"state":"open","locked":false,"title":" (CDAP-1516) Namespace Explore operations","user":{"login":"ParthGandhi","id":819237,"avatar_url":"https://avatars.githubusercontent.com/u/819237?v=3","gravatar_id":"","url":"https://api.github.com/users/ParthGandhi","html_url":"https://github.com/ParthGandhi","followers_url":"https://api.github.com/users/ParthGandhi/followers","following_url":"https://api.github.com/users/ParthGandhi/following{/other_user}","gists_url":"https://api.github.com/users/ParthGandhi/gists{/gist_id}","starred_url":"https://api.github.com/users/ParthGandhi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ParthGandhi/subscriptions","organizations_url":"https://api.github.com/users/ParthGandhi/orgs","repos_url":"https://api.github.com/users/ParthGandhi/repos","events_url":"https://api.github.com/users/ParthGandhi/events{/privacy}","received_events_url":"https://api.github.com/users/ParthGandhi/received_events","type":"User","site_admin":false},"body":"Major design choices: \r\n1. Split up the Explore handlers into 2 types - those that require a namespace and those that don't. For instance, to submit a query you need a namespace, but to get the status of that query you need only the `QueryHandle` since those are unique across namespaces. \r\n2. ~~`QueryHandle` now has a `namespaceId` that isn't used for equality checking (since some operations aren't namespaced and you don't have their namespace at that point). However, it is used when getting namespace-specific queries (such as `getQueries`).~~ => Resolved by moving the `namespace` to the value of the cache, which also significantly cleans up the logic.\r\n\r\nTODO:\r\n1. ~~PFS needs to be partitioned - sync up with @bdmogal on this. Relevant tests have been ignored.~~ => Fixed.\r\n2. Add more tests for namespaced operations.","created_at":"2015-02-22T04:09:29Z","updated_at":"2015-02-24T22:56:58Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d4255f13c9f72d5797e9acd89049f2b6dedf6f5b","assignee":{"login":"sreevatsanraman","id":1148913,"avatar_url":"https://avatars.githubusercontent.com/u/1148913?v=3","gravatar_id":"","url":"https://api.github.com/users/sreevatsanraman","html_url":"https://github.com/sreevatsanraman","followers_url":"https://api.github.com/users/sreevatsanraman/followers","following_url":"https://api.github.com/users/sreevatsanraman/following{/other_user}","gists_url":"https://api.github.com/users/sreevatsanraman/gists{/gist_id}","starred_url":"https://api.github.com/users/sreevatsanraman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sreevatsanraman/subscriptions","organizations_url":"https://api.github.com/users/sreevatsanraman/orgs","repos_url":"https://api.github.com/users/sreevatsanraman/repos","events_url":"https://api.github.com/users/sreevatsanraman/events{/privacy}","received_events_url":"https://api.github.com/users/sreevatsanraman/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/caskdata/cdap/milestones/3","html_url":"https://github.com/caskdata/cdap/milestones/2.8.0","labels_url":"https://api.github.com/repos/caskdata/cdap/milestones/3/labels","id":944584,"number":3,"title":"2.8.0","description":null,"creator":{"login":"jwang47","id":1084704,"avatar_url":"https://avatars.githubusercontent.com/u/1084704?v=3","gravatar_id":"","url":"https://api.github.com/users/jwang47","html_url":"https://github.com/jwang47","followers_url":"https://api.github.com/users/jwang47/followers","following_url":"https://api.github.com/users/jwang47/following{/other_user}","gists_url":"https://api.github.com/users/jwang47/gists{/gist_id}","starred_url":"https://api.github.com/users/jwang47/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jwang47/subscriptions","organizations_url":"https://api.github.com/users/jwang47/orgs","repos_url":"https://api.github.com/users/jwang47/repos","events_url":"https://api.github.com/users/jwang47/events{/privacy}","received_events_url":"https://api.github.com/users/jwang47/received_events","type":"User","site_admin":false},"open_issues":11,"closed_issues":83,"state":"open","created_at":"2015-01-21T01:15:14Z","updated_at":"2015-02-24T19:25:15Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/caskdata/cdap/pulls/1383/commits","review_comments_url":"https://api.github.com/repos/caskdata/cdap/pulls/1383/comments","review_comment_url":"https://api.github.com/repos/caskdata/cdap/pulls/comments{/number}","comments_url":"https://api.github.com/repos/caskdata/cdap/issues/1383/comments","statuses_url":"https://api.github.com/repos/caskdata/cdap/statuses/d0beb4f3293d920a56a95858bf140f8cc059f71d","head":{"label":"caskdata:feature/CDAP-1516-namespaced-explore","ref":"feature/CDAP-1516-namespaced-explore","sha":"d0beb4f3293d920a56a95858bf140f8cc059f71d","user":{"login":"caskdata","id":8123023,"avatar_url":"https://avatars.githubusercontent.com/u/8123023?v=3","gravatar_id":"","url":"https://api.github.com/users/caskdata","html_url":"https://github.com/caskdata","followers_url":"https://api.github.com/users/caskdata/followers","following_url":"https://api.github.com/users/caskdata/following{/other_user}","gists_url":"https://api.github.com/users/caskdata/gists{/gist_id}","starred_url":"https://api.github.com/users/caskdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/caskdata/subscriptions","organizations_url":"https://api.github.com/users/caskdata/orgs","repos_url":"https://api.github.com/users/caskdata/repos","events_url":"https://api.github.com/users/caskdata/events{/privacy}","received_events_url":"https://api.github.com/users/caskdata/received_events","type":"Organization","site_admin":false},"repo":{"id":22542759,"name":"cdap","full_name":"caskdata/cdap","owner":{"login":"caskdata","id":8123023,"avatar_url":"https://avatars.githubusercontent.com/u/8123023?v=3","gravatar_id":"","url":"https://api.github.com/users/caskdata","html_url":"https://github.com/caskdata","followers_url":"https://api.github.com/users/caskdata/followers","following_url":"https://api.github.com/users/caskdata/following{/other_user}","gists_url":"https://api.github.com/users/caskdata/gists{/gist_id}","starred_url":"https://api.github.com/users/caskdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/caskdata/subscriptions","organizations_url":"https://api.github.com/users/caskdata/orgs","repos_url":"https://api.github.com/users/caskdata/repos","events_url":"https://api.github.com/users/caskdata/events{/privacy}","received_events_url":"https://api.github.com/users/caskdata/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/caskdata/cdap","description":"Cask Data Application Platform (CDAP)","fork":false,"url":"https://api.github.com/repos/caskdata/cdap","forks_url":"https://api.github.com/repos/caskdata/cdap/forks","keys_url":"https://api.github.com/repos/caskdata/cdap/keys{/key_id}","collaborators_url":"https://api.github.com/repos/caskdata/cdap/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/caskdata/cdap/teams","hooks_url":"https://api.github.com/repos/caskdata/cdap/hooks","issue_events_url":"https://api.github.com/repos/caskdata/cdap/issues/events{/number}","events_url":"https://api.github.com/repos/caskdata/cdap/events","assignees_url":"https://api.github.com/repos/caskdata/cdap/assignees{/user}","branches_url":"https://api.github.com/repos/caskdata/cdap/branches{/branch}","tags_url":"https://api.github.com/repos/caskdata/cdap/tags","blobs_url":"https://api.github.com/repos/caskdata/cdap/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/caskdata/cdap/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/caskdata/cdap/git/refs{/sha}","trees_url":"https://api.github.com/repos/caskdata/cdap/git/trees{/sha}","statuses_url":"https://api.github.com/repos/caskdata/cdap/statuses/{sha}","languages_url":"https://api.github.com/repos/caskdata/cdap/languages","stargazers_url":"https://api.github.com/repos/caskdata/cdap/stargazers","contributors_url":"https://api.github.com/repos/caskdata/cdap/contributors","subscribers_url":"https://api.github.com/repos/caskdata/cdap/subscribers","subscription_url":"https://api.github.com/repos/caskdata/cdap/subscription","commits_url":"https://api.github.com/repos/caskdata/cdap/commits{/sha}","git_commits_url":"https://api.github.com/repos/caskdata/cdap/git/commits{/sha}","comments_url":"https://api.github.com/repos/caskdata/cdap/comments{/number}","issue_comment_url":"https://api.github.com/repos/caskdata/cdap/issues/comments{/number}","contents_url":"https://api.github.com/repos/caskdata/cdap/contents/{+path}","compare_url":"https://api.github.com/repos/caskdata/cdap/compare/{base}...{head}","merges_url":"https://api.github.com/repos/caskdata/cdap/merges","archive_url":"https://api.github.com/repos/caskdata/cdap/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/caskdata/cdap/downloads","issues_url":"https://api.github.com/repos/caskdata/cdap/issues{/number}","pulls_url":"https://api.github.com/repos/caskdata/cdap/pulls{/number}","milestones_url":"https://api.github.com/repos/caskdata/cdap/milestones{/number}","notifications_url":"https://api.github.com/repos/caskdata/cdap/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/caskdata/cdap/labels{/name}","releases_url":"https://api.github.com/repos/caskdata/cdap/releases{/id}","created_at":"2014-08-02T09:00:10Z","updated_at":"2015-02-24T22:40:49Z","pushed_at":"2015-02-24T22:50:46Z","git_url":"git://github.com/caskdata/cdap.git","ssh_url":"git@github.com:caskdata/cdap.git","clone_url":"https://github.com/caskdata/cdap.git","svn_url":"https://github.com/caskdata/cdap","homepage":"http://cdap.io","size":784314,"stargazers_count":27,"watchers_count":27,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":9,"mirror_url":null,"open_issues_count":21,"forks":9,"open_issues":21,"watchers":27,"default_branch":"develop"}},"base":{"label":"caskdata:develop","ref":"develop","sha":"0e49b26069dd32a1765e4994ef90ea8377eab29c","user":{"login":"caskdata","id":8123023,"avatar_url":"https://avatars.githubusercontent.com/u/8123023?v=3","gravatar_id":"","url":"https://api.github.com/users/caskdata","html_url":"https://github.com/caskdata","followers_url":"https://api.github.com/users/caskdata/followers","following_url":"https://api.github.com/users/caskdata/following{/other_user}","gists_url":"https://api.github.com/users/caskdata/gists{/gist_id}","starred_url":"https://api.github.com/users/caskdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/caskdata/subscriptions","organizations_url":"https://api.github.com/users/caskdata/orgs","repos_url":"https://api.github.com/users/caskdata/repos","events_url":"https://api.github.com/users/caskdata/events{/privacy}","received_events_url":"https://api.github.com/users/caskdata/received_events","type":"Organization","site_admin":false},"repo":{"id":22542759,"name":"cdap","full_name":"caskdata/cdap","owner":{"login":"caskdata","id":8123023,"avatar_url":"https://avatars.githubusercontent.com/u/8123023?v=3","gravatar_id":"","url":"https://api.github.com/users/caskdata","html_url":"https://github.com/caskdata","followers_url":"https://api.github.com/users/caskdata/followers","following_url":"https://api.github.com/users/caskdata/following{/other_user}","gists_url":"https://api.github.com/users/caskdata/gists{/gist_id}","starred_url":"https://api.github.com/users/caskdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/caskdata/subscriptions","organizations_url":"https://api.github.com/users/caskdata/orgs","repos_url":"https://api.github.com/users/caskdata/repos","events_url":"https://api.github.com/users/caskdata/events{/privacy}","received_events_url":"https://api.github.com/users/caskdata/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/caskdata/cdap","description":"Cask Data Application Platform (CDAP)","fork":false,"url":"https://api.github.com/repos/caskdata/cdap","forks_url":"https://api.github.com/repos/caskdata/cdap/forks","keys_url":"https://api.github.com/repos/caskdata/cdap/keys{/key_id}","collaborators_url":"https://api.github.com/repos/caskdata/cdap/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/caskdata/cdap/teams","hooks_url":"https://api.github.com/repos/caskdata/cdap/hooks","issue_events_url":"https://api.github.com/repos/caskdata/cdap/issues/events{/number}","events_url":"https://api.github.com/repos/caskdata/cdap/events","assignees_url":"https://api.github.com/repos/caskdata/cdap/assignees{/user}","branches_url":"https://api.github.com/repos/caskdata/cdap/branches{/branch}","tags_url":"https://api.github.com/repos/caskdata/cdap/tags","blobs_url":"https://api.github.com/repos/caskdata/cdap/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/caskdata/cdap/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/caskdata/cdap/git/refs{/sha}","trees_url":"https://api.github.com/repos/caskdata/cdap/git/trees{/sha}","statuses_url":"https://api.github.com/repos/caskdata/cdap/statuses/{sha}","languages_url":"https://api.github.com/repos/caskdata/cdap/languages","stargazers_url":"https://api.github.com/repos/caskdata/cdap/stargazers","contributors_url":"https://api.github.com/repos/caskdata/cdap/contributors","subscribers_url":"https://api.github.com/repos/caskdata/cdap/subscribers","subscription_url":"https://api.github.com/repos/caskdata/cdap/subscription","commits_url":"https://api.github.com/repos/caskdata/cdap/commits{/sha}","git_commits_url":"https://api.github.com/repos/caskdata/cdap/git/commits{/sha}","comments_url":"https://api.github.com/repos/caskdata/cdap/comments{/number}","issue_comment_url":"https://api.github.com/repos/caskdata/cdap/issues/comments{/number}","contents_url":"https://api.github.com/repos/caskdata/cdap/contents/{+path}","compare_url":"https://api.github.com/repos/caskdata/cdap/compare/{base}...{head}","merges_url":"https://api.github.com/repos/caskdata/cdap/merges","archive_url":"https://api.github.com/repos/caskdata/cdap/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/caskdata/cdap/downloads","issues_url":"https://api.github.com/repos/caskdata/cdap/issues{/number}","pulls_url":"https://api.github.com/repos/caskdata/cdap/pulls{/number}","milestones_url":"https://api.github.com/repos/caskdata/cdap/milestones{/number}","notifications_url":"https://api.github.com/repos/caskdata/cdap/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/caskdata/cdap/labels{/name}","releases_url":"https://api.github.com/repos/caskdata/cdap/releases{/id}","created_at":"2014-08-02T09:00:10Z","updated_at":"2015-02-24T22:40:49Z","pushed_at":"2015-02-24T22:50:46Z","git_url":"git://github.com/caskdata/cdap.git","ssh_url":"git@github.com:caskdata/cdap.git","clone_url":"https://github.com/caskdata/cdap.git","svn_url":"https://github.com/caskdata/cdap","homepage":"http://cdap.io","size":784314,"stargazers_count":27,"watchers_count":27,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":9,"mirror_url":null,"open_issues_count":21,"forks":9,"open_issues":21,"watchers":27,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/caskdata/cdap/pulls/1383"},"html":{"href":"https://github.com/caskdata/cdap/pull/1383"},"issue":{"href":"https://api.github.com/repos/caskdata/cdap/issues/1383"},"comments":{"href":"https://api.github.com/repos/caskdata/cdap/issues/1383/comments"},"review_comments":{"href":"https://api.github.com/repos/caskdata/cdap/pulls/1383/comments"},"review_comment":{"href":"https://api.github.com/repos/caskdata/cdap/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/caskdata/cdap/pulls/1383/commits"},"statuses":{"href":"https://api.github.com/repos/caskdata/cdap/statuses/d0beb4f3293d920a56a95858bf140f8cc059f71d"}}}}