예제 #1
0
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));
	}
}
예제 #2
0
 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;
 }
예제 #3
0
 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];
 }
예제 #4
0
 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];
 }
예제 #5
0
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();
}
예제 #6
0
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;
		}