You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@empire-db.apache.org by do...@apache.org on 2019/11/08 08:24:04 UTC
[empire-db] branch master updated: EMPIREDB-318 DBQuery code
optimization
This is an automated email from the ASF dual-hosted git repository.
doebele pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/empire-db.git
The following commit(s) were added to refs/heads/master by this push:
new 526cb2e EMPIREDB-318 DBQuery code optimization
526cb2e is described below
commit 526cb2e7478da6314b6495fbffccf5d235a1a3d6
Author: Rainer Döbele <do...@apache.org>
AuthorDate: Fri Nov 8 09:24:00 2019 +0100
EMPIREDB-318
DBQuery code optimization
---
.../main/java/org/apache/empire/db/DBQuery.java | 148 +++------------------
.../java/org/apache/empire/db/DBQueryColumn.java | 7 +-
.../main/java/org/apache/empire/db/DBReader.java | 2 +-
.../apache/empire/db/expr/column/DBAliasExpr.java | 4 +-
4 files changed, 25 insertions(+), 136 deletions(-)
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBQuery.java b/empire-db/src/main/java/org/apache/empire/db/DBQuery.java
index 147ecd8..e0c5535 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBQuery.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBQuery.java
@@ -25,9 +25,7 @@ import java.util.Map.Entry;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.empire.commons.ObjectUtils;
-import org.apache.empire.commons.Options;
import org.apache.empire.commons.StringUtils;
-import org.apache.empire.data.DataType;
import org.apache.empire.db.exceptions.InvalidKeyException;
import org.apache.empire.db.exceptions.NoPrimaryKeyException;
import org.apache.empire.db.exceptions.QueryNoResultException;
@@ -43,8 +41,6 @@ import org.apache.empire.exceptions.InvalidArgumentException;
import org.apache.empire.exceptions.ItemNotFoundException;
import org.apache.empire.exceptions.NotImplementedException;
import org.apache.empire.exceptions.NotSupportedException;
-import org.apache.empire.xml.XMLUtil;
-import org.w3c.dom.Element;
/**
@@ -64,102 +60,6 @@ public class DBQuery extends DBRowSet
private final static long serialVersionUID = 1L;
private static AtomicInteger queryCount = new AtomicInteger(0);
-
- /**
- * DBQueryExprColumn
- * wraps a DBColumnExpr object into a DBColumn interface object
- * @author doebele
- */
- protected static class DBQueryExprColumn extends DBColumn
- {
- private static final long serialVersionUID = 1L;
-
- private final DBColumnExpr expr;
-
- public DBQueryExprColumn(DBQuery query, String name, DBColumnExpr expr)
- {
- super(query, name);
- this.expr = expr;
- }
-
- public DBColumnExpr getExpr()
- {
- return expr;
- }
-
- @Override
- public DBColumn getUpdateColumn()
- {
- return expr.getUpdateColumn();
- }
-
- @Override
- public DataType getDataType()
- {
- return expr.getDataType();
- }
-
- @Override
- public double getSize()
- {
- return 0;
- }
-
- @Override
- public boolean isRequired()
- {
- return false;
- }
-
- @Override
- public boolean isAutoGenerated()
- {
- return false;
- }
-
- @Override
- public boolean isReadOnly()
- {
- return true;
- }
-
- @Override
- public Object getAttribute(String name)
- {
- return expr.getAttribute(name);
- }
-
- @Override
- public Options getOptions()
- {
- return expr.getOptions();
- }
-
- @Override
- public String getBeanPropertyName()
- {
- return expr.getBeanPropertyName();
- }
-
- @Override
- public Object validate(Object value)
- {
- log.warn("validate not supported for {}", expr.getName());
- return value;
- }
-
- @Override
- public Element addXml(Element parent, long flags)
- {
- Element elem = XMLUtil.addElement(parent, "column");
- elem.setAttribute("name", name);
- // add All Attributes
- if (attributes != null)
- attributes.addXml(elem, flags);
- // done
- return elem;
- }
- }
protected final DBCommandExpr cmdExpr;
protected final DBColumn[] keyColumns;
@@ -178,18 +78,23 @@ public class DBQuery extends DBRowSet
{ // Set the column expressions
super(cmd.getDatabase());
this.cmdExpr = cmd;
+ this.alias = alias;
// Set Query Columns
DBColumnExpr[] exprList = cmd.getSelectExprList();
this.queryColumns = new DBQueryColumn[exprList.length];
for (int i = 0; i < exprList.length; i++)
{ // Init Columns
- columns.add(getColumnFromExpr(exprList[i], i));
- queryColumns[i] = createQueryColumn(exprList[i]);
+ queryColumns[i] = createQueryColumn(exprList[i], i);
+ // add column
+ DBColumn column = exprList[i].getUpdateColumn();
+ if (column==null || (exprList[i] instanceof DBAliasExpr))
+ { // user QueryColumn
+ column = queryColumns[i];
+ }
+ columns.add(column);
}
// Set the key Column
this.keyColumns = keyColumns;
- // set alias
- this.alias = alias;
}
/**
@@ -708,30 +613,13 @@ public class DBQuery extends DBRowSet
* @param expr
* @return the query column
*/
- protected DBQueryColumn createQueryColumn(DBColumnExpr expr)
+ protected DBQueryColumn createQueryColumn(DBColumnExpr expr, int index)
{
- return new DBQueryColumn(this, expr);
- }
-
- /**
- * Gets the underlying DBColumn from a column expression
- * If there is no underlying column, a wrapper will be generated
- * @param expr
- * @param index
- * @return the column
- */
- protected DBColumn getColumnFromExpr(DBColumnExpr expr, int index)
- {
- DBColumn column;
- if ((expr instanceof DBAliasExpr) || (column=expr.getUpdateColumn())==null)
- { // generate name
- String name = expr.getName();
- if (StringUtils.isEmpty(name))
- name = getName()+"_COL"+String.valueOf(index);
- // create wrapper
- column=new DBQueryExprColumn(this, name, expr);
- }
- return column;
+ String name = expr.getName();
+ if (StringUtils.isEmpty(name))
+ name = "COL_"+String.valueOf(index);
+ // create wrapper
+ return new DBQueryColumn(this, name, expr);
}
@Override
@@ -744,7 +632,7 @@ public class DBQuery extends DBRowSet
index=0;
for (DBColumn c : columns)
{ // check update column
- if ((c instanceof DBQueryExprColumn) && column.equals(c.getUpdateColumn()))
+ if ((c instanceof DBQueryColumn) && column.equals(c.getUpdateColumn()))
return index;
// next
index++;
@@ -757,8 +645,8 @@ public class DBQuery extends DBRowSet
protected DBColumnExpr getColumnExprAt(int index)
{
DBColumn column = columns.get(index);
- if (column instanceof DBQueryExprColumn)
- return ((DBQueryExprColumn)column).getExpr(); // unwrap
+ if (column instanceof DBQueryColumn)
+ return ((DBQueryColumn)column).expr; // unwrap
// use column
return column;
}
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBQueryColumn.java b/empire-db/src/main/java/org/apache/empire/db/DBQueryColumn.java
index d1d28cc..2bee498 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBQueryColumn.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBQueryColumn.java
@@ -25,6 +25,7 @@ import org.w3c.dom.Element;
public class DBQueryColumn extends DBColumn
{
private final static long serialVersionUID = 1L;
+
protected final DBColumnExpr expr;
/**
@@ -33,14 +34,14 @@ public class DBQueryColumn extends DBColumn
* @param query the DBQuery object
* @param expr the concrete DBColumnExpr object
*/
- public DBQueryColumn(DBQuery query, DBColumnExpr expr)
+ public DBQueryColumn(DBQuery query, String name, DBColumnExpr expr)
{ // call base
- super(query, expr.getName());
+ super(query, name);
// set Expression
this.expr = expr;
}
- public DBColumnExpr getQueryExpression()
+ public DBColumnExpr getExpr()
{
return expr;
}
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBReader.java b/empire-db/src/main/java/org/apache/empire/db/DBReader.java
index 1d35097..cf3d939 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBReader.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBReader.java
@@ -881,7 +881,7 @@ public class DBReader extends DBRecordData
return i;
// Query Expression?
if (updColumn instanceof DBQueryColumn)
- { updColumn = ((DBQueryColumn)updColumn).getQueryExpression().getUpdateColumn();
+ { updColumn = ((DBQueryColumn)updColumn).getExpr().getUpdateColumn();
if (updColumn!=null && updColumn.equals(column))
return i;
}
diff --git a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAliasExpr.java b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAliasExpr.java
index 2c85c24..dddbee4 100644
--- a/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAliasExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/expr/column/DBAliasExpr.java
@@ -136,14 +136,14 @@ public class DBAliasExpr extends DBColumnExpr
}
/**
- * Always returns false since an alias expression cannot be an aggregate.
+ * Forward to expression
*
* @return false
*/
@Override
public boolean isAggregate()
{
- return false;
+ return expr.isAggregate();
}
/**