LCOV - code coverage report
Current view: top level - EnergyPlus - SQLiteProcedures.hh (source / functions) Hit Total Coverage
Test: lcov.output.filtered Lines: 110 128 85.9 %
Date: 2024-08-24 18:31:18 Functions: 18 21 85.7 %

          Line data    Source code
       1             : // EnergyPlus, Copyright (c) 1996-2024, The Board of Trustees of the University of Illinois,
       2             : // The Regents of the University of California, through Lawrence Berkeley National Laboratory
       3             : // (subject to receipt of any required approvals from the U.S. Dept. of Energy), Oak Ridge
       4             : // National Laboratory, managed by UT-Battelle, Alliance for Sustainable Energy, LLC, and other
       5             : // contributors. All rights reserved.
       6             : //
       7             : // NOTICE: This Software was developed under funding from the U.S. Department of Energy and the
       8             : // U.S. Government consequently retains certain rights. As such, the U.S. Government has been
       9             : // granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable,
      10             : // worldwide license in the Software to reproduce, distribute copies to the public, prepare
      11             : // derivative works, and perform publicly and display publicly, and to permit others to do so.
      12             : //
      13             : // Redistribution and use in source and binary forms, with or without modification, are permitted
      14             : // provided that the following conditions are met:
      15             : //
      16             : // (1) Redistributions of source code must retain the above copyright notice, this list of
      17             : //     conditions and the following disclaimer.
      18             : //
      19             : // (2) Redistributions in binary form must reproduce the above copyright notice, this list of
      20             : //     conditions and the following disclaimer in the documentation and/or other materials
      21             : //     provided with the distribution.
      22             : //
      23             : // (3) Neither the name of the University of California, Lawrence Berkeley National Laboratory,
      24             : //     the University of Illinois, U.S. Dept. of Energy nor the names of its contributors may be
      25             : //     used to endorse or promote products derived from this software without specific prior
      26             : //     written permission.
      27             : //
      28             : // (4) Use of EnergyPlus(TM) Name. If Licensee (i) distributes the software in stand-alone form
      29             : //     without changes from the version obtained under this License, or (ii) Licensee makes a
      30             : //     reference solely to the software portion of its product, Licensee must refer to the
      31             : //     software as "EnergyPlus version X" software, where "X" is the version number Licensee
      32             : //     obtained under this License and may not use a different name for the software. Except as
      33             : //     specifically required in this Section (4), Licensee shall not use in a company name, a
      34             : //     product name, in advertising, publicity, or other promotional activities any name, trade
      35             : //     name, trademark, logo, or other designation of "EnergyPlus", "E+", "e+" or confusingly
      36             : //     similar designation, without the U.S. Department of Energy's prior written consent.
      37             : //
      38             : // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
      39             : // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
      40             : // AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
      41             : // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
      42             : // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
      43             : // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
      44             : // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
      45             : // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
      46             : // POSSIBILITY OF SUCH DAMAGE.
      47             : 
      48             : #ifndef SQLiteProcedures_hh_INCLUDED
      49             : #define SQLiteProcedures_hh_INCLUDED
      50             : 
      51             : // C++ Headers
      52             : #include <fstream>
      53             : #include <iosfwd>
      54             : #include <map>
      55             : #include <memory>
      56             : #include <sqlite3.h>
      57             : 
      58             : // ObjexxFCL Headers
      59             : #include <ObjexxFCL/Array1D.hh>
      60             : #include <ObjexxFCL/Array2D.hh>
      61             : 
      62             : // EnergyPlus Headers
      63             : #include <EnergyPlus/Construction.hh>
      64             : #include <EnergyPlus/Data/BaseData.hh>
      65             : #include <EnergyPlus/DataHeatBalance.hh>
      66             : #include <EnergyPlus/DataRoomAirModel.hh>
      67             : #include <EnergyPlus/EnergyPlus.hh>
      68             : #include <EnergyPlus/FileSystem.hh>
      69             : #include <EnergyPlus/Material.hh>
      70             : #include <EnergyPlus/OutputProcessor.hh>
      71             : 
      72             : namespace EnergyPlus {
      73             : 
      74             : // Forward
      75             : struct EnergyPlusData;
      76             : 
      77             : class SQLiteProcedures
      78             : {
      79             : protected:
      80             :     SQLiteProcedures(std::shared_ptr<std::ostream> const &errorStream, std::shared_ptr<sqlite3> const &db);
      81             :     SQLiteProcedures(std::shared_ptr<std::ostream> const &errorStream,
      82             :                      bool writeOutputToSQLite,
      83             :                      fs::path const &dbName,
      84             :                      fs::path const &errorFilePath);
      85             : 
      86             :     int sqliteExecuteCommand(std::string_view commandBuffer);
      87             :     int sqlitePrepareStatement(sqlite3_stmt *&stmt, std::string_view stmtBuffer);
      88             : 
      89             :     int sqliteBindText(sqlite3_stmt *stmt, const int stmtInsertLocationIndex, std::string_view textBuffer);
      90             :     int sqliteBindInteger(sqlite3_stmt *stmt, const int stmtInsertLocationIndex, const int intToInsert);
      91             :     int sqliteBindDouble(sqlite3_stmt *stmt, const int stmtInsertLocationIndex, const double doubleToInsert);
      92             :     int sqliteBindNULL(sqlite3_stmt *stmt, const int stmtInsertLocationIndex);
      93             :     int sqliteBindLogical(sqlite3_stmt *stmt, const int stmtInsertLocationIndex, const bool valueToInsert);
      94             : 
      95             :     // This assumes a Foreign Key must be greater than 0 to be a valid Foreign Key, otherwise it sets the field to NULL.
      96             :     int sqliteBindForeignKey(sqlite3_stmt *stmt, const int stmtInsertLocationIndex, const int intToInsert);
      97             : 
      98             :     bool sqliteStepValidity(int const rc);
      99             :     int sqliteStepCommand(sqlite3_stmt *stmt);
     100             :     int sqliteResetCommand(sqlite3_stmt *stmt);
     101             :     bool sqliteWithinTransaction();
     102             :     // int sqliteClearBindings(sqlite3_stmt * stmt);
     103             :     // int sqliteFinalizeCommand(sqlite3_stmt * stmt);
     104             : 
     105             :     bool m_writeOutputToSQLite;
     106             :     std::shared_ptr<std::ostream> m_errorStream;
     107             :     std::shared_ptr<sqlite3> m_db;
     108             : };
     109             : 
     110             : class SQLite : SQLiteProcedures
     111             : {
     112             : public:
     113             :     // Friend SQLiteFixture which is the gtest fixture class for testing SQLite
     114             :     // This allows for testing of private methods in SQLite
     115             :     friend class SQLiteFixture;
     116             : 
     117             :     void addScheduleData(int const number, std::string_view name, std::string_view type, double const minValue, double const maxValue);
     118             :     void addZoneData(int const number, DataHeatBalance::ZoneData const &zoneData);
     119             :     void addZoneListData(int const number, DataHeatBalance::ZoneListData const &zoneListData);
     120             :     void addSurfaceData(int const number, DataSurfaces::SurfaceData const &surfaceData, std::string_view surfaceClass);
     121             :     void addZoneGroupData(int const number, DataHeatBalance::ZoneGroupData const &zoneGroupData);
     122             :     void addMaterialData(int const number, Material::MaterialBase const *materialData);
     123             :     void addConstructionData(int const number, Construction::ConstructionProps const &constructionData, double const &constructionUValue);
     124             :     void addNominalLightingData(int const number, DataHeatBalance::LightsData const &nominalLightingData);
     125             :     void addNominalPeopleData(int const number, DataHeatBalance::PeopleData const &nominalPeopleData);
     126             :     void addNominalElectricEquipmentData(int const number, DataHeatBalance::ZoneEquipData const &nominalElectricEquipmentData);
     127             :     void addNominalGasEquipmentData(int const number, DataHeatBalance::ZoneEquipData const &nominalGasEquipmentData);
     128             :     void addNominalSteamEquipmentData(int const number, DataHeatBalance::ZoneEquipData const &nominalSteamEquipmentData);
     129             :     void addNominalHotWaterEquipmentData(int const number, DataHeatBalance::ZoneEquipData const &nominalHotWaterEquipmentData);
     130             :     void addNominalOtherEquipmentData(int const number, DataHeatBalance::ZoneEquipData const &nominalOtherEquipmentData);
     131             :     void addNominalBaseboardData(int const number, DataHeatBalance::BBHeatData const &nominalBaseboardData);
     132             :     void addInfiltrationData(int const number, DataHeatBalance::InfiltrationData const &infiltrationData);
     133             :     void addVentilationData(int const number, DataHeatBalance::VentilationData const &ventilationData);
     134             :     void addRoomAirModelData(int const number, RoomAir::AirModelData const &roomAirModelData);
     135             : 
     136             :     // Open the DB and prepare for writing data
     137             :     // Create all of the tables on construction
     138             :     SQLite(std::shared_ptr<std::ostream> errorStream,
     139             :            fs::path const &dbName,
     140             :            fs::path const &errorFilePath,
     141             :            bool writeOutputToSQLite = false,
     142             :            bool writeTabularDataToSQLite = false);
     143             : 
     144             :     // Close database and free prepared statements
     145             :     virtual ~SQLite();
     146             : 
     147             :     bool writeOutputToSQLite() const;
     148             :     bool writeTabularDataToSQLite() const;
     149             : 
     150             :     // Begin a transaction
     151             :     void sqliteBegin();
     152             : 
     153             :     // Commit a transaction
     154             :     void sqliteCommit();
     155             : 
     156             :     // Rollback a transaction (cancel)
     157             :     void sqliteRollback();
     158             : 
     159             :     // Rollback to a named savepoint (nested transaction)
     160             :     void sqliteRollbackToSavepoint(std::string_view savepoint_name);
     161             : 
     162             :     // Release a named savepoint (nested transaction)
     163             :     void sqliteReleaseSavepoint(std::string_view savepoint_name);
     164             : 
     165             :     // create a named savepoint (nested transaction)
     166             :     void sqliteCreateSavepoint(std::string_view savepoint_name);
     167             : 
     168             :     // Within a current transaction
     169             :     bool sqliteWithinTransaction();
     170             : 
     171             :     void createSQLiteReportDictionaryRecord(int const reportVariableReportID,
     172             :                                             OutputProcessor::StoreType const storeType,
     173             :                                             std::string_view indexGroup,
     174             :                                             std::string_view keyedValueString,
     175             :                                             std::string_view const variableName,
     176             :                                             OutputProcessor::TimeStepType const timeStepType,
     177             :                                             std::string_view units,
     178             :                                             OutputProcessor::ReportFreq const reportFreq,
     179             :                                             bool isMeter,
     180             :                                             std::string_view const ScheduleName = {});
     181             : 
     182             :     void createSQLiteReportDataRecord(int const recordIndex,
     183             :                                       Real64 const value,
     184             :                                       OutputProcessor::ReportFreq const reportFreq = OutputProcessor::ReportFreq::Invalid,
     185             :                                       Real64 const minValue = 0.0,
     186             :                                       int const minValueDate = -1,
     187             :                                       Real64 const maxValue = 0.0,
     188             :                                       int const maxValueDate = -1,
     189             :                                       int const minutesPerTimeStep = -1);
     190             : 
     191             :     void createSQLiteTimeIndexRecord(OutputProcessor::ReportFreq const reportFreq,
     192             :                                      int const recordIndex,
     193             :                                      int const CumlativeSimulationDays,
     194             :                                      int const curEnvirNum,
     195             :                                      int const simulationYear,
     196             :                                      bool const curYearIsLeapYear,
     197             :                                      int const Month = -1,
     198             :                                      int const DayOfMonth = -1,
     199             :                                      int const Hour = -1,
     200             :                                      Real64 const EndMinute = -1.0,
     201             :                                      Real64 const StartMinute = -1.0,
     202             :                                      int const DST = -1,
     203             :                                      std::string_view const DayType = "",
     204             :                                      bool const warmupFlag = false);
     205             : 
     206             :     void createYearlyTimeIndexRecord(int const simulationYear, int const curEnvirNum);
     207             : 
     208             :     void addSQLiteZoneSizingRecord(std::string_view ZoneName,   // the name of the zone
     209             :                                    std::string_view LoadType,   // the description of the input variable
     210             :                                    Real64 const CalcDesLoad,    // the value from the sizing calculation [W]
     211             :                                    Real64 const UserDesLoad,    // the value from the sizing calculation modified by user input [W]
     212             :                                    Real64 const CalcDesFlow,    // calculated design air flow rate [m3/s]
     213             :                                    Real64 const UserDesFlow,    // user input or modified design air flow rate [m3/s]
     214             :                                    std::string_view DesDayName, // the name of the design day that produced the peak
     215             :                                    std::string_view PeakHrMin,  // time stamp of the peak
     216             :                                    Real64 const PeakTemp,       // temperature at peak [C]
     217             :                                    Real64 const PeakHumRat,     // humidity ratio at peak [kg water/kg dry air]
     218             :                                    Real64 const MinOAVolFlow,   // zone design minimum outside air flow rate [m3/s]
     219             :                                    Real64 const DOASHeatAddRate // zone design heat addition rate from the DOAS [W]
     220             :     );
     221             : 
     222             :     void addSQLiteSystemSizingRecord(std::string_view SysName,      // the name of the system
     223             :                                      std::string_view LoadType,     // either "Cooling" or "Heating"
     224             :                                      std::string_view PeakLoadType, // either "Sensible" or "Total"
     225             :                                      Real64 const UserDesCap,       // User  Design Capacity
     226             :                                      Real64 const CalcDesVolFlow,   // Calculated Cooling Design Air Flow Rate
     227             :                                      Real64 const UserDesVolFlow,   // User Cooling Design Air Flow Rate
     228             :                                      std::string_view DesDayName,   // the name of the design day that produced the peak
     229             :                                      std::string_view PeakHrMin     // time stamp of the peak
     230             :     );
     231             : 
     232             :     void addSQLiteComponentSizingRecord(std::string_view CompType, // the type of the component
     233             :                                         std::string_view CompName, // the name of the component
     234             :                                         std::string_view VarDesc,  // the description of the input variable
     235             :                                         Real64 const VarValue      // the value from the sizing calculation
     236             :     );
     237             : 
     238             :     void createSQLiteDaylightMapTitle(
     239             :         int const mapNum, std::string_view mapName, std::string_view environmentName, int const zone, std::string_view refPts, Real64 const zCoord);
     240             : 
     241             :     void createSQLiteDaylightMap(int const mapNum,
     242             :                                  int const year,
     243             :                                  int const month,
     244             :                                  int const dayOfMonth,
     245             :                                  int const hourOfDay,
     246             :                                  int const nX,
     247             :                                  Array1D<Real64> const &x,
     248             :                                  int const nY,
     249             :                                  Array1D<Real64> const &y,
     250             :                                  Array2<Real64> const &illuminance);
     251             : 
     252             :     void createSQLiteTabularDataRecords(Array2D_string const &body, // row,column
     253             :                                         Array1D_string const &rowLabels,
     254             :                                         Array1D_string const &columnLabels,
     255             :                                         std::string_view ReportName,
     256             :                                         std::string_view ReportForString,
     257             :                                         std::string_view TableName);
     258             : 
     259             :     void createSQLiteSimulationsRecord(int const ID, std::string_view verString, std::string_view currentDateTime);
     260             : 
     261             :     void createSQLiteErrorRecord(int const simulationIndex, int const errorType, std::string_view errorMessage, int const cnt);
     262             : 
     263             :     void updateSQLiteErrorRecord(std::string const &errorMessage);
     264             : 
     265             :     void updateSQLiteSimulationRecord(bool const completed, bool const completedSuccessfully, int const id = 1);
     266             : 
     267             :     void updateSQLiteSimulationRecord(int const id, int const numOfTimeStepInHour);
     268             : 
     269             :     void createSQLiteEnvironmentPeriodRecord(const int curEnvirNum,
     270             :                                              std::string_view environmentName,
     271             :                                              const Constant::KindOfSim kindOfSim,
     272             :                                              const int simulationIndex = 1);
     273             : 
     274             :     void sqliteWriteMessage(std::string_view message);
     275             : 
     276             :     void createZoneExtendedOutput();
     277             : 
     278             :     void initializeIndexes();
     279             : 
     280             : private:
     281             :     int createSQLiteStringTableRecord(std::string_view stringValue, int const stringType);
     282             : 
     283             :     static void adjustReportingHourAndMinutes(int &hour, int &minutes);
     284             :     // Given combinedString, parse out units and description.
     285             :     // Example: Given combinedString "Total Energy [GJ]", return "Total Energy"
     286             :     // in description and "GJ" in units.
     287             :     static void parseUnitsAndDescription(std::string_view combinedString, std::string &units, std::string &description);
     288             : 
     289             :     static int logicalToInteger(const bool value);
     290             : 
     291             :     void initializeReportDataDictionaryTable();
     292             :     void initializeReportDataTables();
     293             :     void initializeTimeIndicesTable();
     294             :     void initializeZoneInfoTable();
     295             :     void initializeZoneInfoZoneListTable();
     296             :     void initializeNominalPeopleTable();
     297             :     void initializeNominalLightingTable();
     298             :     void initializeNominalElectricEquipmentTable();
     299             :     void initializeNominalGasEquipmentTable();
     300             :     void initializeNominalSteamEquipmentTable();
     301             :     void initializeNominalHotWaterEquipmentTable();
     302             :     void initializeNominalOtherEquipmentTable();
     303             :     void initializeNominalBaseboardHeatTable();
     304             :     void initializeSurfacesTable();
     305             :     void initializeConstructionsTables();
     306             :     void initializeMaterialsTable();
     307             :     void initializeZoneListTable();
     308             :     void initializeZoneGroupTable();
     309             :     void initializeNominalInfiltrationTable();
     310             :     void initializeNominalVentilationTable();
     311             :     void initializeZoneSizingTable();
     312             :     void initializeSystemSizingTable();
     313             :     void initializeComponentSizingTable();
     314             :     void initializeRoomAirModelTable();
     315             :     void initializeSchedulesTable();
     316             :     void initializeDaylightMapTables();
     317             :     void initializeViews();
     318             :     void initializeSimulationsTable();
     319             :     void initializeEnvironmentPeriodsTable();
     320             :     void initializeErrorsTable();
     321             :     void initializeTabularDataTable();
     322             :     void initializeTabularDataView();
     323             : 
     324             :     bool m_writeTabularDataToSQLite;
     325             :     int m_sqlDBTimeIndex;
     326             : 
     327             :     int m_hourlyReportIndex = 0;
     328             :     int m_hourlyDataIndex = 0;
     329             :     int m_tabularDataIndex = 0;
     330             :     int m_stringIndex = 1;
     331             :     std::map<std::pair<std::string, int>, int> m_tabularStrings;
     332             :     int m_errorIndex = 0;
     333             :     int m_dataIndex = 0;
     334             :     int m_extendedDataIndex = 0;
     335             :     int m_zoneSizingIndex = 0;
     336             :     int m_systemSizingIndex = 0;
     337             :     int m_componentSizingIndex = 0;
     338             : 
     339             :     sqlite3_stmt *m_reportDataInsertStmt;
     340             :     sqlite3_stmt *m_reportExtendedDataInsertStmt;
     341             :     sqlite3_stmt *m_reportDictionaryInsertStmt;
     342             :     sqlite3_stmt *m_timeIndexInsertStmt;
     343             :     sqlite3_stmt *m_zoneInfoInsertStmt;
     344             :     sqlite3_stmt *m_zoneInfoZoneListInsertStmt;
     345             :     sqlite3_stmt *m_nominalLightingInsertStmt;
     346             :     sqlite3_stmt *m_nominalElectricEquipmentInsertStmt;
     347             :     sqlite3_stmt *m_nominalGasEquipmentInsertStmt;
     348             :     sqlite3_stmt *m_nominalSteamEquipmentInsertStmt;
     349             :     sqlite3_stmt *m_nominalHotWaterEquipmentInsertStmt;
     350             :     sqlite3_stmt *m_nominalOtherEquipmentInsertStmt;
     351             :     sqlite3_stmt *m_nominalBaseboardHeatInsertStmt;
     352             :     sqlite3_stmt *m_surfaceInsertStmt;
     353             :     sqlite3_stmt *m_constructionInsertStmt;
     354             :     sqlite3_stmt *m_constructionLayerInsertStmt;
     355             :     sqlite3_stmt *m_materialInsertStmt;
     356             :     sqlite3_stmt *m_zoneListInsertStmt;
     357             :     sqlite3_stmt *m_zoneGroupInsertStmt;
     358             :     sqlite3_stmt *m_infiltrationInsertStmt;
     359             :     sqlite3_stmt *m_ventilationInsertStmt;
     360             :     sqlite3_stmt *m_nominalPeopleInsertStmt;
     361             :     sqlite3_stmt *m_zoneSizingInsertStmt;
     362             :     sqlite3_stmt *m_systemSizingInsertStmt;
     363             :     sqlite3_stmt *m_componentSizingInsertStmt;
     364             :     sqlite3_stmt *m_roomAirModelInsertStmt;
     365             :     sqlite3_stmt *m_groundTemperatureInsertStmt;
     366             :     sqlite3_stmt *m_weatherFileInsertStmt;
     367             :     sqlite3_stmt *m_scheduleInsertStmt;
     368             :     sqlite3_stmt *m_daylightMapTitleInsertStmt;
     369             :     sqlite3_stmt *m_daylightMapHourlyTitleInsertStmt;
     370             :     sqlite3_stmt *m_daylightMapHourlyDataInsertStmt;
     371             :     sqlite3_stmt *m_environmentPeriodInsertStmt;
     372             :     sqlite3_stmt *m_simulationsInsertStmt;
     373             :     sqlite3_stmt *m_tabularDataInsertStmt;
     374             :     sqlite3_stmt *m_stringsInsertStmt;
     375             :     sqlite3_stmt *m_stringsLookUpStmt;
     376             :     sqlite3_stmt *m_errorInsertStmt;
     377             :     sqlite3_stmt *m_errorUpdateStmt;
     378             :     sqlite3_stmt *m_simulationUpdateStmt;
     379             :     sqlite3_stmt *m_simulationDataUpdateStmt;
     380             :     sqlite3_stmt *m_rollbackToSavepointStmt;
     381             :     sqlite3_stmt *m_createSavepointStmt;
     382             :     sqlite3_stmt *m_releaseSavepointStmt;
     383             : 
     384             :     static const int LocalReportEach;     //  Write out each time UpdatedataandLocalReport is called
     385             :     static const int LocalReportTimeStep; //  Write out at 'EndTimeStepFlag'
     386             :     static const int LocalReportHourly;   //  Write out at 'EndHourFlag'
     387             :     static const int LocalReportDaily;    //  Write out at 'EndDayFlag'
     388             :     static const int LocalReportMonthly;  //  Write out at end of month (must be determined)
     389             :     static const int LocalReportSim;      //  Write out once per environment 'EndEnvrnFlag'
     390             :     static const int LocalReportYearly;   //  Write out once per year
     391             :     static const int ReportNameId;
     392             :     static const int ReportForStringId;
     393             :     static const int TableNameId;
     394             :     static const int RowNameId;
     395             :     static const int ColumnNameId;
     396             :     static const int UnitsId;
     397             : 
     398             :     class SQLiteData : public SQLiteProcedures
     399             :     {
     400             :     protected:
     401             :         SQLiteData(std::shared_ptr<std::ostream> const &errorStream, std::shared_ptr<sqlite3> const &db);
     402             :         virtual bool insertIntoSQLite(sqlite3_stmt *insertStmt) = 0;
     403             :     };
     404             : 
     405             :     class Schedule : SQLiteData
     406             :     {
     407             :     public:
     408        3336 :         Schedule(std::shared_ptr<std::ostream> const &errorStream,
     409             :                  std::shared_ptr<sqlite3> const &db,
     410             :                  int const scheduleNumber,
     411             :                  std::string_view scheduleName,
     412             :                  std::string_view scheduleType,
     413             :                  double const scheduleMinValue,
     414             :                  double const scheduleMaxValue)
     415        3336 :             : SQLiteData(errorStream, db), number(scheduleNumber), name(scheduleName), type(scheduleType), minValue(scheduleMinValue),
     416        3336 :               maxValue(scheduleMaxValue)
     417             :         {
     418        3336 :         }
     419             : 
     420             :         virtual bool insertIntoSQLite(sqlite3_stmt *insertStmt) override;
     421             : 
     422             :     private:
     423             :         int const number;
     424             :         std::string const name;
     425             :         std::string const type;
     426             :         double const minValue;
     427             :         double const maxValue;
     428             :     };
     429             : 
     430             :     class Surface : SQLiteData
     431             :     {
     432             :     public:
     433       13621 :         Surface(std::shared_ptr<std::ostream> const &errorStream,
     434             :                 std::shared_ptr<sqlite3> const &db,
     435             :                 int const surfaceNumber,
     436             :                 DataSurfaces::SurfaceData const &surfaceData,
     437             :                 std::string_view surfaceClass)
     438       27242 :             : SQLiteData(errorStream, db), number(surfaceNumber), name(surfaceData.Name), construction(surfaceData.Construction),
     439       13621 :               surfaceClass(surfaceClass), area(surfaceData.Area), grossArea(surfaceData.GrossArea), perimeter(surfaceData.Perimeter),
     440       13621 :               azimuth(surfaceData.Azimuth), height(surfaceData.Height), reveal(surfaceData.Reveal), shape(surfaceData.Shape),
     441       13621 :               sides(surfaceData.Sides), tilt(surfaceData.Tilt), width(surfaceData.Width), heatTransSurf(surfaceData.HeatTransSurf),
     442       13621 :               baseSurf(surfaceData.BaseSurf), zone(surfaceData.Zone), extBoundCond(surfaceData.ExtBoundCond), extSolar(surfaceData.ExtSolar),
     443       13621 :               extWind(surfaceData.ExtWind)
     444             :         {
     445       13621 :         }
     446             : 
     447             :         virtual bool insertIntoSQLite(sqlite3_stmt *insertStmt) override;
     448             : 
     449             :     private:
     450             :         int const number;
     451             :         std::string const &name;
     452             :         int const &construction;
     453             :         std::string const surfaceClass;
     454             :         double const &area;
     455             :         double const &grossArea;
     456             :         double const &perimeter;
     457             :         double const &azimuth;
     458             :         double const &height;
     459             :         double const &reveal;
     460             :         DataSurfaces::SurfaceShape const &shape;
     461             :         int const &sides;
     462             :         double const &tilt;
     463             :         double const &width;
     464             :         bool const &heatTransSurf;
     465             :         int const &baseSurf;
     466             :         int const &zone;
     467             :         int const &extBoundCond;
     468             :         bool const &extSolar;
     469             :         bool const &extWind;
     470             :     };
     471             : 
     472             :     class Zone : SQLiteData
     473             :     {
     474             :     public:
     475        1506 :         Zone(std::shared_ptr<std::ostream> const &errorStream,
     476             :              std::shared_ptr<sqlite3> const &db,
     477             :              int const zoneNumber,
     478             :              DataHeatBalance::ZoneData const &zoneData)
     479        3012 :             : SQLiteData(errorStream, db), number(zoneNumber), name(zoneData.Name), relNorth(zoneData.RelNorth), originX(zoneData.OriginX),
     480        1506 :               originY(zoneData.OriginY), originZ(zoneData.OriginZ), centroidX(zoneData.Centroid.x), centroidY(zoneData.Centroid.y),
     481        1506 :               centroidZ(zoneData.Centroid.z), ofType(zoneData.OfType), multiplier(zoneData.Multiplier), listMultiplier(zoneData.ListMultiplier),
     482        1506 :               minimumX(zoneData.MinimumX), maximumX(zoneData.MaximumX), minimumY(zoneData.MinimumY), maximumY(zoneData.MaximumY),
     483        1506 :               minimumZ(zoneData.MinimumZ), maximumZ(zoneData.MaximumZ), ceilingHeight(zoneData.CeilingHeight), volume(zoneData.Volume),
     484        1506 :               insideConvectionAlgo(zoneData.IntConvAlgo), outsideConvectionAlgo(zoneData.ExtConvAlgo), floorArea(zoneData.FloorArea),
     485        1506 :               extGrossWallArea(zoneData.ExtGrossWallArea), extNetWallArea(zoneData.ExtNetWallArea), extWindowArea(zoneData.ExtWindowArea),
     486        1506 :               isPartOfTotalArea(zoneData.isPartOfTotalArea)
     487             :         {
     488        1506 :         }
     489             : 
     490             :         virtual bool insertIntoSQLite(sqlite3_stmt *insertStmt) override;
     491             : 
     492             :     private:
     493             :         int const number;
     494             :         std::string const &name;
     495             :         double const &relNorth;
     496             :         double const &originX;
     497             :         double const &originY;
     498             :         double const &originZ;
     499             :         double const &centroidX;
     500             :         double const &centroidY;
     501             :         double const &centroidZ;
     502             :         int const &ofType;
     503             :         int const &multiplier;
     504             :         int const &listMultiplier;
     505             :         double const &minimumX;
     506             :         double const &maximumX;
     507             :         double const &minimumY;
     508             :         double const &maximumY;
     509             :         double const &minimumZ;
     510             :         double const &maximumZ;
     511             :         double const &ceilingHeight;
     512             :         double const &volume;
     513             :         Convect::HcInt const &insideConvectionAlgo;
     514             :         Convect::HcExt const &outsideConvectionAlgo;
     515             :         double const &floorArea;
     516             :         double const &extGrossWallArea;
     517             :         double const &extNetWallArea;
     518             :         double const &extWindowArea;
     519             :         bool const &isPartOfTotalArea;
     520             :     };
     521             : 
     522             :     class ZoneList : SQLiteData
     523             :     {
     524             :     public:
     525          12 :         ZoneList(std::shared_ptr<std::ostream> const &errorStream,
     526             :                  std::shared_ptr<sqlite3> const &db,
     527             :                  int const zoneListNumber,
     528             :                  DataHeatBalance::ZoneListData const &zoneListData)
     529          12 :             : SQLiteData(errorStream, db), number(zoneListNumber), name(zoneListData.Name), zones(zoneListData.Zone)
     530             :         {
     531          12 :         }
     532             : 
     533             :         virtual bool insertIntoSQLite(sqlite3_stmt *insertStmt) override;
     534             :         virtual bool insertIntoSQLite(sqlite3_stmt *insertStmt, sqlite3_stmt *subInsertStmt);
     535             : 
     536             :     private:
     537             :         int const number;
     538             :         std::string const &name;
     539             :         Array1D_int const &zones;
     540             :     };
     541             : 
     542             :     class ZoneGroup : SQLiteData
     543             :     {
     544             :     public:
     545           3 :         ZoneGroup(std::shared_ptr<std::ostream> const &errorStream,
     546             :                   std::shared_ptr<sqlite3> const &db,
     547             :                   int const zoneGroupNumber,
     548             :                   DataHeatBalance::ZoneGroupData const &zoneGroupData)
     549           6 :             : SQLiteData(errorStream, db), number(zoneGroupNumber), name(zoneGroupData.Name), zoneList(zoneGroupData.ZoneList),
     550           3 :               multiplier(zoneGroupData.Multiplier)
     551             :         {
     552           3 :         }
     553             : 
     554             :         virtual bool insertIntoSQLite(sqlite3_stmt *insertStmt) override;
     555             : 
     556             :     private:
     557             :         int const number;
     558             :         std::string const &name;
     559             :         int const &zoneList;
     560             :         int const &multiplier;
     561             :     };
     562             : 
     563             :     class Material : SQLiteData
     564             :     {
     565             :     public:
     566        1892 :         Material(std::shared_ptr<std::ostream> const &errorStream,
     567             :                  std::shared_ptr<sqlite3> const &db,
     568             :                  int const materialNumber,
     569             :                  EnergyPlus::Material::MaterialBase const *materialData)
     570        3784 :             : SQLiteData(errorStream, db), number(materialNumber), name(materialData->Name), group(materialData->group),
     571        1892 :               roughness(materialData->Roughness), conductivity(materialData->Conductivity), density(materialData->Density),
     572        1892 :               isoMoistCap(materialData->IsoMoistCap), porosity(materialData->Porosity), resistance(materialData->Resistance),
     573        1892 :               rOnly(materialData->ROnly), specHeat(materialData->SpecHeat), thermGradCoef(materialData->ThermGradCoef),
     574        1892 :               thickness(materialData->Thickness), vaporDiffus(materialData->VaporDiffus)
     575             :         {
     576        1892 :         }
     577             : 
     578             :         virtual bool insertIntoSQLite(sqlite3_stmt *insertStmt) override;
     579             : 
     580             :     private:
     581             :         int const number;
     582             :         std::string const &name;
     583             :         EnergyPlus::Material::Group const &group;
     584             :         EnergyPlus::Material::SurfaceRoughness const &roughness;
     585             :         double const &conductivity;
     586             :         double const &density;
     587             :         double const &isoMoistCap;
     588             :         double const &porosity;
     589             :         double const &resistance;
     590             :         bool const &rOnly;
     591             :         double const &specHeat;
     592             :         double const &thermGradCoef;
     593             :         double const &thickness;
     594             :         double const &vaporDiffus;
     595             :     };
     596             : 
     597             :     class Construction : SQLiteData
     598             :     {
     599             :     public:
     600         898 :         Construction(std::shared_ptr<std::ostream> const &errorStream,
     601             :                      std::shared_ptr<sqlite3> const &db,
     602             :                      int const constructionNumber,
     603             :                      EnergyPlus::Construction::ConstructionProps const &constructionData,
     604             :                      double const &constructionUValue)
     605        1796 :             : SQLiteData(errorStream, db), number(constructionNumber), name(constructionData.Name), totLayers(constructionData.TotLayers),
     606         898 :               totSolidLayers(constructionData.TotSolidLayers), totGlassLayers(constructionData.TotGlassLayers),
     607         898 :               insideAbsorpVis(constructionData.InsideAbsorpVis), outsideAbsorpVis(constructionData.OutsideAbsorpVis),
     608         898 :               insideAbsorpSolar(constructionData.InsideAbsorpSolar), outsideAbsorpSolar(constructionData.OutsideAbsorpSolar),
     609         898 :               insideAbsorpThermal(constructionData.InsideAbsorpThermal), outsideAbsorpThermal(constructionData.OutsideAbsorpThermal),
     610         898 :               outsideRoughness(constructionData.OutsideRoughness), typeIsWindow(constructionData.TypeIsWindow), uValue(constructionUValue)
     611             :         {
     612        2833 :             for (int layerNum = 1; layerNum <= constructionData.TotLayers; ++layerNum) {
     613        1935 :                 constructionLayers.push_back(std::unique_ptr<Construction::ConstructionLayer>(
     614        1935 :                     new ConstructionLayer(m_errorStream, m_db, number, layerNum, constructionData.LayerPoint(layerNum))));
     615             :             }
     616         898 :         }
     617             : 
     618             :         // only inserts construction
     619             :         virtual bool insertIntoSQLite(sqlite3_stmt *insertStmt) override;
     620             :         // inserts construction and construction layers
     621             :         virtual bool insertIntoSQLite(sqlite3_stmt *insertStmt, sqlite3_stmt *subInsertStmt);
     622             : 
     623             :     private:
     624             :         int const number;
     625             :         std::string const &name;
     626             :         int const &totLayers;
     627             :         int const &totSolidLayers;
     628             :         int const &totGlassLayers;
     629             :         double const &insideAbsorpVis;
     630             :         double const &outsideAbsorpVis;
     631             :         double const &insideAbsorpSolar;
     632             :         double const &outsideAbsorpSolar;
     633             :         double const &insideAbsorpThermal;
     634             :         double const &outsideAbsorpThermal;
     635             :         EnergyPlus::Material::SurfaceRoughness const &outsideRoughness;
     636             :         bool const &typeIsWindow;
     637             :         double const &uValue;
     638             : 
     639             :         class ConstructionLayer : SQLiteData
     640             :         {
     641             :         public:
     642        1935 :             ConstructionLayer(std::shared_ptr<std::ostream> const &errorStream,
     643             :                               std::shared_ptr<sqlite3> const &db,
     644             :                               int const &constructNumber,
     645             :                               int const layerNumber,
     646             :                               int const &layerPoint)
     647        1935 :                 : SQLiteData(errorStream, db), constructNumber(constructNumber), layerNumber(layerNumber), layerPoint(layerPoint)
     648             :             {
     649        1935 :             }
     650             : 
     651             :             virtual bool insertIntoSQLite(sqlite3_stmt *insertStmt) override;
     652             : 
     653             :         private:
     654             :             int const &constructNumber;
     655             :             int const layerNumber;
     656             :             int const &layerPoint;
     657             :         };
     658             : 
     659             :         std::vector<std::unique_ptr<Construction::ConstructionLayer>> constructionLayers;
     660             :     };
     661             : 
     662             :     class NominalLighting : SQLiteData
     663             :     {
     664             :     public:
     665        1398 :         NominalLighting(std::shared_ptr<std::ostream> const &errorStream,
     666             :                         std::shared_ptr<sqlite3> const &db,
     667             :                         int const nominalLightingNumber,
     668             :                         DataHeatBalance::LightsData const &nominalLightingData)
     669        2796 :             : SQLiteData(errorStream, db), number(nominalLightingNumber), name(nominalLightingData.Name), zonePtr(nominalLightingData.ZonePtr),
     670        1398 :               schedulePtr(nominalLightingData.SchedPtr), designLevel(nominalLightingData.DesignLevel),
     671        1398 :               fractionReturnAir(nominalLightingData.FractionReturnAir), fractionRadiant(nominalLightingData.FractionRadiant),
     672        1398 :               fractionShortWave(nominalLightingData.FractionShortWave), fractionReplaceable(nominalLightingData.FractionReplaceable),
     673        1398 :               fractionConvected(nominalLightingData.FractionConvected), endUseSubcategory(nominalLightingData.EndUseSubcategory)
     674             :         {
     675        1398 :         }
     676             : 
     677             :         virtual bool insertIntoSQLite(sqlite3_stmt *insertStmt) override;
     678             : 
     679             :     private:
     680             :         int const number;
     681             :         std::string const &name;
     682             :         int const &zonePtr;
     683             :         int const &schedulePtr;
     684             :         double const &designLevel;
     685             :         double const &fractionReturnAir;
     686             :         double const &fractionRadiant;
     687             :         double const &fractionShortWave;
     688             :         double const &fractionReplaceable;
     689             :         double const &fractionConvected;
     690             :         std::string const &endUseSubcategory;
     691             :     };
     692             : 
     693             :     class NominalPeople : SQLiteData
     694             :     {
     695             :     public:
     696        1226 :         NominalPeople(std::shared_ptr<std::ostream> const &errorStream,
     697             :                       std::shared_ptr<sqlite3> const &db,
     698             :                       int const nominalPeopleNumber,
     699             :                       DataHeatBalance::PeopleData const &nominalPeopleData)
     700        2452 :             : SQLiteData(errorStream, db), number(nominalPeopleNumber), name(nominalPeopleData.Name), zonePtr(nominalPeopleData.ZonePtr),
     701        1226 :               numberOfPeople(nominalPeopleData.NumberOfPeople), numberOfPeoplePtr(nominalPeopleData.NumberOfPeoplePtr),
     702        1226 :               activityLevelPtr(nominalPeopleData.ActivityLevelPtr), fractionRadiant(nominalPeopleData.FractionRadiant),
     703        1226 :               fractionConvected(nominalPeopleData.FractionConvected), workEffPtr(nominalPeopleData.WorkEffPtr),
     704        1226 :               clothingPtr(nominalPeopleData.ClothingPtr), airVelocityPtr(nominalPeopleData.AirVelocityPtr), fanger(nominalPeopleData.Fanger),
     705        1226 :               pierce(nominalPeopleData.Pierce), ksu(nominalPeopleData.KSU), mrtCalcType(nominalPeopleData.MRTCalcType),
     706        1226 :               surfacePtr(nominalPeopleData.SurfacePtr), angleFactorListName(nominalPeopleData.AngleFactorListName),
     707        1226 :               angleFactorListPtr(nominalPeopleData.AngleFactorListPtr), userSpecSensFrac(nominalPeopleData.UserSpecSensFrac),
     708        1226 :               show55Warning(nominalPeopleData.Show55Warning)
     709             :         {
     710        1226 :         }
     711             : 
     712             :         virtual bool insertIntoSQLite(sqlite3_stmt *insertStmt) override;
     713             : 
     714             :     private:
     715             :         int const number;
     716             :         std::string const &name;
     717             :         int const &zonePtr;
     718             :         double const &numberOfPeople;
     719             :         int const &numberOfPeoplePtr;
     720             :         int const &activityLevelPtr;
     721             :         double const &fractionRadiant;
     722             :         double const &fractionConvected;
     723             :         int const &workEffPtr;
     724             :         int const &clothingPtr;
     725             :         int const &airVelocityPtr;
     726             :         bool const &fanger;
     727             :         bool const &pierce;
     728             :         bool const &ksu;
     729             :         DataHeatBalance::CalcMRT const &mrtCalcType;
     730             :         int const &surfacePtr;
     731             :         std::string const &angleFactorListName;
     732             :         int const &angleFactorListPtr;
     733             :         double const &userSpecSensFrac;
     734             :         bool const &show55Warning;
     735             :     };
     736             : 
     737             :     class NominalElectricEquipment : SQLiteData
     738             :     {
     739             :     public:
     740        1344 :         NominalElectricEquipment(std::shared_ptr<std::ostream> const &errorStream,
     741             :                                  std::shared_ptr<sqlite3> const &db,
     742             :                                  int const nominalElectricEquipmentNumber,
     743             :                                  DataHeatBalance::ZoneEquipData const &nominalElectricEquipmentData)
     744        2688 :             : SQLiteData(errorStream, db), number(nominalElectricEquipmentNumber), name(nominalElectricEquipmentData.Name),
     745        1344 :               zonePtr(nominalElectricEquipmentData.ZonePtr), schedulePtr(nominalElectricEquipmentData.SchedPtr),
     746        1344 :               designLevel(nominalElectricEquipmentData.DesignLevel), fractionLatent(nominalElectricEquipmentData.FractionLatent),
     747        1344 :               fractionRadiant(nominalElectricEquipmentData.FractionRadiant), fractionLost(nominalElectricEquipmentData.FractionLost),
     748        1344 :               fractionConvected(nominalElectricEquipmentData.FractionConvected), endUseSubcategory(nominalElectricEquipmentData.EndUseSubcategory)
     749             :         {
     750        1344 :         }
     751             : 
     752             :         virtual bool insertIntoSQLite(sqlite3_stmt *insertStmt) override;
     753             : 
     754             :     private:
     755             :         int const number;
     756             :         std::string const &name;
     757             :         int const &zonePtr;
     758             :         int const &schedulePtr;
     759             :         double const &designLevel;
     760             :         double const &fractionLatent;
     761             :         double const &fractionRadiant;
     762             :         double const &fractionLost;
     763             :         double const &fractionConvected;
     764             :         std::string const &endUseSubcategory;
     765             :     };
     766             : 
     767             :     class NominalGasEquipment : SQLiteData
     768             :     {
     769             :     public:
     770          31 :         NominalGasEquipment(std::shared_ptr<std::ostream> const &errorStream,
     771             :                             std::shared_ptr<sqlite3> const &db,
     772             :                             int const nominalGasEquipmentNumber,
     773             :                             DataHeatBalance::ZoneEquipData const &nominalGasEquipmentData)
     774          62 :             : SQLiteData(errorStream, db), number(nominalGasEquipmentNumber), name(nominalGasEquipmentData.Name),
     775          31 :               zonePtr(nominalGasEquipmentData.ZonePtr), schedulePtr(nominalGasEquipmentData.SchedPtr),
     776          31 :               designLevel(nominalGasEquipmentData.DesignLevel), fractionLatent(nominalGasEquipmentData.FractionLatent),
     777          31 :               fractionRadiant(nominalGasEquipmentData.FractionRadiant), fractionLost(nominalGasEquipmentData.FractionLost),
     778          31 :               fractionConvected(nominalGasEquipmentData.FractionConvected), endUseSubcategory(nominalGasEquipmentData.EndUseSubcategory)
     779             :         {
     780          31 :         }
     781             : 
     782             :         virtual bool insertIntoSQLite(sqlite3_stmt *insertStmt) override;
     783             : 
     784             :     private:
     785             :         int const number;
     786             :         std::string const &name;
     787             :         int const &zonePtr;
     788             :         int const &schedulePtr;
     789             :         double const &designLevel;
     790             :         double const &fractionLatent;
     791             :         double const &fractionRadiant;
     792             :         double const &fractionLost;
     793             :         double const &fractionConvected;
     794             :         std::string const &endUseSubcategory;
     795             :     };
     796             : 
     797             :     class NominalSteamEquipment : SQLiteData
     798             :     {
     799             :     public:
     800           0 :         NominalSteamEquipment(std::shared_ptr<std::ostream> const &errorStream,
     801             :                               std::shared_ptr<sqlite3> const &db,
     802             :                               int const nominalSteamEquipmentNumber,
     803             :                               DataHeatBalance::ZoneEquipData const &nominalSteamEquipmentData)
     804           0 :             : SQLiteData(errorStream, db), number(nominalSteamEquipmentNumber), name(nominalSteamEquipmentData.Name),
     805           0 :               zonePtr(nominalSteamEquipmentData.ZonePtr), schedulePtr(nominalSteamEquipmentData.SchedPtr),
     806           0 :               designLevel(nominalSteamEquipmentData.DesignLevel), fractionLatent(nominalSteamEquipmentData.FractionLatent),
     807           0 :               fractionRadiant(nominalSteamEquipmentData.FractionRadiant), fractionLost(nominalSteamEquipmentData.FractionLost),
     808           0 :               fractionConvected(nominalSteamEquipmentData.FractionConvected), endUseSubcategory(nominalSteamEquipmentData.EndUseSubcategory)
     809             :         {
     810           0 :         }
     811             : 
     812             :         virtual bool insertIntoSQLite(sqlite3_stmt *insertStmt) override;
     813             : 
     814             :     private:
     815             :         int const number;
     816             :         std::string const &name;
     817             :         int const &zonePtr;
     818             :         int const &schedulePtr;
     819             :         double const &designLevel;
     820             :         double const &fractionLatent;
     821             :         double const &fractionRadiant;
     822             :         double const &fractionLost;
     823             :         double const &fractionConvected;
     824             :         std::string const &endUseSubcategory;
     825             :     };
     826             : 
     827             :     class NominalHotWaterEquipment : SQLiteData
     828             :     {
     829             :     public:
     830           9 :         NominalHotWaterEquipment(std::shared_ptr<std::ostream> const &errorStream,
     831             :                                  std::shared_ptr<sqlite3> const &db,
     832             :                                  int const nominalHotWaterEquipmentNumber,
     833             :                                  DataHeatBalance::ZoneEquipData const &nominalHotWaterEquipmentData)
     834          18 :             : SQLiteData(errorStream, db), number(nominalHotWaterEquipmentNumber), name(nominalHotWaterEquipmentData.Name),
     835           9 :               zonePtr(nominalHotWaterEquipmentData.ZonePtr), schedulePtr(nominalHotWaterEquipmentData.SchedPtr),
     836           9 :               designLevel(nominalHotWaterEquipmentData.DesignLevel), fractionLatent(nominalHotWaterEquipmentData.FractionLatent),
     837           9 :               fractionRadiant(nominalHotWaterEquipmentData.FractionRadiant), fractionLost(nominalHotWaterEquipmentData.FractionLost),
     838           9 :               fractionConvected(nominalHotWaterEquipmentData.FractionConvected), endUseSubcategory(nominalHotWaterEquipmentData.EndUseSubcategory)
     839             :         {
     840           9 :         }
     841             : 
     842             :         virtual bool insertIntoSQLite(sqlite3_stmt *insertStmt) override;
     843             : 
     844             :     private:
     845             :         int const number;
     846             :         std::string const &name;
     847             :         int const &zonePtr;
     848             :         int const &schedulePtr;
     849             :         double const &designLevel;
     850             :         double const &fractionLatent;
     851             :         double const &fractionRadiant;
     852             :         double const &fractionLost;
     853             :         double const &fractionConvected;
     854             :         std::string const &endUseSubcategory;
     855             :     };
     856             : 
     857             :     class NominalOtherEquipment : SQLiteData
     858             :     {
     859             :     public:
     860          19 :         NominalOtherEquipment(std::shared_ptr<std::ostream> const &errorStream,
     861             :                               std::shared_ptr<sqlite3> const &db,
     862             :                               int const nominalOtherEquipmentNumber,
     863             :                               DataHeatBalance::ZoneEquipData const &nominalOtherEquipmentData)
     864          38 :             : SQLiteData(errorStream, db), number(nominalOtherEquipmentNumber), name(nominalOtherEquipmentData.Name),
     865          19 :               zonePtr(nominalOtherEquipmentData.ZonePtr), schedulePtr(nominalOtherEquipmentData.SchedPtr),
     866          19 :               designLevel(nominalOtherEquipmentData.DesignLevel), fractionLatent(nominalOtherEquipmentData.FractionLatent),
     867          19 :               fractionRadiant(nominalOtherEquipmentData.FractionRadiant), fractionLost(nominalOtherEquipmentData.FractionLost),
     868          19 :               fractionConvected(nominalOtherEquipmentData.FractionConvected), endUseSubcategory(nominalOtherEquipmentData.EndUseSubcategory)
     869             :         {
     870          19 :         }
     871             : 
     872             :         virtual bool insertIntoSQLite(sqlite3_stmt *insertStmt) override;
     873             : 
     874             :     private:
     875             :         int const number;
     876             :         std::string const &name;
     877             :         int const &zonePtr;
     878             :         int const &schedulePtr;
     879             :         double const &designLevel;
     880             :         double const &fractionLatent;
     881             :         double const &fractionRadiant;
     882             :         double const &fractionLost;
     883             :         double const &fractionConvected;
     884             :         std::string const &endUseSubcategory;
     885             :     };
     886             : 
     887             :     class NominalBaseboardHeat : SQLiteData
     888             :     {
     889             :     public:
     890           0 :         NominalBaseboardHeat(std::shared_ptr<std::ostream> const &errorStream,
     891             :                              std::shared_ptr<sqlite3> const &db,
     892             :                              int const nominalBaseboardHeatNumber,
     893             :                              DataHeatBalance::BBHeatData const &nominalBaseboardHeatData)
     894           0 :             : SQLiteData(errorStream, db), number(nominalBaseboardHeatNumber), name(nominalBaseboardHeatData.Name),
     895           0 :               zonePtr(nominalBaseboardHeatData.ZonePtr), schedPtr(nominalBaseboardHeatData.SchedPtr),
     896           0 :               capatLowTemperature(nominalBaseboardHeatData.CapatLowTemperature), lowTemperature(nominalBaseboardHeatData.LowTemperature),
     897           0 :               capatHighTemperature(nominalBaseboardHeatData.CapatHighTemperature), highTemperature(nominalBaseboardHeatData.HighTemperature),
     898           0 :               fractionRadiant(nominalBaseboardHeatData.FractionRadiant), fractionConvected(nominalBaseboardHeatData.FractionConvected),
     899           0 :               endUseSubcategory(nominalBaseboardHeatData.EndUseSubcategory)
     900             :         {
     901           0 :         }
     902             : 
     903             :         virtual bool insertIntoSQLite(sqlite3_stmt *insertStmt) override;
     904             : 
     905             :     private:
     906             :         int const number;
     907             :         std::string const &name;
     908             :         int const &zonePtr;
     909             :         int const &schedPtr;
     910             :         double const &capatLowTemperature;
     911             :         double const &lowTemperature;
     912             :         double const &capatHighTemperature;
     913             :         double const &highTemperature;
     914             :         double const &fractionRadiant;
     915             :         double const &fractionConvected;
     916             :         std::string const &endUseSubcategory;
     917             :     };
     918             : 
     919             :     class Infiltration : SQLiteData
     920             :     {
     921             :     public:
     922        1175 :         Infiltration(std::shared_ptr<std::ostream> const &errorStream,
     923             :                      std::shared_ptr<sqlite3> const &db,
     924             :                      int const infiltrationNumber,
     925             :                      DataHeatBalance::InfiltrationData const &infiltrationData)
     926        2350 :             : SQLiteData(errorStream, db), number(infiltrationNumber), name(infiltrationData.Name), zonePtr(infiltrationData.ZonePtr),
     927        1175 :               schedPtr(infiltrationData.SchedPtr), designLevel(infiltrationData.DesignLevel)
     928             :         {
     929        1175 :         }
     930             : 
     931             :         virtual bool insertIntoSQLite(sqlite3_stmt *insertStmt) override;
     932             : 
     933             :     private:
     934             :         int const number;
     935             :         std::string const &name;
     936             :         int const &zonePtr;
     937             :         int const &schedPtr;
     938             :         double const &designLevel;
     939             :     };
     940             : 
     941             :     class Ventilation : SQLiteData
     942             :     {
     943             :     public:
     944           8 :         Ventilation(std::shared_ptr<std::ostream> const &errorStream,
     945             :                     std::shared_ptr<sqlite3> const &db,
     946             :                     int const ventilationNumber,
     947             :                     DataHeatBalance::VentilationData const &ventilationData)
     948          16 :             : SQLiteData(errorStream, db), number(ventilationNumber), name(ventilationData.Name), zonePtr(ventilationData.ZonePtr),
     949           8 :               schedPtr(ventilationData.SchedPtr), designLevel(ventilationData.DesignLevel)
     950             :         {
     951           8 :         }
     952             : 
     953             :         virtual bool insertIntoSQLite(sqlite3_stmt *insertStmt) override;
     954             : 
     955             :     private:
     956             :         int const number;
     957             :         std::string const &name;
     958             :         int const &zonePtr;
     959             :         int const &schedPtr;
     960             :         double const &designLevel;
     961             :     };
     962             : 
     963             :     class RoomAirModel : SQLiteData
     964             :     {
     965             :     public:
     966        1506 :         RoomAirModel(std::shared_ptr<std::ostream> const &errorStream,
     967             :                      std::shared_ptr<sqlite3> const &db,
     968             :                      int const roomAirModelNumber,
     969             :                      RoomAir::AirModelData const &roomAirModelData)
     970        3012 :             : SQLiteData(errorStream, db), number(roomAirModelNumber), airModelName(roomAirModelData.Name), airModel(roomAirModelData.AirModel),
     971        1506 :               tempCoupleScheme(roomAirModelData.TempCoupleScheme), simAirModel(roomAirModelData.SimAirModel)
     972             :         {
     973        1506 :         }
     974             : 
     975             :         virtual bool insertIntoSQLite(sqlite3_stmt *insertStmt) override;
     976             : 
     977             :     private:
     978             :         int const number;
     979             :         std::string const &airModelName;
     980             :         RoomAir::RoomAirModel const &airModel;
     981             :         RoomAir::CouplingScheme const &tempCoupleScheme;
     982             :         bool const &simAirModel;
     983             :     };
     984             : 
     985             :     std::vector<std::unique_ptr<SQLite::Zone>> zones;
     986             :     std::vector<std::unique_ptr<SQLite::ZoneList>> zoneLists;
     987             :     std::vector<std::unique_ptr<SQLite::ZoneGroup>> zoneGroups;
     988             :     std::vector<std::unique_ptr<SQLite::Schedule>> schedules;
     989             :     std::vector<std::unique_ptr<SQLite::Surface>> surfaces;
     990             :     std::vector<std::unique_ptr<SQLite::Material>> materials;
     991             :     std::vector<std::unique_ptr<SQLite::Construction>> constructions;
     992             :     std::vector<std::unique_ptr<SQLite::NominalLighting>> nominalLightings;
     993             :     std::vector<std::unique_ptr<SQLite::NominalPeople>> nominalPeoples;
     994             :     std::vector<std::unique_ptr<SQLite::NominalElectricEquipment>> nominalElectricEquipments;
     995             :     std::vector<std::unique_ptr<SQLite::NominalGasEquipment>> nominalGasEquipments;
     996             :     std::vector<std::unique_ptr<SQLite::NominalSteamEquipment>> nominalSteamEquipments;
     997             :     std::vector<std::unique_ptr<SQLite::NominalHotWaterEquipment>> nominalHotWaterEquipments;
     998             :     std::vector<std::unique_ptr<SQLite::NominalOtherEquipment>> nominalOtherEquipments;
     999             :     std::vector<std::unique_ptr<SQLite::NominalBaseboardHeat>> nominalBaseboardHeats;
    1000             :     std::vector<std::unique_ptr<SQLite::Infiltration>> infiltrations;
    1001             :     std::vector<std::unique_ptr<SQLite::Ventilation>> ventilations;
    1002             :     std::vector<std::unique_ptr<SQLite::RoomAirModel>> roomAirModels;
    1003             : };
    1004             : 
    1005             : bool ParseSQLiteInput(EnergyPlusData &state, bool &writeOutputToSQLite, bool &writeTabularDataToSQLite);
    1006             : 
    1007             : std::unique_ptr<SQLite> CreateSQLiteDatabase(EnergyPlusData &state);
    1008             : 
    1009             : void CreateSQLiteZoneExtendedOutput(EnergyPlusData &state);
    1010             : 
    1011             : struct SQLiteProceduresData : BaseGlobalStruct
    1012             : {
    1013             :     std::unique_ptr<SQLite> sqlite;
    1014         796 :     void init_state([[maybe_unused]] EnergyPlusData &state) override
    1015             :     {
    1016         796 :     }
    1017             : 
    1018           0 :     void clear_state() override
    1019             :     {
    1020           0 :         sqlite.reset(); // probably not necessary, as it is recreated in ManageSimulation, but it should be fine to delete it here
    1021           0 :     }
    1022             : };
    1023             : 
    1024             : } // namespace EnergyPlus
    1025             : 
    1026             : #endif

Generated by: LCOV version 1.14