瀏覽代碼

HUE-9166 [editor] Use the selected database in presentation mode

Johan Ahlen 5 年之前
父節點
當前提交
f9c8980bf1

+ 50 - 49
desktop/core/src/desktop/js/apps/notebook/editorViewModel.js

@@ -52,65 +52,66 @@ class EditorViewModel {
     });
     self.preEditorTogglingSnippet = ko.observable();
     self.toggleEditorMode = function() {
-      const _notebook = self.selectedNotebook();
-      const _newSnippets = [];
+      const notebook = self.selectedNotebook();
+      const newSnippets = [];
 
-      if (self.editorType() != 'notebook') {
+      if (self.editorType() !== 'notebook') {
         self.editorType('notebook');
-        self.preEditorTogglingSnippet(_notebook.snippets()[0]);
-        const _variables = _notebook.snippets()[0].variables();
-        const _statementKeys = [];
+        const sourceSnippet = notebook.snippets()[0];
+        self.preEditorTogglingSnippet(sourceSnippet);
+        const variables = sourceSnippet.variables();
+        const statementKeys = [];
         // Split statements
-        _notebook.type('notebook');
-        _notebook
-          .snippets()[0]
-          .statementsList()
-          .forEach(sql_statement => {
-            let _snippet;
-            if (sql_statement.hashCode() in _notebook.presentationSnippets()) {
-              _snippet = _notebook.presentationSnippets()[sql_statement.hashCode()]; // Persist result
-              _snippet.variables(_variables);
-            } else {
-              const _title = [];
-              const _statement = [];
-              sql_statement
-                .trim()
-                .split('\n')
-                .forEach(line => {
-                  if (line.trim().startsWith('--') && _statement.length === 0) {
-                    _title.push(line.substr(2));
-                  } else {
-                    _statement.push(line);
-                  }
-                });
-              _snippet = new Snippet(self, _notebook, {
-                type: _notebook.initialType,
-                statement_raw: _statement.join('\n'),
-                result: {},
-                name: _title.join('\n'),
-                variables: komapping.toJS(_variables)
+        notebook.type('notebook');
+        const database = sourceSnippet.database();
+        sourceSnippet.statementsList().forEach(sql_statement => {
+          let presentationSnippet;
+          const statementKey = sql_statement.hashCode() + database;
+          if (statementKey in notebook.presentationSnippets()) {
+            presentationSnippet = notebook.presentationSnippets()[statementKey]; // Persist result
+            presentationSnippet.variables(variables);
+          } else {
+            const titleLines = [];
+            const statementLines = [];
+            sql_statement
+              .trim()
+              .split('\n')
+              .forEach(line => {
+                if (line.trim().startsWith('--') && statementLines.length === 0) {
+                  titleLines.push(line.substr(2));
+                } else {
+                  statementLines.push(line);
+                }
               });
-              _snippet.variables = _notebook.snippets()[0].variables;
-              _snippet.init();
-              _notebook.presentationSnippets()[sql_statement.hashCode()] = _snippet;
-            }
-            _statementKeys.push(sql_statement.hashCode());
-            _newSnippets.push(_snippet);
-          });
-        $.each(_notebook.presentationSnippets(), key => {
+            presentationSnippet = new Snippet(self, notebook, {
+              type: notebook.initialType,
+              database: database,
+              statement_raw: statementLines.join('\n'),
+              result: {},
+              name: titleLines.join('\n'),
+              variables: komapping.toJS(variables)
+            });
+            presentationSnippet.variables = sourceSnippet.variables;
+            presentationSnippet.init();
+            notebook.presentationSnippets()[statementKey] = presentationSnippet;
+          }
+          statementKeys.push(statementKey);
+          newSnippets.push(presentationSnippet);
+        });
+        $.each(notebook.presentationSnippets(), key => {
           // Dead statements
-          if (!key in _statementKeys) {
-            delete _notebook.presentationSnippets()[key];
+          if (!key in statementKeys) {
+            delete notebook.presentationSnippets()[key];
           }
         });
       } else {
-        self.editorType(_notebook.initialType);
+        self.editorType(notebook.initialType);
         // Revert to one statement
-        _newSnippets.push(self.preEditorTogglingSnippet());
-        _notebook.type('query-' + _notebook.initialType);
+        newSnippets.push(self.preEditorTogglingSnippet());
+        notebook.type('query-' + notebook.initialType);
       }
-      _notebook.snippets(_newSnippets);
-      _newSnippets.forEach(snippet => {
+      notebook.snippets(newSnippets);
+      newSnippets.forEach(snippet => {
         huePubSub.publish('editor.redraw.data', { snippet: snippet });
       });
     };

+ 26 - 22
desktop/core/src/desktop/js/apps/notebook2/editorViewModel.js

@@ -512,43 +512,46 @@ class EditorViewModel {
   }
 
   toggleEditorMode() {
-    const selectedNotebook = this.selectedNotebook();
+    const notebook = this.selectedNotebook();
     const newSnippets = [];
 
     const toPresentationMode = this.editorType() !== 'notebook';
 
     if (toPresentationMode) {
       this.editorType('notebook');
-      const sourceSnippet = selectedNotebook.snippets()[0];
+      const sourceSnippet = notebook.snippets()[0];
       this.preEditorTogglingSnippet(sourceSnippet);
       const variables = sourceSnippet.variables();
       const statementKeys = {};
       // Split statements
-      selectedNotebook.type('notebook');
+      notebook.type('notebook');
+
+      const database = sourceSnippet.database();
 
       sourceSnippet.executor.executables.forEach(executable => {
         const sqlStatement = executable.parsedStatement.statement;
-        const sqlStatementHash = sqlStatement.hashCode();
+        const statementKey = sqlStatement.hashCode() + database;
 
         let presentationSnippet;
 
-        if (!selectedNotebook.presentationSnippets()[sqlStatementHash]) {
-          const titleParts = [];
-          const statementParts = [];
+        if (!notebook.presentationSnippets()[statementKey]) {
+          const titleLines = [];
+          const statementLines = [];
           sqlStatement
             .trim()
             .split('\n')
             .forEach(line => {
-              if (line.trim().startsWith('--') && statementParts.length === 0) {
-                titleParts.push(line.substr(2));
+              if (line.trim().startsWith('--') && statementLines.length === 0) {
+                titleLines.push(line.substr(2));
               } else {
-                statementParts.push(line);
+                statementLines.push(line);
               }
             });
-          presentationSnippet = new Snippet(this, selectedNotebook, {
-            type: selectedNotebook.initialType,
-            statement_raw: statementParts.join('\n'),
-            name: titleParts.join('\n'),
+          presentationSnippet = new Snippet(this, notebook, {
+            type: notebook.initialType,
+            statement_raw: statementLines.join('\n'),
+            database: database,
+            name: titleLines.join('\n'),
             variables: komapping.toJS(variables)
           });
           window.setTimeout(() => {
@@ -562,30 +565,31 @@ class EditorViewModel {
             presentationSnippet.activeExecutable(reattachedExecutable);
           }, 1000); // TODO: Make it possible to set activeSnippet on Snippet creation
           presentationSnippet.init();
-          selectedNotebook.presentationSnippets()[sqlStatementHash] = presentationSnippet;
+          notebook.presentationSnippets()[statementKey] = presentationSnippet;
         } else {
-          presentationSnippet = selectedNotebook.presentationSnippets()[sqlStatementHash];
+          presentationSnippet = notebook.presentationSnippets()[statementKey];
         }
         presentationSnippet.variables(sourceSnippet.variables());
-        statementKeys[sqlStatement.hashCode()] = true;
+        statementKeys[statementKey] = true;
         newSnippets.push(presentationSnippet);
       });
 
-      Object.keys(selectedNotebook.presentationSnippets()).forEach(key => {
+      Object.keys(notebook.presentationSnippets()).forEach(key => {
         // Dead statements
         if (!statementKeys[key]) {
-          selectedNotebook.presentationSnippets()[key].executor.executables.forEach(executable => {
+          notebook.presentationSnippets()[key].executor.executables.forEach(executable => {
             executable.cancelBatchChain();
           });
+          delete notebook.presentationSnippets()[key];
         }
       });
     } else {
-      this.editorType(selectedNotebook.initialType);
+      this.editorType(notebook.initialType);
       // Revert to one statement
       newSnippets.push(this.preEditorTogglingSnippet());
-      selectedNotebook.type('query-' + selectedNotebook.initialType);
+      notebook.type('query-' + notebook.initialType);
     }
-    selectedNotebook.snippets(newSnippets);
+    notebook.snippets(newSnippets);
     newSnippets.forEach(snippet => {
       huePubSub.publish('editor.redraw.data', { snippet: snippet });
       if (toPresentationMode) {