Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(91)

Side by Side Diff: sql/connection.h

Issue 8899012: Put debugging assertions into sql::Statement. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Oops, Execute() should stay loose. Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | sql/connection.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 SQL_CONNECTION_H_ 5 #ifndef SQL_CONNECTION_H_
6 #define SQL_CONNECTION_H_ 6 #define SQL_CONNECTION_H_
7 #pragma once 7 #pragma once
8 8
9 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 197
198 // Returns the current transaction nesting, which will be 0 if there are 198 // Returns the current transaction nesting, which will be 0 if there are
199 // no open transactions. 199 // no open transactions.
200 int transaction_nesting() const { return transaction_nesting_; } 200 int transaction_nesting() const { return transaction_nesting_; }
201 201
202 // Statements ---------------------------------------------------------------- 202 // Statements ----------------------------------------------------------------
203 203
204 // Executes the given SQL string, returning true on success. This is 204 // Executes the given SQL string, returning true on success. This is
205 // normally used for simple, 1-off statements that don't take any bound 205 // normally used for simple, 1-off statements that don't take any bound
206 // parameters and don't return any data (e.g. CREATE TABLE). 206 // parameters and don't return any data (e.g. CREATE TABLE).
207 // This will DCHECK if the |sql| contains errors.
207 bool Execute(const char* sql); 208 bool Execute(const char* sql);
208 209
210 // Like Execute(), but returns the error code given by SQLite.
211 int ExecuteAndReturnErrorCode(const char* sql);
212
209 // Returns true if we have a statement with the given identifier already 213 // Returns true if we have a statement with the given identifier already
210 // cached. This is normally not necessary to call, but can be useful if the 214 // cached. This is normally not necessary to call, but can be useful if the
211 // caller has to dynamically build up SQL to avoid doing so if it's already 215 // caller has to dynamically build up SQL to avoid doing so if it's already
212 // cached. 216 // cached.
213 bool HasCachedStatement(const StatementID& id) const; 217 bool HasCachedStatement(const StatementID& id) const;
214 218
215 // Returns a statement for the given SQL using the statement cache. It can 219 // Returns a statement for the given SQL using the statement cache. It can
216 // take a nontrivial amount of work to parse and compile a statement, so 220 // take a nontrivial amount of work to parse and compile a statement, so
217 // keeping commonly-used ones around for future use is important for 221 // keeping commonly-used ones around for future use is important for
218 // performance. 222 // performance.
219 // 223 //
220 // The SQL may have an error, so the caller must check validity of the 224 // If the |sql| has an error, an invalid, inert StatementRef is returned (and
221 // statement before using it. 225 // the code will crash in debug). The caller must deal with this eventuality,
226 // either by checking validity of the |sql| before calling, by correctly
227 // handling the return of an inert statement, or both.
222 // 228 //
223 // The StatementID and the SQL must always correspond to one-another. The 229 // The StatementID and the SQL must always correspond to one-another. The
224 // ID is the lookup into the cache, so crazy things will happen if you use 230 // ID is the lookup into the cache, so crazy things will happen if you use
225 // different SQL with the same ID. 231 // different SQL with the same ID.
226 // 232 //
227 // You will normally use the SQL_FROM_HERE macro to generate a statement 233 // You will normally use the SQL_FROM_HERE macro to generate a statement
228 // ID associated with the current line of code. This gives uniqueness without 234 // ID associated with the current line of code. This gives uniqueness without
229 // you having to manage unique names. See StatementID above for more. 235 // you having to manage unique names. See StatementID above for more.
230 // 236 //
231 // Example: 237 // Example:
232 // sql::Statement stmt(connection_.GetCachedStatement( 238 // sql::Statement stmt(connection_.GetCachedStatement(
233 // SQL_FROM_HERE, "SELECT * FROM foo")); 239 // SQL_FROM_HERE, "SELECT * FROM foo"));
234 // if (!stmt) 240 // if (!stmt)
235 // return false; // Error creating statement. 241 // return false; // Error creating statement.
236 scoped_refptr<StatementRef> GetCachedStatement(const StatementID& id, 242 scoped_refptr<StatementRef> GetCachedStatement(const StatementID& id,
237 const char* sql); 243 const char* sql);
238 244
245 // Used to check a |sql| statement for syntactic validity. If the statement is
246 // valid SQL, returns true.
247 bool IsSQLValid(const char* sql);
248
239 // Returns a non-cached statement for the given SQL. Use this for SQL that 249 // Returns a non-cached statement for the given SQL. Use this for SQL that
240 // is only executed once or only rarely (there is overhead associated with 250 // is only executed once or only rarely (there is overhead associated with
241 // keeping a statement cached). 251 // keeping a statement cached).
242 // 252 //
243 // See GetCachedStatement above for examples and error information. 253 // See GetCachedStatement above for examples and error information.
244 scoped_refptr<StatementRef> GetUniqueStatement(const char* sql); 254 scoped_refptr<StatementRef> GetUniqueStatement(const char* sql);
245 255
246 // Info querying ------------------------------------------------------------- 256 // Info querying -------------------------------------------------------------
247 257
248 // Returns true if the given table exists. 258 // Returns true if the given table exists.
(...skipping 18 matching lines...) Expand all
267 277
268 // Returns the errno associated with GetErrorCode(). See 278 // Returns the errno associated with GetErrorCode(). See
269 // SQLITE_LAST_ERRNO in SQLite documentation. 279 // SQLITE_LAST_ERRNO in SQLite documentation.
270 int GetLastErrno() const; 280 int GetLastErrno() const;
271 281
272 // Returns a pointer to a statically allocated string associated with the 282 // Returns a pointer to a statically allocated string associated with the
273 // last sqlite operation. 283 // last sqlite operation.
274 const char* GetErrorMessage() const; 284 const char* GetErrorMessage() const;
275 285
276 private: 286 private:
277 // Statement access StatementRef which we don't want to expose to erverybody 287 // Statement accesses StatementRef which we don't want to expose to everybody
278 // (they should go through Statement). 288 // (they should go through Statement).
279 friend class Statement; 289 friend class Statement;
280 290
281 // Internal initialize function used by both Init and InitInMemory. The file 291 // Internal initialize function used by both Init and InitInMemory. The file
282 // name is always 8 bits since we want to use the 8-bit version of 292 // name is always 8 bits since we want to use the 8-bit version of
283 // sqlite3_open. The string can also be sqlite's special ":memory:" string. 293 // sqlite3_open. The string can also be sqlite's special ":memory:" string.
284 bool OpenInternal(const std::string& file_name); 294 bool OpenInternal(const std::string& file_name);
285 295
286 // A StatementRef is a refcounted wrapper around a sqlite statement pointer. 296 // A StatementRef is a refcounted wrapper around a sqlite statement pointer.
287 // Refcounting allows us to give these statements out to sql::Statement 297 // Refcounting allows us to give these statements out to sql::Statement
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 // This object handles errors resulting from all forms of executing sqlite 389 // This object handles errors resulting from all forms of executing sqlite
380 // commands or statements. It can be null which means default handling. 390 // commands or statements. It can be null which means default handling.
381 scoped_refptr<ErrorDelegate> error_delegate_; 391 scoped_refptr<ErrorDelegate> error_delegate_;
382 392
383 DISALLOW_COPY_AND_ASSIGN(Connection); 393 DISALLOW_COPY_AND_ASSIGN(Connection);
384 }; 394 };
385 395
386 } // namespace sql 396 } // namespace sql
387 397
388 #endif // SQL_CONNECTION_H_ 398 #endif // SQL_CONNECTION_H_
OLDNEW
« no previous file with comments | « no previous file | sql/connection.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698