summaryrefslogtreecommitdiff
path: root/connectivity
diff options
context:
space:
mode:
authorAndrzej J.R. Hunt <andrzej@ahunt.org>2013-08-15 09:16:36 +0100
committerAndrzej J.R. Hunt <andrzej@ahunt.org>2013-08-15 10:02:40 +0100
commitd3a002af12af0f4460ab2e3c5f957c69c096e3c2 (patch)
tree7f12568c649a86b58d6dee875c257ef2925a397f /connectivity
parent5166f28e797aec47a8a48213203ebd6a7ee06302 (diff)
Implement altering of default value.
Change-Id: I531fbbc1e07bc686bf76103ccf7a5e1c47a72cf1
Diffstat (limited to 'connectivity')
-rw-r--r--connectivity/source/drivers/firebird/Table.cxx47
-rw-r--r--connectivity/source/drivers/firebird/Table.hxx6
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,