private DBPPreferenceStore getPreferences() { DBPPreferenceStore store = null; DBPDataSource dataSource = editor.getDataSource(); if (dataSource != null) { store = dataSource.getContainer().getPreferenceStore(); } if (store == null) { store = DBeaverCore.getGlobalPreferenceStore(); } return store; }
private boolean executeSingleQuery( @NotNull DBCSession session, @NotNull SQLQuery sqlQuery, boolean fireEvents) { lastError = null; final String originalQueryText = sqlQuery.getQuery(); DBCExecutionContext executionContext = getExecutionContext(); SQLQueryResult curResult = new SQLQueryResult(sqlQuery); if (rsOffset > 0) { curResult.setRowOffset(rsOffset); } SQLQuery originalQuery = sqlQuery; long startTime = System.currentTimeMillis(); if (fireEvents && listener != null) { // Notify query start listener.onStartQuery(sqlQuery); } try { // Prepare statement closeStatement(); // Check and invalidate connection DBPDataSource dataSource = executionContext.getDataSource(); if (!connectionInvalidated && dataSource .getContainer() .getPreferenceStore() .getBoolean(DBeaverPreferences.STATEMENT_INVALIDATE_BEFORE_EXECUTE)) { executionContext.invalidateContext(session.getProgressMonitor()); connectionInvalidated = true; } try { // Modify query (filters + parameters) if (dataFilter != null && dataFilter.hasFilters() && dataSource instanceof SQLDataSource) { String filteredQueryText = ((SQLDataSource) dataSource) .getSQLDialect() .addFiltersToQuery(dataSource, originalQueryText, dataFilter); sqlQuery = new SQLQuery(filteredQueryText, sqlQuery.getOffset(), sqlQuery.getLength()); } } catch (DBException e) { throw new DBCException("Can't apply query filter", e); } Boolean hasParameters = prepareStatementParameters(sqlQuery); if (hasParameters == null) { return false; } statistics.setQueryText(originalQueryText); startTime = System.currentTimeMillis(); DBCExecutionSource source = new AbstractExecutionSource( dataContainer, executionContext, partSite.getPart(), sqlQuery); curStatement = DBUtils.prepareStatement( source, session, hasParameters ? DBCStatementType.QUERY : DBCStatementType.SCRIPT, sqlQuery, rsOffset, rsMaxRows); if (hasParameters) { bindStatementParameters(session, sqlQuery); } // Execute statement try { boolean hasResultSet = curStatement.executeStatement(); curResult.setHasResultSet(hasResultSet); statistics.addExecuteTime(System.currentTimeMillis() - startTime); statistics.addStatementsCount(); long updateCount = -1; while (hasResultSet || resultSetNumber == 0 || updateCount >= 0) { // Fetch data only if we have to fetch all results or if it is rs requested if (fetchResultSetNumber < 0 || fetchResultSetNumber == resultSetNumber) { if (hasResultSet && fetchResultSets) { DBDDataReceiver dataReceiver = resultsConsumer.getDataReceiver(sqlQuery, resultSetNumber); if (dataReceiver != null) { hasResultSet = fetchQueryData( session, curStatement.openResultSet(), curResult, dataReceiver, true); } } } if (!hasResultSet) { try { updateCount = curStatement.getUpdateRowCount(); if (updateCount >= 0) { curResult.setUpdateCount(updateCount); statistics.addRowsUpdated(updateCount); } } catch (DBCException e) { // In some cases we can't read update count // This is bad but we can live with it // Just print a warning log.warn("Can't obtain update count", e); } } if (hasResultSet && fetchResultSets) { resultSetNumber++; fetchResultSetNumber = resultSetNumber; } if (!hasResultSet && updateCount < 0) { // Nothing else to fetch break; } if (dataSource.getInfo().supportsMultipleResults()) { hasResultSet = curStatement.nextResults(); updateCount = hasResultSet ? -1 : 0; } else { break; } } try { curResult.setWarnings(curStatement.getStatementWarnings()); } catch (Throwable e) { log.warn("Can't read execution warnings", e); } } finally { // monitor.subTask("Close query"); if (!keepStatementOpen()) { closeStatement(); } // Release parameters releaseStatementParameters(sqlQuery); } } catch (Throwable ex) { if (!(ex instanceof DBException)) { log.error("Unexpected error while processing SQL", ex); } curResult.setError(ex); lastError = ex; } finally { curResult.setQueryTime(System.currentTimeMillis() - startTime); if (fireEvents && listener != null) { // Notify query end listener.onEndQuery(curResult); } } if (curResult.getError() != null && errorHandling != SQLScriptErrorHandling.IGNORE) { return false; } // Success lastGoodQuery = originalQuery; return true; }
@Override public Object getAdapter(Object adaptableObject, Class adapterType) { if (adapterType == DBSDataSourceContainer.class) { if (adaptableObject instanceof DBNDataSource) { return ((DBNDataSource) adaptableObject).getDataSourceContainer(); } DBSObject object = null; if (adaptableObject instanceof DBSWrapper) { object = ((DBSWrapper) adaptableObject).getObject(); } else if (adaptableObject instanceof DBSObject) { object = (DBSObject) adaptableObject; } if (object == null) { return null; } if (object instanceof DBSDataSourceContainer) { return object; } DBPDataSource dataSource = object.getDataSource(); return dataSource == null ? null : dataSource.getContainer(); } else if (DBPObject.class.isAssignableFrom(adapterType)) { DBPObject object = null; if (adaptableObject instanceof DBSWrapper) { object = ((DBSWrapper) adaptableObject).getObject(); } else if (adaptableObject instanceof DBPObject) { object = (DBPObject) adaptableObject; } if (object != null && adapterType.isAssignableFrom(object.getClass())) { return object; } } else if (IResource.class.isAssignableFrom(adapterType)) { if (adaptableObject instanceof DBNResource) { IResource resource = ((DBNResource) adaptableObject).getResource(); if (resource != null && adapterType.isAssignableFrom(resource.getClass())) { return resource; } else { return null; } } } else if (adapterType == IPropertySource.class) { DBPObject dbObject = null; if (adaptableObject instanceof DBSWrapper) { dbObject = ((DBSWrapper) adaptableObject).getObject(); } else if (adaptableObject instanceof DBPObject) { dbObject = (DBPObject) adaptableObject; } if (dbObject instanceof IPropertySource) { return dbObject; } if (dbObject instanceof DBPPropertySource) { return new PropertySourceDelegate((DBPPropertySource) dbObject); } if (dbObject instanceof IAdaptable) { Object adapter = ((IAdaptable) dbObject).getAdapter(IPropertySource.class); if (adapter != null) { return adapter; } adapter = ((IAdaptable) dbObject).getAdapter(DBPPropertySource.class); if (adapter != null) { return new PropertySourceDelegate((DBPPropertySource) adapter); } } if (dbObject != null) { PropertyCollector props = new PropertyCollector(adaptableObject, dbObject, true); props.collectProperties(); if (props.isEmpty() && adaptableObject instanceof DBSObject) { // Add default properties DBSObject meta = (DBSObject) adaptableObject; props.addProperty( null, "name", CoreMessages.model_navigator_Name, meta.getName()); // $NON-NLS-1$ props.addProperty( null, "desc", CoreMessages.model_navigator_Description, meta.getDescription()); // $NON-NLS-1$ } return new PropertySourceDelegate(props); } } else if (adapterType == IWorkbenchAdapter.class) { // Workbench adapter if (adaptableObject instanceof DBNNode) { final DBNNode node = (DBNNode) adaptableObject; return new WorkbenchAdapter() { @Override public ImageDescriptor getImageDescriptor(Object object) { return DBeaverIcons.getImageDescriptor(node.getNodeIconDefault()); } @Override public String getLabel(Object o) { return node.getNodeName(); } @Override public Object getParent(Object o) { return node.getParentNode(); } }; } else { return null; } } return null; }