| Index: sync/syncable/entry_kernel.h
|
| diff --git a/sync/syncable/entry_kernel.h b/sync/syncable/entry_kernel.h
|
| deleted file mode 100644
|
| index 064cdd46b6d1e79b0b53538c6310a4a6c1ecba89..0000000000000000000000000000000000000000
|
| --- a/sync/syncable/entry_kernel.h
|
| +++ /dev/null
|
| @@ -1,425 +0,0 @@
|
| -// Copyright 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#ifndef SYNC_SYNCABLE_ENTRY_KERNEL_H_
|
| -#define SYNC_SYNCABLE_ENTRY_KERNEL_H_
|
| -
|
| -#include <stdint.h>
|
| -
|
| -#include <algorithm>
|
| -#include <map>
|
| -#include <set>
|
| -#include <string>
|
| -
|
| -#include "base/time/time.h"
|
| -#include "base/values.h"
|
| -#include "sync/base/sync_export.h"
|
| -#include "sync/internal_api/public/base/model_type.h"
|
| -#include "sync/internal_api/public/base/unique_position.h"
|
| -#include "sync/internal_api/public/util/immutable.h"
|
| -#include "sync/internal_api/public/util/proto_value_ptr.h"
|
| -#include "sync/protocol/attachments.pb.h"
|
| -#include "sync/protocol/sync.pb.h"
|
| -#include "sync/syncable/metahandle_set.h"
|
| -#include "sync/syncable/syncable_id.h"
|
| -#include "sync/util/time.h"
|
| -
|
| -namespace syncer {
|
| -
|
| -class Cryptographer;
|
| -
|
| -namespace syncable {
|
| -
|
| -// Things you need to update if you change any of the fields below:
|
| -// - EntryKernel struct in this file
|
| -// - syncable_columns.h
|
| -// - syncable_enum_conversions{.h,.cc,_unittest.cc}
|
| -// - EntryKernel::EntryKernel(), EntryKernel::ToValue() in entry_kernel.cc
|
| -// - operator<< in Entry.cc
|
| -// - BindFields() and UnpackEntry() in directory_backing_store.cc
|
| -// - kCurrentDBVersion, DirectoryBackingStore::InitializeTables in
|
| -// directory_backing_store.cc
|
| -// - TestSimpleFieldsPreservedDuringSaveChanges in syncable_unittest.cc
|
| -
|
| -static const int64_t kInvalidMetaHandle = 0;
|
| -
|
| -enum {
|
| - BEGIN_FIELDS = 0,
|
| - INT64_FIELDS_BEGIN = BEGIN_FIELDS
|
| -};
|
| -
|
| -enum MetahandleField {
|
| - // Primary key into the table. Keep this as a handle to the meta entry
|
| - // across transactions.
|
| - META_HANDLE = INT64_FIELDS_BEGIN
|
| -};
|
| -
|
| -enum BaseVersion {
|
| - // After initial upload, the version is controlled by the server, and is
|
| - // increased whenever the data or metadata changes on the server.
|
| - BASE_VERSION = META_HANDLE + 1,
|
| -};
|
| -
|
| -enum Int64Field {
|
| - SERVER_VERSION = BASE_VERSION + 1,
|
| - LOCAL_EXTERNAL_ID, // ID of an item in the external local storage that this
|
| - // entry is associated with. (such as bookmarks.js)
|
| - TRANSACTION_VERSION,
|
| - INT64_FIELDS_END
|
| -};
|
| -
|
| -enum {
|
| - INT64_FIELDS_COUNT = INT64_FIELDS_END - INT64_FIELDS_BEGIN,
|
| - TIME_FIELDS_BEGIN = INT64_FIELDS_END,
|
| -};
|
| -
|
| -enum TimeField {
|
| - MTIME = TIME_FIELDS_BEGIN,
|
| - SERVER_MTIME,
|
| - CTIME,
|
| - SERVER_CTIME,
|
| - TIME_FIELDS_END,
|
| -};
|
| -
|
| -enum {
|
| - TIME_FIELDS_COUNT = TIME_FIELDS_END - TIME_FIELDS_BEGIN,
|
| - ID_FIELDS_BEGIN = TIME_FIELDS_END,
|
| -};
|
| -
|
| -enum IdField {
|
| - // Code in InitializeTables relies on ID being the first IdField value.
|
| - ID = ID_FIELDS_BEGIN,
|
| - PARENT_ID,
|
| - SERVER_PARENT_ID,
|
| - ID_FIELDS_END
|
| -};
|
| -
|
| -enum {
|
| - ID_FIELDS_COUNT = ID_FIELDS_END - ID_FIELDS_BEGIN,
|
| - BIT_FIELDS_BEGIN = ID_FIELDS_END
|
| -};
|
| -
|
| -enum IndexedBitField {
|
| - IS_UNSYNCED = BIT_FIELDS_BEGIN,
|
| - IS_UNAPPLIED_UPDATE,
|
| - INDEXED_BIT_FIELDS_END,
|
| -};
|
| -
|
| -enum IsDelField {
|
| - IS_DEL = INDEXED_BIT_FIELDS_END,
|
| -};
|
| -
|
| -enum BitField {
|
| - IS_DIR = IS_DEL + 1,
|
| - SERVER_IS_DIR,
|
| - SERVER_IS_DEL,
|
| - BIT_FIELDS_END
|
| -};
|
| -
|
| -enum {
|
| - BIT_FIELDS_COUNT = BIT_FIELDS_END - BIT_FIELDS_BEGIN,
|
| - STRING_FIELDS_BEGIN = BIT_FIELDS_END
|
| -};
|
| -
|
| -enum StringField {
|
| - // Name, will be truncated by server. Can be duplicated in a folder.
|
| - NON_UNIQUE_NAME = STRING_FIELDS_BEGIN,
|
| - // The server version of |NON_UNIQUE_NAME|.
|
| - SERVER_NON_UNIQUE_NAME,
|
| -
|
| - // A tag string which identifies this node as a particular top-level
|
| - // permanent object. The tag can be thought of as a unique key that
|
| - // identifies a singleton instance.
|
| - UNIQUE_SERVER_TAG, // Tagged by the server
|
| - UNIQUE_CLIENT_TAG, // Tagged by the client
|
| - UNIQUE_BOOKMARK_TAG, // Client tags for bookmark items
|
| - STRING_FIELDS_END,
|
| -};
|
| -
|
| -enum {
|
| - STRING_FIELDS_COUNT = STRING_FIELDS_END - STRING_FIELDS_BEGIN,
|
| - PROTO_FIELDS_BEGIN = STRING_FIELDS_END
|
| -};
|
| -
|
| -// From looking at the sqlite3 docs, it's not directly stated, but it
|
| -// seems the overhead for storing a NULL blob is very small.
|
| -enum ProtoField {
|
| - SPECIFICS = PROTO_FIELDS_BEGIN,
|
| - SERVER_SPECIFICS,
|
| - BASE_SERVER_SPECIFICS,
|
| - PROTO_FIELDS_END,
|
| -};
|
| -
|
| -enum {
|
| - PROTO_FIELDS_COUNT = PROTO_FIELDS_END - PROTO_FIELDS_BEGIN,
|
| - UNIQUE_POSITION_FIELDS_BEGIN = PROTO_FIELDS_END
|
| -};
|
| -
|
| -enum UniquePositionField {
|
| - SERVER_UNIQUE_POSITION = UNIQUE_POSITION_FIELDS_BEGIN,
|
| - UNIQUE_POSITION,
|
| - UNIQUE_POSITION_FIELDS_END
|
| -};
|
| -
|
| -enum {
|
| - UNIQUE_POSITION_FIELDS_COUNT =
|
| - UNIQUE_POSITION_FIELDS_END - UNIQUE_POSITION_FIELDS_BEGIN,
|
| - ATTACHMENT_METADATA_FIELDS_BEGIN = UNIQUE_POSITION_FIELDS_END
|
| -};
|
| -
|
| -enum AttachmentMetadataField {
|
| - ATTACHMENT_METADATA = ATTACHMENT_METADATA_FIELDS_BEGIN,
|
| - SERVER_ATTACHMENT_METADATA,
|
| - ATTACHMENT_METADATA_FIELDS_END
|
| -};
|
| -
|
| -enum {
|
| - ATTACHMENT_METADATA_FIELDS_COUNT =
|
| - ATTACHMENT_METADATA_FIELDS_END - ATTACHMENT_METADATA_FIELDS_BEGIN,
|
| - FIELD_COUNT = ATTACHMENT_METADATA_FIELDS_END - BEGIN_FIELDS,
|
| - // Past this point we have temporaries, stored in memory only.
|
| - BEGIN_TEMPS = ATTACHMENT_METADATA_FIELDS_END,
|
| - BIT_TEMPS_BEGIN = BEGIN_TEMPS,
|
| -};
|
| -
|
| -enum BitTemp {
|
| - // Whether a server commit operation was started and has not yet completed
|
| - // for this entity.
|
| - SYNCING = BIT_TEMPS_BEGIN,
|
| - // Whether a local change was made to an entity that had SYNCING set to true,
|
| - // and was therefore in the middle of a commit operation.
|
| - // Note: must only be set if SYNCING is true.
|
| - DIRTY_SYNC,
|
| - BIT_TEMPS_END,
|
| -};
|
| -
|
| -enum {
|
| - BIT_TEMPS_COUNT = BIT_TEMPS_END - BIT_TEMPS_BEGIN
|
| -};
|
| -
|
| -struct SYNC_EXPORT EntryKernel {
|
| - private:
|
| - typedef syncer::ProtoValuePtr<sync_pb::EntitySpecifics> EntitySpecificsPtr;
|
| - typedef syncer::ProtoValuePtr<sync_pb::AttachmentMetadata>
|
| - AttachmentMetadataPtr;
|
| -
|
| - std::string string_fields[STRING_FIELDS_COUNT];
|
| - EntitySpecificsPtr specifics_fields[PROTO_FIELDS_COUNT];
|
| - int64_t int64_fields[INT64_FIELDS_COUNT];
|
| - base::Time time_fields[TIME_FIELDS_COUNT];
|
| - Id id_fields[ID_FIELDS_COUNT];
|
| - UniquePosition unique_position_fields[UNIQUE_POSITION_FIELDS_COUNT];
|
| - AttachmentMetadataPtr
|
| - attachment_metadata_fields[ATTACHMENT_METADATA_FIELDS_COUNT];
|
| - std::bitset<BIT_FIELDS_COUNT> bit_fields;
|
| - std::bitset<BIT_TEMPS_COUNT> bit_temps;
|
| -
|
| - friend std::ostream& operator<<(std::ostream& s, const EntryKernel& e);
|
| -
|
| - public:
|
| - EntryKernel();
|
| - EntryKernel(const EntryKernel& other);
|
| - ~EntryKernel();
|
| -
|
| - // Set the dirty bit, and optionally add this entry's metahandle to
|
| - // a provided index on dirty bits in |dirty_index|. Parameter may be null,
|
| - // and will result only in setting the dirty bit of this entry.
|
| - inline void mark_dirty(syncable::MetahandleSet* dirty_index) {
|
| - if (!dirty_ && dirty_index) {
|
| - DCHECK_NE(0, ref(META_HANDLE));
|
| - dirty_index->insert(ref(META_HANDLE));
|
| - }
|
| - dirty_ = true;
|
| - }
|
| -
|
| - // Clear the dirty bit, and optionally remove this entry's metahandle from
|
| - // a provided index on dirty bits in |dirty_index|. Parameter may be null,
|
| - // and will result only in clearing dirty bit of this entry.
|
| - inline void clear_dirty(syncable::MetahandleSet* dirty_index) {
|
| - if (dirty_ && dirty_index) {
|
| - DCHECK_NE(0, ref(META_HANDLE));
|
| - dirty_index->erase(ref(META_HANDLE));
|
| - }
|
| - dirty_ = false;
|
| - }
|
| -
|
| - inline bool is_dirty() const {
|
| - return dirty_;
|
| - }
|
| -
|
| - // Setters.
|
| - inline void put(MetahandleField field, int64_t value) {
|
| - int64_fields[field - INT64_FIELDS_BEGIN] = value;
|
| - }
|
| - inline void put(Int64Field field, int64_t value) {
|
| - int64_fields[field - INT64_FIELDS_BEGIN] = value;
|
| - }
|
| - inline void put(TimeField field, const base::Time& value) {
|
| - // Round-trip to proto time format and back so that we have
|
| - // consistent time resolutions (ms).
|
| - time_fields[field - TIME_FIELDS_BEGIN] =
|
| - ProtoTimeToTime(TimeToProtoTime(value));
|
| - }
|
| - inline void put(IdField field, const Id& value) {
|
| - id_fields[field - ID_FIELDS_BEGIN] = value;
|
| - }
|
| - inline void put(BaseVersion field, int64_t value) {
|
| - int64_fields[field - INT64_FIELDS_BEGIN] = value;
|
| - }
|
| - inline void put(IndexedBitField field, bool value) {
|
| - bit_fields[field - BIT_FIELDS_BEGIN] = value;
|
| - }
|
| - inline void put(IsDelField field, bool value) {
|
| - bit_fields[field - BIT_FIELDS_BEGIN] = value;
|
| - }
|
| - inline void put(BitField field, bool value) {
|
| - bit_fields[field - BIT_FIELDS_BEGIN] = value;
|
| - }
|
| - inline void put(StringField field, const std::string& value) {
|
| - string_fields[field - STRING_FIELDS_BEGIN] = value;
|
| - }
|
| - inline void put(ProtoField field, const sync_pb::EntitySpecifics& value) {
|
| - specifics_fields[field - PROTO_FIELDS_BEGIN].set_value(value);
|
| - }
|
| - inline void put(UniquePositionField field, const UniquePosition& value) {
|
| - unique_position_fields[field - UNIQUE_POSITION_FIELDS_BEGIN] = value;
|
| - }
|
| - inline void put(AttachmentMetadataField field,
|
| - const sync_pb::AttachmentMetadata& value) {
|
| - attachment_metadata_fields[field - ATTACHMENT_METADATA_FIELDS_BEGIN]
|
| - .set_value(value);
|
| - }
|
| - inline void put(BitTemp field, bool value) {
|
| - bit_temps[field - BIT_TEMPS_BEGIN] = value;
|
| - }
|
| -
|
| - // Const ref getters.
|
| - inline int64_t ref(MetahandleField field) const {
|
| - return int64_fields[field - INT64_FIELDS_BEGIN];
|
| - }
|
| - inline int64_t ref(Int64Field field) const {
|
| - return int64_fields[field - INT64_FIELDS_BEGIN];
|
| - }
|
| - inline const base::Time& ref(TimeField field) const {
|
| - return time_fields[field - TIME_FIELDS_BEGIN];
|
| - }
|
| - inline const Id& ref(IdField field) const {
|
| - return id_fields[field - ID_FIELDS_BEGIN];
|
| - }
|
| - inline int64_t ref(BaseVersion field) const {
|
| - return int64_fields[field - INT64_FIELDS_BEGIN];
|
| - }
|
| - inline bool ref(IndexedBitField field) const {
|
| - return bit_fields[field - BIT_FIELDS_BEGIN];
|
| - }
|
| - inline bool ref(IsDelField field) const {
|
| - return bit_fields[field - BIT_FIELDS_BEGIN];
|
| - }
|
| - inline bool ref(BitField field) const {
|
| - return bit_fields[field - BIT_FIELDS_BEGIN];
|
| - }
|
| - inline const std::string& ref(StringField field) const {
|
| - return string_fields[field - STRING_FIELDS_BEGIN];
|
| - }
|
| - inline const sync_pb::EntitySpecifics& ref(ProtoField field) const {
|
| - return specifics_fields[field - PROTO_FIELDS_BEGIN].value();
|
| - }
|
| - inline const UniquePosition& ref(UniquePositionField field) const {
|
| - return unique_position_fields[field - UNIQUE_POSITION_FIELDS_BEGIN];
|
| - }
|
| - inline const sync_pb::AttachmentMetadata& ref(
|
| - AttachmentMetadataField field) const {
|
| - return attachment_metadata_fields[field - ATTACHMENT_METADATA_FIELDS_BEGIN]
|
| - .value();
|
| - }
|
| - inline bool ref(BitTemp field) const {
|
| - return bit_temps[field - BIT_TEMPS_BEGIN];
|
| - }
|
| -
|
| - // Non-const, mutable ref getters for object types only.
|
| - inline std::string& mutable_ref(StringField field) {
|
| - return string_fields[field - STRING_FIELDS_BEGIN];
|
| - }
|
| - inline Id& mutable_ref(IdField field) {
|
| - return id_fields[field - ID_FIELDS_BEGIN];
|
| - }
|
| - inline UniquePosition& mutable_ref(UniquePositionField field) {
|
| - return unique_position_fields[field - UNIQUE_POSITION_FIELDS_BEGIN];
|
| - }
|
| -
|
| - // Deserialization methods for ::google::protobuf::MessageLite derived types.
|
| - inline void load(ProtoField field, const void* blob, int length) {
|
| - specifics_fields[field - PROTO_FIELDS_BEGIN].load(blob, length);
|
| - }
|
| -
|
| - inline void load(AttachmentMetadataField field,
|
| - const void* blob,
|
| - int length) {
|
| - attachment_metadata_fields[field - ATTACHMENT_METADATA_FIELDS_BEGIN].load(
|
| - blob, length);
|
| - }
|
| -
|
| - // Sharing data methods for ::google::protobuf::MessageLite derived types.
|
| - inline void copy(ProtoField src, ProtoField dest) {
|
| - DCHECK_NE(src, dest);
|
| - specifics_fields[dest - PROTO_FIELDS_BEGIN] =
|
| - specifics_fields[src - PROTO_FIELDS_BEGIN];
|
| - }
|
| -
|
| - inline void copy(AttachmentMetadataField src, AttachmentMetadataField dest) {
|
| - DCHECK_NE(src, dest);
|
| - attachment_metadata_fields[dest - ATTACHMENT_METADATA_FIELDS_BEGIN] =
|
| - attachment_metadata_fields[src - ATTACHMENT_METADATA_FIELDS_BEGIN];
|
| - }
|
| -
|
| - ModelType GetModelType() const;
|
| - ModelType GetServerModelType() const;
|
| - bool ShouldMaintainPosition() const;
|
| - bool ShouldMaintainHierarchy() const;
|
| -
|
| - // Dumps all kernel info into a DictionaryValue and returns it.
|
| - // Transfers ownership of the DictionaryValue to the caller.
|
| - // Note: |cryptographer| is an optional parameter for use in decrypting
|
| - // encrypted specifics. If it is NULL or the specifics are not decryptsble,
|
| - // they will be serialized as empty proto's.
|
| - base::DictionaryValue* ToValue(Cryptographer* cryptographer) const;
|
| -
|
| - private:
|
| - // Tracks whether this entry needs to be saved to the database.
|
| - bool dirty_;
|
| -};
|
| -
|
| -class EntryKernelLessByMetaHandle {
|
| - public:
|
| - inline bool operator()(const EntryKernel* a,
|
| - const EntryKernel* b) const {
|
| - return a->ref(META_HANDLE) < b->ref(META_HANDLE);
|
| - }
|
| -};
|
| -
|
| -typedef std::set<const EntryKernel*, EntryKernelLessByMetaHandle>
|
| - EntryKernelSet;
|
| -
|
| -struct EntryKernelMutation {
|
| - EntryKernel original, mutated;
|
| -};
|
| -
|
| -typedef std::map<int64_t, EntryKernelMutation> EntryKernelMutationMap;
|
| -
|
| -typedef Immutable<EntryKernelMutationMap> ImmutableEntryKernelMutationMap;
|
| -
|
| -// Caller owns the return value.
|
| -base::DictionaryValue* EntryKernelMutationToValue(
|
| - const EntryKernelMutation& mutation);
|
| -
|
| -// Caller owns the return value.
|
| -base::ListValue* EntryKernelMutationMapToValue(
|
| - const EntryKernelMutationMap& mutations);
|
| -
|
| -std::ostream& operator<<(std::ostream& os, const EntryKernel& entry_kernel);
|
| -
|
| -} // namespace syncable
|
| -} // namespace syncer
|
| -
|
| -#endif // SYNC_SYNCABLE_ENTRY_KERNEL_H_
|
|
|