From: <ste...@us...> - 2013-01-06 03:52:04
|
Revision: 3300 http://moneymanagerex.svn.sourceforge.net/moneymanagerex/?rev=3300&view=rev Author: stef145g Date: 2013-01-06 03:51:57 +0000 (Sun, 06 Jan 2013) Log Message: ----------- Update Modified Paths: -------------- trunk/mmex/src/lua_interface.cpp trunk/mmex/src/lua_interface.h Modified: trunk/mmex/src/lua_interface.cpp =================================================================== --- trunk/mmex/src/lua_interface.cpp 2013-01-05 22:02:06 UTC (rev 3299) +++ trunk/mmex/src/lua_interface.cpp 2013-01-06 03:51:57 UTC (rev 3300) @@ -175,49 +175,59 @@ } /****************************************************************************** - output[, error] = mmSQLite3ResultSet("sql_script") - global var SQLQueryResult = { {x1.1 .... x1.n}, {x2.1 .... x2.n} } + Private Helper functions to access the database *****************************************************************************/ -int TLuaInterface::cpp2lua_SQLite3ResultSet(lua_State *lua) +int TLuaInterface::SetSqlScriptRowCount(const wxString& sScript, int& iRowsCount, int& iError, wxString& sOutput) { - wxString sScript = wxString::FromUTF8(lua_tostring(lua, -1)); - lua_pop(lua, 1); // remove error message - int iError = 0; //SQLITE_OK; - wxString sOutput = wxT(""); - - int iRowsCount = 0; try { iRowsCount = static_db_ptr().get()->ExecuteScalar(wxT("select count (*) from (\n") + sScript + wxT("\n)")); } - catch(const wxSQLite3Exception& e) + catch (const wxSQLite3Exception& e) { iError = e.GetErrorCode(); sOutput = e.GetMessage(); - if (sOutput.Contains(wxT("update")) || - sOutput.Contains(wxT("delete")) || - sOutput.Contains(wxT("insert"))) + if (sOutput.Contains(wxT("update")) || sOutput.Contains(wxT("delete")) || sOutput.Contains(wxT("insert"))) { iError = 3; //SQLITE_PERM; sOutput = _("Please, use read only access to DB in this function"); } } + return iError; +} - if (iError == 0) //SQLITE_OK +int TLuaInterface::SetSqlRestltSet(const wxString& sScript, wxSQLite3ResultSet& sqlQueryResult, int& iError, wxString& sOutput) +{ + try { + sqlQueryResult = static_db_ptr().get()->ExecuteQuery(sScript); + } + catch (const wxSQLite3Exception& e) + { + iError = e.GetErrorCode(); + sOutput = wxString::Format(_("Error: %s"), e.GetMessage().c_str()); + } + return iError; +} + +/****************************************************************************** + output[, error] = mmSQLite3ResultSet("sql_script") + global var SQLQueryResult = { {x1.1 .... x1.n}, {x2.1 .... x2.n} } + *****************************************************************************/ +int TLuaInterface::cpp2lua_SQLite3ResultSet(lua_State *lua) +{ + wxString sScript = wxString::FromUTF8(lua_tostring(lua, -1)); + lua_pop(lua, 1); // remove error message + int iError = 0; //SQLITE_OK; + wxString sOutput = wxT(""); + + int iRowsCount = 0; + + if (SetSqlScriptRowCount(sScript, iRowsCount, iError, sOutput) == 0) //SQLITE_OK + { wxSQLite3ResultSet sqlQueryResult; - try + if (SetSqlRestltSet(sScript, sqlQueryResult, iError, sOutput) == 0) { - sqlQueryResult = static_db_ptr().get()->ExecuteQuery(sScript); - } - catch(const wxSQLite3Exception& e) - { - iError = e.GetErrorCode(); - sOutput = wxString::Format(_("Error: %s"), e.GetMessage().c_str()); - } - - if (iError == 0) - { lua_createtable(lua , iRowsCount, 0); // push the main table T onto the stack int iColumnsCount = sqlQueryResult.GetColumnCount(); @@ -242,6 +252,10 @@ sOutput << wxT("<br>\n"); } lua_setglobal(lua,"SQLQueryResult"); + lua_pushinteger(lua, iRowsCount); + lua_setglobal(lua, "x"); + lua_pushinteger(lua, iColumnsCount); + lua_setglobal(lua, "y"); } } Modified: trunk/mmex/src/lua_interface.h =================================================================== --- trunk/mmex/src/lua_interface.h 2013-01-05 22:02:06 UTC (rev 3299) +++ trunk/mmex/src/lua_interface.h 2013-01-06 03:51:57 UTC (rev 3300) @@ -42,6 +42,9 @@ int lua_result_; wxString LuaErrorResult(); + static int SetSqlScriptRowCount(const wxString& sScript, int& iRowsCount, int& iError, wxString& sOutput); + static int SetSqlRestltSet(const wxString& sScript, wxSQLite3ResultSet& sqlQueryResult, int& iError, wxString& sOutput); + /************************************************************************** Lua function extensions provided by c++ code: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |