Annotation of embedaddon/php/ext/sqlite/libsqlite/src/vdbe.h, revision 1.1
1.1 ! misho 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: ** Header file for the Virtual DataBase Engine (VDBE)
! 13: **
! 14: ** This header defines the interface to the virtual database engine
! 15: ** or VDBE. The VDBE implements an abstract machine that runs a
! 16: ** simple program to access and modify the underlying database.
! 17: **
! 18: ** $Id: vdbe.h 195361 2005-09-07 15:11:33Z iliaa $
! 19: */
! 20: #ifndef _SQLITE_VDBE_H_
! 21: #define _SQLITE_VDBE_H_
! 22: #include <stdio.h>
! 23:
! 24: /*
! 25: ** A single VDBE is an opaque structure named "Vdbe". Only routines
! 26: ** in the source file sqliteVdbe.c are allowed to see the insides
! 27: ** of this structure.
! 28: */
! 29: typedef struct Vdbe Vdbe;
! 30:
! 31: /*
! 32: ** A single instruction of the virtual machine has an opcode
! 33: ** and as many as three operands. The instruction is recorded
! 34: ** as an instance of the following structure:
! 35: */
! 36: struct VdbeOp {
! 37: u8 opcode; /* What operation to perform */
! 38: int p1; /* First operand */
! 39: int p2; /* Second parameter (often the jump destination) */
! 40: char *p3; /* Third parameter */
! 41: int p3type; /* P3_STATIC, P3_DYNAMIC or P3_POINTER */
! 42: #ifdef VDBE_PROFILE
! 43: int cnt; /* Number of times this instruction was executed */
! 44: long long cycles; /* Total time spend executing this instruction */
! 45: #endif
! 46: };
! 47: typedef struct VdbeOp VdbeOp;
! 48:
! 49: /*
! 50: ** A smaller version of VdbeOp used for the VdbeAddOpList() function because
! 51: ** it takes up less space.
! 52: */
! 53: struct VdbeOpList {
! 54: u8 opcode; /* What operation to perform */
! 55: signed char p1; /* First operand */
! 56: short int p2; /* Second parameter (often the jump destination) */
! 57: char *p3; /* Third parameter */
! 58: };
! 59: typedef struct VdbeOpList VdbeOpList;
! 60:
! 61: /*
! 62: ** Allowed values of VdbeOp.p3type
! 63: */
! 64: #define P3_NOTUSED 0 /* The P3 parameter is not used */
! 65: #define P3_DYNAMIC (-1) /* Pointer to a string obtained from sqliteMalloc() */
! 66: #define P3_STATIC (-2) /* Pointer to a static string */
! 67: #define P3_POINTER (-3) /* P3 is a pointer to some structure or object */
! 68:
! 69: /*
! 70: ** The following macro converts a relative address in the p2 field
! 71: ** of a VdbeOp structure into a negative number so that
! 72: ** sqliteVdbeAddOpList() knows that the address is relative. Calling
! 73: ** the macro again restores the address.
! 74: */
! 75: #define ADDR(X) (-1-(X))
! 76:
! 77: /*
! 78: ** The makefile scans the vdbe.c source file and creates the "opcodes.h"
! 79: ** header file that defines a number for each opcode used by the VDBE.
! 80: */
! 81: #include "opcodes.h"
! 82:
! 83: /*
! 84: ** Prototypes for the VDBE interface. See comments on the implementation
! 85: ** for a description of what each of these routines does.
! 86: */
! 87: Vdbe *sqliteVdbeCreate(sqlite*);
! 88: void sqliteVdbeCreateCallback(Vdbe*, int*);
! 89: int sqliteVdbeAddOp(Vdbe*,int,int,int);
! 90: int sqliteVdbeOp3(Vdbe*,int,int,int,const char *zP3,int);
! 91: int sqliteVdbeCode(Vdbe*,...);
! 92: int sqliteVdbeAddOpList(Vdbe*, int nOp, VdbeOpList const *aOp);
! 93: void sqliteVdbeChangeP1(Vdbe*, int addr, int P1);
! 94: void sqliteVdbeChangeP2(Vdbe*, int addr, int P2);
! 95: void sqliteVdbeChangeP3(Vdbe*, int addr, const char *zP1, int N);
! 96: void sqliteVdbeDequoteP3(Vdbe*, int addr);
! 97: int sqliteVdbeFindOp(Vdbe*, int, int);
! 98: VdbeOp *sqliteVdbeGetOp(Vdbe*, int);
! 99: int sqliteVdbeMakeLabel(Vdbe*);
! 100: void sqliteVdbeDelete(Vdbe*);
! 101: void sqliteVdbeMakeReady(Vdbe*,int,int);
! 102: int sqliteVdbeExec(Vdbe*);
! 103: int sqliteVdbeList(Vdbe*);
! 104: int sqliteVdbeFinalize(Vdbe*,char**);
! 105: void sqliteVdbeResolveLabel(Vdbe*, int);
! 106: int sqliteVdbeCurrentAddr(Vdbe*);
! 107: void sqliteVdbeTrace(Vdbe*,FILE*);
! 108: void sqliteVdbeCompressSpace(Vdbe*,int);
! 109: int sqliteVdbeReset(Vdbe*,char **);
! 110: int sqliteVdbeSetVariables(Vdbe*,int,const char**);
! 111:
! 112: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>