You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by br...@apache.org on 2006/01/27 21:44:13 UTC
svn commit: r372977 - in
/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker:
accesslayer/sql/ metadata/ platforms/ util/
Author: brj
Date: Fri Jan 27 12:43:52 2006
New Revision: 372977
URL: http://svn.apache.org/viewcvs?rev=372977&view=rev
Log:
refactoring to support quoted identifiers
backport from ojb 1.x
Added:
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/AbstractSqlStatement.java
Modified:
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlDeleteByPkStatement.java
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlDeleteByQuery.java
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlExistStatement.java
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlGeneratorDefaultImpl.java
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlInsertStatement.java
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlPkStatement.java
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlQueryStatement.java
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlSelectStatement.java
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlUpdateStatement.java
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/JdbcTypesHelper.java
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/Platform.java
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformDefaultImpl.java
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformMsAccessImpl.java
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformMsSQLServerImpl.java
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformMySQLImpl.java
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/util/BrokerHelper.java
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/util/SqlHelper.java
Added: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/AbstractSqlStatement.java
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/AbstractSqlStatement.java?rev=372977&view=auto
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/AbstractSqlStatement.java (added)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/AbstractSqlStatement.java Fri Jan 27 12:43:52 2006
@@ -0,0 +1,137 @@
+package org.apache.ojb.broker.accesslayer.sql;
+
+/* Copyright 2002-2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.ojb.broker.metadata.ClassDescriptor;
+import org.apache.ojb.broker.metadata.FieldDescriptor;
+import org.apache.ojb.broker.platforms.Platform;
+import org.apache.ojb.broker.util.logging.Logger;
+
+/**
+ * Abstract class for SqlStatement.
+ * This class provides functions for adding quoted table and column names.
+ *
+ * @author <a href="mailto:jbraeuchi@gmx.ch">Jakob Braeuchi</a>
+ * @version $Id: AbstractSqlStatement.java 365161 2005-11-25 21:42:45Z brj $
+ */
+public abstract class AbstractSqlStatement implements SqlStatement
+{
+ private Logger m_logger;
+ private Platform m_platform;
+ private String m_sqlString;
+
+ /**
+ * @param logger
+ * @param platform
+ */
+ public AbstractSqlStatement(Platform platform, Logger logger)
+ {
+ super();
+ m_logger = logger;
+ m_platform = platform;
+ }
+
+ /**
+ * @return Returns the logger.
+ */
+ protected Logger getLogger()
+ {
+ return m_logger;
+ }
+
+ /**
+ * @param logger The logger to set.
+ */
+ protected void setLogger(Logger logger)
+ {
+ m_logger = logger;
+ }
+
+ /**
+ * @return Returns the platform.
+ */
+ protected Platform getPlatform()
+ {
+ return m_platform;
+ }
+
+ /**
+ * Append table name. Quote if necessary.
+ */
+ protected void appendTable(ClassDescriptor cld, StringBuffer buf)
+ {
+ buf.append(m_platform.quoteName(cld.getFullTableName()));
+ }
+
+ /**
+ * Append a column name. Quote if necessary.
+ * @param buf
+ */
+ protected void appendTable(String aTable, StringBuffer buf)
+ {
+ buf.append(m_platform.quoteName(aTable));
+ }
+
+ /**
+ * Append column name. Quote if necessary.
+ */
+ protected void appendField(FieldDescriptor fld, StringBuffer buf)
+ {
+ buf.append(m_platform.quoteName(fld.getColumnName()));
+ }
+
+ /**
+ * Append a Column.
+ * @param aColumn
+ * @param buf
+ */
+ protected void appendColumn(String aColumn, StringBuffer buf)
+ {
+ buf.append(m_platform.quoteName(aColumn));
+ }
+
+ /**
+ * Build the SQL-String.
+ * @return the SQL-String
+ */
+ protected abstract String buildSqlString();
+
+ /**
+ * @see SqlStatement#getStatement()
+ */
+ public String getStatement()
+ {
+ if (m_sqlString == null)
+ {
+ m_sqlString = buildSqlString();
+ }
+
+ return m_sqlString;
+ }
+
+ /**
+ * Append a Column with alias: A0 name -> A0.name
+ * @param tableOrAlias A0
+ * @param aColumn name
+ * @param buf
+ */
+ protected void appendColumn(String tableOrAlias, String aColumn, StringBuffer buf)
+ {
+ appendTable(tableOrAlias, buf);
+ buf.append(".");
+ appendColumn(aColumn, buf);
+ }
+}
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlDeleteByPkStatement.java
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlDeleteByPkStatement.java?rev=372977&r1=372976&r2=372977&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlDeleteByPkStatement.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlDeleteByPkStatement.java Fri Jan 27 12:43:52 2006
@@ -16,6 +16,7 @@
*/
import org.apache.ojb.broker.metadata.ClassDescriptor;
+import org.apache.ojb.broker.platforms.Platform;
import org.apache.ojb.broker.util.logging.Logger;
/**
@@ -26,34 +27,30 @@
*/
public class SqlDeleteByPkStatement extends SqlPkStatement
{
- private String sql;
-
/**
* Constructor for SqlDeleteByPkStatement.
*
* @param cld
* @param logger
*/
- public SqlDeleteByPkStatement(ClassDescriptor cld, Logger logger)
+ public SqlDeleteByPkStatement(Platform aPlatform, Logger aLogger, ClassDescriptor aCld)
{
- super(cld, logger);
+ super(aPlatform, aLogger, aCld);
}
- /** @see SqlStatement#getStatement() */
- public String getStatement()
+ /**
+ * @see org.apache.ojb.broker.accesslayer.sql.AbstractSqlStatement#buildSqlString()
+ */
+ protected String buildSqlString()
{
- if(sql == null)
- {
- StringBuffer stmt = new StringBuffer(1024);
- ClassDescriptor cld = getClassDescriptor();
+ StringBuffer stmt = new StringBuffer(1024);
+ ClassDescriptor cld = getClassDescriptor();
- stmt.append("DELETE FROM ");
- appendTable(cld, stmt);
- appendWhereClause(cld, true, stmt); //use Locking
+ stmt.append("DELETE FROM ");
+ appendTable(cld, stmt);
+ appendWhereClause(cld, true, stmt); //use Locking
- sql = stmt.toString();
- }
- return sql;
+ return stmt.toString();
}
}
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlDeleteByQuery.java
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlDeleteByQuery.java?rev=372977&r1=372976&r2=372977&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlDeleteByQuery.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlDeleteByQuery.java Fri Jan 27 12:43:52 2006
@@ -40,9 +40,9 @@
}
/**
- * @see org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement#buildStatement()
+ * @see org.apache.ojb.broker.accesslayer.sql.AbstractSqlStatement#buildSqlString()
*/
- protected String buildStatement()
+ protected String buildSqlString()
{
StringBuffer stmt = new StringBuffer();
StringBuffer where = new StringBuffer();
@@ -50,7 +50,7 @@
Criteria crit = this.getQuery().getCriteria();
stmt.append("DELETE FROM ");
- stmt.append(getSearchClassDescriptor().getFullTableName());
+ appendTable(getSearchClassDescriptor(), stmt);
appendWhereClause(where, crit, stmt);
return stmt.toString();
@@ -66,7 +66,6 @@
protected void appendColumn(TableAlias anAlias, String aColumn, StringBuffer buf)
{
// BRJ : No alias for delete
- buf.append(aColumn);
+ appendColumn(aColumn, buf);
}
-
}
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlExistStatement.java
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlExistStatement.java?rev=372977&r1=372976&r2=372977&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlExistStatement.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlExistStatement.java Fri Jan 27 12:43:52 2006
@@ -18,6 +18,7 @@
import org.apache.ojb.broker.OJBRuntimeException;
import org.apache.ojb.broker.metadata.ClassDescriptor;
import org.apache.ojb.broker.metadata.FieldDescriptor;
+import org.apache.ojb.broker.platforms.Platform;
import org.apache.ojb.broker.util.logging.Logger;
/**
@@ -32,36 +33,30 @@
private static final String SELECT = "SELECT ";
private static final String FROM = " FROM ";
- private String sql;
-
- public SqlExistStatement(ClassDescriptor aCld, Logger aLogger)
+ public SqlExistStatement(Platform aPlatform, Logger aLogger, ClassDescriptor aCld)
{
- super(aCld, aLogger);
+ super(aPlatform, aLogger, aCld);
}
/** Return SELECT clause for object existence call */
- public String getStatement()
+ protected String buildSqlString()
{
- if(sql == null)
+ StringBuffer stmt = new StringBuffer(128);
+ ClassDescriptor cld = getClassDescriptor();
+
+ FieldDescriptor[] fieldDescriptors = cld.getPkFields();
+ if (fieldDescriptors == null || fieldDescriptors.length == 0)
{
- StringBuffer stmt = new StringBuffer(128);
- ClassDescriptor cld = getClassDescriptor();
+ throw new OJBRuntimeException("No PK fields defined in metadata for " + cld.getClassNameOfObject());
+ }
+ FieldDescriptor field = fieldDescriptors[0];
- FieldDescriptor[] fieldDescriptors = cld.getPkFields();
- if(fieldDescriptors == null || fieldDescriptors.length == 0)
- {
- throw new OJBRuntimeException("No PK fields defined in metadata for " + cld.getClassNameOfObject());
- }
- FieldDescriptor field = fieldDescriptors[0];
-
- stmt.append(SELECT);
- stmt.append(field.getColumnName());
- stmt.append(FROM);
- stmt.append(cld.getFullTableName());
- appendWhereClause(cld, false, stmt);
+ stmt.append(SELECT);
+ appendField(field, stmt);
+ stmt.append(FROM);
+ appendTable(cld, stmt);
+ appendWhereClause(cld, false, stmt);
- sql = stmt.toString();
- }
- return sql;
+ return stmt.toString();
}
}
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlGeneratorDefaultImpl.java
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlGeneratorDefaultImpl.java?rev=372977&r1=372976&r2=372977&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlGeneratorDefaultImpl.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlGeneratorDefaultImpl.java Fri Jan 27 12:43:52 2006
@@ -35,7 +35,7 @@
import org.apache.ojb.broker.util.logging.Logger;
import org.apache.ojb.broker.util.logging.LoggerFactory;
-/**
+/**
* This Class is responsible for building sql statements
* Objects fields and their repective values are accessed by Java reflection
*
@@ -47,7 +47,7 @@
public class SqlGeneratorDefaultImpl implements SqlGenerator
{
private Logger logger = LoggerFactory.getLogger(SqlGeneratorDefaultImpl.class);
- private Platform m_platform;
+ private Platform platform;
/*
arminw:
TODO: In ClassDescriptor we need support for "field change event" listener if we allow
@@ -64,7 +64,7 @@
public SqlGeneratorDefaultImpl(Platform platform)
{
- this.m_platform = platform;
+ this.platform = platform;
}
/**
@@ -82,7 +82,7 @@
if(pd == null)
{
- sql = new SqlDeleteByPkStatement(cld, logger);
+ sql = new SqlDeleteByPkStatement(platform, logger, cld);
}
else
{
@@ -116,7 +116,7 @@
if(pd == null)
{
- sql = new SqlInsertStatement(cld, logger);
+ sql = new SqlInsertStatement(platform, logger, cld);
}
else
{
@@ -145,7 +145,7 @@
sql = sfc.getSelectByPKSql();
if(sql == null)
{
- sql = new SqlSelectByPkStatement(m_platform, cld, logger);
+ sql = new SqlSelectByPkStatement(platform, cld, logger);
// set the sql string
sfc.setSelectByPKSql(sql);
@@ -166,7 +166,7 @@
if(sql == null)
{
// TODO: Should we support a procedure call for this too??
- sql = new SqlExistStatement(cld, logger);
+ sql = new SqlExistStatement(platform, logger, cld);
// set the sql string
sfc.setSelectExists(sql);
if(logger.isDebugEnabled())
@@ -185,7 +185,7 @@
*/
public SelectStatement getPreparedSelectStatement(Query query, ClassDescriptor cld)
{
- SelectStatement sql = new SqlSelectStatement(m_platform, cld, query, logger);
+ SelectStatement sql = new SqlSelectStatement(platform, cld, query, logger);
if (logger.isDebugEnabled())
{
logger.debug("SQL:" + sql.getStatement());
@@ -208,7 +208,7 @@
if(pd == null)
{
- result = new SqlUpdateStatement(cld, logger);
+ result = new SqlUpdateStatement(platform, logger, cld);
}
else
{
@@ -556,7 +556,7 @@
*/
public SqlStatement getPreparedDeleteStatement(Query query, ClassDescriptor cld)
{
- return new SqlDeleteByQuery(m_platform, cld, query, logger);
+ return new SqlDeleteByQuery(platform, cld, query, logger);
}
/* (non-Javadoc)
@@ -564,7 +564,7 @@
*/
public Platform getPlatform()
{
- return m_platform;
+ return platform;
}
/**
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlInsertStatement.java
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlInsertStatement.java?rev=372977&r1=372976&r2=372977&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlInsertStatement.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlInsertStatement.java Fri Jan 27 12:43:52 2006
@@ -20,6 +20,7 @@
import org.apache.ojb.broker.metadata.ClassDescriptor;
import org.apache.ojb.broker.metadata.FieldDescriptor;
+import org.apache.ojb.broker.platforms.Platform;
import org.apache.ojb.broker.util.logging.Logger;
/**
@@ -30,37 +31,33 @@
*/
public class SqlInsertStatement extends SqlPkStatement
{
- private String sql;
-
/**
* Constructor for SqlInsertStatement.
*
* @param cld
* @param logger
*/
- public SqlInsertStatement(ClassDescriptor cld, Logger logger)
+ public SqlInsertStatement(Platform aPlatform, Logger aLogger, ClassDescriptor aCld)
{
- super(cld, logger);
+ super(aPlatform, aLogger, aCld);
}
- /** @see SqlStatement#getStatement() */
- public String getStatement()
+ /**
+ * @see org.apache.ojb.broker.accesslayer.sql.AbstractSqlStatement#buildSqlString()
+ */
+ protected String buildSqlString()
{
- if(sql == null)
- {
- StringBuffer stmt = new StringBuffer(1024);
- ClassDescriptor cld = getClassDescriptor();
+ StringBuffer stmt = new StringBuffer(1024);
+ ClassDescriptor cld = getClassDescriptor();
+
+ stmt.append("INSERT INTO ");
+ appendTable(cld, stmt);
+ stmt.append(" (");
+ appendListOfColumns(cld, stmt);
+ stmt.append(")");
+ appendListOfValues(cld, stmt);
- stmt.append("INSERT INTO ");
- appendTable(cld, stmt);
- stmt.append(" (");
- appendListOfColumns(cld, stmt);
- stmt.append(")");
- appendListOfValues(cld, stmt);
-
- sql = stmt.toString();
- }
- return sql;
+ return stmt.toString();
}
private List appendListOfColumns(ClassDescriptor cld, StringBuffer buf)
@@ -69,13 +66,13 @@
ArrayList columnList = new ArrayList();
- for(int i = 0; i < fields.length; i++)
+ for (int i = 0; i < fields.length; i++)
{
- if(i > 0)
+ if (i > 0)
{
buf.append(",");
}
- buf.append(fields[i].getColumnName());
+ appendField(fields[i], buf);
columnList.add(fields[i].getAttributeName());
}
return columnList;
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlPkStatement.java
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlPkStatement.java?rev=372977&r1=372976&r2=372977&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlPkStatement.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlPkStatement.java Fri Jan 27 12:43:52 2006
@@ -21,42 +21,25 @@
import org.apache.ojb.broker.PersistenceBrokerException;
import org.apache.ojb.broker.metadata.ClassDescriptor;
import org.apache.ojb.broker.metadata.FieldDescriptor;
+import org.apache.ojb.broker.platforms.Platform;
import org.apache.ojb.broker.util.logging.Logger;
/**
* Model simple Statements based on ClassDescriptor and/or PrimaryKey
*
- * @author <a href="mailto:jbraeuchi@hotmail.com">Jakob Braeuchi</a>
+ * @author <a href="mailto:jbraeuchi@gmx.ch">Jakob Braeuchi</a>
* @version $Id$
*/
-public abstract class SqlPkStatement implements SqlStatement
+public abstract class SqlPkStatement extends AbstractSqlStatement implements SqlStatement
{
// arminw: Use weak reference to allow GC of removed metadata instances
private WeakReference m_classDescriptor;
- private Logger m_logger;
/** Constructor for SqlPkStatement. */
- public SqlPkStatement(ClassDescriptor aCld, Logger aLogger)
+ public SqlPkStatement(Platform aPlatform,Logger aLogger, ClassDescriptor aCld)
{
- super();
+ super(aPlatform, aLogger);
m_classDescriptor = new WeakReference(aCld);
- m_logger = aLogger;
- }
-
- /** append table name */
- protected void appendTable(ClassDescriptor cld, StringBuffer stmt)
- {
- stmt.append(cld.getFullTableName());
- }
-
- /**
- * Returns the logger.
- *
- * @return Logger
- */
- protected Logger getLogger()
- {
- return m_logger;
}
/**
@@ -83,13 +66,13 @@
{
stmt.append(" WHERE ");
- for(int i = 0; i < fields.length; i++)
+ for (int i = 0; i < fields.length; i++)
{
- FieldDescriptor fmd = fields[i];
+ FieldDescriptor fld = fields[i];
- stmt.append(fmd.getColumnName());
+ appendField(fld, stmt);
stmt.append(" = ? ");
- if(i < fields.length - 1)
+ if (i < fields.length - 1)
{
stmt.append(" AND ");
}
@@ -123,5 +106,4 @@
appendWhereClause(fields, stmt);
}
-
}
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlQueryStatement.java
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlQueryStatement.java?rev=372977&r1=372976&r2=372977&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlQueryStatement.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlQueryStatement.java Fri Jan 27 12:43:52 2006
@@ -58,15 +58,12 @@
* @author <a href="mailto:jbraeuchi@gmx.ch">Jakob Braeuchi</a>
* @version $Id$
*/
-public abstract class SqlQueryStatement implements SqlStatement, JoinSyntaxTypes
+public abstract class SqlQueryStatement extends AbstractSqlStatement implements SqlStatement, JoinSyntaxTypes
{
private static final String ALIAS_SEPARATOR = ".";
private static final String M_N_ALIAS = "M_N";
- private String sql;
private SqlQueryStatement m_parentStatement;
- /** the logger */
- private Logger m_logger;
/** the target table of the query */
private TableAlias m_root;
/** the search table of the query */
@@ -80,7 +77,6 @@
/** maps trees of joins to criteria */
private HashMap m_joinTreeToCriteria = new HashMap();
- private Platform m_platform;
private ClassDescriptor m_baseCld;
private ClassDescriptor m_searchCld;
@@ -111,10 +107,10 @@
*/
public SqlQueryStatement(SqlQueryStatement parent, Platform pf, ClassDescriptor cld, Query query, Logger logger)
{
- m_logger = logger != null ? logger : LoggerFactory.getLogger(SqlQueryStatement.class);
+ super(pf, logger);
+
m_parentStatement = parent;
m_query = (QueryByCriteria) query;
- m_platform = pf;
m_searchCld = cld;
if ((m_query == null) || (m_query.getBaseClass() == m_query.getSearchClass()))
@@ -332,7 +328,7 @@
colName = fld.getColumnName();
}
- appendColumn(tableAlias, colName, buf);
+ appendColumn(tableAlias, colName, buf);
}
/**
@@ -343,9 +339,7 @@
*/
protected void appendColumn(TableAlias anAlias, String aColumn, StringBuffer buf)
{
- buf.append(anAlias.alias);
- buf.append(".");
- buf.append(aColumn);
+ appendColumn(anAlias.alias, aColumn, buf);
}
/**
@@ -880,7 +874,7 @@
buf.append(c.getClause());
appendParameter(c.getValue(), buf);
- buf.append(m_platform.getEscapeClause(c));
+ buf.append(getPlatform().getEscapeClause(c));
}
/**
@@ -1041,7 +1035,7 @@
}
else
{
- sql = new SqlSelectStatement(this, m_platform, cld, subQuery, m_logger).getStatement();
+ sql = new SqlSelectStatement(this, getPlatform(), cld, subQuery, getLogger()).getStatement();
}
return sql;
@@ -1219,7 +1213,7 @@
prev = curr;
}
- m_logger.debug("Result of getTableAlias(): " + curr);
+ getLogger().debug("Result of getTableAlias(): " + curr);
return curr;
}
@@ -1396,7 +1390,7 @@
String aliasName = String.valueOf(getAliasChar()) + m_aliasCount++; // + m_pathToAlias.size();
alias = new TableAlias(table, aliasName);
setTableAliasForPath(path, null, alias);
- m_logger.debug("createTableAlias2: path: " + path + " tableAlias: " + alias);
+ getLogger().debug("createTableAlias2: path: " + path + " tableAlias: " + alias);
return alias;
}
@@ -1909,33 +1903,8 @@
*/
protected byte getJoinSyntaxType()
{
- return m_platform.getJoinSyntaxType();
- }
-
- /**
- * Returns the logger.
- * @return Logger
- */
- protected Logger getLogger()
- {
- return m_logger;
- }
-
- public String getStatement()
- {
- if(sql == null)
- {
- sql = buildStatement();
- }
- return sql;
+ return getPlatform().getJoinSyntaxType();
}
-
- /**
- * Build the SQL String.
- * @return SQL String
- */
- protected abstract String buildStatement();
-
//-----------------------------------------------------------------
// ------------------- Inner classes ------------------------------
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlSelectStatement.java
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlSelectStatement.java?rev=372977&r1=372976&r2=372977&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlSelectStatement.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlSelectStatement.java Fri Jan 27 12:43:52 2006
@@ -74,19 +74,6 @@
}
/**
- * Append a Column with alias: A0 name -> A0.name
- * @param anAlias the TableAlias
- * @param field
- * @param buf
- */
- protected void appendColumn(TableAlias anAlias, FieldDescriptor field, StringBuffer buf)
- {
- buf.append(anAlias.alias);
- buf.append(".");
- buf.append(field.getColumnName());
- }
-
- /**
* Appends to the statement a comma separated list of column names.
*
* DO NOT use this if order of columns is important. The row readers build reflectively and look up
@@ -114,7 +101,7 @@
{
buf.append(",");
}
- appendColumn(alias, field, buf);
+ appendColumn(alias, field.getColumnName(), buf);
columnList.add(field.getAttributeName());
}
@@ -172,7 +159,7 @@
{
buf.append(" AND ");
}
- appendColumn(alias, field, buf);
+ appendColumn(alias, field.getColumnName(), buf);
buf.append(" IS NOT NULL");
}
buf.append(" THEN '").append(subCld.getClassNameOfObject()).append("'");
@@ -265,9 +252,9 @@
}
/**
- * @see org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement#buildStatement()
+ * @see org.apache.ojb.broker.accesslayer.sql.AbstractSqlStatement#buildSqlString()
*/
- protected String buildStatement()
+ protected String buildSqlString()
{
StringBuffer stmt = new StringBuffer(1024);
Query query = getQuery();
@@ -435,26 +422,8 @@
{
buf.append(",");
}
- buf.append(cldSuper.getFullTableName());
- buf.append(".");
- buf.append(field.getColumnName());
+ appendColumn(cldSuper.getFullTableName(), field.getColumnName(), buf);
}
- }
-
- /**
- * Append table name. Quote if necessary.
- */
- protected void appendTable(ClassDescriptor cld, StringBuffer buf)
- {
- buf.append(cld.getFullTableName());
- }
-
- /**
- * Append column name. Quote if necessary.
- */
- protected void appendField(FieldDescriptor fld, StringBuffer buf)
- {
- buf.append(fld.getColumnName());
}
public Query getQueryInstance()
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlUpdateStatement.java
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlUpdateStatement.java?rev=372977&r1=372976&r2=372977&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlUpdateStatement.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/accesslayer/sql/SqlUpdateStatement.java Fri Jan 27 12:43:52 2006
@@ -17,6 +17,7 @@
import org.apache.ojb.broker.metadata.ClassDescriptor;
import org.apache.ojb.broker.metadata.FieldDescriptor;
+import org.apache.ojb.broker.platforms.Platform;
import org.apache.ojb.broker.util.logging.Logger;
/**
@@ -27,25 +28,19 @@
*/
public class SqlUpdateStatement extends SqlPkStatement
{
- protected String sql;
-
/**
* Constructor for SqlUpdateStatement.
- *
- * @param cld
- * @param logger
*/
- public SqlUpdateStatement(ClassDescriptor cld, Logger logger)
+ public SqlUpdateStatement(Platform aPlatform, Logger aLogger, ClassDescriptor aCld)
{
- super(cld, logger);
+ super(aPlatform, aLogger, aCld);
}
/**
* generates a SET-phrase for a prepared update statement.
- *
- * @param stmt the StringBuffer
+ * @param buf the StringBuffer
*/
- private void appendSetClause(ClassDescriptor cld, StringBuffer stmt)
+ private void appendSetClause(ClassDescriptor cld, StringBuffer buf)
{
FieldDescriptor[] fields = cld.getNonPkRwFields();
@@ -54,36 +49,31 @@
return;
}
- stmt.append(" SET ");
+ buf.append(" SET ");
for(int i = 0; i < fields.length; i++)
{
- stmt.append(fields[i].getColumnName());
- stmt.append("=?");
+ appendColumn(fields[i].getColumnName(), buf);
+ buf.append("=?");
if(i < fields.length - 1)
{
- stmt.append(",");
+ buf.append(",");
}
}
}
/**
- * @see SqlStatement#getStatement()
+ * @see org.apache.ojb.broker.accesslayer.sql.AbstractSqlStatement#buildSqlString()
*/
- public String getStatement()
+ protected String buildSqlString()
{
- if(sql == null)
- {
- StringBuffer stmt = new StringBuffer(1024);
- ClassDescriptor cld = getClassDescriptor();
+ StringBuffer stmt = new StringBuffer(1024);
+ ClassDescriptor cld = getClassDescriptor();
- stmt.append("UPDATE ");
- appendTable(cld, stmt);
- appendSetClause(cld, stmt);
- appendWhereClause(cld, true, stmt); //use Locking
+ stmt.append("UPDATE ");
+ appendTable(cld, stmt);
+ appendSetClause(cld, stmt);
+ appendWhereClause(cld, true, stmt); //use Locking
- sql = stmt.toString();
- }
- return sql;
+ return stmt.toString();
}
-
}
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/JdbcTypesHelper.java
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/JdbcTypesHelper.java?rev=372977&r1=372976&r2=372977&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/JdbcTypesHelper.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/JdbcTypesHelper.java Fri Jan 27 12:43:52 2006
@@ -38,6 +38,7 @@
import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.ojb.broker.OJBRuntimeException;
+import org.apache.ojb.broker.util.SqlHelper;
import org.apache.ojb.broker.util.sequence.SequenceManagerException;
/**
@@ -315,8 +316,6 @@
{
if (stmt != null)
{
-// return columnIndex == MIN_INT
-// ? readValueFromStatement(stmt, columnName) : readValueFromStatement(stmt, columnIndex);
if (columnIndex == MIN_INT)
{
throw new UnsupportedOperationException("Not implemented yet");
@@ -328,9 +327,10 @@
}
else
{
- return columnIndex == MIN_INT
- ? readValueFromResultSet(rs, columnName) : readValueFromResultSet(rs, columnIndex);
- }
+ return columnIndex == MIN_INT ?
+ readValueFromResultSet(rs, SqlHelper.stripOjbQuotes(columnName))
+ : readValueFromResultSet(rs, columnIndex);
+ }
}
public String toString()
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/Platform.java
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/Platform.java?rev=372977&r1=372976&r2=372977&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/Platform.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/Platform.java Fri Jan 27 12:43:52 2006
@@ -37,7 +37,6 @@
*/
public interface Platform
{
-
/**
* Called after a statement has been created.
*/
@@ -264,5 +263,12 @@
*/
void registerOutResultSet(CallableStatement stmt, int position)
throws SQLException;
+
+ /**
+ * Answer the quoted name ie. "table" or [table] etc.
+ * <b> not yet supported </b>
+ * @param aString
+ */
+ public String quoteName(String aString);
}
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformDefaultImpl.java
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformDefaultImpl.java?rev=372977&r1=372976&r2=372977&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformDefaultImpl.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformDefaultImpl.java Fri Jan 27 12:43:52 2006
@@ -30,6 +30,7 @@
import org.apache.ojb.broker.accesslayer.JoinSyntaxTypes;
import org.apache.ojb.broker.metadata.JdbcConnectionDescriptor;
import org.apache.ojb.broker.query.LikeCriteria;
+import org.apache.ojb.broker.util.SqlHelper;
import org.apache.ojb.broker.util.logging.Logger;
import org.apache.ojb.broker.util.logging.LoggerFactory;
@@ -448,4 +449,20 @@
{
stmt.registerOutParameter(position, Types.OTHER);
}
+
+ /**
+ * @see org.apache.ojb.broker.platforms.Platform#quoteName(java.lang.String)
+ */
+ public String quoteName(String aString)
+ {
+ return SqlHelper.stripOjbQuotes(aString);
+ }
+
+ /**
+ * @return a quoted name. ie "name" or [name]
+ */
+ protected String getQuotedName(String aString)
+ {
+ return '"' + aString + '"';
+ }
}
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformMsAccessImpl.java
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformMsAccessImpl.java?rev=372977&r1=372976&r2=372977&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformMsAccessImpl.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformMsAccessImpl.java Fri Jan 27 12:43:52 2006
@@ -124,4 +124,12 @@
// TODO: implement ms-access escaping
return "";
}
+
+ /**
+ * @see org.apache.ojb.broker.platforms.PlatformDefaultImpl#getQuotedName(java.lang.String)
+ */
+ protected String getQuotedName(String aString)
+ {
+ return '[' + aString + ']';
+ }
}
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformMsSQLServerImpl.java
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformMsSQLServerImpl.java?rev=372977&r1=372976&r2=372977&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformMsSQLServerImpl.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformMsSQLServerImpl.java Fri Jan 27 12:43:52 2006
@@ -80,4 +80,11 @@
return "+";
}
+ /**
+ * @see org.apache.ojb.broker.platforms.PlatformDefaultImpl#getQuotedName(java.lang.String)
+ */
+ protected String getQuotedName(String aString)
+ {
+ return '[' + aString + ']';
+ }
}
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformMySQLImpl.java
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformMySQLImpl.java?rev=372977&r1=372976&r2=372977&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformMySQLImpl.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/platforms/PlatformMySQLImpl.java Fri Jan 27 12:43:52 2006
@@ -162,5 +162,13 @@
{
return "";
}
- }
+ }
+
+ /**
+ * @see org.apache.ojb.broker.platforms.PlatformDefaultImpl#getQuotedName(java.lang.String)
+ */
+ protected String getQuotedName(String aString)
+ {
+ return '`' + aString + '`';
+ }
}
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/util/BrokerHelper.java
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/util/BrokerHelper.java?rev=372977&r1=372976&r2=372977&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/util/BrokerHelper.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/util/BrokerHelper.java Fri Jan 27 12:43:52 2006
@@ -710,11 +710,11 @@
*/
public boolean doesExist(ClassDescriptor cld, Identity oid, Object obj)
{
- boolean result = false;
+ boolean result = false;
String sql = (String) sqlSelectMap.get(cld);
if(sql == null)
{
- sql = new SqlExistStatement(cld, LoggerFactory.getDefaultLogger()).getStatement();
+ sql = new SqlExistStatement(getPlatform(), LoggerFactory.getDefaultLogger(), cld).getStatement();
sqlSelectMap.put(cld, sql);
}
ValueContainer[] pkValues;
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/util/SqlHelper.java
URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/util/SqlHelper.java?rev=372977&r1=372976&r2=372977&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/util/SqlHelper.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/util/SqlHelper.java Fri Jan 27 12:43:52 2006
@@ -18,7 +18,6 @@
import java.sql.SQLException;
import java.util.StringTokenizer;
-import org.apache.commons.lang.StringUtils;
import org.apache.ojb.broker.PersistenceBrokerException;
import org.apache.ojb.broker.accesslayer.ResultSetAndStatement;
@@ -39,6 +38,9 @@
/** define the name of the pseudo column holding the class to be instantiated. */
public static final String OJB_CLASS_COLUMN = "OJB_CLAZZ";
+ private static final char OJB_QUOTE_BEGIN_CHAR = '\'';
+ private static final char OJB_QUOTE_END_CHAR = '\'';
+
/**
* Answer a StringTokenizer for anAttribute.
* @param anAttribute the attribute to tokenize
@@ -46,7 +48,6 @@
*/
public static StringTokenizer tokenizeAttribute(String anAttribute)
{
-
return new StringTokenizer(anAttribute, DELIMITERS, true);
}
@@ -110,6 +111,34 @@
{
throw new PersistenceBrokerException("Cannot access " + OJB_CLASS_COLUMN, e);
}
+ }
+ return result;
+ }
+
+ /**
+ * answer true if the string starts with OJB_QUOTE_BEGIN_CHAR
+ * and ends with the OJB_QUOTE_END_CHAR
+ * @param aString
+ */
+ private static boolean isQuoted(String aString)
+ {
+ return aString != null &&
+ aString.charAt(0) == OJB_QUOTE_BEGIN_CHAR &&
+ aString.charAt(aString.length() - 1) == OJB_QUOTE_END_CHAR;
+ }
+
+ /**
+ * Remove the OJB-Quotes from the String.
+ * @param aString
+ * @return String without OJB-Quotes
+ */
+ public static String stripOjbQuotes(String aString)
+ {
+ String result = aString;
+
+ if (isQuoted(aString))
+ {
+ result = aString.substring(1, aString.length() - 1);
}
return result;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org