From 492e585ab7e04b306762cddcad9df42d4e07d471 Mon Sep 17 00:00:00 2001
From: Tom Robinson <tlrobinson@gmail.com>
Date: Tue, 11 Oct 2016 17:02:05 -0700
Subject: [PATCH] Fix SQL button logic. Resolves #3515

---
 frontend/src/metabase/query_builder/QueryHeader.jsx | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/frontend/src/metabase/query_builder/QueryHeader.jsx b/frontend/src/metabase/query_builder/QueryHeader.jsx
index 58949baa6a3..3f56290fd63 100644
--- a/frontend/src/metabase/query_builder/QueryHeader.jsx
+++ b/frontend/src/metabase/query_builder/QueryHeader.jsx
@@ -169,7 +169,7 @@ export default class QueryHeader extends Component {
     }
 
     getHeaderButtons() {
-        const { isNew, isDirty, isEditing, tableMetadata } = this.props;
+        const { isNew, isDirty, isEditing, tableMetadata, databases } = this.props;
 
         var buttonSections = [];
 
@@ -335,9 +335,12 @@ export default class QueryHeader extends Component {
                 key="queryModeToggle"
                 mode={this.props.card.dataset_query.type}
                 allowNativeToQuery={isNew && !isDirty}
-                allowQueryToNative={isNew && (!isDirty ||
-                    (tableMetadata && tableMetadata.db && tableMetadata.db.native_permissions === "write")
-                )}
+                allowQueryToNative={tableMetadata ?
+                    // if a table is selected, only enable if user has native write permissions for THAT database
+                    tableMetadata.db && tableMetadata.db.native_permissions === "write" :
+                    // if no table is selected, only enable if user has native write permissions for ANY database
+                    _.any(databases, (db) => db.native_permissions === "write")
+                }
                 nativeForm={this.props.result && this.props.result.data && this.props.result.data.native_form}
                 onSetMode={this.props.setQueryModeFn}
                 tableMetadata={tableMetadata}
-- 
GitLab