diff --git a/uppsrc/Sql/Sql.cpp b/uppsrc/Sql/Sql.cpp index c410f692e..906250b83 100644 --- a/uppsrc/Sql/Sql.cpp +++ b/uppsrc/Sql/Sql.cpp @@ -715,6 +715,13 @@ void SqlSession::InstallErrorHandler(bool (*handler)(String error, String stmt, error_handler = handler; } +Sql& SqlSession::GetSessionSql() +{ + if(!sql) + sql = new Sql(*this); + return *sql; +} + void SqlSession::ClearError() { lasterror.Clear(); diff --git a/uppsrc/Sql/Sqls.h b/uppsrc/Sql/Sqls.h index e9554d3b6..5cd6c40e5 100644 --- a/uppsrc/Sql/Sqls.h +++ b/uppsrc/Sql/Sqls.h @@ -254,6 +254,7 @@ AppSql& AppCursor(); #endif + struct StatementExecutor { virtual bool Execute(const String& stmt) = 0; virtual ~StatementExecutor() {} @@ -298,6 +299,8 @@ protected: bool (*error_handler)(String error, String stmt, int code, const char *scode, Sql::ERRORCLASS clss); int status; + + One sql; public: virtual void Begin(); @@ -354,18 +357,21 @@ public: int GetTime() const { return exectime; } String GetUser() { return Sql(*this).GetUser(); } + + Sql& GetSessionSql(); operator bool() const { return IsOpen(); } - SqlSession(); - virtual ~SqlSession(); - int GetStatus() { return status; } void SetStatus(int s) { status = s; WhenDatabaseActivity(*this); } bool operator == (int s) const { return status == s; } bool operator != (int s) const { return status != s; } Callback1 WhenDatabaseActivity; + + SqlSession(); + virtual ~SqlSession(); + }; class OciConnection; diff --git a/uppsrc/plugin/sqlite3/Sqlite3upp.cpp b/uppsrc/plugin/sqlite3/Sqlite3upp.cpp index e4746a827..389f7f651 100644 --- a/uppsrc/plugin/sqlite3/Sqlite3upp.cpp +++ b/uppsrc/plugin/sqlite3/Sqlite3upp.cpp @@ -347,6 +347,7 @@ bool Sqlite3Session::Open(const char* filename) { return false; } void Sqlite3Session::Close() { + sql.Clear(); if (NULL != db) { int retval; #ifndef flagNOAPPSQL