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