[Libreoffice-bugs] [Bug 144694] SQLite: Base Direct SQL Not Running Properly
bugzilla-daemon at bugs.documentfoundation.org
bugzilla-daemon at bugs.documentfoundation.org
Sat Sep 25 08:37:51 UTC 2021
https://bugs.documentfoundation.org/show_bug.cgi?id=144694
Julien Nabet <serval2412 at yahoo.fr> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |lionel at mamane.lu
--- Comment #4 from Julien Nabet <serval2412 at yahoo.fr> ---
Thank you Robert, I could reproduce this.
The problem is in dbaccess/source/ui/dlg/directsql.cxx:
230 if (_rStatement.toAsciiUpperCase().startsWith("SELECT"))
231 {
232 css::uno::Reference< css::sdbc::XResultSet > xRS =
xStatement->executeQuery(_rStatement);
233 if (m_xShowOutput->get_active())
234 display(xRS);
235 }
236 else
237 {
238 sal_Int32 resultCount = xStatement->executeUpdate(_rStatement);
239 addOutputText(OUString(OUString::number(resultCount) + " rows
updated\n"));
240 }
See
https://opengrok.libreoffice.org/xref/core/dbaccess/source/ui/dlg/directsql.cxx?r=76f89b00#230
The pb isn't about "Run SQL command directly" checkbox. It's the fact that this
dialog uses "executeUpdate" as soon as a command doesn't begin with "START".
Here it begins with:
"WITH RECURSIVE"
Perhaps we can consider these cases:
- UPDATE -> executeUpdate
- INSERT INTO -> executeUpdate
- CREATE TABLE -> execute
- anything else -> executeQuery
Here's a patch:
diff --git a/dbaccess/source/ui/dlg/directsql.cxx
b/dbaccess/source/ui/dlg/directsql.cxx
index e6828ae2aa3c..0d5c00248e85 100644
--- a/dbaccess/source/ui/dlg/directsql.cxx
+++ b/dbaccess/source/ui/dlg/directsql.cxx
@@ -227,17 +227,27 @@ namespace dbaui
}
else
{
- if (_rStatement.toAsciiUpperCase().startsWith("SELECT"))
- {
- css::uno::Reference< css::sdbc::XResultSet > xRS =
xStatement->executeQuery(_rStatement);
- if (m_xShowOutput->get_active())
- display(xRS);
- }
- else
+ if (_rStatement.toAsciiUpperCase().startsWith("UPDATE"))
{
sal_Int32 resultCount =
xStatement->executeUpdate(_rStatement);
addOutputText(OUString(OUString::number(resultCount) + "
rows updated\n"));
+ };
+ if (_rStatement.toAsciiUpperCase().startsWith("INSERT"))
+ {
+ sal_Int32 resultCount =
xStatement->executeUpdate(_rStatement);
+ addOutputText(OUString(OUString::number(resultCount) + "
rows inserted\n"));
+ };
+ if (_rStatement.toAsciiUpperCase().startsWith("CREATE"))
+ {
+ xStatement->execute(_rStatement);
+ addOutputText(u"Command executed\n");
}
+ else
+ {
+ css::uno::Reference< css::sdbc::XResultSet > xRS =
xStatement->executeQuery(_rStatement);
+ if (m_xShowOutput->get_active())
+ display(xRS);
+ };
}
// successful
sStatus = DBA_RES(STR_COMMAND_EXECUTED_SUCCESSFULLY);
Of course, we should make the strings translatable but it's another point.
Lionel: any thoughts here?
--
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/libreoffice-bugs/attachments/20210925/8d0068a1/attachment-0001.htm>
More information about the Libreoffice-bugs
mailing list