1 package org.apache.torque.adapter;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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
173
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 }