Home | History | Annotate | Download | only in syncable
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef SYNC_SYNCABLE_SYNCABLE_COLUMNS_H_
      6 #define SYNC_SYNCABLE_SYNCABLE_COLUMNS_H_
      7 
      8 #include "sync/syncable/entry_kernel.h"
      9 #include "sync/syncable/syncable_changes_version.h"
     10 
     11 namespace syncer {
     12 namespace syncable {
     13 
     14 struct ColumnSpec {
     15   const char* name;
     16   const char* spec;
     17 };
     18 
     19 // Must be in exact same order as fields in entry_kernel.h.
     20 static const ColumnSpec g_metas_columns[] = {
     21   //////////////////////////////////////
     22   // int64s
     23   {"metahandle", "bigint primary key ON CONFLICT FAIL"},
     24   {"base_version", "bigint default " CHANGES_VERSION_STRING},
     25   {"server_version", "bigint default 0"},
     26   // This is the item ID that we store for the embedding application.
     27   {"local_external_id", "bigint default 0"},
     28   {"transaction_version", "bigint default 0"},
     29   // These timestamps are kept in the same format as that of the
     30   // protocol (ms since Unix epoch).
     31   {"mtime", "bigint default 0"},
     32   {"server_mtime", "bigint default 0"},
     33   {"ctime", "bigint default 0"},
     34   {"server_ctime", "bigint default 0"},
     35   //////////////////////////////////////
     36   // Ids
     37   {"id", "varchar(255) default \"r\""},
     38   {"parent_id", "varchar(255) default \"r\""},
     39   {"server_parent_id", "varchar(255) default \"r\""},
     40   //////////////////////////////////////
     41   // bits
     42   {"is_unsynced", "bit default 0"},
     43   {"is_unapplied_update", "bit default 0"},
     44   {"is_del", "bit default 0"},
     45   {"is_dir", "bit default 0"},
     46   {"server_is_dir", "bit default 0"},
     47   {"server_is_del", "bit default 0"},
     48   //////////////////////////////////////
     49   // Strings
     50   {"non_unique_name", "varchar"},
     51   {"server_non_unique_name", "varchar(255)"},
     52   {"unique_server_tag", "varchar"},
     53   {"unique_client_tag", "varchar"},
     54   {"unique_bookmark_tag", "varchar"},
     55   //////////////////////////////////////
     56   // Blobs (serialized protos).
     57   {"specifics", "blob"},
     58   {"server_specifics", "blob"},
     59   {"base_server_specifics", "blob"},
     60   //////////////////////////////////////
     61   // Blobs (positions).
     62   {"server_unique_position", "blob"},
     63   {"unique_position", "blob"},
     64   //////////////////////////////////////
     65   // AttachmentMetadata is a proto that contains all the metadata associated
     66   // with an entry's attachments.  Each entry has only one AttachmentMetadata
     67   // proto.  We store a single proto per entry (as opposed to one for each
     68   // attachment) because it simplifies the database schema and implementation of
     69   // DirectoryBackingStore.
     70   {"attachment_metadata", "blob"}
     71 };
     72 
     73 // At least enforce that there are equal number of column names and fields.
     74 COMPILE_ASSERT(arraysize(g_metas_columns) >= FIELD_COUNT, missing_column_name);
     75 COMPILE_ASSERT(arraysize(g_metas_columns) <= FIELD_COUNT, extra_column_names);
     76 
     77 static inline const char* ColumnName(int field) {
     78   DCHECK(field < BEGIN_TEMPS);
     79   return g_metas_columns[field].name;
     80 }
     81 
     82 }  // namespace syncable
     83 }  // namespace syncer
     84 
     85 #endif  // SYNC_SYNCABLE_SYNCABLE_COLUMNS_H_
     86