diff --git a/plugins/org.jkiss.dbeaver.ext.firebird/src/org/jkiss/dbeaver/ext/firebird/model/FireBirdMetaModel.java b/plugins/org.jkiss.dbeaver.ext.firebird/src/org/jkiss/dbeaver/ext/firebird/model/FireBirdMetaModel.java index f22b1b8adc87f379de6789c199d92266279ec582..69fe777929af973a5a3b60284d0b0f5c6d791ce2 100644 --- a/plugins/org.jkiss.dbeaver.ext.firebird/src/org/jkiss/dbeaver/ext/firebird/model/FireBirdMetaModel.java +++ b/plugins/org.jkiss.dbeaver.ext.firebird/src/org/jkiss/dbeaver/ext/firebird/model/FireBirdMetaModel.java @@ -23,17 +23,21 @@ import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.ext.firebird.FireBirdUtils; import org.jkiss.dbeaver.ext.generic.model.*; import org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel; +import org.jkiss.dbeaver.model.DBPErrorAssistant; import org.jkiss.dbeaver.model.exec.DBCExecutionPurpose; import org.jkiss.dbeaver.model.exec.jdbc.JDBCPreparedStatement; import org.jkiss.dbeaver.model.exec.jdbc.JDBCResultSet; import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession; import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; +import org.jkiss.utils.CommonUtils; import org.osgi.framework.Version; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * FireBirdDataSource @@ -42,6 +46,8 @@ public class FireBirdMetaModel extends GenericMetaModel { static final Log log = Log.getLog(FireBirdMetaModel.class); + private Pattern ERROR_POSITION_PATTERN = Pattern.compile(" line ([0-9]+), column ([0-9]+)"); + public FireBirdMetaModel(IConfigurationElement cfg) { super(cfg); } @@ -120,4 +126,18 @@ public class FireBirdMetaModel extends GenericMetaModel } } + @Override + public DBPErrorAssistant.ErrorPosition getErrorPosition(Throwable error) { + String message = error.getMessage(); + if (!CommonUtils.isEmpty(message)) { + Matcher matcher = ERROR_POSITION_PATTERN.matcher(message); + if (matcher.find()) { + DBPErrorAssistant.ErrorPosition pos = new DBPErrorAssistant.ErrorPosition(); + pos.line = Integer.parseInt(matcher.group(1)) - 1; + pos.position = Integer.parseInt(matcher.group(2)) - 1; + return pos; + } + } + return null; + } }