aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/sqlitestudiocli/commands/clicommandopen.cpp
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@ubuntu.com>2014-12-06 17:33:25 -0500
committerLibravatarUnit 193 <unit193@ubuntu.com>2014-12-06 17:33:25 -0500
commit7167ce41b61d2ba2cdb526777a4233eb84a3b66a (patch)
treea35c14143716e1f2c98f808c81f89426045a946f /SQLiteStudio3/sqlitestudiocli/commands/clicommandopen.cpp
Imported Upstream version 2.99.6upstream/2.99.6
Diffstat (limited to 'SQLiteStudio3/sqlitestudiocli/commands/clicommandopen.cpp')
-rw-r--r--SQLiteStudio3/sqlitestudiocli/commands/clicommandopen.cpp84
1 files changed, 84 insertions, 0 deletions
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommandopen.cpp b/SQLiteStudio3/sqlitestudiocli/commands/clicommandopen.cpp
new file mode 100644
index 0000000..fef1737
--- /dev/null
+++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommandopen.cpp
@@ -0,0 +1,84 @@
+#include "clicommandopen.h"
+#include "cli.h"
+#include "services/dbmanager.h"
+#include <QFile>
+#include <QDir>
+#include <QDebug>
+
+void CliCommandOpen::execute()
+{
+ if (!syntax.isArgumentSet(DB_NAME_OR_FILE) && !cli->getCurrentDb())
+ {
+ println(tr("Cannot call %1 when no database is set to be current. Specify current database with %2 command or pass database name to %3.")
+ .arg(cmdName("open")).arg(cmdName("use")).arg(cmdName("open")));
+ return;
+ }
+
+ Db* db = nullptr;
+ if (syntax.isArgumentSet(DB_NAME_OR_FILE))
+ {
+ QString arg = syntax.getArgument(DB_NAME_OR_FILE);
+ db = DBLIST->getByName(arg);
+ if (!db)
+ {
+ if (QFile::exists(arg))
+ {
+ QString newName = DbManager::generateDbName(arg);
+ if (!DBLIST->addDb(newName, arg, false))
+ {
+ println(tr("Could not add database %1 to list.").arg(arg));
+ return;
+ }
+ db = DBLIST->getByName(arg);
+ Q_ASSERT(db != nullptr);
+ }
+ else
+ {
+ println(tr("File %1 doesn't exist in %2. Cannot open inexisting database with %3 command. "
+ "To create a new database, use %4 command.").arg(arg).arg(QDir::currentPath())
+ .arg(cmdName("open")).arg(cmdName("add")));
+ return;
+ }
+ }
+ }
+ else
+ {
+ db = cli->getCurrentDb();
+ if (!db)
+ {
+ qCritical() << "Default database is not in the list!";
+ return ;
+ }
+ }
+
+ if (!db->open())
+ {
+ println(db->getErrorText());
+ return;
+ }
+
+ cli->setCurrentDb(db);
+ println(tr("Database %1 has been open and set as the current working database.").arg(db->getName()));
+}
+
+QString CliCommandOpen::shortHelp() const
+{
+ return tr("opens database connection");
+}
+
+QString CliCommandOpen::fullHelp() const
+{
+ return tr(
+ "Opens connection to the database. If no additional argument was passed, then the connection is open to the "
+ "current default database (see help for %1 for details). However if an argument was passed, it can be either "
+ "<name> of the registered database to open, or it can be <path> to the database file to open. "
+ "In the second case, the <path> gets registered on the list with a generated name, but only for the period "
+ "of current application session. After restarting application such database is not restored on the list."
+ ).arg(cmdName("use"));
+}
+
+void CliCommandOpen::defineSyntax()
+{
+ syntax.setName("open");
+ syntax.addAlternatedArgument(DB_NAME_OR_FILE, {tr("name", "CLI command syntax"), tr("path", "CLI command syntax")}, false);
+}