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

Merge pull request #13314 from dbeaver/insertDefValues#12786

#12786 support of "insert default values" statement added
......@@ -111,10 +111,16 @@ public class ExasolSQLDialect extends JDBCSQLDialect {
return new String[]{"EXECUTE SCRIPT"};
}
@NotNull
@Override
public String escapeScriptValue(DBSTypedObject attribute, Object value, String strValue) {
public String escapeScriptValue(DBSTypedObject attribute, @NotNull Object value, @NotNull String strValue) {
return super.escapeScriptValue(attribute, value, strValue);
}
@Override
public boolean supportsInsertAllDefaultValuesStatement() {
return true;
}
}
......@@ -79,4 +79,9 @@ public class FireBirdSQLDialect extends GenericSQLDialect {
protected String getStoredProcedureCallInitialClause(DBSProcedure proc) {
return "select * from " + proc.getFullyQualifiedName(DBPEvaluationContext.DML);
}
@Override
public boolean supportsInsertAllDefaultValuesStatement() {
return true;
}
}
......@@ -333,4 +333,9 @@ public class SQLServerDialect extends JDBCSQLDialect implements TPRuleProvider {
rules.add(new SQLMultiWordRule(new String[]{"BEGIN", "TRAN"}, keywordToken));
}
}
@Override
public boolean supportsInsertAllDefaultValuesStatement() {
return isSqlServer; // Sybase throws a syntax error on "DEFAULT" keyword
}
}
......@@ -910,4 +910,9 @@ public class PostgreDialect extends JDBCSQLDialect implements TPRuleProvider {
rules.add(new PostgreEscapeStringRule());
}
}
@Override
public boolean supportsInsertAllDefaultValuesStatement() {
return true;
}
}
......@@ -54,4 +54,8 @@ public class SQLiteSQLDialect extends GenericSQLDialect {
return MultiValueInsertMode.GROUP_ROWS;
}
@Override
public boolean supportsInsertAllDefaultValuesStatement() {
return true;
}
}
......@@ -107,4 +107,9 @@ public class VerticaSQLDialect extends GenericSQLDialect {
public String[][] getBlockBoundStrings() {
return VERTICA_BEGIN_END_BLOCK;
}
@Override
public boolean supportsInsertAllDefaultValuesStatement() {
return true;
}
}
......@@ -18,19 +18,20 @@ package org.jkiss.dbeaver.model.impl.data;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.ModelPreferences;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBPEvaluationContext;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.data.DBDDataReceiver;
import org.jkiss.dbeaver.model.data.DBDInsertReplaceMethod;
import org.jkiss.dbeaver.model.data.DBDValueBinder;
import org.jkiss.dbeaver.model.data.DBDValueHandler;
import org.jkiss.dbeaver.model.data.*;
import org.jkiss.dbeaver.model.exec.*;
import org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable;
import org.jkiss.dbeaver.model.impl.sql.BaseInsertMethod;
import org.jkiss.dbeaver.model.sql.SQLConstants;
import org.jkiss.dbeaver.model.struct.DBSAttributeBase;
import org.jkiss.dbeaver.model.struct.DBSDataManipulator;
import org.jkiss.dbeaver.model.struct.DBSEntityAttribute;
import org.jkiss.dbeaver.model.struct.rdb.DBSTable;
import org.jkiss.utils.CommonUtils;
import java.util.Map;
......@@ -41,6 +42,7 @@ public class ExecuteInsertBatchImpl extends ExecuteBatchImpl {
private DBSTable table;
private boolean useUpsert;
private boolean allNulls;
private boolean allColumnsDefault;
/**
* Constructs new batch
......@@ -57,6 +59,10 @@ public class ExecuteInsertBatchImpl extends ExecuteBatchImpl {
this.useUpsert = useUpsert;
}
public boolean isAllColumnsDefault() {
return allColumnsDefault;
}
protected int getNextUsedParamIndex(Object[] attributeValues, int paramIndex) {
paramIndex++;
DBSAttributeBase attribute = attributes[paramIndex];
......@@ -78,6 +84,10 @@ public class ExecuteInsertBatchImpl extends ExecuteBatchImpl {
@Override
protected void bindStatement(@NotNull DBDValueHandler[] handlers, @NotNull DBCStatement statement, Object[] attributeValues) throws DBCException {
if (allColumnsDefault) {
// There is nothing to bind in this statement
return;
}
int paramIndex = 0;
for (int k = 0; k < handlers.length; k++) {
DBSAttributeBase attribute = attributes[k];
......@@ -124,6 +134,16 @@ public class ExecuteInsertBatchImpl extends ExecuteBatchImpl {
break;
}
}
DBPDataSource dataSource = session.getDataSource();
if (allNulls && !useMultiRowInsert && method instanceof BaseInsertMethod && !useUpsert
&& dataSource.getSQLDialect().supportsInsertAllDefaultValuesStatement()) {
checkDefaultAttributeValues(attributes);
if (allColumnsDefault) {
query.setLength(0);
query.append("INSERT INTO ").append(tableName).append(" DEFAULT VALUES");
return query;
}
}
boolean hasKey = false;
for (int i = 0; i < attributes.length; i++) {
DBSAttributeBase attribute = attributes[i];
......@@ -178,4 +198,21 @@ public class ExecuteInsertBatchImpl extends ExecuteBatchImpl {
return query;
}
private void checkDefaultAttributeValues(DBSAttributeBase[] attributes) {
allColumnsDefault = true;
for (DBSAttributeBase attribute : attributes) {
if (DBUtils.isPseudoAttribute(attribute) || DBUtils.isHiddenObject(attribute)) {
continue;
}
if (attribute instanceof DBDAttributeBinding) {
DBSEntityAttribute entityAttribute = ((DBDAttributeBinding) attribute).getEntityAttribute();
if (entityAttribute != null && (CommonUtils.isNotEmpty(entityAttribute.getDefaultValue()) || entityAttribute.isAutoGenerated())) {
continue;
}
}
allColumnsDefault = false;
break;
}
}
}
......@@ -817,4 +817,8 @@ public abstract class AbstractSQLDialect implements SQLDialect {
return true;
}
@Override
public boolean supportsInsertAllDefaultValuesStatement() {
return false;
}
}
......@@ -413,4 +413,6 @@ public interface SQLDialect {
boolean supportsAlterTableStatement();
boolean supportsInsertAllDefaultValuesStatement();
}
......@@ -282,6 +282,8 @@ public class ResultSetMessages extends NLS {
public static String pref_page_database_resultsets_group_string;
public static String pref_page_database_resultsets_checkbox_string_use_editor;
public static String pref_page_database_resultsets_checkbox_string_use_editor_tip;
public static String pref_page_database_resultsets_label_replace_nulls_to_default;
public static String pref_page_database_resultsets_label_replace_nulls_to_default_tip;
public static String pref_page_database_resultsets_label_read_metadata_tip;
public static String pref_page_database_resultsets_label_read_references_tip;
......
......@@ -270,6 +270,8 @@ pref_page_database_resultsets_label_use_sql_tip = Modify source SQL query to scr
pref_page_database_resultsets_group_string = Strings
pref_page_database_resultsets_checkbox_string_use_editor = Open in separate editor
pref_page_database_resultsets_checkbox_string_use_editor_tip = Opens separate string editor instead of dialog
pref_page_database_resultsets_label_replace_nulls_to_default = Insert default values instead of all null values
pref_page_database_resultsets_label_replace_nulls_to_default_tip = Use "DEFAULT VALUES" insert when there are only zero values in the row.\nThis is database-specific setting and may not work in some environments.
pref_page_database_general_label_cache_max_size = LOB cache max size
pref_page_database_general_label_max_lob_length = Maximum LOB length to keep in memory
......
......@@ -216,6 +216,8 @@ pref_page_database_resultsets_label_use_sql_tip = \u041C\u043E\u0434\u0438\u0444
pref_page_database_resultsets_group_string = \u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
pref_page_database_resultsets_checkbox_string_use_editor = \u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u0432 \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E\u043C \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435
pref_page_database_resultsets_checkbox_string_use_editor_tip = \u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u0432 \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E\u043C \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 (\u0432\u043C\u0435\u0441\u0442\u043E \u0434\u0438\u0430\u043B\u043E\u0433\u0430)
pref_page_database_resultsets_label_replace_nulls_to_default = \u0417\u0430\u043C\u0435\u043D\u044F\u0442\u044C \u0432\u0441\u0435 \u043D\u0443\u043B\u0438 \u043D\u0430 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u043F\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043A\u0435
pref_page_database_resultsets_label_replace_nulls_to_default_tip = \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C "INSERT DEFAULT VALUES" \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0432 \u0441\u043B\u0443\u0447\u0430\u0435, \u043A\u043E\u0433\u0434\u0430 \u0432 \u0441\u0442\u0440\u043E\u043A\u0443 \u0432\u0441\u0442\u0430\u0432\u043B\u044F\u044E\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u043D\u0443\u043B\u0438,\n\u0430 \u0443 \u0432\u0441\u0435\u0445 \u043A\u043E\u043B\u043E\u043D\u043E\u043A \u043F\u0440\u043E\u043F\u0438\u0441\u0430\u043D\u044B \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E. \u042D\u0442\u0430 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043E\u0442 \u0411\u0414.
#ResultSetsMain
pref_page_database_resultsets_label_read_metadata_tip = \u041E\u0442\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0447\u0442\u0435\u043D\u0438\u0435 \u043C\u0435\u0442\u0430\u0434\u0430\u043D\u043D\u044B\u0445. \u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442 \u0437\u0430\u043F\u0440\u043E\u0441 \u0431\u044B\u0441\u0442\u0440\u0435\u0435, \u043D\u043E \u043E\u0442\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u0438 \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044E \u043F\u043E \u0432\u043D\u0435\u0448\u043D\u0438\u043C \u043A\u043B\u0430\u0432\u0438\u0448\u0430\u043C
pref_page_database_resultsets_label_read_references_tip = \u041E\u0442\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0447\u0442\u0435\u043D\u0438\u0435 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0438 \u043F\u043E \u0441\u0441\u044B\u043B\u043A\u0430\u043C (\u0432\u043D\u0435\u0448\u043D\u0438\u043C \u043A\u043B\u044E\u0447\u0430\u043C).
......
......@@ -95,7 +95,7 @@ public class PrefPageResultSetMain extends TargetPrefPage
store.contains(ModelPreferences.RESULT_SET_USE_FETCH_SIZE) ||
store.contains(ResultSetPreferences.RESULT_SET_USE_NAVIGATOR_FILTERS) ||
store.contains(ResultSetPreferences.RESULT_SET_SHOW_ERRORS_IN_DIALOG) ||
store.contains(ModelPreferences.RESULT_SET_IGNORE_COLUMN_LABEL)
store.contains(ModelPreferences.RESULT_SET_IGNORE_COLUMN_LABEL)
;
}
......@@ -155,6 +155,7 @@ public class PrefPageResultSetMain extends TargetPrefPage
updateOptionsEnablement();
}
});
}
{
Group advGroup = UIUtils.createControlGroup(leftPane, ResultSetMessages.pref_page_results_group_advanced, 1, GridData.VERTICAL_ALIGN_BEGINNING, 0);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册