Index: chrome/utility/importer/edge_database_reader_win.h |
diff --git a/chrome/utility/importer/edge_database_reader_win.h b/chrome/utility/importer/edge_database_reader_win.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1b87801358b637fef6d2d99cf59adacf261d6bb9 |
--- /dev/null |
+++ b/chrome/utility/importer/edge_database_reader_win.h |
@@ -0,0 +1,95 @@ |
+// Copyright 2015 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 CHROME_UTILITY_IMPORTER_EDGE_DATABASE_READER_WIN_H_ |
+#define CHROME_UTILITY_IMPORTER_EDGE_DATABASE_READER_WIN_H_ |
+ |
+#define JET_UNICODE |
+#include <esent.h> |
+#undef JET_UNICODE |
+ |
+#include <map> |
+ |
+#include "base/macros.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "base/strings/string16.h" |
+ |
+class EdgeErrorObject { |
+ public: |
+ EdgeErrorObject() : last_error_(JET_errSuccess) {} |
+ |
+ // Get the last error converted to a descriptive string. |
+ base::string16 GetErrorMessage() const; |
+ // Get the last error value. |
+ JET_ERR last_error() const { return last_error_; } |
+ |
+ protected: |
+ // This function returns true if the passed error parameter is equal |
+ // to JET_errSuccess |
+ bool SetLastError(JET_ERR error); |
+ |
+ private: |
+ JET_ERR last_error_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(EdgeErrorObject); |
+}; |
+ |
+class EdgeDatabaseTableEnumerator : public EdgeErrorObject { |
+ public: |
+ EdgeDatabaseTableEnumerator(const base::string16& table_name, |
+ JET_SESID session_id, |
+ JET_TABLEID table_id); |
+ |
+ ~EdgeDatabaseTableEnumerator(); |
+ |
+ const base::string16& table_name() { return table_name_; } |
+ |
+ // Reset the enumerator to the start of the table. Returns true if successful. |
+ bool Reset(); |
+ // Move to the next row in the table. Returns false on error or no more rows. |
+ bool Next(); |
+ |
+ // Retrieve a column's data value. If a NULL is encountered in the column the |
+ // default value for the template type is placed in |value|. |
+ template <typename T> |
+ bool RetrieveColumn(const base::string16& column_name, T* value); |
+ |
+ private: |
+ const JET_COLUMNBASE& GetColumnByName(const base::string16& column_name); |
+ |
+ std::map<const base::string16, JET_COLUMNBASE> columns_by_name_; |
+ JET_TABLEID table_id_; |
+ base::string16 table_name_; |
+ JET_SESID session_id_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(EdgeDatabaseTableEnumerator); |
+}; |
+ |
+class EdgeDatabaseReader : public EdgeErrorObject { |
+ public: |
+ EdgeDatabaseReader() |
+ : db_id_(JET_dbidNil), |
+ instance_id_(JET_instanceNil), |
+ session_id_(JET_sesidNil) {} |
+ |
+ ~EdgeDatabaseReader(); |
+ |
+ // Open the database from a file path. Returns true on success. |
+ bool OpenDatabase(const base::string16& database_file); |
+ |
+ // Open a row enumerator for a specified table. Returns a nullptr on error. |
+ scoped_ptr<EdgeDatabaseTableEnumerator> OpenTableEnumerator( |
+ const base::string16& table_name); |
+ |
+ private: |
+ bool IsOpen() { return instance_id_ != JET_instanceNil; } |
+ |
+ JET_DBID db_id_; |
+ JET_INSTANCE instance_id_; |
+ JET_SESID session_id_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(EdgeDatabaseReader); |
+}; |
+ |
+#endif // CHROME_UTILITY_IMPORTER_EDGE_DATABASE_READER_WIN_H_ |