Пример #1
0
w_rc_t table_man_t<T>::print_table(ostream& os, int num_lines)
{
    table_row_t* row = get_tuple();
    rep_row_t rep(ts());
    rep_row_t repkey(ts());
    rep.set(table()->maxsize());
    repkey.set(table()->maxsize());
    row->_rep = &rep;
    row->_rep_key = &repkey;

    table_scan_iter_impl<T> scanner(this);
    scanner.open_scan();
    bool eof = false;
    size_t i = 0;

    while (true) {
        scanner.next(eof, *row);
        if (eof) break;
        if (num_lines > 0 && i++ > num_lines) break;
        row->print_values(os);
    }

    give_tuple(row);

    return RCOK;
}
Пример #2
0
w_rc_t table_man_t<T>::print_index(unsigned ind, ostream& os,
                                   int num_lines, bool need_tuple)
{
    table_row_t* row = get_tuple();
    rep_row_t rep(ts());
    rep_row_t repkey(ts());
    rep.set(table()->maxsize());
    repkey.set(table()->maxsize());
    row->_rep = &rep;
    row->_rep_key = &repkey;

    index_desc_t* pindex = table()->get_indexes()[ind];
    w_assert0(pindex);
    index_scan_iter_impl<T> scanner(pindex, this, need_tuple);
    scanner.open_scan();
    bool eof = false;
    size_t i = 0;

    while (true) {
        scanner.next(eof, *row);
        if (eof) break;
        if (num_lines > 0 && i++ > num_lines) break;
        row->print_values(os);
    }

    give_tuple(row);

    return RCOK;
}
Пример #3
0
w_rc_t table_man_t<T>::fetch_table(ss_m* db, lock_mode_t /* alm */)
{
    assert (db);
    assert (_ptable);

    bool eof = false;
    int counter = -1;

    table_row_t* tuple = get_tuple();
    rep_row_t areprow(ts());
    rep_row_t areprow_key(ts());
    areprow.set(_ptable->maxsize());
    areprow_key.set(_ptable->maxsize());
    tuple->_rep = &areprow;
    tuple->_rep_key = &areprow_key;

    W_DO(db->begin_xct());

    // 1. scan the table
    table_scan_iter_impl<T> t_scan(this);
    while(!eof) {
	W_DO(t_scan.next(eof, *tuple));
	counter++;
    }
    TRACE( TRACE_ALWAYS, "%s:%d pages\n", _ptable->name(), counter);

    // 2. scan the indexes
    for (auto index : _ptable->get_indexes()) {
        index_scan_iter_impl<T> i_scan(index, this);
        eof = false;
        counter = -1;
        while(!eof) {
            W_DO(i_scan.next(eof, *tuple));
            counter++;
        }
        TRACE( TRACE_ALWAYS, "\t%s:%d pages\n", index->name().c_str(), counter);
    }

    W_DO(db->commit_xct());
    give_tuple(tuple);

    return RCOK;
}