diff options
| author | 2015-11-25 16:48:49 -0500 | |
|---|---|---|
| committer | 2015-11-25 16:48:49 -0500 | |
| commit | 7412693e086a7eafaa7ea861164caf523943e5fa (patch) | |
| tree | 0aee322e40572df306b9813546c7a12b3093bcea /SQLiteStudio3/sqlitestudiocli/commands/clicommanddesc.cpp | |
| parent | 640196993d31cf5d6fdf36386990ec05f473a048 (diff) | |
| parent | 8e640722c62692818ab840d50b3758f89a41a54e (diff) | |
Merge tag 'upstream/3.0.7'
Upstream version 3.0.7
# gpg: Signature made Wed 25 Nov 2015 04:48:48 PM EST using RSA key ID EBE9BD91
# gpg: Good signature from "Unit 193 <unit193@gmail.com>"
# gpg: aka "Unit 193 <unit193@ninthfloor.org>"
# gpg: aka "Unit 193 <unit193@ubuntu.com>"
# gpg: aka "Unit 193 <unit193@ninthfloor.com>"
Diffstat (limited to 'SQLiteStudio3/sqlitestudiocli/commands/clicommanddesc.cpp')
| -rw-r--r-- | SQLiteStudio3/sqlitestudiocli/commands/clicommanddesc.cpp | 94 |
1 files changed, 94 insertions, 0 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, '-'));
+}
|
