diff --git a/uppsrc/Sql/Sql.cpp b/uppsrc/Sql/Sql.cpp index 71fa4d207..2afc952ac 100644 --- a/uppsrc/Sql/Sql.cpp +++ b/uppsrc/Sql/Sql.cpp @@ -238,12 +238,33 @@ bool Sql::Fetch(__List##I(E__Ref)) { \ } __Expand(E__FetchF) -bool Sql::Fetch(Vector& row) { - if(!Fetch()) return false; +Vector Sql::GetRow() const { + Vector row; int n = GetColumns(); row.SetCount(n); for(int i = 0; i < n; i++) - GetColumn(i, row[i]); + row[i] = (*this)[i]; + return row; +} + +bool Sql::Fetch(Vector& row) { + if(!Fetch()) return false; + row = GetRow(); + return true; +} + +ValueMap Sql::GetRowMap() const +{ + ValueMap m; + int n = GetColumns(); + for(int i = 0; i < n; i++) + m.Add(GetColumnInfo(i).name, (*this)[i]); + return m; +} + +bool Sql::Fetch(ValueMap& row) { + if(!Fetch()) return false; + row = GetRowMap(); return true; } @@ -304,14 +325,6 @@ Value Sql::operator[](SqlId id) const { return Value(); } -Vector Sql::GetRow() const { - Vector row; - int cn = GetColumns(); - for(int i = 0; i < cn; i++) - row.Add((*this)[i]); - return row; -} - Value Sql::Select0(const String& s) { SetStatement(s); if(!Run()) diff --git a/uppsrc/Sql/Sqls.h b/uppsrc/Sql/Sqls.h index 3ea54c56a..57f8fa2dd 100644 --- a/uppsrc/Sql/Sqls.h +++ b/uppsrc/Sql/Sqls.h @@ -136,7 +136,7 @@ public: __Expand(E__Fetch) //$+ bool Fetch(Vector& row); - + bool Fetch(ValueMap& row); bool Fetch(Fields fields); int GetRowsProcessed() const { return cn->GetRowsProcessed(); } @@ -149,6 +149,7 @@ public: Value operator[](SqlId colid) const; const SqlColumnInfo& GetColumnInfo(int i) const { return cn->info[i]; } Vector GetRow() const; + ValueMap GetRowMap() const; operator Vector() const { return GetRow(); } void Get(Fields fields);