#ifndef SQLQUERYEXECUTOR_H
#define SQLQUERYEXECUTOR_H

#include <QObject>
#include <QSqlQuery>
#include <QMap>
#include "global.h"

class SqlQueryExecutor : public QObject
{
    Q_OBJECT

public:
    static SqlQueryExecutor& instance();
    //基础SQL语句执行接口
    QSqlQuery executeSQL(const QString& strConnectionName, const QString& strSQL, const QVariantHash& params = {});
    //基于具体业务的查询接口-对外调用
    const QVector<Model> getModels(const QString&);
    const QVector<AttributeGroup> getAttributeGroup(const QString&);
    const QString getArributeGropuName(const QString&, int);
    bool addModel(const QString&, Model&);
    bool modelNameExistsInDB(const QString&, const QString&);
    bool modelTypeExistsInDB(const QString&, const QString&);

signals:
    void errorOccurred(const QString& error);

private:
    explicit SqlQueryExecutor();
    ~SqlQueryExecutor();
    // 禁止拷贝
    SqlQueryExecutor(const SqlQueryExecutor&) = delete; //delete关键字表示该函数不可用，包括编译器自动生成的函数
    SqlQueryExecutor& operator=(const SqlQueryExecutor&) = delete;
    //基于具体业务的查询接口-内部调用
    QVector<int> getModelGroups(const QString&, int);
};

#endif //SQLQUERYEXECUTOR_H
