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 
     66 // At least enforce that there are equal number of column names and fields.
     67 COMPILE_ASSERT(arraysize(g_metas_columns) >= FIELD_COUNT, missing_column_name);
     68 COMPILE_ASSERT(arraysize(g_metas_columns) <= FIELD_COUNT, extra_column_names);
     69 
     70 static inline const char* ColumnName(int field) {
     71   DCHECK(field < BEGIN_TEMPS);
     72   return g_metas_columns[field].name;
     73 }
     74 
     75 }  // namespace syncable
     76 }  // namespace syncer
     77 
     78 #endif  // SYNC_SYNCABLE_SYNCABLE_COLUMNS_H_
     79