Changeset 375 for trunk/sources/HeuristicLab.CEDMA.DB
- Timestamp:
- 07/09/08 21:37:36 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.CEDMA.DB/Database.cs
r372 r375 32 32 33 33 namespace HeuristicLab.CEDMA.DB { 34 [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode. Single, UseSynchronizationContext = true)]34 [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = false)] 35 35 public class Database : IDatabase { 36 36 private string connectionString; 37 private object bigLock = new object(); 37 38 public Database(string connectionString) { 38 39 this.connectionString = connectionString; 39 40 } 40 41 42 #region create empty database 41 43 public void CreateNew() { 42 using(SQLiteConnection cnn = new SQLiteConnection(connectionString)) { 43 cnn.ConnectionString = connectionString; 44 cnn.Open(); 45 46 SQLiteCommand cAgent = cnn.CreateCommand(); 47 cAgent.CommandText = "CREATE TABLE Agent (ID integer primary key autoincrement, ProjectId integer, Name text, Status text default 'Unknown', RawData Blob)"; 48 SQLiteCommand cProject = cnn.CreateCommand(); 49 cProject.CommandText = "CREATE TABLE Project (ID integer primary key autoincrement, Name text, Description text, CreationDate DateTime)"; 50 SQLiteCommand cResult = cnn.CreateCommand(); 51 cResult.CommandText = "CREATE TABLE Result (ID integer primary key autoincrement, AgentId integer, ParentResultId integer, CreationDate DateTime, RawData Blob)"; 52 cAgent.ExecuteNonQuery(); 53 cProject.ExecuteNonQuery(); 54 cResult.ExecuteNonQuery(); 55 } 56 } 57 58 public long CreateAgent() { 59 using(SQLiteConnection cnn = new SQLiteConnection(connectionString)) { 60 cnn.Open(); 61 SQLiteCommand c = cnn.CreateCommand(); 62 c.CommandText = "Insert into Agent (Name) values (@Name); select last_insert_rowid()"; 63 DbParameter nameParam = c.CreateParameter(); 64 nameParam.ParameterName = "@Name"; 65 nameParam.Value = DateTime.Now.ToString(); 66 c.Parameters.Add(nameParam); 67 long id = (long)c.ExecuteScalar(); 68 return id; 69 } 70 } 71 72 public ICollection<AgentEntry> GetAgentEntries() { 73 List<AgentEntry> agents = new List<AgentEntry>(); 74 using(SQLiteConnection cnn = new SQLiteConnection(connectionString)) { 75 cnn.Open(); 76 SQLiteCommand c = cnn.CreateCommand(); 77 c.CommandText = "Select id, name, status, rawdata from Agent"; 78 SQLiteDataReader r = c.ExecuteReader(); 79 while(r.Read()) { 80 AgentEntry agent = new AgentEntry(r.GetInt32(0), r.GetString(1), (AgentStatus)Enum.Parse(typeof(AgentStatus), r.GetString(2)), (byte[])r.GetValue(3)); 81 agents.Add(agent); 82 } 83 } 84 return agents; 85 } 86 87 public ICollection<AgentEntry> GetAgentEntries(AgentStatus status) { 88 List<AgentEntry> agents = new List<AgentEntry>(); 89 using(SQLiteConnection cnn = new SQLiteConnection(connectionString)) { 90 cnn.Open(); 91 SQLiteCommand c = cnn.CreateCommand(); 92 c.CommandText = "Select id, name, status, rawdata from Agent where Status=@Status"; 93 DbParameter statusParameter = c.CreateParameter(); 94 statusParameter.ParameterName = "@Status"; 95 statusParameter.Value = (int)status; 96 c.Parameters.Add(statusParameter); 97 98 SQLiteDataReader r = c.ExecuteReader(); 99 while(r.Read()) { 100 AgentEntry agent = new AgentEntry(r.GetInt32(0), r.GetString(1), (AgentStatus)Enum.Parse(typeof(AgentStatus), r.GetString(2)), (byte[])r.GetValue(3)); 101 agents.Add(agent); 102 } 103 } 104 return agents; 105 } 106 107 public void Update(AgentEntry entry) { 108 using(SQLiteConnection cnn = new SQLiteConnection(connectionString)) { 109 cnn.Open(); 110 SQLiteCommand c = cnn.CreateCommand(); 111 c.CommandText = "Update Agent set Name=@Name, Status=@Status, RawData=@RawData where id=@Id"; 112 DbParameter nameParam = c.CreateParameter(); 113 DbParameter statusParam = c.CreateParameter(); 114 DbParameter rawDataParam = c.CreateParameter(); 115 DbParameter idParam = c.CreateParameter(); 116 nameParam.ParameterName = "@Name"; 117 nameParam.Value = entry.Name; 118 statusParam.ParameterName = "@Status"; 119 statusParam.Value = entry.Status; 120 rawDataParam.ParameterName = "@RawData"; 121 rawDataParam.Value = entry.RawData; 122 idParam.ParameterName = "@Id"; 123 idParam.Value = entry.Id; 124 c.Parameters.Add(nameParam); 125 c.Parameters.Add(statusParam); 126 c.Parameters.Add(rawDataParam); 127 c.Parameters.Add(idParam); 128 c.ExecuteNonQuery(); 129 } 130 } 131 132 public void Update(ResultEntry result) { 44 lock(bigLock) { 45 using(DbConnection cnn = new SQLiteConnection(connectionString)) { 46 cnn.Open(); 47 using(DbTransaction t = cnn.BeginTransaction()) { 48 using(DbCommand cmd = cnn.CreateCommand()) { 49 cmd.CommandText = "CREATE TABLE Project (ID integer primary key autoincrement, Name text, Description text, CreationTime DateTime)"; 50 cmd.Transaction = t; 51 cmd.ExecuteNonQuery(); 52 } 53 using(DbCommand cmd = cnn.CreateCommand()) { 54 cmd.CommandText = "CREATE TABLE Agent (ID integer primary key autoincrement, ProjectId integer, Name text, Status text default 'Unknown', RawData Blob)"; 55 cmd.Transaction = t; 56 cmd.ExecuteNonQuery(); 57 } 58 using(DbCommand cmd = cnn.CreateCommand()) { 59 cmd.CommandText = "CREATE TABLE Run (ID integer primary key autoincrement, AgentId integer, CreationTime DateTime, StartTime DateTime, FinishedTime DateTime, Status text default 'Unknown', RawData Blob)"; 60 cmd.Transaction = t; 61 cmd.ExecuteNonQuery(); 62 } 63 using(DbCommand cmd = cnn.CreateCommand()) { 64 cmd.CommandText = "CREATE TABLE Result (ID integer primary key autoincrement, RunId integer, ResultId integer, CreationTime DateTime, RawData Blob)"; 65 cmd.Transaction = t; 66 cmd.ExecuteNonQuery(); 67 } 68 t.Commit(); 69 } 70 } 71 } 72 } 73 #endregion 74 75 #region insert agent/run/result/sub-result 76 public long InsertAgent(string name, byte[] rawData) { 77 lock(bigLock) { 78 using(DbConnection cnn = new SQLiteConnection(connectionString)) { 79 cnn.Open(); 80 long id; 81 using(DbTransaction t = cnn.BeginTransaction()) { 82 using(DbCommand c = cnn.CreateCommand()) { 83 c.Transaction = t; 84 c.CommandText = "Insert into Agent (Name, RawData) values (@Name, @RawData); select last_insert_rowid()"; 85 DbParameter nameParam = c.CreateParameter(); 86 nameParam.ParameterName = "@Name"; 87 nameParam.Value = name; 88 c.Parameters.Add(nameParam); 89 DbParameter dataParam = c.CreateParameter(); 90 dataParam.ParameterName = "@RawData"; 91 dataParam.Value = rawData; 92 c.Parameters.Add(dataParam); 93 id = (long)c.ExecuteScalar(); 94 } 95 t.Commit(); 96 return id; 97 } 98 } 99 } 100 } 101 102 public long InsertRun(long agentId, byte[] rawData) { 103 lock(bigLock) { 104 using(SQLiteConnection cnn = new SQLiteConnection(connectionString)) { 105 cnn.Open(); 106 long id; 107 using(DbTransaction t = cnn.BeginTransaction()) { 108 using(DbCommand c = cnn.CreateCommand()) { 109 c.Transaction = t; 110 c.CommandText = "Insert into Run (AgentId, CreationTime, RawData) values (@AgentId, @CreationTime, @RawData); select last_insert_rowid()"; 111 DbParameter agentIdParam = c.CreateParameter(); 112 agentIdParam.ParameterName = "@AgentId"; 113 agentIdParam.Value = agentId; 114 c.Parameters.Add(agentIdParam); 115 DbParameter creationParam = c.CreateParameter(); 116 creationParam.ParameterName = "@CreationTime"; 117 DateTime now = DateTime.Now; 118 creationParam.Value = now; 119 c.Parameters.Add(creationParam); 120 DbParameter rawDataParam = c.CreateParameter(); 121 rawDataParam.ParameterName = "@RawData"; 122 rawDataParam.Value = rawData; 123 c.Parameters.Add(rawDataParam); 124 id = (long)c.ExecuteScalar(); 125 } 126 t.Commit(); 127 return id; 128 } 129 } 130 } 131 } 132 133 public long InsertResult(long runId, byte[] rawData) { 134 lock(bigLock) { 135 using(SQLiteConnection cnn = new SQLiteConnection(connectionString)) { 136 cnn.Open(); 137 long id; 138 using(DbTransaction t = cnn.BeginTransaction()) { 139 using(DbCommand c = cnn.CreateCommand()) { 140 c.Transaction = t; 141 c.CommandText = "Insert into Result (RunId, CreationTime, RawData) values (@RunId, @CreationTime, @RawData); select last_insert_rowid()"; 142 DbParameter runIdParam = c.CreateParameter(); 143 runIdParam.ParameterName = "@RunId"; 144 runIdParam.Value = runId; 145 c.Parameters.Add(runIdParam); 146 DbParameter creationParam = c.CreateParameter(); 147 creationParam.ParameterName = "@CreationTime"; 148 DateTime now = DateTime.Now; 149 creationParam.Value = now; 150 c.Parameters.Add(creationParam); 151 DbParameter rawDataParam = c.CreateParameter(); 152 rawDataParam.ParameterName = "@RawData"; 153 rawDataParam.Value = rawData; 154 c.Parameters.Add(rawDataParam); 155 id = (long)c.ExecuteScalar(); 156 } 157 t.Commit(); 158 return id; 159 } 160 } 161 } 162 } 163 164 public long InsertSubResult(long resultId, byte[] rawData) { 165 lock(bigLock) { 166 167 using(SQLiteConnection cnn = new SQLiteConnection(connectionString)) { 168 cnn.Open(); 169 long id; 170 using(DbTransaction t = cnn.BeginTransaction()) { 171 using(DbCommand c = cnn.CreateCommand()) { 172 c.Transaction = t; 173 c.CommandText = "Insert into Result (ResultId, CreationTime, RawData) values (@ResultId, @CreationTime, @RawData); select last_insert_rowid()"; 174 DbParameter resultIdParam = c.CreateParameter(); 175 resultIdParam.ParameterName = "@ResultId"; 176 resultIdParam.Value = resultId; 177 c.Parameters.Add(resultIdParam); 178 DbParameter creationParam = c.CreateParameter(); 179 creationParam.ParameterName = "@CreationTime"; 180 DateTime now = DateTime.Now; 181 creationParam.Value = now; 182 c.Parameters.Add(creationParam); 183 DbParameter rawDataParam = c.CreateParameter(); 184 rawDataParam.ParameterName = "@RawData"; 185 rawDataParam.Value = rawData; 186 c.Parameters.Add(rawDataParam); 187 id = (long)c.ExecuteScalar(); 188 } 189 t.Commit(); 190 return id; 191 } 192 } 193 } 194 } 195 #endregion 196 197 #region update agent/run 198 public void UpdateAgent(long id, string name) { 199 lock(bigLock) { 200 using(SQLiteConnection cnn = new SQLiteConnection(connectionString)) { 201 cnn.Open(); 202 using(SQLiteTransaction t = cnn.BeginTransaction()) { 203 using(SQLiteCommand c = cnn.CreateCommand()) { 204 c.Transaction = t; 205 c.CommandText = "Update Agent set Name=@Name where id=@Id"; 206 DbParameter nameParam = c.CreateParameter(); 207 DbParameter idParam = c.CreateParameter(); 208 nameParam.ParameterName = "@Name"; 209 nameParam.Value = name; 210 idParam.ParameterName = "@Id"; 211 idParam.Value = id; 212 c.Parameters.Add(nameParam); 213 c.Parameters.Add(idParam); 214 c.ExecuteNonQuery(); 215 } 216 t.Commit(); 217 } 218 } 219 } 220 } 221 222 public void UpdateAgent(long id, ProcessStatus status) { 223 lock(bigLock) { 224 using(SQLiteConnection cnn = new SQLiteConnection(connectionString)) { 225 cnn.Open(); 226 using(SQLiteTransaction t = cnn.BeginTransaction()) { 227 using(SQLiteCommand c = cnn.CreateCommand()) { 228 c.Transaction = t; 229 c.CommandText = "Update Agent set Status=@Status where id=@Id"; 230 DbParameter statusParam = c.CreateParameter(); 231 DbParameter idParam = c.CreateParameter(); 232 statusParam.ParameterName = "@Status"; 233 statusParam.Value = status; 234 idParam.ParameterName = "@Id"; 235 idParam.Value = id; 236 c.Parameters.Add(statusParam); 237 c.Parameters.Add(idParam); 238 c.ExecuteNonQuery(); 239 } 240 t.Commit(); 241 } 242 } 243 } 244 } 245 246 public void UpdateAgent(long id, byte[] rawData) { 247 lock(bigLock) { 248 using(SQLiteConnection cnn = new SQLiteConnection(connectionString)) { 249 cnn.Open(); 250 using(SQLiteTransaction t = cnn.BeginTransaction()) { 251 using(SQLiteCommand c = cnn.CreateCommand()) { 252 c.Transaction = t; 253 c.CommandText = "Update Agent set RawData=@RawData where id=@Id"; 254 DbParameter rawDataParam = c.CreateParameter(); 255 DbParameter idParam = c.CreateParameter(); 256 rawDataParam.ParameterName = "@RawData"; 257 rawDataParam.Value = rawData; 258 idParam.ParameterName = "@Id"; 259 idParam.Value = id; 260 c.Parameters.Add(rawDataParam); 261 c.Parameters.Add(idParam); 262 c.ExecuteNonQuery(); 263 } 264 t.Commit(); 265 } 266 } 267 } 268 } 269 270 public void UpdateRunStart(long runId, DateTime startTime) { 271 lock(bigLock) { 272 using(SQLiteConnection cnn = new SQLiteConnection(connectionString)) { 273 cnn.Open(); 274 using(SQLiteTransaction t = cnn.BeginTransaction()) { 275 using(SQLiteCommand c = cnn.CreateCommand()) { 276 c.Transaction = t; 277 c.CommandText = "Update Run set StartTime=@StartTime where id=@Id"; 278 DbParameter startTimeParam = c.CreateParameter(); 279 DbParameter idParam = c.CreateParameter(); 280 startTimeParam.ParameterName = "@StartTime"; 281 startTimeParam.Value = startTime; 282 idParam.ParameterName = "@Id"; 283 idParam.Value = runId; 284 c.Parameters.Add(startTimeParam); 285 c.Parameters.Add(idParam); 286 c.ExecuteNonQuery(); 287 } 288 t.Commit(); 289 } 290 } 291 } 292 } 293 294 public void UpdateRunFinished(long runId, DateTime finishedTime) { 295 lock(bigLock) { 296 using(SQLiteConnection cnn = new SQLiteConnection(connectionString)) { 297 cnn.Open(); 298 using(SQLiteTransaction t = cnn.BeginTransaction()) { 299 using(SQLiteCommand c = cnn.CreateCommand()) { 300 c.Transaction = t; 301 c.CommandText = "Update Run set FinishedTime=@FinishedTime where id=@Id"; 302 DbParameter finishedTimeParam = c.CreateParameter(); 303 DbParameter idParam = c.CreateParameter(); 304 finishedTimeParam.ParameterName = "@FinishedTime"; 305 finishedTimeParam.Value = finishedTime; 306 idParam.ParameterName = "@Id"; 307 idParam.Value = runId; 308 c.Parameters.Add(finishedTimeParam); 309 c.Parameters.Add(idParam); 310 c.ExecuteNonQuery(); 311 } 312 t.Commit(); 313 } 314 } 315 } 316 } 317 318 public void UpdateRunStatus(long runId, ProcessStatus status) { 319 lock(bigLock) { 320 using(SQLiteConnection cnn = new SQLiteConnection(connectionString)) { 321 cnn.Open(); 322 using(SQLiteTransaction t = cnn.BeginTransaction()) { 323 using(SQLiteCommand c = cnn.CreateCommand()) { 324 c.Transaction = t; 325 c.CommandText = "Update Run set Status=@Status where id=@Id"; 326 DbParameter statusParam = c.CreateParameter(); 327 DbParameter idParam = c.CreateParameter(); 328 statusParam.ParameterName = "@Status"; 329 statusParam.Value = status; 330 idParam.ParameterName = "@Id"; 331 idParam.Value = runId; 332 c.Parameters.Add(statusParam); 333 c.Parameters.Add(idParam); 334 c.ExecuteNonQuery(); 335 } 336 t.Commit(); 337 } 338 } 339 } 340 } 341 342 343 344 #endregion 345 346 347 #region get agent/run/result/sub-result 348 349 public ICollection<AgentEntry> GetAgents(ProcessStatus status) { 350 lock(bigLock) { 351 List<AgentEntry> agents = new List<AgentEntry>(); 352 using(SQLiteConnection cnn = new SQLiteConnection(connectionString)) { 353 cnn.Open(); 354 SQLiteCommand c = cnn.CreateCommand(); 355 c.CommandText = "Select id, name, status, rawdata from Agent where Status=@Status"; 356 DbParameter statusParameter = c.CreateParameter(); 357 statusParameter.ParameterName = "@Status"; 358 statusParameter.Value = status; 359 c.Parameters.Add(statusParameter); 360 361 SQLiteDataReader r = c.ExecuteReader(); 362 while(r.Read()) { 363 AgentEntry agent = new AgentEntry(); 364 agent.Id = r.GetInt32(0); 365 agent.Name = r.GetString(1); 366 agent.Status = (ProcessStatus)Enum.Parse(typeof(ProcessStatus), r.GetString(2)); 367 agent.RawData = (byte[])r.GetValue(3); 368 agents.Add(agent); 369 } 370 } 371 return agents; 372 } 373 } 374 375 public ICollection<AgentEntry> GetAgents() { 376 lock(bigLock) { 377 List<AgentEntry> agents = new List<AgentEntry>(); 378 using(DbConnection cnn = new SQLiteConnection(connectionString)) { 379 cnn.Open(); 380 using(DbCommand c = cnn.CreateCommand()) { 381 c.CommandText = "Select id, name, status, rawdata from Agent"; 382 using(DbDataReader r = c.ExecuteReader()) { 383 while(r.Read()) { 384 AgentEntry agent = new AgentEntry(); 385 agent.Id = r.GetInt32(0); 386 agent.Name = r.GetString(1); 387 agent.Status = (ProcessStatus)Enum.Parse(typeof(ProcessStatus), r.GetString(2)); 388 agent.RawData = (byte[])r.GetValue(3); 389 agents.Add(agent); 390 } 391 } 392 } 393 } 394 return agents; 395 } 396 } 397 398 //(ID integer primary key autoincrement, AgentId integer, CreationTime DateTime, StartTime DateTime, FinishedTime DateTime, Status text default 'Unknown', RawData Blob)"; 399 400 public ICollection<RunEntry> GetRuns() { 401 lock(bigLock) { 402 List<RunEntry> runs = new List<RunEntry>(); 403 using(DbConnection cnn = new SQLiteConnection(connectionString)) { 404 cnn.Open(); 405 using(DbCommand c = cnn.CreateCommand()) { 406 c.CommandText = "Select Id, AgentId, CreationTime, StartTime, FinishedTime, Status, Rawdata from Run"; 407 using(DbDataReader r = c.ExecuteReader()) { 408 while(r.Read()) { 409 RunEntry run = new RunEntry(); 410 run.Id = r.GetInt32(0); 411 run.AgentId = r.GetInt32(1); 412 run.CreationTime = r.GetDateTime(2); 413 run.StartTime = r.GetDateTime(3); 414 run.FinishedTime = r.GetDateTime(4); 415 run.Status = (ProcessStatus)Enum.Parse(typeof(ProcessStatus), r.GetString(5)); 416 run.RawData = (byte[])r.GetValue(6); 417 runs.Add(run); 418 } 419 } 420 } 421 } 422 return runs; 423 } 424 } 425 426 public ICollection<RunEntry> GetRuns(ProcessStatus status) { 427 lock(bigLock) { 428 List<RunEntry> runs = new List<RunEntry>(); 429 using(DbConnection cnn = new SQLiteConnection(connectionString)) { 430 cnn.Open(); 431 using(DbCommand c = cnn.CreateCommand()) { 432 c.CommandText = "Select Id, AgentId, CreationTime, StartTime, FinishedTime, Status, Rawdata from Run where Status=@Status"; 433 DbParameter statusParameter = c.CreateParameter(); 434 statusParameter.ParameterName = "@Status"; 435 statusParameter.Value = status; 436 c.Parameters.Add(statusParameter); 437 438 using(DbDataReader r = c.ExecuteReader()) { 439 while(r.Read()) { 440 RunEntry run = new RunEntry(); 441 run.Id = r.GetInt32(0); 442 run.AgentId = r.GetInt32(1); 443 run.CreationTime = r.GetDateTime(2); 444 run.StartTime = r.IsDBNull(3)? null : new Nullable<DateTime>(r.GetDateTime(3)); 445 run.FinishedTime = r.IsDBNull(4) ? null:new Nullable<DateTime>(r.GetDateTime(4)); 446 run.Status = (ProcessStatus)Enum.Parse(typeof(ProcessStatus), r.GetString(5)); 447 run.RawData = (byte[])r.GetValue(6); 448 runs.Add(run); 449 } 450 } 451 } 452 } 453 return runs; 454 } 455 } 456 457 // (ID integer primary key autoincrement, RunId integer, ResultId integer, CreationTime DateTime, RawData Blob)"; 458 public ICollection<ResultEntry> GetResults(long runId) { 459 lock(bigLock) { 460 List<ResultEntry> results = new List<ResultEntry>(); 461 using(DbConnection cnn = new SQLiteConnection(connectionString)) { 462 cnn.Open(); 463 using(DbCommand c = cnn.CreateCommand()) { 464 c.CommandText = "Select Id, RunId, CreationTime, Rawdata from Result"; 465 using(DbDataReader r = c.ExecuteReader()) { 466 while(r.Read()) { 467 ResultEntry result = new ResultEntry(); 468 result.Id = r.GetInt32(0); 469 result.RunId = r.GetInt32(1); 470 result.CreationTime = r.GetDateTime(2); 471 result.RawData = (byte[])r.GetValue(3); 472 results.Add(result); 473 } 474 } 475 } 476 } 477 return results; 478 } 479 } 480 481 public ICollection<ResultEntry> GetSubResults(long resultId) { 133 482 throw new NotImplementedException(); 134 483 } 484 #endregion 135 485 } 136 486 }
Note: See TracChangeset
for help on using the changeset viewer.