Commit 94ff8e83 authored by Davis King's avatar Davis King

Just removed the sqlite namespace and unindended everything.

parent 8d1cf196
This diff is collapsed.
This diff is collapsed.
...@@ -11,181 +11,178 @@ ...@@ -11,181 +11,178 @@
namespace dlib namespace dlib
{ {
namespace sqlite
{
class transaction : noncopyable class transaction : noncopyable
{
public:
transaction (
database& db_
) :
db(db_),
committed(false)
{ {
public: db.exec("begin transaction");
transaction ( }
database& db_
) :
db(db_),
committed(false)
{
db.exec("begin transaction");
}
void commit () void commit ()
{
if (!committed)
{ {
if (!committed) committed = true;
{ db.exec("commit");
committed = true;
db.exec("commit");
}
} }
}
~transaction() ~transaction()
{ {
if (!committed) if (!committed)
db.exec("rollback"); db.exec("rollback");
} }
private: private:
database& db; database& db;
bool committed; bool committed;
}; };
// ------------------------------------------------------------------------------------ // ----------------------------------------------------------------------------------------
template < template <
typename T typename T
> >
void query_object ( void query_object (
database& db, database& db,
const std::string& query, const std::string& query,
T& item T& item
) )
{
statement st(db, query);
st.exec();
if (st.move_next() && st.get_num_columns() == 1)
{ {
statement st(db, query); st.get_column_as_object(0,item);
st.exec(); if (st.move_next())
if (st.move_next() && st.get_num_columns() == 1)
{
st.get_column_as_object(0,item);
if (st.move_next())
throw sqlite_error("query doesn't result in exactly 1 element");
}
else
{
throw sqlite_error("query doesn't result in exactly 1 element"); throw sqlite_error("query doesn't result in exactly 1 element");
}
} }
else
{
throw sqlite_error("query doesn't result in exactly 1 element");
}
}
// ------------------------------------------------------------------------------------ // ----------------------------------------------------------------------------------------
inline std::string query_text ( inline std::string query_text (
database& db, database& db,
const std::string& query const std::string& query
) )
{
statement st(db, query);
st.exec();
if (st.move_next() && st.get_num_columns() == 1)
{ {
statement st(db, query); const std::string& temp = st.get_column_as_text(0);
st.exec(); if (st.move_next())
if (st.move_next() && st.get_num_columns() == 1)
{
const std::string& temp = st.get_column_as_text(0);
if (st.move_next())
throw sqlite_error("query doesn't result in exactly 1 element");
return temp;
}
else
{
throw sqlite_error("query doesn't result in exactly 1 element"); throw sqlite_error("query doesn't result in exactly 1 element");
} return temp;
} }
else
{
throw sqlite_error("query doesn't result in exactly 1 element");
}
}
// ------------------------------------------------------------------------------------ // ----------------------------------------------------------------------------------------
inline double query_double ( inline double query_double (
database& db, database& db,
const std::string& query const std::string& query
) )
{
statement st(db, query);
st.exec();
if (st.move_next() && st.get_num_columns() == 1)
{ {
statement st(db, query); double temp = st.get_column_as_double(0);
st.exec(); if (st.move_next())
if (st.move_next() && st.get_num_columns() == 1)
{
double temp = st.get_column_as_double(0);
if (st.move_next())
throw sqlite_error("query doesn't result in exactly 1 element");
return temp;
}
else
{
throw sqlite_error("query doesn't result in exactly 1 element"); throw sqlite_error("query doesn't result in exactly 1 element");
} return temp;
}
else
{
throw sqlite_error("query doesn't result in exactly 1 element");
} }
}
// ------------------------------------------------------------------------------------ // ----------------------------------------------------------------------------------------
inline int query_int ( inline int query_int (
database& db, database& db,
const std::string& query const std::string& query
) )
{
statement st(db, query);
st.exec();
if (st.move_next() && st.get_num_columns() == 1)
{ {
statement st(db, query); int temp = st.get_column_as_int(0);
st.exec(); if (st.move_next())
if (st.move_next() && st.get_num_columns() == 1)
{
int temp = st.get_column_as_int(0);
if (st.move_next())
throw sqlite_error("query doesn't result in exactly 1 element");
return temp;
}
else
{
throw sqlite_error("query doesn't result in exactly 1 element"); throw sqlite_error("query doesn't result in exactly 1 element");
} return temp;
}
else
{
throw sqlite_error("query doesn't result in exactly 1 element");
} }
}
// ------------------------------------------------------------------------------------ // ----------------------------------------------------------------------------------------
inline int64 query_int64 ( inline int64 query_int64 (
database& db, database& db,
const std::string& query const std::string& query
) )
{
statement st(db, query);
st.exec();
if (st.move_next() && st.get_num_columns() == 1)
{ {
statement st(db, query); int64 temp = st.get_column_as_int64(0);
st.exec(); if (st.move_next())
if (st.move_next() && st.get_num_columns() == 1)
{
int64 temp = st.get_column_as_int64(0);
if (st.move_next())
throw sqlite_error("query doesn't result in exactly 1 element");
return temp;
}
else
{
throw sqlite_error("query doesn't result in exactly 1 element"); throw sqlite_error("query doesn't result in exactly 1 element");
} return temp;
}
else
{
throw sqlite_error("query doesn't result in exactly 1 element");
} }
}
// ------------------------------------------------------------------------------------ // ----------------------------------------------------------------------------------------
inline const std::vector<char> query_blob ( inline const std::vector<char> query_blob (
database& db, database& db,
const std::string& query const std::string& query
) )
{
statement st(db, query);
st.exec();
if (st.move_next() && st.get_num_columns() == 1)
{ {
statement st(db, query); const std::vector<char>& temp = st.get_column_as_blob(0);
st.exec(); if (st.move_next())
if (st.move_next() && st.get_num_columns() == 1)
{
const std::vector<char>& temp = st.get_column_as_blob(0);
if (st.move_next())
throw sqlite_error("query doesn't result in exactly 1 element");
return temp;
}
else
{
throw sqlite_error("query doesn't result in exactly 1 element"); throw sqlite_error("query doesn't result in exactly 1 element");
} return temp;
}
else
{
throw sqlite_error("query doesn't result in exactly 1 element");
} }
}
// ------------------------------------------------------------------------------------ // ----------------------------------------------------------------------------------------
}
} }
#endif // DLIB_SQLiTE_TOOLS_H_ #endif // DLIB_SQLiTE_TOOLS_H_
......
...@@ -10,156 +10,153 @@ ...@@ -10,156 +10,153 @@
namespace dlib namespace dlib
{ {
namespace sqlite
{
class transaction : noncopyable class transaction : noncopyable
{ {
/*!
WHAT THIS OBJECT REPRESENTS
This object is a tool for creating exception safe
database transactions.
!*/
public:
transaction (
database& db
);
/*!
ensures
- Begins a database transaction which will be rolled back
if commit() isn't called eventually.
- In particular, performs: db.exec("begin transaction");
!*/
void commit (
);
/*!
ensures
- if (commit() hasn't already been called) then
- Commits all changes made during this database transaction.
- In particular, performs: db.exec("commit");
- else
- does nothing
!*/
~transaction(
);
/*!
ensures
- if (commit() was never called) then
- rolls back any changes made to the database during this transaction.
- In particular, performs: db.exec("rollback");
- else
- does nothing
!*/
};
// ------------------------------------------------------------------------------------
template <
typename T
>
void query_object (
database& db,
const std::string& query,
T& item
);
/*! /*!
ensures WHAT THIS OBJECT REPRESENTS
- executes the given SQL query against db. If the query results in a This object is a tool for creating exception safe
single row and column being returned then the data in the column is database transactions.
interpreted as a binary BLOB and deserialized into item.
throws
- sqlite_error or serialization_error if an error occurs which prevents
this operation from succeeding.
!*/ !*/
// ------------------------------------------------------------------------------------ public:
transaction (
std::string query_text ( database& db
database& db,
const std::string& query
); );
/*! /*!
ensures ensures
- executes the given SQL query against db. If the query results in a - Begins a database transaction which will be rolled back
single row and column being returned then the data in the column is if commit() isn't called eventually.
converted to text and returned. - In particular, performs: db.exec("begin transaction");
throws
- sqlite_error if an error occurs which prevents this operation from
succeeding.
!*/ !*/
// ------------------------------------------------------------------------------------ void commit (
double query_double (
database& db,
const std::string& query
); );
/*! /*!
ensures ensures
- executes the given SQL query against db. If the query results in a - if (commit() hasn't already been called) then
single row and column being returned then the data in the column is - Commits all changes made during this database transaction.
converted to a double and returned. - In particular, performs: db.exec("commit");
throws - else
- sqlite_error if an error occurs which prevents this operation from - does nothing
succeeding.
!*/ !*/
// ------------------------------------------------------------------------------------ ~transaction(
int query_int (
database& db,
const std::string& query
); );
/*! /*!
ensures ensures
- executes the given SQL query against db. If the query results in a - if (commit() was never called) then
single row and column being returned then the data in the column is - rolls back any changes made to the database during this transaction.
converted to an int and returned. - In particular, performs: db.exec("rollback");
throws - else
- sqlite_error if an error occurs which prevents this operation from - does nothing
succeeding.
!*/ !*/
// ------------------------------------------------------------------------------------ };
int64 query_int64 ( // ----------------------------------------------------------------------------------------
database& db,
const std::string& query
);
/*!
ensures
- executes the given SQL query against db. If the query results in a
single row and column being returned then the data in the column is
converted to an int64 and returned.
throws
- sqlite_error if an error occurs which prevents this operation from
succeeding.
!*/
// ------------------------------------------------------------------------------------ template <
typename T
>
void query_object (
database& db,
const std::string& query,
T& item
);
/*!
ensures
- executes the given SQL query against db. If the query results in a
single row and column being returned then the data in the column is
interpreted as a binary BLOB and deserialized into item.
throws
- sqlite_error or serialization_error if an error occurs which prevents
this operation from succeeding.
!*/
const std::vector<char> query_blob ( // ----------------------------------------------------------------------------------------
database& db,
const std::string& query std::string query_text (
); database& db,
/*! const std::string& query
ensures );
- executes the given SQL query against db. If the query results in a /*!
single row and column being returned then the data in the column is ensures
returned as a binary BLOB. - executes the given SQL query against db. If the query results in a
throws single row and column being returned then the data in the column is
- sqlite_error if an error occurs which prevents this operation from converted to text and returned.
succeeding. throws
!*/ - sqlite_error if an error occurs which prevents this operation from
succeeding.
!*/
// ----------------------------------------------------------------------------------------
double query_double (
database& db,
const std::string& query
);
/*!
ensures
- executes the given SQL query against db. If the query results in a
single row and column being returned then the data in the column is
converted to a double and returned.
throws
- sqlite_error if an error occurs which prevents this operation from
succeeding.
!*/
// ----------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------ int query_int (
database& db,
const std::string& query
);
/*!
ensures
- executes the given SQL query against db. If the query results in a
single row and column being returned then the data in the column is
converted to an int and returned.
throws
- sqlite_error if an error occurs which prevents this operation from
succeeding.
!*/
// ----------------------------------------------------------------------------------------
int64 query_int64 (
database& db,
const std::string& query
);
/*!
ensures
- executes the given SQL query against db. If the query results in a
single row and column being returned then the data in the column is
converted to an int64 and returned.
throws
- sqlite_error if an error occurs which prevents this operation from
succeeding.
!*/
// ----------------------------------------------------------------------------------------
const std::vector<char> query_blob (
database& db,
const std::string& query
);
/*!
ensures
- executes the given SQL query against db. If the query results in a
single row and column being returned then the data in the column is
returned as a binary BLOB.
throws
- sqlite_error if an error occurs which prevents this operation from
succeeding.
!*/
// ----------------------------------------------------------------------------------------
}
} }
#endif // DLIB_SQLiTE_TOOLS_H_ #endif // DLIB_SQLiTE_TOOLS_H_
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment