View Javadoc

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 }