Project

General

Profile

Feature #2574 ยป 0001-Add-support-for-deferrable-FK-constraints.patch

Bruce Toll, 01/19/2014 12:39 AM

View differences:

src/Wt/Dbo/Session.C
else if (field.fkConstraints() & Impl::FKOnDeleteSetNull)
sql << " on delete set null";
if (connection(false)->supportDeferrableFKConstraint()) //backend condition
sql << " deferrable initially deferred";
return sql.str();
}
src/Wt/Dbo/SqlConnection
*/
virtual bool supportAlterTable() const;
/*! \brief Returns true if the backend supports "deferrable initially
* deferred" foreign key constraints
*
* This method will return false by default.
*/
virtual bool supportDeferrableFKConstraint() const;
/*! \brief Returns the command used in alter table .. drop constraint ..
*
* This method will return "constraint" by default.
src/Wt/Dbo/SqlConnection.C
return false;
}
bool SqlConnection::supportDeferrableFKConstraint() const
{
return false;
}
const char *SqlConnection::alterTableConstraintString() const
{
return "constraint";
src/Wt/Dbo/backend/Postgres
virtual const char *dateTimeType(SqlDateTimeType type) const;
virtual const char *blobType() const;
virtual bool supportAlterTable() const;
virtual bool supportDeferrableFKConstraint() const;
//@}
private:
src/Wt/Dbo/backend/Postgres.C
return true;
}
bool Postgres::supportDeferrableFKConstraint() const
{
return true;
}
void Postgres::startTransaction()
{
PGresult *result = PQexec(conn_, "start transaction");
src/Wt/Dbo/backend/Sqlite3
virtual std::string autoincrementInsertSuffix() const;
virtual const char *dateTimeType(SqlDateTimeType type) const;
virtual const char *blobType() const;
virtual bool supportDeferrableFKConstraint() const;
//@}
private:
DateTimeStorage dateTimeStorage_[2];
src/Wt/Dbo/backend/Sqlite3.C
return "blob not null";
}
bool Sqlite3::supportDeferrableFKConstraint() const
{
return true;
}
void Sqlite3::setDateTimeStorage(SqlDateTimeType type,
DateTimeStorage storage)
{
test/dbo/DboTest.C
}
}
#if 0 // doesn't work, no solution yet
BOOST_AUTO_TEST_CASE( dbo_test17 )
{
DboFixture f;
......
a.modify()->b = b;
}
#if !defined(FIREBIRD) && !defined(MYSQL)
{
dbo::Transaction t(*session_);
dbo::ptr<A> a = session_->find<A>();
......
b.remove(); // 2
a.remove(); // 3
}
#endif //!FIREBIRD && !MYSQL
}
#endif
BOOST_AUTO_TEST_CASE( dbo_test18 )
{
    (1-1/1)