40 Derived& derived()
noexcept {
return static_cast<Derived&
>(*this); }
41 const Derived& derived()
const noexcept {
return static_cast<const Derived&
>(*this); }
44 bool begin() final {
return derived().update(derived().begin_sql()); }
45 bool commit() final {
return derived().update(derived().commit_sql()); }
46 bool rollback() final {
return derived().update(derived().rollback_sql()); }
48 NEFORCE_NODISCARD
void*
native_handle() noexcept final {
return static_cast<Derived*
>(
this)->link_; }
50 NEFORCE_NODISCARD
bool table_exists(
const string& table)
const override {
51 auto result = derived().query(derived().table_exists_query(table));
52 return result !=
nullptr && result->row_count() > 0;