From 5ba8584fd9688e5e01b352fdb030cb2753668e34 Mon Sep 17 00:00:00 2001 From: yuki Date: Tue, 9 Jul 2013 14:54:27 +0900 Subject: [PATCH] =?utf8?q?=E9=80=A3=E6=83=B3=E3=83=8E=E3=83=BC=E3=83=88?= =?utf8?q?=E3=83=AA=E3=82=B9=E3=83=88=E3=81=AB=E8=A1=A8=E7=A4=BA=E3=81=99?= =?utf8?q?=E3=82=8B=E3=83=8E=E3=83=BC=E3=83=88=E3=82=B3=E3=83=B3=E3=83=86?= =?utf8?q?=E3=83=B3=E3=83=84=E3=82=92=E3=83=8E=E3=83=BC=E3=83=88=E3=83=87?= =?utf8?q?=E3=83=BC=E3=82=BF=E3=83=99=E3=83=BC=E3=82=B9=E3=81=AEContentTex?= =?utf8?q?t=E3=81=8B=E3=82=89=E5=8F=96=E5=BE=97=E3=81=99=E3=82=8B=E3=82=88?= =?utf8?q?=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4=E3=80=82=E5=85=A8=E6=96=87?= =?utf8?q?=E6=A4=9C=E7=B4=A2=E5=AF=BE=E8=B1=A1=E3=81=AE=E5=86=8D=E6=A7=8B?= =?utf8?q?=E7=AF=89=E3=82=92Global=E3=81=AB=E7=A7=BB=E5=8B=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/cx/fbn/nevernote/Global.java | 29 ++++++++++++++++++++++++ src/cx/fbn/nevernote/dialog/ConfigDialog.java | 20 +--------------- src/cx/fbn/nevernote/gui/RensoNoteListItem.java | 3 ++- src/cx/fbn/nevernote/sql/DatabaseConnection.java | 7 +----- src/cx/fbn/nevernote/sql/NoteTable.java | 28 +++++++++++++++++++++++ src/cx/fbn/nevernote/sql/REnSearch.java | 1 - 6 files changed, 61 insertions(+), 27 deletions(-) diff --git a/src/cx/fbn/nevernote/Global.java b/src/cx/fbn/nevernote/Global.java index 8c18ab5..239520f 100644 --- a/src/cx/fbn/nevernote/Global.java +++ b/src/cx/fbn/nevernote/Global.java @@ -53,6 +53,7 @@ import cx.fbn.nevernote.config.StartupConfig; import cx.fbn.nevernote.gui.ContainsAttributeFilterTable; import cx.fbn.nevernote.gui.DateAttributeFilterTable; import cx.fbn.nevernote.gui.ShortcutKeys; +import cx.fbn.nevernote.sql.driver.NSqlQuery; import cx.fbn.nevernote.utilities.ApplicationLogger; import cx.fbn.nevernote.utilities.Pair; @@ -2342,5 +2343,33 @@ public class Global { return plainText; } + + // 全文検索機能の対象となるテーブルとカラムを再構築 + public static boolean rebuildFullTextTarget(NSqlQuery query) { + StringBuilder noteTableTarget = new StringBuilder(); + boolean success = true; + + if (Global.indexNoteBody()) { + noteTableTarget.append("CONTENTTEXT"); + } + if (Global.indexNoteTitle()) { + if (noteTableTarget.length() > 0) { + noteTableTarget.append(", "); + } + noteTableTarget.append("TITLE"); + } + + // TODO 他の項目もあとで追加 + + if (noteTableTarget.length() > 0) { + query.prepare("CALL FTL_CREATE_INDEX('PUBLIC', 'NOTE', :column);"); + query.bindValue(":column", noteTableTarget.toString()); + if (!query.exec()) { + success = false; + } + } + + return success; + } } diff --git a/src/cx/fbn/nevernote/dialog/ConfigDialog.java b/src/cx/fbn/nevernote/dialog/ConfigDialog.java index 2b285c6..98ec261 100644 --- a/src/cx/fbn/nevernote/dialog/ConfigDialog.java +++ b/src/cx/fbn/nevernote/dialog/ConfigDialog.java @@ -245,25 +245,7 @@ public class ConfigDialog extends QDialog { // 全文検索の対象項目を再設定 NSqlQuery query = new NSqlQuery(conn.getConnection()); query.exec("CALL FTL_DROP_ALL();"); // カラム単位で削除できないので一度全部消して、再構築 - - StringBuilder noteTableTarget = new StringBuilder(); - if (Global.indexNoteBody()) { - noteTableTarget.append("CONTENTTEXT"); - } - if (Global.indexNoteTitle()) { - if (noteTableTarget.length() > 0) { - noteTableTarget.append(", "); - } - noteTableTarget.append("TITLE"); - } - - // TODO 他の項目もあとで追加 - - if (noteTableTarget.length() > 0) { - query.prepare("CALL FTL_CREATE_INDEX('PUBLIC', 'NOTE', :column);"); - query.bindValue(":column", noteTableTarget.toString()); - query.exec(); - } + Global.rebuildFullTextTarget(query); close(); } diff --git a/src/cx/fbn/nevernote/gui/RensoNoteListItem.java b/src/cx/fbn/nevernote/gui/RensoNoteListItem.java index e0842f6..732a0ef 100644 --- a/src/cx/fbn/nevernote/gui/RensoNoteListItem.java +++ b/src/cx/fbn/nevernote/gui/RensoNoteListItem.java @@ -81,7 +81,8 @@ public class RensoNoteListItem extends QWidget{ this.tagNames = new String(sb); // this.noteContent = new String(note.getContent()); - this.noteContent = Global.extractPlainText(conn.getNoteTable().getNoteContentNoUTFConversion(note.getGuid())); +// this.noteContent = Global.extractPlainText(conn.getNoteTable().getNoteContentNoUTFConversion(note.getGuid())); + this.noteContent = conn.getNoteTable().getNoteContentText(note.getGuid()); palette = new QPalette(); palette.setColor(QPalette.ColorRole.Window, new QColor(255, 255, 255)); this.setPalette(palette); diff --git a/src/cx/fbn/nevernote/sql/DatabaseConnection.java b/src/cx/fbn/nevernote/sql/DatabaseConnection.java index deefdc8..1ea7e23 100644 --- a/src/cx/fbn/nevernote/sql/DatabaseConnection.java +++ b/src/cx/fbn/nevernote/sql/DatabaseConnection.java @@ -311,12 +311,7 @@ public class DatabaseConnection { // 全文検索のための準備 query.exec("CREATE ALIAS IF NOT EXISTS FTL_INIT FOR \"org.h2.fulltext.FullTextLucene.init\""); query.exec("CALL FTL_INIT()"); - if (Global.indexNoteBody()) { - query.exec("CALL FTL_CREATE_INDEX('PUBLIC', 'NOTE', 'CONTENTTEXT');"); - } - if (Global.indexNoteTitle()) { - query.exec("CALL FTL_CREATE_INDEX('PUBLIC', 'NOTE', 'TITLE');"); - } + Global.rebuildFullTextTarget(query); } } diff --git a/src/cx/fbn/nevernote/sql/NoteTable.java b/src/cx/fbn/nevernote/sql/NoteTable.java index 181d222..36c0dca 100644 --- a/src/cx/fbn/nevernote/sql/NoteTable.java +++ b/src/cx/fbn/nevernote/sql/NoteTable.java @@ -1770,7 +1770,35 @@ public class NoteTable { * * boolean retVal = query.valueBoolean(0, false); return retVal; } */ + + // ノートコンテンツのプレーンテキストを取得 + public String getNoteContentText(String noteGuid) { + + if (noteGuid == null) + return null; + if (noteGuid.trim().equals("")) + return null; + NSqlQuery query = new NSqlQuery(db.getConnection()); + query.prepare("Select contentText from Note where guid=:guid"); + query.bindValue(":guid", noteGuid); + if (!query.exec()) { + logger.log(logger.MEDIUM, "Noteテーブルからプレーンコンテンツの取得失敗"); + logger.log(logger.MEDIUM, query.lastError()); + return null; + } + if (!query.next()) { + logger.log(logger.EXTREME, "SQL Retrieve failed for note guid " + + noteGuid + " in getNotePlainContent()"); + logger.log(logger.EXTREME, " -> " + query.lastError().toString()); + logger.log(logger.EXTREME, " -> " + query.lastError()); + return null; + } + + String noteContentText = query.valueString(0); + + return noteContentText; + } } diff --git a/src/cx/fbn/nevernote/sql/REnSearch.java b/src/cx/fbn/nevernote/sql/REnSearch.java index 4ee21b7..bafb04b 100644 --- a/src/cx/fbn/nevernote/sql/REnSearch.java +++ b/src/cx/fbn/nevernote/sql/REnSearch.java @@ -380,7 +380,6 @@ public class REnSearch { private void parseTerms(List words) { for (int i=0; i