Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/objectstyle/cayenne/dba/oracle/OracleQualifierTranslator.java


1   /* ====================================================================
2    * 
3    * The ObjectStyle Group Software License, Version 1.0 
4    *
5    * Copyright (c) 2002 The ObjectStyle Group 
6    * and individual authors of the software.  All rights reserved.
7    *
8    * Redistribution and use in source and binary forms, with or without
9    * modification, are permitted provided that the following conditions
10   * are met:
11   *
12   * 1. Redistributions of source code must retain the above copyright
13   *    notice, this list of conditions and the following disclaimer. 
14   *
15   * 2. Redistributions in binary form must reproduce the above copyright
16   *    notice, this list of conditions and the following disclaimer in
17   *    the documentation and/or other materials provided with the
18   *    distribution.
19   *
20   * 3. The end-user documentation included with the redistribution, if
21   *    any, must include the following acknowlegement:  
22   *       "This product includes software developed by the 
23   *        ObjectStyle Group (http://objectstyle.org/)."
24   *    Alternately, this acknowlegement may appear in the software itself,
25   *    if and wherever such third-party acknowlegements normally appear.
26   *
27   * 4. The names "ObjectStyle Group" and "Cayenne" 
28   *    must not be used to endorse or promote products derived
29   *    from this software without prior written permission. For written 
30   *    permission, please contact andrus@objectstyle.org.
31   *
32   * 5. Products derived from this software may not be called "ObjectStyle"
33   *    nor may "ObjectStyle" appear in their names without prior written
34   *    permission of the ObjectStyle Group.
35   *
36   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39   * DISCLAIMED.  IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
40   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47   * SUCH DAMAGE.
48   * ====================================================================
49   *
50   * This software consists of voluntary contributions made by many
51   * individuals on behalf of the ObjectStyle Group.  For more
52   * information on the ObjectStyle Group, please see
53   * <http://objectstyle.org/>.
54   *
55   */
56  
57  package org.objectstyle.cayenne.dba.oracle;
58  
59  import java.sql.Types;
60  
61  import org.objectstyle.cayenne.access.trans.QualifierTranslator;
62  import org.objectstyle.cayenne.map.DbAttribute;
63  import org.objectstyle.cayenne.map.DbRelationship;
64  
65  /** 
66   * Sequence-based primary key generator implementation for Oracle. 
67   * Uses Oracle sequences to generate primary key values. This approach is 
68   * at least 50% faster when tested with Oracle compared to the lookup table
69   * approach.
70   * 
71   * <p>When using Cayenne key caching mechanism, make sure that sequences in 
72   * the database have "INCREMENT BY" greater or equal to OraclePkGenerator 
73   * "pkCacheSize" property value. If this is not the case, you will need to
74   * adjust PkGenerator value accordingly. For example when sequence is
75   * incremented by 1 each time, use the following code:</p>
76   * 
77   * <pre>
78   * dataNode.getAdapter().getPkGenerator().setPkCacheSize(1);
79   * </pre>
80   * 
81   * @author Andrei Adamchik
82   */
83  public class OracleQualifierTranslator extends QualifierTranslator {
84  
85      /**
86       * Adds special handling of CHAR columns.
87       */
88      protected void processColumn(StringBuffer buf, DbAttribute dbAttr) {
89          if (dbAttr.getType() == Types.CHAR) {
90            //CTM 7/11/2002 
91            //TRIM(TRAILING FROM is only available in Oracle 8i and above.  RTRIM is available in older versions as well
92              //buf.append("TRIM(TRAILING FROM ");
93              buf.append("RTRIM(");
94              super.processColumn(buf, dbAttr);
95              buf.append(')');
96          } else {
97              super.processColumn(buf, dbAttr);
98          }
99      }
100 
101     /**
102      * Adds special handling of CHAR columns.
103      * 
104      * @see org.objectstyle.cayenne.access.trans.QueryAssemblerHelper#processColumn(StringBuffer, DbAttribute, DbRelationship)
105      */
106     protected void processColumn(
107         StringBuffer buf,
108         DbAttribute dbAttr,
109         DbRelationship rel) {
110         if (dbAttr.getType() == Types.CHAR) {
111            //CTM 7/11/2002 
112           //TRIM(TRAILING FROM is only available in Oracle 8i and above.  RTRIM is available in older versions as well
113             //buf.append("TRIM(TRAILING FROM ");
114             buf.append("RTRIM(");
115             super.processColumn(buf, dbAttr, rel);
116             buf.append(')');
117         } else {
118             super.processColumn(buf, dbAttr, rel);
119         }
120     }
121 }