Remove config setters from sql/database.h

Most of the setters for configuration options for a SQLite database only
worked before the database was opened and were no-ops otherwise. This
led to confusing semantics and needing to support unnatural behaviour in
other parts of sql/ code.

This change removes the setters for the database config now encapsulated
in the DatabaseOptions struct. This struct is only set once as part of a
new constructor.

All feature code has already been migrated to use the new constructor
instead of the setter methods.

Bug: 1126968
Change-Id: I13474fbb87c7f2da386e83fb8d1fe3d8c44ab963
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2627941
Commit-Queue: Shubham Aggarwal <[email protected]>
Reviewed-by: Victor Costan <[email protected]>
Cr-Commit-Position: refs/heads/master@{#848097}
diff --git a/sql/database.h b/sql/database.h
index b4eeb9b..35601a48 100644
--- a/sql/database.h
+++ b/sql/database.h
@@ -56,6 +56,19 @@
 
   // If true, the database can only be opened by one process at a time.
   //
+  // SQLite supports a locking protocol that allows multiple processes to safely
+  // operate on the same database at the same time. The locking protocol is used
+  // on every transaction, and comes with a small performance penalty.
+  //
+  // Setting this to true causes the locking protocol to be used once, when the
+  // database is opened. No other process will be able to access the database at
+  // the same time.
+  //
+  // More details at https://www.sqlite.org/pragma.html#pragma_locking_mode
+  //
+  // SQLite's locking protocol is summarized at
+  // https://www.sqlite.org/c3ref/io_methods.html
+  //
   // Exclusive mode is strongly recommended. It reduces the I/O cost of setting
   // up a transaction. It also removes the need of handling transaction failures
   // due to lock contention.
@@ -67,6 +80,13 @@
   // Chrome features yet. In particular, our custom database recovery code does
   // not support the WAL log file.
   //
+  // WAL mode is currently not fully supported on FuchsiaOS. It will only be
+  // turned on if the database is also using exclusive locking mode.
+  // (https://crbug.com/1082059)
+  //
+  // Note: Changing page size is not supported when in WAL mode. So running
+  // 'PRAGMA page_size = <new-size>' will result in no-ops.
+  //
   // More details at https://www.sqlite.org/wal.html
   bool wal_mode =
       base::FeatureList::IsEnabled(sql::features::kEnableWALModeByDefault);
@@ -76,6 +96,8 @@
   // Larger page sizes result in shallower B-trees, because they allow an inner
   // page to hold more keys. On the flip side, larger page sizes may result in
   // more I/O when making small changes to existing records.
+  //
+  // Must be a power of two between 512 and 65536 inclusive.
   int page_size = kDefaultPageSize;
 
   // The size of in-memory cache, in pages.
@@ -116,70 +138,12 @@
 
   // Pre-init configuration ----------------------------------------------------
 
-  // Sets the page size that will be used when creating a new database. This
-  // must be called before Init(), and will only have an effect on new
-  // databases.
-  //
-  // The page size must be a power of two between 512 and 65536 inclusive.
-  void set_page_size(int page_size) {
-    DCHECK_GE(page_size, 512);
-    DCHECK_LE(page_size, 65536);
-    DCHECK(!(page_size & (page_size - 1)))
-        << "page_size must be a power of two";
-
-    options_.page_size = page_size;
-  }
-
   // The page size that will be used when creating a new database.
   int page_size() const { return options_.page_size; }
 
-  // Sets the number of pages that will be cached in memory by sqlite. The
-  // total cache size in bytes will be page_size * cache_size. This must be
-  // called before Open() to have an effect.
-  void set_cache_size(int cache_size) {
-    DCHECK_GE(cache_size, 0);
-
-    options_.cache_size = cache_size;
-  }
-
   // Returns whether a database will be opened in WAL mode.
   bool UseWALMode() const;
 
-  // Enables/disables WAL mode (https://www.sqlite.org/wal.html) when
-  // opening a new database.
-  //
-  // WAL mode is currently not fully supported on FuchsiaOS. It will only be
-  // turned on if the database is also using exclusive locking mode.
-  // (https://crbug.com/1082059)
-  //
-  // Note: Changing page size is not supported when in WAL mode. So running
-  // 'PRAGMA page_size = <new-size>' or using set_page_size will result in
-  // no-ops.
-  //
-  // This must be called before Open() to have an effect.
-  void want_wal_mode(bool enabled) { options_.wal_mode = enabled; }
-
-  // Makes database accessible by only one process at a time.
-  //
-  // TODO(https://crbug.com/1120969): This should be the default mode. The
-  //                                  "NORMAL" mode should be opt-in.
-  //
-  // SQLite supports a locking protocol that allows multiple processes to safely
-  // operate on the same database at the same time. The locking protocol is used
-  // on every transaction, and comes with a small performance penalty.
-  //
-  // Calling this method causes the locking protocol to be used once, when the
-  // database is opened. No other process will be able to access the database at
-  // the same time.
-  //
-  // This method must be called before Open() to have an effect.
-  //
-  // More details at https://www.sqlite.org/pragma.html#pragma_locking_mode
-  //
-  // SQLite's locking protocol is summarized at
-  // https://www.sqlite.org/c3ref/io_methods.html
-  void set_exclusive_locking() { options_.exclusive_locking = true; }
-
   // Call to use alternative status-tracking for mmap.  Usually this is tracked
   // in the meta table, but some databases have no meta table.
   // TODO(shess): Maybe just have all databases use the alt option?