You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by fj...@apache.org on 2019/08/22 16:09:48 UTC

[incubator-druid] branch master updated: Web-Console: Replace from clause (#8371)

This is an automated email from the ASF dual-hosted git repository.

fjy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-druid.git


The following commit(s) were added to refs/heads/master by this push:
     new 5274c5a  Web-Console: Replace from clause (#8371)
5274c5a is described below

commit 5274c5ab733bd12b8ff5da7405a55d65500f63cf
Author: mcbrewster <37...@users.noreply.github.com>
AuthorDate: Thu Aug 22 10:09:37 2019 -0600

    Web-Console: Replace from clause (#8371)
    
    * add replace from
    
    * add failture state
    
    * fix uninential downgrade
    
    * use uppercase for SQL keywords
---
 web-console/README.md                              |  2 +-
 web-console/package-lock.json                      |  6 ++---
 web-console/package.json                           |  2 +-
 .../__snapshots__/query-view.spec.tsx.snap         |  1 +
 .../query-view/column-tree/column-tree.spec.tsx    |  1 +
 .../views/query-view/column-tree/column-tree.tsx   | 31 ++++++++++++++++++++--
 web-console/src/views/query-view/query-view.tsx    | 13 ++++++++-
 7 files changed, 48 insertions(+), 8 deletions(-)

diff --git a/web-console/README.md b/web-console/README.md
index 0f13ce8..5fa5f7f 100644
--- a/web-console/README.md
+++ b/web-console/README.md
@@ -42,7 +42,7 @@ As part of this repo:
 - `public/` - The compiled destination of the file powering this console
 - `assets/` - The images (and other assets) used within the console
 - `script/` - Some helper bash scripts for running this console
-- `src/` - This directory (together with `lib`) constitutes all the source code for this console 
+- `src/` - This directory (together with `lib`) constitutes all the source code for this console
 
 Generated/copied dynamically
 
diff --git a/web-console/package-lock.json b/web-console/package-lock.json
index cc9543a..075d4cc 100644
--- a/web-console/package-lock.json
+++ b/web-console/package-lock.json
@@ -4428,9 +4428,9 @@
       "integrity": "sha512-0sYnfUHHMoajaud/i5BHKA12bUxiWEHJ9rxGqVEppFxsEcxef0TZQ5J59lU+UniEBcz/sG5fTESRyS7cOm3tSQ=="
     },
     "druid-query-toolkit": {
-      "version": "0.3.21",
-      "resolved": "https://registry.npmjs.org/druid-query-toolkit/-/druid-query-toolkit-0.3.21.tgz",
-      "integrity": "sha512-CdMLIqXy3pzjZb8iq2n6B8R7jTKVyAuAUdnH6kF0EbP1Fb2XSh8Kg8O88Ew+3ye4R9PY86a4LlXMPW4NSyKX+A==",
+      "version": "0.3.23",
+      "resolved": "https://registry.npmjs.org/druid-query-toolkit/-/druid-query-toolkit-0.3.23.tgz",
+      "integrity": "sha512-6wVAGFw1sjLT9U5f7QNaIKCS0VgUfWLn/X8YWf3YQN3awSCxClzFUQnLKnHeIEb7ot0ca4H6axlb7NpzGqmtzA==",
       "requires": {
         "tslib": "^1.10.0"
       }
diff --git a/web-console/package.json b/web-console/package.json
index 169209b..d5a9542 100644
--- a/web-console/package.json
+++ b/web-console/package.json
@@ -61,7 +61,7 @@
     "d3": "^5.10.1",
     "d3-array": "^2.3.1",
     "druid-console": "0.0.2",
-    "druid-query-toolkit": "^0.3.21",
+    "druid-query-toolkit": "^0.3.23",
     "file-saver": "^2.0.2",
     "has-own-prop": "^2.0.0",
     "hjson": "^3.1.2",
diff --git a/web-console/src/views/query-view/__snapshots__/query-view.spec.tsx.snap b/web-console/src/views/query-view/__snapshots__/query-view.spec.tsx.snap
index 6e4c469..21140aa 100644
--- a/web-console/src/views/query-view/__snapshots__/query-view.spec.tsx.snap
+++ b/web-console/src/views/query-view/__snapshots__/query-view.spec.tsx.snap
@@ -16,6 +16,7 @@ exports[`sql view matches snapshot 1`] = `
     hasGroupBy={[Function]}
     onQueryStringChange={[Function]}
     queryAst={[Function]}
+    replaceFrom={[Function]}
   />
   <t
     customClassName=""
diff --git a/web-console/src/views/query-view/column-tree/column-tree.spec.tsx b/web-console/src/views/query-view/column-tree/column-tree.spec.tsx
index 8edfafd..815efe4 100644
--- a/web-console/src/views/query-view/column-tree/column-tree.spec.tsx
+++ b/web-console/src/views/query-view/column-tree/column-tree.spec.tsx
@@ -59,6 +59,7 @@ describe('column tree', () => {
           ] as ColumnMetadata[]
         }
         onQueryStringChange={() => {}}
+        replaceFrom={() => null}
       />
     );
 
diff --git a/web-console/src/views/query-view/column-tree/column-tree.tsx b/web-console/src/views/query-view/column-tree/column-tree.tsx
index 31db912..fcaf8ab 100644
--- a/web-console/src/views/query-view/column-tree/column-tree.tsx
+++ b/web-console/src/views/query-view/column-tree/column-tree.tsx
@@ -27,7 +27,15 @@ import {
   Tree,
 } from '@blueprintjs/core';
 import { IconNames } from '@blueprintjs/icons';
-import { Alias, FilterClause, RefExpression, SqlQuery, StringType } from 'druid-query-toolkit';
+import {
+  Alias,
+  FilterClause,
+  RefExpression,
+  refExpressionFactory,
+  SqlQuery,
+  stringFactory,
+  StringType,
+} from 'druid-query-toolkit';
 import React, { ChangeEvent } from 'react';
 
 import { Loader } from '../../../components';
@@ -136,6 +144,7 @@ export interface ColumnTreeProps {
     filter?: FilterClause,
   ) => void;
   filterByRow: (filters: RowFilter[], preferablyRun: boolean) => void;
+  replaceFrom: (table: RefExpression, preferablyRun: boolean) => void;
   hasGroupBy: () => boolean;
   queryAst: () => SqlQuery | undefined;
   clear: (column: string, preferablyRun: boolean) => void;
@@ -173,7 +182,7 @@ export class ColumnTree extends React.PureComponent<ColumnTreeProps, ColumnTreeS
                     <Menu>
                       <MenuItem
                         icon={IconNames.FULLSCREEN}
-                        text={`Select ... from ${table}`}
+                        text={`SELECT ... FROM ${table}`}
                         onClick={() => {
                           handleTableClick(
                             schema,
@@ -198,6 +207,24 @@ export class ColumnTree extends React.PureComponent<ColumnTreeProps, ColumnTreeS
                           copyAndAlert(table, `${table} query copied to clipboard`);
                         }}
                       />
+                      <Deferred
+                        content={() => (
+                          <>
+                            {props.queryAst() && (
+                              <MenuItem
+                                icon={IconNames.EXCHANGE}
+                                text={`Replace FROM with: ${table}`}
+                                onClick={() => {
+                                  props.replaceFrom(
+                                    refExpressionFactory(stringFactory(table, `"`)),
+                                    true,
+                                  );
+                                }}
+                              />
+                            )}
+                          </>
+                        )}
+                      />
                     </Menu>
                   }
                 >
