1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.ojb.broker.platforms;
17
18 import java.io.ByteArrayInputStream;
19 import java.io.InputStreamReader;
20 import java.io.Reader;
21 import java.io.StringReader;
22 import java.sql.CallableStatement;
23 import java.sql.Connection;
24 import java.sql.PreparedStatement;
25 import java.sql.SQLException;
26 import java.sql.Types;
27
28 import org.apache.ojb.broker.query.LikeCriteria;
29
30
31
32
33 public class PlatformMySQLImpl extends PlatformDefaultImpl
34 {
35 private static final String LAST_INSERT = "SELECT LAST_INSERT_ID() FROM ";
36 private static final String LIMIT = " LIMIT 1";
37
38
39
40
41 public void setObjectForStatement(PreparedStatement ps, int index, Object value, int sqlType) throws SQLException
42 {
43 switch (sqlType)
44 {
45 case Types.BIT :
46 ps.setObject(index, value);
47 break;
48
49 case Types.BLOB :
50 case Types.LONGVARBINARY :
51 case Types.VARBINARY :
52 if (value instanceof byte[])
53 {
54 byte buf[] = (byte[]) value;
55 ByteArrayInputStream inputStream = new ByteArrayInputStream(buf);
56 ps.setBinaryStream(index, inputStream, buf.length);
57
58 break;
59 }
60
61 case Types.CLOB :
62 Reader reader = null;
63 int length = 0;
64
65 if (value instanceof String)
66 {
67 reader = new StringReader((String) value);
68 length = (((String) value)).length();
69 }
70 else if (value instanceof char[])
71 {
72 String string = new String((char[])value);
73 reader = new StringReader(string);
74 length = string.length();
75 }
76 else if (value instanceof byte[])
77 {
78 byte buf[] = (byte[]) value;
79 ByteArrayInputStream inputStream = new ByteArrayInputStream(buf);
80 reader = new InputStreamReader(inputStream);
81 }
82
83 ps.setCharacterStream(index, reader, length);
84 break;
85
86 default :
87 super.setObjectForStatement(ps, index, value, sqlType);
88
89 }
90 }
91
92
93
94
95 public byte getJoinSyntaxType()
96 {
97 return SQL92_NOPAREN_JOIN_SYNTAX;
98 }
99
100 public String getLastInsertIdentityQuery(String tableName)
101 {
102 return LAST_INSERT + tableName + LIMIT;
103 }
104
105
106
107
108
109
110 public void addPagingSql(StringBuffer anSqlString)
111 {
112 anSqlString.append(" LIMIT ?,?");
113 }
114
115
116
117
118 public String createSequenceQuery(String sequenceName)
119 {
120 return "insert into ojb_nextval_seq (seq_name) " +
121 "values ('" + sequenceName + "')";
122 }
123
124
125
126
127 public String nextSequenceQuery(String sequenceName)
128 {
129 return "select ojb_nextval_func ('" + sequenceName + "')";
130 }
131
132
133
134
135 public String dropSequenceQuery(String sequenceName)
136 {
137 return "delete from ojb_nextval_seq where seq_name='" +
138 sequenceName + "'";
139 }
140
141
142
143
144 public CallableStatement prepareNextValProcedureStatement (Connection con,
145 String procedureName, String sequenceName) throws
146 PlatformException
147 {
148 try {
149 String sp = " { call " + procedureName + " (?,?) } ";
150 CallableStatement cs = con.prepareCall(sp);
151 cs.registerOutParameter(1, Types.BIGINT);
152 cs.setString(2, sequenceName);
153 return cs;
154 } catch (Exception e) {
155 throw new PlatformException(e);
156 }
157 }
158
159
160
161
162
163
164 public boolean supportsPaging()
165 {
166 return true;
167 }
168
169
170
171
172 public String concatenate(String[] theColumns)
173 {
174 if (theColumns.length == 1)
175 {
176 return theColumns[0];
177 }
178
179 StringBuffer buf = new StringBuffer();
180
181 buf.append("concat(");
182 for (int i = 0; i < theColumns.length; i++)
183 {
184 if (i > 0)
185 {
186 buf.append(",");
187 }
188 buf.append(theColumns[i]);
189 }
190
191 buf.append(")");
192 return buf.toString();
193 }
194
195
196
197
198 public String getEscapeClause(LikeCriteria aCriteria)
199 {
200 if (LikeCriteria.getEscapeCharacter() != LikeCriteria.DEFAULT_ESCPAPE_CHARACTER)
201 {
202
203 return super.getEscapeClause(aCriteria);
204 }
205 return "";
206 }
207 }