1 /*** 2 * 3 * Copyright 2004 Hiram Chirino 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 **/ 18 package org.codehaus.activemq.store.jdbc.adapter; 19 20 import org.codehaus.activemq.store.jdbc.StatementProvider; 21 22 23 /*** 24 * @version $Revision: 1.6 $ 25 */ 26 public class DefaultStatementProvider implements StatementProvider { 27 28 protected String tablePrefix = ""; 29 protected String messageTableName = "ACTIVEMQ_MSGS"; 30 protected String txTableName = "ACTIVEMQ_TXS"; 31 protected String durableSubAcksTableName = "ACTIVEMQ_ACKS"; 32 33 protected String binaryDataType = "BLOB"; 34 protected String containerNameDataType = "VARCHAR(250)"; 35 protected String xidDataType = "VARCHAR(250)"; 36 protected String msgIdDataType = "VARCHAR(250)"; 37 protected String subscriptionIdDataType = "VARCHAR(250)"; 38 protected String sequenceDataType = "INTEGER"; 39 protected String stringIdDataType = "VARCHAR(250)"; 40 41 42 43 public String [] getCreateSchemaStatments() { 44 return new String[]{ 45 "CREATE TABLE "+tablePrefix+messageTableName+"(" 46 +"ID "+sequenceDataType 47 +", CONTAINER "+containerNameDataType 48 +", MSGID "+msgIdDataType 49 +", MSG "+binaryDataType 50 +", PRIMARY KEY ( ID ) )", 51 "CREATE INDEX "+tablePrefix+messageTableName+"_MIDX ON "+tablePrefix+messageTableName+" (MSGID)", 52 "CREATE INDEX "+tablePrefix+messageTableName+"_CIDX ON "+tablePrefix+messageTableName+" (CONTAINER)", 53 54 "CREATE TABLE "+tablePrefix+txTableName+"(" 55 +"XID "+xidDataType 56 +", TX "+binaryDataType 57 +", PRIMARY KEY ( XID ))", 58 59 "CREATE TABLE "+tablePrefix+durableSubAcksTableName+"(" 60 +"SUB "+subscriptionIdDataType 61 +", CONTAINER "+containerNameDataType 62 +", LAST_ACKED_ID "+sequenceDataType 63 +", SE_ID INTEGER" 64 +", SE_CLIENT_ID "+stringIdDataType 65 +", SE_CONSUMER_NAME "+stringIdDataType 66 +", SE_SELECTOR "+stringIdDataType 67 +", PRIMARY KEY ( SUB ))", 68 "CREATE INDEX "+tablePrefix+durableSubAcksTableName+"_CIDX ON "+tablePrefix+durableSubAcksTableName+" (CONTAINER)", 69 }; 70 } 71 72 public String [] getDropSchemaStatments() { 73 return new String[]{ 74 "DROP TABLE "+tablePrefix+durableSubAcksTableName+"", 75 "DROP TABLE "+tablePrefix+messageTableName+"", 76 "DROP TABLE "+tablePrefix+txTableName+"" 77 }; 78 } 79 80 public String getAddMessageStatment() { 81 return "INSERT INTO "+tablePrefix+messageTableName+"(ID, CONTAINER, MSGID, MSG) VALUES (?, ?, ?, ?)"; 82 } 83 public String getUpdateMessageStatment() { 84 return "UPDATE "+tablePrefix+messageTableName+" SET MSG=? WHERE ID=?"; 85 } 86 public String getRemoveMessageStatment() { 87 return "DELETE FROM "+tablePrefix+messageTableName+" WHERE ID=?"; 88 } 89 public String getFindMessageSequenceIdStatment() { 90 return "SELECT ID FROM "+tablePrefix+messageTableName+" WHERE MSGID=?"; 91 } 92 public String getFindMessageStatment() { 93 return "SELECT MSG FROM "+tablePrefix+messageTableName+" WHERE ID=?"; 94 } 95 public String getFindAllMessagesStatment() { 96 return "SELECT ID, MSGID FROM "+tablePrefix+messageTableName+" WHERE CONTAINER=? ORDER BY ID"; 97 } 98 public String getFindLastSequenceId() { 99 return "SELECT MAX(ID) FROM "+tablePrefix+messageTableName+""; 100 } 101 102 public String getAddXidStatment() { 103 return "INSERT INTO "+tablePrefix+txTableName+"(XID, TX) VALUES (?, ?)"; 104 } 105 public String getUpdateXidStatment() { 106 return "UPDATE "+tablePrefix+txTableName+" SET TX=? WHERE XID=?"; 107 } 108 public String getRemoveXidStatment() { 109 return "DELETE FROM "+tablePrefix+txTableName+" WHERE XID=?"; 110 } 111 public String getFindXidStatment() { 112 return "SELECT TX FROM "+tablePrefix+txTableName+" WHERE XID=?"; 113 } 114 public String getFindAllXidStatment() { 115 return "SELECT XID FROM "+tablePrefix+txTableName+""; 116 } 117 public String getFindAllTxStatment() { 118 return "SELECT XID, TX FROM "+tablePrefix+txTableName+""; 119 } 120 121 public String getCreateDurableSubStatment() { 122 return "INSERT INTO "+tablePrefix+durableSubAcksTableName 123 +"(SE_ID, SE_CLIENT_ID, SE_CONSUMER_NAME, SE_SELECTOR, SUB, CONTAINER, LAST_ACKED_ID) " 124 +"VALUES (?, ?, ?, ?, ?, ?, ?)"; 125 } 126 127 public String getUpdateDurableSubStatment() { 128 return "UPDATE "+tablePrefix+durableSubAcksTableName 129 +" SET SE_ID=?, SE_CLIENT_ID=?, SE_CONSUMER_NAME=?, SE_SELECTOR=? WHERE SUB=? AND CONTAINER=?"; 130 } 131 132 public String getFindDurableSubStatment() { 133 return "SELECT SE_ID, SE_CLIENT_ID, SE_CONSUMER_NAME, SE_SELECTOR, CONTAINER=? "+tablePrefix+durableSubAcksTableName 134 +" WHERE SUB=? AND CONTAINER=?"; 135 } 136 137 public String getUpdateLastAckOfDurableSub() { 138 return "UPDATE "+tablePrefix+durableSubAcksTableName 139 +" SET LAST_ACKED_ID=? WHERE SUB=? AND CONTAINER=?"; 140 } 141 142 public String getFindAllDurableSubMessagesStatment() { 143 return "SELECT M.ID, M.MSGID FROM " 144 +tablePrefix+messageTableName+" M, " 145 +tablePrefix+durableSubAcksTableName +" D " 146 +" WHERE D.CONTAINER=? AND D.SUB=? " 147 +" AND M.CONTAINER=D.CONTAINER AND M.ID > D.LAST_ACKED_ID" 148 +" ORDER BY M.ID"; 149 } 150 151 /*** 152 * @return Returns the containerNameDataType. 153 */ 154 public String getContainerNameDataType() { 155 return containerNameDataType; 156 } 157 /*** 158 * @param containerNameDataType The containerNameDataType to set. 159 */ 160 public void setContainerNameDataType(String containerNameDataType) { 161 this.containerNameDataType = containerNameDataType; 162 } 163 /*** 164 * @return Returns the messageDataType. 165 */ 166 public String getBinaryDataType() { 167 return binaryDataType; 168 } 169 /*** 170 * @param messageDataType The messageDataType to set. 171 */ 172 public void setBinaryDataType(String messageDataType) { 173 this.binaryDataType = messageDataType; 174 } 175 /*** 176 * @return Returns the messageTableName. 177 */ 178 public String getMessageTableName() { 179 return messageTableName; 180 } 181 /*** 182 * @param messageTableName The messageTableName to set. 183 */ 184 public void setMessageTableName(String messageTableName) { 185 this.messageTableName = messageTableName; 186 } 187 /*** 188 * @return Returns the msgIdDataType. 189 */ 190 public String getMsgIdDataType() { 191 return msgIdDataType; 192 } 193 /*** 194 * @param msgIdDataType The msgIdDataType to set. 195 */ 196 public void setMsgIdDataType(String msgIdDataType) { 197 this.msgIdDataType = msgIdDataType; 198 } 199 /*** 200 * @return Returns the sequenceDataType. 201 */ 202 public String getSequenceDataType() { 203 return sequenceDataType; 204 } 205 /*** 206 * @param sequenceDataType The sequenceDataType to set. 207 */ 208 public void setSequenceDataType(String sequenceDataType) { 209 this.sequenceDataType = sequenceDataType; 210 } 211 /*** 212 * @return Returns the tablePrefix. 213 */ 214 public String getTablePrefix() { 215 return tablePrefix; 216 } 217 /*** 218 * @param tablePrefix The tablePrefix to set. 219 */ 220 public void setTablePrefix(String tablePrefix) { 221 this.tablePrefix = tablePrefix; 222 } 223 /*** 224 * @return Returns the txTableName. 225 */ 226 public String getTxTableName() { 227 return txTableName; 228 } 229 /*** 230 * @param txTableName The txTableName to set. 231 */ 232 public void setTxTableName(String txTableName) { 233 this.txTableName = txTableName; 234 } 235 /*** 236 * @return Returns the xidDataType. 237 */ 238 public String getXidDataType() { 239 return xidDataType; 240 } 241 /*** 242 * @param xidDataType The xidDataType to set. 243 */ 244 public void setXidDataType(String xidDataType) { 245 this.xidDataType = xidDataType; 246 } 247 /*** 248 * @return Returns the durableSubAcksTableName. 249 */ 250 public String getDurableSubAcksTableName() { 251 return durableSubAcksTableName; 252 } 253 /*** 254 * @param durableSubAcksTableName The durableSubAcksTableName to set. 255 */ 256 public void setDurableSubAcksTableName(String durableSubAcksTableName) { 257 this.durableSubAcksTableName = durableSubAcksTableName; 258 } 259 /*** 260 * @return Returns the subscriptionIdDataType. 261 */ 262 public String getSubscriptionIdDataType() { 263 return subscriptionIdDataType; 264 } 265 /*** 266 * @param subscriptionIdDataType The subscriptionIdDataType to set. 267 */ 268 public void setSubscriptionIdDataType(String subscriptionIdDataType) { 269 this.subscriptionIdDataType = subscriptionIdDataType; 270 } 271 }