diff --git a/src/Dbdeploy.Console/OptionsManager.cs b/src/Dbdeploy.Console/OptionsManager.cs
index e643f0b..5cb7ca0 100644
--- a/src/Dbdeploy.Console/OptionsManager.cs
+++ b/src/Dbdeploy.Console/OptionsManager.cs
@@ -87,7 +87,7 @@ private static OptionSet Initialize(DbDeployConfig config, ConfigFileInfo config
options
.Add(
"d|dbms=",
- "DBMS type ('mssql', 'mysql' or 'ora')",
+ "DBMS type ('mssql', 'mysql', 'ora' or 'db2')",
s => config.Dbms = s)
.Add(
diff --git a/src/Net.Sf.Dbdeploy/Database/DatabaseSchemaVersionManager.cs b/src/Net.Sf.Dbdeploy/Database/DatabaseSchemaVersionManager.cs
index 4b00608..aecb5b0 100755
--- a/src/Net.Sf.Dbdeploy/Database/DatabaseSchemaVersionManager.cs
+++ b/src/Net.Sf.Dbdeploy/Database/DatabaseSchemaVersionManager.cs
@@ -129,17 +129,25 @@ public virtual void RecordScriptStatus(ChangeScript script, ScriptStatus status,
var completeDateValue = status != ScriptStatus.Started ? this.syntax.CurrentTimestamp : "NULL";
if (script.ChangeId == 0)
{
+ var insertSql = string.Format(
+ CultureInfo.InvariantCulture,
+"INSERT INTO {0} (Folder, ScriptNumber, ScriptName, StartDate, CompleteDate, AppliedBy, ScriptStatus, ScriptOutput) VALUES (@1, @2, @3, {1}, {2}, {3}, @4, @5)",
+ this.changeLogTableName,
+ this.syntax.CurrentTimestamp,
+ completeDateValue,
+ this.syntax.CurrentUser);
+
+ // Execute insert.
+ this.queryExecuter.ExecuteQuery(insertSql, script.Folder, script.ScriptNumber, script.ScriptName, (int)status, output ?? string.Empty);
+
+
var sql = string.Format(
CultureInfo.InvariantCulture,
-@"INSERT INTO {0} (Folder, ScriptNumber, ScriptName, StartDate, CompleteDate, AppliedBy, ScriptStatus, ScriptOutput) VALUES (@1, @2, @3, {1}, {2}, {3}, @4, @5)
-SELECT ChangeId FROM {0} WHERE Folder = @1 and ScriptNumber = @2",
- this.changeLogTableName,
- this.syntax.CurrentTimestamp,
- completeDateValue,
- this.syntax.CurrentUser);
+"SELECT ChangeId FROM {0} WHERE Folder = @1 and ScriptNumber = @2",
+ this.changeLogTableName);
- // Execute insert and set change id so it can be updated.
- using (var reader = this.queryExecuter.ExecuteQuery(sql, script.Folder, script.ScriptNumber, script.ScriptName, (int)status, output ?? string.Empty))
+ // Execute set change id so it can be updated.
+ using (var reader = this.queryExecuter.ExecuteQuery(sql, script.Folder, script.ScriptNumber))
{
reader.Read();
script.ChangeId = reader.GetInt32(0);
diff --git a/src/Net.Sf.Dbdeploy/Database/Db2DbmsSyntax.cs b/src/Net.Sf.Dbdeploy/Database/Db2DbmsSyntax.cs
new file mode 100644
index 0000000..14a487a
--- /dev/null
+++ b/src/Net.Sf.Dbdeploy/Database/Db2DbmsSyntax.cs
@@ -0,0 +1,75 @@
+using System;
+using System.Globalization;
+
+namespace Net.Sf.Dbdeploy.Database
+{
+ ///
+ /// IBM DB2 syntax.
+ ///
+ public class Db2DbmsSyntax : DbmsSyntax
+ {
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public Db2DbmsSyntax()
+ : base("db2")
+ {
+ }
+
+ ///
+ /// Gets the get timestamp.
+ ///
+ ///
+ /// The get timestamp.
+ ///
+ public override string CurrentTimestamp
+ {
+ get
+ {
+ return "CURRENT TIMESTAMP";
+ }
+ }
+
+ ///
+ /// Gets the syntax to get the current user.
+ ///
+ ///
+ /// The current user syntax.
+ ///
+ public override string CurrentUser
+ {
+ get
+ {
+ return "CURRENT USER";
+ }
+ }
+
+ ///
+ /// Gets the syntax for checking if a table exists.
+ ///
+ /// Name of the table.
+ /// SQL for checking if a table exists.
+ public override string TableExists(string tableName)
+ {
+ // Use correct syntax for with and without schema.
+ string syntax;
+ var tableInfo = this.GetTableInfo(tableName);
+ if (!string.IsNullOrWhiteSpace(tableInfo.Schema))
+ {
+ syntax = string.Format(CultureInfo.InvariantCulture,
+@"SELECT TRIM(TABSCHEMA) || '.' || TRIM(TABNAME)
+FROM SYSCAT.TABLES
+WHERE TABSCHEMA='{0}' AND TABNAME='{1}'", tableInfo.Schema.ToUpper(), tableInfo.TableName.ToUpper());
+ }
+ else
+ {
+ syntax = string.Format(CultureInfo.InvariantCulture,
+@"SELECT TRIM(TABSCHEMA) || '.' || TRIM(TABNAME)
+FROM SYSCAT.TABLES
+WHERE TABNAME='{0}'", tableName.ToUpper());
+ }
+
+ return syntax;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Net.Sf.Dbdeploy/Database/DbmsFactory.cs b/src/Net.Sf.Dbdeploy/Database/DbmsFactory.cs
index 8d4e8fd..b003f8f 100755
--- a/src/Net.Sf.Dbdeploy/Database/DbmsFactory.cs
+++ b/src/Net.Sf.Dbdeploy/Database/DbmsFactory.cs
@@ -24,6 +24,8 @@ public virtual IDbmsSyntax CreateDbmsSyntax()
{
switch (this.dbms)
{
+ case "db2":
+ return new Db2DbmsSyntax();
case "ora":
return new OracleDbmsSyntax();
case "mssql":
@@ -31,7 +33,7 @@ public virtual IDbmsSyntax CreateDbmsSyntax()
case "mysql":
return new MySqlDbmsSyntax();
default:
- throw new ArgumentException("Supported dbms: ora, mssql, mysql");
+ throw new ArgumentException("Supported dbms: db2, ora, mssql, mysql");
}
}
diff --git a/src/Net.Sf.Dbdeploy/Net.Sf.Dbdeploy.csproj b/src/Net.Sf.Dbdeploy/Net.Sf.Dbdeploy.csproj
index cbdca51..4f359a2 100755
--- a/src/Net.Sf.Dbdeploy/Net.Sf.Dbdeploy.csproj
+++ b/src/Net.Sf.Dbdeploy/Net.Sf.Dbdeploy.csproj
@@ -124,6 +124,7 @@
+
@@ -189,6 +190,12 @@
PreserveNewest
+
+ PreserveNewest
+
+
+ PreserveNewest
+
@@ -211,6 +218,11 @@
PreserveNewest
+
+
+ PreserveNewest
+
+