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

Side by Side Diff: third_party/sqlite/src/legacy.c

Issue 3108030: Move bundled copy of sqlite one level deeper to better separate it... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years, 4 months 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 | « third_party/sqlite/src/journal.c ('k') | third_party/sqlite/src/lempar.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 ** 2001 September 15
3 **
4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing:
6 **
7 ** May you do good and not evil.
8 ** May you find forgiveness for yourself and forgive others.
9 ** May you share freely, never taking more than you give.
10 **
11 *************************************************************************
12 ** Main file for the SQLite library. The routines in this file
13 ** implement the programmer interface to the library. Routines in
14 ** other files are for internal use by SQLite and should not be
15 ** accessed by users of the library.
16 **
17 ** $Id: legacy.c,v 1.35 2009/08/07 16:56:00 danielk1977 Exp $
18 */
19
20 #include "sqliteInt.h"
21
22 /*
23 ** Execute SQL code. Return one of the SQLITE_ success/failure
24 ** codes. Also write an error message into memory obtained from
25 ** malloc() and make *pzErrMsg point to that message.
26 **
27 ** If the SQL is a query, then for each row in the query result
28 ** the xCallback() function is called. pArg becomes the first
29 ** argument to xCallback(). If xCallback=NULL then no callback
30 ** is invoked, even for queries.
31 */
32 int sqlite3_exec(
33 sqlite3 *db, /* The database on which the SQL executes */
34 const char *zSql, /* The SQL to be executed */
35 sqlite3_callback xCallback, /* Invoke this callback routine */
36 void *pArg, /* First argument to xCallback() */
37 char **pzErrMsg /* Write error messages here */
38 ){
39 int rc = SQLITE_OK; /* Return code */
40 const char *zLeftover; /* Tail of unprocessed SQL */
41 sqlite3_stmt *pStmt = 0; /* The current SQL statement */
42 char **azCols = 0; /* Names of result columns */
43 int nRetry = 0; /* Number of retry attempts */
44 int callbackIsInit; /* True if callback data is initialized */
45
46 if( zSql==0 ) zSql = "";
47
48 sqlite3_mutex_enter(db->mutex);
49 sqlite3Error(db, SQLITE_OK, 0);
50 while( (rc==SQLITE_OK || (rc==SQLITE_SCHEMA && (++nRetry)<2)) && zSql[0] ){
51 int nCol;
52 char **azVals = 0;
53
54 pStmt = 0;
55 rc = sqlite3_prepare(db, zSql, -1, &pStmt, &zLeftover);
56 assert( rc==SQLITE_OK || pStmt==0 );
57 if( rc!=SQLITE_OK ){
58 continue;
59 }
60 if( !pStmt ){
61 /* this happens for a comment or white-space */
62 zSql = zLeftover;
63 continue;
64 }
65
66 callbackIsInit = 0;
67 nCol = sqlite3_column_count(pStmt);
68
69 while( 1 ){
70 int i;
71 rc = sqlite3_step(pStmt);
72
73 /* Invoke the callback function if required */
74 if( xCallback && (SQLITE_ROW==rc ||
75 (SQLITE_DONE==rc && !callbackIsInit
76 && db->flags&SQLITE_NullCallback)) ){
77 if( !callbackIsInit ){
78 azCols = sqlite3DbMallocZero(db, 2*nCol*sizeof(const char*) + 1);
79 if( azCols==0 ){
80 goto exec_out;
81 }
82 for(i=0; i<nCol; i++){
83 azCols[i] = (char *)sqlite3_column_name(pStmt, i);
84 /* sqlite3VdbeSetColName() installs column names as UTF8
85 ** strings so there is no way for sqlite3_column_name() to fail. */
86 assert( azCols[i]!=0 );
87 }
88 callbackIsInit = 1;
89 }
90 if( rc==SQLITE_ROW ){
91 azVals = &azCols[nCol];
92 for(i=0; i<nCol; i++){
93 azVals[i] = (char *)sqlite3_column_text(pStmt, i);
94 if( !azVals[i] && sqlite3_column_type(pStmt, i)!=SQLITE_NULL ){
95 db->mallocFailed = 1;
96 goto exec_out;
97 }
98 }
99 }
100 if( xCallback(pArg, nCol, azVals, azCols) ){
101 rc = SQLITE_ABORT;
102 sqlite3VdbeFinalize((Vdbe *)pStmt);
103 pStmt = 0;
104 sqlite3Error(db, SQLITE_ABORT, 0);
105 goto exec_out;
106 }
107 }
108
109 if( rc!=SQLITE_ROW ){
110 rc = sqlite3VdbeFinalize((Vdbe *)pStmt);
111 pStmt = 0;
112 if( rc!=SQLITE_SCHEMA ){
113 nRetry = 0;
114 zSql = zLeftover;
115 while( sqlite3Isspace(zSql[0]) ) zSql++;
116 }
117 break;
118 }
119 }
120
121 sqlite3DbFree(db, azCols);
122 azCols = 0;
123 }
124
125 exec_out:
126 if( pStmt ) sqlite3VdbeFinalize((Vdbe *)pStmt);
127 sqlite3DbFree(db, azCols);
128
129 rc = sqlite3ApiExit(db, rc);
130 if( rc!=SQLITE_OK && ALWAYS(rc==sqlite3_errcode(db)) && pzErrMsg ){
131 int nErrMsg = 1 + sqlite3Strlen30(sqlite3_errmsg(db));
132 *pzErrMsg = sqlite3Malloc(nErrMsg);
133 if( *pzErrMsg ){
134 memcpy(*pzErrMsg, sqlite3_errmsg(db), nErrMsg);
135 }else{
136 rc = SQLITE_NOMEM;
137 sqlite3Error(db, SQLITE_NOMEM, 0);
138 }
139 }else if( pzErrMsg ){
140 *pzErrMsg = 0;
141 }
142
143 assert( (rc&db->errMask)==rc );
144 sqlite3_mutex_leave(db->mutex);
145 return rc;
146 }
OLDNEW
« no previous file with comments | « third_party/sqlite/src/journal.c ('k') | third_party/sqlite/src/lempar.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698