Search in sources :

Example 96 with DBCExecutionContext

use of org.jkiss.dbeaver.model.exec.DBCExecutionContext in project dbeaver by dbeaver.

the class DatabaseEditorUtils method setPartBackground.

public static void setPartBackground(IEditorPart editor, Composite composite) {
    if (composite == null || composite.isDisposed()) {
        return;
    }
    CTabFolder tabFolder = null;
    Composite rootComposite = composite;
    for (Composite c = composite; c != null; c = c.getParent()) {
        if (!c.isDisposed() && c.getParent() instanceof CTabFolder) {
            tabFolder = (CTabFolder) c.getParent();
            // rootComposite = c;
            break;
        }
    }
    if (tabFolder != null) {
        tabFolder.setBorderVisible(false);
    }
    DBPDataSourceContainer dsContainer = null;
    if (editor instanceof IDataSourceContainerProvider) {
        dsContainer = ((IDataSourceContainerProvider) editor).getDataSourceContainer();
    } else if (editor instanceof DBPContextProvider) {
        DBCExecutionContext context = ((DBPContextProvider) editor).getExecutionContext();
        if (context != null) {
            dsContainer = context.getDataSource().getContainer();
        }
    }
    if (dsContainer == null) {
        rootComposite.setBackground(null);
    } else {
        Color bgColor = UIUtils.getConnectionColor(dsContainer.getConnectionConfiguration());
        rootComposite.setData(DBStyles.DATABASE_EDITOR_COMPOSITE_DATASOURCE, dsContainer);
        rootComposite.setBackground(bgColor);
    }
}
Also used : IDataSourceContainerProvider(org.jkiss.dbeaver.model.IDataSourceContainerProvider) CTabFolder(org.eclipse.swt.custom.CTabFolder) Composite(org.eclipse.swt.widgets.Composite) DBCExecutionContext(org.jkiss.dbeaver.model.exec.DBCExecutionContext) DBPContextProvider(org.jkiss.dbeaver.model.DBPContextProvider) Color(org.eclipse.swt.graphics.Color) DBPDataSourceContainer(org.jkiss.dbeaver.model.DBPDataSourceContainer)

Example 97 with DBCExecutionContext

use of org.jkiss.dbeaver.model.exec.DBCExecutionContext in project dbeaver by dbeaver.

the class ObjectEditorPageControl method isObjectEditable.

public boolean isObjectEditable() {
    IEditorInput editorInput = getEditorPart().getEditorInput();
    if (editorInput instanceof IDatabaseEditorInput) {
        DBCExecutionContext context = ((IDatabaseEditorInput) editorInput).getExecutionContext();
        if (context == null) {
            return false;
        }
        if (context.getDataSource().getInfo().isReadOnlyMetaData()) {
            return false;
        }
        DBSObject databaseObject = ((IDatabaseEditorInput) editorInput).getDatabaseObject();
        return databaseObject != null && DBWorkbench.getPlatform().getEditorsRegistry().getObjectManager(databaseObject.getClass(), DBEObjectManager.class) != null;
    }
    return false;
}
Also used : IDatabaseEditorInput(org.jkiss.dbeaver.ui.editors.IDatabaseEditorInput) DBSObject(org.jkiss.dbeaver.model.struct.DBSObject) DBCExecutionContext(org.jkiss.dbeaver.model.exec.DBCExecutionContext) IEditorInput(org.eclipse.ui.IEditorInput)

Example 98 with DBCExecutionContext

use of org.jkiss.dbeaver.model.exec.DBCExecutionContext in project dbeaver by dbeaver.

the class PrefPageSQLFormat method createPreferenceContent.

@Override
protected Control createPreferenceContent(Composite parent) {
    Composite composite = UIUtils.createPlaceholder(parent, 3, 5);
    formatterSelector = UIUtils.createLabelCombo(composite, SQLEditorMessages.pref_page_sql_format_label_formatter, SWT.DROP_DOWN | SWT.READ_ONLY);
    formatterSelector.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
    formatters = SQLFormatterConfigurationRegistry.getInstance().getFormatters();
    formatters.sort(Comparator.comparing(SQLFormatterDescriptor::getLabel));
    for (SQLFormatterDescriptor formatterDesc : formatters) {
        formatterSelector.add(DBPIdentifierCase.capitalizeCaseName(formatterDesc.getLabel()));
    }
    formatterSelector.addSelectionListener(new SelectionAdapter() {

        @Override
        public void widgetSelected(SelectionEvent e) {
            showFormatterSettings();
            performApply();
        }
    });
    formatterSelector.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
    formatCurrentQueryCheck = UIUtils.createCheckbox(composite, "Format active query only", "Formats only active query or selected text. Otherwise formats entire SQL script", true, 1);
    Composite formatterGroup = UIUtils.createPlaceholder(composite, 1, 5);
    formatterGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    ((GridData) formatterGroup.getLayoutData()).horizontalSpan = 3;
    /*
        {
            Composite formatterPanel = UIUtils.createPlaceholder(formatterGroup, 4, 5);
            formatterPanel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

            keywordCaseCombo = UIUtils.createLabelCombo(formatterPanel, CoreMessages.pref_page_sql_format_label_keyword_case, SWT.DROP_DOWN | SWT.READ_ONLY);
            keywordCaseCombo.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
            keywordCaseCombo.add("Database");
            for (DBPIdentifierCase c :DBPIdentifierCase.values()) {
                keywordCaseCombo.add(DBPIdentifierCase.capitalizeCaseName(c.name()));
            }
            keywordCaseCombo.addSelectionListener(new SelectionAdapter() {
                @Override
                public void widgetSelected(SelectionEvent e) {
                    performApply();
                }
            });
        }
*/
    // External formatter
    {
        formatterConfigPlaceholder = UIUtils.createPlaceholder(formatterGroup, 2, 5);
        formatterConfigPlaceholder.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.HORIZONTAL_ALIGN_BEGINNING));
        formatterConfigPlaceholder.setLayout(new FillLayout());
    }
    {
        // SQL preview
        Composite previewGroup = new Composite(composite, SWT.BORDER);
        GridData gd = new GridData(GridData.FILL_BOTH);
        gd.horizontalSpan = 3;
        previewGroup.setLayoutData(gd);
        previewGroup.setLayout(new FillLayout());
        sqlViewer = new SQLEditorBase() {

            @Override
            public DBCExecutionContext getExecutionContext() {
                final DBPDataSourceContainer container = getDataSourceContainer();
                if (container != null) {
                    final DBPDataSource dataSource = container.getDataSource();
                    if (dataSource != null) {
                        return DBUtils.getDefaultContext(dataSource.getDefaultInstance(), false);
                    }
                }
                return null;
            }
        };
        try {
            try (final InputStream sqlStream = getClass().getResourceAsStream(FORMAT_FILE_NAME)) {
                final String sqlText = ContentUtils.readToString(sqlStream, StandardCharsets.UTF_8);
                IEditorSite subSite = new SubEditorSite(UIUtils.getActiveWorkbenchWindow().getActivePage().getActivePart().getSite());
                StringEditorInput sqlInput = new StringEditorInput("SQL preview", sqlText, true, GeneralUtils.getDefaultFileEncoding());
                sqlViewer.init(subSite, sqlInput);
            }
        } catch (Exception e) {
            log.error(e);
        }
        sqlViewer.createPartControl(previewGroup);
        Object text = sqlViewer.getAdapter(Control.class);
        if (text instanceof StyledText) {
            ((StyledText) text).setWordWrap(true);
        }
        sqlViewer.reloadSyntaxRules();
        previewGroup.addDisposeListener(e -> sqlViewer.dispose());
        {
            // Styles
            // Composite afGroup = UIUtils.createControlGroup(composite, CoreMessages.pref_page_sql_format_group_style, 1, GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING, 0);
            // ((GridData)afGroup.getLayoutData()).horizontalSpan = 2;
            styleBoldKeywords = UIUtils.createCheckbox(composite, SQLEditorMessages.pref_page_sql_format_label_bold_keywords, SQLEditorMessages.pref_page_sql_format_label_bold_keywords_tip, false, 2);
            styleBoldKeywords.addSelectionListener(new SelectionAdapter() {

                @Override
                public void widgetSelected(SelectionEvent e) {
                    performApply();
                }
            });
        }
    }
    return composite;
}
Also used : SQLFormatterDescriptor(org.jkiss.dbeaver.model.sql.registry.SQLFormatterDescriptor) StringEditorInput(org.jkiss.dbeaver.ui.editors.StringEditorInput) DBPIdentifierCase(org.jkiss.dbeaver.model.DBPIdentifierCase) SQLFormatterConfigurationRegistry(org.jkiss.dbeaver.model.sql.registry.SQLFormatterConfigurationRegistry) StyledText(org.eclipse.swt.custom.StyledText) DBPPreferenceStore(org.jkiss.dbeaver.model.preferences.DBPPreferenceStore) IEditorSite(org.eclipse.ui.IEditorSite) ISourceViewer(org.eclipse.jface.text.source.ISourceViewer) SQLEditorBase(org.jkiss.dbeaver.ui.editors.sql.SQLEditorBase) DBCExecutionContext(org.jkiss.dbeaver.model.exec.DBCExecutionContext) SQLTokenizedFormatterConfigurationPage(org.jkiss.dbeaver.ui.editors.sql.preferences.format.tokenized.SQLTokenizedFormatterConfigurationPage) Composite(org.eclipse.swt.widgets.Composite) UIUtils(org.jkiss.dbeaver.ui.UIUtils) Locale(java.util.Locale) Log(org.jkiss.dbeaver.Log) GridData(org.eclipse.swt.layout.GridData) FillLayout(org.eclipse.swt.layout.FillLayout) DBPDataSource(org.jkiss.dbeaver.model.DBPDataSource) SQLPreferenceConstants(org.jkiss.dbeaver.ui.editors.sql.SQLPreferenceConstants) SelectionAdapter(org.eclipse.swt.events.SelectionAdapter) SQLFormatterDescriptor(org.jkiss.dbeaver.model.sql.registry.SQLFormatterDescriptor) GeneralUtils(org.jkiss.dbeaver.utils.GeneralUtils) CommonUtils(org.jkiss.utils.CommonUtils) Combo(org.eclipse.swt.widgets.Combo) Button(org.eclipse.swt.widgets.Button) DBUtils(org.jkiss.dbeaver.model.DBUtils) ContentUtils(org.jkiss.dbeaver.utils.ContentUtils) SQLModelPreferences(org.jkiss.dbeaver.model.sql.SQLModelPreferences) SQLFormatterExternal(org.jkiss.dbeaver.model.sql.format.external.SQLFormatterExternal) SQLExternalFormatterConfigurationPage(org.jkiss.dbeaver.ui.editors.sql.preferences.format.SQLExternalFormatterConfigurationPage) SQLEditorMessages(org.jkiss.dbeaver.ui.editors.sql.internal.SQLEditorMessages) StandardCharsets(java.nio.charset.StandardCharsets) DBPDataSourceContainer(org.jkiss.dbeaver.model.DBPDataSourceContainer) List(java.util.List) SQLFormatter(org.jkiss.dbeaver.model.sql.format.SQLFormatter) SQLFormatterConfigurator(org.jkiss.dbeaver.ui.editors.sql.preferences.format.SQLFormatterConfigurator) DBException(org.jkiss.dbeaver.DBException) TextSelection(org.eclipse.jface.text.TextSelection) SWT(org.eclipse.swt.SWT) SubEditorSite(org.jkiss.dbeaver.ui.editors.SubEditorSite) TargetPrefPage(org.jkiss.dbeaver.ui.preferences.TargetPrefPage) IDialogPage(org.eclipse.jface.dialogs.IDialogPage) SelectionEvent(org.eclipse.swt.events.SelectionEvent) SQLFormatterTokenized(org.jkiss.dbeaver.model.sql.format.tokenized.SQLFormatterTokenized) PrefUtils(org.jkiss.dbeaver.utils.PrefUtils) Comparator(java.util.Comparator) Control(org.eclipse.swt.widgets.Control) InputStream(java.io.InputStream) StyledText(org.eclipse.swt.custom.StyledText) Composite(org.eclipse.swt.widgets.Composite) InputStream(java.io.InputStream) SelectionAdapter(org.eclipse.swt.events.SelectionAdapter) FillLayout(org.eclipse.swt.layout.FillLayout) DBPDataSource(org.jkiss.dbeaver.model.DBPDataSource) StringEditorInput(org.jkiss.dbeaver.ui.editors.StringEditorInput) DBException(org.jkiss.dbeaver.DBException) SubEditorSite(org.jkiss.dbeaver.ui.editors.SubEditorSite) Control(org.eclipse.swt.widgets.Control) SQLEditorBase(org.jkiss.dbeaver.ui.editors.sql.SQLEditorBase) GridData(org.eclipse.swt.layout.GridData) SelectionEvent(org.eclipse.swt.events.SelectionEvent) DBPDataSourceContainer(org.jkiss.dbeaver.model.DBPDataSourceContainer) IEditorSite(org.eclipse.ui.IEditorSite)

Example 99 with DBCExecutionContext

use of org.jkiss.dbeaver.model.exec.DBCExecutionContext in project dbeaver by dbeaver.

the class SQLContextInformer method searchInformation.

public void searchInformation(IRegion region) {
    ITextViewer textViewer = editor.getTextViewer();
    final DBCExecutionContext executionContext = editor.getExecutionContext();
    if (region == null || textViewer == null || executionContext == null) {
        return;
    }
    IDocument document = textViewer.getDocument();
    if (document == null) {
        return;
    }
    SQLWordPartDetector wordDetector = new SQLWordPartDetector(document, syntaxManager, region.getOffset());
    wordRegion = wordDetector.detectIdentifier(document, region);
    if (wordRegion.word.length() == 0) {
        return;
    }
    String fullName = wordRegion.identifier;
    String tableName = wordRegion.word;
    boolean caseSensitive = false;
    if (wordDetector.isQuoted(tableName)) {
        tableName = DBUtils.getUnQuotedIdentifier(tableName, syntaxManager.getIdentifierQuoteStrings());
        caseSensitive = true;
    }
    String[] containerNames = null;
    if (!CommonUtils.equalObjects(fullName, tableName)) {
        int divPos = fullName.indexOf(syntaxManager.getStructSeparator());
        if (divPos != -1) {
            String[] parts = wordDetector.splitIdentifier(fullName);
            tableName = parts[parts.length - 1];
            containerNames = ArrayUtils.remove(String.class, parts, parts.length - 1);
            for (int i = 0; i < containerNames.length; i++) {
                if (wordDetector.isQuoted(containerNames[i])) {
                    containerNames[i] = DBUtils.getUnQuotedIdentifier(containerNames[i], syntaxManager.getIdentifierQuoteStrings());
                }
                containerNames[i] = DBObjectNameCaseTransformer.transformName(editor.getDataSource(), containerNames[i]);
            }
            if (wordDetector.isQuoted(tableName)) {
                tableName = DBUtils.getUnQuotedIdentifier(tableName, syntaxManager.getIdentifierQuoteStrings());
            }
        } else {
            // Full name could be quoted
            if (wordDetector.isQuoted(fullName)) {
                String unquotedName = DBUtils.getUnQuotedIdentifier(tableName, syntaxManager.getIdentifierQuoteStrings());
                if (unquotedName.equals(tableName)) {
                    caseSensitive = true;
                }
            }
        }
    }
    final SQLDialect dialect = syntaxManager.getDialect();
    keywordType = dialect.getKeywordType(fullName);
    if (keywordType == DBPKeywordType.KEYWORD && region.getLength() > 1) {
        // It is a keyword = let's use whole selection
        try {
            fullName = document.get(region.getOffset(), region.getLength());
        } catch (BadLocationException e) {
            log.warn(e);
        }
    }
    keywords = new String[] { fullName };
    if (keywordType == DBPKeywordType.KEYWORD || keywordType == DBPKeywordType.FUNCTION) {
        // Skip keywords
        return;
    }
    final Map<String, ObjectLookupCache> contextCache = getLinksCache();
    if (contextCache == null) {
        return;
    }
    ObjectLookupCache tlc = contextCache.get(fullName);
    if (tlc == null) {
        // Start new word finder job
        tlc = new ObjectLookupCache();
        contextCache.put(fullName, tlc);
        DBSStructureAssistant structureAssistant = DBUtils.getAdapter(DBSStructureAssistant.class, editor.getDataSource());
        TablesFinderJob job = new TablesFinderJob(executionContext, structureAssistant, containerNames, tableName, caseSensitive, tlc);
        job.schedule();
    }
    if (tlc.loading) {
        // Wait for 1000ms maximum
        for (int i = 0; i < 20; i++) {
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                // interrupted - just go further
                break;
            }
            if (!tlc.loading) {
                break;
            }
            Display.getCurrent().readAndDispatch();
        }
    }
    if (!tlc.loading) {
        synchronized (this) {
            objectReferences = tlc.references;
        }
    }
}
Also used : SQLWordPartDetector(org.jkiss.dbeaver.model.sql.parser.SQLWordPartDetector) DBCExecutionContext(org.jkiss.dbeaver.model.exec.DBCExecutionContext) ITextViewer(org.eclipse.jface.text.ITextViewer) SQLDialect(org.jkiss.dbeaver.model.sql.SQLDialect) IDocument(org.eclipse.jface.text.IDocument) BadLocationException(org.eclipse.jface.text.BadLocationException)

