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; }
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; }
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; }