From 7167ce41b61d2ba2cdb526777a4233eb84a3b66a Mon Sep 17 00:00:00 2001 From: Unit 193 Date: Sat, 6 Dec 2014 17:33:25 -0500 Subject: Imported Upstream version 2.99.6 --- Plugins/CsvExport/CsvExport.pro | 29 ++++++ Plugins/CsvExport/CsvExport.ui | 100 ++++++++++++++++++ Plugins/CsvExport/csvexport.cpp | 191 +++++++++++++++++++++++++++++++++++ Plugins/CsvExport/csvexport.h | 56 ++++++++++ Plugins/CsvExport/csvexport.json | 7 ++ Plugins/CsvExport/csvexport.qrc | 5 + Plugins/CsvExport/csvexport_global.h | 12 +++ 7 files changed, 400 insertions(+) create mode 100644 Plugins/CsvExport/CsvExport.pro create mode 100644 Plugins/CsvExport/CsvExport.ui create mode 100644 Plugins/CsvExport/csvexport.cpp create mode 100644 Plugins/CsvExport/csvexport.h create mode 100644 Plugins/CsvExport/csvexport.json create mode 100644 Plugins/CsvExport/csvexport.qrc create mode 100644 Plugins/CsvExport/csvexport_global.h (limited to 'Plugins/CsvExport') diff --git a/Plugins/CsvExport/CsvExport.pro b/Plugins/CsvExport/CsvExport.pro new file mode 100644 index 0000000..9ffc8f9 --- /dev/null +++ b/Plugins/CsvExport/CsvExport.pro @@ -0,0 +1,29 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2014-06-14T16:04:07 +# +#------------------------------------------------- + +include($$PWD/../../SQLiteStudio3/plugins.pri) + +QT -= gui + +TARGET = CsvExport +TEMPLATE = lib + +DEFINES += CSVEXPORT_LIBRARY + +SOURCES += csvexport.cpp + +HEADERS += csvexport.h\ + csvexport_global.h + +FORMS += \ + CsvExport.ui + +OTHER_FILES += \ + csvexport.json + +RESOURCES += \ + csvexport.qrc + diff --git a/Plugins/CsvExport/CsvExport.ui b/Plugins/CsvExport/CsvExport.ui new file mode 100644 index 0000000..ec80b57 --- /dev/null +++ b/Plugins/CsvExport/CsvExport.ui @@ -0,0 +1,100 @@ + + + CsvExport + + + + 0 + 0 + 312 + 90 + + + + Form + + + + + + Column names in first row + + + CsvExport.ColumnsInFirstRow + + + + + + + Column separator: + + + + + + + CsvExport.Separator + + + + , (comma) + + + + + ; (semicolon) + + + + + \t (tab) + + + + + (whitespace) + + + + + Custom: + + + + + + + + + 30 + 16777215 + + + + CsvExport.CustomSeparator + + + + + + + Export NULL values as: + + + + + + + Empty string + + + CsvExport.NullValueString + + + + + + + + diff --git a/Plugins/CsvExport/csvexport.cpp b/Plugins/CsvExport/csvexport.cpp new file mode 100644 index 0000000..bdaf729 --- /dev/null +++ b/Plugins/CsvExport/csvexport.cpp @@ -0,0 +1,191 @@ +#include "csvexport.h" +#include "common/unused.h" +#include "services/exportmanager.h" +#include "csvserializer.h" + +CsvExport::CsvExport() +{ +} + +QString CsvExport::getFormatName() const +{ + return QStringLiteral("CSV"); +} + +ExportManager::StandardConfigFlags CsvExport::standardOptionsToEnable() const +{ + return ExportManager::CODEC; +} + +ExportManager::ExportModes CsvExport::getSupportedModes() const +{ + return ExportManager::FILE|ExportManager::TABLE|ExportManager::QUERY_RESULTS|ExportManager::CLIPBOARD; +} + +QString CsvExport::getExportConfigFormName() const +{ + return QStringLiteral("CsvExport"); +} + +CfgMain* CsvExport::getConfig() +{ + return &cfg; +} + +void CsvExport::validateOptions() +{ + if (cfg.CsvExport.Separator.get() >= 4) + { + EXPORT_MANAGER->updateVisibilityAndEnabled(cfg.CsvExport.CustomSeparator, true, true); + + bool valid = !cfg.CsvExport.CustomSeparator.get().isEmpty(); + EXPORT_MANAGER->handleValidationFromPlugin(valid, cfg.CsvExport.CustomSeparator, tr("Enter the custom separator character.")); + } + else + { + EXPORT_MANAGER->updateVisibilityAndEnabled(cfg.CsvExport.CustomSeparator, true, false); + EXPORT_MANAGER->handleValidationFromPlugin(true, cfg.CsvExport.CustomSeparator); + } +} + +QString CsvExport::defaultFileExtension() const +{ + return QStringLiteral("csv"); +} + +bool CsvExport::beforeExportQueryResults(const QString& query, QList& columns, const QHash providedData) +{ + UNUSED(query); + UNUSED(providedData); + defineCsvFormat(); + + QStringList cols; + for (QueryExecutor::ResultColumnPtr resCol : columns) + cols << resCol->displayName; + + writeln(CsvSerializer::serialize(cols, format)); + return true; +} + +bool CsvExport::exportQueryResultsRow(SqlResultsRowPtr row) +{ + exportTableRow(row); + return true; +} + +bool CsvExport::exportTable(const QString& database, const QString& table, const QStringList& columnNames, const QString& ddl, SqliteCreateTablePtr createTable, const QHash providedData) +{ + UNUSED(database); + UNUSED(table); + UNUSED(ddl); + UNUSED(providedData); + UNUSED(createTable); + return exportTable(columnNames); +} + +bool CsvExport::exportVirtualTable(const QString& database, const QString& table, const QStringList& columnNames, const QString& ddl, SqliteCreateVirtualTablePtr createTable, const QHash providedData) +{ + UNUSED(database); + UNUSED(table); + UNUSED(ddl); + UNUSED(providedData); + UNUSED(createTable); + return exportTable(columnNames); +} + +bool CsvExport::exportTable(const QStringList& columnNames) +{ + if (!isTableExport()) + return false; + + defineCsvFormat(); + writeln(CsvSerializer::serialize(columnNames, format)); + return true; +} + +bool CsvExport::exportTableRow(SqlResultsRowPtr data) +{ + QStringList valList; + QString nl = cfg.CsvExport.NullValueString.get(); + for (const QVariant& val : data->valueList()) + valList << (val.isNull() ? nl : val.toString()); + + writeln(CsvSerializer::serialize(valList, format)); + return true; +} + +bool CsvExport::beforeExportDatabase(const QString& database) +{ + UNUSED(database); + return false; +} + +bool CsvExport::exportIndex(const QString& database, const QString& name, const QString& ddl, SqliteCreateIndexPtr createIndex) +{ + UNUSED(database); + UNUSED(name); + UNUSED(ddl); + UNUSED(createIndex); + if (isTableExport()) + return true; + + return false; +} + +bool CsvExport::exportTrigger(const QString& database, const QString& name, const QString& ddl, SqliteCreateTriggerPtr createTrigger) +{ + UNUSED(database); + UNUSED(name); + UNUSED(ddl); + UNUSED(createTrigger); + if (isTableExport()) + return true; + + return false; +} + +bool CsvExport::exportView(const QString& database, const QString& name, const QString& ddl, SqliteCreateViewPtr createView) +{ + UNUSED(database); + UNUSED(name); + UNUSED(ddl); + UNUSED(createView); + return false; +} + +void CsvExport::defineCsvFormat() +{ + format = CsvFormat(); + format.rowSeparator = '\n'; + + switch (cfg.CsvExport.Separator.get()) + { + case 0: + format.columnSeparator = ','; + break; + case 1: + format.columnSeparator = ';'; + break; + case 2: + format.columnSeparator = '\t'; + break; + case 3: + format.columnSeparator = ' '; + break; + default: + format.columnSeparator = cfg.CsvExport.CustomSeparator.get(); + break; + } +} + + +bool CsvExport::init() +{ + Q_INIT_RESOURCE(csvexport); + return GenericExportPlugin::init(); +} + +void CsvExport::deinit() +{ + Q_CLEANUP_RESOURCE(csvexport); +} diff --git a/Plugins/CsvExport/csvexport.h b/Plugins/CsvExport/csvexport.h new file mode 100644 index 0000000..7ecde7c --- /dev/null +++ b/Plugins/CsvExport/csvexport.h @@ -0,0 +1,56 @@ +#ifndef CSVEXPORT_H +#define CSVEXPORT_H + +#include "csvexport_global.h" +#include "plugins/genericexportplugin.h" +#include "config_builder.h" +#include "csvformat.h" + +CFG_CATEGORIES(CsvExportConfig, + CFG_CATEGORY(CsvExport, + CFG_ENTRY(bool, ColumnsInFirstRow, false) + CFG_ENTRY(int, Separator, 0) + CFG_ENTRY(QString, CustomSeparator, QString()) + CFG_ENTRY(QString, NullValueString, QString()) + ) +) + +class CSVEXPORTSHARED_EXPORT CsvExport : public GenericExportPlugin +{ + Q_OBJECT + SQLITESTUDIO_PLUGIN("csvexport.json") + + public: + CsvExport(); + + QString getFormatName() const; + ExportManager::StandardConfigFlags standardOptionsToEnable() const; + ExportManager::ExportModes getSupportedModes() const; + QString getExportConfigFormName() const; + CfgMain* getConfig(); + void validateOptions(); + QString defaultFileExtension() const; + bool beforeExportQueryResults(const QString& query, QList& columns, + const QHash providedData); + bool exportQueryResultsRow(SqlResultsRowPtr row); + bool exportTable(const QString& database, const QString& table, const QStringList& columnNames, const QString& ddl, SqliteCreateTablePtr createTable, + const QHash providedData); + bool exportVirtualTable(const QString& database, const QString& table, const QStringList& columnNames, const QString& ddl, SqliteCreateVirtualTablePtr createTable, + const QHash providedData); + bool exportTableRow(SqlResultsRowPtr data); + bool beforeExportDatabase(const QString& database); + bool exportIndex(const QString& database, const QString& name, const QString& ddl, SqliteCreateIndexPtr createIndex); + bool exportTrigger(const QString& database, const QString& name, const QString& ddl, SqliteCreateTriggerPtr createTrigger); + bool exportView(const QString& database, const QString& name, const QString& ddl, SqliteCreateViewPtr createView); + bool init(); + void deinit(); + + private: + bool exportTable(const QStringList& columnNames); + void defineCsvFormat(); + + CFG_LOCAL(CsvExportConfig, cfg) + CsvFormat format; +}; + +#endif // CSVEXPORT_H diff --git a/Plugins/CsvExport/csvexport.json b/Plugins/CsvExport/csvexport.json new file mode 100644 index 0000000..57def5c --- /dev/null +++ b/Plugins/CsvExport/csvexport.json @@ -0,0 +1,7 @@ +{ + "type": "ExportPlugin", + "title": "CSV export", + "description": "Provides CSV format for exporting", + "version": 10000, + "author": "SalSoft" +} diff --git a/Plugins/CsvExport/csvexport.qrc b/Plugins/CsvExport/csvexport.qrc new file mode 100644 index 0000000..21d7213 --- /dev/null +++ b/Plugins/CsvExport/csvexport.qrc @@ -0,0 +1,5 @@ + + + CsvExport.ui + + diff --git a/Plugins/CsvExport/csvexport_global.h b/Plugins/CsvExport/csvexport_global.h new file mode 100644 index 0000000..8bdf173 --- /dev/null +++ b/Plugins/CsvExport/csvexport_global.h @@ -0,0 +1,12 @@ +#ifndef CSVEXPORT_GLOBAL_H +#define CSVEXPORT_GLOBAL_H + +#include + +#if defined(CSVEXPORT_LIBRARY) +# define CSVEXPORTSHARED_EXPORT Q_DECL_EXPORT +#else +# define CSVEXPORTSHARED_EXPORT Q_DECL_IMPORT +#endif + +#endif // CSVEXPORT_GLOBAL_H -- cgit v1.2.3