未验证 提交 745e3013 编写于 作者: S Serge Rider 提交者: GitHub

Merge pull request #14307 from dbeaver/athenaReadOnly#1105

dbeaver/dbeaver-ee#1105 set Athena to read-only meta data mode
......@@ -16,6 +16,8 @@
*/
package org.jkiss.dbeaver.ui.dialogs.connection;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
......@@ -59,7 +61,7 @@ public class EditConnectionNavigatorSettingsDialog extends BaseDialog {
composite,
CoreMessages.pref_page_ui_general_group_general,
1, GridData.VERTICAL_ALIGN_BEGINNING, 0);
miscGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
miscGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.FILL_HORIZONTAL));
showSystemObjects = UIUtils.createCheckbox(
miscGroup,
......@@ -89,17 +91,45 @@ public class EditConnectionNavigatorSettingsDialog extends BaseDialog {
navigatorSettings.isMergeEntities(),
1);
boolean mergeEntitiesEnabled;
if (dataSourceDescriptor != null) {
mergeEntities.setEnabled(
dataSourceDescriptor.getDriver().getProviderDescriptor().getTreeDescriptor().supportsEntityMerge());
mergeEntitiesEnabled = dataSourceDescriptor.getDriver().getProviderDescriptor().getTreeDescriptor().supportsEntityMerge();
mergeEntities.setEnabled(mergeEntitiesEnabled);
} else {
mergeEntitiesEnabled = false;
}
mergeEntities.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
if (hideFolders != null) {
if (mergeEntities.getSelection()) {
hideFolders.setEnabled(false);
} else if (!hideFolders.getEnabled()) {
hideFolders.setEnabled(true);
}
}
}
});
hideFolders = UIUtils.createCheckbox(
miscGroup,
CoreMessages.dialog_connection_wizard_final_checkbox_hide_folders,
CoreMessages.dialog_connection_wizard_final_checkbox_hide_folders_tip,
navigatorSettings.isHideFolders(),
1);
hideFolders.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
if (hideFolders.getSelection()) {
mergeEntities.setEnabled(false);
} else if (mergeEntitiesEnabled) {
mergeEntities.setEnabled(true);
}
}
});
}
return composite;
......
......@@ -41,6 +41,7 @@
<parameter name="omit-catalog" value="true"/>
<property name="@dbeaver-default-resultset.maxrows.sql" value="true"/>
<parameter name="read-only-data" value="true"/>
<parameter name="read-only-meta-data" value="true"/>
</driver>
</drivers>
......
......@@ -146,6 +146,7 @@
<property id="supports-truncate" label="Driver supports TRUNCATE operation" description="Driver supports TRUNCATE command. It is much faster than DELETE without criteria." type="boolean" required="false" defaultValue="true"/>
<property id="supports-set-array" label="Driver supports setArray JDBC API" description="Driver supports setArray JDBC API for binding array values. Some drivers may not support setArray in favor of setObject." type="boolean" required="false" defaultValue="false"/>
<property id="read-only-data" label="Driver cannot modify data" description="Driver does not support data (e.g. in table) editing." type="boolean" required="false" defaultValue="false"/>
<property id="read-only-meta-data" label="Driver cannot modify meta data" description="Driver does not support meta data (e.g. table or column creating) editing." type="boolean" required="false" defaultValue="false"/>
</propertyGroup>
<propertyGroup label="Queries" description="Custom driver queries">
<property id="query-get-active-db" label="Get active database" description="Query to obtain active database name" type="string" required="false" defaultValue=""/>
......@@ -569,6 +570,8 @@
<parameter name="supports-indexes" value="false"/>
<parameter name="supports-references" value="false"/>
<parameter name="driver-properties" value="charset,columnTypes,commentChar,cryptoFilterClassName,cryptoFilterParameterTypes,cryptoFilterParameters,defectiveHeaders,fileExtension,fileTailParts,fileTailPattern,fileTailPrepend,fixedWidths,function.NAME,headerline,ignoreNonParseableLines,indexedFiles,isHeaderFixedWidth,missingValue,quotechar,quoteStyle,locale,separator,skipLeadingLines,skipLeadingDataLines,suppressHeaders,timestampFormat, timeFormat, dateFormat,timeZoneName,trimHeaders,trimValues"/>
<parameter name="read-only-data" value="true"/>
<parameter name="read-only-meta-data" value="true"/>
<file type="jar" path="maven:/net.sourceforge.csvjdbc:csvjdbc:RELEASE" bundle="!drivers.csvjdbc"/>
<file type="jar" path="drivers/csvjdbc" bundle="drivers.csvjdbc"/>
......@@ -597,6 +600,8 @@
<parameter name="supports-indexes" value="false"/>
<parameter name="supports-references" value="false"/>
<parameter name="driver-properties" value="charset,columnTypes,commentChar,cryptoFilterClassName,cryptoFilterParameterTypes,cryptoFilterParameters,defectiveHeaders,fileExtension,fileTailParts,fileTailPattern,fileTailPrepend,fixedWidths,function.NAME,headerline,ignoreNonParseableLines,indexedFiles,isHeaderFixedWidth,missingValue,quotechar,quoteStyle,locale,separator,skipLeadingLines,skipLeadingDataLines,suppressHeaders,timestampFormat, timeFormat, dateFormat,timeZoneName,trimHeaders,trimValues"/>
<parameter name="read-only-data" value="true"/>
<parameter name="read-only-meta-data" value="true"/>
<file type="jar" path="maven:/net.sourceforge.csvjdbc:csvjdbc:RELEASE" bundle="!drivers.csvjdbc"/>
<file type="jar" path="repo:/drivers/dbf/dans-dbf-lib-1.0.0-beta-10.jar" bundle="!drivers.csvjdbc"/>
......@@ -801,6 +806,7 @@
<parameter name="supports-references" value="false"/>
<parameter name="supports-indexes" value="false"/>
<parameter name="read-only-data" value="true"/>
<parameter name="read-only-meta-data" value="true"/>
</driver>
<!-- Virtuoso -->
......
......@@ -65,6 +65,7 @@ public class GenericConstants {
public static final String PARAM_SUPPORTS_SET_ARRAY = "supports-set-array";
public static final String PARAM_SUPPORTS_TRANSACTIONS_FOR_DDL = "supports-ddl-transactions";
public static final String PARAM_READ_ONLY_DATA = "read-only-data";
public static final String PARAM_READ_ONLY_META_DATA = "read-only-meta-data";
public static final String PARAM_NATIVE_FORMAT_TIMESTAMP = "native-format-timestamp";
public static final String PARAM_NATIVE_FORMAT_TIME = "native-format-time";
......
......@@ -43,7 +43,8 @@ public class GenericDataSourceInfo extends JDBCDataSourceInfo {
supportsMultipleResults = CommonUtils.getBoolean(driver.getDriverParameter(GenericConstants.PARAM_SUPPORTS_MULTIPLE_RESULTS), false);
supportsSetArray = CommonUtils.getBoolean(driver.getDriverParameter(GenericConstants.PARAM_SUPPORTS_SET_ARRAY), false);
supportsTransactionsForDDL = CommonUtils.getBoolean(driver.getDriverParameter(GenericConstants.PARAM_SUPPORTS_TRANSACTIONS_FOR_DDL), true);
setReadOnly(CommonUtils.getBoolean(driver.getDriverParameter(GenericConstants.PARAM_READ_ONLY_DATA), false));
setReadOnlyData(CommonUtils.getBoolean(driver.getDriverParameter(GenericConstants.PARAM_READ_ONLY_DATA), false));
setReadOnlyMetaData(CommonUtils.getBoolean(driver.getDriverParameter(GenericConstants.PARAM_READ_ONLY_META_DATA), false));
supportsNullableUniqueConstraints = false;
supportsConstraints = CommonUtils.getBoolean(driver.getDriverParameter(GenericConstants.PARAM_SUPPORTS_CONSTRAINTS), true);
......
......@@ -2089,7 +2089,9 @@ public final class DBUtils {
return true;
}
DBPDataSource dataSource = object.getDataSource();
return dataSource == null || !dataSource.getContainer().hasModifyPermission(DBPDataSourcePermission.PERMISSION_EDIT_METADATA);
return dataSource == null ||
!dataSource.getContainer().hasModifyPermission(DBPDataSourcePermission.PERMISSION_EDIT_METADATA) ||
dataSource.getInfo().isReadOnlyMetaData();
}
public static <T> T createNewAttributeValue(DBCExecutionContext context, DBDValueHandler valueHandler, DBSTypedObject valueType, Class<T> targetType) throws DBCException {
......
......@@ -43,6 +43,8 @@ public class JDBCDataSourceInfo extends AbstractDataSourceInfo
public static final String TERM_CATALOG = ModelMessages.model_jdbc_Database;
private boolean readOnly;
private boolean readOnlyData;
private boolean readOnlyMetaData;
private String databaseProductName;
private String databaseProductVersion;
private String driverName;
......@@ -198,17 +200,21 @@ public class JDBCDataSourceInfo extends AbstractDataSourceInfo
@Override
public boolean isReadOnlyData()
{
return readOnly;
return readOnly || readOnlyData;
}
protected void setReadOnly(boolean readOnly) {
this.readOnly = readOnly;
protected void setReadOnlyData(boolean readOnly) {
this.readOnlyData = readOnly;
}
@Override
public boolean isReadOnlyMetaData()
{
return readOnly;
return readOnly || readOnlyMetaData;
}
protected void setReadOnlyMetaData(boolean readOnlyMetaData) {
this.readOnlyMetaData = readOnlyMetaData;
}
@Override
......
......@@ -21,6 +21,7 @@ import org.eclipse.jface.action.IContributionItem;
import org.eclipse.swt.widgets.Display;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBPOrderedObject;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.app.DBPResourceHandler;
......@@ -229,6 +230,10 @@ public class ObjectPropertyTester extends PropertyTester
// Can't create virtual objects
return false;
}
DBPDataSource dataSource = ((DBNDatabaseNode) node).getDataSource();
if (dataSource != null && dataSource.getInfo().isReadOnlyMetaData()) {
return false;
}
if (!(node instanceof DBNDataSource) && isMetadataChangeDisabled(((DBNDatabaseNode)node))) {
return false;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册