You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
384 lines
33 KiB
384 lines
33 KiB
<html>
|
|
<head>
|
|
<title>NotesDatabaseHelper.java</title>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<style type="text/css">
|
|
.s0 { color: #8c8c8c; font-style: italic;}
|
|
.s1 { color: #080808;}
|
|
.s2 { color: #0033b3;}
|
|
.s3 { color: #067d17;}
|
|
.s4 { color: #1750eb;}
|
|
.s5 { color: #8c8c8c; font-style: italic;}
|
|
</style>
|
|
</head>
|
|
<body bgcolor="#ffffff">
|
|
<table CELLSPACING=0 CELLPADDING=5 COLS=1 WIDTH="100%" BGCOLOR="#c0c0c0" >
|
|
<tr><td><center>
|
|
<font face="Arial, Helvetica" color="#000000">
|
|
NotesDatabaseHelper.java</font>
|
|
</center></td></tr></table>
|
|
<pre><span class="s0">/*
|
|
* Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/</span>
|
|
|
|
<span class="s2">package </span><span class="s1">net.micode.notes.data;</span>
|
|
|
|
<span class="s2">import </span><span class="s1">android.content.ContentValues;</span>
|
|
<span class="s2">import </span><span class="s1">android.content.Context;</span>
|
|
<span class="s2">import </span><span class="s1">android.database.sqlite.SQLiteDatabase;</span>
|
|
<span class="s2">import </span><span class="s1">android.database.sqlite.SQLiteOpenHelper;</span>
|
|
<span class="s2">import </span><span class="s1">android.util.Log;</span>
|
|
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.data.Notes.DataColumns;</span>
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.data.Notes.DataConstants;</span>
|
|
<span class="s2">import </span><span class="s1">net.micode.notes.data.Notes.NoteColumns;</span>
|
|
|
|
|
|
<span class="s2">public class </span><span class="s1">NotesDatabaseHelper </span><span class="s2">extends </span><span class="s1">SQLiteOpenHelper {</span>
|
|
<span class="s2">private static final </span><span class="s1">String DB_NAME = </span><span class="s3">"note.db"</span><span class="s1">;</span>
|
|
|
|
<span class="s2">private static final int </span><span class="s1">DB_VERSION = </span><span class="s4">4</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public interface </span><span class="s1">TABLE {</span>
|
|
<span class="s2">public static final </span><span class="s1">String NOTE = </span><span class="s3">"note"</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public static final </span><span class="s1">String DATA = </span><span class="s3">"data"</span><span class="s1">;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">private static final </span><span class="s1">String TAG = </span><span class="s3">"NotesDatabaseHelper"</span><span class="s1">;</span>
|
|
|
|
<span class="s2">private static </span><span class="s1">NotesDatabaseHelper mInstance;</span>
|
|
|
|
<span class="s2">private static final </span><span class="s1">String CREATE_NOTE_TABLE_SQL =</span>
|
|
<span class="s3">"CREATE TABLE " </span><span class="s1">+ TABLE.NOTE + </span><span class="s3">"(" </span><span class="s1">+</span>
|
|
<span class="s1">NoteColumns.ID + </span><span class="s3">" INTEGER PRIMARY KEY," </span><span class="s1">+</span>
|
|
<span class="s1">NoteColumns.PARENT_ID + </span><span class="s3">" INTEGER NOT NULL DEFAULT 0," </span><span class="s1">+</span>
|
|
<span class="s1">NoteColumns.ALERTED_DATE + </span><span class="s3">" INTEGER NOT NULL DEFAULT 0," </span><span class="s1">+</span>
|
|
<span class="s1">NoteColumns.BG_COLOR_ID + </span><span class="s3">" INTEGER NOT NULL DEFAULT 0," </span><span class="s1">+</span>
|
|
<span class="s1">NoteColumns.CREATED_DATE + </span><span class="s3">" INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," </span><span class="s1">+</span>
|
|
<span class="s1">NoteColumns.HAS_ATTACHMENT + </span><span class="s3">" INTEGER NOT NULL DEFAULT 0," </span><span class="s1">+</span>
|
|
<span class="s1">NoteColumns.MODIFIED_DATE + </span><span class="s3">" INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," </span><span class="s1">+</span>
|
|
<span class="s1">NoteColumns.NOTES_COUNT + </span><span class="s3">" INTEGER NOT NULL DEFAULT 0," </span><span class="s1">+</span>
|
|
<span class="s1">NoteColumns.SNIPPET + </span><span class="s3">" TEXT NOT NULL DEFAULT ''," </span><span class="s1">+</span>
|
|
<span class="s1">NoteColumns.TYPE + </span><span class="s3">" INTEGER NOT NULL DEFAULT 0," </span><span class="s1">+</span>
|
|
<span class="s1">NoteColumns.WIDGET_ID + </span><span class="s3">" INTEGER NOT NULL DEFAULT 0," </span><span class="s1">+</span>
|
|
<span class="s1">NoteColumns.WIDGET_TYPE + </span><span class="s3">" INTEGER NOT NULL DEFAULT -1," </span><span class="s1">+</span>
|
|
<span class="s1">NoteColumns.SYNC_ID + </span><span class="s3">" INTEGER NOT NULL DEFAULT 0," </span><span class="s1">+</span>
|
|
<span class="s1">NoteColumns.LOCAL_MODIFIED + </span><span class="s3">" INTEGER NOT NULL DEFAULT 0," </span><span class="s1">+</span>
|
|
<span class="s1">NoteColumns.ORIGIN_PARENT_ID + </span><span class="s3">" INTEGER NOT NULL DEFAULT 0," </span><span class="s1">+</span>
|
|
<span class="s1">NoteColumns.GTASK_ID + </span><span class="s3">" TEXT NOT NULL DEFAULT ''," </span><span class="s1">+</span>
|
|
<span class="s1">NoteColumns.VERSION + </span><span class="s3">" INTEGER NOT NULL DEFAULT 0" </span><span class="s1">+</span>
|
|
<span class="s3">")"</span><span class="s1">;</span>
|
|
|
|
<span class="s2">private static final </span><span class="s1">String CREATE_DATA_TABLE_SQL =</span>
|
|
<span class="s3">"CREATE TABLE " </span><span class="s1">+ TABLE.DATA + </span><span class="s3">"(" </span><span class="s1">+</span>
|
|
<span class="s1">DataColumns.ID + </span><span class="s3">" INTEGER PRIMARY KEY," </span><span class="s1">+</span>
|
|
<span class="s1">DataColumns.MIME_TYPE + </span><span class="s3">" TEXT NOT NULL," </span><span class="s1">+</span>
|
|
<span class="s1">DataColumns.NOTE_ID + </span><span class="s3">" INTEGER NOT NULL DEFAULT 0," </span><span class="s1">+</span>
|
|
<span class="s1">NoteColumns.CREATED_DATE + </span><span class="s3">" INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," </span><span class="s1">+</span>
|
|
<span class="s1">NoteColumns.MODIFIED_DATE + </span><span class="s3">" INTEGER NOT NULL DEFAULT (strftime('%s','now') * 1000)," </span><span class="s1">+</span>
|
|
<span class="s1">DataColumns.CONTENT + </span><span class="s3">" TEXT NOT NULL DEFAULT ''," </span><span class="s1">+</span>
|
|
<span class="s1">DataColumns.DATA1 + </span><span class="s3">" INTEGER," </span><span class="s1">+</span>
|
|
<span class="s1">DataColumns.DATA2 + </span><span class="s3">" INTEGER," </span><span class="s1">+</span>
|
|
<span class="s1">DataColumns.DATA3 + </span><span class="s3">" TEXT NOT NULL DEFAULT ''," </span><span class="s1">+</span>
|
|
<span class="s1">DataColumns.DATA4 + </span><span class="s3">" TEXT NOT NULL DEFAULT ''," </span><span class="s1">+</span>
|
|
<span class="s1">DataColumns.DATA5 + </span><span class="s3">" TEXT NOT NULL DEFAULT ''" </span><span class="s1">+</span>
|
|
<span class="s3">")"</span><span class="s1">;</span>
|
|
|
|
<span class="s2">private static final </span><span class="s1">String CREATE_DATA_NOTE_ID_INDEX_SQL =</span>
|
|
<span class="s3">"CREATE INDEX IF NOT EXISTS note_id_index ON " </span><span class="s1">+</span>
|
|
<span class="s1">TABLE.DATA + </span><span class="s3">"(" </span><span class="s1">+ DataColumns.NOTE_ID + </span><span class="s3">");"</span><span class="s1">;</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Increase folder's note count when move note to the folder</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">private static final </span><span class="s1">String NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER =</span>
|
|
<span class="s3">"CREATE TRIGGER increase_folder_count_on_update "</span><span class="s1">+</span>
|
|
<span class="s3">" AFTER UPDATE OF " </span><span class="s1">+ NoteColumns.PARENT_ID + </span><span class="s3">" ON " </span><span class="s1">+ TABLE.NOTE +</span>
|
|
<span class="s3">" BEGIN " </span><span class="s1">+</span>
|
|
<span class="s3">" UPDATE " </span><span class="s1">+ TABLE.NOTE +</span>
|
|
<span class="s3">" SET " </span><span class="s1">+ NoteColumns.NOTES_COUNT + </span><span class="s3">"=" </span><span class="s1">+ NoteColumns.NOTES_COUNT + </span><span class="s3">" + 1" </span><span class="s1">+</span>
|
|
<span class="s3">" WHERE " </span><span class="s1">+ NoteColumns.ID + </span><span class="s3">"=new." </span><span class="s1">+ NoteColumns.PARENT_ID + </span><span class="s3">";" </span><span class="s1">+</span>
|
|
<span class="s3">" END"</span><span class="s1">;</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Decrease folder's note count when move note from folder</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">private static final </span><span class="s1">String NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER =</span>
|
|
<span class="s3">"CREATE TRIGGER decrease_folder_count_on_update " </span><span class="s1">+</span>
|
|
<span class="s3">" AFTER UPDATE OF " </span><span class="s1">+ NoteColumns.PARENT_ID + </span><span class="s3">" ON " </span><span class="s1">+ TABLE.NOTE +</span>
|
|
<span class="s3">" BEGIN " </span><span class="s1">+</span>
|
|
<span class="s3">" UPDATE " </span><span class="s1">+ TABLE.NOTE +</span>
|
|
<span class="s3">" SET " </span><span class="s1">+ NoteColumns.NOTES_COUNT + </span><span class="s3">"=" </span><span class="s1">+ NoteColumns.NOTES_COUNT + </span><span class="s3">"-1" </span><span class="s1">+</span>
|
|
<span class="s3">" WHERE " </span><span class="s1">+ NoteColumns.ID + </span><span class="s3">"=old." </span><span class="s1">+ NoteColumns.PARENT_ID +</span>
|
|
<span class="s3">" AND " </span><span class="s1">+ NoteColumns.NOTES_COUNT + </span><span class="s3">">0" </span><span class="s1">+ </span><span class="s3">";" </span><span class="s1">+</span>
|
|
<span class="s3">" END"</span><span class="s1">;</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Increase folder's note count when insert new note to the folder</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">private static final </span><span class="s1">String NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER =</span>
|
|
<span class="s3">"CREATE TRIGGER increase_folder_count_on_insert " </span><span class="s1">+</span>
|
|
<span class="s3">" AFTER INSERT ON " </span><span class="s1">+ TABLE.NOTE +</span>
|
|
<span class="s3">" BEGIN " </span><span class="s1">+</span>
|
|
<span class="s3">" UPDATE " </span><span class="s1">+ TABLE.NOTE +</span>
|
|
<span class="s3">" SET " </span><span class="s1">+ NoteColumns.NOTES_COUNT + </span><span class="s3">"=" </span><span class="s1">+ NoteColumns.NOTES_COUNT + </span><span class="s3">" + 1" </span><span class="s1">+</span>
|
|
<span class="s3">" WHERE " </span><span class="s1">+ NoteColumns.ID + </span><span class="s3">"=new." </span><span class="s1">+ NoteColumns.PARENT_ID + </span><span class="s3">";" </span><span class="s1">+</span>
|
|
<span class="s3">" END"</span><span class="s1">;</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Decrease folder's note count when delete note from the folder</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">private static final </span><span class="s1">String NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER =</span>
|
|
<span class="s3">"CREATE TRIGGER decrease_folder_count_on_delete " </span><span class="s1">+</span>
|
|
<span class="s3">" AFTER DELETE ON " </span><span class="s1">+ TABLE.NOTE +</span>
|
|
<span class="s3">" BEGIN " </span><span class="s1">+</span>
|
|
<span class="s3">" UPDATE " </span><span class="s1">+ TABLE.NOTE +</span>
|
|
<span class="s3">" SET " </span><span class="s1">+ NoteColumns.NOTES_COUNT + </span><span class="s3">"=" </span><span class="s1">+ NoteColumns.NOTES_COUNT + </span><span class="s3">"-1" </span><span class="s1">+</span>
|
|
<span class="s3">" WHERE " </span><span class="s1">+ NoteColumns.ID + </span><span class="s3">"=old." </span><span class="s1">+ NoteColumns.PARENT_ID +</span>
|
|
<span class="s3">" AND " </span><span class="s1">+ NoteColumns.NOTES_COUNT + </span><span class="s3">">0;" </span><span class="s1">+</span>
|
|
<span class="s3">" END"</span><span class="s1">;</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Update note's content when insert data with type {</span><span class="s5">@link </span><span class="s0">DataConstants#NOTE}</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">private static final </span><span class="s1">String DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER =</span>
|
|
<span class="s3">"CREATE TRIGGER update_note_content_on_insert " </span><span class="s1">+</span>
|
|
<span class="s3">" AFTER INSERT ON " </span><span class="s1">+ TABLE.DATA +</span>
|
|
<span class="s3">" WHEN new." </span><span class="s1">+ DataColumns.MIME_TYPE + </span><span class="s3">"='" </span><span class="s1">+ DataConstants.NOTE + </span><span class="s3">"'" </span><span class="s1">+</span>
|
|
<span class="s3">" BEGIN" </span><span class="s1">+</span>
|
|
<span class="s3">" UPDATE " </span><span class="s1">+ TABLE.NOTE +</span>
|
|
<span class="s3">" SET " </span><span class="s1">+ NoteColumns.SNIPPET + </span><span class="s3">"=new." </span><span class="s1">+ DataColumns.CONTENT +</span>
|
|
<span class="s3">" WHERE " </span><span class="s1">+ NoteColumns.ID + </span><span class="s3">"=new." </span><span class="s1">+ DataColumns.NOTE_ID + </span><span class="s3">";" </span><span class="s1">+</span>
|
|
<span class="s3">" END"</span><span class="s1">;</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Update note's content when data with {</span><span class="s5">@link </span><span class="s0">DataConstants#NOTE} type has changed</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">private static final </span><span class="s1">String DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER =</span>
|
|
<span class="s3">"CREATE TRIGGER update_note_content_on_update " </span><span class="s1">+</span>
|
|
<span class="s3">" AFTER UPDATE ON " </span><span class="s1">+ TABLE.DATA +</span>
|
|
<span class="s3">" WHEN old." </span><span class="s1">+ DataColumns.MIME_TYPE + </span><span class="s3">"='" </span><span class="s1">+ DataConstants.NOTE + </span><span class="s3">"'" </span><span class="s1">+</span>
|
|
<span class="s3">" BEGIN" </span><span class="s1">+</span>
|
|
<span class="s3">" UPDATE " </span><span class="s1">+ TABLE.NOTE +</span>
|
|
<span class="s3">" SET " </span><span class="s1">+ NoteColumns.SNIPPET + </span><span class="s3">"=new." </span><span class="s1">+ DataColumns.CONTENT +</span>
|
|
<span class="s3">" WHERE " </span><span class="s1">+ NoteColumns.ID + </span><span class="s3">"=new." </span><span class="s1">+ DataColumns.NOTE_ID + </span><span class="s3">";" </span><span class="s1">+</span>
|
|
<span class="s3">" END"</span><span class="s1">;</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Update note's content when data with {</span><span class="s5">@link </span><span class="s0">DataConstants#NOTE} type has deleted</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">private static final </span><span class="s1">String DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER =</span>
|
|
<span class="s3">"CREATE TRIGGER update_note_content_on_delete " </span><span class="s1">+</span>
|
|
<span class="s3">" AFTER delete ON " </span><span class="s1">+ TABLE.DATA +</span>
|
|
<span class="s3">" WHEN old." </span><span class="s1">+ DataColumns.MIME_TYPE + </span><span class="s3">"='" </span><span class="s1">+ DataConstants.NOTE + </span><span class="s3">"'" </span><span class="s1">+</span>
|
|
<span class="s3">" BEGIN" </span><span class="s1">+</span>
|
|
<span class="s3">" UPDATE " </span><span class="s1">+ TABLE.NOTE +</span>
|
|
<span class="s3">" SET " </span><span class="s1">+ NoteColumns.SNIPPET + </span><span class="s3">"=''" </span><span class="s1">+</span>
|
|
<span class="s3">" WHERE " </span><span class="s1">+ NoteColumns.ID + </span><span class="s3">"=old." </span><span class="s1">+ DataColumns.NOTE_ID + </span><span class="s3">";" </span><span class="s1">+</span>
|
|
<span class="s3">" END"</span><span class="s1">;</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Delete datas belong to note which has been deleted</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">private static final </span><span class="s1">String NOTE_DELETE_DATA_ON_DELETE_TRIGGER =</span>
|
|
<span class="s3">"CREATE TRIGGER delete_data_on_delete " </span><span class="s1">+</span>
|
|
<span class="s3">" AFTER DELETE ON " </span><span class="s1">+ TABLE.NOTE +</span>
|
|
<span class="s3">" BEGIN" </span><span class="s1">+</span>
|
|
<span class="s3">" DELETE FROM " </span><span class="s1">+ TABLE.DATA +</span>
|
|
<span class="s3">" WHERE " </span><span class="s1">+ DataColumns.NOTE_ID + </span><span class="s3">"=old." </span><span class="s1">+ NoteColumns.ID + </span><span class="s3">";" </span><span class="s1">+</span>
|
|
<span class="s3">" END"</span><span class="s1">;</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Delete notes belong to folder which has been deleted</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">private static final </span><span class="s1">String FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER =</span>
|
|
<span class="s3">"CREATE TRIGGER folder_delete_notes_on_delete " </span><span class="s1">+</span>
|
|
<span class="s3">" AFTER DELETE ON " </span><span class="s1">+ TABLE.NOTE +</span>
|
|
<span class="s3">" BEGIN" </span><span class="s1">+</span>
|
|
<span class="s3">" DELETE FROM " </span><span class="s1">+ TABLE.NOTE +</span>
|
|
<span class="s3">" WHERE " </span><span class="s1">+ NoteColumns.PARENT_ID + </span><span class="s3">"=old." </span><span class="s1">+ NoteColumns.ID + </span><span class="s3">";" </span><span class="s1">+</span>
|
|
<span class="s3">" END"</span><span class="s1">;</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* Move notes belong to folder which has been moved to trash folder</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s2">private static final </span><span class="s1">String FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER =</span>
|
|
<span class="s3">"CREATE TRIGGER folder_move_notes_on_trash " </span><span class="s1">+</span>
|
|
<span class="s3">" AFTER UPDATE ON " </span><span class="s1">+ TABLE.NOTE +</span>
|
|
<span class="s3">" WHEN new." </span><span class="s1">+ NoteColumns.PARENT_ID + </span><span class="s3">"=" </span><span class="s1">+ Notes.ID_TRASH_FOLER +</span>
|
|
<span class="s3">" BEGIN" </span><span class="s1">+</span>
|
|
<span class="s3">" UPDATE " </span><span class="s1">+ TABLE.NOTE +</span>
|
|
<span class="s3">" SET " </span><span class="s1">+ NoteColumns.PARENT_ID + </span><span class="s3">"=" </span><span class="s1">+ Notes.ID_TRASH_FOLER +</span>
|
|
<span class="s3">" WHERE " </span><span class="s1">+ NoteColumns.PARENT_ID + </span><span class="s3">"=old." </span><span class="s1">+ NoteColumns.ID + </span><span class="s3">";" </span><span class="s1">+</span>
|
|
<span class="s3">" END"</span><span class="s1">;</span>
|
|
|
|
<span class="s2">public </span><span class="s1">NotesDatabaseHelper(Context context) {</span>
|
|
<span class="s2">super</span><span class="s1">(context, DB_NAME, </span><span class="s2">null</span><span class="s1">, DB_VERSION);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public void </span><span class="s1">createNoteTable(SQLiteDatabase db) {</span>
|
|
<span class="s1">db.execSQL(CREATE_NOTE_TABLE_SQL);</span>
|
|
<span class="s1">reCreateNoteTableTriggers(db);</span>
|
|
<span class="s1">createSystemFolder(db);</span>
|
|
<span class="s1">Log.d(TAG, </span><span class="s3">"note table has been created"</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">private void </span><span class="s1">reCreateNoteTableTriggers(SQLiteDatabase db) {</span>
|
|
<span class="s1">db.execSQL(</span><span class="s3">"DROP TRIGGER IF EXISTS increase_folder_count_on_update"</span><span class="s1">);</span>
|
|
<span class="s1">db.execSQL(</span><span class="s3">"DROP TRIGGER IF EXISTS decrease_folder_count_on_update"</span><span class="s1">);</span>
|
|
<span class="s1">db.execSQL(</span><span class="s3">"DROP TRIGGER IF EXISTS decrease_folder_count_on_delete"</span><span class="s1">);</span>
|
|
<span class="s1">db.execSQL(</span><span class="s3">"DROP TRIGGER IF EXISTS delete_data_on_delete"</span><span class="s1">);</span>
|
|
<span class="s1">db.execSQL(</span><span class="s3">"DROP TRIGGER IF EXISTS increase_folder_count_on_insert"</span><span class="s1">);</span>
|
|
<span class="s1">db.execSQL(</span><span class="s3">"DROP TRIGGER IF EXISTS folder_delete_notes_on_delete"</span><span class="s1">);</span>
|
|
<span class="s1">db.execSQL(</span><span class="s3">"DROP TRIGGER IF EXISTS folder_move_notes_on_trash"</span><span class="s1">);</span>
|
|
|
|
<span class="s1">db.execSQL(NOTE_INCREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER);</span>
|
|
<span class="s1">db.execSQL(NOTE_DECREASE_FOLDER_COUNT_ON_UPDATE_TRIGGER);</span>
|
|
<span class="s1">db.execSQL(NOTE_DECREASE_FOLDER_COUNT_ON_DELETE_TRIGGER);</span>
|
|
<span class="s1">db.execSQL(NOTE_DELETE_DATA_ON_DELETE_TRIGGER);</span>
|
|
<span class="s1">db.execSQL(NOTE_INCREASE_FOLDER_COUNT_ON_INSERT_TRIGGER);</span>
|
|
<span class="s1">db.execSQL(FOLDER_DELETE_NOTES_ON_DELETE_TRIGGER);</span>
|
|
<span class="s1">db.execSQL(FOLDER_MOVE_NOTES_ON_TRASH_TRIGGER);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">private void </span><span class="s1">createSystemFolder(SQLiteDatabase db) {</span>
|
|
<span class="s1">ContentValues values = </span><span class="s2">new </span><span class="s1">ContentValues();</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* call record foler for call notes</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s1">values.put(NoteColumns.ID, Notes.ID_CALL_RECORD_FOLDER);</span>
|
|
<span class="s1">values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM);</span>
|
|
<span class="s1">db.insert(TABLE.NOTE, </span><span class="s2">null</span><span class="s1">, values);</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* root folder which is default folder</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s1">values.clear();</span>
|
|
<span class="s1">values.put(NoteColumns.ID, Notes.ID_ROOT_FOLDER);</span>
|
|
<span class="s1">values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM);</span>
|
|
<span class="s1">db.insert(TABLE.NOTE, </span><span class="s2">null</span><span class="s1">, values);</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* temporary folder which is used for moving note</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s1">values.clear();</span>
|
|
<span class="s1">values.put(NoteColumns.ID, Notes.ID_TEMPARAY_FOLDER);</span>
|
|
<span class="s1">values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM);</span>
|
|
<span class="s1">db.insert(TABLE.NOTE, </span><span class="s2">null</span><span class="s1">, values);</span>
|
|
|
|
<span class="s0">/**</span>
|
|
<span class="s0">* create trash folder</span>
|
|
<span class="s0">*/</span>
|
|
<span class="s1">values.clear();</span>
|
|
<span class="s1">values.put(NoteColumns.ID, Notes.ID_TRASH_FOLER);</span>
|
|
<span class="s1">values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM);</span>
|
|
<span class="s1">db.insert(TABLE.NOTE, </span><span class="s2">null</span><span class="s1">, values);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">public void </span><span class="s1">createDataTable(SQLiteDatabase db) {</span>
|
|
<span class="s1">db.execSQL(CREATE_DATA_TABLE_SQL);</span>
|
|
<span class="s1">reCreateDataTableTriggers(db);</span>
|
|
<span class="s1">db.execSQL(CREATE_DATA_NOTE_ID_INDEX_SQL);</span>
|
|
<span class="s1">Log.d(TAG, </span><span class="s3">"data table has been created"</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">private void </span><span class="s1">reCreateDataTableTriggers(SQLiteDatabase db) {</span>
|
|
<span class="s1">db.execSQL(</span><span class="s3">"DROP TRIGGER IF EXISTS update_note_content_on_insert"</span><span class="s1">);</span>
|
|
<span class="s1">db.execSQL(</span><span class="s3">"DROP TRIGGER IF EXISTS update_note_content_on_update"</span><span class="s1">);</span>
|
|
<span class="s1">db.execSQL(</span><span class="s3">"DROP TRIGGER IF EXISTS update_note_content_on_delete"</span><span class="s1">);</span>
|
|
|
|
<span class="s1">db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_INSERT_TRIGGER);</span>
|
|
<span class="s1">db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_UPDATE_TRIGGER);</span>
|
|
<span class="s1">db.execSQL(DATA_UPDATE_NOTE_CONTENT_ON_DELETE_TRIGGER);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">static synchronized </span><span class="s1">NotesDatabaseHelper getInstance(Context context) {</span>
|
|
<span class="s2">if </span><span class="s1">(mInstance == </span><span class="s2">null</span><span class="s1">) {</span>
|
|
<span class="s1">mInstance = </span><span class="s2">new </span><span class="s1">NotesDatabaseHelper(context);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s2">return </span><span class="s1">mInstance;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s1">@Override</span>
|
|
<span class="s2">public void </span><span class="s1">onCreate(SQLiteDatabase db) {</span>
|
|
<span class="s1">createNoteTable(db);</span>
|
|
<span class="s1">createDataTable(db);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s1">@Override</span>
|
|
<span class="s2">public void </span><span class="s1">onUpgrade(SQLiteDatabase db, </span><span class="s2">int </span><span class="s1">oldVersion, </span><span class="s2">int </span><span class="s1">newVersion) {</span>
|
|
<span class="s2">boolean </span><span class="s1">reCreateTriggers = </span><span class="s2">false</span><span class="s1">;</span>
|
|
<span class="s2">boolean </span><span class="s1">skipV2 = </span><span class="s2">false</span><span class="s1">;</span>
|
|
|
|
<span class="s2">if </span><span class="s1">(oldVersion == </span><span class="s4">1</span><span class="s1">) {</span>
|
|
<span class="s1">upgradeToV2(db);</span>
|
|
<span class="s1">skipV2 = </span><span class="s2">true</span><span class="s1">; </span><span class="s0">// this upgrade including the upgrade from v2 to v3</span>
|
|
<span class="s1">oldVersion++;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">if </span><span class="s1">(oldVersion == </span><span class="s4">2 </span><span class="s1">&& !skipV2) {</span>
|
|
<span class="s1">upgradeToV3(db);</span>
|
|
<span class="s1">reCreateTriggers = </span><span class="s2">true</span><span class="s1">;</span>
|
|
<span class="s1">oldVersion++;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">if </span><span class="s1">(oldVersion == </span><span class="s4">3</span><span class="s1">) {</span>
|
|
<span class="s1">upgradeToV4(db);</span>
|
|
<span class="s1">oldVersion++;</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">if </span><span class="s1">(reCreateTriggers) {</span>
|
|
<span class="s1">reCreateNoteTableTriggers(db);</span>
|
|
<span class="s1">reCreateDataTableTriggers(db);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">if </span><span class="s1">(oldVersion != newVersion) {</span>
|
|
<span class="s2">throw new </span><span class="s1">IllegalStateException(</span><span class="s3">"Upgrade notes database to version " </span><span class="s1">+ newVersion</span>
|
|
<span class="s1">+ </span><span class="s3">"fails"</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">private void </span><span class="s1">upgradeToV2(SQLiteDatabase db) {</span>
|
|
<span class="s1">db.execSQL(</span><span class="s3">"DROP TABLE IF EXISTS " </span><span class="s1">+ TABLE.NOTE);</span>
|
|
<span class="s1">db.execSQL(</span><span class="s3">"DROP TABLE IF EXISTS " </span><span class="s1">+ TABLE.DATA);</span>
|
|
<span class="s1">createNoteTable(db);</span>
|
|
<span class="s1">createDataTable(db);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">private void </span><span class="s1">upgradeToV3(SQLiteDatabase db) {</span>
|
|
<span class="s0">// drop unused triggers</span>
|
|
<span class="s1">db.execSQL(</span><span class="s3">"DROP TRIGGER IF EXISTS update_note_modified_date_on_insert"</span><span class="s1">);</span>
|
|
<span class="s1">db.execSQL(</span><span class="s3">"DROP TRIGGER IF EXISTS update_note_modified_date_on_delete"</span><span class="s1">);</span>
|
|
<span class="s1">db.execSQL(</span><span class="s3">"DROP TRIGGER IF EXISTS update_note_modified_date_on_update"</span><span class="s1">);</span>
|
|
<span class="s0">// add a column for gtask id</span>
|
|
<span class="s1">db.execSQL(</span><span class="s3">"ALTER TABLE " </span><span class="s1">+ TABLE.NOTE + </span><span class="s3">" ADD COLUMN " </span><span class="s1">+ NoteColumns.GTASK_ID</span>
|
|
<span class="s1">+ </span><span class="s3">" TEXT NOT NULL DEFAULT ''"</span><span class="s1">);</span>
|
|
<span class="s0">// add a trash system folder</span>
|
|
<span class="s1">ContentValues values = </span><span class="s2">new </span><span class="s1">ContentValues();</span>
|
|
<span class="s1">values.put(NoteColumns.ID, Notes.ID_TRASH_FOLER);</span>
|
|
<span class="s1">values.put(NoteColumns.TYPE, Notes.TYPE_SYSTEM);</span>
|
|
<span class="s1">db.insert(TABLE.NOTE, </span><span class="s2">null</span><span class="s1">, values);</span>
|
|
<span class="s1">}</span>
|
|
|
|
<span class="s2">private void </span><span class="s1">upgradeToV4(SQLiteDatabase db) {</span>
|
|
<span class="s1">db.execSQL(</span><span class="s3">"ALTER TABLE " </span><span class="s1">+ TABLE.NOTE + </span><span class="s3">" ADD COLUMN " </span><span class="s1">+ NoteColumns.VERSION</span>
|
|
<span class="s1">+ </span><span class="s3">" INTEGER NOT NULL DEFAULT 0"</span><span class="s1">);</span>
|
|
<span class="s1">}</span>
|
|
<span class="s1">}</span>
|
|
</pre>
|
|
</body>
|
|
</html> |