This is an automated email from the ASF dual-hosted git repository.
justinpark pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to refs/heads/master by this push:
new 7a55625243 fix(sqllab): rollback clean comments out (#24009)
7a55625243 is described below
commit 7a55625243e4d405ce27d72ee869cb8e8c785f6b
Author: JUST.in DO IT <[email protected]>
AuthorDate: Thu May 11 09:41:21 2023 -0700
fix(sqllab): rollback clean comments out (#24009)
---
superset-frontend/src/SqlLab/actions/sqlLab.js | 68 +---------------------
.../src/SqlLab/actions/sqlLab.test.js | 32 ----------
.../components/RunQueryActionButton/index.tsx | 5 +-
3 files changed, 4 insertions(+), 101 deletions(-)
diff --git a/superset-frontend/src/SqlLab/actions/sqlLab.js
b/superset-frontend/src/SqlLab/actions/sqlLab.js
index d617fa23f5..3b9e68b9c1 100644
--- a/superset-frontend/src/SqlLab/actions/sqlLab.js
+++ b/superset-frontend/src/SqlLab/actions/sqlLab.js
@@ -357,72 +357,6 @@ export function fetchQueryResults(query, displayLimit) {
};
}
-const quotes = '\'"`'.split('');
-const quotedBlockHash = shortid.generate();
-const quotedBlockMatch = new RegExp(`${quotedBlockHash}:\\d+:`, 'g');
-
-function splitByQuotedBlock(str) {
- const chunks = [];
- let currentQuote = '';
- let chunkStart = 0;
-
- let i = 0;
- while (i < str.length) {
- const currentChar = str[i];
- if (
- currentQuote ? currentChar === currentQuote :
quotes.includes(currentChar)
- ) {
- let chunk;
- if (currentQuote) {
- chunk = str.substring(chunkStart, i + 1);
- chunkStart = i + 1;
- currentQuote = '';
- } else {
- chunk = str.substring(chunkStart, i);
- chunkStart = i;
- currentQuote = currentChar;
- }
- if (chunk) {
- chunks.push(chunk);
- }
- }
- i += 1;
- }
-
- if (chunkStart < str.length) {
- const lastChunk = str.substring(chunkStart);
- if (lastChunk) {
- chunks.push(lastChunk);
- }
- }
-
- return chunks;
-}
-
-export function cleanSqlComments(sql) {
- if (!sql) return '';
- // it sanitizes the following comment block groups
- // group 1 -> /* */
- // group 2 -> --
- const chunks = splitByQuotedBlock(sql);
- return (
- chunks
- // replace quoted blocks in a hash format
- .map((chunk, index) =>
- quotes.includes(chunk[0]) ? `${quotedBlockHash}:${index}:` : chunk,
- )
- .join('')
- // Clean out the commented-out blocks
- .replace(/(--.*?$|\/\*[\s\S]*?\*\/)\n?/gm, '\n')
- .trim()
- // restore quoted block to the original value
- .replace(
- quotedBlockMatch,
- quotedBlock => chunks[quotedBlock.match(/:\d+/)[0].substring(1)],
- )
- );
-}
-
export function runQuery(query) {
return function (dispatch) {
dispatch(startQuery(query));
@@ -432,7 +366,7 @@ export function runQuery(query) {
json: true,
runAsync: query.runAsync,
schema: query.schema,
- sql: cleanSqlComments(query.sql),
+ sql: query.sql,
sql_editor_id: query.sqlEditorId,
tab: query.tab,
tmp_table_name: query.tempTable,
diff --git a/superset-frontend/src/SqlLab/actions/sqlLab.test.js
b/superset-frontend/src/SqlLab/actions/sqlLab.test.js
index 46a9536fc9..01886d6f77 100644
--- a/superset-frontend/src/SqlLab/actions/sqlLab.test.js
+++ b/superset-frontend/src/SqlLab/actions/sqlLab.test.js
@@ -308,38 +308,6 @@ describe('async actions', () => {
});
});
- describe('runQuery with comments', () => {
- const makeRequest = () => {
- const request = actions.runQuery({
- ...query,
- sql: `/*
- SELECT * FROM
-*/
-SELECT 213--, {{ds}} "quote out"
-/*
-{{new_param1}}
-{{new_param2}}*/
-
-FROM table
-WHERE value = '--"NULL"--' --{{test_param}}`,
- });
- return request(dispatch, () => initialState);
- };
-
- it('makes the fetch request without comments', async () => {
- const runQueryEndpoint = 'glob:*/api/v1/sqllab/execute/';
- fetchMock.post(runQueryEndpoint, '{}', {
- overwriteRoutes: true,
- });
- await makeRequest().then(() => {
- expect(fetchMock.calls(runQueryEndpoint)).toHaveLength(1);
- expect(
- JSON.parse(fetchMock.calls(runQueryEndpoint)[0][1].body).sql,
- ).toEqual(`SELECT 213\n\n\nFROM table\nWHERE value = '--"NULL"--'`);
- });
- });
- });
-
describe('reRunQuery', () => {
let stub;
beforeEach(() => {
diff --git
a/superset-frontend/src/SqlLab/components/RunQueryActionButton/index.tsx
b/superset-frontend/src/SqlLab/components/RunQueryActionButton/index.tsx
index f9181188f9..57a22b0aec 100644
--- a/superset-frontend/src/SqlLab/components/RunQueryActionButton/index.tsx
+++ b/superset-frontend/src/SqlLab/components/RunQueryActionButton/index.tsx
@@ -26,7 +26,6 @@ import { DropdownButton } from
'src/components/DropdownButton';
import { detectOS } from 'src/utils/common';
import { QueryButtonProps } from 'src/SqlLab/types';
import useQueryEditor from 'src/SqlLab/hooks/useQueryEditor';
-import { cleanSqlComments } from 'src/SqlLab/actions/sqlLab';
export interface RunQueryActionButtonProps {
queryEditorId: string;
@@ -106,7 +105,9 @@ const RunQueryActionButton = ({
: Button;
const sqlContent = selectedText || sql || '';
- const isDisabled = cleanSqlComments(sqlContent).length === 0;
+ const isDisabled =
+ !sqlContent ||
+ !sqlContent.replace(/(\/\*[^*]*\*\/)|(\/\/[^*]*)|(--[^.].*)/gm, '').trim();
const stopButtonTooltipText = useMemo(
() =>