Example 100 with DBCExecutionContext

use of org.jkiss.dbeaver.model.exec.DBCExecutionContext in project dbeaver by dbeaver.

the class SQLLogFilter method belongsToEditor.

private boolean belongsToEditor(QMMSessionInfo session) {
    String containerId = session.getContainerId();
    String contextName = session.getContextName();
    DBCExecutionContext executionContext = editor.getExecutionContext();
    return executionContext != null && Objects.equals(executionContext.getDataSource().getContainer().getId(), containerId) && Objects.equals(executionContext.getContextName(), contextName);
}
Also used : DBCExecutionContext(org.jkiss.dbeaver.model.exec.DBCExecutionContext)

Aggregations

DBCExecutionContext (org.jkiss.dbeaver.model.exec.DBCExecutionContext)107 DBPDataSourceContainer (org.jkiss.dbeaver.model.DBPDataSourceContainer)27 DBSObject (org.jkiss.dbeaver.model.struct.DBSObject)22 DBException (org.jkiss.dbeaver.DBException)21 DBPContextProvider (org.jkiss.dbeaver.model.DBPContextProvider)20 InvocationTargetException (java.lang.reflect.InvocationTargetException)16 DBCExecutionContextDefaults (org.jkiss.dbeaver.model.exec.DBCExecutionContextDefaults)16 DBPDataSource (org.jkiss.dbeaver.model.DBPDataSource)15 GridData (org.eclipse.swt.layout.GridData)12 IEditorPart (org.eclipse.ui.IEditorPart)12 DBCException (org.jkiss.dbeaver.model.exec.DBCException)12 DBNDatabaseNode (org.jkiss.dbeaver.model.navigator.DBNDatabaseNode)12 ArrayList (java.util.ArrayList)10 Composite (org.eclipse.swt.widgets.Composite)10 DBSCatalog (org.jkiss.dbeaver.model.struct.rdb.DBSCatalog)10 DBSSchema (org.jkiss.dbeaver.model.struct.rdb.DBSSchema)10 SelectionAdapter (org.eclipse.swt.events.SelectionAdapter)8 SelectionEvent (org.eclipse.swt.events.SelectionEvent)8 IWorkbenchWindow (org.eclipse.ui.IWorkbenchWindow)8 NotNull (org.jkiss.code.NotNull)8