Skip to content
Snippets Groups Projects
Unverified Commit 4fd373b3 authored by Nemanja Glumac's avatar Nemanja Glumac Committed by GitHub
Browse files

Fix and reproduce #20499: The term "SQL query" used in DBs that don't support SQL (#20506)


* Use the term "Native query"

* Fix/update e2e tests

* Add repro for #20499

* make text conditional on engine and write permissions

* Revert "Fix/update e2e tests"

This reverts commit 3462cd113ec641f29cd3ff128fb7a32281adc315.

Co-authored-by: default avatarDalton Johnson <daltojohnso@users.noreply.github.com>
parent 6dff2cf8
No related branches found
No related tags found
No related merge requests found
......@@ -96,6 +96,10 @@ export default class Database extends Base {
return this.hasFeature("expressions") && this.hasFeature("left-join");
}
canWrite() {
return this.native_permissions === "write";
}
// QUESTIONS
newQuestion() {
return this.question()
......
......@@ -260,4 +260,24 @@ describe("Database", () => {
expect(database1.savedQuestionsDatabase()).toBe(database2);
});
});
describe("canWrite", () => {
it("should be true for a db with write permissions", () => {
const database = new Database({
id: 1,
native_permissions: "write",
});
expect(database.canWrite()).toBe(true);
});
it("should be false for a db without write permissions", () => {
const database = new Database({
id: 1,
native_permissions: "none",
});
expect(database.canWrite()).toBe(false);
});
});
});
......@@ -28,6 +28,7 @@ import {
getHasDataAccess,
getHasNativeWrite,
getPlainNativeQuery,
getHasDbWithJsonEngine,
} from "metabase/new_query/selectors";
import Database from "metabase/entities/databases";
......@@ -38,6 +39,7 @@ const mapStateToProps = (state, props) => ({
plainNativeQuery: getPlainNativeQuery(state),
hasDataAccess: getHasDataAccess(state),
hasNativeWrite: getHasNativeWrite(state),
hasDbWithJsonEngine: getHasDbWithJsonEngine(state, props),
});
import { getDefaultSearchColor } from "metabase/nav/constants";
......@@ -114,7 +116,7 @@ export default class Navbar extends Component {
}
renderMainNav() {
const { hasDataAccess, hasNativeWrite } = this.props;
const { hasDataAccess, hasNativeWrite, hasDbWithJsonEngine } = this.props;
return (
<NavRoot
......@@ -178,7 +180,9 @@ export default class Navbar extends Component {
...(hasNativeWrite
? [
{
title: t`SQL query`,
title: hasDbWithJsonEngine
? t`Native query`
: t`SQL query`,
icon: `sql`,
link: Urls.newQuestion({
type: "native",
......
......@@ -4,9 +4,11 @@
*/
import { createSelector } from "reselect";
import { getMetadata, getDatabases } from "metabase/selectors/metadata";
import NativeQuery from "metabase-lib/lib/queries/NativeQuery";
import Question from "metabase-lib/lib/Question";
import { getEngineNativeType } from "metabase/lib/engine";
export const getPlainNativeQuery = state => {
const metadata = getMetadata(state);
......@@ -37,3 +39,10 @@ export const getHasNativeWrite = createSelector(
(databaseMap = {}) =>
Object.values(databaseMap).some(d => d.native_permissions === "write"),
);
export const getHasDbWithJsonEngine = (state, props) => {
return (props.databases || []).some(database => {
const isJsonEngine = getEngineNativeType(database.engine) === "json";
return database.canWrite() && isJsonEngine;
});
};
......@@ -2,14 +2,16 @@ import { restore, modal } from "__support__/e2e/cypress";
const MONGO_DB_NAME = "QA Mongo4";
describe("scenatios > question > native > mongo", () => {
describe("scenarios > question > native > mongo", () => {
before(() => {
cy.intercept("POST", "/api/card").as("createQuestion");
restore("mongo-4");
cy.signInAsNormalUser();
cy.visit("/question/new");
cy.visit("/");
cy.findByText("New").click();
// Reproduces metabase#20499 issue
cy.findByText("Native query").click();
cy.findByText(MONGO_DB_NAME).click();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment