/[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 185 by william, Sat Mar 16 18:55:49 2013 UTC revision 221 by william, Sun Mar 17 02:23:17 2013 UTC
# Line 32  namespace GBPVRProgramDatabaseFixer Line 32  namespace GBPVRProgramDatabaseFixer
32      {      {
33          private class OldNewProgram : IOldNewProgram          private class OldNewProgram : IOldNewProgram
34          {          {
35              public OldNewProgram() : this(new PROGRAMME(), new PROGRAMME()) { }              public OldNewProgram() : this(new PROGRAMME()) { }
36                public OldNewProgram(IPROGRAMME _old) : this(_old,_old) {  }
37              public OldNewProgram(IPROGRAMME _old, IPROGRAMME _new) { OldProgram = _old; NewProgram = _new; }              public OldNewProgram(IPROGRAMME _old, IPROGRAMME _new) { OldProgram = _old; NewProgram = _new; }
38    
39              public IPROGRAMME OldProgram { get; private set; }              public IPROGRAMME OldProgram { get; private set; }
# Line 45  namespace GBPVRProgramDatabaseFixer Line 46  namespace GBPVRProgramDatabaseFixer
46    
47          #region DATABASE DEFINITIONS          #region DATABASE DEFINITIONS
48    
49          public interface ICHANNEL          public interface ICHANNEL : ICloneable
50          {          {
51              Int64 oid { get; }              Int64 oid { get; }
52              String name { get; }              String name { get; }
# Line 54  namespace GBPVRProgramDatabaseFixer Line 55  namespace GBPVRProgramDatabaseFixer
55              String favourite_channel { get; }              String favourite_channel { get; }
56              String display_name { get; }              String display_name { get; }
57          }          }
58          private class CHANNEL : ICHANNEL          private class CHANNEL : ICHANNEL, ICloneable
59          {          {
60              public CHANNEL()              public CHANNEL()
61              {              {
# Line 74  namespace GBPVRProgramDatabaseFixer Line 75  namespace GBPVRProgramDatabaseFixer
75              public String favourite_channel { get; set; }              public String favourite_channel { get; set; }
76              public String display_name { get; set; }              public String display_name { get; set; }
77              #endregion              #endregion
78    
79                public object Clone()
80                {
81                    CHANNEL p = new CHANNEL();
82                    BaseDatabaseDefinition<CHANNEL>.Create(this, ref p);
83                    return p;  
84                }
85          }          }
86          public interface IRECORDING_SCHEDULE          public interface IRECORDING_SCHEDULE : ICloneable
87          {          {
88              Int64 oid { get; }              Int64 oid { get; }
89              Int64 programme_oid { get; }              Int64 programme_oid { get; }
# Line 129  namespace GBPVRProgramDatabaseFixer Line 137  namespace GBPVRProgramDatabaseFixer
137                      throw ex;                      throw ex;
138                  }                  }
139              }              }
140                public static void Create(T source, ref T destination)
141                {
142                    Type t = source.GetType();
143                    var props = t.GetProperties();
144                    foreach (var prop in props)
145                    {
146                        try
147                        {
148                            object value = prop.GetValue(source, null);
149                            prop.SetValue(destination, value, null);
150                        }
151                        catch (Exception ex)
152                        {
153                            throw ex;
154                        }
155                    }
156                }
157              public static void Create(ref T instance, SQLiteDataReader r, int index)              public static void Create(ref T instance, SQLiteDataReader r, int index)
158              {              {
159                  string field_name = r.GetName(index);                  string field_name = r.GetName(index);
# Line 173  namespace GBPVRProgramDatabaseFixer Line 198  namespace GBPVRProgramDatabaseFixer
198              }              }
199          }          }
200    
201          private class RECORDING_SCHEDULE : IRECORDING_SCHEDULE          private class RECORDING_SCHEDULE : IRECORDING_SCHEDULE, ICloneable
202          {          {
203              public RECORDING_SCHEDULE()              public RECORDING_SCHEDULE()
204              {              {
# Line 185  namespace GBPVRProgramDatabaseFixer Line 210  namespace GBPVRProgramDatabaseFixer
210              {              {
211                  BaseDatabaseDefinition<RECORDING_SCHEDULE>.Create(ref instance, r, index);                  BaseDatabaseDefinition<RECORDING_SCHEDULE>.Create(ref instance, r, index);
212              }              }
213                public object Clone()
214                {
215                    RECORDING_SCHEDULE p = new RECORDING_SCHEDULE();
216                    BaseDatabaseDefinition<RECORDING_SCHEDULE>.Create(this, ref p);
217                    return p;  
218                }
219              #region IRECORDING_SCHEDULE members              #region IRECORDING_SCHEDULE members
220              public Int64 oid { get; set; }              public Int64 oid { get; set; }
221              public Int64 programme_oid { get; set; }              public Int64 programme_oid { get; set; }
# Line 203  namespace GBPVRProgramDatabaseFixer Line 233  namespace GBPVRProgramDatabaseFixer
233              public Int32 priority { get; set; }              public Int32 priority { get; set; }
234              public String conversion_profile { get; set; }              public String conversion_profile { get; set; }
235              #endregion              #endregion
236    
237                
238          }          }
239    
240          public interface IPROGRAMME : IEquatable<IPROGRAMME>          public interface IPROGRAMME : IEquatable<IPROGRAMME>, ICloneable
241          {          {
242              Int64 oid { get; set; }              Int64 oid { get; set; }
243              String name { get; set; }              String name { get; set; }
# Line 220  namespace GBPVRProgramDatabaseFixer Line 252  namespace GBPVRProgramDatabaseFixer
252              string ToString();              string ToString();
253              IProgramDefinition AsXMLTVProgramDefinition(ISQLLITE sqllite);              IProgramDefinition AsXMLTVProgramDefinition(ISQLLITE sqllite);
254          }          }
255          private class PROGRAMME : IPROGRAMME          private class PROGRAMME : IPROGRAMME, ICloneable
256          {          {
257    
258                public object Clone()
259                {
260                    PROGRAMME p = new PROGRAMME();
261                    BaseDatabaseDefinition<PROGRAMME>.Create(this, ref p);
262                    return p;  
263                }
264    
265              public PROGRAMME()              public PROGRAMME()
266              {              {
267                  BaseDatabaseDefinition<PROGRAMME>.CreateDefault(this);                  BaseDatabaseDefinition<PROGRAMME>.CreateDefault(this);
# Line 292  namespace GBPVRProgramDatabaseFixer Line 332  namespace GBPVRProgramDatabaseFixer
332              {              {
333                  return this.ToString().GetHashCode();                  return this.ToString().GetHashCode();
334              }              }
335    
336                
337          }          }
338          #endregion          #endregion
339          private static class TABLES          private static class TABLES
# Line 300  namespace GBPVRProgramDatabaseFixer Line 342  namespace GBPVRProgramDatabaseFixer
342              public const string PROGRAMME = "PROGRAMME";              public const string PROGRAMME = "PROGRAMME";
343              public const string CHANNEL = "CHANNEL";              public const string CHANNEL = "CHANNEL";
344          }          }
345            private string DATABASE_BACKUP_FILE = string.Empty;
346          //public SQLLite() { }          //public SQLLite() { }
347          protected SQLLITE(string database, EventHandler<EventArgs> OnInstanceCreated)          protected SQLLITE(string database, EventHandler<EventArgs> OnInstanceCreated)
348          {          {
# Line 376  namespace GBPVRProgramDatabaseFixer Line 418  namespace GBPVRProgramDatabaseFixer
418                      // check if the xmltv entry has different data from the current program                      // check if the xmltv entry has different data from the current program
419                      if (!xmltv_entry.Equals(program_xmltv_entry))                      if (!xmltv_entry.Equals(program_xmltv_entry))
420                      {                      {
421                          // data is different                          // data is different                        
422                          var updated_program = program;                          var updated_program = (IPROGRAMME)program.Clone();
423    
424                          if (program_xmltv_entry.Title != xmltv_entry.Title)                          if (program_xmltv_entry.Title != xmltv_entry.Title)
425                          {                          {
# Line 410  namespace GBPVRProgramDatabaseFixer Line 452  namespace GBPVRProgramDatabaseFixer
452                          {                          {
453                              throw new Exception(string.Format("Program oid '{0}' was not properly updated.", updated_program.oid));                              throw new Exception(string.Format("Program oid '{0}' was not properly updated.", updated_program.oid));
454                          }                          }
455                            //source_valid.Add(new OldNewProgram(program, updated_program));
456                          source_valid.Add(new OldNewProgram(program, updated_program));                          source_valid.Add(new OldNewProgram(program, updated_program));
457                      }                      }
458                      else                      else
459                      {                      {
460                          // data is the same                          // data is the same
461                          source_valid.Add(new OldNewProgram(program, program));                          //source_valid.Add(new OldNewProgram(program, program));
462                            source_valid.Add(new OldNewProgram(program));
463                      }                      }
464                  }                  }
465                  index++;                  index++;
466              }              }
467                gLog.Info.WriteLine("Total XMLTV Programs: 0x{0:x8}", xmltv_programs.Count);
468                gLog.Info.WriteLine("Total Valid GB-PVR Programs: 0x{0:x8}", source_valid.Count);
469                gLog.Info.WriteLine("Total Invalid GB-PVR Programs: 0x{0:x8}", source_invalid.Count);
470                gLog.Info.WriteLine("Total GB-PVR Programs (Valid+Invalid): 0x{0:x8} == 0x{1:x8}", source_valid.Count + source_invalid.Count, gbpvr_programs.Count);
471              #region old-code              #region old-code
472              //List<OldNewProgram> source_update = new List<OldNewProgram>();              //List<OldNewProgram> source_update = new List<OldNewProgram>();
473              ////if (range == null)              ////if (range == null)
# Line 653  namespace GBPVRProgramDatabaseFixer Line 700  namespace GBPVRProgramDatabaseFixer
700                  gLog.Info.WriteLine("\tDestination: {0}", backup_file);                  gLog.Info.WriteLine("\tDestination: {0}", backup_file);
701    
702                  System.IO.File.Copy(this.Database, backup_file);                  System.IO.File.Copy(this.Database, backup_file);
703                    DATABASE_BACKUP_FILE = backup_file;
704                  return true;                  return true;
705              }              }
706              catch (Exception ex)              catch (Exception ex)
# Line 816  namespace GBPVRProgramDatabaseFixer Line 864  namespace GBPVRProgramDatabaseFixer
864          }          }
865    
866          public void RemoveOldGBPVRPrograms(List<SQLLITE.IPROGRAMME> programs)          public void RemoveOldGBPVRPrograms(List<SQLLITE.IPROGRAMME> programs)
867          {          {            
868              gLog.Info.WriteLine("Removing {0} old gbpvr programs.", programs.Count);              gLog.Info.WriteLine("Removing {0} gbpvr programs.", programs.Count);
869                int ChunkSize = 1024;
870                var ChunkList = programs.Chunk<IPROGRAMME>(ChunkSize);
871              double total = programs.Count;              double total = programs.Count;
872              double index = 0;              double index = 0;
873              double progress = 0;              double progress = 0;
874              foreach (var program in programs)              Stopwatch st1 = new Stopwatch();
875                st1.Start();
876                foreach (var p in ChunkList)
877              {              {
878                  progress = 100.0 * (index / total);                  progress = 100.0 * (index / total);
879                  gLog.ReportProgress(this, new ReportProgressEventArgs((int)progress, string.Format("Removing GBPVR Programs: {0:00}%", (int)progress)));                  if (!RemoveProgramDatabaseEntry(p))
                 if (!RemoveProgramDatabaseEntry(program))  
880                  {                  {
881                      gLog.Error.WriteLine("Failed to remove program with oid: {0}", program.oid);                      gLog.Error.WriteLine("Failed to remove one or more program(s)");
882                  }                  }
883                  index++;                  gLog.ReportProgress(this, new ReportProgressEventArgs((int)progress, string.Format("Removing old gbpvr programs ({0} of {1}) {2:00}%", index, total, (int)progress)));
884                    index += (double)p.Count();
885              }              }
886                gLog.ReportProgress(this, new ReportProgressEventArgs((int)progress, string.Format("Removing old gbpvr programs ({0} of {1}) {2:00}%", index, total, (int)progress)));
887                st1.Stop();
888                gLog.Warn.WriteLine("    operation took: {0:0.00000} seconds overall", st1.Elapsed.TotalSeconds);
889          }          }
890          public void UpdateGBPVRPrograms(List<IOldNewProgram> programs)          public void UpdateGBPVRPrograms(List<IOldNewProgram> programs)
891          {          {
892              gLog.Info.WriteLine("Updating {0} gbpvr programs.", programs.Count);              gLog.Info.WriteLine("Updating {0} gbpvr programs.", programs.Count);
893                int ChunkSize = 1;
894                var ChunkList = programs.Chunk<IOldNewProgram>(ChunkSize);
895    
896              double total = programs.Count;              double total = programs.Count;
897              double index = 0;              double index = 0;
898              double progress = 0;              double progress = 0;
899              foreach (var program in programs)              Stopwatch st1 = new Stopwatch();
900                st1.Start();
901                foreach (var p in ChunkList)
902              {              {
903                  progress = 100.0 * (index / total);                  progress = 100.0 * (index / total);
904                  gLog.ReportProgress(this, new ReportProgressEventArgs((int)progress, string.Format("Updating GBPVR Programs: {0:00}%", (int)progress)));                  if (!UpdateProgramEntryDatabase(p))
                 if (program.NewProgram.Equals(program.OldProgram))  
905                  {                  {
906                      // program does not need to be updated                      gLog.Error.WriteLine("Failed to update one or more program(s)");
                     continue;  
907                  }                  }
908                  else                  gLog.ReportProgress(this, new ReportProgressEventArgs((int)progress, string.Format("Updating gbpvr programs ({0} of {1}) {2:00}%", index, total, (int)progress)));
909                    index += (double)p.Count();                
910                }
911                gLog.ReportProgress(this, new ReportProgressEventArgs((int)progress, string.Format("Updating gbpvr programs ({0} of {1}) {2:00}%", index, total, (int)progress)));
912                st1.Stop();
913                gLog.Warn.WriteLine("    operation took: {0:0.00000} seconds overall", st1.Elapsed.TotalSeconds);
914            }
915    
916            private bool RemoveAllProgramDatabaseEntries()
917            {
918                bool result = false;
919                try
920                {
921                    using (SQLiteConnection con = CreateConnection())
922                  {                  {
923                      if (!UpdateProgramDatabaseEntry(program.NewProgram))                      try
924                        {
925                            //gLog.Verbose.Info.WriteLine("Removing old program with oid: '{0}'", old_program.oid);
926                            con.Open();
927                            string command_text = string.Format(@"DELETE FROM [{0}];", TABLES.PROGRAMME);
928                            //gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);
929                            using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))
930                            {
931                                //cmd.Parameters.Add(new SQLiteParameter("oid", old_program.oid));
932                                int rowsupdated = cmd.ExecuteNonQuery();
933                                //gLog.Verbose.Info.WriteLine("Updated '{0}' rows", rowsupdated);
934                            }
935                            result = true;
936                        }
937                        catch (SQLiteException ex)
938                      {                      {
939                          gLog.Error.WriteLine("Failed to update program with oid: {0}", program.NewProgram.oid);                          gLog.Error.WriteLine(ex.ToString());
940                            result = false;
941                        }
942                        finally
943                        {
944                            con.Close();
945                      }                      }
946                  }                  }
                 index++;  
947              }              }
948                catch (Exception ex)
949                {
950                    gLog.Error.WriteLine(ex.ToString());
951                    result = false;
952                }
953                return result;
954          }          }
955            private bool RemoveProgramDatabaseEntry(IEnumerable<IPROGRAMME> list)
         private bool RemoveProgramDatabaseEntry(IPROGRAMME old_program)  
