diff options
| author | 2015-11-25 16:48:41 -0500 | |
|---|---|---|
| committer | 2015-11-25 16:48:41 -0500 | |
| commit | 8e640722c62692818ab840d50b3758f89a41a54e (patch) | |
| tree | 38197eb1688a5afc338081ea17e15f938976e422 /SQLiteStudio3/sqlitestudiocli/commands | |
| parent | 9618f0ebbf4b88045247c01ce8c8f58203508ebf (diff) | |
Imported Upstream version 3.0.7upstream/3.0.7
Diffstat (limited to 'SQLiteStudio3/sqlitestudiocli/commands')
3 files changed, 103 insertions, 1 deletions
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommanddesc.cpp b/SQLiteStudio3/sqlitestudiocli/commands/clicommanddesc.cpp index 4865e23..f32b75e 100644 --- a/SQLiteStudio3/sqlitestudiocli/commands/clicommanddesc.cpp +++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommanddesc.cpp @@ -1,4 +1,8 @@ #include "clicommanddesc.h"
+#include "cli.h"
+#include "schemaresolver.h"
+#include "parser/ast/sqlitecreatevirtualtable.h"
+#include "cliutils.h"
CliCommandDesc::CliCommandDesc()
{
@@ -6,7 +10,41 @@ CliCommandDesc::CliCommandDesc() void CliCommandDesc::execute()
{
+ if (!cli->getCurrentDb())
+ {
+ println(tr("No working database is set.\n"
+ "Call %1 command to set working database.\n"
+ "Call %2 to see list of all databases.")
+ .arg(cmdName("use")).arg(cmdName("dblist")));
+ return;
+ }
+
+ Db* db = cli->getCurrentDb();
+ if (!db || !db->isOpen())
+ {
+ println(tr("Database is not open."));
+ return;
+ }
+
+ QString table = syntax.getArgument(TABLE);
+ SchemaResolver resolver(db);
+ SqliteQueryPtr query = resolver.getParsedObject(table, SchemaResolver::TABLE);
+ if (!query || (!query.dynamicCast<SqliteCreateTable>() && !query.dynamicCast<SqliteCreateVirtualTable>()))
+ {
+ println(tr("Cannot find table named: %1").arg(table));
+ return;
+ }
+
+ SqliteCreateTablePtr createTable = query.dynamicCast<SqliteCreateTable>();
+ if (createTable)
+ {
+ printTable(createTable.data());
+ return;
+ }
+
+ SqliteCreateVirtualTablePtr virtualTable = query.dynamicCast<SqliteCreateVirtualTable>();
+ printVirtualTable(virtualTable.data());
}
QString CliCommandDesc::shortHelp() const
@@ -24,3 +62,59 @@ void CliCommandDesc::defineSyntax() syntax.setName("desc");
syntax.addArgument(TABLE, tr("table"));
}
+
+void CliCommandDesc::printTable(SqliteCreateTable *table)
+{
+ int termCols = getCliColumns();
+ println(pad("", termCols, '-'));
+ println(tr("Table: %1").arg(table->table));
+
+ // Header
+ QString msg;
+ msg = pad(tr("Column name"), 20, ' ');
+ msg += "|";
+ msg += pad(tr("Data type"), 10, ' ');
+ msg += "|";
+ int lgt3rd = termCols - msg.length();
+ printHorizontalLine(lgt3rd);
+ msg += pad(tr("Constraints"), lgt3rd, ' ');
+ println(msg);
+ printHorizontalLine(lgt3rd);
+
+ // Rows
+ QString constrJoinStr = "\n" + pad("", 20, ' ') + "|" + pad("", 10, ' ') + "|";
+ QStringList constrList;
+ for (SqliteCreateTable::Column* column : table->columns)
+ {
+ msg = pad(column->name.left(20), 20, ' ');
+ msg += "|";
+ msg += pad((column->type ? column->type->detokenize().left(10) : ""), 10, ' ');
+ msg += "|";
+
+ constrList.clear();
+ for (SqliteCreateTable::Column::Constraint* constr : column->constraints)
+ constrList << pad(constr->detokenize().left(lgt3rd), lgt3rd, ' ');
+
+ msg += constrList.join(constrJoinStr);
+ println(msg);
+ }
+}
+
+void CliCommandDesc::printVirtualTable(SqliteCreateVirtualTable *table)
+{
+ println(tr("Virtual table: %1").arg(table->table));
+ if (table->args.size() > 0)
+ {
+ int i = 1;
+ println(tr("Construction arguments:"));
+ for (const QString& arg : table->args)
+ println(pad(QString::number(i++), 2, ' ') + ". " + arg);
+ }
+ else
+ println(tr("No construction arguments were passed for this virtual table."));
+}
+
+void CliCommandDesc::printHorizontalLine(int lgt3rd)
+{
+ println(pad("", 20, '-') + "+" + pad("", 10, '-') + "+" + pad("", lgt3rd, '-'));
+}
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommanddesc.h b/SQLiteStudio3/sqlitestudiocli/commands/clicommanddesc.h index 46876df..3c06c6a 100644 --- a/SQLiteStudio3/sqlitestudiocli/commands/clicommanddesc.h +++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommanddesc.h @@ -3,6 +3,9 @@ #include "clicommand.h"
+class SqliteCreateTable;
+class SqliteCreateVirtualTable;
+
class CliCommandDesc : public CliCommand
{
Q_OBJECT
@@ -13,6 +16,11 @@ class CliCommandDesc : public CliCommand QString shortHelp() const;
QString fullHelp() const;
void defineSyntax();
+
+ private:
+ void printTable(SqliteCreateTable* table);
+ void printVirtualTable(SqliteCreateVirtualTable* table);
+ void printHorizontalLine(int lgt3rd);
};
#endif // CLICOMMANDDESC_H
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommanduse.cpp b/SQLiteStudio3/sqlitestudiocli/commands/clicommanduse.cpp index ef0f641..9706221 100644 --- a/SQLiteStudio3/sqlitestudiocli/commands/clicommanduse.cpp +++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommanduse.cpp @@ -6,7 +6,7 @@ void CliCommandUse::execute() { - if (syntax.isArgumentSet(DB_NAME)) + if (!syntax.isArgumentSet(DB_NAME)) { if (!cli->getCurrentDb()) { |
