Annotation of embedaddon/php/ext/sqlite/libsqlite/src/vdbe.h, revision 1.1.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>