手动操作码解析

时间:2014-03-27 04:35:32

标签: c++ sqlite

在下面的代码片段中,我试图手动迭代sqlite3虚拟机来调查操作码。

我虽然vdbe->nOp应该返回我的查询的操作数,但是它会返回一些操作,这些操作在每次运行代码时都会发生变化,而且看起来非常不正确。根据sqlite3.exe中的.explain,此特定查询应该只有20个操作码。当我运行下面的代码时,我会看到数百万的nOp值,远远超过vdbe->aOp的大小。代码段错误。

void debug_query(){
    sqlite3_stmt *stmt;
    sqlite3 *db;
    sqlite3_open("./data/dummy_data.db", &db);

    int rc = sqlite3_prepare_v2(db, "SELECT * FROM track", 256, &stmt, NULL);
    if( rc!=SQLITE_OK ) {
        printf("query failed\n");
        return;
    }
    Vdbe *vdbe = (Vdbe*) stmt;
    VdbeOp *o = vdbe->aOp;
    std::cout << vdbe->nOp << std::endl;
    int i;
    for(i = 0; i < vdbe->nOp && o[i].opcode != OP_Next; i++);
}

0 个答案:

没有答案