sbSQLWhereBuilder.cpp
Go to the documentation of this file.
1 /*
2 //
3 // BEGIN SONGBIRD GPL
4 //
5 // This file is part of the Songbird web player.
6 //
7 // Copyright(c) 2005-2008 POTI, Inc.
8 // http://songbirdnest.com
9 //
10 // This file may be licensed under the terms of of the
11 // GNU General Public License Version 2 (the "GPL").
12 //
13 // Software distributed under the License is distributed
14 // on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
15 // express or implied. See the GPL for the specific language
16 // governing rights and limitations.
17 //
18 // You should have received a copy of the GPL along with this
19 // program. If not, go to http://www.gnu.org/licenses/gpl.html
20 // or write to the Free Software Foundation, Inc.,
21 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22 //
23 // END SONGBIRD GPL
24 //
25 */
26 
27 #include "sbSQLWhereBuilder.h"
28 #include "sbSQLBuilderBase.h"
29 #include "sbSQLBuilderCriterion.h"
30 
34 
36 {
37  MOZ_COUNT_CTOR(sbSQLWhereBuilder);
38 }
39 
41 {
42  MOZ_COUNT_DTOR(sbSQLWhereBuilder);
43 }
44 
45 NS_IMETHODIMP
46 sbSQLWhereBuilder::AddCriterion(sbISQLBuilderCriterion *aCriterion)
47 {
48  NS_ENSURE_ARG_POINTER(aCriterion);
49 
50  mCritera.AppendObject(aCriterion);
51 
52  return NS_OK;
53 }
54 
55 NS_IMETHODIMP
56 sbSQLWhereBuilder::RemoveCriterion(sbISQLBuilderCriterion *aCriterion)
57 {
58  NS_ENSURE_ARG_POINTER(aCriterion);
59 
60  PRBool success = mCritera.RemoveObject(aCriterion);
61  if (!success) {
62  return NS_ERROR_NOT_AVAILABLE;
63  }
64 
65  return NS_OK;
66 }
67 
68 NS_IMETHODIMP
69 sbSQLWhereBuilder::CreateMatchCriterionString(const nsAString& aTableName,
70  const nsAString& aSrcColumnName,
71  PRUint32 aMatchType,
72  const nsAString& aValue,
73  sbISQLBuilderCriterion** _retval)
74 {
75  NS_ENSURE_ARG_POINTER(_retval);
76 
77  nsCOMPtr<sbISQLBuilderCriterion> criterion =
78  new sbSQLBuilderCriterionString(aTableName, aSrcColumnName, aMatchType, aValue);
79  NS_ENSURE_TRUE(criterion, NS_ERROR_OUT_OF_MEMORY);
80 
81  NS_ADDREF(*_retval = criterion);
82  return NS_OK;
83 }
84 
85 NS_IMETHODIMP
86 sbSQLWhereBuilder::CreateMatchCriterionBetweenString(const nsAString& aTableName,
87  const nsAString& aSrcColumnName,
88  const nsAString& aLeftValue,
89  const nsAString& aRightValue,
90  sbISQLBuilderCriterion** _retval)
91 {
92  NS_ENSURE_ARG_POINTER(_retval);
93 
94  nsCOMPtr<sbISQLBuilderCriterion> criterion =
95  new sbSQLBuilderCriterionBetweenString(aTableName, aSrcColumnName, aLeftValue, aRightValue, PR_FALSE);
96  NS_ENSURE_TRUE(criterion, NS_ERROR_OUT_OF_MEMORY);
97 
98  NS_ADDREF(*_retval = criterion);
99  return NS_OK;
100 }
101 
102 NS_IMETHODIMP
103 sbSQLWhereBuilder::CreateMatchCriterionNotBetweenString(const nsAString& aTableName,
104  const nsAString& aSrcColumnName,
105  const nsAString& aLeftValue,
106  const nsAString& aRightValue,
107  sbISQLBuilderCriterion** _retval)
108 {
109  NS_ENSURE_ARG_POINTER(_retval);
110 
111  nsCOMPtr<sbISQLBuilderCriterion> criterion =
112  new sbSQLBuilderCriterionBetweenString(aTableName, aSrcColumnName, aLeftValue, aRightValue, PR_TRUE);
113  NS_ENSURE_TRUE(criterion, NS_ERROR_OUT_OF_MEMORY);
114 
115  NS_ADDREF(*_retval = criterion);
116  return NS_OK;
117 }
118 
119 NS_IMETHODIMP
120 sbSQLWhereBuilder::CreateMatchCriterionLong(const nsAString& aTableName,
121  const nsAString& aSrcColumnName,
122  PRUint32 aMatchType,
123  PRInt32 aValue,
124  sbISQLBuilderCriterion **_retval)
125 {
126  NS_ENSURE_ARG_POINTER(_retval);
127 
128  nsCOMPtr<sbISQLBuilderCriterion> criterion =
129  new sbSQLBuilderCriterionLong(aTableName, aSrcColumnName, aMatchType, aValue);
130  NS_ENSURE_TRUE(criterion, NS_ERROR_OUT_OF_MEMORY);
131 
132  NS_ADDREF(*_retval = criterion);
133  return NS_OK;
134 }
135 
136 NS_IMETHODIMP
137 sbSQLWhereBuilder::CreateMatchCriterionLongLong(const nsAString& aTableName,
138  const nsAString& aSrcColumnName,
139  PRUint32 aMatchType,
140  PRInt64 aValue,
141  sbISQLBuilderCriterion **_retval)
142 {
143  NS_ENSURE_ARG_POINTER(_retval);
144 
145  nsCOMPtr<sbISQLBuilderCriterion> criterion =
146  new sbSQLBuilderCriterionLongLong(aTableName, aSrcColumnName, aMatchType, aValue);
147  NS_ENSURE_TRUE(criterion, NS_ERROR_OUT_OF_MEMORY);
148 
149  NS_ADDREF(*_retval = criterion);
150  return NS_OK;
151 }
152 
153 NS_IMETHODIMP
154 sbSQLWhereBuilder::CreateMatchCriterionNull(const nsAString& aTableName,
155  const nsAString& aSrcColumnName,
156  PRUint32 aMatchType,
157  sbISQLBuilderCriterion **_retval)
158 {
159  NS_ENSURE_ARG_POINTER(_retval);
160 
161  nsCOMPtr<sbISQLBuilderCriterion> criterion =
162  new sbSQLBuilderCriterionNull(aTableName, aSrcColumnName, aMatchType);
163  NS_ENSURE_TRUE(criterion, NS_ERROR_OUT_OF_MEMORY);
164 
165  NS_ADDREF(*_retval = criterion);
166  return NS_OK;
167 }
168 
169 NS_IMETHODIMP
170 sbSQLWhereBuilder::CreateMatchCriterionParameter(const nsAString& aTableName,
171  const nsAString& aSrcColumnName,
172  PRUint32 aMatchType,
173  sbISQLBuilderCriterion **_retval)
174 {
175  NS_ENSURE_ARG_POINTER(_retval);
176 
177  nsCOMPtr<sbISQLBuilderCriterion> criterion =
178  new sbSQLBuilderCriterionParameter(aTableName, aSrcColumnName, aMatchType);
179  NS_ENSURE_TRUE(criterion, NS_ERROR_OUT_OF_MEMORY);
180 
181  NS_ADDREF(*_retval = criterion);
182  return NS_OK;
183 }
184 
185 NS_IMETHODIMP
186 sbSQLWhereBuilder::CreateMatchCriterionTable(const nsAString& aLeftTableName,
187  const nsAString& aLeftColumnName,
188  PRUint32 aMatchType,
189  const nsAString& aRightTableName,
190  const nsAString& aRightColumnName,
191  sbISQLBuilderCriterion **_retval)
192 {
193  NS_ENSURE_ARG_POINTER(_retval);
194 
195  nsCOMPtr<sbISQLBuilderCriterion> criterion =
196  new sbSQLBuilderCriterionTable(aLeftTableName, aLeftColumnName, aMatchType,
197  aRightTableName, aRightColumnName);
198  NS_ENSURE_TRUE(criterion, NS_ERROR_OUT_OF_MEMORY);
199 
200  NS_ADDREF(*_retval = criterion);
201  return NS_OK;
202 }
203 
204 NS_IMETHODIMP
205 sbSQLWhereBuilder::CreateMatchCriterionIn(const nsAString& aTableName,
206  const nsAString& aSrcColumnName,
207  sbISQLBuilderCriterionIn **_retval)
208 {
209  NS_ENSURE_ARG_POINTER(_retval);
210 
211  nsCOMPtr<sbISQLBuilderCriterionIn> criterion =
212  new sbSQLBuilderCriterionIn(aTableName, aSrcColumnName);
213  NS_ENSURE_TRUE(criterion, NS_ERROR_OUT_OF_MEMORY);
214 
215  NS_ADDREF(*_retval = criterion);
216 
217  return NS_OK;
218 }
219 
220 NS_IMETHODIMP
221 sbSQLWhereBuilder::CreateAndCriterion(sbISQLBuilderCriterion *aLeft,
222  sbISQLBuilderCriterion *aRight,
223  sbISQLBuilderCriterion **_retval)
224 {
225  NS_ENSURE_ARG_POINTER(aLeft);
226  NS_ENSURE_ARG_POINTER(aRight);
227  NS_ENSURE_ARG_POINTER(_retval);
228 
229  nsCOMPtr<sbISQLBuilderCriterion> criterion =
230  new sbSQLBuilderCriterionAnd(aLeft, aRight);
231  NS_ENSURE_TRUE(criterion, NS_ERROR_OUT_OF_MEMORY);
232 
233  NS_ADDREF(*_retval = criterion);
234  return NS_OK;
235 }
236 
237 NS_IMETHODIMP
238 sbSQLWhereBuilder::CreateOrCriterion(sbISQLBuilderCriterion *aLeft,
239  sbISQLBuilderCriterion *aRight,
240  sbISQLBuilderCriterion **_retval)
241 {
242  NS_ENSURE_ARG_POINTER(aLeft);
243  NS_ENSURE_ARG_POINTER(aRight);
244  NS_ENSURE_ARG_POINTER(_retval);
245 
246  nsCOMPtr<sbISQLBuilderCriterion> criterion =
247  new sbSQLBuilderCriterionOr(aLeft, aRight);
248  NS_ENSURE_TRUE(criterion, NS_ERROR_OUT_OF_MEMORY);
249 
250  NS_ADDREF(*_retval = criterion);
251  return NS_OK;
252 }
253 
254 NS_IMETHODIMP
256 {
257  sbSQLBuilderBase::Reset();
258  mCritera.Clear();
259  return NS_OK;
260 }
261 
262 nsresult
264 {
265  nsresult rv;
266 
267  // Append the where clause if there are criterea
268  PRUint32 len = mCritera.Count();
269  if (len > 0) {
270  aBuffer.AppendLiteral(" where ");
271  for (PRUint32 i = 0; i < len; i++) {
272  nsCOMPtr<sbISQLBuilderCriterion> criterion =
273  do_QueryInterface(mCritera[i], &rv);
274  NS_ENSURE_SUCCESS(rv, rv);
275  nsAutoString str;
276  rv = criterion->ToString(str);
277  NS_ENSURE_SUCCESS(rv, rv);
278  aBuffer.Append(str);
279  if (i + 1 < len) {
280  aBuffer.AppendLiteral(" and ");
281  }
282  }
283  }
284 
285  return NS_OK;
286 }
287 
return NS_OK
NS_IMPL_ISUPPORTS_INHERITED1(sbSQLWhereBuilder, sbSQLBuilderBase, sbISQLWhereBuilder) sbSQLWhereBuilder
onPageChanged aValue
Definition: FeedWriter.js:1395
Interface for building WHERE expressions.
restoreDimensions aLeft
nsresult AppendWhere(nsAString &aBuffer)
Interface for "in" SQL critera.
nsCOMArray< sbISQLBuilderCriterion > mCritera
Interface for SQL critera. This interface has no public methods as it is used only as a return type f...
_getSelectedPageStyle s i