public Result StoreEditFieldInfo(long pageRevisionID, EditFieldInfo info)
        {
            try
            {
                using (TransactionScope scope = new TransactionScope())
                {
                    if (info.Data != null && info.DataID == 0)
                    {
                        info.DataID = DatabaseManager.GetUniqueID();
                    }

                    SQLiteConnection connection = (SQLiteConnection)DatabaseManager.DatabaseEngine.GetConnection();
                    SQLiteCommand    cmd        = connection.CreateCommand();
                    cmd.CommandText = Procedures["Store EditFieldInfo"];
                    cmd.Connection  = connection;
                    cmd.Parameters.Add(NewParameter("@PageRevisionID", pageRevisionID, DbType.Int64));
                    cmd.Parameters.Add(NewParameter("@EditFieldID", info.DataID, DbType.Int64));
                    cmd.Parameters.Add(NewParameter("@EditFieldTypeIdentifier", info.Handler.TypeName, DbType.String));
                    cmd.Parameters.Add(NewParameter("@SectionName", info.SectionName, DbType.String));
                    cmd.Parameters.Add(NewParameter("@FieldName", info.FieldName, DbType.String));
                    cmd.Parameters.Add(NewParameter("@Rank", info.Rank, DbType.Int64));
                    cmd.ExecuteNonQuery();
                    scope.Complete();
                }
            }
            catch (Exception ex)
            {
                return(new Result("SQLiteContentDataProvider.StoreEditFieldInfo: " + ex.Message));
            }
            finally
            {
                DatabaseManager.DatabaseEngine.ReleaseConnection();
            }
            return(new Result());
        }
        public Dictionary <string, List <EditFieldInfo> > ListPageEditFieldsByFieldType(long pageRevisionID)
        {
            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress))
            {
                using (SQLiteConnection conn = new SQLiteConnection(DatabaseManager.DatabaseEngine.ConnectionString))
                {
                    conn.Open();
                    SQLiteCommand cmd = new SQLiteCommand(Procedures["List EditFields For Page Revision"], conn);
                    cmd.Parameters.Add(NewParameter("@PageRevisionID", pageRevisionID, DbType.Int64));
                    using (SQLiteDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        // group all of the nodes according to type so that they can have their individual type's id list loaded
                        Dictionary <string, List <EditFieldInfo> > map = new Dictionary <string, List <EditFieldInfo> >();
                        while (reader.Read())
                        {
                            EditFieldInfo field = new EditFieldInfo();
                            if (!field.Read(reader))
                            {
                                continue;
                            }

                            List <EditFieldInfo> list;
                            if (!map.TryGetValue(field.Handler.TypeName, out list))
                            {
                                list = new List <EditFieldInfo>();
                                map.Add(field.Handler.TypeName, list);
                            }
                            list.Add(field);
                        }
                        reader.Close();
                        return(map);
                    }
                }
            }
        }
        public Dictionary <string, List <EditFieldInfo> > ListPageEditFieldsByFieldType(List <long> pageRevisionIDs)
        {
            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress))
            {
                using (SqlConnection conn = new SqlConnection(DatabaseManager.DatabaseEngine.ConnectionString))
                {
                    conn.Open();
                    StringBuilder ids = new StringBuilder();
                    foreach (long id in pageRevisionIDs)
                    {
                        ids.Append(",");
                        ids.Append(id);
                    }
#warning change to stored procedure, not inline sql
                    SqlCommand cmd = new SqlCommand("SELECT * FROM EditFieldInfo WHERE PageRevisionID IN (0" + ids + ") ORDER BY EditFieldTypeIdentifier", conn);
                    using (SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        // group all of the nodes according to type so that they can have their individual type's id list loaded
                        Dictionary <string, List <EditFieldInfo> > map = new Dictionary <string, List <EditFieldInfo> >();
                        while (reader.Read())
                        {
                            EditFieldInfo field = new EditFieldInfo();
                            if (!field.Read(reader))
                            {
                                continue;
                            }

                            List <EditFieldInfo> list;
                            if (!map.TryGetValue(field.Handler.TypeName, out list))
                            {
                                list = new List <EditFieldInfo>();
                                map.Add(field.Handler.TypeName, list);
                            }
                            list.Add(field);
                        }
                        reader.Close();
                        return(map);
                    }
                }
            }
        }
        public Dictionary<string, List<EditFieldInfo>> ListPageEditFieldsByFieldType(long pageRevisionID)
        {
            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress))
            {
                using (SQLiteConnection conn = new SQLiteConnection(DatabaseManager.DatabaseEngine.ConnectionString))
                {
                    conn.Open();
                    SQLiteCommand cmd = new SQLiteCommand(Procedures["List EditFields For Page Revision"], conn);
                    cmd.Parameters.Add(NewParameter("@PageRevisionID", pageRevisionID, DbType.Int64));
                    using (SQLiteDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        // group all of the nodes according to type so that they can have their individual type's id list loaded
                        Dictionary<string, List<EditFieldInfo>> map = new Dictionary<string, List<EditFieldInfo>>();
                        while (reader.Read())
                        {
                            EditFieldInfo field = new EditFieldInfo();
                            if (!field.Read(reader))
                                continue;

                            List<EditFieldInfo> list;
                            if (!map.TryGetValue(field.Handler.TypeName, out list))
                            {
                                list = new List<EditFieldInfo>();
                                map.Add(field.Handler.TypeName, list);
                            }
                            list.Add(field);
                        }
                        reader.Close();
                        return map;
                    }
                }
            }
        }
        public Result StoreEditFieldInfo(long pageRevisionID, EditFieldInfo info)
        {
            try
            {
                using (TransactionScope scope = new TransactionScope())
                {
                    if (info.Data != null && info.DataID == 0)
                        info.DataID = DatabaseManager.GetUniqueID();

                    SQLiteConnection connection = (SQLiteConnection)DatabaseManager.DatabaseEngine.GetConnection();
                    SQLiteCommand cmd = connection.CreateCommand();
                    cmd.CommandText = Procedures["Store EditFieldInfo"];
                    cmd.Connection = connection;
                    cmd.Parameters.Add(NewParameter("@PageRevisionID", pageRevisionID, DbType.Int64));
                    cmd.Parameters.Add(NewParameter("@EditFieldID", info.DataID, DbType.Int64));
                    cmd.Parameters.Add(NewParameter("@EditFieldTypeIdentifier", info.Handler.TypeName, DbType.String));
                    cmd.Parameters.Add(NewParameter("@SectionName", info.SectionName, DbType.String));
                    cmd.Parameters.Add(NewParameter("@FieldName", info.FieldName, DbType.String));
                    cmd.Parameters.Add(NewParameter("@Rank", info.Rank, DbType.Int64));
                    cmd.ExecuteNonQuery();
                    scope.Complete();
                }
            }
            catch (Exception ex)
            {
                return new Result("SQLiteContentDataProvider.StoreEditFieldInfo: " + ex.Message);
            }
            finally
            {
                DatabaseManager.DatabaseEngine.ReleaseConnection();
            }
            return new Result();
        }
        public Dictionary<string, List<EditFieldInfo>> ListPageEditFieldsByFieldType(List<long> pageRevisionIDs)
        {
            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress))
            {
                using (SQLiteConnection conn = new SQLiteConnection(DatabaseManager.DatabaseEngine.ConnectionString))
                {
                    conn.Open();
                    StringBuilder ids = new StringBuilder();
                    foreach (long id in pageRevisionIDs)
                    {
                        ids.Append(",");
                        ids.Append(id);
                    }
                    SQLiteCommand cmd = new SQLiteCommand("SELECT * FROM EditFieldInfo WHERE PageRevisionID IN (0" + ids + ") ORDER BY EditFieldTypeIdentifier", conn);
                    using (SQLiteDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        // group all of the nodes according to type so that they can have their individual type's id list loaded
                        Dictionary<string, List<EditFieldInfo>> map = new Dictionary<string, List<EditFieldInfo>>();
                        while (reader.Read())
                        {
                            EditFieldInfo field = new EditFieldInfo();
                            if (!field.Read(reader))
                                continue;

                            List<EditFieldInfo> list;
                            if (!map.TryGetValue(field.Handler.TypeName, out list))
                            {
                                list = new List<EditFieldInfo>();
                                map.Add(field.Handler.TypeName, list);
                            }
                            list.Add(field);
                        }
                        reader.Close();
                        return map;
                    }
                }
            }
        }