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.2 $ 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 +")", 51 "CREATE TABLE "+tablePrefix+txTableName+"(" 52 +"XID "+xidDataType 53 +", TX "+binaryDataType 54 +")", 55 "CREATE TABLE "+tablePrefix+durableSubAcksTableName+"(" 56 +"SUB "+subscriptionIdDataType 57 +", CONTAINER "+containerNameDataType 58 +", LAST_ACKED_ID "+sequenceDataType 59 +", SE_ID INTEGER" 60 +", SE_CLIENT_ID "+stringIdDataType 61 +", SE_CONSUMER_NAME "+stringIdDataType 62 +", SE_SELECTOR "+stringIdDataType 63 +")", 64 }; 65 } 66 private int subscriberID; 67 private String clientID; 68 private String consumerName; 69 private String destination; 70 private String selector; 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 getFindMessageStatment() { 90 return "SELECT MSG FROM "+tablePrefix+messageTableName+" WHERE ID=?"; 91 } 92 public String getFindAllMessagesStatment() { 93 return "SELECT ID, MSGID FROM "+tablePrefix+messageTableName+" WHERE CONTAINER=? ORDER BY ID"; 94 } 95 public String getFindLastSequenceId() { 96 return "SELECT MAX(ID) FROM "+tablePrefix+messageTableName+""; 97 } 98 99 public String getAddXidStatment() { 100 return "INSERT INTO "+tablePrefix+txTableName+"(XID, TX) VALUES (?, ?)"; 101 } 102 public String getUpdateXidStatment() { 103 return "UPDATE "+tablePrefix+txTableName+" SET TX=? WHERE XID=?"; 104 } 105 public String getRemoveXidStatment() { 106 return "DELETE FROM "+tablePrefix+txTableName+" WHERE XID=?"; 107 } 108 public String getFindXidStatment() { 109 return "SELECT TX FROM "+tablePrefix+txTableName+" WHERE XID=?"; 110 } 111 public String getFindAllXidStatment() { 112 return "SELECT XID FROM "+tablePrefix+txTableName+""; 113 } 114 public String getFindAllTxStatment() { 115 return "SELECT XID, TX FROM "+tablePrefix+txTableName+""; 116 } 117 118 public String getCreateDurableSubStatment() { 119 return "INSERT INTO "+tablePrefix+durableSubAcksTableName 120 +"(SE_ID, SE_CLIENT_ID, SE_CONSUMER_NAME, SE_SELECTOR, SUB, CONTAINER) VALUES (?, ?, ?, ?, ?, ?)"; 121 } 122 123 public String getUpdateDurableSubStatment() { 124 return "UPDATE "+tablePrefix+durableSubAcksTableName 125 +" SET SE_ID=?, SE_CLIENT_ID=?, SE_CONSUMER_NAME=?, SE_SELECTOR? WHERE SUB=? AND CONTAINER=?"; 126 } 127 128 public String getFindDurableSubStatment() { 129 return "SELECT SE_ID, SE_CLIENT_ID, SE_CONSUMER_NAME, SE_SELECTOR, CONTAINER=? "+tablePrefix+durableSubAcksTableName 130 +" WHERE SUB=? AND CONTAINER=?"; 131 } 132 133 public String getUpdateLastAckOfDurableSub() { 134 return "UPDATE "+tablePrefix+durableSubAcksTableName 135 +" SET LAST_ACKED_ID=? WHERE SUB=? AND CONTAINER=?"; 136 } 137 138 public String getFindAllDurableSubMessagesStatment() { 139 return "SELECT M.ID, M.MSGID FROM " 140 +tablePrefix+messageTableName+" M, " 141 +tablePrefix+durableSubAcksTableName +" D " 142 +" WHERE D.CONTAINER=? AND D.SUB=? " 143 +" AND M.CONTAINER=D.CONTAINER AND M.ID > D.LAST_ACKED_ID" 144 +" ORDER BY M.ID"; 145 } 146 147 /*** 148 * @return Returns the containerNameDataType. 149 */ 150 public String getContainerNameDataType() { 151 return containerNameDataType; 152 } 153 /*** 154 * @param containerNameDataType The containerNameDataType to set. 155 */ 156 public void setContainerNameDataType(String containerNameDataType) { 157 this.containerNameDataType = containerNameDataType; 158 } 159 /*** 160 * @return Returns the messageDataType. 161 */ 162 public String getBinaryDataType() { 163 return binaryDataType; 164 } 165 /*** 166 * @param messageDataType The messageDataType to set. 167 */ 168 public void setBinaryDataType(String messageDataType) { 169 this.binaryDataType = messageDataType; 170 } 171 /*** 172 * @return Returns the messageTableName. 173 */ 174 public String getMessageTableName() { 175 return messageTableName; 176 } 177 /*** 178 * @param messageTableName The messageTableName to set. 179 */ 180 public void setMessageTableName(String messageTableName) { 181 this.messageTableName = messageTableName; 182 } 183 /*** 184 * @return Returns the msgIdDataType. 185 */ 186 public String getMsgIdDataType() { 187 return msgIdDataType; 188 } 189 /*** 190 * @param msgIdDataType The msgIdDataType to set. 191 */ 192 public void setMsgIdDataType(String msgIdDataType) { 193 this.msgIdDataType = msgIdDataType; 194 } 195 /*** 196 * @return Returns the sequenceDataType. 197 */ 198 public String getSequenceDataType() { 199 return sequenceDataType; 200 } 201 /*** 202 * @param sequenceDataType The sequenceDataType to set. 203 */ 204 public void setSequenceDataType(String sequenceDataType) { 205 this.sequenceDataType = sequenceDataType; 206 } 207 /*** 208 * @return Returns the tablePrefix. 209 */ 210 public String getTablePrefix() { 211 return tablePrefix; 212 } 213 /*** 214 * @param tablePrefix The tablePrefix to set. 215 */ 216 public void setTablePrefix(String tablePrefix) { 217 this.tablePrefix = tablePrefix; 218 } 219 /*** 220 * @return Returns the txTableName. 221 */ 222 public String getTxTableName() { 223 return txTableName; 224 } 225 /*** 226 * @param txTableName The txTableName to set. 227 */ 228 public void setTxTableName(String txTableName) { 229 this.txTableName = txTableName; 230 } 231 /*** 232 * @return Returns the xidDataType. 233 */ 234 public String getXidDataType() { 235 return xidDataType; 236 } 237 /*** 238 * @param xidDataType The xidDataType to set. 239 */ 240 public void setXidDataType(String xidDataType) { 241 this.xidDataType = xidDataType; 242 } 243 /*** 244 * @return Returns the durableSubAcksTableName. 245 */ 246 public String getDurableSubAcksTableName() { 247 return durableSubAcksTableName; 248 } 249 /*** 250 * @param durableSubAcksTableName The durableSubAcksTableName to set. 251 */ 252 public void setDurableSubAcksTableName(String durableSubAcksTableName) { 253 this.durableSubAcksTableName = durableSubAcksTableName; 254 } 255 /*** 256 * @return Returns the subscriptionIdDataType. 257 */ 258 public String getSubscriptionIdDataType() { 259 return subscriptionIdDataType; 260 } 261 /*** 262 * @param subscriptionIdDataType The subscriptionIdDataType to set. 263 */ 264 public void setSubscriptionIdDataType(String subscriptionIdDataType) { 265 this.subscriptionIdDataType = subscriptionIdDataType; 266 } 267 }