comparison sqlite/vdbeapi.c @ 1434:b6b61becdf4e trunk

[svn] - add sqlite/ directory
author nenolod
date Thu, 27 Jul 2006 22:41:31 -0700
parents
children
comparison
equal deleted inserted replaced
1433:3cbe3d14ea68 1434:b6b61becdf4e
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 #include "os.h"
19
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
33 /**************************** sqlite3_value_ *******************************
34 ** The following routines extract information from a Mem or sqlite3_value
35 ** structure.
36 */
37 const void *sqlite3_value_blob(sqlite3_value *pVal){
38 Mem *p = (Mem*)pVal;
39 if( p->flags & (MEM_Blob|MEM_Str) ){
40 return p->z;
41 }else{
42 return sqlite3_value_text(pVal);
43 }
44 }
45 int sqlite3_value_bytes(sqlite3_value *pVal){
46 return sqlite3ValueBytes(pVal, SQLITE_UTF8);
47 }
48 int sqlite3_value_bytes16(sqlite3_value *pVal){
49 return sqlite3ValueBytes(pVal, SQLITE_UTF16NATIVE);
50 }
51 double sqlite3_value_double(sqlite3_value *pVal){
52 return sqlite3VdbeRealValue((Mem*)pVal);
53 }
54 int sqlite3_value_int(sqlite3_value *pVal){
55 return sqlite3VdbeIntValue((Mem*)pVal);
56 }
57 sqlite_int64 sqlite3_value_int64(sqlite3_value *pVal){
58 return sqlite3VdbeIntValue((Mem*)pVal);
59 }
60 const unsigned char *sqlite3_value_text(sqlite3_value *pVal){
61 return (const unsigned char *)sqlite3ValueText(pVal, SQLITE_UTF8);
62 }
63 #ifndef SQLITE_OMIT_UTF16
64 const void *sqlite3_value_text16(sqlite3_value* pVal){
65 return sqlite3ValueText(pVal, SQLITE_UTF16NATIVE);
66 }
67 const void *sqlite3_value_text16be(sqlite3_value *pVal){
68 return sqlite3ValueText(pVal, SQLITE_UTF16BE);
69 }
70 const void *sqlite3_value_text16le(sqlite3_value *pVal){
71 return sqlite3ValueText(pVal, SQLITE_UTF16LE);
72 }
73 #endif /* SQLITE_OMIT_UTF16 */
74 int sqlite3_value_type(sqlite3_value* pVal){
75 return pVal->type;
76 }
77 /* sqlite3_value_numeric_type() defined in vdbe.c */
78
79 /**************************** sqlite3_result_ *******************************
80 ** The following routines are used by user-defined functions to specify
81 ** the function result.
82 */
83 void sqlite3_result_blob(
84 sqlite3_context *pCtx,
85 const void *z,
86 int n,
87 void (*xDel)(void *)
88 ){
89 assert( n>=0 );
90 sqlite3VdbeMemSetStr(&pCtx->s, z, n, 0, xDel);
91 }
92 void sqlite3_result_double(sqlite3_context *pCtx, double rVal){
93 sqlite3VdbeMemSetDouble(&pCtx->s, rVal);
94 }
95 void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){
96 pCtx->isError = 1;
97 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, SQLITE_TRANSIENT);
98 }
99 #ifndef SQLITE_OMIT_UTF16
100 void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){
101 pCtx->isError = 1;
102 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT);
103 }
104 #endif
105 void sqlite3_result_int(sqlite3_context *pCtx, int iVal){
106 sqlite3VdbeMemSetInt64(&pCtx->s, (i64)iVal);
107 }
108 void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){
109 sqlite3VdbeMemSetInt64(&pCtx->s, iVal);
110 }
111 void sqlite3_result_null(sqlite3_context *pCtx){
112 sqlite3VdbeMemSetNull(&pCtx->s);
113 }
114 void sqlite3_result_text(
115 sqlite3_context *pCtx,
116 const char *z,
117 int n,
118 void (*xDel)(void *)
119 ){
120 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, xDel);
121 }
122 #ifndef SQLITE_OMIT_UTF16
123 void sqlite3_result_text16(
124 sqlite3_context *pCtx,
125 const void *z,
126 int n,
127 void (*xDel)(void *)
128 ){
129 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, xDel);
130 }
131 void sqlite3_result_text16be(
132 sqlite3_context *pCtx,
133 const void *z,
134 int n,
135 void (*xDel)(void *)
136 ){
137 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16BE, xDel);
138 }
139 void sqlite3_result_text16le(
140 sqlite3_context *pCtx,
141 const void *z,
142 int n,
143 void (*xDel)(void *)
144 ){
145 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16LE, xDel);
146 }
147 #endif /* SQLITE_OMIT_UTF16 */
148 void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){
149 sqlite3VdbeMemCopy(&pCtx->s, pValue);
150 }
151
152
153 /*
154 ** Execute the statement pStmt, either until a row of data is ready, the
155 ** statement is completely executed or an error occurs.
156 */
157 int sqlite3_step(sqlite3_stmt *pStmt){
158 Vdbe *p = (Vdbe*)pStmt;
159 sqlite3 *db;
160 int rc;
161
162 /* Assert that malloc() has not failed */
163 assert( !sqlite3MallocFailed() );
164
165 if( p==0 || p->magic!=VDBE_MAGIC_RUN ){
166 return SQLITE_MISUSE;
167 }
168 if( p->aborted ){
169 return SQLITE_ABORT;
170 }
171 if( p->pc<=0 && p->expired ){
172 if( p->rc==SQLITE_OK ){
173 p->rc = SQLITE_SCHEMA;
174 }
175 return SQLITE_ERROR;
176 }
177 db = p->db;
178 if( sqlite3SafetyOn(db) ){
179 p->rc = SQLITE_MISUSE;
180 return SQLITE_MISUSE;
181 }
182 if( p->pc<0 ){
183 #ifndef SQLITE_OMIT_TRACE
184 /* Invoke the trace callback if there is one
185 */
186 if( db->xTrace && !db->init.busy ){
187 assert( p->nOp>0 );
188 assert( p->aOp[p->nOp-1].opcode==OP_Noop );
189 assert( p->aOp[p->nOp-1].p3!=0 );
190 assert( p->aOp[p->nOp-1].p3type==P3_DYNAMIC );
191 sqlite3SafetyOff(db);
192 db->xTrace(db->pTraceArg, p->aOp[p->nOp-1].p3);
193 if( sqlite3SafetyOn(db) ){
194 p->rc = SQLITE_MISUSE;
195 return SQLITE_MISUSE;
196 }
197 }
198 if( db->xProfile && !db->init.busy ){
199 double rNow;
200 sqlite3OsCurrentTime(&rNow);
201 p->startTime = (rNow - (int)rNow)*3600.0*24.0*1000000000.0;
202 }
203 #endif
204
205 /* Print a copy of SQL as it is executed if the SQL_TRACE pragma is turned
206 ** on in debugging mode.
207 */
208 #ifdef SQLITE_DEBUG
209 if( (db->flags & SQLITE_SqlTrace)!=0 ){
210 sqlite3DebugPrintf("SQL-trace: %s\n", p->aOp[p->nOp-1].p3);
211 }
212 #endif /* SQLITE_DEBUG */
213
214 db->activeVdbeCnt++;
215 p->pc = 0;
216 }
217 #ifndef SQLITE_OMIT_EXPLAIN
218 if( p->explain ){
219 rc = sqlite3VdbeList(p);
220 }else
221 #endif /* SQLITE_OMIT_EXPLAIN */
222 {
223 rc = sqlite3VdbeExec(p);
224 }
225
226 if( sqlite3SafetyOff(db) ){
227 rc = SQLITE_MISUSE;
228 }
229
230 #ifndef SQLITE_OMIT_TRACE
231 /* Invoke the profile callback if there is one
232 */
233 if( rc!=SQLITE_ROW && db->xProfile && !db->init.busy ){
234 double rNow;
235 u64 elapseTime;
236
237 sqlite3OsCurrentTime(&rNow);
238 elapseTime = (rNow - (int)rNow)*3600.0*24.0*1000000000.0 - p->startTime;
239 assert( p->nOp>0 );
240 assert( p->aOp[p->nOp-1].opcode==OP_Noop );
241 assert( p->aOp[p->nOp-1].p3!=0 );
242 assert( p->aOp[p->nOp-1].p3type==P3_DYNAMIC );
243 db->xProfile(db->pProfileArg, p->aOp[p->nOp-1].p3, elapseTime);
244 }
245 #endif
246
247 sqlite3Error(p->db, rc, 0);
248 p->rc = sqlite3ApiExit(p->db, p->rc);
249 return rc;
250 }
251
252 /*
253 ** Extract the user data from a sqlite3_context structure and return a
254 ** pointer to it.
255 */
256 void *sqlite3_user_data(sqlite3_context *p){
257 assert( p && p->pFunc );
258 return p->pFunc->pUserData;
259 }
260
261 /*
262 ** Allocate or return the aggregate context for a user function. A new
263 ** context is allocated on the first call. Subsequent calls return the
264 ** same context that was returned on prior calls.
265 */
266 void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){
267 Mem *pMem = p->pMem;
268 assert( p && p->pFunc && p->pFunc->xStep );
269 if( (pMem->flags & MEM_Agg)==0 ){
270 if( nByte==0 ){
271 assert( pMem->flags==MEM_Null );
272 pMem->z = 0;
273 }else{
274 pMem->flags = MEM_Agg;
275 pMem->xDel = sqlite3FreeX;
276 *(FuncDef**)&pMem->i = p->pFunc;
277 if( nByte<=NBFS ){
278 pMem->z = pMem->zShort;
279 memset(pMem->z, 0, nByte);
280 }else{
281 pMem->z = sqliteMalloc( nByte );
282 }
283 }
284 }
285 return (void*)pMem->z;
286 }
287
288 /*
289 ** Return the auxilary data pointer, if any, for the iArg'th argument to
290 ** the user-function defined by pCtx.
291 */
292 void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){
293 VdbeFunc *pVdbeFunc = pCtx->pVdbeFunc;
294 if( !pVdbeFunc || iArg>=pVdbeFunc->nAux || iArg<0 ){
295 return 0;
296 }
297 return pVdbeFunc->apAux[iArg].pAux;
298 }
299
300 /*
301 ** Set the auxilary data pointer and delete function, for the iArg'th
302 ** argument to the user-function defined by pCtx. Any previous value is
303 ** deleted by calling the delete function specified when it was set.
304 */
305 void sqlite3_set_auxdata(
306 sqlite3_context *pCtx,
307 int iArg,
308 void *pAux,
309 void (*xDelete)(void*)
310 ){
311 struct AuxData *pAuxData;
312 VdbeFunc *pVdbeFunc;
313 if( iArg<0 ) return;
314
315 pVdbeFunc = pCtx->pVdbeFunc;
316 if( !pVdbeFunc || pVdbeFunc->nAux<=iArg ){
317 int nMalloc = sizeof(VdbeFunc) + sizeof(struct AuxData)*iArg;
318 pVdbeFunc = sqliteRealloc(pVdbeFunc, nMalloc);
319 if( !pVdbeFunc ) return;
320 pCtx->pVdbeFunc = pVdbeFunc;
321 memset(&pVdbeFunc->apAux[pVdbeFunc->nAux], 0,
322 sizeof(struct AuxData)*(iArg+1-pVdbeFunc->nAux));
323 pVdbeFunc->nAux = iArg+1;
324 pVdbeFunc->pFunc = pCtx->pFunc;
325 }
326
327 pAuxData = &pVdbeFunc->apAux[iArg];
328 if( pAuxData->pAux && pAuxData->xDelete ){
329 pAuxData->xDelete(pAuxData->pAux);
330 }
331 pAuxData->pAux = pAux;
332 pAuxData->xDelete = xDelete;
333 }
334
335 /*
336 ** Return the number of times the Step function of a aggregate has been
337 ** called.
338 **
339 ** This function is deprecated. Do not use it for new code. It is
340 ** provide only to avoid breaking legacy code. New aggregate function
341 ** implementations should keep their own counts within their aggregate
342 ** context.
343 */
344 int sqlite3_aggregate_count(sqlite3_context *p){
345 assert( p && p->pFunc && p->pFunc->xStep );
346 return p->pMem->n;
347 }
348
349 /*
350 ** Return the number of columns in the result set for the statement pStmt.
351 */
352 int sqlite3_column_count(sqlite3_stmt *pStmt){
353 Vdbe *pVm = (Vdbe *)pStmt;
354 return pVm ? pVm->nResColumn : 0;
355 }
356
357 /*
358 ** Return the number of values available from the current row of the
359 ** currently executing statement pStmt.
360 */
361 int sqlite3_data_count(sqlite3_stmt *pStmt){
362 Vdbe *pVm = (Vdbe *)pStmt;
363 if( pVm==0 || !pVm->resOnStack ) return 0;
364 return pVm->nResColumn;
365 }
366
367
368 /*
369 ** Check to see if column iCol of the given statement is valid. If
370 ** it is, return a pointer to the Mem for the value of that column.
371 ** If iCol is not valid, return a pointer to a Mem which has a value
372 ** of NULL.
373 */
374 static Mem *columnMem(sqlite3_stmt *pStmt, int i){
375 Vdbe *pVm = (Vdbe *)pStmt;
376 int vals = sqlite3_data_count(pStmt);
377 if( i>=vals || i<0 ){
378 static Mem nullMem;
379 if( nullMem.flags==0 ){ nullMem.flags = MEM_Null; }
380 sqlite3Error(pVm->db, SQLITE_RANGE, 0);
381 return &nullMem;
382 }
383 return &pVm->pTos[(1-vals)+i];
384 }
385
386 /*
387 ** This function is called after invoking an sqlite3_value_XXX function on a
388 ** column value (i.e. a value returned by evaluating an SQL expression in the
389 ** select list of a SELECT statement) that may cause a malloc() failure. If
390 ** malloc() has failed, the threads mallocFailed flag is cleared and the result
391 ** code of statement pStmt set to SQLITE_NOMEM.
392 **
393 ** Specificly, this is called from within:
394 **
395 ** sqlite3_column_int()
396 ** sqlite3_column_int64()
397 ** sqlite3_column_text()
398 ** sqlite3_column_text16()
399 ** sqlite3_column_real()
400 ** sqlite3_column_bytes()
401 ** sqlite3_column_bytes16()
402 **
403 ** But not for sqlite3_column_blob(), which never calls malloc().
404 */
405 static void columnMallocFailure(sqlite3_stmt *pStmt)
406 {
407 /* If malloc() failed during an encoding conversion within an
408 ** sqlite3_column_XXX API, then set the return code of the statement to
409 ** SQLITE_NOMEM. The next call to _step() (if any) will return SQLITE_ERROR
410 ** and _finalize() will return NOMEM.
411 */
412 Vdbe *p = (Vdbe *)pStmt;
413 p->rc = sqlite3ApiExit(0, p->rc);
414 }
415
416 /**************************** sqlite3_column_ *******************************
417 ** The following routines are used to access elements of the current row
418 ** in the result set.
419 */
420 const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){
421 const void *val;
422 sqlite3MallocDisallow();
423 val = sqlite3_value_blob( columnMem(pStmt,i) );
424 sqlite3MallocAllow();
425 return val;
426 }
427 int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){
428 int val = sqlite3_value_bytes( columnMem(pStmt,i) );
429 columnMallocFailure(pStmt);
430 return val;
431 }
432 int sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){
433 int val = sqlite3_value_bytes16( columnMem(pStmt,i) );
434 columnMallocFailure(pStmt);
435 return val;
436 }
437 double sqlite3_column_double(sqlite3_stmt *pStmt, int i){
438 double val = sqlite3_value_double( columnMem(pStmt,i) );
439 columnMallocFailure(pStmt);
440 return val;
441 }
442 int sqlite3_column_int(sqlite3_stmt *pStmt, int i){
443 int val = sqlite3_value_int( columnMem(pStmt,i) );
444 columnMallocFailure(pStmt);
445 return val;
446 }
447 sqlite_int64 sqlite3_column_int64(sqlite3_stmt *pStmt, int i){
448 sqlite_int64 val = sqlite3_value_int64( columnMem(pStmt,i) );
449 columnMallocFailure(pStmt);
450 return val;
451 }
452 const unsigned char *sqlite3_column_text(sqlite3_stmt *pStmt, int i){
453 const unsigned char *val = sqlite3_value_text( columnMem(pStmt,i) );
454 columnMallocFailure(pStmt);
455 return val;
456 }
457 #if 0
458 sqlite3_value *sqlite3_column_value(sqlite3_stmt *pStmt, int i){
459 return columnMem(pStmt, i);
460 }
461 #endif
462 #ifndef SQLITE_OMIT_UTF16
463 const void *sqlite3_column_text16(sqlite3_stmt *pStmt, int i){
464 const void *val = sqlite3_value_text16( columnMem(pStmt,i) );
465 columnMallocFailure(pStmt);
466 return val;
467 }
468 #endif /* SQLITE_OMIT_UTF16 */
469 int sqlite3_column_type(sqlite3_stmt *pStmt, int i){
470 return sqlite3_value_type( columnMem(pStmt,i) );
471 }
472
473 /* The following function is experimental and subject to change or
474 ** removal */
475 /*int sqlite3_column_numeric_type(sqlite3_stmt *pStmt, int i){
476 ** return sqlite3_value_numeric_type( columnMem(pStmt,i) );
477 **}
478 */
479
480 /*
481 ** Convert the N-th element of pStmt->pColName[] into a string using
482 ** xFunc() then return that string. If N is out of range, return 0.
483 **
484 ** There are up to 5 names for each column. useType determines which
485 ** name is returned. Here are the names:
486 **
487 ** 0 The column name as it should be displayed for output
488 ** 1 The datatype name for the column
489 ** 2 The name of the database that the column derives from
490 ** 3 The name of the table that the column derives from
491 ** 4 The name of the table column that the result column derives from
492 **
493 ** If the result is not a simple column reference (if it is an expression
494 ** or a constant) then useTypes 2, 3, and 4 return NULL.
495 */
496 static const void *columnName(
497 sqlite3_stmt *pStmt,
498 int N,
499 const void *(*xFunc)(Mem*),
500 int useType
501 ){
502 const void *ret;
503 Vdbe *p = (Vdbe *)pStmt;
504 int n = sqlite3_column_count(pStmt);
505
506 if( p==0 || N>=n || N<0 ){
507 return 0;
508 }
509 N += useType*n;
510 ret = xFunc(&p->aColName[N]);
511
512 /* A malloc may have failed inside of the xFunc() call. If this is the case,
513 ** clear the mallocFailed flag and return NULL.
514 */
515 sqlite3ApiExit(0, 0);
516 return ret;
517 }
518
519 /*
520 ** Return the name of the Nth column of the result set returned by SQL
521 ** statement pStmt.
522 */
523 const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){
524 return columnName(
525 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_NAME);
526 }
527 #ifndef SQLITE_OMIT_UTF16
528 const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){
529 return columnName(
530 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_NAME);
531 }
532 #endif
533
534 /*
535 ** Return the column declaration type (if applicable) of the 'i'th column
536 ** of the result set of SQL statement pStmt.
537 */
538 const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){
539 return columnName(
540 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DECLTYPE);
541 }
542 #ifndef SQLITE_OMIT_UTF16
543 const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){
544 return columnName(
545 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DECLTYPE);
546 }
547 #endif /* SQLITE_OMIT_UTF16 */
548
549 #ifdef SQLITE_ENABLE_COLUMN_METADATA
550 /*
551 ** Return the name of the database from which a result column derives.
552 ** NULL is returned if the result column is an expression or constant or
553 ** anything else which is not an unabiguous reference to a database column.
554 */
555 const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){
556 return columnName(
557 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DATABASE);
558 }
559 #ifndef SQLITE_OMIT_UTF16
560 const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){
561 return columnName(
562 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DATABASE);
563 }
564 #endif /* SQLITE_OMIT_UTF16 */
565
566 /*
567 ** Return the name of the table from which a result column derives.
568 ** NULL is returned if the result column is an expression or constant or
569 ** anything else which is not an unabiguous reference to a database column.
570 */
571 const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){
572 return columnName(
573 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_TABLE);
574 }
575 #ifndef SQLITE_OMIT_UTF16
576 const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){
577 return columnName(
578 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_TABLE);
579 }
580 #endif /* SQLITE_OMIT_UTF16 */
581
582 /*
583 ** Return the name of the table column from which a result column derives.
584 ** NULL is returned if the result column is an expression or constant or
585 ** anything else which is not an unabiguous reference to a database column.
586 */
587 const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){
588 return columnName(
589 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_COLUMN);
590 }
591 #ifndef SQLITE_OMIT_UTF16
592 const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){
593 return columnName(
594 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_COLUMN);
595 }
596 #endif /* SQLITE_OMIT_UTF16 */
597 #endif /* SQLITE_ENABLE_COLUMN_METADATA */
598
599
600 /******************************* sqlite3_bind_ ***************************
601 **
602 ** Routines used to attach values to wildcards in a compiled SQL statement.
603 */
604 /*
605 ** Unbind the value bound to variable i in virtual machine p. This is the
606 ** the same as binding a NULL value to the column. If the "i" parameter is
607 ** out of range, then SQLITE_RANGE is returned. Othewise SQLITE_OK.
608 **
609 ** The error code stored in database p->db is overwritten with the return
610 ** value in any case.
611 */
612 static int vdbeUnbind(Vdbe *p, int i){
613 Mem *pVar;
614 if( p==0 || p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){
615 if( p ) sqlite3Error(p->db, SQLITE_MISUSE, 0);
616 return SQLITE_MISUSE;
617 }
618 if( i<1 || i>p->nVar ){
619 sqlite3Error(p->db, SQLITE_RANGE, 0);
620 return SQLITE_RANGE;
621 }
622 i--;
623 pVar = &p->aVar[i];
624 sqlite3VdbeMemRelease(pVar);
625 pVar->flags = MEM_Null;
626 sqlite3Error(p->db, SQLITE_OK, 0);
627 return SQLITE_OK;
628 }
629
630 /*
631 ** Bind a text or BLOB value.
632 */
633 static int bindText(
634 sqlite3_stmt *pStmt,
635 int i,
636 const void *zData,
637 int nData,
638 void (*xDel)(void*),
639 int encoding
640 ){
641 Vdbe *p = (Vdbe *)pStmt;
642 Mem *pVar;
643 int rc;
644
645 rc = vdbeUnbind(p, i);
646 if( rc || zData==0 ){
647 return rc;
648 }
649 pVar = &p->aVar[i-1];
650 rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel);
651 if( rc==SQLITE_OK && encoding!=0 ){
652 rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db));
653 }
654
655 sqlite3Error(((Vdbe *)pStmt)->db, rc, 0);
656 return sqlite3ApiExit(((Vdbe *)pStmt)->db, rc);
657 }
658
659
660 /*
661 ** Bind a blob value to an SQL statement variable.
662 */
663 int sqlite3_bind_blob(
664 sqlite3_stmt *pStmt,
665 int i,
666 const void *zData,
667 int nData,
668 void (*xDel)(void*)
669 ){
670 return bindText(pStmt, i, zData, nData, xDel, 0);
671 }
672 int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){
673 int rc;
674 Vdbe *p = (Vdbe *)pStmt;
675 rc = vdbeUnbind(p, i);
676 if( rc==SQLITE_OK ){
677 sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue);
678 }
679 return rc;
680 }
681 int sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){
682 return sqlite3_bind_int64(p, i, (i64)iValue);
683 }
684 int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){
685 int rc;
686 Vdbe *p = (Vdbe *)pStmt;
687 rc = vdbeUnbind(p, i);
688 if( rc==SQLITE_OK ){
689 sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue);
690 }
691 return rc;
692 }
693 int sqlite3_bind_null(sqlite3_stmt* p, int i){
694 return vdbeUnbind((Vdbe *)p, i);
695 }
696 int sqlite3_bind_text(
697 sqlite3_stmt *pStmt,
698 int i,
699 const char *zData,
700 int nData,
701 void (*xDel)(void*)
702 ){
703 return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8);
704 }
705 #ifndef SQLITE_OMIT_UTF16
706 int sqlite3_bind_text16(
707 sqlite3_stmt *pStmt,
708 int i,
709 const void *zData,
710 int nData,
711 void (*xDel)(void*)
712 ){
713 return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE);
714 }
715 #endif /* SQLITE_OMIT_UTF16 */
716
717 /*
718 ** Return the number of wildcards that can be potentially bound to.
719 ** This routine is added to support DBD::SQLite.
720 */
721 int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){
722 Vdbe *p = (Vdbe*)pStmt;
723 return p ? p->nVar : 0;
724 }
725
726 /*
727 ** Create a mapping from variable numbers to variable names
728 ** in the Vdbe.azVar[] array, if such a mapping does not already
729 ** exist.
730 */
731 static void createVarMap(Vdbe *p){
732 if( !p->okVar ){
733 int j;
734 Op *pOp;
735 for(j=0, pOp=p->aOp; j<p->nOp; j++, pOp++){
736 if( pOp->opcode==OP_Variable ){
737 assert( pOp->p1>0 && pOp->p1<=p->nVar );
738 p->azVar[pOp->p1-1] = pOp->p3;
739 }
740 }
741 p->okVar = 1;
742 }
743 }
744
745 /*
746 ** Return the name of a wildcard parameter. Return NULL if the index
747 ** is out of range or if the wildcard is unnamed.
748 **
749 ** The result is always UTF-8.
750 */
751 const char *sqlite3_bind_parameter_name(sqlite3_stmt *pStmt, int i){
752 Vdbe *p = (Vdbe*)pStmt;
753 if( p==0 || i<1 || i>p->nVar ){
754 return 0;
755 }
756 createVarMap(p);
757 return p->azVar[i-1];
758 }
759
760 /*
761 ** Given a wildcard parameter name, return the index of the variable
762 ** with that name. If there is no variable with the given name,
763 ** return 0.
764 */
765 int sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const char *zName){
766 Vdbe *p = (Vdbe*)pStmt;
767 int i;
768 if( p==0 ){
769 return 0;
770 }
771 createVarMap(p);
772 if( zName ){
773 for(i=0; i<p->nVar; i++){
774 const char *z = p->azVar[i];
775 if( z && strcmp(z,zName)==0 ){
776 return i+1;
777 }
778 }
779 }
780 return 0;
781 }
782
783 /*
784 ** Transfer all bindings from the first statement over to the second.
785 ** If the two statements contain a different number of bindings, then
786 ** an SQLITE_ERROR is returned.
787 */
788 int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
789 Vdbe *pFrom = (Vdbe*)pFromStmt;
790 Vdbe *pTo = (Vdbe*)pToStmt;
791 int i, rc = SQLITE_OK;
792 if( (pFrom->magic!=VDBE_MAGIC_RUN && pFrom->magic!=VDBE_MAGIC_HALT)
793 || (pTo->magic!=VDBE_MAGIC_RUN && pTo->magic!=VDBE_MAGIC_HALT) ){
794 return SQLITE_MISUSE;
795 }
796 if( pFrom->nVar!=pTo->nVar ){
797 return SQLITE_ERROR;
798 }
799 for(i=0; rc==SQLITE_OK && i<pFrom->nVar; i++){
800 sqlite3MallocDisallow();
801 rc = sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]);
802 sqlite3MallocAllow();
803 }
804 return rc;
805 }
806
807 /*
808 ** Return the sqlite3* database handle to which the prepared statement given
809 ** in the argument belongs. This is the same database handle that was
810 ** the first argument to the sqlite3_prepare() that was used to create
811 ** the statement in the first place.
812 */
813 sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){
814 return pStmt ? ((Vdbe*)pStmt)->db : 0;
815 }