/* * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * * This library is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library. If not, see . * * Authors: Sankar P * Srinivasa Ragavan */ #if !defined (__CAMEL_H_INSIDE__) && !defined (CAMEL_COMPILATION) #error "Only can be included directly." #endif #ifndef CAMEL_DB_H #define CAMEL_DB_H #include #include G_BEGIN_DECLS /** * CAMEL_DB_FILE: * * Since: 2.24 **/ #define CAMEL_DB_FILE "folders.db" /* Hopefully no one will create a folder named EVO_IN_meM_hAnDlE */ /** * CAMEL_DB_IN_MEMORY_TABLE: * * Since: 2.26 **/ #define CAMEL_DB_IN_MEMORY_TABLE "EVO_IN_meM_hAnDlE.temp" /** * CAMEL_DB_IN_MEMORY_DB: * * Since: 2.26 **/ #define CAMEL_DB_IN_MEMORY_DB "EVO_IN_meM_hAnDlE" /** * CAMEL_DB_IN_MEMORY_TABLE_LIMIT: * * Since: 2.26 **/ #define CAMEL_DB_IN_MEMORY_TABLE_LIMIT 100000 typedef struct _CamelDBPrivate CamelDBPrivate; /** * CamelDBCollate: * * Since: 2.24 **/ typedef gint (*CamelDBCollate)(gpointer, gint, gconstpointer, gint, gconstpointer ); /** * CamelDB: * * Since: 2.24 **/ struct _CamelDB { sqlite3 *db; /* this lock has been replaced with a rw lock which sits inside priv. * This is currently unused. Keeping it, not to break the ABI */ GMutex *lock; CamelDBPrivate *priv; }; /** * CAMEL_DB_FREE_CACHE_SIZE: * * Since: 2.24 **/ #define CAMEL_DB_FREE_CACHE_SIZE 2 * 1024 * 1024 /** * CAMEL_DB_SLEEP_INTERVAL: * * Since: 2.24 **/ #define CAMEL_DB_SLEEP_INTERVAL 1*10*10 /** * CAMEL_DB_RELEASE_SQLITE_MEMORY: * * Since: 2.24 **/ #define CAMEL_DB_RELEASE_SQLITE_MEMORY if(!g_getenv("CAMEL_SQLITE_FREE_CACHE")) sqlite3_release_memory(CAMEL_DB_FREE_CACHE_SIZE); /** * CAMEL_DB_USE_SHARED_CACHE: * * Since: 2.24 **/ #define CAMEL_DB_USE_SHARED_CACHE if(g_getenv("CAMEL_SQLITE_SHARED_CACHE")) sqlite3_enable_shared_cache(TRUE); /** * CamelMIRecord: * @uid: * Message UID * @flags: * Camel Message info flags * @msg_type: * @dirty: * @read: * boolean read status * @deleted: * boolean deleted status * @replied: * boolean replied status * @important: * boolean important status * @junk: * boolean junk status * @attachment: * boolean attachment status * @size: * size of the mail * @dsent: * date sent * @dreceived: * date received * @subject: * subject of the mail * @from: * sender * @to: * recipient * @cc: * CC members * @mlist: * message list headers * @followup_flag: * followup flag / also can be queried to see for followup or not * @followup_completed_on: * completed date, can be used to see if completed * @followup_due_by: * to see the due by date * @part: * part / references / thread id * @labels: * labels of mails also called as userflags * @usertags: * composite string of user tags * @cinfo: * content info string - composite string * @bdata: * provider specific data * @bodystructure: * * The extensive DB format, supporting basic searching and sorting. * * Since: 2.24 **/ typedef struct _CamelMIRecord { gchar *uid; guint32 flags; guint32 msg_type; guint32 dirty; gboolean read; gboolean deleted; gboolean replied; gboolean important; gboolean junk; gboolean attachment; guint32 size; time_t dsent; time_t dreceived; gchar *subject; gchar *from; gchar *to; gchar *cc; gchar *mlist; gchar *followup_flag; gchar *followup_completed_on; gchar *followup_due_by; gchar *part; gchar *labels; gchar *usertags; gchar *cinfo; gchar *bdata; gchar *bodystructure; } CamelMIRecord; /** * CamelFIRecord: * * Since: 2.24 **/ typedef struct _CamelFIRecord { gchar *folder_name; guint32 version; guint32 flags; guint32 nextuid; time_t time; guint32 saved_count; guint32 unread_count; guint32 deleted_count; guint32 junk_count; guint32 visible_count; guint32 jnd_count; /* Junked not deleted */ gchar *bdata; } CamelFIRecord; typedef struct _CamelDB CamelDB; /** * CamelDBKnownColumnNames: * * Since: 3.4 **/ typedef enum { CAMEL_DB_COLUMN_UNKNOWN = -1, CAMEL_DB_COLUMN_ATTACHMENT, CAMEL_DB_COLUMN_BDATA, CAMEL_DB_COLUMN_BODYSTRUCTURE, CAMEL_DB_COLUMN_CINFO, CAMEL_DB_COLUMN_DELETED, CAMEL_DB_COLUMN_DELETED_COUNT, CAMEL_DB_COLUMN_DRECEIVED, CAMEL_DB_COLUMN_DSENT, CAMEL_DB_COLUMN_FLAGS, CAMEL_DB_COLUMN_FOLDER_NAME, CAMEL_DB_COLUMN_FOLLOWUP_COMPLETED_ON, CAMEL_DB_COLUMN_FOLLOWUP_DUE_BY, CAMEL_DB_COLUMN_FOLLOWUP_FLAG, CAMEL_DB_COLUMN_IMPORTANT, CAMEL_DB_COLUMN_JND_COUNT, CAMEL_DB_COLUMN_JUNK, CAMEL_DB_COLUMN_JUNK_COUNT, CAMEL_DB_COLUMN_LABELS, CAMEL_DB_COLUMN_MAIL_CC, CAMEL_DB_COLUMN_MAIL_FROM, CAMEL_DB_COLUMN_MAIL_TO, CAMEL_DB_COLUMN_MLIST, CAMEL_DB_COLUMN_NEXTUID, CAMEL_DB_COLUMN_PART, CAMEL_DB_COLUMN_PREVIEW, CAMEL_DB_COLUMN_READ, CAMEL_DB_COLUMN_REPLIED, CAMEL_DB_COLUMN_SAVED_COUNT, CAMEL_DB_COLUMN_SIZE, CAMEL_DB_COLUMN_SUBJECT, CAMEL_DB_COLUMN_TIME, CAMEL_DB_COLUMN_UID, CAMEL_DB_COLUMN_UNREAD_COUNT, CAMEL_DB_COLUMN_USERTAGS, CAMEL_DB_COLUMN_VERSION, CAMEL_DB_COLUMN_VISIBLE_COUNT, CAMEL_DB_COLUMN_VUID } CamelDBKnownColumnNames; CamelDBKnownColumnNames camel_db_get_column_ident (GHashTable **hash, gint index, gint ncols, gchar **col_names); /** * CamelDBSelectCB: * * Since: 2.24 **/ typedef gint (*CamelDBSelectCB) (gpointer data, gint ncol, gchar **colvalues, gchar **colnames); CamelDB * camel_db_open (const gchar *path, GError **error); CamelDB * camel_db_clone (CamelDB *cdb, GError **error); void camel_db_close (CamelDB *cdb); gint camel_db_command (CamelDB *cdb, const gchar *stmt, GError **error); gint camel_db_transaction_command (CamelDB *cdb, GList *qry_list, GError **error); gint camel_db_begin_transaction (CamelDB *cdb, GError **error); gint camel_db_add_to_transaction (CamelDB *cdb, const gchar *query, GError **error); gint camel_db_end_transaction (CamelDB *cdb, GError **error); gint camel_db_abort_transaction (CamelDB *cdb, GError **error); gint camel_db_clear_folder_summary (CamelDB *cdb, const gchar *folder, GError **error); gint camel_db_rename_folder (CamelDB *cdb, const gchar *old_folder, const gchar *new_folder, GError **error); gint camel_db_delete_folder (CamelDB *cdb, const gchar *folder, GError **error); gint camel_db_delete_uid (CamelDB *cdb, const gchar *folder, const gchar *uid, GError **error); /*int camel_db_delete_uids (CamelDB *cdb, GError **error, gint nargs, ... );*/ gint camel_db_delete_uids (CamelDB *cdb, const gchar * folder_name, GList *uids, GError **error); gint camel_db_create_folders_table (CamelDB *cdb, GError **error); gint camel_db_select (CamelDB *cdb, const gchar * stmt, CamelDBSelectCB callback, gpointer data, GError **error); gint camel_db_write_folder_info_record (CamelDB *cdb, CamelFIRecord *record, GError **error); gint camel_db_read_folder_info_record (CamelDB *cdb, const gchar *folder_name, CamelFIRecord *record, GError **error); gint camel_db_prepare_message_info_table (CamelDB *cdb, const gchar *folder_name, GError **error); gint camel_db_write_message_info_record (CamelDB *cdb, const gchar *folder_name, CamelMIRecord *record, GError **error); gint camel_db_write_fresh_message_info_record (CamelDB *cdb, const gchar *folder_name, CamelMIRecord *record, GError **error); gint camel_db_read_message_info_records (CamelDB *cdb, const gchar *folder_name, gpointer p, CamelDBSelectCB read_mir_callback, GError **error); gint camel_db_read_message_info_record_with_uid (CamelDB *cdb, const gchar *folder_name, const gchar *uid, gpointer p, CamelDBSelectCB read_mir_callback, GError **error); gint camel_db_count_junk_message_info (CamelDB *cdb, const gchar *table_name, guint32 *count, GError **error); gint camel_db_count_unread_message_info (CamelDB *cdb, const gchar *table_name, guint32 *count, GError **error); gint camel_db_count_deleted_message_info (CamelDB *cdb, const gchar *table_name, guint32 *count, GError **error); gint camel_db_count_total_message_info (CamelDB *cdb, const gchar *table_name, guint32 *count, GError **error); gint camel_db_count_visible_message_info (CamelDB *cdb, const gchar *table_name, guint32 *count, GError **error); gint camel_db_count_visible_unread_message_info (CamelDB *cdb, const gchar *table_name, guint32 *count, GError **error); gint camel_db_count_junk_not_deleted_message_info (CamelDB *cdb, const gchar *table_name, guint32 *count, GError **error); gint camel_db_count_message_info (CamelDB *cdb, const gchar *query, guint32 *count, GError **error); void camel_db_camel_mir_free (CamelMIRecord *record); gint camel_db_get_folder_uids (CamelDB *db, const gchar *folder_name, const gchar *sort_by, const gchar *collate, GHashTable *hash, GError **error); GPtrArray * camel_db_get_folder_junk_uids (CamelDB *db, gchar *folder_name, GError **error); GPtrArray * camel_db_get_folder_deleted_uids (CamelDB *db, const gchar *folder_name, GError **error); gchar * camel_db_sqlize_string (const gchar *string); void camel_db_free_sqlized_string (gchar *string); gchar * camel_db_get_column_name (const gchar *raw_name); gint camel_db_set_collate (CamelDB *cdb, const gchar *col, const gchar *collate, CamelDBCollate func); gint camel_db_start_in_memory_transactions (CamelDB *cdb, GError **error); gint camel_db_flush_in_memory_transactions (CamelDB *cdb, const gchar * folder_name, GError **error); GHashTable * camel_db_get_folder_preview (CamelDB *db, const gchar *folder_name, GError **error); gint camel_db_write_preview_record (CamelDB *db, const gchar *folder_name, const gchar *uid, const gchar *msg, GError **error); gint camel_db_reset_folder_version (CamelDB *cdb, const gchar *folder_name, gint reset_version, GError **error); gboolean camel_db_maybe_run_maintenance (CamelDB *cdb, GError **error); G_END_DECLS #endif