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 }