private async Task <bool> Execute(string sql) { try { if (_operationInProgress) { throw new Exception("Another operation is already in progress."); } _manager.CommitOpenEditors(); await ExecuteCore(sql); _manager.SetDirty(); _manager.Rescan(); return(true); } catch (Exception ex) { MessageForm.ShowError(TopLevelControl, "Script Error", "An error occurred.", ex.Message); return(false); } }
public static async Task <bool> Start(IWin32Window owner, string filePath, NotebookManager manager) { DatabaseSchema schema = null; manager.PushStatus("Reading notebook..."); try { schema = await Task.Run(() => DatabaseSchema.FromNotebook(manager.Notebook)); } catch (Exception ex) { MessageForm.ShowError(owner, "Import Error", "Failed to read the list of tables in the notebook.", ex.Message); return(false); } manager.PopStatus(); string importSql; using (var f = new ImportCsvForm(filePath, schema, manager)) { if (f.ShowDialog(owner) != DialogResult.OK) { return(false); } importSql = f.GeneratedImportSql; } manager.PushStatus($"Importing \"{Path.GetFileName(filePath)}\"..."); try { await Task.Run(() => { manager.ExecuteScript(importSql, withTransaction: true); }); manager.Rescan(); } catch (Exception ex) { manager.PopStatus(); MessageForm.ShowError(owner, "Import Error", "The import failed.", ex.GetErrorMessage()); return(false); } manager.SetDirty(); manager.PopStatus(); return(true); }
private static async Task <bool> RunImportScript(string importSql, IWin32Window owner, string filePath, NotebookManager manager) { manager.PushStatus($"Importing \"{Path.GetFileName(filePath)}\"..."); try { await Task.Run(() => { manager.ExecuteScript(importSql, transactionType: NotebookManager.TransactionType.Transaction); }); manager.Rescan(); } catch (Exception ex) { manager.PopStatus(); MessageForm.ShowError(owner, "Import Error", "The import failed.", ex.GetErrorMessage()); return(false); } manager.SetDirty(); manager.PopStatus(); return(true); }
public QueryDocumentControl(string name, NotebookManager manager, IWin32Window mainForm, Slot <bool> operationInProgress) { InitializeComponent(); ItemName = name; _manager = manager; _notebook = manager.Notebook; _mainForm = mainForm; _operationInProgress = operationInProgress; _resultToolStrip.SetMenuAppearance(); _grid.EnableDoubleBuffering(); _textCtl = new SqlTextControl(false) { Dock = DockStyle.Fill, Padding = new Padding(4, 0, 0, 0) }; _sqlPanel.Controls.Add(_textCtl); // if this tool window has been pulled off into a floating window, then the MainForm's key handler won't // trigger on F5, so catch it here. _textCtl.Scintilla.KeyDown += async(sender, e) => { if (e.KeyCode == Keys.F5) { await Execute(); } }; Load += (sender, e) => { string initialText = _manager.GetItemData(ItemName); if (initialText != null) { _textCtl.SqlText = initialText; } _textCtl.SqlTextChanged += (sender2, e2) => _manager.SetDirty(); ShowResult(0); }; }
private string Execute(string sql) { _manager.PushStatus("Running console command..."); _manager.CommitOpenEditors(); string response; try { Dictionary <string, object> newVars; var result = _manager.ExecuteScriptEx(sql, _variables, true, out newVars); _variables = newVars; UpdateConsoleState(); _manager.SetDirty(); _manager.Rescan(); var parts = new List <string>(); if (result.ScalarResult == null && !result.TextOutput.Any() && !result.DataTables.Any()) { parts.Add("<div style=\"overflow: hidden;\"> </div>"); } if (result.ScalarResult != null) { parts.Add( "<div style=\"overflow: hidden;\">" + $"Returned: {WebUtility.HtmlEncode(result.ScalarResult.ToString())}" + "</div>" ); } if (result.TextOutput.Any()) { parts.Add( "<div style=\"overflow: hidden; overflow-x: auto; padding-bottom: 18px;\"><pre style=\"margin: 0; padding: 0;\"><font face=\"Segoe UI\" size=\"2\">" + string.Join("<br>", result.TextOutput.Select(WebUtility.HtmlEncode)) + "</font></pre></div>" ); } var sb = new StringBuilder(); // inline the CSS so it gets included when the user copies tables to the clipboard var cellCss = "border: 1px solid rgb(229, 229, 229); padding: 3px; padding-left: 6px; " + "padding-right: 6px; text-align: left; vertical-align: top; font: 'Segoe UI' 9pt; " + "max-height: 100px; overflow-y: auto;"; foreach (var dt in result.DataTables) { sb.Append("<div style=\"overflow-x: auto; overflow-y: hidden; padding-bottom: 18px;\">"); sb.Append("<table style=\"border-collapse: collapse;\"><thead><tr>"); foreach (var col in dt.Columns) { sb.Append($"<td style=\"{cellCss}\"><pre style=\"margin: 0; padding: 0;\">" + $"<font face=\"Segoe UI\" size=\"2\"><b>{WebUtility.HtmlEncode(col)}</b></font></pre></td>"); } sb.Append("</tr></thead><tbody>"); int count = 0; foreach (var row in dt.Rows) { if (count >= 100) { break; } sb.Append("<tr>"); foreach (var cell in row) { string cellText = cell.ToString(); var cellBytes = cell as byte[]; if (cellBytes != null) { if (ArrayUtil.IsSqlArray(cellBytes)) { cellText = "[" + string.Join(", ", ArrayUtil.GetArrayElements(cellBytes)) + "]"; } } sb.Append($"<td style=\"{cellCss}\"><pre style=\"margin:0; padding:0;\">" + $"<font face=\"Segoe UI\" size=\"2\">{WebUtility.HtmlEncode(cellText)}</font></pre></td>"); } sb.Append("</tr>"); count++; } sb.Append("</tbody></table></div>"); if (dt.Rows.Count > 100) { sb.Append($"<div>Table has {dt.Rows.Count} rows, showing 100.</div>"); } } parts.Add(sb.ToString()); var html = string.Join("", parts); response = html; } catch (Exception ex) { response = $"<div style=\"overflow: hidden; color: red;\">{WebUtility.HtmlEncode(ex.Message)}</div>"; } _manager.PopStatus(); return($"<div class=\"response\">{response}</div>"); }
private async Task DoCommonImport(IImportSession session) { IReadOnlyList <ImportPreviewForm.SelectedTable> selectedTables = null; bool csvHasHeaderRow = false, copyData = false; using (var frm = new ImportPreviewForm(session)) { if (frm.ShowDialog(_owner) != DialogResult.OK) { return; } selectedTables = frm.SelectedTables; csvHasHeaderRow = frm.CsvHasHeaderRow; copyData = frm.CopyData; } var fileSession = session as IFileImportSession; var dbSession = session as IDatabaseImportSession; if (fileSession != null) { fileSession.FileHasHeaderRow = csvHasHeaderRow; } Action import = () => { _notebook.Invoke(() => { _notebook.Execute("BEGIN"); try { if (dbSession != null) { DoDatabaseImport(selectedTables, copyData, dbSession); } else if (fileSession != null) { DoDatabaseImport(selectedTables, fileSession); } else { throw new InvalidOperationException("Unexpected session type."); } _notebook.Execute("COMMIT"); session.AddToRecentlyUsed(); } catch { try { _notebook.Execute("ROLLBACK"); } catch { } throw; } }); }; _manager.PushStatus("Importing the selected tables..."); Exception exception = null; await Task.Run(() => { try { import(); } catch (Exception ex) { exception = ex; } }); _manager.PopStatus(); _manager.Rescan(); if (exception == null) { _manager.SetDirty(); } else { MessageForm.ShowError(_owner, "Import Error", "The import failed.", exception.Message); } }
public NoteDocumentControl(string name, NotebookManager manager) { InitializeComponent(); ItemName = name; _manager = manager; _toolStrip.SetMenuAppearance(); _contextMenuStrip.SetMenuAppearance(); _browser.PreviewKeyDown += (sender, e) => { if (e.KeyData == (Keys.Control | Keys.C)) { EnableDisableContextMenu(); _copyMnu.PerformClick(); } else if (e.KeyData == (Keys.Control | Keys.X)) { EnableDisableContextMenu(); _cutMnu.PerformClick(); } else if (e.KeyData == (Keys.Control | Keys.V)) { EnableDisableContextMenu(); _pasteMnu.PerformClick(); } else if (e.KeyData == (Keys.Control | Keys.A)) { _selectAllMnu.PerformClick(); } else if (e.KeyData == (Keys.Control | Keys.B)) { _boldBtn.PerformClick(); } else if (e.KeyData == (Keys.Control | Keys.I)) { _italicBtn.PerformClick(); } else if (e.KeyData == (Keys.Control | Keys.U)) { _underlineBtn.PerformClick(); } else if (e.KeyData == (Keys.Control | Keys.L)) { _alignLeftBtn.PerformClick(); } else if (e.KeyData == (Keys.Control | Keys.E)) { _alignCenterBtn.PerformClick(); } else if (e.KeyData == (Keys.Control | Keys.R)) { _alignRightBtn.PerformClick(); } else if (e.KeyData == Keys.Delete) { _browser.Document.ExecCommand("delete", false, null); } else { manager.HandleAppHotkeys(e.KeyData); } }; using (var fonts = new InstalledFontCollection()) { foreach (var family in fonts.Families.OrderBy(x => x.Name)) { _fontNameCmb.Items.Add(family.Name); } } _browser.DocumentText = "<html><body></body></html>"; ((IHTMLDocument2)_browser.Document.DomDocument).designMode = "On"; var doc = (IHTMLDocument2)_browser.Document.DomDocument; doc.write(_manager.GetItemData(ItemName)); var markupContainer = (IMarkupContainer2)doc; markupContainer.RegisterForDirtyRange(_sink, out _sinkCookie); _sink.Change += (sender2, e2) => _manager.SetDirty(); _timer.Start(); Load += (sender, e) => { _browser.Focus(); _browser.Select(); }; }