void UpdateBean::startRow(std::string table, sqlid_t rowid, sqlid_t parent_id, sqlid_t index) { shared_res<RowScope> rs(new RowScope); rowStack.push(rs); curRow()->query="UPDATE "+table+" SET "; curRow()->id=rowid; curRow()->needComma=false; if(parent_id!=Database::NULL_ID){ curRow()->addSimpleAssign(HIBERLITE_PARENTID_COLUMN,Transformer::toSQLiteValue(parent_id)); curRow()->addSimpleAssign(HIBERLITE_ENTRY_INDEX_COLUMN,Transformer::toSQLiteValue(index)); } }
vector<int> getRow(int rowIndex) { vector<int> curRow(rowIndex + 1, 1); for(int row = 0; row < rowIndex; ++row) { for(int col = row; col > 0; --col) { curRow[col] += curRow[col - 1]; } } return curRow; }
int uniquePaths(int m, int n) { if (m < n) return uniquePaths(n, m); vector<int> curRow(n, 0); curRow[0] = 1; for (int i = 0; i < m; i++) { for (int j = 1; j < n; j++) curRow[j] += curRow[j-1]; } return curRow[n-1]; }
int uniquePaths(int m, int n) { if (m < n) return uniquePaths(n, m); vector<int> prevRow(n, 1); vector<int> curRow(n, 1); for (int i = 1; i < m; i++) { for (int j = 1; j < n; j++) { curRow[j] = curRow[j-1] + prevRow[j]; } swap(prevRow, curRow); } return prevRow[n-1]; }
void UpdateBean::commitRow(shared_connection con, sqlid_t rowid) { if(!curRow()->needComma){ rowStack.pop(); return; } if(rowid!=curRow()->id) throw std::runtime_error("rowid mismatch"); curRow()->query+=std::string(" WHERE ")+ HIBERLITE_PRIMARY_KEY_COLUMN + "="+ Transformer::toSQLiteValue(rowid) +";"; sqlite3_stmt* stmt_ptr=NULL; { sqlite3* db=con->getSQLite3Ptr(); const char* foob; int rc=sqlite3_prepare_v2(db,curRow()->query.c_str(),-1,&stmt_ptr,&foob); database_error::database_assert(rc, con); } shared_stmt statement( new statement_ptr(stmt_ptr) ); for(size_t i=0;i<curRow()->atoms.size();i++){ curRow()->atoms[i]->bindValue(statement->get_stmt(), static_cast<int>(i)+RowScope::FirstAtom); } { int rc=sqlite3_step(statement->get_stmt()); if(rc!=SQLITE_DONE) database_error::database_assert(rc, con); } if(!rowStack.size()) throw std::logic_error("UpdateVisitor: commit row, but no row started"); rowStack.pop(); }
void UpdateBean::act(AV& av, collection_nvp<E,S> nvp ){ sqlid_t index=0; S& stream=nvp.stream; av.diveTable(nvp.name); std::string tab=av.getScope().table(); while(!stream.done()){ E& el=stream.getNext(); sqlid_t entry_id=Database::allocId(av.getConnection(), tab); startRow(tab,entry_id, curRow()->id,index); sql_nvp<E> el_nvp("item",el); av & el_nvp; commitRow(av.getConnection(), entry_id); index++; } av.pop(); }
vector<vector<int> > generate(int numRows) { vector<vector<int> > result; if(numRows == 0) return result; vector<int> preRow(1,1); vector<int> curRow(1,1); result.push_back(curRow); for (auto i=1; i<numRows; i++) { curRow.clear(); curRow.push_back(preRow[0]); for (auto j=0; j<preRow.size()-1; j++) curRow.push_back(preRow[j] + preRow[j+1]); curRow.push_back(preRow[preRow.size()-1]); result.push_back(curRow); preRow = curRow; } return result; }