/[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 207 by william, Sat Mar 16 23:07:46 2013 UTC revision 208 by william, Sat Mar 16 23:35:42 2013 UTC
# Line 824  namespace GBPVRProgramDatabaseFixer Line 824  namespace GBPVRProgramDatabaseFixer
824          public void RemoveOldGBPVRPrograms(List<SQLLITE.IPROGRAMME> programs)          public void RemoveOldGBPVRPrograms(List<SQLLITE.IPROGRAMME> programs)
825          {                      {            
826              gLog.Info.WriteLine("Removing all gbpvr programs.");              gLog.Info.WriteLine("Removing all gbpvr programs.");
827              //double total = programs.Count;              double total = programs.Count;
828              //double index = 0;              double index = 0;
829              //double progress = 0;              double progress = 0;
             //foreach (var program in programs)  
             //{  
             //    progress = 100.0 * (index / total);  
             //    gLog.ReportProgress(this, new ReportProgressEventArgs((int)progress, string.Format("Removing GBPVR Programs: {0:00}%", (int)progress)));  
             //    if (!RemoveProgramDatabaseEntry(program))  
             //    {  
             //        gLog.Error.WriteLine("Failed to remove program with oid: {0}", program.oid);  
             //    }  
             //    index++;  
             //}  
830              Stopwatch st = new Stopwatch();              Stopwatch st = new Stopwatch();
831              st.Start();              st.Start();
832              if (!RemoveAllProgramDatabaseEntries())              foreach (var program in programs)
833              {              {
834                  gLog.Error.WriteLine("Failed to remove one or more program(s)");                  progress = 100.0 * (index / total);
835                    gLog.ReportProgress(this, new ReportProgressEventArgs((int)progress, string.Format("Removing GBPVR Program oid='{0}' ({1:00}%)", program.oid, (int)progress)));
836                    if (!RemoveProgramDatabaseEntry(program))
837                    {
838                        gLog.Error.WriteLine("Failed to remove program with oid: {0}", program.oid);
839                    }
840                    index++;
841              }              }
842    
843                //Stopwatch st = new Stopwatch();
844                //st.Start();
845                //if (!RemoveAllProgramDatabaseEntries())
846                //{
847                //    gLog.Error.WriteLine("Failed to remove one or more program(s)");
848                //}
849              st.Stop();              st.Stop();
850              gLog.Warn.WriteLine("    operation took: {0:0.00000} minutes", st.Elapsed.TotalMinutes);              gLog.Warn.WriteLine("    operation took: {0:0.00000} seconds", st.Elapsed.TotalSeconds);
851          }          }
852          public void UpdateGBPVRPrograms(List<IPROGRAMME> programs)          public void UpdateGBPVRPrograms(List<IPROGRAMME> programs)
853          {          {
854              int ChunkSize = 4096;              int ChunkSize = 1024;
855              var ChunkList = programs.Chunk<IPROGRAMME>(ChunkSize);              var ChunkList = programs.Chunk<IPROGRAMME>(ChunkSize);
856    
857              double total = programs.Count;              double total = programs.Count;
858              double index = 0;              double index = 0;
859              //double progress = 0;              double progress = 0;
860              Stopwatch st1 = new Stopwatch();              Stopwatch st1 = new Stopwatch();
861              st1.Start();              st1.Start();
862              foreach (var p in ChunkList)              foreach (var p in ChunkList)
863              {              {
864                  //Stopwatch st2 = new Stopwatch();                  //Stopwatch st2 = new Stopwatch();
865                  //st2.Start();                  //st2.Start();
866                  //progress = 100.0 * (index / total);                  progress = 100.0 * (index / total);
867                  //gLog.Warn.WriteLine("Inserting {0} gbpvr programs ({1} of {2})", p.Count(), index, total);                    //gLog.Warn.WriteLine("Inserting {0} gbpvr programs ({1} of {2})", p.Count(), index, total);  
868                  if (!InsertProgramEntryDatabase(p))                  if (!UpdateProgramEntryDatabase(p))
869                  {                  {
870                      gLog.Error.WriteLine("Failed to insert one or more program(s)");                      gLog.Error.WriteLine("Failed to update one or more program(s)");
871                  }                  }
872                  //st2.Stop();                  //st2.Stop();
873                  //gLog.Warn.WriteLine("    operation took: {0:0.00000} seconds", st2.Elapsed.TotalSeconds);                  //gLog.Warn.WriteLine("    operation took: {0:0.00000} seconds", st2.Elapsed.TotalSeconds);
874                  //gLog.Warn.WriteLine(System.Environment.NewLine);                  //gLog.Warn.WriteLine(System.Environment.NewLine);
875                  gLog.ReportProgress(this, new ReportProgressEventArgs(0, string.Format("Inserting {0} gbpvr programs ({1} of {2})", p.Count(), index, total)));                  gLog.ReportProgress(this, new ReportProgressEventArgs((int)progress, string.Format("Updating {0} gbpvr programs ({1} of {2}) {0:00}%", p.Count(), index, total, (int)progress)));
876                  index += (double)p.Count();                                  index += (double)p.Count();                
877              }              }
878              st1.Stop();              st1.Stop();
879              gLog.Warn.WriteLine("    operation took: {0:0.00000} minutes overall", st1.Elapsed.TotalMinutes);              gLog.Warn.WriteLine("    operation took: {0:0.00000} seconds overall", st1.Elapsed.TotalSeconds);
880          }          }
881    
882          private bool RemoveAllProgramDatabaseEntries()          private bool RemoveAllProgramDatabaseEntries()
# Line 954  namespace GBPVRProgramDatabaseFixer Line 957  namespace GBPVRProgramDatabaseFixer
957              }              }
958              return result;              return result;
959          }          }
960            private bool UpdateProgramEntryDatabase(IEnumerable<IPROGRAMME> list)
961            {
962                bool result = false;
963                try
964                {
965                    using (SQLiteConnection con = CreateConnection())
966                    {
967                        try
968                        {
969                            //gLog.Verbose.Info.WriteLine("Updating old program with oid: '{0}'", new_program.oid);
970                            con.Open();
971                            //string command_text = string.Format(@"UPDATE [{0}] SET [name]=@name,[sub_title]=@subtitle, WHERE [OID] = @oid", TABLES.PROGRAMME);
972                            string command_text = string.Empty;
973                            command_text = BuildGBPVRMultiUpdateCommand(list);
974                            //gLog.Verbose.Debug.WriteLine("Executing Command: '{0}'", command_text);
975                            using (SQLiteCommand cmd = new SQLiteCommand(command_text, con))
976                            {
977                                int rowsupdated = cmd.ExecuteNonQuery();
978                                //gLog.Verbose.Info.WriteLine("Updated '{0}' rows", rowsupdated);
979                            }
980    
981                            result = true;
982                        }
983                        catch (SQLiteException ex)
984                        {
985                            gLog.Error.WriteLine(ex.ToString());
986                            result = false;
987                        }
988                        finally
989                        {
990                            con.Close();
991                        }
992                    }
993                }
994                catch (Exception ex)
995                {
996                    gLog.Error.WriteLine(ex.ToString());
997                    result = false;
998                }
999                return result;
1000            }
1001          private bool InsertProgramEntryDatabase(IEnumerable<IPROGRAMME> list)          private bool InsertProgramEntryDatabase(IEnumerable<IPROGRAMME> list)
1002          {          {
1003              bool result = false;              bool result = false;
# Line 995  namespace GBPVRProgramDatabaseFixer Line 1039  namespace GBPVRProgramDatabaseFixer
1039              }              }
1040              return result;              return result;
1041          }          }
1042            #region Multi-Update Command Support
1043            private string BuildGBPVRMultiUpdateCommand(IEnumerable<IPROGRAMME> list)
1044            {
1045                StringBuilder builder = new StringBuilder();
1046                /*
1047                    insert into table1 (field1,field2) values (value1,value2);
1048                    insert into table1 (field1,field2) values (value1,value2);
1049                    insert into table1 (field1,field2) values (value1,value2);
1050                    insert into table1 (field1,field2) values (value1,value2)
1051                 */
1052                builder.AppendLine("begin transaction;");
1053                foreach (var t in list)
1054                {
1055                    builder.AppendLine(BuildGBPVRSingleInsertCommand(t));
1056                }
1057                builder.AppendLine("end transaction;");
1058                return builder.ToString();
1059            }
1060            private string BuildGBPVRSingleUpdateCommand(IPROGRAMME program)
1061            {
1062                StringBuilder builder = new StringBuilder();
1063                builder.AppendFormat("update {0} SET ", TABLES.PROGRAMME);
1064                builder.AppendFormat("name=\"{0}\", ", program.name);
1065                builder.AppendFormat("sub_title=\"{0}\", ", program.sub_title);
1066                builder.AppendFormat("description=\"{0}\", ", program.description);
1067                builder.AppendFormat("start_time='{0}', ", program.start_time.ToString("yyyy/MM/dd HH:mm:ss.fffffff"));
1068                builder.AppendFormat("end_time='{0}', ", program.end_time.ToString("yyyy/MM/dd HH:mm:ss.fffffff"));
1069                builder.AppendFormat("channel_oid={0}, ", program.channel_oid);
1070                builder.AppendFormat("unique_identifier=\"{0}\", ", program.unique_identifier);
1071                builder.AppendFormat("rating=\"{0}\" ", program.rating);
1072                builder.AppendFormat("where oid={0}", program.oid);
1073                return builder.ToString();
1074            }
1075            #endregion
1076            #region Multi-Insert Command Support
1077          private string BuildGBPVRMultiInsertCommand(IEnumerable<IPROGRAMME> list)          private string BuildGBPVRMultiInsertCommand(IEnumerable<IPROGRAMME> list)
1078          {          {
1079              StringBuilder builder = new StringBuilder();              StringBuilder builder = new StringBuilder();
# Line 1013  namespace GBPVRProgramDatabaseFixer Line 1091  namespace GBPVRProgramDatabaseFixer
1091              builder.AppendLine("end transaction;");              builder.AppendLine("end transaction;");
1092              return builder.ToString();              return builder.ToString();
1093          }          }
1094            
1095          private string BuildGBPVRSingleInsertCommand(IPROGRAMME program)          private string BuildGBPVRSingleInsertCommand(IPROGRAMME program)
1096          {          {
1097              StringBuilder builder = new StringBuilder();              StringBuilder builder = new StringBuilder();
# Line 1029  namespace GBPVRProgramDatabaseFixer Line 1107  namespace GBPVRProgramDatabaseFixer
1107              builder.AppendFormat("\"{0}\");", program.rating);              builder.AppendFormat("\"{0}\");", program.rating);
1108              return builder.ToString();              return builder.ToString();
1109          }          }
1110                  #endregion
1111    
1112      }      }
1113  }  }

Legend:
Removed from v.207  
changed lines
  Added in v.208

  ViewVC Help
Powered by ViewVC 1.1.22