Merge lp:~adam-rpconnelly/dbversion/cmdtimeout into lp:dbversion

Proposed by Adam Connelly
Status: Merged
Merged at revision: 50
Proposed branch: lp:~adam-rpconnelly/dbversion/cmdtimeout
Merge into: lp:dbversion
Diff against target: 450 lines
To merge this branch: bzr merge lp:~adam-rpconnelly/dbversion/cmdtimeout
Reviewer Review Type Date Requested Status
Colin Winning Approve
Review via email: mp+121925@code.launchpad.net

Description of the change

Moved the code to convert the property value to an int into the PropertyService.

To post a comment you must log in.
Revision history for this message
Colin Winning (colinwinning) wrote :

All looks good to me.

Revision history for this message
Colin Winning (colinwinning) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/DatabaseVersion.Tests/Manifests/ManifestReaderTests.cs'
--- src/DatabaseVersion.Tests/Manifests/ManifestReaderTests.cs 2011-10-10 18:43:53 +0000
+++ src/DatabaseVersion.Tests/Manifests/ManifestReaderTests.cs 2012-08-29 19:06:19 +0000
@@ -95,9 +95,8 @@
9595
96 Mock<IDatabaseTaskFactory > factory = new Mock<IDatabaseTaskFactory>();96 Mock<IDatabaseTaskFactory > factory = new Mock<IDatabaseTaskFactory>();
97 Mock<IDatabaseTask > task = new Mock<IDatabaseTask>();97 Mock<IDatabaseTask > task = new Mock<IDatabaseTask>();
98 Mock<IMessageService> messageService = new Mock<IMessageService>();
99 factory.Setup(f => f.CanCreate(It.Is<XElement>(r => r.Name == "script"))).Returns(true);98 factory.Setup(f => f.CanCreate(It.Is<XElement>(r => r.Name == "script"))).Returns(true);
100 factory.Setup(f => f.Create(It.Is<XElement>(r => r.Name == "script"), 0, It.IsAny<IDatabaseVersion>(), messageService.Object)).Returns(task.Object);99 factory.Setup(f => f.Create(It.Is<XElement>(r => r.Name == "script"), 0, It.IsAny<IDatabaseVersion>())).Returns(task.Object);
101100
102 reader.Factories = new[] { factory.Object };101 reader.Factories = new[] { factory.Object };
103102
@@ -116,9 +115,8 @@
116115
117 Mock<IDatabaseTaskFactory > factory = new Mock<IDatabaseTaskFactory>();116 Mock<IDatabaseTaskFactory > factory = new Mock<IDatabaseTaskFactory>();
118 Mock<IDatabaseTask > task = new Mock<IDatabaseTask>();117 Mock<IDatabaseTask > task = new Mock<IDatabaseTask>();
119 Mock<IMessageService> messageService = new Mock<IMessageService>();
120 factory.Setup(f => f.CanCreate(It.IsAny<XElement>())).Returns(true);118 factory.Setup(f => f.CanCreate(It.IsAny<XElement>())).Returns(true);
121 factory.Setup(f => f.Create(It.IsAny<XElement>(), It.IsAny<int>(), It.IsAny<IDatabaseVersion>(), messageService.Object)).Returns(task.Object);119 factory.Setup(f => f.Create(It.IsAny<XElement>(), It.IsAny<int>(), It.IsAny<IDatabaseVersion>())).Returns(task.Object);
122120
123 reader.Factories = new[] { factory.Object };121 reader.Factories = new[] { factory.Object };
124122
@@ -129,7 +127,7 @@
129 int expectedOrder = 0;127 int expectedOrder = 0;
130 foreach (IDatabaseTask createdTask in version.Tasks)128 foreach (IDatabaseTask createdTask in version.Tasks)
131 {129 {
132 factory.Verify(f => f.Create(It.IsAny<XElement>(), expectedOrder, It.IsAny<IDatabaseVersion>(), messageService.Object));130 factory.Verify(f => f.Create(It.IsAny<XElement>(), expectedOrder, It.IsAny<IDatabaseVersion>()));
133 expectedOrder++;131 expectedOrder++;
134 }132 }
135 }133 }
136134
=== modified file 'src/DatabaseVersion.Tests/Property/PropertyServiceTests.cs'
--- src/DatabaseVersion.Tests/Property/PropertyServiceTests.cs 2011-09-02 23:16:14 +0000
+++ src/DatabaseVersion.Tests/Property/PropertyServiceTests.cs 2012-08-29 19:06:19 +0000
@@ -85,6 +85,6 @@
8585
86 // Assert86 // Assert
87 Assert.Equal(0, service.Properties.Count());87 Assert.Equal(0, service.Properties.Count());
88 }88 }
8989
90 [Fact]90 [Fact]
91 public void ShouldBeAbleToReturnPropertyAsInt()91 public void ShouldBeAbleToReturnPropertyAsInt()
92 {92 {
93 // Arrange93 // Arrange
94 var service = new PropertyService();94 var service = new PropertyService();
95 service.Add(new Property { Key = "myProperty", Value = "100" });95 service.Add(new Property { Key = "myProperty", Value = "100" });
9696
97 // Act97 // Act
98 var value = service.GetInt("myProperty");98 var value = service.GetInt("myProperty");
9999
100 // Assert100 // Assert
101 Assert.Equal(100, value);101 Assert.Equal(100, value);
102 }102 }
103103
104 [Fact]104 [Fact]
105 public void ShouldReturnNullIfPropertyIsNotAnInt()105 public void ShouldReturnNullIfPropertyIsNotAnInt()
106 {106 {
107 // Arrange107 // Arrange
108 var service = new PropertyService();108 var service = new PropertyService();
109 service.Add(new Property { Key = "myProperty", Value = "abcd" });109 service.Add(new Property { Key = "myProperty", Value = "abcd" });
110110
111 // Act111 // Act
112 var value = service.GetInt("myProperty");112 var value = service.GetInt("myProperty");
113113
114 // Assert114 // Assert
115 Assert.Null(value);115 Assert.Null(value);
116 }116 }
117117
118 [Fact]118 [Fact]
119 public void ShouldReturnNullFromGetIntIfPropertyIsNotSet()119 public void ShouldReturnNullFromGetIntIfPropertyIsNotSet()
120 {120 {
121 // Arrange121 // Arrange
122 var service = new PropertyService();122 var service = new PropertyService();
123123
124 // Act124 // Act
125 var value = service.GetInt("myProperty");125 var value = service.GetInt("myProperty");
126126
127 // Assert127 // Assert
128 Assert.Null(value);128 Assert.Null(value);
129 }129 }
130 }130 }
131}131}
132132
=== modified file 'src/DatabaseVersion.Tests/Sql/ScriptTaskFactoryTests.cs'
--- src/DatabaseVersion.Tests/Sql/ScriptTaskFactoryTests.cs 2011-10-10 09:00:52 +0000
+++ src/DatabaseVersion.Tests/Sql/ScriptTaskFactoryTests.cs 2012-08-29 19:06:19 +0000
@@ -63,7 +63,7 @@
63 new XAttribute(XName.Get("file"), "path/file.sql"));63 new XAttribute(XName.Get("file"), "path/file.sql"));
6464
65 // Act65 // Act
66 IDatabaseTask task = this.factory.Create(element, 0, null, null);66 IDatabaseTask task = this.factory.Create(element, 0, null);
6767
68 // Assert68 // Assert
69 Assert.IsType<ScriptTask>(task);69 Assert.IsType<ScriptTask>(task);
@@ -78,7 +78,7 @@
78 new XAttribute(XName.Get("file"), "path/file.sql"));78 new XAttribute(XName.Get("file"), "path/file.sql"));
7979
80 // Act80 // Act
81 IDatabaseTask task = this.factory.Create(element, 0, null, null);81 IDatabaseTask task = this.factory.Create(element, 0, null);
8282
83 // Assert83 // Assert
84 Assert.Equal("path/file.sql", ((ScriptTask)task).FileName);84 Assert.Equal("path/file.sql", ((ScriptTask)task).FileName);
@@ -93,7 +93,7 @@
93 new XAttribute(XName.Get("file"), "path/file.sql"));93 new XAttribute(XName.Get("file"), "path/file.sql"));
9494
95 // Act95 // Act
96 IDatabaseTask task = this.factory.Create(element, 25, null, null);96 IDatabaseTask task = this.factory.Create(element, 25, null);
9797
98 // Assert98 // Assert
99 Assert.Equal(25, task.ExecutionOrder);99 Assert.Equal(25, task.ExecutionOrder);
100100
=== modified file 'src/DatabaseVersion.Tests/Sql/ScriptTaskTests.cs'
--- src/DatabaseVersion.Tests/Sql/ScriptTaskTests.cs 2012-01-24 22:01:24 +0000
+++ src/DatabaseVersion.Tests/Sql/ScriptTaskTests.cs 2012-08-29 19:06:19 +0000
@@ -9,6 +9,7 @@
9 using Moq;9 using Moq;
10 using System.Data;10 using System.Data;
11 using System.IO;11 using System.IO;
12 using dbversion.Property;
12 using dbversion.Tasks;13 using dbversion.Tasks;
13 using dbversion.Version;14 using dbversion.Version;
14 using NHibernate;15 using NHibernate;
@@ -18,10 +19,12 @@
18 private readonly Mock<ISession> session = new Mock<ISession>() { DefaultValue = DefaultValue.Mock };19 private readonly Mock<ISession> session = new Mock<ISession>() { DefaultValue = DefaultValue.Mock };
19 private readonly Mock<IDbCommand> command = new Mock<IDbCommand>();20 private readonly Mock<IDbCommand> command = new Mock<IDbCommand>();
20 private readonly Mock<IMessageService> messageService = new Mock<IMessageService> { DefaultValue = DefaultValue.Mock };21 private readonly Mock<IMessageService> messageService = new Mock<IMessageService> { DefaultValue = DefaultValue.Mock };
22 private readonly Mock<IPropertyService> propertyService = new Mock<IPropertyService>();
2123
22 public ScriptTaskTests()24 public ScriptTaskTests()
23 {25 {
24 this.session.Setup(s => s.Connection.CreateCommand()).Returns(command.Object);26 this.session.Setup(s => s.Connection.CreateCommand()).Returns(command.Object);
27 this.command.SetupProperty(c => c.CommandTimeout);
25 }28 }
2629
27 [Fact]30 [Fact]
@@ -32,7 +35,7 @@
32 version.Setup(v => v.ManifestPath).Returns("1\\database.xml");35 version.Setup(v => v.ManifestPath).Returns("1\\database.xml");
33 version.Setup(v => v.Archive.GetScriptPath("1\\database.xml", "scripts\\schema.sql")).Returns("1\\scripts\\schema.sql");36 version.Setup(v => v.Archive.GetScriptPath("1\\database.xml", "scripts\\schema.sql")).Returns("1\\scripts\\schema.sql");
34 version.Setup(v => v.Archive.GetFile(It.IsAny<string>())).Returns(this.GetStream("A"));37 version.Setup(v => v.Archive.GetFile(It.IsAny<string>())).Returns(this.GetStream("A"));
35 ScriptTask task = new ScriptTask("scripts\\schema.sql", 0, version.Object, messageService.Object);38 ScriptTask task = new ScriptTask("scripts\\schema.sql", 0, version.Object, messageService.Object, this.propertyService.Object);
3639
37 // Act40 // Act
38 task.Execute(session.Object, 1, 1);41 task.Execute(session.Object, 1, 1);
@@ -49,7 +52,7 @@
49 version.Setup(v => v.ManifestPath).Returns("1\\database.xml");52 version.Setup(v => v.ManifestPath).Returns("1\\database.xml");
50 version.Setup(v => v.Archive.GetScriptPath("1\\database.xml", "scripts\\schema.sql")).Returns("1\\scripts\\schema.sql");53 version.Setup(v => v.Archive.GetScriptPath("1\\database.xml", "scripts\\schema.sql")).Returns("1\\scripts\\schema.sql");
51 version.Setup(v => v.Archive.GetFile("1\\scripts\\schema.sql")).Returns(GetStream("ABCDE"));54 version.Setup(v => v.Archive.GetFile("1\\scripts\\schema.sql")).Returns(GetStream("ABCDE"));
52 ScriptTask task = new ScriptTask("scripts\\schema.sql", 0, version.Object, messageService.Object);55 ScriptTask task = new ScriptTask("scripts\\schema.sql", 0, version.Object, messageService.Object, this.propertyService.Object);
5356
54 // Act57 // Act
55 task.Execute(session.Object, 1, 1);58 task.Execute(session.Object, 1, 1);
@@ -67,7 +70,7 @@
67 version.Setup(v => v.ManifestPath).Returns("1\\database.xml");70 version.Setup(v => v.ManifestPath).Returns("1\\database.xml");
68 version.Setup(v => v.Archive.GetFile(It.IsAny<string>())).Returns(71 version.Setup(v => v.Archive.GetFile(It.IsAny<string>())).Returns(
69 GetStream("ABCDE" + Environment.NewLine + "GO" + Environment.NewLine + "FGHIJ"));72 GetStream("ABCDE" + Environment.NewLine + "GO" + Environment.NewLine + "FGHIJ"));
70 ScriptTask task = new ScriptTask("scripts\\schema.sql", 0, version.Object, messageService.Object);73 ScriptTask task = new ScriptTask("scripts\\schema.sql", 0, version.Object, messageService.Object, this.propertyService.Object);
7174
72 // Act75 // Act
73 task.Execute(session.Object, 1, 1);76 task.Execute(session.Object, 1, 1);
@@ -96,7 +99,7 @@
96 version.Setup(v => v.ManifestPath).Returns("1\\database.xml");99 version.Setup(v => v.ManifestPath).Returns("1\\database.xml");
97 version.Setup(v => v.Archive.GetFile(It.IsAny<string>())).Returns(100 version.Setup(v => v.Archive.GetFile(It.IsAny<string>())).Returns(
98 GetStream(ScriptWithDifferentCasedSeparators));101 GetStream(ScriptWithDifferentCasedSeparators));
99 ScriptTask task = new ScriptTask("scripts\\schema.sql", 0, version.Object, messageService.Object);102 ScriptTask task = new ScriptTask("scripts\\schema.sql", 0, version.Object, messageService.Object, this.propertyService.Object);
100103
101 // Act104 // Act
102 task.Execute(session.Object, 1, 1);105 task.Execute(session.Object, 1, 1);
@@ -124,7 +127,7 @@
124 version.Setup(v => v.ManifestPath).Returns("1\\database.xml");127 version.Setup(v => v.ManifestPath).Returns("1\\database.xml");
125 version.Setup(v => v.Archive.GetFile(It.IsAny<string>())).Returns(128 version.Setup(v => v.Archive.GetFile(It.IsAny<string>())).Returns(
126 GetStream(ScriptWithSeparatorsWithinLines));129 GetStream(ScriptWithSeparatorsWithinLines));
127 ScriptTask task = new ScriptTask("scripts\\schema.sql", 0, version.Object, messageService.Object);130 ScriptTask task = new ScriptTask("scripts\\schema.sql", 0, version.Object, messageService.Object, this.propertyService.Object);
128131
129 // Act132 // Act
130 task.Execute(session.Object, 1, 1);133 task.Execute(session.Object, 1, 1);
@@ -147,7 +150,7 @@
147 version.Setup(v => v.ManifestPath).Returns("1\\database.xml");150 version.Setup(v => v.ManifestPath).Returns("1\\database.xml");
148 version.Setup(v => v.Archive.GetFile(It.IsAny<string>())).Returns(151 version.Setup(v => v.Archive.GetFile(It.IsAny<string>())).Returns(
149 GetStream(ScriptWithSeparatorAtStartOfScript));152 GetStream(ScriptWithSeparatorAtStartOfScript));
150 ScriptTask task = new ScriptTask("scripts\\schema.sql", 0, version.Object, messageService.Object);153 ScriptTask task = new ScriptTask("scripts\\schema.sql", 0, version.Object, messageService.Object, this.propertyService.Object);
151154
152 // Act155 // Act
153 task.Execute(session.Object, 1, 1);156 task.Execute(session.Object, 1, 1);
@@ -168,7 +171,7 @@
168 version.Setup(v => v.ManifestPath).Returns("1\\database.xml");171 version.Setup(v => v.ManifestPath).Returns("1\\database.xml");
169 version.Setup(v => v.Archive.GetFile(It.IsAny<string>())).Returns(172 version.Setup(v => v.Archive.GetFile(It.IsAny<string>())).Returns(
170 GetStream(ScriptWithSeparatorAtEndOfScript));173 GetStream(ScriptWithSeparatorAtEndOfScript));
171 ScriptTask task = new ScriptTask("scripts\\schema.sql", 0, version.Object, messageService.Object);174 ScriptTask task = new ScriptTask("scripts\\schema.sql", 0, version.Object, messageService.Object, this.propertyService.Object);
172175
173 // Act176 // Act
174 task.Execute(session.Object, 1, 1);177 task.Execute(session.Object, 1, 1);
@@ -186,7 +189,7 @@
186 version.Setup(v => v.Archive.GetScriptPath("1\\database.xml", "scripts\\schema.sql")).Returns("1\\scripts\\schema.sql");189 version.Setup(v => v.Archive.GetScriptPath("1\\database.xml", "scripts\\schema.sql")).Returns("1\\scripts\\schema.sql");
187 version.Setup(v => v.Archive.GetFile(It.IsAny<string>())).Returns(190 version.Setup(v => v.Archive.GetFile(It.IsAny<string>())).Returns(
188 GetStream(ScriptWithSeparatorAtEndOfScript));191 GetStream(ScriptWithSeparatorAtEndOfScript));
189 ScriptTask task = new ScriptTask("scripts\\schema.sql", 0, version.Object, messageService.Object);192 ScriptTask task = new ScriptTask("scripts\\schema.sql", 0, version.Object, messageService.Object, this.propertyService.Object);
190 Exception exception = new Exception();193 Exception exception = new Exception();
191 command.Setup(c=>c.ExecuteNonQuery()).Throws(exception);194 command.Setup(c=>c.ExecuteNonQuery()).Throws(exception);
192195
@@ -207,7 +210,7 @@
207 version.Setup(v => v.ManifestPath).Returns("1\\database.xml");210 version.Setup(v => v.ManifestPath).Returns("1\\database.xml");
208 version.Setup(v => v.Archive.GetScriptPath("1\\database.xml", "scripts\\schema.sql")).Returns("1\\scripts\\schema.sql");211 version.Setup(v => v.Archive.GetScriptPath("1\\database.xml", "scripts\\schema.sql")).Returns("1\\scripts\\schema.sql");
209 version.Setup(v => v.Archive.GetFile(It.IsAny<string>())).Returns((Stream)null);212 version.Setup(v => v.Archive.GetFile(It.IsAny<string>())).Returns((Stream)null);
210 ScriptTask task = new ScriptTask("scripts\\schema.sql", 0, version.Object, messageService.Object);213 ScriptTask task = new ScriptTask("scripts\\schema.sql", 0, version.Object, messageService.Object, this.propertyService.Object);
211214
212 // Act215 // Act
213 Exception thrownException = Record.Exception(() => task.Execute(new Mock<ISession>().Object, 1, 1));216 Exception thrownException = Record.Exception(() => task.Execute(new Mock<ISession>().Object, 1, 1));
@@ -217,6 +220,44 @@
217 Assert.Equal("The script file \"1\\scripts\\schema.sql\" does not exist in the archive.", thrownException.Message);220 Assert.Equal("The script file \"1\\scripts\\schema.sql\" does not exist in the archive.", thrownException.Message);
218 }221 }
219222
223 [Fact]
224 public void ShouldSetCommandTimeoutIfSpecified()
225 {
226 // Arrange
227 Mock<IDatabaseVersion> version = new Mock<IDatabaseVersion>{ DefaultValue = DefaultValue.Mock };
228 version.Setup(v => v.ManifestPath).Returns("1\\database.xml");
229 version.Setup(v => v.Archive.GetScriptPath("1\\database.xml", "scripts\\schema.sql")).Returns("1\\scripts\\schema.sql");
230 version.Setup(v => v.Archive.GetFile(It.IsAny<string>())).Returns(
231 GetStream(ScriptWithSeparatorAtEndOfScript));
232 var task = new ScriptTask("scripts\\test.sql", 0, version.Object, this.messageService.Object, this.propertyService.Object);
233
234 propertyService.Setup(p => p.GetInt(ScriptTask.CommandTimeoutPropertyName)).Returns(100);
235
236 // Act
237 task.Execute(this.session.Object, 1, 1);
238
239 // Assert
240 Assert.Equal(100, task.TaskTimeout);
241 }
242
243 [Fact]
244 public void ShouldNotSetCommandTimeoutIfNotSpecified()
245 {
246 // Arrange
247 Mock<IDatabaseVersion> version = new Mock<IDatabaseVersion> { DefaultValue = DefaultValue.Mock };
248 version.Setup(v => v.ManifestPath).Returns("1\\database.xml");
249 version.Setup(v => v.Archive.GetScriptPath("1\\database.xml", "scripts\\schema.sql")).Returns("1\\scripts\\schema.sql");
250 version.Setup(v => v.Archive.GetFile(It.IsAny<string>())).Returns(
251 GetStream(ScriptWithSeparatorAtEndOfScript));
252 var task = new ScriptTask("scripts\\test.sql", 0, version.Object, this.messageService.Object, this.propertyService.Object);
253
254 // Act
255 task.Execute(this.session.Object, 1, 1);
256
257 // Assert
258 Assert.Null(task.TaskTimeout);
259 }
260
220 private Stream GetStream(string contents)261 private Stream GetStream(string contents)
221 {262 {
222 return new MemoryStream(Encoding.Default.GetBytes(contents));263 return new MemoryStream(Encoding.Default.GetBytes(contents));
223264
=== modified file 'src/DatabaseVersion/Manifests/ManifestReader.cs'
--- src/DatabaseVersion/Manifests/ManifestReader.cs 2011-10-10 18:43:53 +0000
+++ src/DatabaseVersion/Manifests/ManifestReader.cs 2012-08-29 19:06:19 +0000
@@ -58,7 +58,7 @@
58 IDatabaseTaskFactory factory = this.Factories.FirstOrDefault(f => f.CanCreate(element));58 IDatabaseTaskFactory factory = this.Factories.FirstOrDefault(f => f.CanCreate(element));
59 if (factory != null)59 if (factory != null)
60 {60 {
61 return factory.Create(element, element.ElementsBeforeSelf().Count(), version, MessageService);61 return factory.Create(element, element.ElementsBeforeSelf().Count(), version);
62 }62 }
63 }63 }
6464
6565
=== modified file 'src/DatabaseVersion/Property/IPropertyService.cs'
--- src/DatabaseVersion/Property/IPropertyService.cs 2011-09-02 23:16:14 +0000
+++ src/DatabaseVersion/Property/IPropertyService.cs 2012-08-29 19:06:19 +0000
@@ -51,6 +51,17 @@
51 /// The prefix to look for.51 /// The prefix to look for.
52 /// </param>52 /// </param>
53 IEnumerable<Property> StartingWith(string prefix);53 IEnumerable<Property> StartingWith(string prefix);
54
55 /// <summary>
56 /// Gets the specified property as an int.
57 /// </summary>
58 /// <param name='key'>
59 /// The property key.
60 /// </param>
61 /// <returns>
62 /// The int value or null if the property is not defined, or is not an int.
63 /// </returns>
64 int? GetInt(string key);
54 }65 }
55}66}
5667
5768
=== modified file 'src/DatabaseVersion/Property/PropertyService.cs'
--- src/DatabaseVersion/Property/PropertyService.cs 2011-09-03 23:15:46 +0000
+++ src/DatabaseVersion/Property/PropertyService.cs 2012-08-29 19:06:19 +0000
@@ -53,14 +53,7 @@
53 {53 {
54 get54 get
55 {55 {
56 Property propertyValue;56 return this.Get(propertyName);
57
58 if (this.properties.TryGetValue(propertyName, out propertyValue))
59 {
60 return propertyValue;
61 }
62
63 return null;
64 }57 }
65 }58 }
6659
@@ -88,6 +81,47 @@
88 {81 {
89 return this.properties.Where(p => p.Key.StartsWith(prefix)).Select(p => p.Value);82 return this.properties.Where(p => p.Key.StartsWith(prefix)).Select(p => p.Value);
90 }83 }
84
85 /// <summary>
86 /// Gets the specified property as an int.
87 /// </summary>
88 /// <param name='key'>
89 /// The property key.
90 /// </param>
91 /// <returns>
92 /// The int value or null if the property is not defined, or is not an int.
93 /// </returns>
94 public int? GetInt(string key)
95 {
96 Validate.NotNull(() => key);
97
98 int value;
99 var property = this.Get(key);
100
101 if (property != null && int.TryParse(property.Value, out value))
102 {
103 return value;
104 }
105
106 return null;
107 }
108
109 /// <summary>
110 /// Get the property with the specified name.
111 /// </summary>
112 /// <param name='propertyName'>
113 /// The name of the property.
114 /// </param>
115 private Property Get(string propertyName)
116 {
117 Property propertyValue;
118 if (this.properties.TryGetValue(propertyName, out propertyValue))
119 {
120 return propertyValue;
121 }
122
123 return null;
124 }
91 }125 }
92}126}
93127
94128
=== modified file 'src/DatabaseVersion/Tasks/IDatabaseTaskFactory.cs'
--- src/DatabaseVersion/Tasks/IDatabaseTaskFactory.cs 2011-10-10 18:43:53 +0000
+++ src/DatabaseVersion/Tasks/IDatabaseTaskFactory.cs 2012-08-29 19:06:19 +0000
@@ -19,8 +19,7 @@
19 /// <param name="element">The element containing the definition of the task.</param>19 /// <param name="element">The element containing the definition of the task.</param>
20 /// <param name="executionOrder">The zero-based execution order of the task.</param>20 /// <param name="executionOrder">The zero-based execution order of the task.</param>
21 /// <param name="version">The database version that the task is contained within.</param>21 /// <param name="version">The database version that the task is contained within.</param>
22 /// <param name="messageService">The Message Service to use for logging</param>
23 /// <returns>The new task.</returns>22 /// <returns>The new task.</returns>
24 IDatabaseTask Create(XElement element, int executionOrder, IDatabaseVersion version, IMessageService messageService);23 IDatabaseTask Create(XElement element, int executionOrder, IDatabaseVersion version);
25 }24 }
26}25}
2726
=== modified file 'src/DatabaseVersion/Tasks/Sql/ScriptTask.cs'
--- src/DatabaseVersion/Tasks/Sql/ScriptTask.cs 2012-01-24 22:01:24 +0000
+++ src/DatabaseVersion/Tasks/Sql/ScriptTask.cs 2012-08-29 19:06:19 +0000
@@ -9,6 +9,7 @@
9 using System.Diagnostics;9 using System.Diagnostics;
10 using System.Text.RegularExpressions;10 using System.Text.RegularExpressions;
1111
12 using dbversion.Property;
12 using dbversion.Version;13 using dbversion.Version;
1314
14 using NHibernate;15 using NHibernate;
@@ -27,6 +28,11 @@
27 "{0}{1}|{0}{1}{0}|{1}{0}";28 "{0}{1}|{0}{1}{0}|{1}{0}";
2829
29 /// <summary>30 /// <summary>
31 /// The name of the command timeout property.
32 /// </summary>
33 public const string CommandTimeoutPropertyName = "dbversion.sql.command_timeout";
34
35 /// <summary>
30 /// The regex object created from the regex format.36 /// The regex object created from the regex format.
31 /// </summary>37 /// </summary>
32 private readonly Regex StringSplitRegex;38 private readonly Regex StringSplitRegex;
@@ -36,15 +42,30 @@
36 /// </summary>42 /// </summary>
37 private readonly IDatabaseVersion version;43 private readonly IDatabaseVersion version;
3844
45 private readonly IPropertyService propertyService;
46
39 protected override string GetTaskDescription()47 protected override string GetTaskDescription()
40 {48 {
41 return string.Format("Executing script \"{0}\"", this.GetScriptPath());49 return string.Format("Executing script \"{0}\"", this.GetScriptPath());
42 }50 }
4351
44 public ScriptTask(string fileName, int executionOrder, IDatabaseVersion version, IMessageService messageService)52 /// <summary>
53 /// The Timeout in seconds for the task
54 /// </summary>
55 /// <returns>The Timeout in seconds or if none set null</returns>
56 public int? TaskTimeout
57 {
58 get
59 {
60 return this.propertyService.GetInt(CommandTimeoutPropertyName);
61 }
62 }
63
64 public ScriptTask(string fileName, int executionOrder, IDatabaseVersion version, IMessageService messageService, IPropertyService propertyService)
45 : base(fileName, executionOrder, messageService)65 : base(fileName, executionOrder, messageService)
46 {66 {
47 this.version = version;67 this.version = version;
68 this.propertyService = propertyService;
4869
49 this.StringSplitRegex = GetStringSplitRegex();70 this.StringSplitRegex = GetStringSplitRegex();
50 }71 }
@@ -119,6 +140,7 @@
119 using (var command = session.Connection.CreateCommand())140 using (var command = session.Connection.CreateCommand())
120 {141 {
121 session.Transaction.Enlist(command);142 session.Transaction.Enlist(command);
143 if (TaskTimeout.HasValue) command.CommandTimeout = TaskTimeout.Value;
122 command.CommandText = batch;144 command.CommandText = batch;
123 command.ExecuteNonQuery();145 command.ExecuteNonQuery();
124 }146 }
125147
=== modified file 'src/DatabaseVersion/Tasks/Sql/ScriptTaskFactory.cs'
--- src/DatabaseVersion/Tasks/Sql/ScriptTaskFactory.cs 2011-10-10 09:00:52 +0000
+++ src/DatabaseVersion/Tasks/Sql/ScriptTaskFactory.cs 2012-08-29 19:06:19 +0000
@@ -7,19 +7,34 @@
7 using System.Xml.Linq;7 using System.Xml.Linq;
8 using System.ComponentModel.Composition;8 using System.ComponentModel.Composition;
99
10 using dbversion.Property;
10 using dbversion.Version;11 using dbversion.Version;
1112
12 [Export(typeof(IDatabaseTaskFactory))]13 [Export(typeof(IDatabaseTaskFactory))]
13 public class ScriptTaskFactory : IDatabaseTaskFactory14 public class ScriptTaskFactory : IDatabaseTaskFactory
14 {15 {
16 [Import]
17 public IPropertyService PropertyService
18 {
19 get;
20 set;
21 }
22
23 [Import]
24 public IMessageService MessageService
25 {
26 get;
27 set;
28 }
29
15 public bool CanCreate(XElement element)30 public bool CanCreate(XElement element)
16 {31 {
17 return element != null && element.Name == "script";32 return element != null && element.Name == "script";
18 }33 }
1934
20 public IDatabaseTask Create(XElement element, int executionOrder, IDatabaseVersion version, IMessageService messageService)35 public IDatabaseTask Create(XElement element, int executionOrder, IDatabaseVersion version)
21 {36 {
22 return new ScriptTask(element.Attribute(XName.Get("file")).Value, executionOrder, version, messageService);37 return new ScriptTask(element.Attribute(XName.Get("file")).Value, executionOrder, version, this.MessageService, this.PropertyService);
23 }38 }
24 }39 }
25}40}

Subscribers

People subscribed via source and target branches

to all changes: