diff options
author | Andrzej J.R. Hunt <andrzej@ahunt.org> | 2013-08-15 09:16:36 +0100 |
---|---|---|
committer | Andrzej J.R. Hunt <andrzej@ahunt.org> | 2013-08-15 10:02:40 +0100 |
commit | d3a002af12af0f4460ab2e3c5f957c69c096e3c2 (patch) | |
tree | 7f12568c649a86b58d6dee875c257ef2925a397f /connectivity | |
parent | 5166f28e797aec47a8a48213203ebd6a7ee06302 (diff) |
Implement altering of default value.
Change-Id: I531fbbc1e07bc686bf76103ccf7a5e1c47a72cf1
Diffstat (limited to 'connectivity')
-rw-r--r-- | connectivity/source/drivers/firebird/Table.cxx | 47 | ||||
-rw-r--r-- | connectivity/source/drivers/firebird/Table.hxx | 6 |
2 files changed, 44 insertions, 9 deletions
diff --git a/connectivity/source/drivers/firebird/Table.cxx b/connectivity/source/drivers/firebird/Table.cxx index 1d96cd24bbb0..38b0bcb13dbf 100644 --- a/connectivity/source/drivers/firebird/Table.cxx +++ b/connectivity/source/drivers/firebird/Table.cxx @@ -83,20 +83,44 @@ void SAL_CALL Table::alterColumnByName(const OUString& rColName, // sdbcx::Descriptor bool bNameChanged = xColumn->getPropertyValue("Name") != rDescriptor->getPropertyValue("Name"); // sdbcx::ColumnDescriptor -// bool bTypeChanged = xColumn->getPropertyValue("Type") != rDescriptor->getPropertyValue("Type"); -// bool bTypeNameChanged = xColumn->getPropertyValue("TypeName") != rDescriptor->getPropertyValue("TypeName"); -// bool bPrecisionChanged = xColumn->getPropertyValue("Precision") != rDescriptor->getPropertyValue("Precision"); -// bool bScaleChanged = xColumn->getPropertyValue("Scale") != rDescriptor->getPropertyValue("Scale"); -// bool bIsNullableChanged = xColumn->getPropertyValue("IsNullable") != rDescriptor->getPropertyValue("IsNullable"); -// bool bIsAutoIncrementChanged = xColumn->getPropertyValue("IsAutoIncrement") != rDescriptor->getPropertyValue("IsAutoIncrement"); - // TODO: remainder + bool bTypeChanged = xColumn->getPropertyValue("Type") != rDescriptor->getPropertyValue("Type"); + bool bTypeNameChanged = xColumn->getPropertyValue("TypeName") != rDescriptor->getPropertyValue("TypeName"); + bool bPrecisionChanged = xColumn->getPropertyValue("Precision") != rDescriptor->getPropertyValue("Precision"); + bool bScaleChanged = xColumn->getPropertyValue("Scale") != rDescriptor->getPropertyValue("Scale"); + bool bIsNullableChanged = xColumn->getPropertyValue("IsNullable") != rDescriptor->getPropertyValue("IsNullable"); + bool bIsAutoIncrementChanged = xColumn->getPropertyValue("IsAutoIncrement") != rDescriptor->getPropertyValue("IsAutoIncrement"); + // TODO: remainder -- these are all "optional" so have to detect presence and change. + + bool bDefaultChanged = xColumn->getPropertyValue("DefaultValue") + != rDescriptor->getPropertyValue("DefaultValue"); if (bNameChanged) { OUString sNewTableName; rDescriptor->getPropertyValue("Name") >>= sNewTableName; - OUString sSql("ALTER TABLE \"" + getName() + "\" ALTER COLUMN \"" - + rColName + "\" TO \"" + sNewTableName + "\""); + OUString sSql(getAlterTableColumn(rColName) + + " TO \"" + sNewTableName + "\""); + + getConnection()->createStatement()->execute(sSql); + } + + if (bTypeChanged || bTypeNameChanged || bPrecisionChanged || bScaleChanged + || bIsNullableChanged || bIsAutoIncrementChanged) + { + // TODO: changeType + } + + if (bDefaultChanged) + { + OUString sOldDefault, sNewDefault; + xColumn->getPropertyValue("DefaultValue") >>= sOldDefault; + rDescriptor->getPropertyValue("DefaultValue") >>= sNewDefault; + + OUString sSql; + if (sNewDefault.isEmpty()) + sSql = getAlterTableColumn(rColName) + "DROP DEFAULT"; + else + sSql = getAlterTableColumn(rColName) + "SET DEFAULT " + sNewDefault; getConnection()->createStatement()->execute(sSql); } @@ -140,4 +164,9 @@ uno::Sequence< Type > SAL_CALL Table::getTypes() return OTableHelper::getTypes(); } + +OUString Table::getAlterTableColumn(const OUString& rColumn) +{ + return ("ALTER TABLE \"" + getName() + "\" ALTER COLUMN \"" + rColumn + "\" "); +} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file diff --git a/connectivity/source/drivers/firebird/Table.hxx b/connectivity/source/drivers/firebird/Table.hxx index 6ee5e366a5b3..ff9d183ec2ec 100644 --- a/connectivity/source/drivers/firebird/Table.hxx +++ b/connectivity/source/drivers/firebird/Table.hxx @@ -28,6 +28,12 @@ namespace connectivity private: ::osl::Mutex& m_rMutex; + /** + * Get the ALTER TABLE [TABLE] ALTER [COLUMN] String. + * Includes a trailing space. + */ + ::rtl::OUString getAlterTableColumn(const ::rtl::OUString& rColumn); + public: Table(Tables* pTables, ::osl::Mutex& rMutex, |