001 /*
002 * Copyright 2007 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 /* Created on Sep 13, 2005 */
017 package org.apache.ojb.broker.platforms;
018
019 /* Copyright 2002-2004 The Apache Software Foundation
020 *
021 * Licensed under the Apache License, Version 2.0 (the "License");
022 * you may not use this file except in compliance with the License.
023 * You may obtain a copy of the License at
024 *
025 * http://www.apache.org/licenses/LICENSE-2.0
026 *
027 * Unless required by applicable law or agreed to in writing, software
028 * distributed under the License is distributed on an "AS IS" BASIS,
029 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
030 * See the License for the specific language governing permissions and
031 * limitations under the License.
032 */
033
034 import java.io.ByteArrayInputStream;
035 import java.io.InputStreamReader;
036 import java.io.Reader;
037 import java.io.StringReader;
038 import java.sql.PreparedStatement;
039 import java.sql.SQLException;
040 import java.sql.Types;
041
042 import org.apache.ojb.broker.query.LikeCriteria;
043
044 /**
045 * DatabasePlatform implementation for the Mckoi database.
046 *
047 * @author Kuali Rice Team (rice.collab@kuali.org)
048 * @see http://www.mckoi.com/database
049 */
050 public class PlatformMckoiImpl extends PlatformDefaultImpl
051 {
052 /* (non-Javadoc)
053 * @see DatabasePlatform#setObjectForStatement(PreparedStatement, int, Object, int)
054 */
055 public void setObjectForStatement(PreparedStatement statement, int index, Object value, int sqlType) throws SQLException
056 {
057 switch (sqlType)
058 {
059 case Types.BLOB :
060 case Types.LONGVARBINARY :
061 case Types.VARBINARY :
062 if (value instanceof byte[])
063 {
064 byte[] buf = (byte[])value;
065 ByteArrayInputStream inputStream = new ByteArrayInputStream(buf);
066 statement.setBinaryStream(index, inputStream, buf.length);
067
068 break;
069 }
070
071 case Types.CLOB :
072 Reader reader = null;
073 int length = 0;
074
075 if (value instanceof String)
076 {
077 reader = new StringReader((String)value);
078 length = (((String)value)).length();
079 }
080 else if (value instanceof char[])
081 {
082 String string = new String((char[])value);
083
084 reader = new StringReader(string);
085 length = string.length();
086 }
087 else if (value instanceof byte[])
088 {
089 ByteArrayInputStream inputStream = new ByteArrayInputStream((byte[])value);
090
091 reader = new InputStreamReader(inputStream);
092 }
093 statement.setCharacterStream(index, reader, length);
094 break;
095
096 default :
097 super.setObjectForStatement(statement, index, value, sqlType);
098
099 }
100 }
101
102 /* (non-Javadoc)
103 * @see org.apache.ojb.broker.platforms.Platform#createSequenceQuery(String)
104 */
105 public String createSequenceQuery(String sequenceName)
106 {
107 return "create sequence " + sequenceName;
108 }
109
110 /* (non-Javadoc)
111 * @see org.apache.ojb.broker.platforms.Platform#nextSequenceQuery(String)
112 */
113 public String nextSequenceQuery(String sequenceName)
114 {
115 return "select nextval('" + sequenceName + "')";
116 }
117
118 /* (non-Javadoc)
119 * @see org.apache.ojb.broker.platforms.Platform#dropSequenceQuery(String)
120 */
121 public String dropSequenceQuery(String sequenceName)
122 {
123 return "drop sequence " + sequenceName;
124 }
125
126 /* (non-Javadoc)
127 * @see org.apache.ojb.broker.platforms.Platform#getJoinSyntaxType()
128 */
129 public byte getJoinSyntaxType()
130 {
131 return SQL92_NOPAREN_JOIN_SYNTAX;
132 }
133
134 /* (non-Javadoc)
135 * @see org.apache.ojb.broker.platforms.Platform#supportsPaging()
136 */
137 public boolean supportsPaging()
138 {
139 // [tomdz] there is no explicit paging support a la LIMIT in Mckoi (yet ?)
140 return false;
141 }
142
143 /* (non-Javadoc)
144 * @see org.apache.ojb.broker.platforms.Platform#concatenate(java.lang.String[])
145 */
146 public String concatenate(String[] columns)
147 {
148 if (columns.length == 1)
149 {
150 return columns[0];
151 }
152
153 StringBuffer buf = new StringBuffer();
154
155 buf.append("concat(");
156 for (int idx = 0; idx < columns.length; idx++)
157 {
158 if (idx > 0)
159 {
160 buf.append(",");
161 }
162 buf.append(columns[idx]);
163 }
164 buf.append(")");
165
166 return buf.toString();
167 }
168
169 /* (non-Javadoc)
170 * @see org.apache.ojb.broker.platforms.Platform#getEscapeClause(org.apache.ojb.broker.query.LikeCriteria)
171 */
172 public String getEscapeClause(LikeCriteria criteria)
173 {
174 // [tomdz] Mckoi does not support escape characters other than \
175 // TODO Shold we throw some kind of exception here if the escape character is different ?
176 return "";
177 }
178 }