提交 bb262cd3 编写于 作者: S Serge Rider

Merge remote-tracking branch 'origin/devel' into devel

...@@ -916,4 +916,18 @@ public class CommonUtils { ...@@ -916,4 +916,18 @@ public class CommonUtils {
public static boolean isValidIndex(int index, int length) { public static boolean isValidIndex(int index, int length) {
return index >= 0 || index < length; return index >= 0 || index < length;
} }
@NotNull
public static String escapeHtml(@Nullable String text) {
if (text == null) {
return "&nbsp;";
}
return text
.replace("&", "&amp;")
.replace("<", "&lt;")
.replace(">", "&gt;")
.replace("\r\n", "<br>")
.replace("\r", "<br>")
.replace("\n", "<br>");
}
} }
...@@ -47,6 +47,7 @@ import org.jkiss.dbeaver.ui.SharedTextColors; ...@@ -47,6 +47,7 @@ import org.jkiss.dbeaver.ui.SharedTextColors;
import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.controls.CustomComboBoxCellEditor; import org.jkiss.dbeaver.ui.controls.CustomComboBoxCellEditor;
import org.jkiss.dbeaver.ui.controls.ListContentProvider; import org.jkiss.dbeaver.ui.controls.ListContentProvider;
import org.jkiss.dbeaver.ui.controls.ViewerColumnController;
import org.jkiss.dbeaver.ui.dialogs.BaseDialog; import org.jkiss.dbeaver.ui.dialogs.BaseDialog;
import org.jkiss.utils.CommonUtils; import org.jkiss.utils.CommonUtils;
...@@ -135,199 +136,174 @@ class ColumnsMappingDialog extends BaseDialog { ...@@ -135,199 +136,174 @@ class ColumnsMappingDialog extends BaseDialog {
} }
}); });
{ final ViewerColumnController<?, ?> columnController = new ViewerColumnController<>(getClass().getName(), mappingViewer);
TableViewerColumn columnSource = new TableViewerColumn(mappingViewer, SWT.LEFT);
columnSource.setLabelProvider(new CellLabelProvider() { columnController.addColumn(DTUIMessages.columns_mapping_dialog_column_source_text, null, SWT.LEFT, true, false, new ColumnLabelProvider() {
@Override @Override
public void update(ViewerCell cell) public void update(ViewerCell cell) {
{ DatabaseMappingAttribute mapping = (DatabaseMappingAttribute) cell.getElement();
DatabaseMappingAttribute attrMapping = (DatabaseMappingAttribute) cell.getElement(); cell.setText(DBUtils.getObjectFullName(mapping.getSource(), DBPEvaluationContext.UI));
cell.setText(DBUtils.getObjectFullName(attrMapping.getSource(), DBPEvaluationContext.UI)); if (mapping.getIcon() != null) {
if (attrMapping.getIcon() != null) { cell.setImage(DBeaverIcons.getImage(mapping.getIcon()));
cell.setImage(DBeaverIcons.getImage(attrMapping.getIcon()));
}
}
});
columnSource.getColumn().setText(DTUIMessages.columns_mapping_dialog_column_source_text);
columnSource.getColumn().setWidth(170);
}
{
TableViewerColumn columnSourceType = new TableViewerColumn(mappingViewer, SWT.LEFT);
columnSourceType.setLabelProvider(new CellLabelProvider() {
@Override
public void update(ViewerCell cell)
{
cell.setText(((DatabaseMappingAttribute) cell.getElement()).getSourceType());
} }
}); }
columnSourceType.getColumn().setText(DTUIMessages.columns_mapping_dialog_column_source_type_text); });
columnSourceType.getColumn().setWidth(100);
}
{ columnController.addColumn(DTUIMessages.columns_mapping_dialog_column_source_type_text, null, SWT.LEFT, true, false, new ColumnLabelProvider() {
TableViewerColumn columnTarget = new TableViewerColumn(mappingViewer, SWT.LEFT); @Override
columnTarget.setLabelProvider(new CellLabelProvider() { public void update(ViewerCell cell) {
@Override cell.setText(((DatabaseMappingAttribute) cell.getElement()).getSourceType());
public void update(ViewerCell cell) }
{ });
DatabaseMappingAttribute mapping = (DatabaseMappingAttribute) cell.getElement();
cell.setText(mapping.getTargetName()); columnController.addColumn(DTUIMessages.columns_mapping_dialog_column_target_text, null, SWT.LEFT, true, false, false, null, new ColumnLabelProvider() {
if (mapping.getMappingType() == DatabaseMappingType.unspecified) { @Override
cell.setBackground(UIUtils.getSharedTextColors().getColor(SharedTextColors.COLOR_WARNING)); public void update(ViewerCell cell) {
} else { DatabaseMappingAttribute mapping = (DatabaseMappingAttribute) cell.getElement();
cell.setBackground(null); cell.setText(mapping.getTargetName());
} if (mapping.getMappingType() == DatabaseMappingType.unspecified) {
cell.setFont(boldFont); cell.setBackground(UIUtils.getSharedTextColors().getColor(SharedTextColors.COLOR_WARNING));
} else {
cell.setBackground(null);
} }
}); cell.setFont(boldFont);
columnTarget.getColumn().setText(DTUIMessages.columns_mapping_dialog_column_target_text); }
columnTarget.getColumn().setWidth(170); }, new EditingSupport(mappingViewer) {
columnTarget.setEditingSupport(new EditingSupport(mappingViewer) { @Override
@Override protected CellEditor getCellEditor(Object element)
protected CellEditor getCellEditor(Object element) {
{ try {
try { java.util.List<String> items = new ArrayList<>();
java.util.List<String> items = new ArrayList<>(); DatabaseMappingAttribute mapping = (DatabaseMappingAttribute) element;
DatabaseMappingAttribute mapping = (DatabaseMappingAttribute) element; if (mapping.getParent().getMappingType() == DatabaseMappingType.existing &&
if (mapping.getParent().getMappingType() == DatabaseMappingType.existing && mapping.getParent().getTarget() instanceof DBSEntity)
mapping.getParent().getTarget() instanceof DBSEntity) {
{ DBSEntity parentEntity = (DBSEntity)mapping.getParent().getTarget();
DBSEntity parentEntity = (DBSEntity)mapping.getParent().getTarget(); for (DBSEntityAttribute attr : CommonUtils.safeCollection(parentEntity.getAttributes(new VoidProgressMonitor()))) {
for (DBSEntityAttribute attr : CommonUtils.safeCollection(parentEntity.getAttributes(new VoidProgressMonitor()))) { items.add(attr.getName());
items.add(attr.getName());
}
} }
items.add(DatabaseMappingAttribute.TARGET_NAME_SKIP);
return new CustomComboBoxCellEditor(
mappingViewer,
mappingViewer.getTable(),
items.toArray(new String[0]),
SWT.DROP_DOWN);
} catch (DBException e) {
DBWorkbench.getPlatformUI().showError("Bad value", "Wrong target column", e);
return null;
} }
}
@Override items.add(DatabaseMappingAttribute.TARGET_NAME_SKIP);
protected boolean canEdit(Object element) return new CustomComboBoxCellEditor(
{ mappingViewer,
return true; mappingViewer.getTable(),
items.toArray(new String[0]),
SWT.DROP_DOWN);
} catch (DBException e) {
DBWorkbench.getPlatformUI().showError("Bad value", "Wrong target column", e);
return null;
} }
}
@Override @Override
protected Object getValue(Object element) protected boolean canEdit(Object element)
{ {
return ((DatabaseMappingAttribute)element).getTargetName(); return true;
} }
@Override @Override
protected void setValue(Object element, Object value) protected Object getValue(Object element)
{ {
try { return ((DatabaseMappingAttribute)element).getTargetName();
String name = CommonUtils.toString(value); }
DatabaseMappingAttribute attrMapping = (DatabaseMappingAttribute) element;
if (DatabaseMappingAttribute.TARGET_NAME_SKIP.equals(name)) { @Override
attrMapping.setMappingType(DatabaseMappingType.skip); protected void setValue(Object element, Object value)
} else { {
if (attrMapping.getParent().getMappingType() == DatabaseMappingType.existing && try {
attrMapping.getParent().getTarget() instanceof DBSEntity) String name = CommonUtils.toString(value);
{ DatabaseMappingAttribute attrMapping = (DatabaseMappingAttribute) element;
DBSEntity parentEntity = (DBSEntity)attrMapping.getParent().getTarget(); if (DatabaseMappingAttribute.TARGET_NAME_SKIP.equals(name)) {
for (DBSEntityAttribute attr : CommonUtils.safeCollection(parentEntity.getAttributes(new VoidProgressMonitor()))) { attrMapping.setMappingType(DatabaseMappingType.skip);
if (name.equalsIgnoreCase(attr.getName())) { } else {
attrMapping.setTarget(attr); if (attrMapping.getParent().getMappingType() == DatabaseMappingType.existing &&
attrMapping.setMappingType(DatabaseMappingType.existing); attrMapping.getParent().getTarget() instanceof DBSEntity)
attrMapping.setTargetName(name); {
return; DBSEntity parentEntity = (DBSEntity)attrMapping.getParent().getTarget();
} for (DBSEntityAttribute attr : CommonUtils.safeCollection(parentEntity.getAttributes(new VoidProgressMonitor()))) {
if (name.equalsIgnoreCase(attr.getName())) {
attrMapping.setTarget(attr);
attrMapping.setMappingType(DatabaseMappingType.existing);
attrMapping.setTargetName(name);
return;
} }
} }
attrMapping.setMappingType(DatabaseMappingType.create);
attrMapping.setTargetName(name);
} }
} catch (DBException e) { attrMapping.setMappingType(DatabaseMappingType.create);
DBWorkbench.getPlatformUI().showError("Bad value", "Wrong target", e); attrMapping.setTargetName(name);
} finally {
mappingViewer.refresh();
} }
} catch (DBException e) {
DBWorkbench.getPlatformUI().showError("Bad value", "Wrong target", e);
} finally {
mappingViewer.refresh();
} }
}); }
} });
{ columnController.addColumn(DTUIMessages.columns_mapping_dialog_column_target_type_text, null, SWT.LEFT, true, false, false, null, new ColumnLabelProvider() {
TableViewerColumn columnTargetType = new TableViewerColumn(mappingViewer, SWT.LEFT); @Override
columnTargetType.setLabelProvider(new CellLabelProvider() { public void update(ViewerCell cell) {
@Override DatabaseMappingAttribute attrMapping = (DatabaseMappingAttribute) cell.getElement();
public void update(ViewerCell cell) DBPDataSource dataSource = settings.getTargetDataSource(attrMapping);
{ cell.setText(attrMapping.getTargetType(dataSource, true));
DatabaseMappingAttribute attrMapping = (DatabaseMappingAttribute) cell.getElement(); cell.setFont(boldFont);
DBPDataSource dataSource = settings.getTargetDataSource(attrMapping); }
cell.setText(attrMapping.getTargetType(dataSource, true)); }, new EditingSupport(mappingViewer) {
cell.setFont(boldFont); @Override
} protected CellEditor getCellEditor(Object element)
}); {
columnTargetType.getColumn().setText(DTUIMessages.columns_mapping_dialog_column_target_type_text); DatabaseMappingAttribute attrMapping = (DatabaseMappingAttribute) element;
columnTargetType.getColumn().setWidth(100);
columnTargetType.setEditingSupport(new EditingSupport(mappingViewer) {
@Override
protected CellEditor getCellEditor(Object element)
{
DatabaseMappingAttribute attrMapping = (DatabaseMappingAttribute) element;
Set<String> types = new TreeSet<>(); Set<String> types = new TreeSet<>();
DBPDataTypeProvider dataTypeProvider = DBUtils.getParentOfType(DBPDataTypeProvider.class, settings.getContainer()); DBPDataTypeProvider dataTypeProvider = DBUtils.getParentOfType(DBPDataTypeProvider.class, settings.getContainer());
if (dataTypeProvider != null) { if (dataTypeProvider != null) {
for (DBSDataType type : dataTypeProvider.getLocalDataTypes()) { for (DBSDataType type : dataTypeProvider.getLocalDataTypes()) {
types.add(type.getName()); types.add(type.getName());
}
} }
types.add(attrMapping.getTargetType(settings.getTargetDataSource(attrMapping), true));
return new CustomComboBoxCellEditor(mappingViewer, mappingViewer.getTable(), types.toArray(new String[0]), SWT.BORDER);
}
@Override
protected boolean canEdit(Object element)
{
return true;
}
@Override
protected Object getValue(Object element)
{
DatabaseMappingAttribute attrMapping = (DatabaseMappingAttribute) element;
return attrMapping.getTargetType(settings.getTargetDataSource(attrMapping), true);
}
@Override
protected void setValue(Object element, Object value)
{
DatabaseMappingAttribute attrMapping = (DatabaseMappingAttribute) element;
attrMapping.setTargetType(CommonUtils.toString(value));
mappingViewer.refresh(element);
} }
}); types.add(attrMapping.getTargetType(settings.getTargetDataSource(attrMapping), true));
}
{ return new CustomComboBoxCellEditor(mappingViewer, mappingViewer.getTable(), types.toArray(new String[0]), SWT.BORDER);
TableViewerColumn columnType = new TableViewerColumn(mappingViewer, SWT.LEFT); }
columnType.setLabelProvider(new CellLabelProvider() { @Override
@Override protected boolean canEdit(Object element)
public void update(ViewerCell cell) {
{ return true;
DatabaseMappingAttribute mapping = (DatabaseMappingAttribute) cell.getElement(); }
String text = ""; @Override
switch (mapping.getMappingType()) { protected Object getValue(Object element)
case unspecified: text = "?"; break; {
case existing: text = DTUIMessages.columns_mapping_dialog_cell_text_existing; break; DatabaseMappingAttribute attrMapping = (DatabaseMappingAttribute) element;
case create: text = DTUIMessages.columns_mapping_dialog_cell_text_new; break; return attrMapping.getTargetType(settings.getTargetDataSource(attrMapping), true);
case skip: text = DTUIMessages.columns_mapping_dialog_cell_text_skip; break; }
} @Override
cell.setText(text); protected void setValue(Object element, Object value)
{
DatabaseMappingAttribute attrMapping = (DatabaseMappingAttribute) element;
attrMapping.setTargetType(CommonUtils.toString(value));
mappingViewer.refresh(element);
}
});
columnController.addColumn(DTUIMessages.columns_mapping_dialog_column_type_text_mapping, null, SWT.LEFT, true, false, new ColumnLabelProvider() {
@Override
public String getText(Object element) {
DatabaseMappingAttribute mapping = (DatabaseMappingAttribute) element;
switch (mapping.getMappingType()) {
case existing:
return DTUIMessages.columns_mapping_dialog_cell_text_existing;
case create:
return DTUIMessages.columns_mapping_dialog_cell_text_new;
case skip:
return DTUIMessages.columns_mapping_dialog_cell_text_skip;
default:
return "?";
} }
}); }
columnType.getColumn().setText(DTUIMessages.columns_mapping_dialog_column_type_text_mapping); });
columnType.getColumn().setWidth(60);
} columnController.createColumns();
mappingViewer.setInput(attributeMappings); mappingViewer.setInput(attributeMappings);
......
...@@ -31,10 +31,7 @@ import org.jkiss.utils.CommonUtils; ...@@ -31,10 +31,7 @@ import org.jkiss.utils.CommonUtils;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.File; import java.io.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Reader;
import java.util.Map; import java.util.Map;
/** /**
...@@ -164,24 +161,14 @@ public class DataExporterHTML extends StreamExporterAbstract { ...@@ -164,24 +161,14 @@ public class DataExporterHTML extends StreamExporterAbstract {
private void writeTableTitle(String value, int columns) { private void writeTableTitle(String value, int columns) {
PrintWriter out = getWriter(); PrintWriter out = getWriter();
out.write(String.format("<th colspan=\"%d\">", columns)); out.write(String.format("<th colspan=\"%d\">", columns));
if (value == null) { out.write(CommonUtils.escapeHtml(value));
out.write("&nbsp;");
} else {
value = value.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;");
out.write(value);
}
out.write("</th>"); out.write("</th>");
} }
private void writeTextCell(String value, boolean header) { private void writeTextCell(String value, boolean header) {
PrintWriter out = getWriter(); PrintWriter out = getWriter();
out.write(header ? "<th>" : "<td>"); out.write(header ? "<th>" : "<td>");
if (value == null) { out.write(CommonUtils.escapeHtml(value));
out.write("&nbsp;");
} else {
value = value.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;");
out.write(value);
}
out.write(header ? "</th>" : "</td>"); out.write(header ? "</th>" : "</td>");
} }
...@@ -228,33 +215,16 @@ public class DataExporterHTML extends StreamExporterAbstract { ...@@ -228,33 +215,16 @@ public class DataExporterHTML extends StreamExporterAbstract {
} }
private void writeCellValue(Reader reader) throws IOException { private void writeCellValue(Reader reader) throws IOException {
try { try (BufferedReader bufferedReader = new BufferedReader(reader)) {
PrintWriter out = getWriter(); PrintWriter out = getWriter();
// Copy reader String line = bufferedReader.readLine();
char[] buffer = new char[2000]; while (line != null) {
for (; ; ) { out.write(CommonUtils.escapeHtml(line));
int count = reader.read(buffer); line = bufferedReader.readLine();
if (count <= 0) { if (line != null) {
break; out.write("<br>");
}
for (int i = 0; i < count; i++) {
if (buffer[i] == '<') {
out.write("&lt;");
} else if (buffer[i] == '>') {
out.write("&gt;");
}
if (buffer[i] == '&') {
out.write("&amp;");
}
out.write(buffer[i]);
} }
} }
} finally {
ContentUtils.close(reader);
} }
} }
public boolean saveBinariesAsImages() {
return true;
}
} }
...@@ -1084,11 +1084,11 @@ public class OracleSchema extends OracleGlobalObject implements DBSSchema, DBPRe ...@@ -1084,11 +1084,11 @@ public class OracleSchema extends OracleGlobalObject implements DBSSchema, DBPRe
"i.OWNER,i.INDEX_NAME,i.INDEX_TYPE,i.TABLE_OWNER,i.TABLE_NAME,i.UNIQUENESS,i.TABLESPACE_NAME,i.STATUS,i.NUM_ROWS,i.SAMPLE_SIZE,\n" + "i.OWNER,i.INDEX_NAME,i.INDEX_TYPE,i.TABLE_OWNER,i.TABLE_NAME,i.UNIQUENESS,i.TABLESPACE_NAME,i.STATUS,i.NUM_ROWS,i.SAMPLE_SIZE,\n" +
"ic.COLUMN_NAME,ic.COLUMN_POSITION,ic.COLUMN_LENGTH,ic.DESCEND,iex.COLUMN_EXPRESSION\n" + "ic.COLUMN_NAME,ic.COLUMN_POSITION,ic.COLUMN_LENGTH,ic.DESCEND,iex.COLUMN_EXPRESSION\n" +
"FROM " + OracleUtils.getAdminAllViewPrefix(session.getProgressMonitor(), getDataSource(), "INDEXES") + " i\n" + "FROM " + OracleUtils.getAdminAllViewPrefix(session.getProgressMonitor(), getDataSource(), "INDEXES") + " i\n" +
", " + OracleUtils.getAdminAllViewPrefix(session.getProgressMonitor(), getDataSource(), "IND_COLUMNS") + " ic, " + "JOIN " + OracleUtils.getAdminAllViewPrefix(session.getProgressMonitor(), getDataSource(), "IND_COLUMNS") + " ic " +
OracleUtils.getAdminAllViewPrefix(session.getProgressMonitor(), getDataSource(), "IND_EXPRESSIONS") + " iex " + "ON i.owner = ic.index_owner AND i.index_name = ic.index_name\n" +
"WHERE ic.INDEX_OWNER=i.OWNER AND ic.INDEX_NAME=i.INDEX_NAME \n" + "LEFT JOIN " + OracleUtils.getAdminAllViewPrefix(session.getProgressMonitor(), getDataSource(), "IND_EXPRESSIONS") + " iex " +
"AND iex.INDEX_OWNER(+)=i.OWNER AND iex.INDEX_NAME(+)=i.INDEX_NAME AND iex.COLUMN_POSITION(+)=ic.COLUMN_POSITION\n" + "ON iex.index_owner = i.owner AND iex.INDEX_NAME = i.INDEX_NAME AND iex.COLUMN_POSITION = ic.COLUMN_POSITION\n" +
"AND "); "WHERE ");
if (forTable == null) { if (forTable == null) {
sql.append("i.OWNER=?"); sql.append("i.OWNER=?");
} else { } else {
......
...@@ -157,9 +157,9 @@ public class OracleStructureAssistant implements DBSStructureAssistant<OracleExe ...@@ -157,9 +157,9 @@ public class OracleStructureAssistant implements DBSStructureAssistant<OracleExe
try (JDBCPreparedStatement dbStat = session.prepareStatement( try (JDBCPreparedStatement dbStat = session.prepareStatement(
"SELECT " + OracleUtils.getSysCatalogHint((OracleDataSource) session.getDataSource()) + " OWNER, TABLE_NAME, CONSTRAINT_NAME, CONSTRAINT_TYPE\n" + "SELECT " + OracleUtils.getSysCatalogHint((OracleDataSource) session.getDataSource()) + " OWNER, TABLE_NAME, CONSTRAINT_NAME, CONSTRAINT_TYPE\n" +
"FROM " + OracleUtils.getAdminAllViewPrefix(monitor, (OracleDataSource) session.getDataSource(), "CONSTRAINTS") + "\n" + "FROM " + OracleUtils.getAdminAllViewPrefix(monitor, (OracleDataSource) session.getDataSource(), "CONSTRAINTS") + "\n" +
"WHERE CONSTRAINT_NAME like ?" + (!hasFK ? " AND CONSTRAINT_TYPE<>'R'" : "") + "WHERE" + (params.isCaseSensitive() ? " CONSTRAINT_NAME " : " UPPER(CONSTRAINT_NAME) ") +
(schema != null ? " AND OWNER=?" : ""))) { "LIKE ?" + (!hasFK ? " AND CONSTRAINT_TYPE<>'R'" : "") + (schema != null ? " AND OWNER=?" : ""))) {
dbStat.setString(1, params.getMask().toUpperCase()); dbStat.setString(1, params.isCaseSensitive() ? params.getMask() : params.getMask().toUpperCase());
if (schema != null) { if (schema != null) {
dbStat.setString(2, schema.getName()); dbStat.setString(2, schema.getName());
} }
...@@ -250,13 +250,25 @@ public class OracleStructureAssistant implements DBSStructureAssistant<OracleExe ...@@ -250,13 +250,25 @@ public class OracleStructureAssistant implements DBSStructureAssistant<OracleExe
if (searchViewsByDefinition) { if (searchViewsByDefinition) {
query.append(" UNION ALL SELECT OWNER, VIEW_NAME, 'VIEW' AS OBJECT_TYPE FROM "); query.append(" UNION ALL SELECT OWNER, VIEW_NAME, 'VIEW' AS OBJECT_TYPE FROM ");
query.append(OracleUtils.getAdminAllViewPrefix(session.getProgressMonitor(), dataSource, "VIEWS")); query.append(OracleUtils.getAdminAllViewPrefix(session.getProgressMonitor(), dataSource, "VIEWS"));
query.append(" v WHERE v.\"TEXT_VC\" LIKE ?"); query.append(" v WHERE ");
if (params.isCaseSensitive()) {
query.append("v.\"TEXT_VC\"");
} else {
query.append("UPPER(v.\"TEXT_VC\")");
}
query.append(" LIKE ?");
query.append(ownerClause); query.append(ownerClause);
} }
if (params.isSearchInDefinitions()) { if (params.isSearchInDefinitions()) {
query.append(" UNION ALL SELECT DISTINCT owner, name, type FROM "); query.append(" UNION ALL SELECT DISTINCT owner, name, type FROM ");
query.append(OracleUtils.getAdminAllViewPrefix(session.getProgressMonitor(), dataSource, "SOURCE")); query.append(OracleUtils.getAdminAllViewPrefix(session.getProgressMonitor(), dataSource, "SOURCE"));
query.append(" WHERE text LIKE ?"); query.append(" WHERE ");
if (params.isCaseSensitive()) {
query.append("text ");
} else {
query.append("UPPER(text) ");
}
query.append("LIKE ?");
query.append(ownerClause); query.append(ownerClause);
} }
query.append(")\nORDER BY OBJECT_NAME"); query.append(")\nORDER BY OBJECT_NAME");
......
...@@ -176,7 +176,7 @@ public final class SQLUtils { ...@@ -176,7 +176,7 @@ public final class SQLUtils {
else if (c == '\\') { else if (c == '\\') {
if (i < like.length() - 1) { if (i < like.length() - 1) {
char nc = like.charAt(i + 1); char nc = like.charAt(i + 1);
if (nc == '_' || nc == '*' || nc == '?' || nc == '.') { if (nc == '_' || nc == '*' || nc == '?' || nc == '.' || nc == '%') {
result.append("\\").append(nc); result.append("\\").append(nc);
i++; i++;
} else { } else {
......
...@@ -421,7 +421,7 @@ public class SQLFormatterTokenizedTest { ...@@ -421,7 +421,7 @@ public class SQLFormatterTokenizedTest {
"\t1 = 1;"; //$NON-NLS-1$ "\t1 = 1;"; //$NON-NLS-1$
assertEquals("SQLFormatterTokenized does not properly format query with a comment between FROM and WHERE", expected, format(sql)); assertEquals("SQLFormatterTokenized does not properly format query with a comment between FROM and WHERE", expected, format(sql));
sql = SQLConstants.KEYWORD_SELECT + lineBreak + "\t--cmnt" + lineBreak + "a, b FROM a ;"; sql = SQLConstants.KEYWORD_SELECT + lineBreak + "\t--comment" + lineBreak + "a, b FROM a ;";
expected = SQLConstants.KEYWORD_SELECT + lineBreak + expected = SQLConstants.KEYWORD_SELECT + lineBreak +
"\t--comment" + lineBreak + "\t--comment" + lineBreak +
"\ta," + lineBreak + "\ta," + lineBreak +
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册