Several fixes for compilation with gcc (doesn't link)

This commit is contained in:
eelke 2017-08-22 12:45:45 +02:00
parent a2f39692a2
commit dd9906dbd8
20 changed files with 379 additions and 262 deletions

View file

@ -58,13 +58,13 @@ BackupFormatModel::BackupFormatModel(QObject *parent)
//}
int BackupFormatModel::rowCount(const QModelIndex &parent) const
int BackupFormatModel::rowCount(const QModelIndex &) const
{
int size = g_BackupFormats.size();
return size;
}
int BackupFormatModel::columnCount(const QModelIndex &parent) const
int BackupFormatModel::columnCount(const QModelIndex &) const
{
return 3;
@ -80,13 +80,13 @@ QVariant BackupFormatModel::data(const QModelIndex &index, int role) const
if (role == Qt::DisplayRole) {
const auto &item = g_BackupFormats.at(row);
switch (col) {
case Column::Short:
case ColumnShort:
result = item.shortFlag;
break;
case Column::Long:
case ColumnLong:
result = item.longFlag;
break;
case Column::Description:
case ColumnDescription:
result = item.description;
break;
}

View file

@ -8,7 +8,7 @@ class BackupFormatModel : public QAbstractListModel
Q_OBJECT
public:
enum class Column { Short=1, Long=0, Description=2 };
enum Column { ColumnShort=1, ColumnLong=0, ColumnDescription=2 };
explicit BackupFormatModel(QObject *parent);

View file

@ -1,7 +1,9 @@
#ifndef EXPECTED_H
#define EXPECTED_H
#include <exception>
#include <stdexcept>
#include <typeinfo>
#include <utility>
template <typename T>
class Expected {
@ -168,13 +170,13 @@ public:
Expected(const Expected& rhs)
: m_valid(rhs.m_valid)
, m_error(rhs.m_error)
: m_error(rhs.m_error)
, m_valid(rhs.m_valid)
{}
Expected(Expected<void> &&rhs)
: m_valid(rhs.m_valid)
, m_error(std::move(rhs.m_error))
: m_error(std::move(rhs.m_error))
, m_valid(rhs.m_valid)
{}
~Expected()

View file

@ -8,11 +8,11 @@ QT -= gui
TARGET = core
TEMPLATE = lib
CONFIG += staticlib c++11
CONFIG += staticlib c++14
INCLUDEPATH += C:\prog\include C:\VSproj\boost_1_63_0
DEFINES += WIN32_LEAN_AND_MEAN NOMINMAX
LIBS += /LIBPATH:C:\VSproj\boost_1_63_0\stage\lib /LIBPATH:c:\prog\lib\ libpq.lib fmt.lib User32.lib ws2_32.lib
#LIBS += /LIBPATH:C:\VSproj\boost_1_63_0\stage\lib /LIBPATH:c:\prog\lib\ libpq.lib fmt.lib User32.lib ws2_32.lib
# The following define makes your compiler emit warnings if you use

View file

@ -9,6 +9,8 @@
#include <QScrollBar>
#include <QStandardPaths>
#include <windows.h>
BackupDialog::BackupDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::BackupDialog)
@ -81,7 +83,7 @@ void BackupDialog::on_process_errorOccurred(QProcess::ProcessError error)
msg = tr("Failed to start");
break;
case 1:
msg = tr("Crasged");
msg = tr("Crashed");
break;
case 2:
msg = tr("Timedout");
@ -175,6 +177,50 @@ void BackupDialog::on_btnStart_clicked()
setParams(arguments);
// BOOL res = AllocConsole();
// if (!res) {
// DWORD error = GetLastError();
// QMessageBox::critical(this, "pglab", tr("AllocConsole failed %1").arg(error), QMessageBox::Close);
// }
// HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
// DWORD written;
// res = WriteConsoleOutputCharacter(out, L"Hello, world!\n", 14, {0, 0}, &written);
// PROCESS_INFORMATION proc_info;
// STARTUPINFO startup_info;
// memset(&startup_info, 0, sizeof(startup_info));
// startup_info.cb = sizeof(startup_info);
// startup_info.lpReserved;
// startup_info.lpDesktop;
// startup_info.lpTitle;
// startup_info.dwX;
// startup_info.dwY;
// startup_info.dwXSize;
// startup_info.dwYSize;
// startup_info.dwXCountChars;
// startup_info.dwYCountChars;
// startup_info.dwFillAttribute;
// startup_info.dwFlags = STARTF_USESTDHANDLES;
// startup_info.wShowWindow;
// startup_info.cbReserved2;
// startup_info.lpReserved2;
// startup_info.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
// startup_info.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
// startup_info.hStdError = GetStdHandle(STD_ERROR_HANDLE);
// res = CreateProcess(
// LR"_(C:\Prog\build-conoutputtest-Desktop_Qt_5_8_0_MSVC2015_32bit2-Debug\debug\conoutputtest.exe)_",
// NULL, // _Inout_opt_ LPTSTR lpCommandLine,
// NULL, // _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes,
// NULL, // _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
// TRUE,
// 0, // _In_ DWORD dwCreationFlags,
// NULL, // _In_opt_ LPVOID lpEnvironment,
// NULL, // _In_opt_ LPCTSTR lpCurrentDirectory,
// &startup_info, // _In_ LPSTARTUPINFO lpStartupInfo,
// &proc_info // _Out_ LPPROCESS_INFORMATION lpProcessInformation
// );
// QString program = R"_(C:\prog\build-conoutputtest-Desktop_Qt_5_8_0_MSVC2015_32bit2-Debug\debug\conoutputtest.exe)_";
// QStringList arguments;
// arguments << "/C" << "DIR /S c:\\";
@ -188,6 +234,13 @@ void BackupDialog::on_btnStart_clicked()
auto p = new QProcess(this);
ConnectTo(p);
p->setProcessEnvironment(env);
p->setCreateProcessArgumentsModifier([] (QProcess::CreateProcessArguments *args)
{
args->flags |= CREATE_NEW_CONSOLE;
args->flags &= ~DETACHED_PROCESS;
args->startupInfo->dwFlags &= ~STARTF_USESTDHANDLES;
});
p->start(program, arguments);
}
@ -221,3 +274,4 @@ void BackupDialog::on_selectDestination_clicked()
ui->editFilename->setText(QDir::toNativeSeparators(fn));
}
}

View file

@ -78,6 +78,8 @@ void DatabaseWindow::connectionStateChanged(ASyncDBConnection::State state)
case ASyncDBConnection::State::CancelSend:
status_str = tr("Query geannuleerd");
break;
case ASyncDBConnection::State::Terminating:
break;
}
// addLog(status_str);
statusBar()->showMessage(status_str);

View file

@ -26,16 +26,16 @@ void PgAuthIdContainer::load(const Pgsql::Result &res)
bool with_rls = (m_catalogue->serverVersion() >= 90500);
for (auto row : res) {
PgAuthId v;
v.oid = row.get(0); // InvalidOid;
v.name = row.get(1);
v.super = row.get(2);
v.inherit = row.get(3);
v.createRole = row.get(4);
v.createDB = row.get(5);
v.canlogin = row.get(6);
v.replication = row.get(7);
v.connLimit = row.get(8);
v.validUntil = row.get(9);
v.oid << row.get(0); // InvalidOid;
v.name << row.get(1);
v.super << row.get(2);
v.inherit << row.get(3);
v.createRole << row.get(4);
v.createDB << row.get(5);
v.canlogin << row.get(6);
v.replication << row.get(7);
v.connLimit << row.get(8);
v.validUntil << row.get(9);
v.bypassRls = with_rls ? (bool)row.get(10) : false;
// QDateTime
m_container.push_back(v);

View file

@ -18,17 +18,17 @@ void PgDatabaseContainer::load(const Pgsql::Result &res)
m_container.reserve(n_rows);
for (auto row : res) {
PgDatabase v;
v.oid = row.get(0); // InvalidOid;
v.name = row.get(1);
v.dba = row.get(2); // owner?
v.encoding = row.get(3);
v.collate = row.get(4);
v.ctype = row.get(5);
v.isTemplate = row.get(6);
v.allowConn = row.get(7);
v.connLimit = row.get(8);
v.tablespace = row.get(9);
v.acl = row.get(10);
v.oid << row.get(0); // InvalidOid;
v.name << row.get(1);
v.dba << row.get(2); // owner?
v.encoding << row.get(3);
v.collate << row.get(4);
v.ctype << row.get(5);
v.isTemplate << row.get(6);
v.allowConn << row.get(7);
v.connLimit << row.get(8);
v.tablespace << row.get(9);
v.acl << row.get(10);
m_container.push_back(v);
}
std::sort(m_container.begin(), m_container.end());

View file

@ -48,37 +48,37 @@ void PgTypeContainer::load(const Pgsql::Result &res)
m_container.reserve(n_rows);
for (auto row : res) {
PgType v;
v.oid = row.get(0); // InvalidOid;
v.typname = row.get(1); //.asQString(); //. operator QString(); // "name";"NO"
v.typnamespace = row.get(2); // InvalidOid;//"oid";"NO"
v.typowner = row.get(3); // InvalidOid;//"oid";"NO"
v.typlen = row.get(4); // -1;//"smallint";"NO"
v.typbyval = row.get(5); // false;//"boolean";"NO"
v.typtype = row.get(6);//""char"";"NO"
v.typcategory = row.get(7);//""char"";"NO"
v.typispreferred = row.get(8); //false;//"boolean";"NO"
v.typisdefined = row.get(9); //false;//"boolean";"NO"
v.typdelim = row.get(10); //""char"";"NO"
v.typrelid = row.get(11); // InvalidOid;//"oid";"NO"
v.typelem = row.get(12); // InvalidOid;//"oid";"NO"
v.typarray = row.get(13); // InvalidOid;//"oid";"NO"
v.typinput = row.get(14).asQString();//regproc";"NO"
v.typoutput = row.get(15).asQString();//"regproc";"NO"
v.typreceive = row.get(16).asQString();//"regproc";"NO"
v.typsend = row.get(17).asQString();//"regproc";"NO"
v.typmodin = row.get(18).asQString();//"regproc";"NO"
v.typmodout = row.get(19).asQString();//"regproc";"NO"
v.typanalyze = row.get(20).asQString();//"regproc";"NO"
v.typalign = row.get(21); // //""char"";"NO"
v.typstorage = row.get(22); //""char"";"NO"
v.typnotnull = row.get(23); //"boolean";"NO"
v.typbasetype = row.get(24); //"oid";"NO"
v.typtypmod = row.get(25); //-1;//"integer";"NO"
v.typndims = row.get(26); //"integer";"NO"
v.typcollation = row.get(27); //InvalidOid;//"oid";"NO"
v.typdefaultbin = row.get(28).asQString();//"pg_node_tree";"YES"
v.typdefault = row.get(29).asQString();//"text";"YES"
v.typacl = row.get(30).asQString();//"ARRAY";"YES"
v.oid << row.get(0); // InvalidOid;
v.typname << row.get(1); //. operator QString(); // "name";"NO"
v.typnamespace << row.get(2); // InvalidOid;//"oid";"NO"
v.typowner << row.get(3); // InvalidOid;//"oid";"NO"
v.typlen << row.get(4); // -1;//"smallint";"NO"
v.typbyval << row.get(5); // false;//"boolean";"NO"
v.typtype << row.get(6);//""char"";"NO"
v.typcategory << row.get(7);//""char"";"NO"
v.typispreferred << row.get(8); //false;//"boolean";"NO"
v.typisdefined << row.get(9); //false;//"boolean";"NO"
v.typdelim << row.get(10); //""char"";"NO"
v.typrelid << row.get(11); // InvalidOid;//"oid";"NO"
v.typelem << row.get(12); // InvalidOid;//"oid";"NO"
v.typarray << row.get(13); // InvalidOid;//"oid";"NO"
v.typinput << row.get(14);//regproc";"NO"
v.typoutput << row.get(15);//"regproc";"NO"
v.typreceive << row.get(16);//"regproc";"NO"
v.typsend << row.get(17);//"regproc";"NO"
v.typmodin << row.get(18);//"regproc";"NO"
v.typmodout << row.get(19);//"regproc";"NO"
v.typanalyze << row.get(20);//"regproc";"NO"
v.typalign << row.get(21); // //""char"";"NO"
v.typstorage << row.get(22); //""char"";"NO"
v.typnotnull << row.get(23); //"boolean";"NO"
v.typbasetype << row.get(24); //"oid";"NO"
v.typtypmod << row.get(25); //-1;//"integer";"NO"
v.typndims << row.get(26); //"integer";"NO"
v.typcollation << row.get(27); //InvalidOid;//"oid";"NO"
v.typdefaultbin << row.get(28);//"pg_node_tree";"YES"
v.typdefault << row.get(29);//"text";"YES"
v.typacl << row.get(30);//"ARRAY";"YES"
m_container.push_back(v);
}
std::sort(m_container.begin(), m_container.end());

View file

@ -39,12 +39,12 @@ void PgsqlDatabaseCatalogue::loadInfo(Pgsql::Connection &conn)
Pgsql::Result r = conn.query("SHOW server_version_num");
if (r && r.resultStatus() == PGRES_TUPLES_OK)
if (r.rows() == 1)
m_serverVersion = r.get(0, 0);
m_serverVersion << r.get(0, 0);
r = conn.query("SELECT version()");
if (r && r.resultStatus() == PGRES_TUPLES_OK)
if (r.rows() == 1)
m_serverVersionString = r.get(0, 0);
m_serverVersionString = r.get(0, 0).asQString();
}
void PgsqlDatabaseCatalogue::loadTypes(Pgsql::Connection &conn)

View file

@ -1,4 +1,5 @@
#include "Pgsql_Params.h"
#include <cstring>
using namespace Pgsql;
@ -30,16 +31,13 @@ Params::Params(Params&& rhs)
, m_paramValues(std::move(rhs.m_paramValues))
, m_paramLengths(std::move(rhs.m_paramLengths))
, m_paramFormats(std::move(rhs.m_paramFormats))
{
//rhs.m_paramValues.clear(); // make sure origin is empty, to prevent double deletion
}
{}
Params& Params::operator=(Params&& rhs)
{
if (&rhs != this) {
m_paramTypes = std::move(rhs.m_paramTypes);
m_paramValues = std::move(rhs.m_paramValues);
//rhs.m_paramValues.clear(); // make sure origin is empty, to prevent double deletion
m_paramLengths = std::move(rhs.m_paramLengths);
m_paramFormats = std::move(rhs.m_paramFormats);
}

View file

@ -153,7 +153,7 @@ int Result::cols() const
return PQnfields(result);
}
const char* const Result::getColName(int idx) const
const char * Result::getColName(int idx) const
{
return PQfname(result, idx);
}

View file

@ -116,9 +116,9 @@ namespace Pgsql {
int rows() const;
int cols() const;
const char* const getColName(int idx) const;
const char* getColName(int idx) const;
const char * val(int col, int row) const;
const char* val(int col, int row) const;
Value get(int col, int row) const;
Oid type(int col) const;
bool null(int col, int row) const;

View file

@ -54,3 +54,45 @@ Value::operator bool() const
return std::strcmp(m_val, "t") == 0;
}
//void operator<<(QString &s, const Value &v)
//{
// s = v.asQString();
//}
//void operator<<(QDateTime &l, const Value &v)
//{
// l = QDateTime::fromString(asQString(),
// "yyyy-MM-dd hh:mm:ss");
//}
//void operator<<(std::string &l, const Value &v)
//{
// l = v;
//}
//void operator<<(short &l, const Value &v)
//{
// l = (short)std::atoi(v.c_str());
//}
//void operator<<(int &l, const Value &v)
//{
// l = std::atoi(v.c_str());
//}
//void Pgsql::operator<<(Oid &l, const Value &v)
//{
// l = std::atoi(v.c_str());
//}
//void operator<<(__int64 &l, const Value &v)
//{
// l = std::strtoull(v.c_str(), nullptr, 10);
//}
//void operator<<(bool &l, const Value &v)
//{
// l = std::strcmp(v.c_str(), "t") == 0;
//}

