You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oodt.apache.org by ma...@apache.org on 2015/10/13 17:39:06 UTC
[6/9] oodt git commit: OODT-888 replace =+ with StringBuilder to
improve concat performance
OODT-888 replace =+ with StringBuilder to improve concat performance
Project: http://git-wip-us.apache.org/repos/asf/oodt/repo
Commit: http://git-wip-us.apache.org/repos/asf/oodt/commit/4286c92a
Tree: http://git-wip-us.apache.org/repos/asf/oodt/tree/4286c92a
Diff: http://git-wip-us.apache.org/repos/asf/oodt/diff/4286c92a
Branch: refs/heads/master
Commit: 4286c92a1329319c6ab0d317523c85bb1e924c15
Parents: 631cd23
Author: Tom Barber <to...@analytical-labs.com>
Authored: Sat Oct 10 16:32:43 2015 +0100
Committer: Tom Barber <to...@analytical-labs.com>
Committed: Sat Oct 10 16:32:43 2015 +0100
----------------------------------------------------------------------
.../view/prompts/QueryBuilderPrompt.java | 39 ++--
.../cas/filemgr/catalog/DataSourceCatalog.java | 223 +++++++++----------
2 files changed, 122 insertions(+), 140 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/oodt/blob/4286c92a/app/fmbrowser/src/main/java/org/apache/oodt/cas/filemgr/browser/view/prompts/QueryBuilderPrompt.java
----------------------------------------------------------------------
diff --git a/app/fmbrowser/src/main/java/org/apache/oodt/cas/filemgr/browser/view/prompts/QueryBuilderPrompt.java b/app/fmbrowser/src/main/java/org/apache/oodt/cas/filemgr/browser/view/prompts/QueryBuilderPrompt.java
index 5204db5..b030ee6 100644
--- a/app/fmbrowser/src/main/java/org/apache/oodt/cas/filemgr/browser/view/prompts/QueryBuilderPrompt.java
+++ b/app/fmbrowser/src/main/java/org/apache/oodt/cas/filemgr/browser/view/prompts/QueryBuilderPrompt.java
@@ -17,35 +17,22 @@
package org.apache.oodt.cas.filemgr.browser.view.prompts;
+import org.apache.oodt.cas.filemgr.browser.controller.WindowListener;
+import org.apache.oodt.cas.filemgr.browser.model.CasDB;
import org.apache.oodt.cas.filemgr.structs.RangeQueryCriteria;
import org.apache.oodt.cas.filemgr.structs.TermQueryCriteria;
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.Font;
+import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
-import javax.swing.BoxLayout;
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTextArea;
-import javax.swing.JTextField;
+import javax.swing.*;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
-import org.apache.oodt.cas.filemgr.browser.controller.WindowListener;
-import org.apache.oodt.cas.filemgr.browser.model.CasDB;
-
public class QueryBuilderPrompt extends JFrame {
protected CasDB database;
@@ -292,22 +279,22 @@ public class QueryBuilderPrompt extends JFrame {
}
public String getQuery() {
- String q = new String();
+ StringBuilder q = new StringBuilder();
for (int i = 0; i < this.getComponentCount(); i++) {
Component c = this.getComponent(i);
if (c instanceof TermQueryPanel) {
- q += ((TermQueryPanel) c).getOp() + " ";
- q += ((TermQueryPanel) c).getElement() + ":";
- q += ((TermQueryPanel) c).getText() + " ";
+ q.append(((TermQueryPanel) c).getOp()).append(" ");
+ q.append(((TermQueryPanel) c).getElement()).append(":");
+ q.append(((TermQueryPanel) c).getText()).append(" ");
} else if (c instanceof RangeQueryPanel) {
- q += ((RangeQueryPanel) c).getOp() + " ";
- q += ((RangeQueryPanel) c).getElement() + ":[";
- q += ((RangeQueryPanel) c).getStart() + " TO ";
- q += ((RangeQueryPanel) c).getStop() + "] ";
+ q.append(((RangeQueryPanel) c).getOp()).append(" ");
+ q.append(((RangeQueryPanel) c).getElement()).append(":[");
+ q.append(((RangeQueryPanel) c).getStart()).append(" TO ");
+ q.append(((RangeQueryPanel) c).getStop()).append("] ");
}
}
- return q;
+ return q.toString();
}
public org.apache.oodt.cas.filemgr.structs.Query getCasQuery() {
http://git-wip-us.apache.org/repos/asf/oodt/blob/4286c92a/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/DataSourceCatalog.java
----------------------------------------------------------------------
diff --git a/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/DataSourceCatalog.java b/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/DataSourceCatalog.java
index 155e263..5a01e1f 100644
--- a/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/DataSourceCatalog.java
+++ b/filemgr/src/main/java/org/apache/oodt/cas/filemgr/catalog/DataSourceCatalog.java
@@ -828,15 +828,15 @@ public class DataSourceCatalog implements Catalog {
conn = dataSource.getConnection();
statement = conn.createStatement();
- String getProductRefSql = "SELECT * FROM "
+ StringBuilder getProductRefSql = new StringBuilder("SELECT * FROM "
+ product.getProductType().getName() + "_reference"
- + " WHERE product_id = " + quoteIt(product.getProductId());
+ + " WHERE product_id = " + quoteIt(product.getProductId()));
- if(this.orderedValues) getProductRefSql += " ORDER BY pkey";
+ if(this.orderedValues) getProductRefSql.append(" ORDER BY pkey");
LOG.log(Level.FINE, "getProductReferences: Executing: "
+ getProductRefSql);
- rs = statement.executeQuery(getProductRefSql);
+ rs = statement.executeQuery(getProductRefSql.toString());
references = new Vector<Reference>();
while (rs.next()) {
@@ -1067,14 +1067,14 @@ public class DataSourceCatalog implements Catalog {
conn = dataSource.getConnection();
statement = conn.createStatement();
- String metadataSql = "SELECT * FROM "
+ StringBuilder metadataSql = new StringBuilder("SELECT * FROM "
+ product.getProductType().getName() + "_metadata"
- + " WHERE product_id = " + quoteIt(product.getProductId());
+ + " WHERE product_id = " + quoteIt(product.getProductId()));
- if(this.orderedValues) metadataSql += " ORDER BY pkey";
+ if(this.orderedValues) metadataSql.append(" ORDER BY pkey");
LOG.log(Level.FINE, "getMetadata: Executing: " + metadataSql);
- rs = statement.executeQuery(metadataSql);
+ rs = statement.executeQuery(metadataSql.toString());
m = new Metadata();
List<Element> elements = null;
@@ -1153,20 +1153,23 @@ public class DataSourceCatalog implements Catalog {
conn = dataSource.getConnection();
statement = conn.createStatement();
- String elementIds = "";
+ StringBuilder elementIds = new StringBuilder("");
if (elems.size() > 0) {
- elementIds += " AND (element_id = '" + this.validationLayer.getElementByName(elems.get(0)).getElementId() + "'";
+ elementIds.append(" AND (element_id = '")
+ .append(this.validationLayer.getElementByName(elems.get(0)).getElementId
+ ()).append("'");
for (int i = 1; i < elems.size(); i++)
- elementIds += " OR element_id = '" + this.validationLayer.getElementByName(elems.get(i)).getElementId() + "'";
- elementIds += ")";
+ elementIds.append(" OR element_id = '").append(this.validationLayer.getElementByName(elems.get(i))
+ .getElementId()).append("'");
+ elementIds.append(")");
}
- String metadataSql = "SELECT element_id,metadata_value FROM "
+ StringBuilder metadataSql = new StringBuilder("SELECT element_id,metadata_value FROM "
+ product.getProductType().getName() + "_metadata"
- + " WHERE product_id = " + quoteIt(product.getProductId()) + elementIds;
- if(this.orderedValues) metadataSql += " ORDER BY pkey";
+ + " WHERE product_id = " + quoteIt(product.getProductId()) + elementIds);
+ if(this.orderedValues) metadataSql.append(" ORDER BY pkey");
LOG.log(Level.FINE, "getMetadata: Executing: " + metadataSql);
- rs = statement.executeQuery(metadataSql);
+ rs = statement.executeQuery(metadataSql.toString());
m = new Metadata();
List<Element> elements = null;
@@ -1274,24 +1277,24 @@ public class DataSourceCatalog implements Catalog {
statement = conn.createStatement();
statement.setMaxRows(n);
- String getProductSql = "SELECT products.* " + "FROM products ";
+ StringBuilder getProductSql = new StringBuilder("SELECT products.* " + "FROM products ");
if (type != null && type.getProductTypeId() != null) {
if (fieldIdStringFlag) {
- getProductSql += "WHERE products.product_type_id = '"
- + type.getProductTypeId() + "' ";
+ getProductSql.append("WHERE products.product_type_id = '").append(type.getProductTypeId())
+ .append("' ");
} else {
- getProductSql += "WHERE products.product_type_id = "
- + type.getProductTypeId() + " ";
+ getProductSql.append("WHERE products.product_type_id = ").append(type.getProductTypeId())
+ .append(" ");
}
}
- getProductSql += "ORDER BY products.product_id DESC";
+ getProductSql.append("ORDER BY products.product_id DESC");
- LOG.log(Level.FINE, "getTopNProducts: executing: " + getProductSql);
+ LOG.log(Level.FINE, "getTopNProducts: executing: " + getProductSql.toString());
- rs = statement.executeQuery(getProductSql);
+ rs = statement.executeQuery(getProductSql.toString());
products = new Vector<Product>();
while (rs.next()) {
@@ -1374,23 +1377,21 @@ public class DataSourceCatalog implements Catalog {
statement = conn.createStatement();
// build up the sql statement
- StringBuffer insertClauseSql = new StringBuffer();
- StringBuffer valueClauseSql = new StringBuffer();
+ StringBuilder valueClauseSql = new StringBuilder();
- insertClauseSql.append("INSERT INTO " + metadataTable
- + " (product_id, element_id, metadata_value) ");
- valueClauseSql.append("VALUES ");
+ valueClauseSql.append("VALUES ");
// now do the value clause
if (fieldIdStringFlag) {
- valueClauseSql.append("(" + product.getProductId() + ", '"
- + element.getElementId() + "', '" + value + "')");
+ valueClauseSql.append("(").append(product.getProductId()).append(", '").append(element.getElementId())
+ .append("', '").append(value).append("')");
} else {
- valueClauseSql.append("(" + product.getProductId() + ", "
- + element.getElementId() + ", '" + value + "')");
+ valueClauseSql.append("(").append(product.getProductId()).append(", ").append(element.getElementId())
+ .append(", '").append(value).append("')");
}
- String metaIngestSql = insertClauseSql.toString()
+ String metaIngestSql = ("INSERT INTO " + metadataTable
+ + " (product_id, element_id, metadata_value) ")
+ valueClauseSql.toString();
LOG
.log(Level.FINE, "addMetadataValue: Executing: "
@@ -1445,24 +1446,20 @@ public class DataSourceCatalog implements Catalog {
statement = conn.createStatement();
// build up the sql statement
- String metRemoveSql = "DELETE FROM " + metadataTable + " WHERE ";
+ StringBuilder metRemoveSql = new StringBuilder("DELETE FROM " + metadataTable + " WHERE ");
if (fieldIdStringFlag) {
- metRemoveSql += "PRODUCT_ID = '" + product.getProductId()
- + "' AND ";
- metRemoveSql += "ELEMENT_ID = '" + element.getElementId()
- + "' AND ";
- metRemoveSql += "METADATA_VALUE = '" + value + "'";
+ metRemoveSql.append("PRODUCT_ID = '").append(product.getProductId()).append("' AND ");
+ metRemoveSql.append("ELEMENT_ID = '").append(element.getElementId()).append("' AND ");
+ metRemoveSql.append("METADATA_VALUE = '").append(value).append("'");
} else {
- metRemoveSql += "PRODUCT_ID = " + product.getProductId()
- + " AND ";
- metRemoveSql += "ELEMENT_ID = " + element.getElementId()
- + " AND ";
- metRemoveSql += "METADATA_VALUE = " + value;
+ metRemoveSql.append("PRODUCT_ID = ").append(product.getProductId()).append(" AND ");
+ metRemoveSql.append("ELEMENT_ID = ").append(element.getElementId()).append(" AND ");
+ metRemoveSql.append("METADATA_VALUE = ").append(value);
}
LOG.log(Level.FINE, "removeMetadataValue: Executing: "
+ metRemoveSql);
- statement.execute(metRemoveSql);
+ statement.execute(metRemoveSql.toString());
conn.commit();
} catch (Exception e) {
e.printStackTrace();
@@ -1516,20 +1513,18 @@ public class DataSourceCatalog implements Catalog {
conn.setAutoCommit(false);
statement = conn.createStatement();
- String getProductSql = "SELECT COUNT(products.product_id) AS numProducts "
- + "FROM products ";
+ StringBuilder getProductSql = new StringBuilder("SELECT COUNT(products.product_id) AS numProducts "
+ + "FROM products ");
if (fieldIdStringFlag) {
- getProductSql += "WHERE products.product_type_id = '"
- + type.getProductTypeId() + "' ";
+ getProductSql.append("WHERE products.product_type_id = '").append(type.getProductTypeId()).append("' ");
} else {
- getProductSql += "WHERE products.product_type_id = "
- + type.getProductTypeId() + " ";
+ getProductSql.append("WHERE products.product_type_id = ").append(type.getProductTypeId()).append(" ");
}
- LOG.log(Level.FINE, "getNumProducts: executing: " + getProductSql);
+ LOG.log(Level.FINE, "getNumProducts: executing: " + getProductSql.toString());
- rs = statement.executeQuery(getProductSql);
+ rs = statement.executeQuery(getProductSql.toString());
while (rs.next()) {
numProducts = rs.getInt("numProducts");
@@ -1726,15 +1721,15 @@ public class DataSourceCatalog implements Catalog {
conn = dataSource.getConnection();
statement = conn.createStatement();
- String getProductSql = "";
+ StringBuilder getProductSql = new StringBuilder("");
String tableName = type.getName() + "_metadata";
String subSelectQueryBase = "SELECT product_id FROM " + tableName
+ " ";
- StringBuffer selectClause = new StringBuffer(
+ StringBuilder selectClause = new StringBuilder(
"SELECT COUNT(DISTINCT p.product_id) AS numResults ");
- StringBuffer fromClause = new StringBuffer("FROM " + tableName
+ StringBuilder fromClause = new StringBuilder("FROM " + tableName
+ " p ");
- StringBuffer whereClause = new StringBuffer("WHERE ");
+ StringBuilder whereClause = new StringBuilder("WHERE ");
boolean gotFirstClause = false;
int clauseNum = 0;
@@ -1752,14 +1747,13 @@ public class DataSourceCatalog implements Catalog {
elementIdStr = this.validationLayer.getElementByName(criteria.getElementName()).getElementId();
}
- String clause = null;
+ StringBuilder clause = new StringBuilder();
if (!gotFirstClause) {
- clause = "(p.element_id = " + elementIdStr + " AND ";
+ clause.append("(p.element_id = ").append(elementIdStr).append(" AND ");
if (criteria instanceof TermQueryCriteria) {
- clause += " metadata_value LIKE '%"
- + ((TermQueryCriteria) criteria).getValue()
- + "%') ";
+ clause.append(" metadata_value LIKE '%").append(((TermQueryCriteria) criteria).getValue())
+ .append("%') ");
} else if (criteria instanceof RangeQueryCriteria) {
String startVal = ((RangeQueryCriteria) criteria)
.getStartValue();
@@ -1770,46 +1764,43 @@ public class DataSourceCatalog implements Catalog {
if ((startVal != null && !startVal.equals(""))
|| (endVal != null && !endVal.equals(""))) {
- clause += " metadata_value ";
+ clause.append(" metadata_value ");
boolean gotStart = false;
if (startVal != null && !startVal.equals("")) {
if (inclusive)
- clause += ">= '" + startVal + "'";
+ clause.append(">= '" + startVal + "'");
else
- clause += "> '" + startVal + "'";
+ clause.append("> '" + startVal + "'");
gotStart = true;
}
if (endVal != null && !endVal.equals("")) {
if (gotStart) {
if (inclusive)
- clause += " AND metadata_value <= '"
- + endVal + "'";
+ clause.append(" AND metadata_value <= '").append(endVal).append("'");
else
- clause += " AND metadata_value < '"
- + endVal + "'";
+ clause.append(" AND metadata_value < '").append(endVal).append("'");
} else if (inclusive)
- clause += "<= '" + endVal + "'";
+ clause.append("<= '").append(endVal).append("'");
else
- clause += "< '" + endVal + "'";
+ clause.append("< '").append(endVal).append("'");
}
- clause += ") ";
+ clause.append(") ");
}
}
whereClause.append(clause);
gotFirstClause = true;
} else {
String subSelectTblName = "p" + clauseNum;
- String subSelectQuery = subSelectQueryBase
+ StringBuilder subSelectQuery = new StringBuilder(subSelectQueryBase
+ "WHERE (element_id = " + elementIdStr
- + " AND ";
+ + " AND ");
if (criteria instanceof TermQueryCriteria) {
- subSelectQuery += " metadata_value LIKE '%"
- + ((TermQueryCriteria) criteria).getValue()
- + "%')";
+ subSelectQuery.append(" metadata_value LIKE '%")
+ .append(((TermQueryCriteria) criteria).getValue()).append("%')");
} else if (criteria instanceof RangeQueryCriteria) {
String startVal = ((RangeQueryCriteria) criteria)
.getStartValue();
@@ -1817,29 +1808,28 @@ public class DataSourceCatalog implements Catalog {
.getEndValue();
if (startVal != null || endVal != null) {
- subSelectQuery += " metadata_value ";
+ subSelectQuery.append(" metadata_value ");
boolean gotStart = false;
if (startVal != null && !startVal.equals("")) {
- subSelectQuery += ">= '" + startVal + "'";
+ subSelectQuery.append(">= '").append(startVal).append("'");
gotStart = true;
}
if (endVal != null && !endVal.equals("")) {
if (gotStart) {
- subSelectQuery += " AND metadata_value <= '"
- + endVal + "'";
+ subSelectQuery.append(" AND metadata_value <= '").append(endVal).append("'");
} else
- subSelectQuery += "<= '" + endVal + "'";
+ subSelectQuery.append("<= '").append(endVal).append("'");
}
- subSelectQuery += ") ";
+ subSelectQuery.append(") ");
}
}
- fromClause.append("INNER JOIN (" + subSelectQuery
+ fromClause.append("INNER JOIN (" + subSelectQuery.toString()
+ ") " + subSelectTblName + " ON "
+ subSelectTblName
+ ".product_id = p.product_id ");
@@ -1848,16 +1838,16 @@ public class DataSourceCatalog implements Catalog {
}
}
- getProductSql = selectClause.toString() + fromClause.toString();
+ getProductSql.append(selectClause.toString() + fromClause.toString());
if (gotFirstClause) {
- getProductSql += whereClause.toString();
+ getProductSql.append(whereClause.toString());
}
LOG.log(Level.FINE, "catalog get num results: executing: "
- + getProductSql);
+ + getProductSql.toString());
- rs = statement.executeQuery(getProductSql);
+ rs = statement.executeQuery(getProductSql.toString());
while (rs.next()) {
resultCount = rs.getInt("numResults");
@@ -2014,36 +2004,38 @@ public class DataSourceCatalog implements Catalog {
statement = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
- String getProductSql = null;
+ StringBuilder getProductSql = new StringBuilder();
if (!productIdString) {
if (query.getCriteria().size() == 0) {
- getProductSql = "SELECT DISTINCT product_id FROM " + type.getName() + "_metadata";
+ getProductSql.append("SELECT DISTINCT product_id FROM " + type.getName() + "_metadata");
}else if (query.getCriteria().size() == 1) {
- getProductSql = this.getSqlQuery(query.getCriteria().get(0), type);
+ getProductSql.append(this.getSqlQuery(query.getCriteria().get(0), type));
}else {
- getProductSql = this.getSqlQuery(new BooleanQueryCriteria(query.getCriteria(), BooleanQueryCriteria.AND), type);
+ getProductSql.append(this.getSqlQuery(new BooleanQueryCriteria(query.getCriteria(), BooleanQueryCriteria
+ .AND), type));
}
- getProductSql += " ORDER BY product_id DESC ";
+ getProductSql.append(" ORDER BY product_id DESC ");
} else {
if (query.getCriteria().size() == 0) {
- getProductSql = "SELECT DISTINCT products.product_id FROM products, " + type.getName() + "_metadata"
- + " WHERE products.product_id="+type.getName() + "_metadata.product_id";
+ getProductSql.append("SELECT DISTINCT products.product_id FROM products, " + type.getName() + "_metadata"
+ + " WHERE products.product_id="+type.getName() + "_metadata.product_id");
} else if (query.getCriteria().size() == 1) {
- getProductSql = this.getSqlQuery(query.getCriteria().get(0), type);
+ getProductSql.append(this.getSqlQuery(query.getCriteria().get(0), type));
} else {
- getProductSql = this.getSqlQuery(new BooleanQueryCriteria(query.getCriteria(), BooleanQueryCriteria.AND), type);
+ getProductSql.append(this.getSqlQuery(new BooleanQueryCriteria(query.getCriteria(), BooleanQueryCriteria
+ .AND), type));
}
- getProductSql += " ORDER BY products.product_datetime DESC ";
+ getProductSql.append(" ORDER BY products.product_datetime DESC ");
}
- LOG.log(Level.FINE, "catalog query: executing: " + getProductSql);
+ LOG.log(Level.FINE, "catalog query: executing: " + getProductSql.toString());
- rs = statement.executeQuery(getProductSql);
+ rs = statement.executeQuery(getProductSql.toString());
List<String> productIds = new Vector<String>();
if (doSkip) {
@@ -2133,37 +2125,40 @@ public class DataSourceCatalog implements Catalog {
}
protected String getSqlQuery(QueryCriteria queryCriteria, ProductType type) throws ValidationLayerException, CatalogException {
- String sqlQuery = null;
+ StringBuilder sqlQuery = new StringBuilder();
if (queryCriteria instanceof BooleanQueryCriteria) {
BooleanQueryCriteria bqc = (BooleanQueryCriteria) queryCriteria;
if (bqc.getOperator() == BooleanQueryCriteria.NOT) {
if (!this.productIdString) {
- sqlQuery = "SELECT DISTINCT product_id FROM " + type.getName() + "_metadata WHERE product_id NOT IN (" + this.getSqlQuery(bqc.getTerms().get(0), type) + ")";
+ sqlQuery.append("SELECT DISTINCT product_id FROM " + type.getName() + "_metadata WHERE product_id "
+ + "NOT IN (" + this.getSqlQuery(bqc.getTerms().get(0), type) + ")");
} else {
- sqlQuery = "SELECT DISTINCT products.product_id FROM products," + type.getName() + "_metadata"
+ sqlQuery.append("SELECT DISTINCT products.product_id FROM products," + type.getName() + "_metadata"
+ " WHERE products.product_id="+type.getName() + "_metadata.product_id"
- + " AND products.product_id NOT IN (" + this.getSqlQuery(bqc.getTerms().get(0), type) + ")";
+ + " AND products.product_id NOT IN (" + this.getSqlQuery(bqc.getTerms().get
+ (0), type) + ")");
}
}else {
- sqlQuery = "(" + this.getSqlQuery(bqc.getTerms().get(0), type);
+ sqlQuery.append("(" + this.getSqlQuery(bqc.getTerms().get(0), type));
String op = bqc.getOperator() == BooleanQueryCriteria.AND ? "INTERSECT" : "UNION";
for (int i = 1; i < bqc.getTerms().size(); i++)
- sqlQuery += ") " + op + " (" + this.getSqlQuery(bqc.getTerms().get(i), type);
- sqlQuery += ")";
+ sqlQuery.append(") " + op + " (" + this.getSqlQuery(bqc.getTerms().get(i), type));
+ sqlQuery.append(")");
}
}else {
String elementIdStr = this.validationLayer.getElementByName(queryCriteria.getElementName()).getElementId();
if (fieldIdStringFlag)
elementIdStr = "'" + elementIdStr + "'";
if (!this.productIdString) {
- sqlQuery = "SELECT DISTINCT product_id FROM " + type.getName() + "_metadata WHERE element_id = " + elementIdStr + " AND ";
+ sqlQuery.append("SELECT DISTINCT product_id FROM " + type.getName() + "_metadata WHERE element_id = " +
+ elementIdStr + " AND ");
} else {
- sqlQuery = "SELECT DISTINCT products.product_id FROM products," + type.getName() + "_metadata"
+ sqlQuery.append("SELECT DISTINCT products.product_id FROM products," + type.getName() + "_metadata"
+ " WHERE products.product_id="+type.getName() + "_metadata.product_id"
- + " AND element_id = " + elementIdStr + " AND ";
+ + " AND element_id = " + elementIdStr + " AND ");
}
if (queryCriteria instanceof TermQueryCriteria) {
- sqlQuery += "metadata_value = '" + ((TermQueryCriteria) queryCriteria).getValue() + "'";
+ sqlQuery.append("metadata_value = '" + ((TermQueryCriteria) queryCriteria).getValue() + "'");
} else if (queryCriteria instanceof RangeQueryCriteria) {
RangeQueryCriteria rqc = (RangeQueryCriteria) queryCriteria;
String rangeSubQuery = null;
@@ -2175,13 +2170,13 @@ public class DataSourceCatalog implements Catalog {
else
rangeSubQuery = "(" + rangeSubQuery + " AND metadata_value" + (rqc.getInclusive() ? " <= " : " < ") + "'" + rqc.getEndValue() + "')";
}
- sqlQuery += rangeSubQuery;
+ sqlQuery.append(rangeSubQuery);
} else {
throw new CatalogException("Invalid QueryCriteria [" + queryCriteria.getClass().getCanonicalName() + "]");
}
}
- return sqlQuery;
+ return sqlQuery.toString();
}
private synchronized void updateReferences(Product product)