diff --git a/web-console/src/views/query-view/query-view.tsx b/web-console/src/views/query-view/query-view.tsx
index 4c8149b..69dc515 100644
--- a/web-console/src/views/query-view/query-view.tsx
+++ b/web-console/src/views/query-view/query-view.tsx
@@ -574,6 +574,13 @@ export class QueryView extends React.PureComponent<QueryViewProps, QueryViewStat
     this.handleQueryStringChange(modifiedAst.toString(), preferablyRun);
   };
 
+  private replaceFrom = (table: RefExpression, preferablyRun: boolean): void => {
+    const { queryAst } = this.state;
+    if (!queryAst) return;
+    const modifiedAst = queryAst.replaceFrom(table);
+    this.handleQueryStringChange(modifiedAst.toString(), preferablyRun);
+  };
+
   private addAggregateColumn = (
     columnName: string | RefExpression,
     functionName: string,
@@ -698,7 +705,10 @@ export class QueryView extends React.PureComponent<QueryViewProps, QueryViewStat
 
   private getCurrentFilters = () => {
     const { queryAst } = this.state;
-    return queryAst.getCurrentFilters();
+    if (queryAst) {
+      return queryAst.getCurrentFilters();
+    }
+    return [];
   };
 
   render(): JSX.Element {
@@ -730,6 +740,7 @@ export class QueryView extends React.PureComponent<QueryViewProps, QueryViewStat
             defaultSchema={defaultSchema ? defaultSchema : 'druid'}
             defaultTable={defaultTable}
             currentFilters={this.getCurrentFilters}
+            replaceFrom={this.replaceFrom}
           />
         )}
         {this.renderMainArea()}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org