/[xmltv_parser]/trunk/GBPVRProgramDatabaseFixer/SQLLITE.cs
ViewVC logotype

Diff of /trunk/GBPVRProgramDatabaseFixer/SQLLITE.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 157 by william, Thu Mar 14 19:36:01 2013 UTC revision 177 by william, Sat Mar 16 16:52:43 2013 UTC
# Line 6  using System.Text; Line 6  using System.Text;
6  using System.Data.SQLite;  using System.Data.SQLite;
7  using System.Diagnostics;  using System.Diagnostics;
8  using Enterprise.Logging;  using Enterprise.Logging;
9    using libxmltv;
10    using libxmltv.Interfaces;
11    using libxmltv.Core;
12  namespace GBPVRProgramDatabaseFixer  namespace GBPVRProgramDatabaseFixer
13  {  {
14      internal class SQLLITE      public interface ISQLLITE
15        {
16            List<SQLLITE.IPROGRAMME> Programs { get; }
17            List<SQLLITE.IRECORDING_SCHEDULE> Recordings { get; }
18            List<SQLLITE.ICHANNEL> Channels { get; }
19            IDateTimeRange GetProgramsDateRange(List<SQLLITE.IPROGRAMME> programs);
20            List<SQLLITE.IPROGRAMME> FixGBPVRProgramsDatabase(List<SQLLITE.IPROGRAMME> gbpvr_programs, List<libxmltv.Interfaces.IProgramDefinition> xmltv_programs, out List<SQLLITE.IPROGRAMME> removed_programs);
21    
22        }
23        public class SQLLITE : ISQLLITE
24      {      {
25            private struct OldNewProgram
26            {
27                public IPROGRAMME OldProgram;
28                public IPROGRAMME NewProgram;
29            }
30            public static ISQLLITE Create(string database, EventHandler<EventArgs> OnInstanceCreated)
31            {
32                return new SQLLITE(database, OnInstanceCreated);
33            }
34    
35          #region DATABASE DEFINITIONS          #region DATABASE DEFINITIONS
36    
37            public interface ICHANNEL
38            {
39                Int64 oid { get; }
40                String name { get; }
41                String channelID { get; }
42                Int64 channel_number { get; }
43                String favourite_channel { get; }
44                String display_name { get; }
45            }
46            private class CHANNEL : ICHANNEL
47            {
48                public CHANNEL()
49                {
50                    BaseDatabaseDefinition<CHANNEL>.CreateDefault(this);
51                }
52                //public RECORDING_SCHEDULE(SQLiteDataReader r, int index) { BaseDatabaseDefinition<RECORDING_SCHEDULE>.Create(this, r, index); }
53    
54                public static void Create(ref CHANNEL instance, SQLiteDataReader r, int index)
55                {
56                    BaseDatabaseDefinition<CHANNEL>.Create(ref instance, r, index);
57                }
58                #region ICHANNEL members
59                public Int64 oid { get; set; }
60                public String name { get; set; }
61                public String channelID { get; set; }
62                public Int64 channel_number { get; set; }
63                public String favourite_channel { get; set; }
64                public String display_name { get; set; }
65                #endregion
66            }
67          public interface IRECORDING_SCHEDULE          public interface IRECORDING_SCHEDULE
68          {          {
69              Int64 oid { get; }              Int64 oid { get; }
# Line 144  namespace GBPVRProgramDatabaseFixer Line 196  namespace GBPVRProgramDatabaseFixer
196    
197          public interface IPROGRAMME          public interface IPROGRAMME
198          {          {
199              Int64 oid { get; }              Int64 oid { get; set; }
200              String name { get; }              String name { get; set; }
201              String sub_title { get; }              String sub_title { get; set; }
202              String description { get; }              String description { get; set; }
203              DateTime start_time { get; }              DateTime start_time { get; set; }
204              DateTime end_time { get; }              DateTime end_time { get; set; }
205              Int64 channel_oid { get; }              Int64 channel_oid { get; set; }
206              String unique_identifier { get; }              String unique_identifier { get; set; }
207              String rating { get; }              String rating { get; set; }
208    
209                IProgramDefinition AsXMLTVProgramDefinition(ISQLLITE sqllite);
210          }          }
211          private class PROGRAMME : IPROGRAMME          private class PROGRAMME : IPROGRAMME
212          {          {
# Line 175  namespace GBPVRProgramDatabaseFixer Line 229  namespace GBPVRProgramDatabaseFixer
229              public Int64 channel_oid { get; set; }              public Int64 channel_oid { get; set; }
230              public String unique_identifier { get; set; }              public String unique_identifier { get; set; }
231              public String rating { get; set; }              public String rating { get; set; }
232                public IProgramDefinition AsXMLTVProgramDefinition(ISQLLITE sqllite)
233                {
234                    ProgramList.ProgramDefintion definition = new ProgramList.ProgramDefintion();
235                    var channel = sqllite.Channels.Find(s => s.oid == this.channel_oid);
236                    definition.ChannelName = channel.display_name;
237                    definition.ChannelNumber = (int)channel.channel_number;
238                    definition.Description = this.description;
239                    definition.Start = this.start_time.ToDateTimeString();
240                    definition.Stop = this.end_time.ToDateTimeString();
241                    definition.SubTitle = this.sub_title;
242                    definition.Title = this.name;
243                    return definition;
244                }
245              #endregion              #endregion
246          }          }
247          #endregion          #endregion
# Line 182  namespace GBPVRProgramDatabaseFixer Line 249  namespace GBPVRProgramDatabaseFixer
249          {          {
250              public const string RECORDING_SCHEDULE = "RECORDING_SCHEDULE";              public const string RECORDING_SCHEDULE = "RECORDING_SCHEDULE";
251              public const string PROGRAMME = "PROGRAMME";              public const string PROGRAMME = "PROGRAMME";
252                public const string CHANNEL = "CHANNEL";
253          }          }
254    
255          //public SQLLite() { }          //public SQLLite() { }
256          public SQLLITE(string database, EventHandler<EventArgs> OnInstanceCreated)          protected SQLLITE(string database, EventHandler<EventArgs> OnInstanceCreated)
257          {          {
258              this.OnInstanceCreated = OnInstanceCreated;              this.OnInstanceCreated = OnInstanceCreated;
259              //CreateConnection(database);              //CreateConnection(database);
# Line 196  namespace GBPVRProgramDatabaseFixer Line 264  namespace GBPVRProgramDatabaseFixer
264                  return;                  return;
265              }              }
266              ConnectionTest();              ConnectionTest();
267                ReadChannelData();
268              ReadRecodringScheduleData();              ReadRecodringScheduleData();
269              ReadProgrammeData();              ReadProgrammeData();
270              OnCreatedInstance(this, new EventArgs());              OnCreatedInstance(this, new EventArgs());
# Line 210  namespace GBPVRProgramDatabaseFixer Line 279  namespace GBPVRProgramDatabaseFixer
279              if (OnInstanceCreated != null) { OnInstanceCreated.Invoke(sender, e); }              if (OnInstanceCreated != null) { OnInstanceCreated.Invoke(sender, e); }
280          }          }
281    
         #region SQLLite  
282          private string Database;          private string Database;
283            #region ISQLLITE members        
284          public List<IPROGRAMME> Programs { get; private set; }          public List<IPROGRAMME> Programs { get; private set; }
285          public List<IRECORDING_SCHEDULE> Recordings { get; private set; }          public List<IRECORDING_SCHEDULE> Recordings { get; private set; }
286            public List<ICHANNEL> Channels { get; private set; }
287    
288            public IDateTimeRange GetProgramsDateRange(List<SQLLITE.IPROGRAMME> programs)
289            {
290                var list = new List<IPROGRAMME>(programs.ToArray());
291                DateTime first = new DateTime();
292                DateTime last = new DateTime();
293                first = list.OrderBy(s => s.start_time).ToList().First().start_time;            
294                last = list.OrderBy(s => s.start_time).ToList().Last().start_time;
295                gLog.Verbose.Debug.WriteLine("\tFirst: {0} = ({1})", first.ToString("yyyy/MM/dd HH:mm:ss.fffffff"), first.ToDateTimeString());
296                gLog.Verbose.Debug.WriteLine("\tLast: {0} = ({1})", last.ToString("yyyy/MM/dd HH:mm:ss.fffffff"), last.ToDateTimeString());
297                var range = DateTimeRange.Create(first, last);
298                return range;
299            }
300    
301            public List<SQLLITE.IPROGRAMME> FixGBPVRProgramsDatabase(List<SQLLITE.IPROGRAMME> gbpvr_programs, List<libxmltv.Interfaces.IProgramDefinition> xmltv_programs, out List<SQLLITE.IPROGRAMME> source_invalid)
302            {
303                source_invalid = new List<IPROGRAMME>();
304                gbpvr_programs = gbpvr_programs.OrderBy(s => s.start_time).ToList();            
305                List<SQLLITE.IPROGRAMME> source_valid = new List<IPROGRAMME>();
306    
307                List<OldNewProgram> source_update = new List<OldNewProgram>();
308                //if (range == null)
309                //{
310                //    gLog.Warn.WriteLine("The DateTimeRange passed in is null...returning the original program list");
311                //    return list;
312                //}
313                //gLog.Warn.WriteLine("FilterProgramsByDateRange has not been implemented");
314                
315                double total = gbpvr_programs.Count;
316                double index = 0;
317                double progress = 0;
318                foreach (var program in gbpvr_programs)
319                {  
320                    progress = 100.0 * (index / total);
321                    gLog.ReportProgress(this, new ReportProgressEventArgs((int)progress, string.Format("Filtering GBPVR Programs: {0:00}%", (int)progress)));                
322                    var channel_oid = program.channel_oid;
323                    var channel = this.Channels.Find(s => s.oid == channel_oid);
324                    var start_date = program.start_time;
325                    //var xmltv_entry_list = xmltv_programs.FindAll(s => s.ChannelNumber == channel.channel_number && s.Start == start_date.ToDateTimeString());
326                    var query = from c in xmltv_programs
327                                where
328                                c.ChannelNumber == channel.channel_number &&
329                                c.Start == start_date.ToDateTimeString()
330                                select c;
331    
332                    IProgramDefinition xmltv_entry = null;
333                    if (query.Count()-1 > 0)
334                    {
335                        gLog.Error.WriteLine("Found more than one entry: Matching channel='{0}' and start='{1}'", channel.channel_number, start_date.ToDateTimeString());
336                        gLog.Error.WriteLine("    GB-PVR Program Data: oid='{0}' channel_oid='{1}' name='{2}' sub_title='{3}' description='{4}'", program.oid, program.channel_oid, program.name, program.sub_title, program.description);
337                        if (Debugger.IsAttached)
338                        {                      
339                            gLog.Error.WriteLine("    Found: {0} matching entries", query.Count());
340                            int k_index = 0;
341                            foreach (var k in query)
342                            {
343                                gLog.Error.WriteLine("    query[{0}]: channel='{1}' start='{2}' ('{3}') title='{4}' subtitle='{5}' description='{6}'", k_index, k.ChannelNumber, k.Start, DateTime.Parse(k.Start).ToString("yyyy/MM/dd HH:mm:ss.fffffff"), k.Title, k.SubTitle, k.Description);
344                                k_index++;
345                            }
346                            Debugger.Break();
347                        }
348                    }
349                    else
350                    {
351                        xmltv_entry = query.FirstOrDefault();
352                    }
353    
354                    if (xmltv_entry == null)
355                    {
356                        gLog.Verbose.Warn.WriteLine("Invalidating GB-PVR Program: oid='{0}' channel_oid='{1}' title='{2}' start='{3}'", program.oid, program.channel_oid, program.name, program.start_time.ToDateTimeString());
357                        source_invalid.Add(program);                  
358                    }
359                    else
360                    {
361                        gLog.Verbose.Warn.WriteLine("Updating GB-PVR Program (if needed): oid='{0}' channel_oid='{1}' title='{2}' subtitle='{3}' start='{4}'", program.oid, program.channel_oid, program.name, program.sub_title, program.start_time.ToDateTimeString());
362                        var updated_program = program;
363                        bool needsupdate = false;
364                        if (xmltv_entry.Title != program.name)
365                        {
366                            gLog.Verbose.Warn.WriteLine("    Updating:");
367                            gLog.Verbose.Warn.WriteLine("        Old Title: {0}", program.name);
368                            gLog.Verbose.Warn.WriteLine("        New Title: {0}", xmltv_entry.Title);
369                            updated_program.name = xmltv_entry.Title;
370                            needsupdate = true;
371                        }
372                        if (xmltv_entry.SubTitle != program.sub_title)
373                        {
374                            gLog.Verbose.Warn.WriteLine("    Updating:");
375                            gLog.Verbose.Warn.WriteLine("        Old SubTile: {0}", program.sub_title);
376                            gLog.Verbose.Warn.WriteLine("        New SubTile: {0}", xmltv_entry.SubTitle);
377                            updated_program.sub_title = xmltv_entry.SubTitle;
378                            needsupdate = true;
379                        }
380                        if (xmltv_entry.Description != program.description)
381                        {
382                            gLog.Verbose.Warn.WriteLine("    Updating:");
383                            gLog.Verbose.Warn.WriteLine("        Old Descption: {0}", program.description);
384                            gLog.Verbose.Warn.WriteLine("        New Descption: {0}", xmltv_entry.Description);
385                            updated_program.description = xmltv_entry.Description;
386                            needsupdate = true;
387                        }
388                        if (DateTime.Parse(xmltv_entry.Start) != program.start_time)
389                        {
390                            gLog.Verbose.Warn.WriteLine("    Updating:");
391                            gLog.Verbose.Warn.WriteLine("        Old StartTime: {0}", program.start_time.ToDateTimeString());
392                            gLog.Verbose.Warn.WriteLine("        New StartTime: {0}", DateTime.Parse(xmltv_entry.Start).ToDateTimeString());
393                            updated_program.start_time = DateTime.Parse(xmltv_entry.Start);
394                            needsupdate = true;
395                        }
396                        if (DateTime.Parse(xmltv_entry.Stop) != program.end_time)
397                        {
398                            gLog.Verbose.Warn.WriteLine("    Updating:");
399                            gLog.Verbose.Warn.WriteLine("        Old EndTime: {0}", program.end_time.ToDateTimeString());
400                            gLog.Verbose.Warn.WriteLine("        New EndTime: {0}", DateTime.Parse(xmltv_entry.Stop).ToDateTimeString());
401                            updated_program.end_time = DateTime.Parse(xmltv_entry.Stop);
402                            needsupdate = true;
403                        }
404                        
405                        if (needsupdate)
406                        {
407                            //// update database entry
408                            //if (!UpdateProgramDatabaseEntry(program, updated_program))
409                            //{
410                            //    gLog.Error.WriteLine("Failed to update entry with oid: '{0}'", program.oid);
411                            //}
412                            OldNewProgram p = new OldNewProgram();
413                            p.OldProgram = program;
414                            p.NewProgram = updated_program;
415                            source_update.Add(p);
416                        }
417                        source_valid.Add(updated_program);
418                    }
419                    index++;
420                }
421    
422    
423                source_valid = source_valid.OrderBy(s => s.channel_oid).ThenBy(s => s.start_time).ToList();
424                source_invalid = source_invalid.OrderBy(s => s.channel_oid).ThenBy(s => s.start_time).ToList();
425    
426                if (source_invalid.Count > 0)
427                {
428                    double source_invalid_count = source_valid.Count;
429                    double source_invalid_index = 0;
430                    double source_invalid_progress = 0;
431                    foreach (var old_program in source_invalid)
432                    {
433                        source_invalid_progress = 100.0 * (source_invalid_index / source_invalid_count);
434                        gLog.ReportProgress(this, new ReportProgressEventArgs((int)progress, string.Format("Removing old GBPVR Programs: {0:00}%", (int)source_invalid_progress)));    
435                        // remove database entry
436                        if (!RemoveProgramDatabaseEntry(old_program))
437                        {
438                            gLog.Error.WriteLine("Failed to remove program with oid: '{0}'", old_program.oid);
439                        }
440                        else
441                        {
442                            gLog.Verbose.Info.WriteLine("Removed program with oid: '{0}'", old_program.oid);
443                        }
444                        source_invalid_index++;
445                    }
446                }
447                else
448                {
449                    gLog.Info.WriteLine("No old GB-PVR Programs needed to be removed.");
450                }
451    
452                if (source_update.Count > 0)
453                {
454                    double source_update_count = source_valid.Count;
455                    double source_update_index = 0;
456                    double source_update_progress = 0;
457                    foreach (var p in source_update)
458                    {
459                        source_update_progress = 100.0 * (source_update_index / source_update_count);
460                        gLog.ReportProgress(this, new ReportProgressEventArgs((int)progress, string.Format("Updating GBPVR Programs: {0:00}%", (int)source_update_progress)));    
461                        // remove database entry
462                        if (!UpdateProgramDatabaseEntry(p.OldProgram,p.NewProgram))
463                        {
464                            gLog.Error.WriteLine("Failed to update program with oid: '{0}'", p.OldProgram.oid);
465                        }
466                        else
467                        {
468                            gLog.Verbose.Info.WriteLine("Upated program with oid: '{0}'", p.OldProgram.oid);
469                        }
470                        source_update_index++;
471                    }
472                }
473                else
474                {
475                    gLog.Info.WriteLine("No GB-PVR Programs needed to be updated.");
476                }
477    
478                gLog.Info.WriteLine("Total XMLTV Programs: 0x{0:x8}", xmltv_programs.Count);
479                gLog.Info.WriteLine("Updated: 0x{0:x8} GB-PVR Programs", source_valid.Count);
480                gLog.Info.WriteLine("Removed: 0x{0:x8} GB-PVR Programs", source_invalid.Count);
481                gLog.Info.WriteLine("Total GB-PVR Programs (Updated & Removed): 0x{0:x8}", source_valid.Count + source_invalid.Count);
482    
483                return source_valid;
484            }
485          #endregion          #endregion
486    
487    
# Line 233  namespace GBPVRProgramDatabaseFixer Line 501  namespace GBPVRProgramDatabaseFixer
501                  using (SQLiteConnection con = CreateConnection())                  using (SQLiteConnection con = CreateConnection())
502                  {                  {
503                      con.Open();                      con.Open();
504                      string command_text = string.Format("select * from {0};", TABLES.PROGRAMME);                      string command_text = string.Format("select * from {0};", TABLES.CHANNEL);
505                      gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);                      gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);
506                      using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))                      using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))
507                      {                      {
# Line 288  namespace GBPVRProgramDatabaseFixer Line 556  namespace GBPVRProgramDatabaseFixer
556                  return false;                  return false;
557              }              }
558          }          }
559            private void ReadChannelData()
560            {
561                try
562                {
563                    List<ICHANNEL> channels = new List<ICHANNEL>();
564                    using (SQLiteConnection con = CreateConnection())
565                    {
566                        con.Open();
567                        string command_text = string.Format("select * from {0};", TABLES.CHANNEL);
568                        gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);
569                        using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))
570                        {
571                            using (SQLiteDataReader r = cmd.ExecuteReader())
572                            {
573                                if (!r.HasRows)
574                                {
575                                    gLog.Warn.WriteLine("Query: '{0}' returned no rows.", cmd.CommandText);
576                                }
577                                else
578                                {
579                                    while (r.Read())
580                                    {
581                                        CHANNEL channel = new CHANNEL();
582                                        for (int i = 0; i < r.FieldCount; i++)
583                                        {
584                                            CHANNEL.Create(ref channel, r, i);
585                                        }
586                                        channels.Add(channel);
587                                    }
588                                }
589                            }
590                        }
591                        con.Clone();
592                    }
593                    this.Channels = channels;
594                }
595                catch (Exception ex)
596                {
597                    gLog.Error.WriteLine(ex.ToString());
598                }
599            }
600          private void ReadProgrammeData()          private void ReadProgrammeData()
601          {          {
602              try              try
# Line 357  namespace GBPVRProgramDatabaseFixer Line 665  namespace GBPVRProgramDatabaseFixer
665                                      {                                      {
666                                          RECORDING_SCHEDULE.Create(ref recording, r, i);                                          RECORDING_SCHEDULE.Create(ref recording, r, i);
667                                      }                                      }
   
668                                      recordings.Add(recording);                                      recordings.Add(recording);
669                                  }                                  }
670                              }                              }
# Line 372  namespace GBPVRProgramDatabaseFixer Line 679  namespace GBPVRProgramDatabaseFixer
679                  gLog.Error.WriteLine(ex.ToString());                  gLog.Error.WriteLine(ex.ToString());
680              }              }
681          }          }
682    
683    
684    
685            private bool RemoveProgramDatabaseEntry(IPROGRAMME old_program)
686            {
687                bool result = false;
688                try
689                {                
690                    using (SQLiteConnection con = CreateConnection())
691                    {
692                        try
693                        {
694                            gLog.Verbose.Info.WriteLine("Removing old program with oid: '{0}'", old_program.oid);
695                            con.Open();
696                            string command_text = string.Format(@"DELETE FROM [{0}] WHERE [oid] = @oid;", TABLES.PROGRAMME);
697                            gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);
698                            using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))
699                            {
700                                cmd.Parameters.Add(new SQLiteParameter("oid", old_program.oid));
701                                int rowsupdated = cmd.ExecuteNonQuery();
702                                gLog.Verbose.Info.WriteLine("Updated '{0}' rows", rowsupdated);
703                            }
704                            con.Clone();
705                            result = true;
706                        }
707                        catch (SQLiteException ex)
708                        {
709                            gLog.Error.WriteLine(ex.ToString());
710                            result = false;
711                        }
712                    }
713                }
714                catch (Exception ex)
715                {
716                    gLog.Error.WriteLine(ex.ToString());
717                    result = false;
718                }
719                return result;
720            }
721            private bool UpdateProgramDatabaseEntry(IPROGRAMME old_program, IPROGRAMME new_program)
722            {
723                bool result = false;
724                try
725                {
726                    using (SQLiteConnection con = CreateConnection())
727                    {
728                        try
729                        {
730                            gLog.Verbose.Info.WriteLine("Updating old program with oid: '{0}'", old_program.oid);
731                            con.Open();
732                            //string command_text = string.Format(@"UPDATE [{0}] SET [name]=@name,[sub_title]=@subtitle, WHERE [OID] = @oid", TABLES.PROGRAMME);
733                            string command_text = string.Empty;
734                            StringBuilder builder = new StringBuilder();
735    
736                            builder.AppendLine(string.Format("UPDATE [{0}]", TABLES.PROGRAMME));
737                            builder.Append("SET ");
738                            builder.AppendFormat("[name]=@name,");
739                            builder.AppendFormat("[sub_title]=@sub_title,");
740                            builder.AppendFormat("[description]=@description,");
741                            builder.AppendFormat("[start_time]=@start_time,");
742                            builder.AppendFormat("[end_time]=@end_time,");
743                            builder.AppendFormat("[channel_oid]=@channel_oid,");
744                            builder.AppendFormat("[unique_identifier]=@unique_identifier,");
745                            builder.AppendFormat("[rating]=@rating");
746                            builder.AppendLine(" WHERE [oid] = @oid");
747    
748                            command_text = builder.ToString();
749                            gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);
750                            using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))
751                            {
752                                cmd.Parameters.Add(new SQLiteParameter("oid", old_program.oid));
753                                cmd.Parameters.Add(new SQLiteParameter("name", new_program.name));
754                                cmd.Parameters.Add(new SQLiteParameter("sub_title", new_program.sub_title));
755                                cmd.Parameters.Add(new SQLiteParameter("description", new_program.description));
756                                cmd.Parameters.Add(new SQLiteParameter("start_time", new_program.start_time));
757                                cmd.Parameters.Add(new SQLiteParameter("end_time", new_program.end_time));
758                                cmd.Parameters.Add(new SQLiteParameter("channel_oid", new_program.channel_oid));
759                                cmd.Parameters.Add(new SQLiteParameter("unique_identifier", new_program.unique_identifier));
760                                cmd.Parameters.Add(new SQLiteParameter("rating", new_program.rating));
761                                int rowsupdated = cmd.ExecuteNonQuery();
762                                gLog.Verbose.Info.WriteLine("Updated '{0}' rows", rowsupdated);
763                            }
764                            con.Clone();
765                            result = true;
766                        }
767                        catch (SQLiteException ex)
768                        {
769                            gLog.Error.WriteLine(ex.ToString());
770                            result = false;
771                        }
772                    }
773                }
774                catch (Exception ex)
775                {
776                    gLog.Error.WriteLine(ex.ToString());
777                    result = false;
778                }
779                return result;
780            }
781      }      }
782  }  }

Legend:
Removed from v.157  
changed lines
  Added in v.177

  ViewVC Help
Powered by ViewVC 1.1.22