aboutsummaryrefslogtreecommitdiff
path: root/query.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'query.cpp')
-rw-r--r--query.cpp40
1 files changed, 38 insertions, 2 deletions
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<vector<map<string,Row>::const_iterator>,string> FindQuery::executeIterators
cit_t end=table.rows.end();
pair<vector<map<string,Row>::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 <string,Table> &tables){
}
+UpdateQuery::UpdateQuery(void){};
+
+QueryResult UpdateQuery::execute(map<string,Table> &tables){
+ const map<string,Table>::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<vector<map<string,Row>::const_iterator>,string> ret=fqu.executeIterators(table);
+ if(ret.second.size()!=0)return QueryResult(0,ret.second);
+ map<string,Row>::const_iterator it;
+ int i,j;
+ const int numupdates=updates.size();
+ for(i=0;i<numupdates;i++){
+ const int col=updates[i].col;
+ if(col<0||col>=table.nc)return QueryResult(0,"invalid col (UQ:ex)");
+ }
+ for(i=0;i<(int)ret.first.size();i++){
+ for(j=0;j<numupdates;j++){
+ const int col=updates[j].col;
+ it->second.items[col]=updates[j].value.copy(table.header[col]);
+ }
+ }
+ return QueryResult(ret.first.size());
+}
+
+
DeleteQuery::DeleteQuery(void){};
QueryResult DeleteQuery::execute(map<string,Table> &tables){