25 #ifndef LSST_MWI_PERSISTENCE_DBSTORAGEIMPL_H
26 #define LSST_MWI_PERSISTENCE_DBSTORAGEIMPL_H
46 #include <boost/shared_array.hpp>
47 #include <mysql/mysql.h>
50 #include <unordered_map>
53 #include "lsst/daf/base/Citizen.h"
54 #include "lsst/daf/base/DateTime.h"
55 #include "lsst/pex/policy.h"
59 namespace persistence {
61 namespace dafBase = lsst::daf::base;
62 namespace pexPolicy = lsst::pex::policy;
64 class LogicalLocation;
89 virtual void setPolicy(pexPolicy::Policy::Ptr policy);
93 virtual void startTransaction(
void);
94 virtual void endTransaction(
void);
96 virtual void startSession(std::string
const& location);
98 virtual void createTableFromTemplate(std::string
const& tableName,
99 std::string
const& templateName,
100 bool mayAlreadyExist);
101 virtual void dropTable(std::string
const& tableName);
102 virtual void truncateTable(std::string
const& tableName);
104 virtual void executeSql(std::string
const& sqlStatement);
106 virtual void setTableForInsert(std::string
const& tableName);
107 template <
typename T>
108 void setColumn(std::string
const& columnName, T
const& value);
109 virtual void setColumnToNull(std::string
const& columnName);
110 virtual void insertRow(
void);
112 virtual void setTableForQuery(std::string
const& tableName,
bool isExpr);
113 virtual void setTableListForQuery(
114 std::vector<std::string>
const& tableNameList);
115 virtual void outColumn(std::string
const& columnName,
bool isExpr);
116 template <
typename T>
void outParam(std::string
const& columnName,
117 T* location,
bool isExpr);
118 template <
typename T>
void condParam(std::string
const& paramName,
120 virtual void orderBy(std::string
const& expression);
121 virtual void groupBy(std::string
const& expression);
122 virtual void setQueryWhere(std::string
const& whereClause);
123 virtual void query(
void);
124 virtual bool next(
void);
125 template <
typename T> T
const& getColumnByPos(
int pos);
126 bool columnIsNull(
int pos);
127 virtual void finishQuery(
void);
130 void executeQuery(std::string
const& query);
131 std::string quote(std::string
const& name);
132 void stError(std::string
const& text);
133 void error(std::string
const& text,
bool mysqlCaused =
true);
135 void* allocateMemory(
size_t size);
139 std::string _location;
144 std::string _insertTable;
146 std::vector<std::string> _queryTables;
150 typedef std::unordered_map<std::string, BoundVar> BoundVarMap;
151 BoundVarMap _inputVars;
153 BoundVarMap _outputVars;
155 std::vector< boost::shared_array<char> > _bindingMemory;
159 std::vector<std::string> _outColumns;
160 std::string _whereClause;
161 std::string _groupBy;
162 std::string _orderBy;
164 MYSQL_STMT* _statement;
166 MYSQL_FIELD* _resultFields;
168 int _numResultFields;
170 boost::shared_array<unsigned long> _fieldLengths;
172 boost::shared_array<my_bool> _fieldNulls;
177 void DbStorageImpl::setColumn<std::string>(std::string
const& columnName,
178 std::string
const& value);
180 void DbStorageImpl::setColumn<dafBase::DateTime>(std::string
const& columnName,
181 dafBase::DateTime
const& value);
184 void DbStorageImpl::outParam<std::string>(std::string
const& columnName,
185 std::string* location,
bool isExpr);
187 void DbStorageImpl::outParam<dafBase::DateTime>(std::string
const& columnName,
188 dafBase::DateTime* location,
192 std::string
const& DbStorageImpl::getColumnByPos<std::string>(
int pos);
194 dafBase::DateTime
const&
195 DbStorageImpl::getColumnByPos<dafBase::DateTime>(
int pos);
Class for logical location of a persisted Persistable instance.
Class for database storage.
BoundVar(void)
Default constructor.
virtual ~DbStorageImpl(void)
Destructor.
Class for implementation of database storage.