OSDN Git Service

Correct SQL due to database being split apart.
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / sql / NoteTable.java
index 97c0b15..4e888f6 100644 (file)
@@ -85,7 +85,7 @@ public class NoteTable {
         if (!query.exec("CREATE INDEX unsynchronized_notes on note (isDirty desc, guid);"))\r
                logger.log(logger.HIGH, "note unsynchronized_notes index creation FAILED!!!");  \r
         noteTagsTable.createTable();\r
-        noteResourceTable.createTable();     \r
+//        noteResourceTable.createTable();     \r
        }\r
        // Drop the table\r
        public void dropTable() {\r
@@ -120,12 +120,17 @@ public class NoteTable {
                StringBuilder updated = new StringBuilder(simple.format(n.getUpdated()));                       \r
                StringBuilder deleted = new StringBuilder(simple.format(n.getDeleted()));\r
 \r
-               EnmlConverter enml = new EnmlConverter(logger);\r
+               \r
                \r
                query.bindValue(":guid", n.getGuid());\r
                query.bindValue(":updateSequenceNumber", n.getUpdateSequenceNum());\r
                query.bindValue(":title", n.getTitle());\r
-               query.bindValue(":content", enml.fixEnXMLCrap(enml.fixEnMediaCrap(n.getContent())));\r
+               if (isDirty) {\r
+                       EnmlConverter enml = new EnmlConverter(logger);\r
+                       query.bindValue(":content", enml.fixEnXMLCrap(enml.fixEnMediaCrap(n.getContent())));\r
+               }\r
+               else\r
+                       query.bindValue(":content", n.getContent());\r
                query.bindValue(":contentHash", n.getContentHash());\r
                query.bindValue(":contentLength", n.getContentLength());\r
                query.bindValue(":created", created.toString());\r
@@ -158,6 +163,7 @@ public class NoteTable {
                        for (int i=0; i<n.getTagGuids().size(); i++) \r
                                noteTagsTable.saveNoteTag(n.getGuid(), n.getTagGuids().get(i));\r
                }\r
+               \r
                logger.log(logger.EXTREME, "Leaving addNote");\r
        } \r
        // Setup queries for get to save time later\r
@@ -540,9 +546,9 @@ public class NoteTable {
                \r
                \r
         NSqlQuery note = new NSqlQuery(db.getConnection());\r
-        NSqlQuery resources = new NSqlQuery(db.getConnection());\r
+        NSqlQuery resources = new NSqlQuery(db.getResourceConnection());\r
         NSqlQuery tags = new NSqlQuery(db.getConnection());\r
-        NSqlQuery words = new NSqlQuery(db.getConnection());\r
+        NSqlQuery words = new NSqlQuery(db.getIndexConnection());\r
         \r
                note.prepare("Delete from Note where guid=:guid");\r
                resources.prepare("Delete from NoteResources where noteGuid=:guid");\r
@@ -580,9 +586,9 @@ public class NoteTable {
        // Purge a note (actually delete it instead of just marking it deleted)\r
        public void hideExpungedNote(String guid, boolean needsSync) {\r
         NSqlQuery note = new NSqlQuery(db.getConnection());\r
-        NSqlQuery resources = new NSqlQuery(db.getConnection());\r
+        NSqlQuery resources = new NSqlQuery(db.getResourceConnection());\r
         NSqlQuery tags = new NSqlQuery(db.getConnection());\r
-        NSqlQuery words = new NSqlQuery(db.getConnection());\r
+        NSqlQuery words = new NSqlQuery(db.getIndexConnection());\r
         \r
                note.prepare("Update Note set isExpunged=true where guid=:guid");\r
                resources.prepare("Delete from NoteResources where noteGuid=:guid");\r
@@ -650,6 +656,8 @@ public class NoteTable {
        public void updateNoteGuid(String oldGuid, String newGuid) {\r
                boolean check;\r
         NSqlQuery query = new NSqlQuery(db.getConnection());\r
+        NSqlQuery resQuery = new NSqlQuery(db.getResourceConnection());\r
+        NSqlQuery wordQuery = new NSqlQuery(db.getIndexConnection());\r
                query.prepare("Update Note set guid=:newGuid where guid=:oldGuid");\r
 \r
                query.bindValue(":newGuid", newGuid);\r
@@ -670,21 +678,21 @@ public class NoteTable {
                        logger.log(logger.MEDIUM, query.lastError());\r
                }\r
                \r
-               query.prepare("Update words set guid=:newGuid where guid=:oldGuid");\r
-               query.bindValue(":newGuid", newGuid);\r
-               query.bindValue(":oldGuid", oldGuid);\r
-               query.exec();\r
+               wordQuery.prepare("Update words set guid=:newGuid where guid=:oldGuid");\r
+               wordQuery.bindValue(":newGuid", newGuid);\r
+               wordQuery.bindValue(":oldGuid", oldGuid);\r
+               wordQuery.exec();\r
                if (!check) {\r
                        logger.log(logger.MEDIUM, "Note guid update failed for Words.");\r
-                       logger.log(logger.MEDIUM, query.lastError());\r
+                       logger.log(logger.MEDIUM, wordQuery.lastError());\r
                }\r
-               query.prepare("Update noteresources set noteguid=:newGuid where noteguid=:oldGuid");\r
-               query.bindValue(":newGuid", newGuid);\r
-               query.bindValue(":oldGuid", oldGuid);\r
-               query.exec();\r
+               resQuery.prepare("Update noteresources set noteguid=:newGuid where noteguid=:oldGuid");\r
+               resQuery.bindValue(":newGuid", newGuid);\r
+               resQuery.bindValue(":oldGuid", oldGuid);\r
+               resQuery.exec();\r
                if (!check) {\r
                        logger.log(logger.MEDIUM, "Note guid update failed for noteresources.");\r
-                       logger.log(logger.MEDIUM, query.lastError());\r
+                       logger.log(logger.MEDIUM, resQuery.lastError());\r
                }\r
        }\r
        // Update a note\r
@@ -760,6 +768,34 @@ public class NoteTable {
                return notes;   \r
        }\r
        // Get a list of notes that need to be updated\r
+       public List <Note> getDirtyLinkedNotes() {\r
+               String guid;\r
+               Note tempNote;\r
+               List<Note> notes = new ArrayList<Note>();\r
+               List<String> index = new ArrayList<String>();\r
+               \r
+               boolean check;                  \r
+        NSqlQuery query = new NSqlQuery(db.getConnection());\r
+                                       \r
+               check = query.exec("Select guid from Note where isDirty = true and isExpunged = false and notebookGuid in (select guid from notebook where linked = true)");\r
+               if (!check) \r
+                       logger.log(logger.EXTREME, "Note SQL retrieve has failed: " +query.lastError().toString());\r
+               \r
+               // Get a list of the notes\r
+               while (query.next()) {\r
+                       guid = new String();\r
+                       guid = query.valueString(0);\r
+                       index.add(guid); \r
+               }       \r
+               \r
+               // Start getting notes\r
+               for (int i=0; i<index.size(); i++) {\r
+                       tempNote = getNote(index.get(i), true,true,false,true,true);\r
+                       notes.add(tempNote);\r
+               }\r
+               return notes;   \r
+       }\r
+       // Get a list of notes that need to be updated\r
        public List <Note> getDirtyLinked(String notebookGuid) {\r
                String guid;\r
                Note tempNote;\r
@@ -944,7 +980,7 @@ public class NoteTable {
        \r
        // Update a note resource by the hash\r
        public void updateNoteResourceGuidbyHash(String noteGuid, String resGuid, String hash) {\r
-               NSqlQuery query = new NSqlQuery(db.getConnection());\r
+               NSqlQuery query = new NSqlQuery(db.getResourceConnection());\r
 /*             query.prepare("Select guid from NoteResources where noteGuid=:noteGuid and datahash=:hex");\r
                query.bindValue(":noteGuid", noteGuid);\r
                query.bindValue(":hex", hash);\r
@@ -976,7 +1012,7 @@ public class NoteTable {
        }\r
        \r
        // Expunge notes that we don't want to synchronize\r
-       public List<String> expungeIgnoreSynchronizedNotes(List<String> notebooks, List<String>tags) {\r
+       public List<String> expungeIgnoreSynchronizedNotes(List<String> notebooks, List<String>tags, List<String> linked) {\r
                \r
                List<String> noteGuids = new ArrayList<String>();\r
                for (int i=0; i<notebooks.size(); i++) {\r
@@ -998,6 +1034,23 @@ public class NoteTable {
                                }\r
                        }\r
                }\r
+               \r
+               for (int i=0; i<linked.size(); i++) {\r
+                       String notebookGuid = db.getLinkedNotebookTable().getNotebookGuid(linked.get(i));\r
+                       if (notebookGuid != null && !notebookGuid.trim().equals("")) {\r
+                               List<Tag> linkedTags = db.getTagTable().getTagsForNotebook(notebookGuid);\r
+                               for (int j=0; j<linkedTags.size(); j++)\r
+                                       db.getTagTable().expungeTag(linkedTags.get(j).getGuid(), false);\r
+                               \r
+                               List<String> notes = findNotesByNotebook(notebookGuid);\r
+                               for (int j=0; j<notes.size(); j++) {\r
+                                       if (!isNoteDirty(notes.get(j))) {\r
+                                               expungeNote(notes.get(j), true, false);\r
+                                               noteGuids.add(notes.get(j));\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
                return noteGuids;\r
        }\r
        \r