From 0cc4a5f10a597fab94ee687f62062b193b3ac7ac Mon Sep 17 00:00:00 2001 From: rylek Date: Fri, 27 May 2011 07:01:41 +0000 Subject: [PATCH] .Sql: modified SqlSession::SetError logic to overwrite last error out of transactions .TSql: adjusted SqlBlock to do a ClearError when starting a transaction +Core: added ArrayMap::Insert(int i, const K& key, T *newt) in analogy to Array git-svn-id: svn://ultimatepp.org/upp/trunk@3466 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/Core/Map.h | 5 +++-- uppsrc/Sql/Sql.cpp | 2 +- uppsrc/TSql/util.h | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/uppsrc/Core/Map.h b/uppsrc/Core/Map.h index ec0fb8f05..0ad3b1198 100644 --- a/uppsrc/Core/Map.h +++ b/uppsrc/Core/Map.h @@ -157,8 +157,9 @@ class ArrayMap : public MoveableAndDeepCopyOption< ArrayMap >, public: T& Add(const K& k, const T& x) { return B::Add(k, x); } T& Add(const K& k) { return B::Add(k); } - T& Add(const K& k, T *newt) { B::key.Add(k); B::value.Add(newt); return *newt; } - template TT& Create(const K& k) { TT *q = new TT; B::key.Add(k); B::value.Add(q); return *q; } + T& Add(const K& k, T *newt) { B::key.Add(k); return B::value.Add(newt); } + T& Insert(int i, const K& k, T *newt) { B::key.Insert(i, k); return B::value.Insert(i, newt); } + template TT& Create(const K& k) { TT *q = new TT; B::key.Add(k); return B::value.Add(q); } T& Set(int i, T *ptr) { return B::value.Set(i, ptr); } T *PopDetach() { B::key.Drop(); return B::value.PopDetach(); } diff --git a/uppsrc/Sql/Sql.cpp b/uppsrc/Sql/Sql.cpp index bfc56cd16..74be36aab 100644 --- a/uppsrc/Sql/Sql.cpp +++ b/uppsrc/Sql/Sql.cpp @@ -682,7 +682,7 @@ Vector SqlSession::EnumColumns(String database, String table) void SqlSession::SetError(String error, String stmt, int code, const char *scode, Sql::ERRORCLASS clss) { if(error_handler && (*error_handler)(error, stmt, code, scode, clss)) return; - if(errorstatement.GetCount()) + if(GetTransactionLevel() && errorstatement.GetCount()) return; lasterror = error; errorstatement = stmt; diff --git a/uppsrc/TSql/util.h b/uppsrc/TSql/util.h index 1bc856adf..08147739e 100644 --- a/uppsrc/TSql/util.h +++ b/uppsrc/TSql/util.h @@ -14,10 +14,10 @@ class SqlBlock public: #ifndef NOAPPSQL SqlBlock(SqlSession& session = SQL.GetSession()) - : session(session), done(false) { session.Begin(); } + : session(session), done(false) { session.ClearError(); session.Begin(); } #else SqlBlock(SqlSession& session) - : session(session), done(false) { session.Begin(); } + : session(session), done(false) { session.ClearError(); session.Begin(); } #endif ~SqlBlock() { if(!done) session.Rollback(); }