956          {          {
957              bool result = false;              bool result = false;
958              try              try
# Line 867  namespace GBPVRProgramDatabaseFixer Line 961  namespace GBPVRProgramDatabaseFixer
961                  {                  {
962                      try                      try
963                      {                      {
964                          //gLog.Verbose.Info.WriteLine("Removing old program with oid: '{0}'", old_program.oid);                          //gLog.Verbose.Info.WriteLine("Updating old program with oid: '{0}'", new_program.oid);
965                          con.Open();                          con.Open();
966                          string command_text = string.Format(@"DELETE FROM [{0}] WHERE [oid] = @oid;", TABLES.PROGRAMME);                          //string command_text = string.Format(@"UPDATE [{0}] SET [name]=@name,[sub_title]=@subtitle, WHERE [OID] = @oid", TABLES.PROGRAMME);
967                            string command_text = string.Empty;
968                            command_text = BuildGBPVRMultiDeleteCommand(list);
969                          //gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);                          //gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);
970                          using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))                          using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))
971                          {                          {
                             cmd.Parameters.Add(new SQLiteParameter("oid", old_program.oid));  
972                              int rowsupdated = cmd.ExecuteNonQuery();                              int rowsupdated = cmd.ExecuteNonQuery();
973                              //gLog.Verbose.Info.WriteLine("Updated '{0}' rows", rowsupdated);                              //gLog.Verbose.Info.WriteLine("Updated '{0}' rows", rowsupdated);
974                          }                          }
975    
976                          result = true;                          result = true;
977                      }                      }
978                      catch (SQLiteException ex)                      catch (SQLiteException ex)
# Line 897  namespace GBPVRProgramDatabaseFixer Line 993  namespace GBPVRProgramDatabaseFixer
993              }              }
994              return result;              return result;
995          }          }
996          private bool UpdateProgramDatabaseEntry(IPROGRAMME new_program)          private bool UpdateProgramEntryDatabase(IEnumerable<IOldNewProgram> list)
997          {          {
998              bool result = false;              bool result = false;
999              try              try
# Line 910  namespace GBPVRProgramDatabaseFixer Line 1006  namespace GBPVRProgramDatabaseFixer
1006                          con.Open();                          con.Open();
1007                          //string command_text = string.Format(@"UPDATE [{0}] SET [name]=@name,[sub_title]=@subtitle, WHERE [OID] = @oid", TABLES.PROGRAMME);                          //string command_text = string.Format(@"UPDATE [{0}] SET [name]=@name,[sub_title]=@subtitle, WHERE [OID] = @oid", TABLES.PROGRAMME);
1008                          string command_text = string.Empty;                          string command_text = string.Empty;
1009                          StringBuilder builder = new StringBuilder();                          command_text = BuildGBPVRMultiUpdateCommand(list);
                         builder.AppendLine(string.Format("UPDATE [{0}]", TABLES.PROGRAMME));  
                         builder.Append("SET ");  
                         builder.AppendFormat("[name]=@name,");  
                         builder.AppendFormat("[sub_title]=@sub_title,");  
                         builder.AppendFormat("[description]=@description,");  
                         builder.AppendFormat("[start_time]=@start_time,");  
                         builder.AppendFormat("[end_time]=@end_time,");  
                         builder.AppendFormat("[channel_oid]=@channel_oid,");  
                         builder.AppendFormat("[unique_identifier]=@unique_identifier,");  
                         builder.AppendFormat("[rating]=@rating");  
                         builder.AppendLine(" WHERE [oid] = @oid");  
                         command_text = builder.ToString();  
1010                          //gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);                          //gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);
1011                          using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))                          using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))
1012                          {                          {
                             cmd.Parameters.Add(new SQLiteParameter("oid", new_program.oid));  
                             cmd.Parameters.Add(new SQLiteParameter("name", new_program.name));  
                             cmd.Parameters.Add(new SQLiteParameter("sub_title", new_program.sub_title));  
                             cmd.Parameters.Add(new SQLiteParameter("description", new_program.description));  
                             cmd.Parameters.Add(new SQLiteParameter("start_time", new_program.start_time));  
                             cmd.Parameters.Add(new SQLiteParameter("end_time", new_program.end_time));  
                             cmd.Parameters.Add(new SQLiteParameter("channel_oid", new_program.channel_oid));  
                             cmd.Parameters.Add(new SQLiteParameter("unique_identifier", new_program.unique_identifier));  
                             cmd.Parameters.Add(new SQLiteParameter("rating", new_program.rating));  
1013                              int rowsupdated = cmd.ExecuteNonQuery();                              int rowsupdated = cmd.ExecuteNonQuery();
1014                              //gLog.Verbose.Info.WriteLine("Updated '{0}' rows", rowsupdated);                              //gLog.Verbose.Info.WriteLine("Updated '{0}' rows", rowsupdated);
1015                          }                          }
# Line 959  namespace GBPVRProgramDatabaseFixer Line 1034  namespace GBPVRProgramDatabaseFixer
1034              }              }
1035              return result;              return result;
1036          }          }
1037            private bool InsertProgramEntryDatabase(IEnumerable<IPROGRAMME> list)
1038            {
1039                bool result = false;
1040                try
1041                {
1042                    using (SQLiteConnection con = CreateConnection())
1043                    {
1044                        try
1045                        {
1046                            //gLog.Verbose.Info.WriteLine("Updating old program with oid: '{0}'", new_program.oid);
1047                            con.Open();
1048                            //string command_text = string.Format(@"UPDATE [{0}] SET [name]=@name,[sub_title]=@subtitle, WHERE [OID] = @oid", TABLES.PROGRAMME);
1049                            string command_text = string.Empty;
1050                            command_text = BuildGBPVRMultiInsertCommand(list);
1051                            //gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);
1052                            using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))
1053                            {                          
1054                                int rowsupdated = cmd.ExecuteNonQuery();
1055                                //gLog.Verbose.Info.WriteLine("Updated '{0}' rows", rowsupdated);
1056                            }
1057    
1058                            result = true;
1059                        }
1060                        catch (SQLiteException ex)
1061                        {
1062                            gLog.Error.WriteLine(ex.ToString());
1063                            result = false;
1064                        }
1065                        finally
1066                        {
1067                            con.Close();
1068                        }
1069                    }
1070                }
1071                catch (Exception ex)
1072                {
1073                    gLog.Error.WriteLine(ex.ToString());
1074                    result = false;
1075                }
1076                return result;
1077            }
1078    
1079            #region Multi-Delete Command Support
1080            private string BuildGBPVRMultiDeleteCommand(IEnumerable<IPROGRAMME> list)
1081            {
1082                StringBuilder builder = new StringBuilder();
1083                /*
1084                    insert into table1 (field1,field2) values (value1,value2);
1085                    insert into table1 (field1,field2) values (value1,value2);
1086                    insert into table1 (field1,field2) values (value1,value2);
1087                    insert into table1 (field1,field2) values (value1,value2)
1088                 */
1089                builder.AppendLine("begin transaction;");
1090                foreach (var t in list)
1091                {
1092                    builder.AppendLine(BuildGBPVRSingleDeleteCommand(t));
1093                }
1094                builder.AppendLine("end transaction;");
1095                return builder.ToString();
1096            }
1097            private string BuildGBPVRSingleDeleteCommand(IPROGRAMME program)
1098            {
1099                StringBuilder builder = new StringBuilder();
1100                builder.AppendFormat("delete from {0} where oid={1};", TABLES.PROGRAMME, program.oid);
1101                return builder.ToString();
1102            }
1103            #endregion
1104            #region Multi-Update Command Support
1105            private string BuildGBPVRMultiUpdateCommand(IEnumerable<IOldNewProgram> list)
1106            {
1107                StringBuilder builder = new StringBuilder();
1108                /*
1109                    insert into table1 (field1,field2) values (value1,value2);
1110                    insert into table1 (field1,field2) values (value1,value2);
1111                    insert into table1 (field1,field2) values (value1,value2);
1112                    insert into table1 (field1,field2) values (value1,value2)
1113                 */
1114                builder.AppendLine("begin transaction;");
1115                foreach (var t in list)
1116                {
1117                    if (!t.OldProgram.Equals(t.NewProgram))
1118                    {
1119                        // only update the entry if it is different
1120                        builder.AppendLine(BuildGBPVRSingleUpdateCommand(t.NewProgram));
1121                    }                
1122                }
1123                builder.AppendLine("end transaction;");
1124                return builder.ToString();
1125            }
1126            private string BuildGBPVRSingleUpdateCommand(IPROGRAMME program)
1127            {
1128                StringBuilder builder = new StringBuilder();
1129                builder.AppendFormat("update {0} SET ", TABLES.PROGRAMME);
1130                builder.AppendFormat("name=\"{0}\", ", program.name);
1131                builder.AppendFormat("sub_title=\"{0}\", ", program.sub_title);
1132                builder.AppendFormat("description=\"{0}\", ", program.description);
1133                builder.AppendFormat("start_time='{0}', ", program.start_time.ToString("yyyy/MM/dd HH:mm:ss.fffffff"));
1134                builder.AppendFormat("end_time='{0}', ", program.end_time.ToString("yyyy/MM/dd HH:mm:ss.fffffff"));
1135                builder.AppendFormat("channel_oid={0}, ", program.channel_oid);
1136                builder.AppendFormat("unique_identifier=\"{0}\", ", program.unique_identifier);
1137                builder.AppendFormat("rating=\"{0}\" ", program.rating);
1138                builder.AppendFormat("where oid={0};", program.oid);
1139                return builder.ToString();
1140            }
1141            #endregion
1142            #region Multi-Insert Command Support
1143            private string BuildGBPVRMultiInsertCommand(IEnumerable<IPROGRAMME> list)
1144            {
1145                StringBuilder builder = new StringBuilder();
1146                /*
1147                    insert into table1 (field1,field2) values (value1,value2);
1148                    insert into table1 (field1,field2) values (value1,value2);
1149                    insert into table1 (field1,field2) values (value1,value2);
1150                    insert into table1 (field1,field2) values (value1,value2)
1151                 */
1152                builder.AppendLine("begin transaction;");
1153                foreach (var t in list)
1154                {
1155                    builder.AppendLine(BuildGBPVRSingleInsertCommand(t));
1156                }
1157                builder.AppendLine("end transaction;");
1158                return builder.ToString();
1159            }
1160            
1161            private string BuildGBPVRSingleInsertCommand(IPROGRAMME program)
1162            {
1163                StringBuilder builder = new StringBuilder();
1164                builder.AppendFormat("insert into {0} (oid,name,sub_title,description,start_time,end_time,channel_oid,unique_identifier,rating) values (", TABLES.PROGRAMME);
1165                builder.AppendFormat("{0},",program.oid);
1166                builder.AppendFormat("\"{0}\",", program.name);
1167                builder.AppendFormat("\"{0}\",", program.sub_title);
1168                builder.AppendFormat("\"{0}\",", program.description);
1169                builder.AppendFormat("'{0}',", program.start_time.ToString("yyyy/MM/dd HH:mm:ss.fffffff"));
1170                builder.AppendFormat("'{0}',", program.end_time.ToString("yyyy/MM/dd HH:mm:ss.fffffff"));
1171                builder.AppendFormat("{0},", program.channel_oid);
1172                builder.AppendFormat("\"{0}\",", program.unique_identifier);
1173                builder.AppendFormat("\"{0}\");", program.rating);
1174                return builder.ToString();
1175            }
1176            #endregion
1177    
1178      }      }
1179  }  }

Legend:
Removed from v.185  
changed lines
  Added in v.221

  ViewVC Help
Powered by ViewVC 1.1.22