| OLD | NEW | 
|    1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |    1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 
|    2 // Use of this source code is governed by a BSD-style license that can be |    2 // Use of this source code is governed by a BSD-style license that can be | 
|    3 // found in the LICENSE file. |    3 // found in the LICENSE file. | 
|    4  |    4  | 
|    5 #ifndef APP_SQL_CONNECTION_H_ |    5 #ifndef APP_SQL_CONNECTION_H_ | 
|    6 #define APP_SQL_CONNECTION_H_ |    6 #define APP_SQL_CONNECTION_H_ | 
|    7  |    7  | 
|    8 #include <map> |    8 #include <map> | 
|    9 #include <set> |    9 #include <set> | 
|   10 #include <string> |   10 #include <string> | 
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   69 class Connection; |   69 class Connection; | 
|   70  |   70  | 
|   71 // ErrorDelegate defines the interface to implement error handling and recovery |   71 // ErrorDelegate defines the interface to implement error handling and recovery | 
|   72 // for sqlite operations. This allows the rest of the classes to return true or |   72 // for sqlite operations. This allows the rest of the classes to return true or | 
|   73 // false while the actual error code and causing statement are delivered using |   73 // false while the actual error code and causing statement are delivered using | 
|   74 // the OnError() callback. |   74 // the OnError() callback. | 
|   75 // The tipical usage is to centralize the code designed to handle database |   75 // The tipical usage is to centralize the code designed to handle database | 
|   76 // corruption, low-level IO errors or locking violations. |   76 // corruption, low-level IO errors or locking violations. | 
|   77 class ErrorDelegate : public base::RefCounted<ErrorDelegate> { |   77 class ErrorDelegate : public base::RefCounted<ErrorDelegate> { | 
|   78  public: |   78  public: | 
|   79   virtual ~ErrorDelegate() {} |  | 
|   80   // |error| is an sqlite result code as seen in sqlite\preprocessed\sqlite3.h |   79   // |error| is an sqlite result code as seen in sqlite\preprocessed\sqlite3.h | 
|   81   // |connection| is db connection where the error happened and |stmt| is |   80   // |connection| is db connection where the error happened and |stmt| is | 
|   82   // our best guess at the statement that triggered the error.  Do not store |   81   // our best guess at the statement that triggered the error.  Do not store | 
|   83   // these pointers. |   82   // these pointers. | 
|   84   // |   83   // | 
|   85   // |stmt| MAY BE NULL if there is no statement causing the problem (i.e. on |   84   // |stmt| MAY BE NULL if there is no statement causing the problem (i.e. on | 
|   86   // initialization). |   85   // initialization). | 
|   87   // |   86   // | 
|   88   // If the error condition has been fixed an the original statement succesfuly |   87   // If the error condition has been fixed an the original statement succesfuly | 
|   89   // re-tried then returning SQLITE_OK is appropiate; otherwise is recomended |   88   // re-tried then returning SQLITE_OK is appropiate; otherwise is recomended | 
|   90   // that you return the original |error| or the appropiae error code. |   89   // that you return the original |error| or the appropiae error code. | 
|   91   virtual int OnError(int error, Connection* connection, Statement* stmt) = 0; |   90   virtual int OnError(int error, Connection* connection, Statement* stmt) = 0; | 
 |   91  | 
 |   92  protected: | 
 |   93   friend class base::RefCounted<ErrorDelegate>; | 
 |   94  | 
 |   95   virtual ~ErrorDelegate() {} | 
|   92 }; |   96 }; | 
|   93  |   97  | 
|   94 class Connection { |   98 class Connection { | 
|   95  private: |   99  private: | 
|   96   class StatementRef;  // Forward declaration, see real one below. |  100   class StatementRef;  // Forward declaration, see real one below. | 
|   97  |  101  | 
|   98  public: |  102  public: | 
|   99   // The database is opened by calling Open[InMemory](). Any uncommitted |  103   // The database is opened by calling Open[InMemory](). Any uncommitted | 
|  100   // transactions will be rolled back when this object is deleted. |  104   // transactions will be rolled back when this object is deleted. | 
|  101   Connection(); |  105   Connection(); | 
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  279   // indicate that the statement hasn't been created yet, has an error, or has |  283   // indicate that the statement hasn't been created yet, has an error, or has | 
|  280   // been destroyed. |  284   // been destroyed. | 
|  281   // |  285   // | 
|  282   // The Connection may revoke a StatementRef in some error cases, so callers |  286   // The Connection may revoke a StatementRef in some error cases, so callers | 
|  283   // should always check validity before using. |  287   // should always check validity before using. | 
|  284   class StatementRef : public base::RefCounted<StatementRef> { |  288   class StatementRef : public base::RefCounted<StatementRef> { | 
|  285    public: |  289    public: | 
|  286     // Default constructor initializes to an invalid statement. |  290     // Default constructor initializes to an invalid statement. | 
|  287     StatementRef(); |  291     StatementRef(); | 
|  288     StatementRef(Connection* connection, sqlite3_stmt* stmt); |  292     StatementRef(Connection* connection, sqlite3_stmt* stmt); | 
|  289     ~StatementRef(); |  | 
|  290  |  293  | 
|  291     // When true, the statement can be used. |  294     // When true, the statement can be used. | 
|  292     bool is_valid() const { return !!stmt_; } |  295     bool is_valid() const { return !!stmt_; } | 
|  293  |  296  | 
|  294     // If we've not been linked to a connection, this will be NULL. Guaranteed |  297     // If we've not been linked to a connection, this will be NULL. Guaranteed | 
|  295     // non-NULL when is_valid(). |  298     // non-NULL when is_valid(). | 
|  296     Connection* connection() const { return connection_; } |  299     Connection* connection() const { return connection_; } | 
|  297  |  300  | 
|  298     // Returns the sqlite statement if any. If the statement is not active, |  301     // Returns the sqlite statement if any. If the statement is not active, | 
|  299     // this will return NULL. |  302     // this will return NULL. | 
|  300     sqlite3_stmt* stmt() const { return stmt_; } |  303     sqlite3_stmt* stmt() const { return stmt_; } | 
|  301  |  304  | 
|  302     // Destroys the compiled statement and marks it NULL. The statement will |  305     // Destroys the compiled statement and marks it NULL. The statement will | 
|  303     // no longer be active. |  306     // no longer be active. | 
|  304     void Close(); |  307     void Close(); | 
|  305  |  308  | 
|  306    private: |  309    private: | 
 |  310     friend class base::RefCounted<StatementRef>; | 
 |  311  | 
 |  312     ~StatementRef(); | 
 |  313  | 
|  307     Connection* connection_; |  314     Connection* connection_; | 
|  308     sqlite3_stmt* stmt_; |  315     sqlite3_stmt* stmt_; | 
|  309  |  316  | 
|  310     DISALLOW_COPY_AND_ASSIGN(StatementRef); |  317     DISALLOW_COPY_AND_ASSIGN(StatementRef); | 
|  311   }; |  318   }; | 
|  312   friend class StatementRef; |  319   friend class StatementRef; | 
|  313  |  320  | 
|  314   // Executes a rollback statement, ignoring all transaction state. Used |  321   // Executes a rollback statement, ignoring all transaction state. Used | 
|  315   // internally in the transaction management code. |  322   // internally in the transaction management code. | 
|  316   void DoRollback(); |  323   void DoRollback(); | 
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  360   // This object handles errors resulting from all forms of executing sqlite |  367   // This object handles errors resulting from all forms of executing sqlite | 
|  361   // commands or statements. It can be null which means default handling. |  368   // commands or statements. It can be null which means default handling. | 
|  362   scoped_refptr<ErrorDelegate> error_delegate_; |  369   scoped_refptr<ErrorDelegate> error_delegate_; | 
|  363  |  370  | 
|  364   DISALLOW_COPY_AND_ASSIGN(Connection); |  371   DISALLOW_COPY_AND_ASSIGN(Connection); | 
|  365 }; |  372 }; | 
|  366  |  373  | 
|  367 }  // namespace sql |  374 }  // namespace sql | 
|  368  |  375  | 
|  369 #endif  // APP_SQL_CONNECTION_H_ |  376 #endif  // APP_SQL_CONNECTION_H_ | 
| OLD | NEW |