1 package org.apache.torque.adapter;
2
3 /* ====================================================================
4 * The Apache Software License, Version 1.1
5 *
6 * Copyright (c) 2001-2003 The Apache Software Foundation. All rights
7 * reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 *
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 *
16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in
18 * the documentation and/or other materials provided with the
19 * distribution.
20 *
21 * 3. The end-user documentation included with the redistribution,
22 * if any, must include the following acknowledgment:
23 * "This product includes software developed by the
24 * Apache Software Foundation (http://www.apache.org/)."
25 * Alternately, this acknowledgment may appear in the software itself,
26 * if and wherever such third-party acknowledgments normally appear.
27 *
28 * 4. The names "Apache" and "Apache Software Foundation" and
29 * "Apache Turbine" must not be used to endorse or promote products
30 * derived from this software without prior written permission. For
31 * written permission, please contact apache@apache.org.
32 *
33 * 5. Products derived from this software may not be called "Apache",
34 * "Apache Turbine", nor may "Apache" appear in their name, without
35 * prior written permission of the Apache Software Foundation.
36 *
37 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
41 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
44 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
47 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48 * SUCH DAMAGE.
49 * ====================================================================
50 *
51 * This software consists of voluntary contributions made by many
52 * individuals on behalf of the Apache Software Foundation. For more
53 * information on the Apache Software Foundation, please see
54 * <http://www.apache.org/>.
55 */
56
57 import java.sql.Connection;
58 import java.sql.SQLException;
59 import java.sql.Statement;
60 import java.text.SimpleDateFormat;
61 import java.util.Date;
62
63 /***
64 * This code should be used for an Oracle database pool.
65 *
66 * @author <a href="mailto:jon@clearink.com">Jon S. Stevens</a>
67 * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
68 * @author <a href="mailto:bschneider@vecna.com">Bill Schneider</a>
69 * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
70 * @version $Id: DBOracle.java,v 1.17 2003/08/21 05:54:57 mpoeschl Exp $
71 */
72 public class DBOracle extends DB
73 {
74 /*** date format used in getDateString() */
75 private static final String DATE_FORMAT = "dd-MM-yyyy HH:mm:ss";
76
77 /***
78 * Empty constructor.
79 */
80 protected DBOracle()
81 {
82 }
83
84 /***
85 * This method is used to ignore case.
86 *
87 * @param in The string to transform to upper case.
88 * @return The upper case string.
89 */
90 public String toUpperCase(String in)
91 {
92 return new StringBuffer("UPPER(").append(in).append(")").toString();
93 }
94
95 /***
96 * This method is used to ignore case.
97 *
98 * @param in The string whose case to ignore.
99 * @return The string in a case that can be ignored.
100 */
101 public String ignoreCase(String in)
102 {
103 return new StringBuffer("UPPER(").append(in).append(")").toString();
104 }
105
106 /***
107 * This method is used to format any date string.
108 *
109 * @param date the Date to format
110 * @return The date formatted String for Oracle.
111 */
112 public String getDateString(Date date)
113 {
114 return "TO_DATE('" + new SimpleDateFormat(DATE_FORMAT).format(date)
115 + "', 'DD-MM-YYYY HH24:MI:SS')";
116 }
117
118 /***
119 * @see org.apache.torque.adapter.DB#getIDMethodType()
120 */
121 public String getIDMethodType()
122 {
123 return SEQUENCE;
124 }
125
126 /***
127 * Returns the next key from a sequence. Uses the following
128 * implementation:
129 *
130 * <blockquote><code><pre>
131 * select sequenceName.nextval from dual
132 * </pre></code></blockquote>
133 *
134 * @param sequenceName The name of the sequence (should be of type
135 * <code>String</code>).
136 * @return SQL to retreive the next database key.
137 * @see org.apache.torque.adapter.DB#getIDMethodSQL(Object)
138 */
139 public String getIDMethodSQL(Object sequenceName)
140 {
141 return ("select " + sequenceName + ".nextval from dual");
142 }
143
144 /***
145 * Locks the specified table.
146 *
147 * @param con The JDBC connection to use.
148 * @param table The name of the table to lock.
149 * @exception SQLException No Statement could be created or executed.
150 */
151 public void lockTable(Connection con, String table) throws SQLException
152 {
153 Statement statement = con.createStatement();
154
155 StringBuffer stmt = new StringBuffer();
156 stmt.append("SELECT next_id FROM ")
157 .append(table)
158 .append(" FOR UPDATE");
159
160 statement.executeQuery(stmt.toString());
161 }
162
163 /***
164 * Unlocks the specified table.
165 *
166 * @param con The JDBC connection to use.
167 * @param table The name of the table to unlock.
168 * @exception SQLException No Statement could be created or executed.
169 */
170 public void unlockTable(Connection con, String table) throws SQLException
171 {
172 // Tables in Oracle are unlocked when a commit is issued. The
173 // user may have issued a commit but do it here to be sure.
174 con.commit();
175 }
176
177 /***
178 * This method is used to check whether the database natively
179 * supports limiting the size of the resultset.
180 *
181 * @return True.
182 */
183 public boolean supportsNativeLimit()
184 {
185 return true;
186 }
187
188 /***
189 * This method is used to check whether the database supports
190 * limiting the size of the resultset.
191 *
192 * @return LIMIT_STYLE_ORACLE.
193 */
194 public int getLimitStyle()
195 {
196 return DB.LIMIT_STYLE_ORACLE;
197 }
198
199 /***
200 * This method is for the SqlExpression.quoteAndEscape rules. The rule is,
201 * any string in a SqlExpression with a BACKSLASH will either be changed to
202 * "//" or left as "\". SapDB does not need the escape character.
203 *
204 * @return false.
205 */
206 public boolean escapeText()
207 {
208 return false;
209 }
210 }
This page was automatically generated by Maven