⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 localcli.cpp

📁 fastdb-2.92的源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    if (stmt->n_autoincremented_columns > 0) {         for (column_binding* cb = stmt->columns; cb != NULL; cb = cb->next) {            if (cb->var_type == cli_autoincrement) {                 *(cli_int4_t*)cb->var_ptr = ref.getOid();            }        }    }    return cli_ok;}int cli_update(int statement){    return dbCLI::instance.update(statement);}int dbCLI::update(int statement){    statement_desc* stmt = statements.get(statement);        if (stmt == NULL) {        return cli_bad_descriptor;    }    if (!stmt->prepared) {         return cli_not_fetched;    }    if (!stmt->for_update) {        return cli_not_update_mode;    }    if (stmt->updated) {         return cli_already_updated;    }    if (stmt->cursor.isEmpty()) {         return cli_not_found;    }    if (stmt->record_struct == NULL) {         dbSmallBuffer buf(stmt->table->appSize);         char* record = buf.base();        memset(record, 0, stmt->table->appSize);        stmt->cursor.setRecord((byte*)record);        stmt->cursor.fetch();                int rc = store_columns(buf.base(), stmt);        if (rc != cli_ok) {             return rc;        }    }    stmt->cursor.update();    stmt->updated = true;    return cli_ok;}int cli_freeze(int statement){    return dbCLI::instance.freeze(statement);}int dbCLI::freeze(int statement){    statement_desc* stmt = statements.get(statement);        if (stmt == NULL) {        return cli_bad_descriptor;    }    if (!stmt->prepared) {         return cli_not_fetched;    }    stmt->cursor.freeze();    return cli_ok;}int cli_unfreeze(int statement){    return dbCLI::instance.unfreeze(statement);}int dbCLI::unfreeze(int statement){    statement_desc* stmt = statements.get(statement);        if (stmt == NULL) {        return cli_bad_descriptor;    }    if (!stmt->prepared) {         return cli_not_fetched;    }    stmt->cursor.unfreeze();    return cli_ok;}int cli_get_first(int statement){    return dbCLI::instance.get_first(statement);}int dbCLI::get_first(int statement){    statement_desc* stmt = statements.get(statement);        if (stmt == NULL) {        return cli_bad_descriptor;    }    if (!stmt->prepared) {         return cli_not_fetched;    }    if (!stmt->cursor.gotoFirst()) {         return cli_not_found;    }    return fetch_columns(stmt);}int cli_get_last(int statement){    return dbCLI::instance.get_last(statement);}int dbCLI::get_last(int statement){    statement_desc* stmt = statements.get(statement);        if (stmt == NULL) {        return cli_bad_descriptor;    }    if (!stmt->prepared) {         return cli_not_fetched;    }    if (!stmt->cursor.gotoLast()) {         return cli_not_found;    }    return fetch_columns(stmt);}int cli_get_next(int statement){    return dbCLI::instance.get_next(statement);}int dbCLI::get_next(int statement){    statement_desc* stmt = statements.get(statement);        if (stmt == NULL) {        return cli_bad_descriptor;    }    if (!stmt->prepared) {         return cli_not_fetched;    }    if (!((stmt->first_fetch && stmt->cursor.gotoFirst()) ||          (!stmt->first_fetch && stmt->cursor.gotoNext())))    {        return cli_not_found;    }    return fetch_columns(stmt);}int cli_get_prev(int statement){    return dbCLI::instance.get_prev(statement);}int dbCLI::get_prev(int statement){    statement_desc* stmt = statements.get(statement);        if (stmt == NULL) {        return cli_bad_descriptor;    }    if (!stmt->prepared) {         return cli_not_fetched;    }    if (!((stmt->first_fetch && stmt->cursor.gotoLast()) ||          (!stmt->first_fetch && stmt->cursor.gotoPrev())))    {        return cli_not_found;    }    return fetch_columns(stmt);}int cli_skip(int statement, int n){    return dbCLI::instance.skip(statement, n);}int dbCLI::skip(int statement, int n){    statement_desc* stmt = statements.get(statement);        if (stmt == NULL) {        return cli_bad_descriptor;    }    if (!stmt->prepared) {         return cli_not_fetched;    }    if ((n > 0 && !((stmt->first_fetch && stmt->cursor.gotoFirst() && stmt->cursor.skip(n-1)                     || (!stmt->first_fetch && stmt->cursor.skip(n)))))        || (n < 0 && !((stmt->first_fetch && stmt->cursor.gotoLast() && stmt->cursor.skip(n+1)                        || (!stmt->first_fetch && stmt->cursor.skip(n))))))    {        return cli_not_found;    }     return fetch_columns(stmt);}int cli_seek(int statement, cli_oid_t oid){    return dbCLI::instance.seek(statement, oid);}int dbCLI::seek(int statement, cli_oid_t oid){    statement_desc* stmt = statements.get(statement);        if (stmt == NULL) {        return cli_bad_descriptor;    }    if (!stmt->prepared) {         return cli_not_fetched;    }    int pos = stmt->cursor.seek(oid);    if (pos < 0) {         return cli_not_found;    }     int rc = fetch_columns(stmt);    if (rc == cli_ok) {         return pos;    } else {         return rc;    }}cli_oid_t cli_get_oid(int statement){    return dbCLI::instance.get_current_oid(statement);}cli_oid_t dbCLI::get_current_oid(int statement){    statement_desc* s = statements.get(statement);    if (s == NULL) {        return cli_bad_descriptor;    }    return s->cursor.currId;}int cli_free(int statement){    return dbCLI::instance.free_statement(statement);}int dbCLI::free_statement(int statement){    statement_desc* stmt = statements.get(statement);    if (stmt == NULL) {        return cli_bad_descriptor;    }    return free_statement(stmt);}int dbCLI::free_statement(statement_desc* stmt){    {        dbCriticalSection cs(stmt->session->mutex);        statement_desc *sp, **spp = &stmt->session->stmts;        while ((sp = *spp) != stmt) {            if (sp == NULL) {                return cli_bad_descriptor;            }            spp = &sp->next;        }        *spp = stmt->next;    }    column_binding *cb, *next_cb;    for (cb = stmt->columns; cb != NULL; cb = next_cb) {        next_cb = cb->next;        delete[] cb->name;        column_allocator.free(cb);    }    parameter_binding *pb, *next_pb;    for (pb = stmt->params; pb != NULL; pb = next_pb) {        next_pb = pb->next;        delete[] pb->name;        parameter_allocator.free(pb);    }    statements.free(stmt);    return cli_ok;}int cli_commit(int session){    return dbCLI::instance.commit(session);}int dbCLI::commit(int session){    session_desc* s = sessions.get(session);    if (s == NULL) {        return cli_bad_descriptor;    }    while (s->dropped_tables != NULL) {        dbTableDescriptor* next = s->dropped_tables->nextDbTable;        delete s->dropped_tables;        s->dropped_tables = next;    }    s->db->commit();    s->existed_tables = s->db->tables;    return cli_ok;}int cli_precommit(int session){    return dbCLI::instance.precommit(session);}int dbCLI::precommit(int session){    session_desc* s = sessions.get(session);    if (s == NULL) {        return cli_bad_descriptor;    }    s->db->precommit();    return cli_ok;}int cli_abort(int session){    return dbCLI::instance.abort(session);}int dbCLI::abort(int session){    session_desc* s = sessions.get(session);    if (s == NULL) {        return cli_bad_descriptor;    }    dbDatabase* db = s->db;    while (s->dropped_tables != NULL) {        dbTableDescriptor* next = s->dropped_tables->nextDbTable;        db->linkTable(s->dropped_tables, s->dropped_tables->tableId);        s->dropped_tables = next;    }    s->db->rollback();    while (db->tables != s->existed_tables) {         dbTableDescriptor* table = db->tables;        db->unlinkTable(table);        delete table;    }    return cli_ok;}int cli_remove(int statement){    return dbCLI::instance.remove(statement);}int dbCLI::remove(int statement){    statement_desc* stmt = statements.get(statement);        if (stmt == NULL || !stmt->prepared) {        return cli_bad_descriptor;    }    if (!stmt->for_update) {        return cli_not_update_mode;    }    if (stmt->cursor.isEmpty()) {         return cli_not_found;    }    stmt->cursor.removeAllSelected();    return cli_ok;}int cli_describe(int session, char const* table, cli_field_descriptor** fields){    return dbCLI::instance.describe(session, table, fields);}int dbCLI::describe(int session, char const* table, cli_field_descriptor** fields){    session_desc* s = sessions.get(session);    if (s == NULL) {         return cli_bad_descriptor;    }       dbDatabase* db = s->db;    dbTableDescriptor* desc = db->findTableByName(table);    if (desc == NULL) {        return cli_table_not_found;    } else {         int nColumns = desc->nColumns;        cli_field_descriptor* fp =             (cli_field_descriptor*)malloc(nColumns*sizeof(cli_field_descriptor));        dbFieldDescriptor* fd = desc->columns;         *fields = fp;        for (int i = 0; i < nColumns; i++, fp++) {             fp->type = (cli_var_type)map_type(fd);            fp->name = fd->name;                        fp->refTableName = (fd->type == dbField::tpArray) ? fd->components->refTableName : fd->refTableName;            fp->inverseRefFieldName = fd->inverseRefName;            fp->flags = 0;            if (fd->tTree != 0) {                 fp->flags |= cli_indexed;            }            if (fd->hashTable != 0) { 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -