From 8bf922f71c0e37ac590f9527a6cf1a6d2cab793c Mon Sep 17 00:00:00 2001 From: tomsmeding Date: Sat, 23 May 2015 20:51:49 +0200 Subject: UpdateQuery --- query.cpp | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) (limited to 'query.cpp') diff --git a/query.cpp b/query.cpp index 8dee06f..039a869 100644 --- a/query.cpp +++ b/query.cpp @@ -4,8 +4,8 @@ using namespace std; -WhereClause::WhereClause(void):col(0){} -WhereClause::WhereClause(const int _c,const RowItem &_v):col(_c),value(_v){} +ColValueClause::ColValueClause(void):col(0){} +ColValueClause::ColValueClause(const int _c,const RowItem &_v):col(_c),value(_v){} QueryResult::QueryResult(void):res(0){} @@ -71,6 +71,13 @@ pair::const_iterator>,string> FindQuery::executeIterators cit_t end=table.rows.end(); pair::const_iterator>,string> ret; + for(i=0;i<(int)where.size();i++){ + const int col=where[i].col; + if(col<0||col>=table.nc){ + ret.second="invalid col (DQ:eI)"; + return ret; + } + } for(cit_t it=table.rows.begin();it!=end;it++){ for(i=0;i<(int)where.size();i++){ const int col=where[i].col; @@ -113,6 +120,35 @@ QueryResult InsertQuery::execute(map &tables){ } +UpdateQuery::UpdateQuery(void){}; + +QueryResult UpdateQuery::execute(map &tables){ + const map::iterator tit=tables.find(tablename); + if(tit==tables.cend())return {{},"non-existent table (UQ:ex)"}; + Table &table=tit->second; + + FindQuery fqu; + fqu.tablename=tablename; + fqu.where=where; + pair::const_iterator>,string> ret=fqu.executeIterators(table); + if(ret.second.size()!=0)return QueryResult(0,ret.second); + map::const_iterator it; + int i,j; + const int numupdates=updates.size(); + for(i=0;i=table.nc)return QueryResult(0,"invalid col (UQ:ex)"); + } + for(i=0;i<(int)ret.first.size();i++){ + for(j=0;jsecond.items[col]=updates[j].value.copy(table.header[col]); + } + } + return QueryResult(ret.first.size()); +} + + DeleteQuery::DeleteQuery(void){}; QueryResult DeleteQuery::execute(map &tables){ -- cgit v1.2.3-54-g00ecf