public virtual bool DeleteItem(SyncFoundation.Core.Interfaces.ISyncableItemInfo itemInfo)
        {
            long rowId = GetRowIdFromItemInfo(itemInfo);

            if (rowId != -1)
            {
                try
                {
                    IDbCommand command = adapter.Connection.CreateCommand();
                    command.CommandText = String.Format("DELETE FROM {0} WHERE RowID=@RowID", DbTable);
                    command.AddParameter("@RowID", rowId);
                    command.ExecuteNonQuery();
                    return(true);
                }
                catch (SqliteExecutionException e)
                {
                    if (e.SqliteErrorCode == 19) // Constraint failed
                    {
                        // Update Modified with incremented TickCount
                        IDbCommand command = Adapter.Connection.CreateCommand();
                        command.CommandText = String.Format("UPDATE {0} SET ModifiedReplica=0, ModifiedTickCount=@ModifiedTick WHERE RowID=@RowID", DbTable);
                        command.AddParameter("@RowID", rowId);
                        command.AddParameter("@ModifiedTick", Adapter.IncrementLocalRepilcaTickCount());
                        command.ExecuteNonQuery();
                        return(false);
                    }
                    throw;
                }
            }
            return(true);
        }
 abstract public void SaveItemData(SyncFoundation.Core.Interfaces.ISyncableItemInfo itemInfo, Newtonsoft.Json.Linq.JObject itemData);
 abstract public void UpdateInReplica(SyncFoundation.Core.Interfaces.ISyncableItemInfo itemInfo);