#ifndef VDBE_RUST_AMALGAMATION
#include "sqliteInt.h"
#include "vdbeInt.h"
#endif
SQLITE_API Vdbe *sqlite3_vdbe_create(sqlite3 *db){
Parse sParse;
Vdbe *p;
if( db==0 ) return 0;
memset(&sParse, 0, sizeof(sParse));
sParse.db = db;
p = sqlite3VdbeCreate(&sParse);
if( p ){
p->pParse = 0;
}
return p;
}
SQLITE_API void sqlite3_vdbe_make_ready(Vdbe *p, int nMem, int nCursor){
Parse sParse;
if( p==0 ) return;
memset(&sParse, 0, sizeof(sParse));
sParse.db = p->db;
sParse.pVdbe = p;
sParse.nMem = nMem;
sParse.nTab = nCursor;
sParse.nMaxArg = 0;
p->pParse = &sParse;
sqlite3VdbeMakeReady(p, &sParse);
p->pParse = 0;
}
SQLITE_API int sqlite3_vdbe_op_count(Vdbe *p){
if( p==0 ) return 0;
return p->nOp;
}
SQLITE_API int sqlite3_vdbe_state(Vdbe *p){
if( p==0 ) return -1;
return p->eVdbeState;
}
SQLITE_API int sqlite3_vdbe_set_int(Vdbe *p, int reg, sqlite3_int64 value){
if( p==0 ) return SQLITE_ERROR;
if( reg < 1 || reg > p->nMem ) return SQLITE_ERROR;
sqlite3VdbeMemSetInt64(&p->aMem[reg], value);
return SQLITE_OK;
}
SQLITE_API sqlite3_int64 sqlite3_vdbe_get_int(Vdbe *p, int reg){
if( p==0 ) return 0;
if( reg < 1 || reg > p->nMem ) return 0;
return sqlite3VdbeIntValue(&p->aMem[reg]);
}
SQLITE_API int sqlite3_vdbe_set_double(Vdbe *p, int reg, double value){
if( p==0 ) return SQLITE_ERROR;
if( reg < 1 || reg > p->nMem ) return SQLITE_ERROR;
sqlite3VdbeMemSetDouble(&p->aMem[reg], value);
return SQLITE_OK;
}
SQLITE_API double sqlite3_vdbe_get_double(Vdbe *p, int reg){
if( p==0 ) return 0.0;
if( reg < 1 || reg > p->nMem ) return 0.0;
return sqlite3VdbeRealValue(&p->aMem[reg]);
}
SQLITE_API int sqlite3_vdbe_set_null(Vdbe *p, int reg){
if( p==0 ) return SQLITE_ERROR;
if( reg < 1 || reg > p->nMem ) return SQLITE_ERROR;
sqlite3VdbeMemSetNull(&p->aMem[reg]);
return SQLITE_OK;
}
SQLITE_API int sqlite3_vdbe_is_null(Vdbe *p, int reg){
if( p==0 ) return 1;
if( reg < 1 || reg > p->nMem ) return 1;
return (p->aMem[reg].flags & MEM_Null) != 0;
}
SQLITE_API int sqlite3_vdbe_mem_count(Vdbe *p){
if( p==0 ) return 0;
return p->nMem;
}
SQLITE_API int sqlite3_vdbe_cursor_count(Vdbe *p){
if( p==0 ) return 0;
return p->nCursor;
}
SQLITE_API int sqlite3_vdbe_make_label(Vdbe *p){
Parse sParse;
int label;
if( p==0 ) return 0;
memset(&sParse, 0, sizeof(sParse));
sParse.db = p->db;
sParse.pVdbe = p;
p->pParse = &sParse;
label = sqlite3VdbeMakeLabel(&sParse);
p->pParse = 0;
return label;
}
SQLITE_API void sqlite3_vdbe_resolve_label(Vdbe *p, int label){
if( p==0 ) return;
sqlite3VdbeResolveLabel(p, label);
}
SQLITE_API int sqlite3_vdbe_test_simple(sqlite3 *db){
Vdbe *p;
int rc;
int result = -1;
p = sqlite3_vdbe_create(db);
if( p==0 ) return -2;
sqlite3VdbeAddOp2(p, OP_Integer, 42, 1);
sqlite3VdbeAddOp2(p, OP_ResultRow, 1, 1);
sqlite3VdbeAddOp0(p, OP_Halt);
sqlite3VdbeSetNumCols(p, 1);
sqlite3_vdbe_make_ready(p, 2, 0);
rc = sqlite3_step((sqlite3_stmt*)p);
if( rc==SQLITE_ROW ){
result = sqlite3_column_int((sqlite3_stmt*)p, 0);
}else{
result = -rc;
}
sqlite3_finalize((sqlite3_stmt*)p);
return result;
}