View file

@ -13,6 +13,8 @@ namespace Pgsql {
public:
Value(const char *val, Oid typ);
QString asQString() const;
const char* c_str() const { return m_val; }
operator QString() const;
operator QDateTime() const;
operator std::string() const;
@ -21,12 +23,24 @@ namespace Pgsql {
operator Oid() const;
operator __int64() const;
operator bool() const;
private:
const char *m_val;
Oid m_typ;
};
// void operator<<(QString &s, const Value &v);
// void operator<<(QDateTime &l, const Value &v);
// void operator<<(std::string &l, const Value &v);
// void operator<<(short &l, const Value &v);
// void operator<<(int &l, const Value &v);
// void operator<<(Oid &l, const Value &v);
// void operator<<(__int64 &l, const Value &v);
// void operator<<(bool &l, const Value &v);
template <typename T>
void operator<<(T &s, const Value &v)
{
s = static_cast<T>(v);
}
} // end namespace Pgsql

View file

@ -336,6 +336,8 @@ void QueryTab::connectionStateChanged(ASyncDBConnection::State state)
case ASyncDBConnection::State::CancelSend:
iconname = ":/icons/16x16/document_yellow.png";
break;
case ASyncDBConnection::State::Terminating:
break;
}
tabwidget->setTabIcon(i, QIcon(iconname));
}

