2 * This file is part of NeverNote
\r
3 * Copyright 2009 Randy Baumgarte
\r
5 * This file may be licensed under the terms of of the
\r
6 * GNU General Public License Version 2 (the ``GPL'').
\r
8 * Software distributed under the License is distributed
\r
9 * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either
\r
10 * express or implied. See the GPL for the specific language
\r
11 * governing rights and limitations.
\r
13 * You should have received a copy of the GPL along with this
\r
14 * program. If not, go to http://www.gnu.org/licenses/gpl.html
\r
15 * or write to the Free Software Foundation, Inc.,
\r
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
\r
21 package cx.fbn.nevernote.sql.runners;
\r
23 import java.util.ArrayList;
\r
24 import java.util.List;
\r
26 import com.evernote.edam.type.QueryFormat;
\r
27 import com.evernote.edam.type.SavedSearch;
\r
29 import cx.fbn.nevernote.sql.driver.NSqlQuery;
\r
30 import cx.fbn.nevernote.utilities.ApplicationLogger;
\r
32 public class RSavedSearchTable {
\r
33 private final ApplicationLogger logger;
\r
34 private final RDatabaseConnection db;
\r
38 public RSavedSearchTable(ApplicationLogger l, RDatabaseConnection d) {
\r
43 public void createTable() {
\r
44 NSqlQuery query = new NSqlQuery(db.getConnection());
\r
45 logger.log(logger.HIGH, "Creating table SavedSearch...");
\r
46 if (!query.exec("Create table SavedSearch (guid varchar primary key, " +
\r
47 "name varchar, query varchar, format integer, sequence integer, isDirty boolean)"))
\r
48 logger.log(logger.HIGH, "Table SavedSearch creation FAILED!!!");
\r
51 public void dropTable() {
\r
52 NSqlQuery query = new NSqlQuery(db.getConnection());
\r
53 query.exec("Drop table SavedSearch");
\r
56 public List<SavedSearch> getAll() {
\r
57 SavedSearch tempSearch;
\r
58 List<SavedSearch> index = new ArrayList<SavedSearch>();
\r
61 NSqlQuery query = new NSqlQuery(db.getConnection());
\r
63 check = query.exec("Select guid, name, query, format, sequence"
\r
64 +" from SavedSearch");
\r
66 logger.log(logger.EXTREME, "SavedSearch SQL retrieve has failed in getAll().");
\r
67 while (query.next()) {
\r
68 tempSearch = new SavedSearch();
\r
69 tempSearch.setGuid(query.valueString(0));
\r
70 tempSearch.setName(query.valueString(1));
\r
71 tempSearch.setQuery(query.valueString(2));
\r
72 int fmt = new Integer(query.valueString(3));
\r
74 tempSearch.setFormat(QueryFormat.USER);
\r
76 tempSearch.setFormat(QueryFormat.SEXP);
\r
77 int sequence = new Integer(query.valueString(4)).intValue();
\r
78 tempSearch.setUpdateSequenceNum(sequence);
\r
79 index.add(tempSearch);
\r
83 public SavedSearch getSavedSearch(String guid) {
\r
84 SavedSearch tempSearch = null;
\r
87 NSqlQuery query = new NSqlQuery(db.getConnection());
\r
89 check = query.prepare("Select guid, name, query, format, sequence"
\r
90 +" from SavedSearch where guid=:guid");
\r
92 logger.log(logger.EXTREME, "SavedSearch SQL prepare has failed in getSavedSearch.");
\r
93 query.bindValue(":guid", guid);
\r
96 logger.log(logger.EXTREME, "SavedSearch SQL retrieve has failed in getSavedSearch.");
\r
98 tempSearch = new SavedSearch();
\r
99 tempSearch.setGuid(query.valueString(0));
\r
100 tempSearch.setName(query.valueString(1));
\r
101 tempSearch.setQuery(query.valueString(2));
\r
102 int fmt = new Integer(query.valueString(3));
\r
104 tempSearch.setFormat(QueryFormat.USER);
\r
106 tempSearch.setFormat(QueryFormat.SEXP);
\r
107 int sequence = new Integer(query.valueString(4)).intValue();
\r
108 tempSearch.setUpdateSequenceNum(sequence);
\r
113 public void updateSavedSearch(SavedSearch search, boolean isDirty) {
\r
115 NSqlQuery query = new NSqlQuery(db.getConnection());
\r
116 check = query.prepare("Update SavedSearch set sequence=:sequence, "+
\r
117 "name=:name, isDirty=:isDirty, query=:query, format=:format "
\r
118 +"where guid=:guid");
\r
121 logger.log(logger.EXTREME, "SavedSearch SQL update prepare has failed.");
\r
122 logger.log(logger.EXTREME, query.lastError().toString());
\r
124 query.bindValue(":sequence", search.getUpdateSequenceNum());
\r
125 query.bindValue(":name", search.getName());
\r
126 query.bindValue(":isDirty", isDirty);
\r
127 query.bindValue(":query", search.getQuery());
\r
128 if (search.getFormat() == QueryFormat.USER)
\r
129 query.bindValue(":format", 1);
\r
131 query.bindValue(":format", 2);
\r
133 query.bindValue(":guid", search.getGuid());
\r
135 check = query.exec();
\r
137 logger.log(logger.MEDIUM, "Tag Table update failed.");
\r
138 logger.log(logger.EXTREME, query.lastError().toString());
\r
142 public void expungeSavedSearch(String guid, boolean needsSync) {
\r
144 NSqlQuery query = new NSqlQuery(db.getConnection());
\r
146 check = query.prepare("delete from SavedSearch "
\r
147 +"where guid=:guid");
\r
149 logger.log(logger.EXTREME, "SavedSearch SQL delete prepare has failed.");
\r
150 logger.log(logger.EXTREME, query.lastError().toString());
\r
152 query.bindValue(":guid", guid);
\r
153 check = query.exec();
\r
155 logger.log(logger.MEDIUM, "Saved Search delete failed.");
\r
156 logger.log(logger.EXTREME, query.lastError().toString());
\r
159 // Add the work to the parent queue
\r
161 RDeletedTable del = new RDeletedTable(logger, db);
\r
162 del.addDeletedItem(guid, "SavedSearch");
\r
166 public void addSavedSearch(SavedSearch search, boolean isDirty) {
\r
168 NSqlQuery query = new NSqlQuery(db.getConnection());
\r
169 check = query.prepare("Insert Into SavedSearch (guid, query, sequence, format, name, isDirty)"
\r
170 +" Values(:guid, :query, :sequence, :format, :name, :isDirty)");
\r
172 logger.log(logger.EXTREME, "Search SQL insert prepare has failed.");
\r
173 logger.log(logger.EXTREME, query.lastError().toString());
\r
175 query.bindValue(":guid", search.getGuid());
\r
176 query.bindValue(":query", search.getQuery());
\r
177 query.bindValue(":sequence", search.getUpdateSequenceNum());
\r
178 if (search.getFormat() == QueryFormat.USER)
\r
179 query.bindValue(":format", 1);
\r
181 query.bindValue(":format", 2);
\r
182 query.bindValue(":name", search.getName());
\r
183 query.bindValue(":isDirty", isDirty);
\r
185 check = query.exec();
\r
187 logger.log(logger.MEDIUM, "Search Table insert failed.");
\r
188 logger.log(logger.MEDIUM, query.lastError().toString());
\r
191 // Update a tag sequence number
\r
192 public void updateSavedSearchSequence(String guid, int sequence) {
\r
195 NSqlQuery query = new NSqlQuery(db.getConnection());
\r
196 check = query.prepare("Update SavedSearch set sequence=:sequence where guid=:guid");
\r
197 query.bindValue(":sequence", sequence);
\r
198 query.bindValue(":guid", guid);
\r
201 logger.log(logger.MEDIUM, "SavedSearch sequence update failed.");
\r
202 logger.log(logger.MEDIUM, query.lastError());
\r
205 // Update a tag sequence number
\r
206 public void updateSavedSearchGuid(String oldGuid, String newGuid) {
\r
208 NSqlQuery query = new NSqlQuery(db.getConnection());
\r
209 check = query.prepare("Update SavedSearch set guid=:newGuid where guid=:oldGuid");
\r
210 query.bindValue(":newGuid", newGuid);
\r
211 query.bindValue(":oldGuid", oldGuid);
\r
214 logger.log(logger.MEDIUM, "SavedSearch guid update failed.");
\r
215 logger.log(logger.MEDIUM, query.lastError());
\r
219 public List<SavedSearch> getDirty() {
\r
220 SavedSearch search;
\r
221 List<SavedSearch> index = new ArrayList<SavedSearch>();
\r
224 NSqlQuery query = new NSqlQuery(db.getConnection());
\r
226 check = query.exec("Select guid, query, sequence, name, format"
\r
227 +" from SavedSearch where isDirty = true");
\r
229 logger.log(logger.EXTREME, "SavedSearch getDirty prepare has failed.");
\r
230 while (query.next()) {
\r
231 search = new SavedSearch();
\r
232 search.setGuid(query.valueString(0));
\r
233 search.setQuery(query.valueString(1));
\r
234 int sequence = new Integer(query.valueString(2)).intValue();
\r
235 search.setUpdateSequenceNum(sequence);
\r
236 search.setName(query.valueString(3));
\r
237 int fmt = new Integer(query.valueString(4)).intValue();
\r
239 search.setFormat(QueryFormat.USER);
\r
241 search.setFormat(QueryFormat.SEXP);
\r
242 index.add(search);
\r
246 // Find a guid based upon the name
\r
247 public String findSavedSearchByName(String name) {
\r
248 NSqlQuery query = new NSqlQuery(db.getConnection());
\r
250 query.prepare("Select guid from SavedSearch where name=:name");
\r
251 query.bindValue(":name", name);
\r
253 logger.log(logger.EXTREME, "SavedSearch SQL retrieve has failed in findSavedSearchByName().");
\r
256 val = query.valueString(0);
\r
259 // given a guid, does the tag exist
\r
260 public boolean exists(String guid) {
\r
261 NSqlQuery query = new NSqlQuery(db.getConnection());
\r
262 query.prepare("Select guid from SavedSearch where guid=:guid");
\r
263 query.bindValue(":guid", guid);
\r
265 logger.log(logger.EXTREME, "SavedSearch SQL retrieve has failed in exists().");
\r
266 boolean retval = query.next();
\r
269 // This is a convience method to check if a tag exists & update/create based upon it
\r
270 public void syncSavedSearch(SavedSearch search, boolean isDirty) {
\r
271 if (exists(search.getGuid()))
\r
272 updateSavedSearch(search, isDirty);
\r
274 addSavedSearch(search, isDirty);
\r
276 public void resetDirtyFlag(String guid) {
\r
277 NSqlQuery query = new NSqlQuery(db.getConnection());
\r
279 query.prepare("Update SavedSearch set isdirty=false where guid=:guid");
\r
280 query.bindValue(":guid", guid);
\r
282 logger.log(logger.EXTREME, "Error resetting SavedSearch dirty field in resetDirtyFlag().");
\r