diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/UIUtils.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/UIUtils.java index 260c084e153d2c47533875d48cbd5c7e6f5b7e86..4dd48061a0d2c2425f94813d6d89fa21b5577fd1 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/UIUtils.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/UIUtils.java @@ -81,7 +81,10 @@ import java.lang.reflect.Method; import java.nio.charset.Charset; import java.text.DecimalFormatSymbols; import java.text.MessageFormat; -import java.util.*; +import java.util.Collection; +import java.util.Locale; +import java.util.ResourceBundle; +import java.util.SortedMap; /** * UI Utils @@ -133,6 +136,29 @@ public class UIUtils { }; } + public static VerifyListener getLongVerifyListener(Text text) { + return new VerifyListener() { + @Override + public void verifyText(VerifyEvent e) { + + // get old text and create new text by using the VerifyEvent.text + final String oldS = text.getText(); + String newS = oldS.substring(0, e.start) + e.text + oldS.substring(e.end); + + boolean isLong = true; + try { + Long.parseLong(newS); + } + catch(NumberFormatException ex) { + isLong = false; + } + + if(!isLong) + e.doit = false; + } + }; + } + public static void createToolBarSeparator(ToolBar toolBar, int style) { Label label = new Label(toolBar, SWT.NONE); label.setImage(DBeaverIcons.getImage(UIIcon.DRAG_HANDLE)); diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/tools/DatabaseWizardPageLog.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/tools/DatabaseWizardPageLog.java index 15f36d0b3e671edfa3610c5083fa50c7b975a9aa..21a77c0a0d3ec88422aa31b1af72c3de01b48acb 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/tools/DatabaseWizardPageLog.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/tools/DatabaseWizardPageLog.java @@ -20,6 +20,7 @@ package org.jkiss.dbeaver.ui.dialogs.tools; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; @@ -82,10 +83,18 @@ public class DatabaseWizardPageLog extends WizardPage { public void run() { synchronized (DatabaseWizardPageLog.this) { if (!dumpLogText.isDisposed()) { + int caretOffset = dumpLogText.getCaretOffset(); dumpLogText.append(line); //dumpLogText.append(ContentUtils.getDefaultLineSeparator()); dumpLogText.setCaretOffset(dumpLogText.getCharCount()); dumpLogText.showSelection(); + if (error) { + StyleRange style1Range = new StyleRange(); + style1Range.start = caretOffset; + style1Range.length = line.length(); + style1Range.foreground = dumpLogText.getDisplay().getSystemColor(SWT.COLOR_RED); + dumpLogText.setStyleRange(style1Range); + } } } } diff --git a/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataExecuteWizard.java b/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataExecuteWizard.java index 6cd46e5945e1496285acbbfde8e8dac77102e6d6..66daee13d0ead74ec0228addefa791a77da219c6 100644 --- a/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataExecuteWizard.java +++ b/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataExecuteWizard.java @@ -44,6 +44,8 @@ public class MockDataExecuteWizard extends AbstractToolWizard keyAttributes = new ArrayList<>(); - Collection attributes = ((DBSEntity) dataManipulator).getAttributes(monitor); - for (DBSEntityAttribute attribute : attributes) { - Object value = attribute.getDefaultValue(); - DBSDataType dataType = ((DBSTypedObjectEx) attribute).getDataType(); - DBPDataKind dataKind = dataType.getDataKind(); - switch (dataKind) { - case NUMERIC: - value = MockDataGenerator.generateNumeric((int) attribute.getMaxLength(), attribute.getPrecision(), attribute.getScale()); break; - case STRING: - value = MockDataGenerator.generateTextUpTo((int) attribute.getMaxLength()); break; - case DATETIME: - value = MockDataGenerator.generateDate(); break; - } - keyAttributes.add(new DBDAttributeValue(attribute, value)); - } + long rowsNumber = mockDataSettings.getRowsNumber(); + long quotient = rowsNumber / BATCH_SIZE; + long modulo = rowsNumber % BATCH_SIZE; + if (modulo > 0) { + quotient++; + } + int counter = 0; - try (DBSDataManipulator.ExecuteBatch batch = dataManipulator.insertData( - session, - DBDAttributeValue.getAttributes(keyAttributes), - null, - executionSource)) - { - batch.add(DBDAttributeValue.getValues(keyAttributes)); + DBSDataManipulator.ExecuteBatch batch = null; + for (int q = 0; q < quotient; q++) { + try { + for (int i = 0; i < BATCH_SIZE; i++) { + List attributeValues = new ArrayList<>(); + Collection attributes = ((DBSEntity) dataManipulator).getAttributes(monitor); + for (DBSEntityAttribute attribute : attributes) { + Object value = attribute.getDefaultValue(); + DBSDataType dataType = ((DBSTypedObjectEx) attribute).getDataType(); + DBPDataKind dataKind = dataType.getDataKind(); + switch (dataKind) { + case NUMERIC: + value = MockDataGenerator.generateNumeric((int) attribute.getMaxLength(), attribute.getPrecision(), attribute.getScale()); break; + case STRING: + value = MockDataGenerator.generateTextUpTo((int) attribute.getMaxLength()); break; + case DATETIME: + value = MockDataGenerator.generateDate(); break; + } + attributeValues.add(new DBDAttributeValue(attribute, value)); + } + + if (batch == null) { + batch = dataManipulator.insertData( + session, + DBDAttributeValue.getAttributes(attributeValues), + null, + executionSource); + } + if (counter++ < rowsNumber) { + batch.add(DBDAttributeValue.getValues(attributeValues)); + } + } insertStats.accumulate(batch.execute(session)); } + finally { + batch.close(); + batch = null; + } } logPage.appendLog(" Rows updated: " + insertStats.getRowsUpdated() + "\n"); logPage.appendLog(" Duration: " + insertStats.getExecuteTime() + "ms\n"); } catch (DBException e) { - String message = "Error inserting Mock Data."; + String message = " Error inserting Mock Data: " + e.getMessage() + "."; log.error(message, e); logPage.appendLog(message, true); } diff --git a/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataSettings.java b/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataSettings.java index e826878d10d3f312522c215ec3e36dea4c8eb28b..a3fbb49f14dc02a88f8223046aa26fe10bcf09e0 100644 --- a/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataSettings.java +++ b/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataSettings.java @@ -20,7 +20,7 @@ package org.jkiss.dbeaver.ext.mockdata; public class MockDataSettings { private boolean removeOldData; - private int rowsNumber; + private long rowsNumber = 10; public boolean isRemoveOldData() { return removeOldData; @@ -30,11 +30,11 @@ public class MockDataSettings { this.removeOldData = removeOldData; } - public int getRowsNumber() { + public long getRowsNumber() { return rowsNumber; } - public void setRowsNumber(int rowsNumber) { + public void setRowsNumber(long rowsNumber) { this.rowsNumber = rowsNumber; } } diff --git a/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataWizardPageSettings.java b/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataWizardPageSettings.java index 7629b579e93df91d9123ca721bb9e3344b915c71..27a93fc48f566064c6112d350ea275610252c7f8 100644 --- a/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataWizardPageSettings.java +++ b/plugins/org.jkiss.dbeaver.ext.mockdata/src/org/jkiss/dbeaver/ext/mockdata/MockDataWizardPageSettings.java @@ -17,14 +17,13 @@ */ package org.jkiss.dbeaver.ext.mockdata; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.*; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; -import org.eclipse.swt.widgets.Spinner; +import org.eclipse.swt.widgets.Text; import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.dialogs.tools.AbstractToolWizardPage; @@ -33,7 +32,7 @@ public class MockDataWizardPageSettings extends AbstractToolWizardPage