View file

@ -15,6 +15,11 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QSplitter" name="splitter">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<widget class="QWidget" name="">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QPlainTextEdit" name="queryEdit"/>
@ -105,8 +110,7 @@
</widget>
</item>
</layout>
</item>
<item>
</widget>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>1</number>
@ -154,6 +158,13 @@
<property name="bottomMargin">
<number>2</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="lblTimes">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QTreeView" name="explainTreeView">
<property name="editTriggers">
@ -176,13 +187,6 @@
</attribute>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="lblTimes">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="logTab">
@ -208,6 +212,7 @@
</layout>
</widget>
</widget>
</widget>
</item>
</layout>
</widget>

View file

@ -7,8 +7,8 @@
ServerWindow::ServerWindow(MasterController *master, QWidget *parent)
: ASyncWindow(parent)
, m_masterController(master)
, ui(new Ui::ServerWindow)
, m_masterController(master)
{
ui->setupUi(this);

View file

@ -25,10 +25,7 @@ int main(int argc, char *argv[])
auto master_controller = std::make_unique<MasterController>();
master_controller->init();
int result = a.exec();
WSACleanup();
return result;

View file

@ -4,7 +4,7 @@
#
#-------------------------------------------------
CONFIG += c++11
CONFIG += c++14
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets sql
@ -12,12 +12,13 @@ greaterThan(QT_MAJOR_VERSION, 4): QT += widgets sql
TARGET = pglab
TEMPLATE = app
INCLUDEPATH += C:\prog\include C:\VSproj\boost_1_63_0
INCLUDEPATH += C:\prog\include C:\Prog\boost\include\boost-1_64
DEFINES += WIN32_LEAN_AND_MEAN NOMINMAX
LIBS += /LIBPATH:C:\VSproj\boost_1_63_0\stage\lib /LIBPATH:c:\prog\lib\ libpq.lib fmt.lib User32.lib ws2_32.lib
#LIBS += -LC:/prog/boost/lib -Lc:/prog/lib libpq.lib fmt.lib User32.lib ws2_32.lib
LIBS += -LC:/MINGW/LIB -LC:/PROG/LIB -lws2_32 -lpq
debug {
LIBS += c:\prog\lib\botand_imp.lib
LIBS += c:/prog/lib/botand_imp.lib
}
release {
@ -139,7 +140,7 @@ FORMS += mainwindow.ui \
RESOURCES += \
resources.qrc
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.01
#QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.01
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../core/release/ -lcore
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../core/debug/ -lcore