Annotation of embedaddon/sqlite3/src/vdbeapi.c, revision 1.1.1.1
1.1 misho 1: /*
2: ** 2004 May 26
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: **
13: ** This file contains code use to implement APIs that are part of the
14: ** VDBE.
15: */
16: #include "sqliteInt.h"
17: #include "vdbeInt.h"
18:
19: #ifndef SQLITE_OMIT_DEPRECATED
20: /*
21: ** Return TRUE (non-zero) of the statement supplied as an argument needs
22: ** to be recompiled. A statement needs to be recompiled whenever the
23: ** execution environment changes in a way that would alter the program
24: ** that sqlite3_prepare() generates. For example, if new functions or
25: ** collating sequences are registered or if an authorizer function is
26: ** added or changed.
27: */
28: int sqlite3_expired(sqlite3_stmt *pStmt){
29: Vdbe *p = (Vdbe*)pStmt;
30: return p==0 || p->expired;
31: }
32: #endif
33:
34: /*
35: ** Check on a Vdbe to make sure it has not been finalized. Log
36: ** an error and return true if it has been finalized (or is otherwise
37: ** invalid). Return false if it is ok.
38: */
39: static int vdbeSafety(Vdbe *p){
40: if( p->db==0 ){
41: sqlite3_log(SQLITE_MISUSE, "API called with finalized prepared statement");
42: return 1;
43: }else{
44: return 0;
45: }
46: }
47: static int vdbeSafetyNotNull(Vdbe *p){
48: if( p==0 ){
49: sqlite3_log(SQLITE_MISUSE, "API called with NULL prepared statement");
50: return 1;
51: }else{
52: return vdbeSafety(p);
53: }
54: }
55:
56: /*
57: ** The following routine destroys a virtual machine that is created by
58: ** the sqlite3_compile() routine. The integer returned is an SQLITE_
59: ** success/failure code that describes the result of executing the virtual
60: ** machine.
61: **
62: ** This routine sets the error code and string returned by
63: ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
64: */
65: int sqlite3_finalize(sqlite3_stmt *pStmt){
66: int rc;
67: if( pStmt==0 ){
68: /* IMPLEMENTATION-OF: R-57228-12904 Invoking sqlite3_finalize() on a NULL
69: ** pointer is a harmless no-op. */
70: rc = SQLITE_OK;
71: }else{
72: Vdbe *v = (Vdbe*)pStmt;
73: sqlite3 *db = v->db;
74: #if SQLITE_THREADSAFE
75: sqlite3_mutex *mutex;
76: #endif
77: if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT;
78: #if SQLITE_THREADSAFE
79: mutex = v->db->mutex;
80: #endif
81: sqlite3_mutex_enter(mutex);
82: rc = sqlite3VdbeFinalize(v);
83: rc = sqlite3ApiExit(db, rc);
84: sqlite3_mutex_leave(mutex);
85: }
86: return rc;
87: }
88:
89: /*
90: ** Terminate the current execution of an SQL statement and reset it
91: ** back to its starting state so that it can be reused. A success code from
92: ** the prior execution is returned.
93: **
94: ** This routine sets the error code and string returned by
95: ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
96: */
97: int sqlite3_reset(sqlite3_stmt *pStmt){
98: int rc;
99: if( pStmt==0 ){
100: rc = SQLITE_OK;
101: }else{
102: Vdbe *v = (Vdbe*)pStmt;
103: sqlite3_mutex_enter(v->db->mutex);
104: rc = sqlite3VdbeReset(v);
105: sqlite3VdbeRewind(v);
106: assert( (rc & (v->db->errMask))==rc );
107: rc = sqlite3ApiExit(v->db, rc);
108: sqlite3_mutex_leave(v->db->mutex);
109: }
110: return rc;
111: }
112:
113: /*
114: ** Set all the parameters in the compiled SQL statement to NULL.
115: */
116: int sqlite3_clear_bindings(sqlite3_stmt *pStmt){
117: int i;
118: int rc = SQLITE_OK;
119: Vdbe *p = (Vdbe*)pStmt;
120: #if SQLITE_THREADSAFE
121: sqlite3_mutex *mutex = ((Vdbe*)pStmt)->db->mutex;
122: #endif
123: sqlite3_mutex_enter(mutex);
124: for(i=0; i<p->nVar; i++){
125: sqlite3VdbeMemRelease(&p->aVar[i]);
126: p->aVar[i].flags = MEM_Null;
127: }
128: if( p->isPrepareV2 && p->expmask ){
129: p->expired = 1;
130: }
131: sqlite3_mutex_leave(mutex);
132: return rc;
133: }
134:
135:
136: /**************************** sqlite3_value_ *******************************
137: ** The following routines extract information from a Mem or sqlite3_value
138: ** structure.
139: */
140: const void *sqlite3_value_blob(sqlite3_value *pVal){
141: Mem *p = (Mem*)pVal;
142: if( p->flags & (MEM_Blob|MEM_Str) ){
143: sqlite3VdbeMemExpandBlob(p);
144: p->flags &= ~MEM_Str;
145: p->flags |= MEM_Blob;
146: return p->n ? p->z : 0;
147: }else{
148: return sqlite3_value_text(pVal);
149: }
150: }
151: int sqlite3_value_bytes(sqlite3_value *pVal){
152: return sqlite3ValueBytes(pVal, SQLITE_UTF8);
153: }
154: int sqlite3_value_bytes16(sqlite3_value *pVal){
155: return sqlite3ValueBytes(pVal, SQLITE_UTF16NATIVE);
156: }
157: double sqlite3_value_double(sqlite3_value *pVal){
158: return sqlite3VdbeRealValue((Mem*)pVal);
159: }
160: int sqlite3_value_int(sqlite3_value *pVal){
161: return (int)sqlite3VdbeIntValue((Mem*)pVal);
162: }
163: sqlite_int64 sqlite3_value_int64(sqlite3_value *pVal){
164: return sqlite3VdbeIntValue((Mem*)pVal);
165: }
166: const unsigned char *sqlite3_value_text(sqlite3_value *pVal){
167: return (const unsigned char *)sqlite3ValueText(pVal, SQLITE_UTF8);
168: }
169: #ifndef SQLITE_OMIT_UTF16
170: const void *sqlite3_value_text16(sqlite3_value* pVal){
171: return sqlite3ValueText(pVal, SQLITE_UTF16NATIVE);
172: }
173: const void *sqlite3_value_text16be(sqlite3_value *pVal){
174: return sqlite3ValueText(pVal, SQLITE_UTF16BE);
175: }
176: const void *sqlite3_value_text16le(sqlite3_value *pVal){
177: return sqlite3ValueText(pVal, SQLITE_UTF16LE);
178: }
179: #endif /* SQLITE_OMIT_UTF16 */
180: int sqlite3_value_type(sqlite3_value* pVal){
181: return pVal->type;
182: }
183:
184: /**************************** sqlite3_result_ *******************************
185: ** The following routines are used by user-defined functions to specify
186: ** the function result.
187: **
188: ** The setStrOrError() funtion calls sqlite3VdbeMemSetStr() to store the
189: ** result as a string or blob but if the string or blob is too large, it
190: ** then sets the error code to SQLITE_TOOBIG
191: */
192: static void setResultStrOrError(
193: sqlite3_context *pCtx, /* Function context */
194: const char *z, /* String pointer */
195: int n, /* Bytes in string, or negative */
196: u8 enc, /* Encoding of z. 0 for BLOBs */
197: void (*xDel)(void*) /* Destructor function */
198: ){
199: if( sqlite3VdbeMemSetStr(&pCtx->s, z, n, enc, xDel)==SQLITE_TOOBIG ){
200: sqlite3_result_error_toobig(pCtx);
201: }
202: }
203: void sqlite3_result_blob(
204: sqlite3_context *pCtx,
205: const void *z,
206: int n,
207: void (*xDel)(void *)
208: ){
209: assert( n>=0 );
210: assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
211: setResultStrOrError(pCtx, z, n, 0, xDel);
212: }
213: void sqlite3_result_double(sqlite3_context *pCtx, double rVal){
214: assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
215: sqlite3VdbeMemSetDouble(&pCtx->s, rVal);
216: }
217: void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){
218: assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
219: pCtx->isError = SQLITE_ERROR;
220: sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, SQLITE_TRANSIENT);
221: }
222: #ifndef SQLITE_OMIT_UTF16
223: void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){
224: assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
225: pCtx->isError = SQLITE_ERROR;
226: sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT);
227: }
228: #endif
229: void sqlite3_result_int(sqlite3_context *pCtx, int iVal){
230: assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
231: sqlite3VdbeMemSetInt64(&pCtx->s, (i64)iVal);
232: }
233: void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){
234: assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
235: sqlite3VdbeMemSetInt64(&pCtx->s, iVal);
236: }
237: void sqlite3_result_null(sqlite3_context *pCtx){
238: assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
239: sqlite3VdbeMemSetNull(&pCtx->s);
240: }
241: void sqlite3_result_text(
242: sqlite3_context *pCtx,
243: const char *z,
244: int n,
245: void (*xDel)(void *)
246: ){
247: assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
248: setResultStrOrError(pCtx, z, n, SQLITE_UTF8, xDel);
249: }
250: #ifndef SQLITE_OMIT_UTF16
251: void sqlite3_result_text16(
252: sqlite3_context *pCtx,
253: const void *z,
254: int n,
255: void (*xDel)(void *)
256: ){
257: assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
258: setResultStrOrError(pCtx, z, n, SQLITE_UTF16NATIVE, xDel);
259: }
260: void sqlite3_result_text16be(
261: sqlite3_context *pCtx,
262: const void *z,
263: int n,
264: void (*xDel)(void *)
265: ){
266: assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
267: setResultStrOrError(pCtx, z, n, SQLITE_UTF16BE, xDel);
268: }
269: void sqlite3_result_text16le(
270: sqlite3_context *pCtx,
271: const void *z,
272: int n,
273: void (*xDel)(void *)
274: ){
275: assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
276: setResultStrOrError(pCtx, z, n, SQLITE_UTF16LE, xDel);
277: }
278: #endif /* SQLITE_OMIT_UTF16 */
279: void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){
280: assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
281: sqlite3VdbeMemCopy(&pCtx->s, pValue);
282: }
283: void sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){
284: assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
285: sqlite3VdbeMemSetZeroBlob(&pCtx->s, n);
286: }
287: void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){
288: pCtx->isError = errCode;
289: if( pCtx->s.flags & MEM_Null ){
290: sqlite3VdbeMemSetStr(&pCtx->s, sqlite3ErrStr(errCode), -1,
291: SQLITE_UTF8, SQLITE_STATIC);
292: }
293: }
294:
295: /* Force an SQLITE_TOOBIG error. */
296: void sqlite3_result_error_toobig(sqlite3_context *pCtx){
297: assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
298: pCtx->isError = SQLITE_TOOBIG;
299: sqlite3VdbeMemSetStr(&pCtx->s, "string or blob too big", -1,
300: SQLITE_UTF8, SQLITE_STATIC);
301: }
302:
303: /* An SQLITE_NOMEM error. */
304: void sqlite3_result_error_nomem(sqlite3_context *pCtx){
305: assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
306: sqlite3VdbeMemSetNull(&pCtx->s);
307: pCtx->isError = SQLITE_NOMEM;
308: pCtx->s.db->mallocFailed = 1;
309: }
310:
311: /*
312: ** This function is called after a transaction has been committed. It
313: ** invokes callbacks registered with sqlite3_wal_hook() as required.
314: */
315: static int doWalCallbacks(sqlite3 *db){
316: int rc = SQLITE_OK;
317: #ifndef SQLITE_OMIT_WAL
318: int i;
319: for(i=0; i<db->nDb; i++){
320: Btree *pBt = db->aDb[i].pBt;
321: if( pBt ){
322: int nEntry = sqlite3PagerWalCallback(sqlite3BtreePager(pBt));
323: if( db->xWalCallback && nEntry>0 && rc==SQLITE_OK ){
324: rc = db->xWalCallback(db->pWalArg, db, db->aDb[i].zName, nEntry);
325: }
326: }
327: }
328: #endif
329: return rc;
330: }
331:
332: /*
333: ** Execute the statement pStmt, either until a row of data is ready, the
334: ** statement is completely executed or an error occurs.
335: **
336: ** This routine implements the bulk of the logic behind the sqlite_step()
337: ** API. The only thing omitted is the automatic recompile if a
338: ** schema change has occurred. That detail is handled by the
339: ** outer sqlite3_step() wrapper procedure.
340: */
341: static int sqlite3Step(Vdbe *p){
342: sqlite3 *db;
343: int rc;
344:
345: assert(p);
346: if( p->magic!=VDBE_MAGIC_RUN ){
347: /* We used to require that sqlite3_reset() be called before retrying
348: ** sqlite3_step() after any error or after SQLITE_DONE. But beginning
349: ** with version 3.7.0, we changed this so that sqlite3_reset() would
350: ** be called automatically instead of throwing the SQLITE_MISUSE error.
351: ** This "automatic-reset" change is not technically an incompatibility,
352: ** since any application that receives an SQLITE_MISUSE is broken by
353: ** definition.
354: **
355: ** Nevertheless, some published applications that were originally written
356: ** for version 3.6.23 or earlier do in fact depend on SQLITE_MISUSE
357: ** returns, and those were broken by the automatic-reset change. As a
358: ** a work-around, the SQLITE_OMIT_AUTORESET compile-time restores the
359: ** legacy behavior of returning SQLITE_MISUSE for cases where the
360: ** previous sqlite3_step() returned something other than a SQLITE_LOCKED
361: ** or SQLITE_BUSY error.
362: */
363: #ifdef SQLITE_OMIT_AUTORESET
364: if( p->rc==SQLITE_BUSY || p->rc==SQLITE_LOCKED ){
365: sqlite3_reset((sqlite3_stmt*)p);
366: }else{
367: return SQLITE_MISUSE_BKPT;
368: }
369: #else
370: sqlite3_reset((sqlite3_stmt*)p);
371: #endif
372: }
373:
374: /* Check that malloc() has not failed. If it has, return early. */
375: db = p->db;
376: if( db->mallocFailed ){
377: p->rc = SQLITE_NOMEM;
378: return SQLITE_NOMEM;
379: }
380:
381: if( p->pc<=0 && p->expired ){
382: p->rc = SQLITE_SCHEMA;
383: rc = SQLITE_ERROR;
384: goto end_of_step;
385: }
386: if( p->pc<0 ){
387: /* If there are no other statements currently running, then
388: ** reset the interrupt flag. This prevents a call to sqlite3_interrupt
389: ** from interrupting a statement that has not yet started.
390: */
391: if( db->activeVdbeCnt==0 ){
392: db->u1.isInterrupted = 0;
393: }
394:
395: assert( db->writeVdbeCnt>0 || db->autoCommit==0 || db->nDeferredCons==0 );
396:
397: #ifndef SQLITE_OMIT_TRACE
398: if( db->xProfile && !db->init.busy ){
399: sqlite3OsCurrentTimeInt64(db->pVfs, &p->startTime);
400: }
401: #endif
402:
403: db->activeVdbeCnt++;
404: if( p->readOnly==0 ) db->writeVdbeCnt++;
405: p->pc = 0;
406: }
407: #ifndef SQLITE_OMIT_EXPLAIN
408: if( p->explain ){
409: rc = sqlite3VdbeList(p);
410: }else
411: #endif /* SQLITE_OMIT_EXPLAIN */
412: {
413: db->vdbeExecCnt++;
414: rc = sqlite3VdbeExec(p);
415: db->vdbeExecCnt--;
416: }
417:
418: #ifndef SQLITE_OMIT_TRACE
419: /* Invoke the profile callback if there is one
420: */
421: if( rc!=SQLITE_ROW && db->xProfile && !db->init.busy && p->zSql ){
422: sqlite3_int64 iNow;
423: sqlite3OsCurrentTimeInt64(db->pVfs, &iNow);
424: db->xProfile(db->pProfileArg, p->zSql, (iNow - p->startTime)*1000000);
425: }
426: #endif
427:
428: if( rc==SQLITE_DONE ){
429: assert( p->rc==SQLITE_OK );
430: p->rc = doWalCallbacks(db);
431: if( p->rc!=SQLITE_OK ){
432: rc = SQLITE_ERROR;
433: }
434: }
435:
436: db->errCode = rc;
437: if( SQLITE_NOMEM==sqlite3ApiExit(p->db, p->rc) ){
438: p->rc = SQLITE_NOMEM;
439: }
440: end_of_step:
441: /* At this point local variable rc holds the value that should be
442: ** returned if this statement was compiled using the legacy
443: ** sqlite3_prepare() interface. According to the docs, this can only
444: ** be one of the values in the first assert() below. Variable p->rc
445: ** contains the value that would be returned if sqlite3_finalize()
446: ** were called on statement p.
447: */
448: assert( rc==SQLITE_ROW || rc==SQLITE_DONE || rc==SQLITE_ERROR
449: || rc==SQLITE_BUSY || rc==SQLITE_MISUSE
450: );
451: assert( p->rc!=SQLITE_ROW && p->rc!=SQLITE_DONE );
452: if( p->isPrepareV2 && rc!=SQLITE_ROW && rc!=SQLITE_DONE ){
453: /* If this statement was prepared using sqlite3_prepare_v2(), and an
454: ** error has occured, then return the error code in p->rc to the
455: ** caller. Set the error code in the database handle to the same value.
456: */
457: rc = sqlite3VdbeTransferError(p);
458: }
459: return (rc&db->errMask);
460: }
461:
462: /*
463: ** The maximum number of times that a statement will try to reparse
464: ** itself before giving up and returning SQLITE_SCHEMA.
465: */
466: #ifndef SQLITE_MAX_SCHEMA_RETRY
467: # define SQLITE_MAX_SCHEMA_RETRY 5
468: #endif
469:
470: /*
471: ** This is the top-level implementation of sqlite3_step(). Call
472: ** sqlite3Step() to do most of the work. If a schema error occurs,
473: ** call sqlite3Reprepare() and try again.
474: */
475: int sqlite3_step(sqlite3_stmt *pStmt){
476: int rc = SQLITE_OK; /* Result from sqlite3Step() */
477: int rc2 = SQLITE_OK; /* Result from sqlite3Reprepare() */
478: Vdbe *v = (Vdbe*)pStmt; /* the prepared statement */
479: int cnt = 0; /* Counter to prevent infinite loop of reprepares */
480: sqlite3 *db; /* The database connection */
481:
482: if( vdbeSafetyNotNull(v) ){
483: return SQLITE_MISUSE_BKPT;
484: }
485: db = v->db;
486: sqlite3_mutex_enter(db->mutex);
487: while( (rc = sqlite3Step(v))==SQLITE_SCHEMA
488: && cnt++ < SQLITE_MAX_SCHEMA_RETRY
489: && (rc2 = rc = sqlite3Reprepare(v))==SQLITE_OK ){
490: sqlite3_reset(pStmt);
491: assert( v->expired==0 );
492: }
493: if( rc2!=SQLITE_OK && ALWAYS(v->isPrepareV2) && ALWAYS(db->pErr) ){
494: /* This case occurs after failing to recompile an sql statement.
495: ** The error message from the SQL compiler has already been loaded
496: ** into the database handle. This block copies the error message
497: ** from the database handle into the statement and sets the statement
498: ** program counter to 0 to ensure that when the statement is
499: ** finalized or reset the parser error message is available via
500: ** sqlite3_errmsg() and sqlite3_errcode().
501: */
502: const char *zErr = (const char *)sqlite3_value_text(db->pErr);
503: sqlite3DbFree(db, v->zErrMsg);
504: if( !db->mallocFailed ){
505: v->zErrMsg = sqlite3DbStrDup(db, zErr);
506: v->rc = rc2;
507: } else {
508: v->zErrMsg = 0;
509: v->rc = rc = SQLITE_NOMEM;
510: }
511: }
512: rc = sqlite3ApiExit(db, rc);
513: sqlite3_mutex_leave(db->mutex);
514: return rc;
515: }
516:
517: /*
518: ** Extract the user data from a sqlite3_context structure and return a
519: ** pointer to it.
520: */
521: void *sqlite3_user_data(sqlite3_context *p){
522: assert( p && p->pFunc );
523: return p->pFunc->pUserData;
524: }
525:
526: /*
527: ** Extract the user data from a sqlite3_context structure and return a
528: ** pointer to it.
529: **
530: ** IMPLEMENTATION-OF: R-46798-50301 The sqlite3_context_db_handle() interface
531: ** returns a copy of the pointer to the database connection (the 1st
532: ** parameter) of the sqlite3_create_function() and
533: ** sqlite3_create_function16() routines that originally registered the
534: ** application defined function.
535: */
536: sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){
537: assert( p && p->pFunc );
538: return p->s.db;
539: }
540:
541: /*
542: ** The following is the implementation of an SQL function that always
543: ** fails with an error message stating that the function is used in the
544: ** wrong context. The sqlite3_overload_function() API might construct
545: ** SQL function that use this routine so that the functions will exist
546: ** for name resolution but are actually overloaded by the xFindFunction
547: ** method of virtual tables.
548: */
549: void sqlite3InvalidFunction(
550: sqlite3_context *context, /* The function calling context */
551: int NotUsed, /* Number of arguments to the function */
552: sqlite3_value **NotUsed2 /* Value of each argument */
553: ){
554: const char *zName = context->pFunc->zName;
555: char *zErr;
556: UNUSED_PARAMETER2(NotUsed, NotUsed2);
557: zErr = sqlite3_mprintf(
558: "unable to use function %s in the requested context", zName);
559: sqlite3_result_error(context, zErr, -1);
560: sqlite3_free(zErr);
561: }
562:
563: /*
564: ** Allocate or return the aggregate context for a user function. A new
565: ** context is allocated on the first call. Subsequent calls return the
566: ** same context that was returned on prior calls.
567: */
568: void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){
569: Mem *pMem;
570: assert( p && p->pFunc && p->pFunc->xStep );
571: assert( sqlite3_mutex_held(p->s.db->mutex) );
572: pMem = p->pMem;
573: testcase( nByte<0 );
574: if( (pMem->flags & MEM_Agg)==0 ){
575: if( nByte<=0 ){
576: sqlite3VdbeMemReleaseExternal(pMem);
577: pMem->flags = MEM_Null;
578: pMem->z = 0;
579: }else{
580: sqlite3VdbeMemGrow(pMem, nByte, 0);
581: pMem->flags = MEM_Agg;
582: pMem->u.pDef = p->pFunc;
583: if( pMem->z ){
584: memset(pMem->z, 0, nByte);
585: }
586: }
587: }
588: return (void*)pMem->z;
589: }
590:
591: /*
592: ** Return the auxilary data pointer, if any, for the iArg'th argument to
593: ** the user-function defined by pCtx.
594: */
595: void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){
596: VdbeFunc *pVdbeFunc;
597:
598: assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
599: pVdbeFunc = pCtx->pVdbeFunc;
600: if( !pVdbeFunc || iArg>=pVdbeFunc->nAux || iArg<0 ){
601: return 0;
602: }
603: return pVdbeFunc->apAux[iArg].pAux;
604: }
605:
606: /*
607: ** Set the auxilary data pointer and delete function, for the iArg'th
608: ** argument to the user-function defined by pCtx. Any previous value is
609: ** deleted by calling the delete function specified when it was set.
610: */
611: void sqlite3_set_auxdata(
612: sqlite3_context *pCtx,
613: int iArg,
614: void *pAux,
615: void (*xDelete)(void*)
616: ){
617: struct AuxData *pAuxData;
618: VdbeFunc *pVdbeFunc;
619: if( iArg<0 ) goto failed;
620:
621: assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
622: pVdbeFunc = pCtx->pVdbeFunc;
623: if( !pVdbeFunc || pVdbeFunc->nAux<=iArg ){
624: int nAux = (pVdbeFunc ? pVdbeFunc->nAux : 0);
625: int nMalloc = sizeof(VdbeFunc) + sizeof(struct AuxData)*iArg;
626: pVdbeFunc = sqlite3DbRealloc(pCtx->s.db, pVdbeFunc, nMalloc);
627: if( !pVdbeFunc ){
628: goto failed;
629: }
630: pCtx->pVdbeFunc = pVdbeFunc;
631: memset(&pVdbeFunc->apAux[nAux], 0, sizeof(struct AuxData)*(iArg+1-nAux));
632: pVdbeFunc->nAux = iArg+1;
633: pVdbeFunc->pFunc = pCtx->pFunc;
634: }
635:
636: pAuxData = &pVdbeFunc->apAux[iArg];
637: if( pAuxData->pAux && pAuxData->xDelete ){
638: pAuxData->xDelete(pAuxData->pAux);
639: }
640: pAuxData->pAux = pAux;
641: pAuxData->xDelete = xDelete;
642: return;
643:
644: failed:
645: if( xDelete ){
646: xDelete(pAux);
647: }
648: }
649:
650: #ifndef SQLITE_OMIT_DEPRECATED
651: /*
652: ** Return the number of times the Step function of a aggregate has been
653: ** called.
654: **
655: ** This function is deprecated. Do not use it for new code. It is
656: ** provide only to avoid breaking legacy code. New aggregate function
657: ** implementations should keep their own counts within their aggregate
658: ** context.
659: */
660: int sqlite3_aggregate_count(sqlite3_context *p){
661: assert( p && p->pMem && p->pFunc && p->pFunc->xStep );
662: return p->pMem->n;
663: }
664: #endif
665:
666: /*
667: ** Return the number of columns in the result set for the statement pStmt.
668: */
669: int sqlite3_column_count(sqlite3_stmt *pStmt){
670: Vdbe *pVm = (Vdbe *)pStmt;
671: return pVm ? pVm->nResColumn : 0;
672: }
673:
674: /*
675: ** Return the number of values available from the current row of the
676: ** currently executing statement pStmt.
677: */
678: int sqlite3_data_count(sqlite3_stmt *pStmt){
679: Vdbe *pVm = (Vdbe *)pStmt;
680: if( pVm==0 || pVm->pResultSet==0 ) return 0;
681: return pVm->nResColumn;
682: }
683:
684:
685: /*
686: ** Check to see if column iCol of the given statement is valid. If
687: ** it is, return a pointer to the Mem for the value of that column.
688: ** If iCol is not valid, return a pointer to a Mem which has a value
689: ** of NULL.
690: */
691: static Mem *columnMem(sqlite3_stmt *pStmt, int i){
692: Vdbe *pVm;
693: Mem *pOut;
694:
695: pVm = (Vdbe *)pStmt;
696: if( pVm && pVm->pResultSet!=0 && i<pVm->nResColumn && i>=0 ){
697: sqlite3_mutex_enter(pVm->db->mutex);
698: pOut = &pVm->pResultSet[i];
699: }else{
700: /* If the value passed as the second argument is out of range, return
701: ** a pointer to the following static Mem object which contains the
702: ** value SQL NULL. Even though the Mem structure contains an element
703: ** of type i64, on certain architectures (x86) with certain compiler
704: ** switches (-Os), gcc may align this Mem object on a 4-byte boundary
705: ** instead of an 8-byte one. This all works fine, except that when
706: ** running with SQLITE_DEBUG defined the SQLite code sometimes assert()s
707: ** that a Mem structure is located on an 8-byte boundary. To prevent
708: ** these assert()s from failing, when building with SQLITE_DEBUG defined
709: ** using gcc, we force nullMem to be 8-byte aligned using the magical
710: ** __attribute__((aligned(8))) macro. */
711: static const Mem nullMem
712: #if defined(SQLITE_DEBUG) && defined(__GNUC__)
713: __attribute__((aligned(8)))
714: #endif
715: = {0, "", (double)0, {0}, 0, MEM_Null, SQLITE_NULL, 0,
716: #ifdef SQLITE_DEBUG
717: 0, 0, /* pScopyFrom, pFiller */
718: #endif
719: 0, 0 };
720:
721: if( pVm && ALWAYS(pVm->db) ){
722: sqlite3_mutex_enter(pVm->db->mutex);
723: sqlite3Error(pVm->db, SQLITE_RANGE, 0);
724: }
725: pOut = (Mem*)&nullMem;
726: }
727: return pOut;
728: }
729:
730: /*
731: ** This function is called after invoking an sqlite3_value_XXX function on a
732: ** column value (i.e. a value returned by evaluating an SQL expression in the
733: ** select list of a SELECT statement) that may cause a malloc() failure. If
734: ** malloc() has failed, the threads mallocFailed flag is cleared and the result
735: ** code of statement pStmt set to SQLITE_NOMEM.
736: **
737: ** Specifically, this is called from within:
738: **
739: ** sqlite3_column_int()
740: ** sqlite3_column_int64()
741: ** sqlite3_column_text()
742: ** sqlite3_column_text16()
743: ** sqlite3_column_real()
744: ** sqlite3_column_bytes()
745: ** sqlite3_column_bytes16()
746: ** sqiite3_column_blob()
747: */
748: static void columnMallocFailure(sqlite3_stmt *pStmt)
749: {
750: /* If malloc() failed during an encoding conversion within an
751: ** sqlite3_column_XXX API, then set the return code of the statement to
752: ** SQLITE_NOMEM. The next call to _step() (if any) will return SQLITE_ERROR
753: ** and _finalize() will return NOMEM.
754: */
755: Vdbe *p = (Vdbe *)pStmt;
756: if( p ){
757: p->rc = sqlite3ApiExit(p->db, p->rc);
758: sqlite3_mutex_leave(p->db->mutex);
759: }
760: }
761:
762: /**************************** sqlite3_column_ *******************************
763: ** The following routines are used to access elements of the current row
764: ** in the result set.
765: */
766: const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){
767: const void *val;
768: val = sqlite3_value_blob( columnMem(pStmt,i) );
769: /* Even though there is no encoding conversion, value_blob() might
770: ** need to call malloc() to expand the result of a zeroblob()
771: ** expression.
772: */
773: columnMallocFailure(pStmt);
774: return val;
775: }
776: int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){
777: int val = sqlite3_value_bytes( columnMem(pStmt,i) );
778: columnMallocFailure(pStmt);
779: return val;
780: }
781: int sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){
782: int val = sqlite3_value_bytes16( columnMem(pStmt,i) );
783: columnMallocFailure(pStmt);
784: return val;
785: }
786: double sqlite3_column_double(sqlite3_stmt *pStmt, int i){
787: double val = sqlite3_value_double( columnMem(pStmt,i) );
788: columnMallocFailure(pStmt);
789: return val;
790: }
791: int sqlite3_column_int(sqlite3_stmt *pStmt, int i){
792: int val = sqlite3_value_int( columnMem(pStmt,i) );
793: columnMallocFailure(pStmt);
794: return val;
795: }
796: sqlite_int64 sqlite3_column_int64(sqlite3_stmt *pStmt, int i){
797: sqlite_int64 val = sqlite3_value_int64( columnMem(pStmt,i) );
798: columnMallocFailure(pStmt);
799: return val;
800: }
801: const unsigned char *sqlite3_column_text(sqlite3_stmt *pStmt, int i){
802: const unsigned char *val = sqlite3_value_text( columnMem(pStmt,i) );
803: columnMallocFailure(pStmt);
804: return val;
805: }
806: sqlite3_value *sqlite3_column_value(sqlite3_stmt *pStmt, int i){
807: Mem *pOut = columnMem(pStmt, i);
808: if( pOut->flags&MEM_Static ){
809: pOut->flags &= ~MEM_Static;
810: pOut->flags |= MEM_Ephem;
811: }
812: columnMallocFailure(pStmt);
813: return (sqlite3_value *)pOut;
814: }
815: #ifndef SQLITE_OMIT_UTF16
816: const void *sqlite3_column_text16(sqlite3_stmt *pStmt, int i){
817: const void *val = sqlite3_value_text16( columnMem(pStmt,i) );
818: columnMallocFailure(pStmt);
819: return val;
820: }
821: #endif /* SQLITE_OMIT_UTF16 */
822: int sqlite3_column_type(sqlite3_stmt *pStmt, int i){
823: int iType = sqlite3_value_type( columnMem(pStmt,i) );
824: columnMallocFailure(pStmt);
825: return iType;
826: }
827:
828: /* The following function is experimental and subject to change or
829: ** removal */
830: /*int sqlite3_column_numeric_type(sqlite3_stmt *pStmt, int i){
831: ** return sqlite3_value_numeric_type( columnMem(pStmt,i) );
832: **}
833: */
834:
835: /*
836: ** Convert the N-th element of pStmt->pColName[] into a string using
837: ** xFunc() then return that string. If N is out of range, return 0.
838: **
839: ** There are up to 5 names for each column. useType determines which
840: ** name is returned. Here are the names:
841: **
842: ** 0 The column name as it should be displayed for output
843: ** 1 The datatype name for the column
844: ** 2 The name of the database that the column derives from
845: ** 3 The name of the table that the column derives from
846: ** 4 The name of the table column that the result column derives from
847: **
848: ** If the result is not a simple column reference (if it is an expression
849: ** or a constant) then useTypes 2, 3, and 4 return NULL.
850: */
851: static const void *columnName(
852: sqlite3_stmt *pStmt,
853: int N,
854: const void *(*xFunc)(Mem*),
855: int useType
856: ){
857: const void *ret = 0;
858: Vdbe *p = (Vdbe *)pStmt;
859: int n;
860: sqlite3 *db = p->db;
861:
862: assert( db!=0 );
863: n = sqlite3_column_count(pStmt);
864: if( N<n && N>=0 ){
865: N += useType*n;
866: sqlite3_mutex_enter(db->mutex);
867: assert( db->mallocFailed==0 );
868: ret = xFunc(&p->aColName[N]);
869: /* A malloc may have failed inside of the xFunc() call. If this
870: ** is the case, clear the mallocFailed flag and return NULL.
871: */
872: if( db->mallocFailed ){
873: db->mallocFailed = 0;
874: ret = 0;
875: }
876: sqlite3_mutex_leave(db->mutex);
877: }
878: return ret;
879: }
880:
881: /*
882: ** Return the name of the Nth column of the result set returned by SQL
883: ** statement pStmt.
884: */
885: const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){
886: return columnName(
887: pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_NAME);
888: }
889: #ifndef SQLITE_OMIT_UTF16
890: const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){
891: return columnName(
892: pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_NAME);
893: }
894: #endif
895:
896: /*
897: ** Constraint: If you have ENABLE_COLUMN_METADATA then you must
898: ** not define OMIT_DECLTYPE.
899: */
900: #if defined(SQLITE_OMIT_DECLTYPE) && defined(SQLITE_ENABLE_COLUMN_METADATA)
901: # error "Must not define both SQLITE_OMIT_DECLTYPE \
902: and SQLITE_ENABLE_COLUMN_METADATA"
903: #endif
904:
905: #ifndef SQLITE_OMIT_DECLTYPE
906: /*
907: ** Return the column declaration type (if applicable) of the 'i'th column
908: ** of the result set of SQL statement pStmt.
909: */
910: const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){
911: return columnName(
912: pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DECLTYPE);
913: }
914: #ifndef SQLITE_OMIT_UTF16
915: const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){
916: return columnName(
917: pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DECLTYPE);
918: }
919: #endif /* SQLITE_OMIT_UTF16 */
920: #endif /* SQLITE_OMIT_DECLTYPE */
921:
922: #ifdef SQLITE_ENABLE_COLUMN_METADATA
923: /*
924: ** Return the name of the database from which a result column derives.
925: ** NULL is returned if the result column is an expression or constant or
926: ** anything else which is not an unabiguous reference to a database column.
927: */
928: const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){
929: return columnName(
930: pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DATABASE);
931: }
932: #ifndef SQLITE_OMIT_UTF16
933: const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){
934: return columnName(
935: pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DATABASE);
936: }
937: #endif /* SQLITE_OMIT_UTF16 */
938:
939: /*
940: ** Return the name of the table from which a result column derives.
941: ** NULL is returned if the result column is an expression or constant or
942: ** anything else which is not an unabiguous reference to a database column.
943: */
944: const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){
945: return columnName(
946: pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_TABLE);
947: }
948: #ifndef SQLITE_OMIT_UTF16
949: const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){
950: return columnName(
951: pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_TABLE);
952: }
953: #endif /* SQLITE_OMIT_UTF16 */
954:
955: /*
956: ** Return the name of the table column from which a result column derives.
957: ** NULL is returned if the result column is an expression or constant or
958: ** anything else which is not an unabiguous reference to a database column.
959: */
960: const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){
961: return columnName(
962: pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_COLUMN);
963: }
964: #ifndef SQLITE_OMIT_UTF16
965: const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){
966: return columnName(
967: pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_COLUMN);
968: }
969: #endif /* SQLITE_OMIT_UTF16 */
970: #endif /* SQLITE_ENABLE_COLUMN_METADATA */
971:
972:
973: /******************************* sqlite3_bind_ ***************************
974: **
975: ** Routines used to attach values to wildcards in a compiled SQL statement.
976: */
977: /*
978: ** Unbind the value bound to variable i in virtual machine p. This is the
979: ** the same as binding a NULL value to the column. If the "i" parameter is
980: ** out of range, then SQLITE_RANGE is returned. Othewise SQLITE_OK.
981: **
982: ** A successful evaluation of this routine acquires the mutex on p.
983: ** the mutex is released if any kind of error occurs.
984: **
985: ** The error code stored in database p->db is overwritten with the return
986: ** value in any case.
987: */
988: static int vdbeUnbind(Vdbe *p, int i){
989: Mem *pVar;
990: if( vdbeSafetyNotNull(p) ){
991: return SQLITE_MISUSE_BKPT;
992: }
993: sqlite3_mutex_enter(p->db->mutex);
994: if( p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){
995: sqlite3Error(p->db, SQLITE_MISUSE, 0);
996: sqlite3_mutex_leave(p->db->mutex);
997: sqlite3_log(SQLITE_MISUSE,
998: "bind on a busy prepared statement: [%s]", p->zSql);
999: return SQLITE_MISUSE_BKPT;
1000: }
1001: if( i<1 || i>p->nVar ){
1002: sqlite3Error(p->db, SQLITE_RANGE, 0);
1003: sqlite3_mutex_leave(p->db->mutex);
1004: return SQLITE_RANGE;
1005: }
1006: i--;
1007: pVar = &p->aVar[i];
1008: sqlite3VdbeMemRelease(pVar);
1009: pVar->flags = MEM_Null;
1010: sqlite3Error(p->db, SQLITE_OK, 0);
1011:
1012: /* If the bit corresponding to this variable in Vdbe.expmask is set, then
1013: ** binding a new value to this variable invalidates the current query plan.
1014: **
1015: ** IMPLEMENTATION-OF: R-48440-37595 If the specific value bound to host
1016: ** parameter in the WHERE clause might influence the choice of query plan
1017: ** for a statement, then the statement will be automatically recompiled,
1018: ** as if there had been a schema change, on the first sqlite3_step() call
1019: ** following any change to the bindings of that parameter.
1020: */
1021: if( p->isPrepareV2 &&
1022: ((i<32 && p->expmask & ((u32)1 << i)) || p->expmask==0xffffffff)
1023: ){
1024: p->expired = 1;
1025: }
1026: return SQLITE_OK;
1027: }
1028:
1029: /*
1030: ** Bind a text or BLOB value.
1031: */
1032: static int bindText(
1033: sqlite3_stmt *pStmt, /* The statement to bind against */
1034: int i, /* Index of the parameter to bind */
1035: const void *zData, /* Pointer to the data to be bound */
1036: int nData, /* Number of bytes of data to be bound */
1037: void (*xDel)(void*), /* Destructor for the data */
1038: u8 encoding /* Encoding for the data */
1039: ){
1040: Vdbe *p = (Vdbe *)pStmt;
1041: Mem *pVar;
1042: int rc;
1043:
1044: rc = vdbeUnbind(p, i);
1045: if( rc==SQLITE_OK ){
1046: if( zData!=0 ){
1047: pVar = &p->aVar[i-1];
1048: rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel);
1049: if( rc==SQLITE_OK && encoding!=0 ){
1050: rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db));
1051: }
1052: sqlite3Error(p->db, rc, 0);
1053: rc = sqlite3ApiExit(p->db, rc);
1054: }
1055: sqlite3_mutex_leave(p->db->mutex);
1056: }else if( xDel!=SQLITE_STATIC && xDel!=SQLITE_TRANSIENT ){
1057: xDel((void*)zData);
1058: }
1059: return rc;
1060: }
1061:
1062:
1063: /*
1064: ** Bind a blob value to an SQL statement variable.
1065: */
1066: int sqlite3_bind_blob(
1067: sqlite3_stmt *pStmt,
1068: int i,
1069: const void *zData,
1070: int nData,
1071: void (*xDel)(void*)
1072: ){
1073: return bindText(pStmt, i, zData, nData, xDel, 0);
1074: }
1075: int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){
1076: int rc;
1077: Vdbe *p = (Vdbe *)pStmt;
1078: rc = vdbeUnbind(p, i);
1079: if( rc==SQLITE_OK ){
1080: sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue);
1081: sqlite3_mutex_leave(p->db->mutex);
1082: }
1083: return rc;
1084: }
1085: int sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){
1086: return sqlite3_bind_int64(p, i, (i64)iValue);
1087: }
1088: int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){
1089: int rc;
1090: Vdbe *p = (Vdbe *)pStmt;
1091: rc = vdbeUnbind(p, i);
1092: if( rc==SQLITE_OK ){
1093: sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue);
1094: sqlite3_mutex_leave(p->db->mutex);
1095: }
1096: return rc;
1097: }
1098: int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){
1099: int rc;
1100: Vdbe *p = (Vdbe*)pStmt;
1101: rc = vdbeUnbind(p, i);
1102: if( rc==SQLITE_OK ){
1103: sqlite3_mutex_leave(p->db->mutex);
1104: }
1105: return rc;
1106: }
1107: int sqlite3_bind_text(
1108: sqlite3_stmt *pStmt,
1109: int i,
1110: const char *zData,
1111: int nData,
1112: void (*xDel)(void*)
1113: ){
1114: return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8);
1115: }
1116: #ifndef SQLITE_OMIT_UTF16
1117: int sqlite3_bind_text16(
1118: sqlite3_stmt *pStmt,
1119: int i,
1120: const void *zData,
1121: int nData,
1122: void (*xDel)(void*)
1123: ){
1124: return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE);
1125: }
1126: #endif /* SQLITE_OMIT_UTF16 */
1127: int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){
1128: int rc;
1129: switch( pValue->type ){
1130: case SQLITE_INTEGER: {
1131: rc = sqlite3_bind_int64(pStmt, i, pValue->u.i);
1132: break;
1133: }
1134: case SQLITE_FLOAT: {
1135: rc = sqlite3_bind_double(pStmt, i, pValue->r);
1136: break;
1137: }
1138: case SQLITE_BLOB: {
1139: if( pValue->flags & MEM_Zero ){
1140: rc = sqlite3_bind_zeroblob(pStmt, i, pValue->u.nZero);
1141: }else{
1142: rc = sqlite3_bind_blob(pStmt, i, pValue->z, pValue->n,SQLITE_TRANSIENT);
1143: }
1144: break;
1145: }
1146: case SQLITE_TEXT: {
1147: rc = bindText(pStmt,i, pValue->z, pValue->n, SQLITE_TRANSIENT,
1148: pValue->enc);
1149: break;
1150: }
1151: default: {
1152: rc = sqlite3_bind_null(pStmt, i);
1153: break;
1154: }
1155: }
1156: return rc;
1157: }
1158: int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){
1159: int rc;
1160: Vdbe *p = (Vdbe *)pStmt;
1161: rc = vdbeUnbind(p, i);
1162: if( rc==SQLITE_OK ){
1163: sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n);
1164: sqlite3_mutex_leave(p->db->mutex);
1165: }
1166: return rc;
1167: }
1168:
1169: /*
1170: ** Return the number of wildcards that can be potentially bound to.
1171: ** This routine is added to support DBD::SQLite.
1172: */
1173: int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){
1174: Vdbe *p = (Vdbe*)pStmt;
1175: return p ? p->nVar : 0;
1176: }
1177:
1178: /*
1179: ** Return the name of a wildcard parameter. Return NULL if the index
1180: ** is out of range or if the wildcard is unnamed.
1181: **
1182: ** The result is always UTF-8.
1183: */
1184: const char *sqlite3_bind_parameter_name(sqlite3_stmt *pStmt, int i){
1185: Vdbe *p = (Vdbe*)pStmt;
1186: if( p==0 || i<1 || i>p->nzVar ){
1187: return 0;
1188: }
1189: return p->azVar[i-1];
1190: }
1191:
1192: /*
1193: ** Given a wildcard parameter name, return the index of the variable
1194: ** with that name. If there is no variable with the given name,
1195: ** return 0.
1196: */
1197: int sqlite3VdbeParameterIndex(Vdbe *p, const char *zName, int nName){
1198: int i;
1199: if( p==0 ){
1200: return 0;
1201: }
1202: if( zName ){
1203: for(i=0; i<p->nzVar; i++){
1204: const char *z = p->azVar[i];
1205: if( z && memcmp(z,zName,nName)==0 && z[nName]==0 ){
1206: return i+1;
1207: }
1208: }
1209: }
1210: return 0;
1211: }
1212: int sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const char *zName){
1213: return sqlite3VdbeParameterIndex((Vdbe*)pStmt, zName, sqlite3Strlen30(zName));
1214: }
1215:
1216: /*
1217: ** Transfer all bindings from the first statement over to the second.
1218: */
1219: int sqlite3TransferBindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
1220: Vdbe *pFrom = (Vdbe*)pFromStmt;
1221: Vdbe *pTo = (Vdbe*)pToStmt;
1222: int i;
1223: assert( pTo->db==pFrom->db );
1224: assert( pTo->nVar==pFrom->nVar );
1225: sqlite3_mutex_enter(pTo->db->mutex);
1226: for(i=0; i<pFrom->nVar; i++){
1227: sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]);
1228: }
1229: sqlite3_mutex_leave(pTo->db->mutex);
1230: return SQLITE_OK;
1231: }
1232:
1233: #ifndef SQLITE_OMIT_DEPRECATED
1234: /*
1235: ** Deprecated external interface. Internal/core SQLite code
1236: ** should call sqlite3TransferBindings.
1237: **
1238: ** Is is misuse to call this routine with statements from different
1239: ** database connections. But as this is a deprecated interface, we
1240: ** will not bother to check for that condition.
1241: **
1242: ** If the two statements contain a different number of bindings, then
1243: ** an SQLITE_ERROR is returned. Nothing else can go wrong, so otherwise
1244: ** SQLITE_OK is returned.
1245: */
1246: int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
1247: Vdbe *pFrom = (Vdbe*)pFromStmt;
1248: Vdbe *pTo = (Vdbe*)pToStmt;
1249: if( pFrom->nVar!=pTo->nVar ){
1250: return SQLITE_ERROR;
1251: }
1252: if( pTo->isPrepareV2 && pTo->expmask ){
1253: pTo->expired = 1;
1254: }
1255: if( pFrom->isPrepareV2 && pFrom->expmask ){
1256: pFrom->expired = 1;
1257: }
1258: return sqlite3TransferBindings(pFromStmt, pToStmt);
1259: }
1260: #endif
1261:
1262: /*
1263: ** Return the sqlite3* database handle to which the prepared statement given
1264: ** in the argument belongs. This is the same database handle that was
1265: ** the first argument to the sqlite3_prepare() that was used to create
1266: ** the statement in the first place.
1267: */
1268: sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){
1269: return pStmt ? ((Vdbe*)pStmt)->db : 0;
1270: }
1271:
1272: /*
1273: ** Return true if the prepared statement is guaranteed to not modify the
1274: ** database.
1275: */
1276: int sqlite3_stmt_readonly(sqlite3_stmt *pStmt){
1277: return pStmt ? ((Vdbe*)pStmt)->readOnly : 1;
1278: }
1279:
1280: /*
1281: ** Return true if the prepared statement is in need of being reset.
1282: */
1283: int sqlite3_stmt_busy(sqlite3_stmt *pStmt){
1284: Vdbe *v = (Vdbe*)pStmt;
1285: return v!=0 && v->pc>0 && v->magic==VDBE_MAGIC_RUN;
1286: }
1287:
1288: /*
1289: ** Return a pointer to the next prepared statement after pStmt associated
1290: ** with database connection pDb. If pStmt is NULL, return the first
1291: ** prepared statement for the database connection. Return NULL if there
1292: ** are no more.
1293: */
1294: sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt){
1295: sqlite3_stmt *pNext;
1296: sqlite3_mutex_enter(pDb->mutex);
1297: if( pStmt==0 ){
1298: pNext = (sqlite3_stmt*)pDb->pVdbe;
1299: }else{
1300: pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext;
1301: }
1302: sqlite3_mutex_leave(pDb->mutex);
1303: return pNext;
1304: }
1305:
1306: /*
1307: ** Return the value of a status counter for a prepared statement
1308: */
1309: int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){
1310: Vdbe *pVdbe = (Vdbe*)pStmt;
1311: int v = pVdbe->aCounter[op-1];
1312: if( resetFlag ) pVdbe->aCounter[op-1] = 0;
1313: return v;
1314: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>