提交 95a25953 编写于 作者: J jurgen

Determine "select" statements with semantic analysis

上级 534cbb52
Firebird, Postgre
Detect source table for queries (Oracle, Postgresql, etc). Also fixes generate sql for queries.
BUG: Save navigation filter and use correct nav page index
BUG: open object (F4) with FQ name (schema)
......
......@@ -38,6 +38,7 @@ import org.jkiss.dbeaver.model.runtime.DBRRunnableWithResult;
import org.jkiss.dbeaver.model.sql.SQLDataSource;
import org.jkiss.dbeaver.model.sql.SQLDialect;
import org.jkiss.dbeaver.model.sql.SQLUtils;
import org.jkiss.dbeaver.model.sql.parser.SQLSemanticProcessor;
import org.jkiss.dbeaver.model.struct.*;
import org.jkiss.dbeaver.model.struct.rdb.*;
import org.jkiss.dbeaver.model.virtual.DBVEntity;
......@@ -932,7 +933,7 @@ public final class DBUtils {
long offset,
long maxRows) throws DBCException
{
final boolean dataModifyQuery = SQLUtils.isDataModifyQuery(query);
final boolean dataModifyQuery = !SQLSemanticProcessor.isSelectQuery(query);
final boolean hasLimits = !dataModifyQuery && offset >= 0 && maxRows > 0;
DBCQueryTransformer limitTransformer = null, fetchAllTransformer = null;
......
......@@ -26,10 +26,13 @@ import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.insert.Insert;
import net.sf.jsqlparser.statement.select.FromItem;
import net.sf.jsqlparser.statement.select.OrderByElement;
import net.sf.jsqlparser.statement.select.PlainSelect;
import net.sf.jsqlparser.statement.select.Select;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.data.DBDAttributeConstraint;
......@@ -48,6 +51,21 @@ public class SQLSemanticProcessor {
private static final String NESTED_QUERY_AlIAS = "z_q";
static final Log log = LogFactory.getLog(SQLUtils.class);
public static boolean isSelectQuery(String query)
{
try {
Statement statement = CCJSqlParserUtil.parse(query);
return statement instanceof Select &&
((Select) statement).getSelectBody() instanceof PlainSelect &&
((PlainSelect) ((Select) statement).getSelectBody()).getInto() == null;
} catch (Exception e) {
log.error(e);
return false;
}
}
public static String addFiltersToQuery(final DBPDataSource dataSource, String sqlQuery, final DBDDataFilter dataFilter) throws DBException {
boolean supportSubqueries = dataSource instanceof SQLDataSource && ((SQLDataSource) dataSource).getSQLDialect().supportsSubqueries();
try {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册