MythTV  0.27pre
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Groups Pages
mythtv/libs/libmythtv/dbcheck.cpp
Go to the documentation of this file.
1 #include <iostream>
2 #include <stdio.h>
3 using namespace std;
4 
5 #include <QString>
6 #include <QSqlError>
7 #include "dbcheck.h"
8 
9 #include "mythversion.h"
10 #include "dbutil.h"
11 #include "mythcorecontext.h"
12 #include "schemawizard.h"
13 #include "mythdb.h"
14 #include "mythlogging.h"
15 #include "diseqcsettings.h" // for convert_diseqc_db()
16 #include "videodbcheck.h" // for 1267
17 #include "compat.h"
18 #include "recordingrule.h"
19 
20 // TODO convert all dates to UTC
21 
22 #define MINIMUM_DBMS_VERSION 5,0,15
23 
24 const QString currentDatabaseVersion = MYTH_DATABASE_VERSION;
25 
26 static bool UpdateDBVersionNumber(const QString &newnumber, QString &dbver);
27 static bool performActualUpdate(
28  const char **updates, const char *version, QString &dbver);
29 static bool doUpgradeTVDatabaseSchema(void);
30 
343 static bool UpdateDBVersionNumber(const QString &newnumber, QString &dbver)
344 {
345  // delete old schema version
346  MSqlQuery query(MSqlQuery::InitCon());
347 
348  QString thequery = "DELETE FROM settings WHERE value='DBSchemaVer';";
349  query.prepare(thequery);
350 
351  if (!query.exec())
352  {
353  QString msg =
354  QString("DB Error (Deleting old DB version number): \n"
355  "Query was: %1 \nError was: %2 \nnew version: %3")
356  .arg(thequery)
357  .arg(MythDB::DBErrorMessage(query.lastError()))
358  .arg(newnumber);
359  LOG(VB_GENERAL, LOG_ERR, msg);
360  return false;
361  }
362 
363  // set new schema version
364  thequery = QString("INSERT INTO settings (value, data, hostname) "
365  "VALUES ('DBSchemaVer', %1, NULL);").arg(newnumber);
366  query.prepare(thequery);
367 
368  if (!query.exec())
369  {
370  QString msg =
371  QString("DB Error (Setting new DB version number): \n"
372  "Query was: %1 \nError was: %2 \nnew version: %3")
373  .arg(thequery)
374  .arg(MythDB::DBErrorMessage(query.lastError()))
375  .arg(newnumber);
376  LOG(VB_GENERAL, LOG_ERR, msg);
377  return false;
378  }
379 
380  dbver = newnumber;
381 
382  return true;
383 }
384 
395  const char **updates, const char *version, QString &dbver)
396 {
397  MSqlQuery query(MSqlQuery::InitCon());
398 
399  LOG(VB_GENERAL, LOG_CRIT, QString("Upgrading to MythTV schema version ") +
400  version);
401 
402  int counter = 0;
403  const char *thequery = updates[counter];
404 
405  while (thequery != NULL)
406  {
407  if (strlen(thequery) && !query.exec(thequery))
408  {
409  QString msg =
410  QString("DB Error (Performing database upgrade): \n"
411  "Query was: %1 \nError was: %2 \nnew version: %3")
412  .arg(thequery)
413  .arg(MythDB::DBErrorMessage(query.lastError()))
414  .arg(version);
415  LOG(VB_GENERAL, LOG_ERR, msg);
416  return false;
417  }
418 
419  counter++;
420  thequery = updates[counter];
421  }
422 
423  if (!UpdateDBVersionNumber(version, dbver))
424  return false;
425 
426  return true;
427 }
428 
443 bool UpgradeTVDatabaseSchema(const bool upgradeAllowed,
444  const bool upgradeIfNoUI)
445 {
446 #ifdef IGNORE_SCHEMA_VER_MISMATCH
447  return true;
448 #endif
449  SchemaUpgradeWizard *schema_wizard = NULL;
450 
451  // Suppress DB messages and turn of the settings cache,
452  // These are likely to confuse the users and the code, respectively.
453  GetMythDB()->SetSuppressDBMessages(true);
455 
456  // Get the schema upgrade lock
457  MSqlQuery query(MSqlQuery::InitCon());
458  bool locked = DBUtil::TryLockSchema(query, 1);
459  for (uint i = 0; i < 2*60 && !locked; i++)
460  {
461  LOG(VB_GENERAL, LOG_INFO, "Waiting for database schema upgrade lock");
462  locked = DBUtil::TryLockSchema(query, 1);
463  if (locked)
464  LOG(VB_GENERAL, LOG_INFO, "Got schema upgrade lock");
465  }
466  if (!locked)
467  {
468  LOG(VB_GENERAL, LOG_INFO, "Failed to get schema upgrade lock");
469  goto upgrade_error_exit;
470  }
471 
472  // Determine if an upgrade is needed
473  schema_wizard = SchemaUpgradeWizard::Get(
474  "DBSchemaVer", "MythTV", currentDatabaseVersion);
475  if (schema_wizard->Compare() == 0) // DB schema is what we need it to be..
476  goto upgrade_ok_exit;
477 
478  if (!upgradeAllowed)
479  LOG(VB_GENERAL, LOG_WARNING, "Not allowed to upgrade the database.");
480 
481  // Pop up messages, questions, warnings, etc.
482  switch (schema_wizard->PromptForUpgrade(
483  "TV", upgradeAllowed, upgradeIfNoUI, MINIMUM_DBMS_VERSION))
484  {
486  goto upgrade_ok_exit;
487  case MYTH_SCHEMA_ERROR:
488  case MYTH_SCHEMA_EXIT:
489  goto upgrade_error_exit;
490  case MYTH_SCHEMA_UPGRADE:
491  break;
492  }
493 
494  LOG(VB_GENERAL, LOG_DEBUG, QString("Newest MythTV Schema Version : %1")
495  .arg(currentDatabaseVersion));
496 
497  // Upgrade the schema
499  {
500  LOG(VB_GENERAL, LOG_ERR, "Database schema upgrade failed.");
501  goto upgrade_error_exit;
502  }
503 
504  LOG(VB_GENERAL, LOG_INFO, "Database schema upgrade complete.");
505 
506  // On any exit we want to re-enable the DB messages so errors
507  // are reported and we want to make sure the setting cache is
508  // enabled for good performance and we must unlock the schema
509  // lock. We use gotos with labels so it's impossible to miss
510  // these steps.
511  upgrade_ok_exit:
512  GetMythDB()->SetSuppressDBMessages(false);
514  if (locked)
515  DBUtil::UnlockSchema(query);
516  return true;
517 
518  upgrade_error_exit:
519  GetMythDB()->SetSuppressDBMessages(false);
521  if (locked)
522  DBUtil::UnlockSchema(query);
523  return false;
524 }
525 
539 static bool doUpgradeTVDatabaseSchema(void)
540 {
541  QString dbver = gCoreContext->GetSetting("DBSchemaVer");
542 
543  if (dbver == currentDatabaseVersion)
544  {
545  return true;
546  }
547 
548  // Don't rely on this, please specify these when creating the database.
549  {
550  MSqlQuery query(MSqlQuery::InitCon());
551  if (!query.exec(QString("ALTER DATABASE %1 DEFAULT "
552  "CHARACTER SET utf8 COLLATE utf8_general_ci;")
554  {
555  MythDB::DBError("UpgradeTVDatabaseSchema -- alter charset", query);
556  }
557  }
558 
559  if (DBUtil::IsNewDatabase())
560  {
561  if (!InitializeMythSchema())
562  return false;
563  dbver = gCoreContext->GetSetting("DBSchemaVer");
564  }
565 
566  if (dbver.isEmpty() || dbver.toInt() < 1027)
567  {
568  LOG(VB_GENERAL, LOG_ERR, "Unrecognized database schema version. "
569  "Unable to upgrade database.");
570  return false;
571  }
572  else if (dbver.toInt() < 1244)
573  {
574  LOG(VB_GENERAL, LOG_ERR, "Your database version is too old to upgrade "
575  "with this version of MythTV. You will need "
576  "to use mythtv-setup from MythTV 0.22, 0.23, "
577  "or 0.24 to upgrade your database before "
578  "upgrading to this version of MythTV.");
579  return false;
580  }
581 
582  if (dbver == "1244")
583  {
584  const char *updates[] = {
585 "ALTER TABLE cardinput DROP COLUMN freetoaironly;",
586 "ALTER TABLE cardinput DROP COLUMN radioservices;",
587 NULL
588 };
589  if (!performActualUpdate(updates, "1245", dbver))
590  return false;
591  }
592 
593  if (dbver == "1245")
594  {
595  const char *updates[] = {
596 "DELETE FROM capturecard WHERE cardtype = 'DBOX2';",
597 "DELETE FROM profilegroups WHERE cardtype = 'DBOX2';",
598 "ALTER TABLE capturecard DROP COLUMN dbox2_port;",
599 "ALTER TABLE capturecard DROP COLUMN dbox2_httpport;",
600 "ALTER TABLE capturecard DROP COLUMN dbox2_host;",
601 NULL
602 };
603  if (!performActualUpdate(updates, "1246", dbver))
604  return false;
605  }
606 
607  if (dbver == "1246")
608  {
609  const char *updates[] = {
610 "ALTER TABLE recorded ADD COLUMN bookmarkupdate timestamp default 0 NOT NULL",
611 "UPDATE recorded SET bookmarkupdate = lastmodified+1 WHERE bookmark = 1",
612 "UPDATE recorded SET bookmarkupdate = lastmodified WHERE bookmark = 0",
613 NULL
614 };
615  if (!performActualUpdate(updates, "1247", dbver))
616  return false;
617  }
618 
619  if (dbver == "1247")
620  {
621  const char *updates[] = {
622 "INSERT INTO profilegroups SET name = \"Import Recorder\", cardtype = 'IMPORT', is_default = 1;",
623 "INSERT INTO recordingprofiles SET name = \"Default\", profilegroup = 14;",
624 "INSERT INTO recordingprofiles SET name = \"Live TV\", profilegroup = 14;",
625 "INSERT INTO recordingprofiles SET name = \"High Quality\", profilegroup = 14;",
626 "INSERT INTO recordingprofiles SET name = \"Low Quality\", profilegroup = 14;",
627 NULL
628 };
629  if (!performActualUpdate(updates, "1248", dbver))
630  return false;
631  }
632 
633  if (dbver == "1248")
634  {
635  const char *updates[] = {
636 "DELETE FROM keybindings WHERE action = 'CUSTOMEDIT' "
637  "AND context = 'TV Frontend' AND keylist = 'E';",
638 NULL
639 };
640  if (!performActualUpdate(updates, "1249", dbver))
641  return false;
642  }
643 
644  if (dbver == "1249")
645  {
646  LOG(VB_GENERAL, LOG_CRIT, "Upgrading to MythTV schema version 1250");
647 
648  MSqlQuery select(MSqlQuery::InitCon());
649  select.prepare("SELECT hostname, data FROM settings "
650  " WHERE value = 'StickyKeys'");
651 
652  if (!select.exec())
653  {
654  MythDB::DBError("Unable to retrieve StickyKeys values.", select);
655  }
656  else
657  {
658  MSqlQuery update(MSqlQuery::InitCon());
659  while (select.next())
660  {
661  QString hostname = select.value(0).toString();
662  QString sticky_keys = select.value(1).toString();
663 
664  if ("1" == sticky_keys)
665  {
666  // Only remap the keys if they're currently set to defaults
667  update.prepare("UPDATE keybindings "
668  " SET keylist = :KEYS "
669  " WHERE context = 'TV Playback' AND "
670  " action = :ACTION AND "
671  " hostname = :HOSTNAME AND "
672  " keylist = :DEFAULT_KEYS");
673 
674  QString keylist = "";
675  QString action = "SEEKFFWD";
676  QString default_keys = "Right";
677 
678  update.bindValue(":KEYS", keylist);
679  update.bindValue(":ACTION", action);
680  update.bindValue(":HOSTNAME", hostname);
681  update.bindValue(":DEFAULT_KEYS", default_keys);
682  if (!update.exec())
683  MythDB::DBError("Unable to update keybindings",
684  update);
685 
686  keylist = "";
687  action = "SEEKRWND";
688  default_keys = "Left";
689 
690  update.bindValue(":KEYS", keylist);
691  update.bindValue(":ACTION", action);
692  update.bindValue(":HOSTNAME", hostname);
693  update.bindValue(":DEFAULT_KEYS", default_keys);
694  if (!update.exec())
695  MythDB::DBError("Unable to update keybindings",
696  update);
697 
698  keylist = ">,.,Right";
699  action = "FFWDSTICKY";
700  default_keys = ">,.";
701 
702  update.bindValue(":KEYS", keylist);
703  update.bindValue(":ACTION", action);
704  update.bindValue(":HOSTNAME", hostname);
705  update.bindValue(":DEFAULT_KEYS", default_keys);
706  if (!update.exec())
707  MythDB::DBError("Unable to update keybindings",
708  update);
709 
710  keylist = ",,<,Left";
711  action = "RWNDSTICKY";
712  default_keys = ",,<";
713 
714  update.bindValue(":KEYS", keylist);
715  update.bindValue(":ACTION", action);
716  update.bindValue(":HOSTNAME", hostname);
717  update.bindValue(":DEFAULT_KEYS", default_keys);
718  if (!update.exec())
719  MythDB::DBError("Unable to update keybindings",
720  update);
721  }
722  }
723  }
724 
725  if (!UpdateDBVersionNumber("1250", dbver))
726  return false;
727  }
728 
729  if (dbver == "1250")
730  {
731  const char *updates[] = {
732 "UPDATE recorded SET bookmark = 1 WHERE bookmark != 0;",
733 NULL
734 };
735  if (!performActualUpdate(updates, "1251", dbver))
736  return false;
737  }
738 
739  if (dbver == "1251")
740  {
741  LOG(VB_GENERAL, LOG_CRIT, "Upgrading to MythTV schema version 1252");
742 
743  MSqlQuery query(MSqlQuery::InitCon());
744  query.prepare("SHOW INDEX FROM recgrouppassword");
745 
746  if (!query.exec())
747  {
748  MythDB::DBError("Unable to retrieve current indices on "
749  "recgrouppassword.", query);
750  }
751  else
752  {
753  while (query.next())
754  {
755  QString index_name = query.value(2).toString();
756 
757  if ("recgroup" == index_name)
758  {
759  MSqlQuery update(MSqlQuery::InitCon());
760  update.prepare("ALTER TABLE recgrouppassword "
761  " DROP INDEX recgroup");
762 
763  if (!update.exec())
764  MythDB::DBError("Unable to drop duplicate index on "
765  "recgrouppassword. Ignoring.",
766  update);
767  break;
768  }
769  }
770  }
771 
772  if (!UpdateDBVersionNumber("1252", dbver))
773  return false;
774  }
775 
776  if (dbver == "1252")
777  {
778  LOG(VB_GENERAL, LOG_CRIT, "Upgrading to MythTV schema version 1253");
779 
780  MSqlQuery select(MSqlQuery::InitCon());
781  select.prepare("SELECT hostname, data FROM settings "
782  " WHERE value = 'StickyKeys'");
783 
784  if (!select.exec())
785  {
786  MythDB::DBError("Unable to retrieve StickyKeys values.", select);
787  }
788  else
789  {
790  MSqlQuery update(MSqlQuery::InitCon());
791  while (select.next())
792  {
793  QString hostname = select.value(0).toString();
794  QString sticky_keys = select.value(1).toString();
795 
796  if ("1" == sticky_keys)
797  {
798  // Only remap the keys if they're currently set to defaults
799  update.prepare("UPDATE keybindings "
800  " SET keylist = :KEYS "
801  " WHERE context = 'TV Playback' AND "
802  " action = :ACTION AND "
803  " hostname = :HOSTNAME AND "
804  " keylist = :DEFAULT_KEYS");
805 
806  QString keylist = ">,.";
807  QString action = "FFWDSTICKY";
808  QString default_keys = ">,.,Right";
809 
810  update.bindValue(":KEYS", keylist);
811  update.bindValue(":ACTION", action);
812  update.bindValue(":HOSTNAME", hostname);
813  update.bindValue(":DEFAULT_KEYS", default_keys);
814  if (!update.exec())
815  MythDB::DBError("Unable to update keybindings",
816  update);
817 
818  keylist = ",,<";
819  action = "RWNDSTICKY";
820  default_keys = ",,<,Left";
821 
822  update.bindValue(":KEYS", keylist);
823  update.bindValue(":ACTION", action);
824  update.bindValue(":HOSTNAME", hostname);
825  update.bindValue(":DEFAULT_KEYS", default_keys);
826  if (!update.exec())
827  MythDB::DBError("Unable to update keybindings",
828  update);
829  }
830  }
831  }
832 
833  if (!UpdateDBVersionNumber("1253", dbver))
834  return false;
835  }
836 
837  if (dbver == "1253")
838  {
839  if (gCoreContext->GetNumSetting("have-nit-fix") == 1)
840  {
841  // User has previously applied patch from ticket #7486.
842  LOG(VB_GENERAL, LOG_CRIT,
843  "Upgrading to MythTV schema version 1254");
844  if (!UpdateDBVersionNumber("1254", dbver))
845  return false;
846  }
847  else
848  {
849  const char *updates[] = {
850  "ALTER TABLE videosource ADD dvb_nit_id INT(6) DEFAULT -1;",
851  NULL
852  };
853  if (!performActualUpdate(updates, "1254", dbver))
854  return false;
855  }
856  }
857 
858  if (dbver == "1254")
859  {
860  const char *updates[] = {
861 "ALTER TABLE cardinput DROP COLUMN shareable;",
862 NULL
863 };
864  if (!performActualUpdate(updates, "1255", dbver))
865  return false;
866  }
867 
868  if (dbver == "1255")
869  {
870  const char *updates[] = {
871 "INSERT INTO keybindings (SELECT 'Main Menu', 'EXIT', 'System Exit', "
872  "(CASE data WHEN '1' THEN 'Ctrl+Esc' WHEN '2' THEN 'Meta+Esc' "
873  "WHEN '3' THEN 'Alt+Esc' WHEN '4' THEN 'Esc' ELSE '' END), hostname "
874  "FROM settings WHERE value = 'AllowQuitShutdown' GROUP BY hostname) "
875  "ON DUPLICATE KEY UPDATE keylist = VALUES(keylist);",
876 NULL
877 };
878  if (!performActualUpdate(updates, "1256", dbver))
879  return false;
880  }
881 
882  if (dbver == "1256")
883  {
884  const char *updates[] = {
885 "ALTER TABLE record DROP COLUMN tsdefault;",
886 NULL
887 };
888  if (!performActualUpdate(updates, "1257", dbver))
889  return false;
890  }
891 
892  if (dbver == "1257")
893  {
894  const char *updates[] = {
895 "CREATE TABLE internetcontent "
896 "( name VARCHAR(255) NOT NULL,"
897 " thumbnail VARCHAR(255),"
898 " type SMALLINT(3) NOT NULL,"
899 " author VARCHAR(128) NOT NULL,"
900 " description TEXT NOT NULL,"
901 " commandline TEXT NOT NULL,"
902 " version DOUBLE NOT NULL,"
903 " updated DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',"
904 " search BOOL NOT NULL,"
905 " tree BOOL NOT NULL,"
906 " podcast BOOL NOT NULL,"
907 " download BOOL NOT NULL,"
908 " host VARCHAR(128)) ENGINE=MyISAM DEFAULT CHARSET=utf8;",
909 "CREATE TABLE internetcontentarticles "
910 "( feedtitle VARCHAR(255) NOT NULL,"
911 " path TEXT NOT NULL,"
912 " paththumb TEXT NOT NULL,"
913 " title VARCHAR(255) NOT NULL,"
914 " subtitle VARCHAR(255) NOT NULL,"
915 " season SMALLINT(5) NOT NULL DEFAULT '0',"
916 " episode SMALLINT(5) NOT NULL DEFAULT '0',"
917 " description TEXT NOT NULL,"
918 " url TEXT NOT NULL,"
919 " type SMALLINT(3) NOT NULL,"
920 " thumbnail TEXT NOT NULL,"
921 " mediaURL TEXT NOT NULL,"
922 " author VARCHAR(255) NOT NULL,"
923 " date DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',"
924 " time INT NOT NULL,"
925 " rating VARCHAR(255) NOT NULL,"
926 " filesize BIGINT NOT NULL,"
927 " player VARCHAR(255) NOT NULL,"
928 " playerargs TEXT NOT NULL,"
929 " download VARCHAR(255) NOT NULL,"
930 " downloadargs TEXT NOT NULL,"
931 " width SMALLINT NOT NULL,"
932 " height SMALLINT NOT NULL,"
933 " language VARCHAR(128) NOT NULL,"
934 " podcast BOOL NOT NULL,"
935 " downloadable BOOL NOT NULL,"
936 " customhtml BOOL NOT NULL,"
937 " countries VARCHAR(255) NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8;",
938 NULL
939 };
940  if (!performActualUpdate(updates, "1258", dbver))
941  return false;
942  }
943 
944  if (dbver == "1258")
945  {
946  LOG(VB_GENERAL, LOG_CRIT, "Upgrading to MythTV schema version 1259");
947 
948  MSqlQuery select(MSqlQuery::InitCon());
949  select.prepare("SELECT hostname, data FROM settings "
950  " WHERE value = 'IndividualMuteControl'");
951 
952  if (!select.exec())
953  {
954  MythDB::DBError("Unable to retrieve IndividualMuteControl values.",
955  select);
956  }
957  else
958  {
959  MSqlQuery update(MSqlQuery::InitCon());
960  while (select.next())
961  {
962  QString hostname = select.value(0).toString();
963  QString individual_mute = select.value(1).toString();
964 
965  if ("1" == individual_mute)
966  {
967  update.prepare("DELETE FROM keybindings "
968  " WHERE action = 'CYCLEAUDIOCHAN' AND "
969  " hostname = :HOSTNAME AND "
970  " context IN ('TV Frontend', "
971  " 'TV Playback')");
972 
973  update.bindValue(":HOSTNAME", hostname);
974 
975  if (!update.exec())
976  {
977  MythDB::DBError("Unable to update keybindings",
978  update);
979  continue;
980  }
981 
982  update.prepare("UPDATE keybindings "
983  " SET action = 'CYCLEAUDIOCHAN', "
984  " description = 'Cycle audio channels'"
985  " WHERE action = 'MUTE' AND "
986  " hostname = :HOSTNAME AND "
987  " context IN ('TV Frontend', "
988  " 'TV Playback')");
989 
990  update.bindValue(":HOSTNAME", hostname);
991 
992  if (!update.exec())
993  {
994  MythDB::DBError("Unable to update keybindings",
995  update);
996  continue;
997  }
998 
999  update.prepare("REPLACE INTO keybindings "
1000  " VALUES (:CONTEXT, 'MUTE', 'Mute', "
1001  " '', :HOSTNAME)");
1002 
1003  update.bindValue(":CONTEXT", "TV Playback");
1004  update.bindValue(":HOSTNAME", hostname);
1005  if (!update.exec())
1006  {
1007  MythDB::DBError("Unable to update keybindings",
1008  update);
1009  continue;
1010  }
1011  update.bindValue(":CONTEXT", "TV Frontend");
1012  update.bindValue(":HOSTNAME", hostname);
1013  if (!update.exec())
1014  {
1015  MythDB::DBError("Unable to update keybindings",
1016  update);
1017  continue;
1018  }
1019 
1020  }
1021  }
1022  }
1023 
1024  if (!UpdateDBVersionNumber("1259", dbver))
1025  return false;
1026  }
1027 
1028  if (dbver == "1259")
1029  {
1030  LOG(VB_GENERAL, LOG_CRIT, "Upgrading to MythTV schema version 1260");
1031 
1032  MSqlQuery query(MSqlQuery::InitCon());
1033  query.prepare("DELETE FROM keybindings WHERE "
1034  "action IN ('PAGEUP','PAGEDOWN') AND "
1035  "context = 'TV FRONTEND'");
1036  query.exec();
1037 
1038  query.prepare("SELECT data FROM settings "
1039  " WHERE value = 'EPGEnableJumpToChannel'");
1040 
1041  if (!query.exec())
1042  {
1043  MythDB::DBError("Unable to retrieve EPGEnableJumpToChannel values.",
1044  query);
1045  }
1046  else
1047  {
1048  MSqlQuery bindings(MSqlQuery::InitCon());
1049  while (query.next())
1050  {
1051  QString EPGEnableJumpToChannel = query.value(0).toString();
1052 
1053  if ("1" == EPGEnableJumpToChannel)
1054  {
1055  bindings.prepare("SELECT action, context, hostname, keylist "
1056  " FROM keybindings "
1057  " WHERE action IN ('DAYLEFT', "
1058  " 'DAYRIGHT', 'TOGGLEEPGORDER') AND "
1059  " context IN ('TV Frontend', "
1060  " 'TV Playback')");
1061 
1062  if (!bindings.exec())
1063  {
1064  MythDB::DBError("Unable to update keybindings",
1065  bindings);
1066  continue;
1067  }
1068  else
1069  {
1070  while (bindings.next())
1071  {
1072  QString action = bindings.value(0).toString();
1073  QString context = bindings.value(1).toString();
1074  QString hostname = bindings.value(2).toString();
1075  QStringList oldKeylist = bindings.value(3).toString().split(',');
1076  QStringList newKeyList;
1077 
1078  QStringList::iterator it;
1079  for (it = oldKeylist.begin(); it != oldKeylist.end();++it)
1080  {
1081  bool ok = false;
1082  int num = (*it).toInt(&ok);
1083  if (!ok && num >= 0 && num <= 9)
1084  newKeyList << (*it);
1085  }
1086  QString keyList = newKeyList.join(",");
1087 
1088  MSqlQuery update(MSqlQuery::InitCon());
1089  update.prepare("UPDATE keybindings "
1090  " SET keylist = :KEYLIST "
1091  " WHERE action = :ACTION "
1092  " AND context = :CONTEXT "
1093  " AND hostname = :HOSTNAME");
1094 
1095  update.bindValue(":KEYLIST", keyList);
1096  update.bindValue(":ACTION", action);
1097  update.bindValue(":CONTEXT", context);
1098  update.bindValue(":HOSTNAME", hostname);
1099 
1100  if (!update.exec())
1101  {
1102  MythDB::DBError("Unable to update keybindings",
1103  update);
1104  continue;
1105  }
1106  }
1107  }
1108 
1109  }
1110  }
1111  }
1112 
1113  if (!UpdateDBVersionNumber("1260", dbver))
1114  return false;
1115  }
1116 
1117  if (dbver == "1260")
1118  {
1119  if (gCoreContext->GetNumSetting("MythFillFixProgramIDsHasRunOnce", 0))
1120  {
1121  LOG(VB_GENERAL, LOG_CRIT,
1122  "Upgrading to MythTV schema version 1261");
1123  if (!UpdateDBVersionNumber("1261", dbver))
1124  return false;
1125  }
1126  else
1127  {
1128 
1129  const char *updates[] = {
1130 "UPDATE recorded SET programid=CONCAT(SUBSTRING(programid, 1, 2), '00', "
1131 " SUBSTRING(programid, 3)) WHERE length(programid) = 12;",
1132 "UPDATE oldrecorded SET programid=CONCAT(SUBSTRING(programid, 1, 2), '00', "
1133 " SUBSTRING(programid, 3)) WHERE length(programid) = 12;",
1134 "UPDATE program SET programid=CONCAT(SUBSTRING(programid, 1, 2), '00', "
1135 " SUBSTRING(programid, 3)) WHERE length(programid) = 12;",
1136 NULL
1137 };
1138  if (!performActualUpdate(updates, "1261", dbver))
1139  return false;
1140  }
1141  }
1142 
1143  if (dbver == "1261")
1144  {
1145  const char *updates[] = {
1146 "UPDATE program SET description = '' WHERE description IS NULL;",
1147 "UPDATE record SET description = '' WHERE description IS NULL;",
1148 "UPDATE recorded SET description = '' WHERE description IS NULL;",
1149 "UPDATE recordedprogram SET description = '' WHERE description IS NULL;",
1150 "UPDATE oldrecorded SET description = '' WHERE description IS NULL;",
1151 "UPDATE mythlog SET details = '' WHERE details IS NULL;",
1152 "UPDATE settings SET data = '' WHERE data IS NULL;",
1153 "UPDATE powerpriority SET selectclause = '' WHERE selectclause IS NULL;",
1154 "UPDATE customexample SET fromclause = '' WHERE fromclause IS NULL;",
1155 "UPDATE customexample SET whereclause = '' WHERE whereclause IS NULL;",
1156 "ALTER TABLE program MODIFY COLUMN description VARCHAR(16000) "
1157 " NOT NULL default '';",
1158 "ALTER TABLE record MODIFY COLUMN description VARCHAR(16000) "
1159 " NOT NULL default '';",
1160 "ALTER TABLE recorded MODIFY COLUMN description VARCHAR(16000) "
1161 " NOT NULL default '';",
1162 "ALTER TABLE recordedprogram MODIFY COLUMN description VARCHAR(16000) "
1163 " NOT NULL default '';",
1164 "ALTER TABLE oldrecorded MODIFY COLUMN description VARCHAR(16000) "
1165 " NOT NULL default '';",
1166 "ALTER TABLE mythlog MODIFY COLUMN details VARCHAR(16000) "
1167 " NOT NULL default '';",
1168 "ALTER TABLE settings MODIFY COLUMN data VARCHAR(16000) "
1169 " NOT NULL default '';",
1170 "ALTER TABLE powerpriority MODIFY COLUMN selectclause VARCHAR(16000) "
1171 " NOT NULL default '';",
1172 "ALTER TABLE customexample MODIFY COLUMN fromclause VARCHAR(10000) "
1173 " NOT NULL default '';",
1174 "ALTER TABLE customexample MODIFY COLUMN whereclause VARCHAR(10000) "
1175 " NOT NULL default '';",
1176 NULL
1177 };
1178  if (!performActualUpdate(updates, "1262", dbver))
1179  return false;
1180  }
1181 
1182  if (dbver == "1262")
1183  {
1184  const char *updates[] = {
1185 "INSERT INTO recgrouppassword (recgroup, password) SELECT 'All Programs',data FROM settings WHERE value='AllRecGroupPassword' LIMIT 1;",
1186 "DELETE FROM settings WHERE value='AllRecGroupPassword';",
1187 NULL
1188 };
1189  if (!performActualUpdate(updates, "1263", dbver))
1190  return false;
1191  }
1192 
1193  if (dbver == "1263")
1194  {
1195  const char *updates[] = {
1196 "UPDATE settings SET hostname = NULL WHERE value='ISO639Language0' AND data != 'aar' AND hostname IS NOT NULL LIMIT 1;",
1197 "UPDATE settings SET hostname = NULL WHERE value='ISO639Language1' AND data != 'aar' AND hostname IS NOT NULL LIMIT 1;",
1198 "DELETE FROM settings WHERE value='ISO639Language0' AND hostname IS NOT NULL;",
1199 "DELETE FROM settings WHERE value='ISO639Language1' AND hostname IS NOT NULL;",
1200 NULL
1201 };
1202  if (!performActualUpdate(updates, "1264", dbver))
1203  return false;
1204  }
1205 
1206  if (dbver == "1264")
1207  {
1208  const char *updates[] = {
1209 "DELETE FROM displayprofiles WHERE profilegroupid IN "
1210 " (SELECT profilegroupid FROM displayprofilegroups "
1211 " WHERE name IN ('CPU++', 'CPU+', 'CPU--'))",
1212 "DELETE FROM displayprofilegroups WHERE name IN ('CPU++', 'CPU+', 'CPU--')",
1213 "DELETE FROM settings WHERE value = 'DefaultVideoPlaybackProfile' "
1214 " AND data IN ('CPU++', 'CPU+', 'CPU--')",
1215 "UPDATE displayprofiles SET data = 'ffmpeg' WHERE data = 'libmpeg2'",
1216 "UPDATE displayprofiles SET data = 'ffmpeg' WHERE data = 'xvmc'",
1217 "UPDATE displayprofiles SET data = 'xv-blit' WHERE data = 'xvmc-blit'",
1218 "UPDATE displayprofiles SET data = 'softblend' WHERE data = 'ia44blend'",
1219 NULL
1220 };
1221  if (!performActualUpdate(updates, "1265", dbver))
1222  return false;
1223  }
1224 
1225  if (dbver == "1265")
1226  {
1227  const char *updates[] = {
1228 "ALTER TABLE dtv_multiplex MODIFY COLUMN updatetimestamp "
1229 " TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;",
1230 "ALTER TABLE dvdbookmark MODIFY COLUMN `timestamp` "
1231 " TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;",
1232 "ALTER TABLE jobqueue MODIFY COLUMN statustime "
1233 " TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;",
1234 "ALTER TABLE recorded MODIFY COLUMN lastmodified "
1235 " TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;",
1236 NULL
1237 };
1238  if (!performActualUpdate(updates, "1266", dbver))
1239  return false;
1240  }
1241 
1242  if (dbver == "1266")
1243  {
1245  return false;
1246 
1247  const char *updates[] = {
1248 "DELETE FROM settings WHERE value = 'mythvideo.DBSchemaVer'",
1249 NULL
1250 };
1251  if (!performActualUpdate(updates, "1267", dbver))
1252  return false;
1253  }
1254 
1255  if (dbver == "1267")
1256  {
1257  const char *updates[] = {
1258 "ALTER TABLE channel MODIFY xmltvid VARCHAR(255) NOT NULL DEFAULT '';",
1259 NULL
1260 };
1261  if (!performActualUpdate(updates, "1268", dbver))
1262  return false;
1263  }
1264 
1265  if (dbver == "1268")
1266  {
1267 
1268  const char *updates[] = {
1269 "DELETE FROM keybindings WHERE action='PREVSOURCE' AND keylist='Ctrl+Y';",
1270 NULL
1271 };
1272  if (!performActualUpdate(updates, "1269", dbver))
1273  return false;
1274  }
1275 
1276  if (dbver == "1269")
1277  {
1278  const char *updates[] = {
1279 "DELETE FROM profilegroups WHERE id >= 15;",
1280 "DELETE FROM recordingprofiles WHERE profilegroup >= 15;",
1281 "INSERT INTO profilegroups SET id = '15', name = 'ASI Recorder (DVEO)',"
1282 " cardtype = 'ASI', is_default = 1;",
1283 "INSERT INTO recordingprofiles SET name = \"Default\", profilegroup = 15;",
1284 "INSERT INTO recordingprofiles SET name = \"Live TV\", profilegroup = 15;",
1285 "INSERT INTO recordingprofiles SET name = \"High Quality\", profilegroup = 15;",
1286 "INSERT INTO recordingprofiles SET name = \"Low Quality\", profilegroup = 15;",
1287 "INSERT INTO profilegroups SET id = '16', name = 'OCUR Recorder (CableLabs)',"
1288 " cardtype = 'OCUR', is_default = 1;",
1289 "INSERT INTO recordingprofiles SET name = \"Default\", profilegroup = 16;",
1290 "INSERT INTO recordingprofiles SET name = \"Live TV\", profilegroup = 16;",
1291 "INSERT INTO recordingprofiles SET name = \"High Quality\", profilegroup = 16;",
1292 "INSERT INTO recordingprofiles SET name = \"Low Quality\", profilegroup = 16;",
1293 NULL
1294 };
1295  if (!performActualUpdate(updates, "1270", dbver))
1296  return false;
1297  }
1298 
1299  if (dbver == "1270")
1300  {
1301  const char *updates[] = {
1302 "ALTER TABLE oldrecorded ADD future TINYINT(1) NOT NULL DEFAULT 0;",
1303 "UPDATE oldrecorded SET future=0;",
1304 NULL
1305 };
1306  if (!performActualUpdate(updates, "1271", dbver))
1307  return false;
1308  }
1309 
1310  if (dbver == "1271")
1311  {
1312  const char *updates[] = {
1313 "ALTER TABLE recordmatch MODIFY recordid INT UNSIGNED NOT NULL;",
1314 "ALTER TABLE recordmatch MODIFY chanid INT UNSIGNED NOT NULL;",
1315 "ALTER TABLE recordmatch MODIFY starttime DATETIME NOT NULL;",
1316 "ALTER TABLE recordmatch MODIFY manualid INT UNSIGNED NOT NULL;",
1317 "ALTER TABLE recordmatch ADD INDEX (starttime, chanid);",
1318 "ALTER TABLE oldrecorded MODIFY generic TINYINT(1) NOT NULL;",
1319 "ALTER TABLE oldrecorded ADD INDEX (future);",
1320 "ALTER TABLE oldrecorded ADD INDEX (starttime, chanid);",
1321 NULL
1322 };
1323  if (!performActualUpdate(updates, "1272", dbver))
1324  return false;
1325  }
1326 
1327  if (dbver == "1272")
1328  {
1329  const char *updates[] = {
1330 "DROP INDEX starttime ON recordmatch;",
1331 "DROP INDEX starttime ON oldrecorded;",
1332 "ALTER TABLE recordmatch ADD INDEX (chanid, starttime, manualid);",
1333 "ALTER TABLE oldrecorded ADD INDEX (chanid, starttime);",
1334 NULL
1335 };
1336  if (!performActualUpdate(updates, "1273", dbver))
1337  return false;
1338  }
1339 
1340  if (dbver == "1273")
1341  {
1342  const char *updates[] = {
1343 "ALTER TABLE internetcontent MODIFY COLUMN updated "
1344 " DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00';",
1345 "ALTER TABLE internetcontentarticles MODIFY COLUMN `date` "
1346 " DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00';",
1347 NULL
1348 };
1349 
1350  if (!performActualUpdate(updates, "1274", dbver))
1351  return false;
1352  }
1353 
1354  if (dbver == "1274")
1355  {
1356  const char *updates[] = {
1357 "UPDATE cardinput SET tunechan=NULL"
1358 " WHERE inputname='DVBInput' OR inputname='MPEG2TS';"
1359 "UPDATE dtv_multiplex SET symbolrate = NULL"
1360 " WHERE modulation LIKE 't%' OR modulation LIKE '%t';",
1361 "UPDATE dtv_multiplex"
1362 " SET bandwidth=SUBSTR(modulation,2,1)"
1363 " WHERE SUBSTR(modulation,3,3)='qam' OR"
1364 " SUBSTR(modulation,3,4)='qpsk';",
1365 "UPDATE dtv_multiplex"
1366 " SET bandwidth=SUBSTR(modulation,5,1)"
1367 " WHERE SUBSTR(modulation,1,4)='auto' AND"
1368 " LENGTH(modulation)=6;",
1369 "UPDATE dtv_multiplex SET modulation='auto'"
1370 " WHERE modulation LIKE 'auto%';",
1371 "UPDATE dtv_multiplex SET modulation='qam_16'"
1372 " WHERE modulation LIKE '%qam16%';",
1373 "UPDATE dtv_multiplex SET modulation='qam_32'"
1374 " WHERE modulation LIKE '%qam32%';",
1375 "UPDATE dtv_multiplex SET modulation='qam_64'"
1376 " WHERE modulation LIKE '%qam64%';",
1377 "UPDATE dtv_multiplex SET modulation='qam_128'"
1378 " WHERE modulation LIKE '%qam128%';",
1379 "UPDATE dtv_multiplex SET modulation='qam_256'"
1380 " WHERE modulation LIKE '%qam256%';",
1381 NULL
1382 };
1383  if (!performActualUpdate(updates, "1275", dbver))
1384  return false;
1385  }
1386 
1387  if (dbver == "1275")
1388  {
1389  const char *updates[] = {
1390 "DROP TABLE IF EXISTS `logging`;",
1391 "CREATE TABLE `logging` ( "
1392 " `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, "
1393 " `host` varchar(64) NOT NULL, "
1394 " `application` varchar(64) NOT NULL, "
1395 " `pid` int(11) NOT NULL, "
1396 " `thread` varchar(64) NOT NULL, "
1397 " `msgtime` datetime NOT NULL, "
1398 " `level` int(11) NOT NULL, "
1399 " `message` varchar(2048) NOT NULL, "
1400 " PRIMARY KEY (`id`), "
1401 " KEY `host` (`host`,`application`,`pid`,`msgtime`), "
1402 " KEY `msgtime` (`msgtime`), "
1403 " KEY `level` (`level`) "
1404 ") ENGINE=MyISAM DEFAULT CHARSET=utf8; ",
1405 NULL
1406 };
1407  if (!performActualUpdate(updates, "1276", dbver))
1408  return false;
1409  }
1410 
1411  if (dbver == "1276")
1412  {
1413  const char *updates[] = {
1414 "ALTER TABLE record ADD COLUMN filter INT UNSIGNED NOT NULL DEFAULT 0;",
1415 "CREATE TABLE IF NOT EXISTS recordfilter ("
1416 " filterid INT UNSIGNED NOT NULL PRIMARY KEY,"
1417 " description VARCHAR(64) DEFAULT NULL,"
1418 " clause VARCHAR(256) DEFAULT NULL,"
1419 " newruledefault TINYINT(1) DEFAULT 0) ENGINE=MyISAM DEFAULT CHARSET=utf8;",
1420 "INSERT INTO recordfilter (filterid, description, clause, newruledefault) "
1421 " VALUES (0, 'New episode', 'program.previouslyshown = 0', 0);",
1422 "INSERT INTO recordfilter (filterid, description, clause, newruledefault) "
1423 " VALUES (1, 'Identifiable episode', 'program.generic = 0', 0);",
1424 "INSERT INTO recordfilter (filterid, description, clause, newruledefault) "
1425 " VALUES (2, 'First showing', 'program.first > 0', 0);",
1426 "INSERT INTO recordfilter (filterid, description, clause, newruledefault) "
1427 " VALUES (3, 'Primetime', 'HOUR(program.starttime) >= 19 AND HOUR(program.starttime) < 23', 0);",
1428 "INSERT INTO recordfilter (filterid, description, clause, newruledefault) "
1429 " VALUES (4, 'Commercial free', 'channel.commmethod = -2', 0);",
1430 "INSERT INTO recordfilter (filterid, description, clause, newruledefault) "
1431 " VALUES (5, 'High definition', 'program.hdtv > 0', 0);",
1432 NULL
1433 };
1434 
1435  if (!performActualUpdate(updates, "1277", dbver))
1436  return false;
1437  }
1438 
1439  if (dbver == "1277")
1440  {
1441  const char *updates[] = {
1442 "ALTER TABLE record ADD autometadata TINYINT(1) NOT NULL DEFAULT "
1443 " 0 AFTER autouserjob4;",
1444 "ALTER TABLE record ADD inetref VARCHAR(40) NOT NULL AFTER programid;",
1445 "ALTER TABLE record ADD season SMALLINT(5) NOT NULL AFTER description;",
1446 "ALTER TABLE record ADD episode SMALLINT(5) NOT NULL AFTER season;",
1447 "ALTER TABLE recorded ADD inetref VARCHAR(40) NOT NULL AFTER programid;",
1448 "ALTER TABLE recorded ADD season SMALLINT(5) NOT NULL AFTER description;",
1449 "ALTER TABLE recorded ADD episode SMALLINT(5) NOT NULL AFTER season;",
1450 "ALTER TABLE oldrecorded ADD inetref VARCHAR(40) NOT NULL AFTER programid;",
1451 "ALTER TABLE oldrecorded ADD season SMALLINT(5) NOT NULL AFTER description;",
1452 "ALTER TABLE oldrecorded ADD episode SMALLINT(5) NOT NULL AFTER season;",
1453 NULL
1454 };
1455  if (!performActualUpdate(updates, "1278", dbver))
1456  return false;
1457  }
1458 
1459  if (dbver == "1278")
1460  {
1461  const char *updates[] = {
1462 "CREATE TABLE recordedartwork ( "
1463 " inetref VARCHAR(255) NOT NULL, "
1464 " season SMALLINT(5) NOT NULL, "
1465 " host TEXT NOT NULL, "
1466 " coverart TEXT NOT NULL, "
1467 " fanart TEXT NOT NULL, "
1468 " banner TEXT NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8;",
1469 NULL
1470 };
1471  if (!performActualUpdate(updates, "1279", dbver))
1472  return false;
1473  }
1474 
1475  if (dbver == "1279")
1476  {
1477  LOG(VB_GENERAL, LOG_CRIT, "Upgrading to MythTV schema version 1280");
1478 
1479  MSqlQuery select(MSqlQuery::InitCon());
1480  // New DBs/hosts will not have a NoPromptOnExit, so they'll get defaults
1481  select.prepare("SELECT hostname, data FROM settings "
1482  " WHERE value = 'NoPromptOnExit'");
1483  if (!select.exec())
1484  {
1485  MythDB::DBError("Unable to retrieve confirm exit values.", select);
1486  }
1487  else
1488  {
1489  MSqlQuery update(MSqlQuery::InitCon());
1490  while (select.next())
1491  {
1492  QString hostname = select.value(0).toString();
1493  // Yes, enabled NoPromptOnExit meant to prompt on exit
1494  QString prompt_on_exit = select.value(1).toString();
1495  // Default EXITPROMPT is wrong for all upgrades
1496  update.prepare("DELETE FROM keybindings "
1497  " WHERE action = 'EXITPROMPT' "
1498  " AND context = 'Main Menu' "
1499  " AND hostname = :HOSTNAME ;");
1500  update.bindValue(":HOSTNAME", hostname);
1501  if (!update.exec())
1502  MythDB::DBError("Unable to delete EXITPROMPT binding",
1503  update);
1504 
1505  if ("0" == prompt_on_exit)
1506  {
1507  // EXIT is already mapped appropriately, so just create a
1508  // no-keylist mapping for EXITPROMPT to prevent conflict
1509  update.prepare("INSERT INTO keybindings (context, action, "
1510  " description, keylist, hostname) "
1511  "VALUES ('Main Menu', 'EXITPROMPT', '', "
1512  " '', :HOSTNAME );");
1513  update.bindValue(":HOSTNAME", hostname);
1514  if (!update.exec())
1515  MythDB::DBError("Unable to create EXITPROMPT binding",
1516  update);
1517  }
1518  else
1519  {
1520  // EXIT must be changed to EXITPROMPT
1521  update.prepare("UPDATE keybindings "
1522  " SET action = 'EXITPROMPT' "
1523  " WHERE action = 'EXIT' "
1524  " AND context = 'Main Menu' "
1525  " AND hostname = :HOSTNAME ;");
1526  update.bindValue(":HOSTNAME", hostname);
1527  if (!update.exec())
1528  MythDB::DBError("Unable to update EXITPROMPT binding",
1529  update);
1530  }
1531  }
1532  }
1533 
1534  if (!UpdateDBVersionNumber("1280", dbver))
1535  return false;
1536  }
1537 
1538  if (dbver == "1280")
1539  {
1540  const char *updates[] = {
1541 "ALTER TABLE program ADD INDEX (subtitle);",
1542 "ALTER TABLE program ADD INDEX (description(255));",
1543 "ALTER TABLE oldrecorded ADD INDEX (subtitle);",
1544 "ALTER TABLE oldrecorded ADD INDEX (description(255));",
1545 NULL
1546 };
1547  if (!performActualUpdate(updates, "1281", dbver))
1548  return false;
1549  }
1550 
1551  if (dbver == "1281")
1552  {
1553  const char *updates[] = {
1554 "ALTER TABLE cardinput ADD changer_device VARCHAR(128) "
1555 "AFTER externalcommand;",
1556 "ALTER TABLE cardinput ADD changer_model VARCHAR(128) "
1557 "AFTER changer_device;",
1558 NULL
1559 };
1560  if (!performActualUpdate(updates, "1282", dbver))
1561  return false;
1562  }
1563 
1564  if (dbver == "1282")
1565  {
1566  const char *updates[] = {
1567 "UPDATE settings"
1568 " SET data = SUBSTR(data, INSTR(data, 'share/mythtv/metadata')+13)"
1569 " WHERE value "
1570 " IN ('TelevisionGrabber', "
1571 " 'MovieGrabber', "
1572 " 'mythgame.MetadataGrabber');",
1573 NULL
1574 };
1575 
1576  if (!performActualUpdate(updates, "1283", dbver))
1577  return false;
1578  }
1579 
1580  if (dbver == "1283")
1581  {
1582  const char *updates[] = {
1583 "UPDATE record SET filter = filter | 1 WHERE record.dupin & 0x20",
1584 "UPDATE record SET filter = filter | 2 WHERE record.dupin & 0x40",
1585 "UPDATE record SET filter = filter | 5 WHERE record.dupin & 0x80",
1586 "UPDATE record SET dupin = dupin & ~0xe0",
1587 "INSERT INTO recordfilter (filterid, description, clause, newruledefault) "
1588 " VALUES (6, 'This Episode', '(program.programid <> '''' AND program.programid = RECTABLE.programid) OR (program.programid = '''' AND program.subtitle = RECTABLE.subtitle AND program.description = RECTABLE.description)', 0);",
1589 NULL
1590 };
1591 
1592  if (!performActualUpdate(updates, "1284", dbver))
1593  return false;
1594  }
1595 
1596  if (dbver == "1284")
1597  {
1598  const char *updates[] = {
1599 "REPLACE INTO recordfilter (filterid, description, clause, newruledefault) "
1600 " VALUES (6, 'This Episode', '(RECTABLE.programid <> '''' AND program.programid = RECTABLE.programid) OR (RECTABLE.programid = '''' AND program.subtitle = RECTABLE.subtitle AND program.description = RECTABLE.description)', 0);",
1601 NULL
1602 };
1603 
1604  if (!performActualUpdate(updates, "1285", dbver))
1605  return false;
1606  }
1607 
1608  if (dbver == "1285")
1609  {
1610  const char *updates[] = {
1611 "DELETE FROM profilegroups WHERE id >= 17;",
1612 "DELETE FROM recordingprofiles WHERE profilegroup >= 17;",
1613 "INSERT INTO profilegroups SET id = '17', name = 'Ceton Recorder',"
1614 " cardtype = 'CETON', is_default = 1;",
1615 "INSERT INTO recordingprofiles SET name = \"Default\", profilegroup = 17;",
1616 "INSERT INTO recordingprofiles SET name = \"Live TV\", profilegroup = 17;",
1617 "INSERT INTO recordingprofiles SET name = \"High Quality\", profilegroup = 17;",
1618 "INSERT INTO recordingprofiles SET name = \"Low Quality\", profilegroup = 17;",
1619 NULL
1620 };
1621  if (!performActualUpdate(updates, "1286", dbver))
1622  return false;
1623  }
1624 
1625  if (dbver == "1286")
1626  {
1627  LOG(VB_GENERAL, LOG_CRIT, "Upgrading to MythTV schema version 1287");
1628  MSqlQuery query(MSqlQuery::InitCon());
1629  query.prepare("SELECT cardid, videodevice "
1630  "FROM capturecard "
1631  "WHERE cardtype='CETON'");
1632  if (!query.exec())
1633  {
1634  LOG(VB_GENERAL, LOG_ERR,
1635  "Unable to query capturecard table for upgrade to 1287.");
1636  return false;
1637  }
1638 
1639  MSqlQuery update(MSqlQuery::InitCon());
1640  update.prepare("UPDATE capturecard SET videodevice=:VIDDEV "
1641  "WHERE cardid=:CARDID");
1642  while (query.next())
1643  {
1644  uint cardid = query.value(0).toUInt();
1645  QString videodevice = query.value(1).toString();
1646  QStringList parts = videodevice.split("-");
1647  if (parts.size() != 2)
1648  {
1649  LOG(VB_GENERAL, LOG_ERR,
1650  "Unable to parse videodevice in upgrade to 1287.");
1651  return false;
1652  }
1653  if (parts[1].contains("."))
1654  continue; // already in new format, skip it..
1655 
1656  int input = max(parts[1].toInt() - 1, 0);
1657  videodevice = parts[0] + QString("-0.%1").arg(input);
1658  update.bindValue(":CARDID", cardid);
1659  update.bindValue(":VIDDEV", videodevice);
1660  if (!update.exec())
1661  {
1662  LOG(VB_GENERAL, LOG_ERR,
1663  "Failed to update videodevice in upgrade to 1287.");
1664  return false;
1665  }
1666  }
1667 
1668  if (!UpdateDBVersionNumber("1287", dbver))
1669  return false;
1670  }
1671 
1672  if (dbver == "1287")
1673  {
1674  const char *updates[] = {
1675 "CREATE TABLE IF NOT EXISTS livestream ( "
1676 " id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, "
1677 " width INT UNSIGNED NOT NULL, "
1678 " height INT UNSIGNED NOT NULL, "
1679 " bitrate INT UNSIGNED NOT NULL, "
1680 " audiobitrate INT UNSIGNED NOT NULL, "
1681 " samplerate INT UNSIGNED NOT NULL, "
1682 " audioonlybitrate INT UNSIGNED NOT NULL, "
1683 " segmentsize INT UNSIGNED NOT NULL DEFAULT 10, "
1684 " maxsegments INT UNSIGNED NOT NULL DEFAULT 0, "
1685 " startsegment INT UNSIGNED NOT NULL DEFAULT 0, "
1686 " currentsegment INT UNSIGNED NOT NULL DEFAULT 0, "
1687 " segmentcount INT UNSIGNED NOT NULL DEFAULT 0, "
1688 " percentcomplete INT UNSIGNED NOT NULL DEFAULT 0, "
1689 " created DATETIME NOT NULL, "
1690 " lastmodified DATETIME NOT NULL, "
1691 " relativeurl VARCHAR(512) NOT NULL, "
1692 " fullurl VARCHAR(1024) NOT NULL, "
1693 " status INT UNSIGNED NOT NULL DEFAULT 0, "
1694 " statusmessage VARCHAR(256) NOT NULL, "
1695 " sourcefile VARCHAR(512) NOT NULL, "
1696 " sourcehost VARCHAR(64) NOT NULL, "
1697 " sourcewidth INT UNSIGNED NOT NULL DEFAULT 0, "
1698 " sourceheight INT UNSIGNED NOT NULL DEFAULT 0, "
1699 " outdir VARCHAR(256) NOT NULL, "
1700 " outbase VARCHAR(128) NOT NULL "
1701 ") ENGINE=MyISAM DEFAULT CHARSET=utf8; ",
1702 NULL
1703 };
1704 
1705  if (!performActualUpdate(updates, "1288", dbver))
1706  return false;
1707  }
1708 
1709  if (dbver == "1288")
1710  {
1711  const char *updates[] = {
1712 "ALTER TABLE recordedprogram CHANGE COLUMN videoprop videoprop "
1713 " SET('HDTV', 'WIDESCREEN', 'AVC', '720', '1080', 'DAMAGED') NOT NULL; ",
1714 NULL
1715 };
1716  if (!performActualUpdate(updates, "1289", dbver))
1717  return false;
1718  }
1719 
1720  if (dbver == "1289")
1721  {
1722  const char *updates[] = {
1723 "DROP TABLE IF EXISTS netvisionrssitems;",
1724 "DROP TABLE IF EXISTS netvisionsearchgrabbers;",
1725 "DROP TABLE IF EXISTS netvisionsites;",
1726 "DROP TABLE IF EXISTS netvisiontreegrabbers;",
1727 "DROP TABLE IF EXISTS netvisiontreeitems;",
1728 NULL
1729 };
1730 
1731  if (!performActualUpdate(updates, "1290", dbver))
1732  return false;
1733  }
1734 
1735  if (dbver == "1290")
1736  {
1737  const char *updates[] = {
1738 "ALTER TABLE logging "
1739 " ALTER COLUMN host SET DEFAULT '', "
1740 " ALTER COLUMN application SET DEFAULT '', "
1741 " ALTER COLUMN pid SET DEFAULT '0', "
1742 " ALTER COLUMN thread SET DEFAULT '', "
1743 " ALTER COLUMN level SET DEFAULT '0';",
1744 "ALTER TABLE logging "
1745 " ADD COLUMN tid INT(11) NOT NULL DEFAULT '0' AFTER pid, "
1746 " ADD COLUMN filename VARCHAR(255) NOT NULL DEFAULT '' AFTER thread, "
1747 " ADD COLUMN line INT(11) NOT NULL DEFAULT '0' AFTER filename, "
1748 " ADD COLUMN function VARCHAR(255) NOT NULL DEFAULT '' AFTER line;",
1749 NULL
1750 };
1751 
1752  if (!performActualUpdate(updates, "1291", dbver))
1753  return false;
1754  }
1755 
1756  if (dbver == "1291")
1757  {
1758  const char *updates[] = {
1759 "UPDATE recorded r, recordedprogram rp SET r.duplicate=0 "
1760 " WHERE r.chanid=rp.chanid AND r.progstart=rp.starttime AND "
1761 " FIND_IN_SET('DAMAGED', rp.videoprop);",
1762 NULL
1763 };
1764 
1765  if (!performActualUpdate(updates, "1292", dbver))
1766  return false;
1767  }
1768 
1769  if (dbver == "1292")
1770  {
1771  const char *updates[] = {
1772 "ALTER TABLE cardinput "
1773 " ADD COLUMN schedorder INT(10) UNSIGNED NOT NULL DEFAULT '0', "
1774 " ADD COLUMN livetvorder INT(10) UNSIGNED NOT NULL DEFAULT '0';",
1775 "UPDATE cardinput SET schedorder = cardinputid;",
1776 "UPDATE cardinput SET livetvorder = cardid;",
1777 NULL
1778 };
1779 
1780  if (gCoreContext->GetNumSetting("LastFreeCard", 0))
1781  {
1782  updates[2] =
1783  "UPDATE cardinput SET livetvorder = "
1784  " (SELECT MAX(cardid) FROM capturecard) - cardid + 1;";
1785  }
1786 
1787  if (!performActualUpdate(updates, "1293", dbver))
1788  return false;
1789  }
1790 
1791  if (dbver == "1293")
1792  {
1793  const char *updates[] = {
1794 "TRUNCATE TABLE recordmatch",
1795 "ALTER TABLE recordmatch DROP INDEX recordid",
1796 "ALTER TABLE recordmatch ADD UNIQUE INDEX (recordid, chanid, starttime)",
1797 "UPDATE recordfilter SET description='Prime time' WHERE filterid=3",
1798 "UPDATE recordfilter SET description='This episode' WHERE filterid=6",
1799 "REPLACE INTO recordfilter (filterid, description, clause, newruledefault) "
1800 " VALUES (7, 'This series', '(RECTABLE.seriesid <> '''' AND program.seriesid = RECTABLE.seriesid)', 0);",
1801 NULL
1802 };
1803 
1804  if (!performActualUpdate(updates, "1294", dbver))
1805  return false;
1806  }
1807 
1808  if (dbver == "1294")
1809  {
1810  const char *updates[] = {
1811 "CREATE TABLE videocollection ("
1812 " intid int(10) unsigned NOT NULL AUTO_INCREMENT,"
1813 " title varchar(256) NOT NULL,"
1814 " contenttype set('MOVIE', 'TELEVISION', 'ADULT', 'MUSICVIDEO', 'HOMEVIDEO') NOT NULL default '',"
1815 " plot text,"
1816 " network varchar(128) DEFAULT NULL,"
1817 " inetref varchar(128) NOT NULL,"
1818 " certification varchar(128) DEFAULT NULL,"
1819 " genre int(10) unsigned DEFAULT '0',"
1820 " releasedate date DEFAULT NULL,"
1821 " language varchar(10) DEFAULT NULL,"
1822 " status varchar(64) DEFAULT NULL,"
1823 " rating float DEFAULT 0,"
1824 " ratingcount int(10) DEFAULT 0,"
1825 " runtime smallint(5) unsigned DEFAULT '0',"
1826 " banner text,"
1827 " fanart text,"
1828 " coverart text,"
1829 " PRIMARY KEY (intid),"
1830 " KEY title (title)"
1831 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
1832 "CREATE TABLE videopathinfo ("
1833 " intid int(10) unsigned NOT NULL AUTO_INCREMENT,"
1834 " path text,"
1835 " contenttype set('MOVIE', 'TELEVISION', 'ADULT', 'MUSICVIDEO', 'HOMEVIDEO') NOT NULL default '',"
1836 " collectionref int(10) default '0',"
1837 " recurse tinyint(1) default '0',"
1838 " PRIMARY KEY (intid)"
1839 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
1840 "ALTER TABLE videometadata ADD collectionref int(10) NOT NULL DEFAULT '0' AFTER inetref;",
1841 "ALTER TABLE videometadata ADD playcount int(10) NOT NULL DEFAULT '0' AFTER length;",
1842 "ALTER TABLE videometadata ADD contenttype set('MOVIE', 'TELEVISION', 'ADULT', 'MUSICVIDEO', 'HOMEVIDEO') NOT NULL default ''",
1843 "UPDATE videometadata SET contenttype = 'MOVIE';",
1844 "UPDATE videometadata SET contenttype = 'TELEVISION' WHERE season > 0 OR episode > 0;",
1845 NULL
1846 };
1847 
1848  if (!performActualUpdate(updates, "1295", dbver))
1849  return false;
1850  }
1851 
1852  if (dbver == "1295")
1853  {
1854  LOG(VB_GENERAL, LOG_CRIT, "Upgrading to MythTV schema version 1296");
1855  MSqlQuery query(MSqlQuery::InitCon());
1856  query.prepare("SELECT data, hostname "
1857  "FROM settings "
1858  "WHERE value='BackendServerIP'");
1859  if (!query.exec())
1860  {
1861  LOG(VB_GENERAL, LOG_ERR,
1862  "Unable to repair IP addresses for IPv4/IPv6 split.");
1863  return false;
1864  }
1865 
1866  MSqlQuery update(MSqlQuery::InitCon()), insert(MSqlQuery::InitCon());
1867  update.prepare("UPDATE settings "
1868  "SET data=:IP4ADDY "
1869  "WHERE value='BackendServerIP' "
1870  "AND hostname=:HOSTNAME");
1871  insert.prepare("INSERT INTO settings "
1872  "SET value='BackendServerIP6',"
1873  "data=:IP6ADDY,"
1874  "hostname=:HOSTNAME");
1875  while (query.next())
1876  {
1877  QHostAddress oldaddr(query.value(0).toString());
1878  QString hostname = query.value(1).toString();
1879 
1880  update.bindValue(":HOSTNAME", hostname);
1881  insert.bindValue(":HOSTNAME", hostname);
1882 
1883  if (oldaddr.protocol() == QAbstractSocket::IPv6Protocol)
1884  {
1885  update.bindValue(":IP4ADDY", "127.0.0.1");
1886  insert.bindValue(":IP6ADDY", query.value(0).toString());
1887  }
1888  else if (oldaddr.protocol() == QAbstractSocket::IPv4Protocol)
1889  {
1890  update.bindValue(":IP4ADDY", query.value(0).toString());
1891  insert.bindValue(":IP6ADDY", "::1");
1892  }
1893  else
1894  {
1895  update.bindValue(":IP4ADDY", "127.0.0.1");
1896  insert.bindValue(":IP6ADDY", "::1");
1897  LOG(VB_GENERAL, LOG_CRIT,
1898  QString("Invalid address string '%1' found on %2. "
1899  "Reverting to localhost defaults.")
1900  .arg(query.value(0).toString()).arg(hostname));
1901  }
1902 
1903  if (!update.exec() || !insert.exec())
1904  {
1905  LOG(VB_GENERAL, LOG_ERR, QString("Failed to separate IPv4 "
1906  "and IPv6 addresses for %1").arg(hostname));
1907  return false;
1908  }
1909 
1910  }
1911 
1912  if (!UpdateDBVersionNumber("1296", dbver))
1913  return false;
1914  }
1915 
1916  if (dbver == "1296")
1917  {
1918  const char *updates[] = {
1919 "ALTER TABLE videocollection CHANGE inetref collectionref "
1920 "VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_general_ci "
1921 "NOT NULL",
1922 "ALTER TABLE videocollection CHANGE genre genre VARCHAR(128) NULL DEFAULT ''",
1923 NULL
1924 };
1925 
1926  if (!performActualUpdate(updates, "1297", dbver))
1927  return false;
1928  }
1929 
1930  if (dbver == "1297")
1931  {
1932  const char *updates[] = {
1933 "ALTER TABLE videometadata CHANGE collectionref collectionref INT(10) "
1934 "NOT NULL DEFAULT -1",
1935 "UPDATE videometadata SET collectionref = '-1'",
1936 NULL
1937 };
1938 
1939  if (!performActualUpdate(updates, "1298", dbver))
1940  return false;
1941  }
1942 
1943  if (dbver == "1298")
1944  {
1945  LOG(VB_GENERAL, LOG_CRIT, "Upgrading to MythTV schema version 1299");
1946 
1947  // DeletedMaxAge setting only exists if the user ever triggered the
1948  // DeletedExpireOptions TriggeredConfigurationGroup (enabled
1949  // AutoExpireInsteadOfDelete) and changed DeletedMaxAge from its
1950  // default of zero, so "reset" it to ensure it's in the database before
1951  // the update
1952  QString deletedMaxAge = gCoreContext->GetSetting("DeletedMaxAge", "0");
1953  gCoreContext->SaveSettingOnHost("DeletedMaxAge", deletedMaxAge, NULL);
1954 
1955  QString queryStr;
1956  if (gCoreContext->GetNumSetting("AutoExpireInsteadOfDelete", 0))
1957  {
1958  queryStr = "UPDATE settings SET data='-1' WHERE "
1959  "value='DeletedMaxAge' AND data='0'";
1960  }
1961  else
1962  {
1963  queryStr = "UPDATE settings SET data='0' WHERE "
1964  "value='DeletedMaxAge'";
1965  }
1966 
1967  MSqlQuery query(MSqlQuery::InitCon());
1968  query.prepare(queryStr);
1969  if (!query.exec())
1970  {
1971  MythDB::DBError("Could not perform update for '1299'", query);
1972  return false;
1973  }
1974 
1975  if (!UpdateDBVersionNumber("1299", dbver))
1976  return false;
1977  }
1978 
1979  if (dbver == "1299")
1980  {
1981  const char *updates[] = {
1982 "ALTER TABLE recordmatch ADD COLUMN findid INT NOT NULL DEFAULT 0",
1983 "ALTER TABLE recordmatch ADD INDEX (recordid, findid)",
1984 NULL
1985 };
1986 
1987  if (!performActualUpdate(updates, "1300", dbver))
1988  return false;
1989  }
1990 
1991  if (dbver == "1300")
1992  {
1993  const char *updates[] = {
1994 "ALTER TABLE channel ADD COLUMN iptvid SMALLINT(6) UNSIGNED;",
1995 "CREATE TABLE iptv_channel ("
1996 " iptvid SMALLINT(6) UNSIGNED NOT NULL auto_increment,"
1997 " chanid INT(10) UNSIGNED NOT NULL,"
1998 " url TEXT NOT NULL,"
1999 " type set('data', "
2000 " 'rfc2733-1','rfc2733-2', "
2001 " 'rfc5109-1','rfc5109-2', "
2002 " 'smpte2022-1','smpte2022-2'),"
2003 " bitrate INT(10) UNSIGNED NOT NULL,"
2004 " PRIMARY KEY (iptvid)"
2005 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2006 NULL
2007 };
2008 
2009  if (!performActualUpdate(updates, "1301", dbver))
2010  return false;
2011  }
2012 
2013  if (dbver == "1301")
2014  {
2015  LOG(VB_GENERAL, LOG_CRIT, "Upgrading to MythTV schema version 1302");
2016  // Create the Default recording rule template
2017  RecordingRule record;
2018  record.MakeTemplate("Default");
2019  record.m_type = kTemplateRecord;
2020  record.Save(false);
2021 
2022  if (!UpdateDBVersionNumber("1302", dbver))
2023  return false;
2024  }
2025 
2026  if (dbver == "1302")
2027  {
2028  QDateTime loc = QDateTime::currentDateTime();
2029  QDateTime utc = loc.toUTC();
2030  loc = QDateTime(loc.date(), loc.time(), Qt::UTC);
2031  int utc_offset = loc.secsTo(utc) / 60;
2032 
2033  QList<QByteArray> updates_ba;
2034 
2035  // Convert DATE and TIME in record into DATETIME
2036  const char *pre_sql[] = {
2037  "CREATE TEMPORARY TABLE recordupdate ("
2038  "recid INT, starttime DATETIME, endtime DATETIME)",
2039  "INSERT INTO recordupdate (recid, starttime, endtime) "
2040  "SELECT recordid, "
2041  " CONCAT(startdate, ' ', starttime), "
2042  " CONCAT(enddate, ' ', endtime) FROM record",
2043  };
2044  for (uint i = 0; i < sizeof(pre_sql)/sizeof(char*); i++)
2045  updates_ba.push_back(QByteArray(pre_sql[i]));
2046 
2047  // Convert various DATETIME fields from local time to UTC
2048  if (0 != utc_offset)
2049  {
2050  const char *with_endtime[] = {
2051  "program", "recorded", "oldrecorded", "recordupdate",
2052  };
2053  const char *without_endtime[] = {
2054  "programgenres", "programrating", "credits",
2055  "jobqueue",
2056  };
2057  QString order = (utc_offset > 0) ? "-starttime" : "starttime";
2058 
2059  for (uint i = 0; i < sizeof(with_endtime)/sizeof(char*); i++)
2060  {
2061  updates_ba.push_back(
2062  QString("UPDATE %1 "
2063  "SET starttime = "
2064  " CONVERT_TZ(starttime, 'SYSTEM', 'UTC'), "
2065  " endtime = "
2066  " CONVERT_TZ(endtime, 'SYSTEM', 'UTC') "
2067  "ORDER BY %4")
2068  .arg(with_endtime[i])
2069  .arg(order).toLocal8Bit());
2070  }
2071 
2072  for (uint i = 0; i < sizeof(without_endtime)/sizeof(char*); i++)
2073  {
2074  updates_ba.push_back(
2075  QString("UPDATE %1 "
2076  "SET starttime = "
2077  " CONVERT_TZ(starttime, 'SYSTEM', 'UTC') "
2078  "ORDER BY %3")
2079  .arg(without_endtime[i]).arg(order)
2080  .toLocal8Bit());
2081  }
2082 
2083  updates_ba.push_back(
2084  QString("UPDATE oldprogram "
2085  "SET airdate = "
2086  " CONVERT_TZ(airdate, 'SYSTEM', 'UTC') "
2087  "ORDER BY %3")
2088  .arg((utc_offset > 0) ? "-airdate" :
2089  "airdate").toLocal8Bit());
2090 
2091  updates_ba.push_back(
2092  QString("UPDATE recorded "
2093  "set progstart = "
2094  " CONVERT_TZ(progstart, 'SYSTEM', 'UTC'), "
2095  " progend = "
2096  " CONVERT_TZ(progend, 'SYSTEM', 'UTC') ")
2097  .toLocal8Bit());
2098  }
2099 
2100  // Convert DATETIME back to seperate DATE and TIME in record table
2101  const char *post_sql[] = {
2102  "UPDATE record, recordupdate "
2103  "SET record.startdate = DATE(recordupdate.starttime), "
2104  " record.starttime = TIME(recordupdate.starttime), "
2105  " record.enddate = DATE(recordupdate.endtime), "
2106  " record.endtime = TIME(recordupdate.endtime) "
2107  "WHERE recordid = recid",
2108  "DROP TABLE recordupdate",
2109  };
2110 
2111  for (uint i = 0; i < sizeof(post_sql)/sizeof(char*); i++)
2112  updates_ba.push_back(QByteArray(post_sql[i]));
2113 
2114  // Convert update ByteArrays to NULL terminated char**
2115  QList<QByteArray>::const_iterator it = updates_ba.begin();
2116  vector<const char*> updates;
2117  for (; it != updates_ba.end(); ++it)
2118  updates.push_back((*it).constData());
2119  updates.push_back(NULL);
2120 
2121  // do the actual update
2122  if (!performActualUpdate(&updates[0], "1303", dbver))
2123  return false;
2124  }
2125 
2126  if (dbver == "1303")
2127  {
2128  QDateTime loc = QDateTime::currentDateTime();
2129  QDateTime utc = loc.toUTC();
2130  loc = QDateTime(loc.date(), loc.time(), Qt::UTC);
2131  int utc_offset = loc.secsTo(utc) / 60;
2132 
2133  QList<QByteArray> updates_ba;
2134 
2135  // Convert various DATETIME fields from local time to UTC
2136  if (0 != utc_offset)
2137  {
2138  const char *with_endtime[] = {
2139  "recordedprogram",
2140  };
2141  const char *without_endtime[] = {
2142  "recordedseek", "recordedmarkup", "recordedrating",
2143  "recordedcredits",
2144  };
2145  QString order = (utc_offset > 0) ? "-starttime" : "starttime";
2146 
2147  for (uint i = 0; i < sizeof(with_endtime)/sizeof(char*); i++)
2148  {
2149  updates_ba.push_back(
2150  QString("UPDATE %1 "
2151  "SET starttime = CONVERT_TZ(starttime, 'SYSTEM', 'UTC'), "
2152  " endtime = CONVERT_TZ(endtime, 'SYSTEM', 'UTC') "
2153  "ORDER BY %4")
2154  .arg(with_endtime[i]).arg(order).toLocal8Bit());
2155  }
2156 
2157  for (uint i = 0; i < sizeof(without_endtime)/sizeof(char*); i++)
2158  {
2159  updates_ba.push_back(
2160  QString("UPDATE %1 "
2161  "SET starttime = CONVERT_TZ(starttime, 'SYSTEM', 'UTC') "
2162  "ORDER BY %3")
2163  .arg(without_endtime[i]).arg(order).toLocal8Bit());
2164  }
2165  }
2166 
2167  // Convert update ByteArrays to NULL terminated char**
2168  QList<QByteArray>::const_iterator it = updates_ba.begin();
2169  vector<const char*> updates;
2170  for (; it != updates_ba.end(); ++it)
2171  updates.push_back((*it).constData());
2172  updates.push_back(NULL);
2173 
2174  // do the actual update
2175  if (!performActualUpdate(&updates[0], "1304", dbver))
2176  return false;
2177  }
2178 
2179  if (dbver == "1304")
2180  {
2181  QList<QByteArray> updates_ba;
2182 
2183  updates_ba.push_back(
2184 "UPDATE recordfilter SET clause="
2185 "'HOUR(CONVERT_TZ(program.starttime, ''UTC'', ''SYSTEM'')) >= 19 AND "
2186 "HOUR(CONVERT_TZ(program.starttime, ''UTC'', ''SYSTEM'')) < 22' "
2187 "WHERE filterid=3");
2188 
2189  updates_ba.push_back(QString(
2190 "UPDATE record SET findday = "
2191 " DAYOFWEEK(CONVERT_TZ(ADDTIME('2012-06-02 00:00:00', findtime), "
2192 " 'SYSTEM', 'UTC') + INTERVAL findday DAY) "
2193 "WHERE findday > 0").toLocal8Bit());
2194 
2195  updates_ba.push_back(QString(
2196 "UPDATE record SET findtime = "
2197 " TIME(CONVERT_TZ(ADDTIME('2012-06-02 00:00:00', findtime), "
2198 " 'SYSTEM', 'UTC')) ")
2199  .toLocal8Bit());
2200 
2201  // Convert update ByteArrays to NULL terminated char**
2202  QList<QByteArray>::const_iterator it = updates_ba.begin();
2203  vector<const char*> updates;
2204  for (; it != updates_ba.end(); ++it)
2205  updates.push_back((*it).constData());
2206  updates.push_back(NULL);
2207 
2208  if (!performActualUpdate(&updates[0], "1305", dbver))
2209  return false;
2210  }
2211 
2212  if (dbver == "1305")
2213  {
2214  // Reverse the findday/findtime changes from above since those
2215  // values need to be kept in local time.
2216 
2217  QList<QByteArray> updates_ba;
2218 
2219  updates_ba.push_back(QString(
2220 "UPDATE record SET findday = "
2221 " DAYOFWEEK(CONVERT_TZ(ADDTIME('2012-06-02 00:00:00', findtime), "
2222 " 'UTC', 'SYSTEM') + INTERVAL findday DAY) "
2223 "WHERE findday > 0").toLocal8Bit());
2224 
2225  updates_ba.push_back(QString(
2226 "UPDATE record SET findtime = "
2227 " TIME(CONVERT_TZ(ADDTIME('2012-06-02 00:00:00', findtime), "
2228 " 'UTC', 'SYSTEM')) ").toLocal8Bit());
2229 
2230  // Convert update ByteArrays to NULL terminated char**
2231  QList<QByteArray>::const_iterator it = updates_ba.begin();
2232  vector<const char*> updates;
2233  for (; it != updates_ba.end(); ++it)
2234  updates.push_back((*it).constData());
2235  updates.push_back(NULL);
2236 
2237  if (!performActualUpdate(&updates[0], "1306", dbver))
2238  return false;
2239  }
2240 
2241  if (dbver == "1306")
2242  {
2243  // staging temporary tables to use with rewritten file scanner
2244  // due to be replaced by finalized RecordedFile changes
2245 
2246  const char *updates[] = {
2247 "CREATE TABLE scannerfile ("
2248 " `fileid` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,"
2249 " `filesize` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,"
2250 " `filehash` VARCHAR(64) NOT NULL DEFAULT '',"
2251 " `added` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,"
2252 " PRIMARY KEY (`fileid`),"
2253 " UNIQUE KEY filehash (`filehash`)"
2254 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2255 "CREATE TABLE scannerpath ("
2256 " `fileid` BIGINT(20) UNSIGNED NOT NULL,"
2257 " `hostname` VARCHAR(64) NOT NULL DEFAULT 'localhost',"
2258 " `storagegroup` VARCHAR(32) NOT NULL DEFAULT 'Default',"
2259 " `filename` VARCHAR(255) NOT NULL DEFAULT '',"
2260 " PRIMARY KEY (`fileid`)"
2261 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2262 "CREATE TABLE videopart ("
2263 " `fileid` BIGINT(20) UNSIGNED NOT NULL,"
2264 " `videoid` INT(10) UNSIGNED NOT NULL,"
2265 " `order` SMALLINT UNSIGNED NOT NULL DEFAULT 1,"
2266 " PRIMARY KEY `part` (`videoid`, `order`)"
2267 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2268 NULL
2269 };
2270 
2271 // removed "UNIQUE KEY path (`storagegroup`, `hostname`, `filename`)" from
2272 // scannerpath as a quick fix for key length constraints
2273 
2274  if (!performActualUpdate(&updates[0], "1307", dbver))
2275  return false;
2276  }
2277 
2278  if (dbver == "1307")
2279  {
2280  const char *updates[] = {
2281 "ALTER TABLE channel MODIFY COLUMN icon varchar(255) NOT NULL DEFAULT '';",
2282 "UPDATE channel SET icon='' WHERE icon='none';",
2283 NULL
2284 };
2285  if (!performActualUpdate(&updates[0], "1308", dbver))
2286  return false;
2287  }
2288 
2289  if (dbver == "1308")
2290  {
2291  const char *updates[] = {
2292 // Add this time filter
2293 "REPLACE INTO recordfilter (filterid, description, clause, newruledefault) "
2294 " VALUES (8, 'This time', 'ABS(TIMESTAMPDIFF(MINUTE, CONVERT_TZ("
2295 " ADDTIME(RECTABLE.startdate, RECTABLE.starttime), ''UTC'', ''SYSTEM''), "
2296 " CONVERT_TZ(program.starttime, ''UTC'', ''SYSTEM''))) MOD 1440 <= 10', 0)",
2297 // Add this day and time filter
2298 "REPLACE INTO recordfilter (filterid, description, clause, newruledefault) "
2299 " VALUES (9, 'This day and time', 'ABS(TIMESTAMPDIFF(MINUTE, CONVERT_TZ("
2300 " ADDTIME(RECTABLE.startdate, RECTABLE.starttime), ''UTC'', ''SYSTEM''), "
2301 " CONVERT_TZ(program.starttime, ''UTC'', ''SYSTEM''))) MOD 10080 <= 10', 0)",
2302 // Convert old, normal Timeslot rules to Channel with time filter
2303 "UPDATE record SET type = 3, filter = filter|256 "
2304 " WHERE type = 2 AND search = 0",
2305 // Convert old, normal Weekslot rules to Channel with day and time filter
2306 "UPDATE record SET type = 3, filter = filter|512 "
2307 " WHERE type = 5 AND search = 0",
2308 // Convert old, normal find daily to new, power search, find daily
2309 "UPDATE record SET type = 2, search = 1, chanid = 0, station = '', "
2310 " subtitle = '', description = CONCAT('program.title = ''', "
2311 " REPLACE(title, '''', ''''''), ''''), "
2312 " title = CONCAT(title, ' (Power Search)') WHERE type = 9 AND search = 0",
2313 // Convert old, normal find weekly to new, power search, find weekly
2314 "UPDATE record SET type = 5, search = 1, chanid = 0, station = '', "
2315 " subtitle = '', description = CONCAT('program.title = ''', "
2316 " REPLACE(title, '''', ''''''), ''''), "
2317 " title = CONCAT(title, ' (Power Search)') WHERE type = 10 AND search = 0",
2318 // Convert old, find daily to new, find daily
2319 "UPDATE record SET type = 2 WHERE type = 9",
2320 // Convert old, find weekly to new, find weekly
2321 "UPDATE record SET type = 5 WHERE type = 10",
2322 NULL
2323 };
2324  if (!performActualUpdate(&updates[0], "1309", dbver))
2325  return false;
2326  }
2327 
2328  if (dbver == "1309")
2329  {
2330  const char *updates[] = {
2331 // Add this channel filter
2332 "REPLACE INTO recordfilter (filterid, description, clause, newruledefault) "
2333 " VALUES (10, 'This channel', 'channel.callsign = RECTABLE.station', 0)",
2334 // Convert old, Channel rules to All with channel filter
2335 "UPDATE record SET type = 4, filter = filter|1024 WHERE type = 3",
2336 NULL
2337 };
2338  if (!performActualUpdate(&updates[0], "1310", dbver))
2339  return false;
2340  }
2341 
2342  return true;
2343 }
2344 
2364 {
2365  MSqlQuery query(MSqlQuery::InitCon());
2366  query.prepare("SHOW TABLES;");
2367 
2368  // check for > 1 table here since the schemalock table should exist
2369  if (query.exec() && query.isActive() && query.size() > 1)
2370  {
2371  QString msg = QString(
2372  "Told to create a NEW database schema, but the database\n"
2373  "already has %1 tables.\n"
2374  "If you are sure this is a good MythTV database, verify\n"
2375  "that the settings table has the DBSchemaVer variable.\n")
2376  .arg(query.size() - 1);
2377  LOG(VB_GENERAL, LOG_ERR, msg);
2378  return false;
2379  }
2380 
2381  LOG(VB_GENERAL, LOG_NOTICE,
2382  "Inserting MythTV initial database information.");
2383 
2384  const char *updates[] = {
2385 "CREATE TABLE capturecard ("
2386 " cardid int(10) unsigned NOT NULL AUTO_INCREMENT,"
2387 " videodevice varchar(128) DEFAULT NULL,"
2388 " audiodevice varchar(128) DEFAULT NULL,"
2389 " vbidevice varchar(128) DEFAULT NULL,"
2390 " cardtype varchar(32) DEFAULT 'V4L',"
2391 " defaultinput varchar(32) DEFAULT 'Television',"
2392 " audioratelimit int(11) DEFAULT NULL,"
2393 " hostname varchar(64) DEFAULT NULL,"
2394 " dvb_swfilter int(11) DEFAULT '0',"
2395 " dvb_sat_type int(11) NOT NULL DEFAULT '0',"
2396 " dvb_wait_for_seqstart int(11) NOT NULL DEFAULT '1',"
2397 " skipbtaudio tinyint(1) DEFAULT '0',"
2398 " dvb_on_demand tinyint(4) NOT NULL DEFAULT '0',"
2399 " dvb_diseqc_type smallint(6) DEFAULT NULL,"
2400 " firewire_speed int(10) unsigned NOT NULL DEFAULT '0',"
2401 " firewire_model varchar(32) DEFAULT NULL,"
2402 " firewire_connection int(10) unsigned NOT NULL DEFAULT '0',"
2403 " signal_timeout int(11) NOT NULL DEFAULT '1000',"
2404 " channel_timeout int(11) NOT NULL DEFAULT '3000',"
2405 " dvb_tuning_delay int(10) unsigned NOT NULL DEFAULT '0',"
2406 " contrast int(11) NOT NULL DEFAULT '0',"
2407 " brightness int(11) NOT NULL DEFAULT '0',"
2408 " colour int(11) NOT NULL DEFAULT '0',"
2409 " hue int(11) NOT NULL DEFAULT '0',"
2410 " diseqcid int(10) unsigned DEFAULT NULL,"
2411 " dvb_eitscan tinyint(1) NOT NULL DEFAULT '1',"
2412 " PRIMARY KEY (cardid)"
2413 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2414 "CREATE TABLE cardinput ("
2415 " cardinputid int(10) unsigned NOT NULL AUTO_INCREMENT,"
2416 " cardid int(10) unsigned NOT NULL DEFAULT '0',"
2417 " sourceid int(10) unsigned NOT NULL DEFAULT '0',"
2418 " inputname varchar(32) NOT NULL DEFAULT '',"
2419 " externalcommand varchar(128) DEFAULT NULL,"
2420 " changer_device varchar(128) DEFAULT NULL,"
2421 " changer_model varchar(128) DEFAULT NULL,"
2422 " tunechan varchar(10) DEFAULT NULL,"
2423 " startchan varchar(10) DEFAULT NULL,"
2424 " displayname varchar(64) NOT NULL DEFAULT '',"
2425 " dishnet_eit tinyint(1) NOT NULL DEFAULT '0',"
2426 " recpriority int(11) NOT NULL DEFAULT '0',"
2427 " quicktune tinyint(4) NOT NULL DEFAULT '0',"
2428 " schedorder int(10) unsigned NOT NULL DEFAULT '0',"
2429 " livetvorder int(10) unsigned NOT NULL DEFAULT '0',"
2430 " PRIMARY KEY (cardinputid)"
2431 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2432 "CREATE TABLE channel ("
2433 " chanid int(10) unsigned NOT NULL DEFAULT '0',"
2434 " channum varchar(10) NOT NULL DEFAULT '',"
2435 " freqid varchar(10) DEFAULT NULL,"
2436 " sourceid int(10) unsigned DEFAULT NULL,"
2437 " callsign varchar(20) NOT NULL DEFAULT '',"
2438 " `name` varchar(64) NOT NULL DEFAULT '',"
2439 " icon varchar(255) NOT NULL DEFAULT '',"
2440 " finetune int(11) DEFAULT NULL,"
2441 " videofilters varchar(255) NOT NULL DEFAULT '',"
2442 " xmltvid varchar(255) NOT NULL DEFAULT '',"
2443 " recpriority int(10) NOT NULL DEFAULT '0',"
2444 " contrast int(11) DEFAULT '32768',"
2445 " brightness int(11) DEFAULT '32768',"
2446 " colour int(11) DEFAULT '32768',"
2447 " hue int(11) DEFAULT '32768',"
2448 " tvformat varchar(10) NOT NULL DEFAULT 'Default',"
2449 " visible tinyint(1) NOT NULL DEFAULT '1',"
2450 " outputfilters varchar(255) NOT NULL DEFAULT '',"
2451 " useonairguide tinyint(1) DEFAULT '0',"
2452 " mplexid smallint(6) DEFAULT NULL,"
2453 " serviceid mediumint(8) unsigned DEFAULT NULL,"
2454 " tmoffset int(11) NOT NULL DEFAULT '0',"
2455 " atsc_major_chan int(10) unsigned NOT NULL DEFAULT '0',"
2456 " atsc_minor_chan int(10) unsigned NOT NULL DEFAULT '0',"
2457 " last_record datetime NOT NULL,"
2458 " default_authority varchar(32) NOT NULL DEFAULT '',"
2459 " commmethod int(11) NOT NULL DEFAULT '-1',"
2460 " iptvid smallint(6) unsigned DEFAULT NULL,"
2461 " PRIMARY KEY (chanid),"
2462 " KEY channel_src (channum,sourceid),"
2463 " KEY sourceid (sourceid,xmltvid,chanid),"
2464 " KEY visible (visible)"
2465 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2466 "CREATE TABLE channelgroup ("
2467 " id int(10) unsigned NOT NULL AUTO_INCREMENT,"
2468 " chanid int(11) unsigned NOT NULL DEFAULT '0',"
2469 " grpid int(11) NOT NULL DEFAULT '1',"
2470 " PRIMARY KEY (id)"
2471 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2472 "CREATE TABLE channelgroupnames ("
2473 " grpid int(10) unsigned NOT NULL AUTO_INCREMENT,"
2474 " `name` varchar(64) NOT NULL DEFAULT '0',"
2475 " PRIMARY KEY (grpid)"
2476 ") ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;",
2477 "CREATE TABLE channelscan ("
2478 " scanid int(3) unsigned NOT NULL AUTO_INCREMENT,"
2479 " cardid int(3) unsigned NOT NULL,"
2480 " sourceid int(3) unsigned NOT NULL,"
2481 " processed tinyint(1) unsigned NOT NULL,"
2482 " scandate datetime NOT NULL,"
2483 " PRIMARY KEY (scanid)"
2484 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2485 "CREATE TABLE channelscan_channel ("
2486 " transportid int(6) unsigned NOT NULL,"
2487 " scanid int(3) unsigned NOT NULL,"
2488 " mplex_id smallint(6) NOT NULL,"
2489 " source_id int(3) unsigned NOT NULL,"
2490 " channel_id int(3) unsigned NOT NULL DEFAULT '0',"
2491 " callsign varchar(20) NOT NULL DEFAULT '',"
2492 " service_name varchar(64) NOT NULL DEFAULT '',"
2493 " chan_num varchar(10) NOT NULL DEFAULT '',"
2494 " service_id mediumint(8) unsigned NOT NULL DEFAULT '0',"
2495 " atsc_major_channel int(4) unsigned NOT NULL DEFAULT '0',"
2496 " atsc_minor_channel int(4) unsigned NOT NULL DEFAULT '0',"
2497 " use_on_air_guide tinyint(1) NOT NULL DEFAULT '0',"
2498 " hidden tinyint(1) NOT NULL DEFAULT '0',"
2499 " hidden_in_guide tinyint(1) NOT NULL DEFAULT '0',"
2500 " freqid varchar(10) NOT NULL DEFAULT '',"
2501 " icon varchar(255) NOT NULL DEFAULT '',"
2502 " tvformat varchar(10) NOT NULL DEFAULT 'Default',"
2503 " xmltvid varchar(64) NOT NULL DEFAULT '',"
2504 " pat_tsid int(5) unsigned NOT NULL DEFAULT '0',"
2505 " vct_tsid int(5) unsigned NOT NULL DEFAULT '0',"
2506 " vct_chan_tsid int(5) unsigned NOT NULL DEFAULT '0',"
2507 " sdt_tsid int(5) unsigned NOT NULL DEFAULT '0',"
2508 " orig_netid int(5) unsigned NOT NULL DEFAULT '0',"
2509 " netid int(5) unsigned NOT NULL DEFAULT '0',"
2510 " si_standard varchar(10) NOT NULL,"
2511 " in_channels_conf tinyint(1) unsigned NOT NULL DEFAULT '0',"
2512 " in_pat tinyint(1) unsigned NOT NULL DEFAULT '0',"
2513 " in_pmt tinyint(1) unsigned NOT NULL DEFAULT '0',"
2514 " in_vct tinyint(1) unsigned NOT NULL DEFAULT '0',"
2515 " in_nit tinyint(1) unsigned NOT NULL DEFAULT '0',"
2516 " in_sdt tinyint(1) unsigned NOT NULL DEFAULT '0',"
2517 " is_encrypted tinyint(1) unsigned NOT NULL DEFAULT '0',"
2518 " is_data_service tinyint(1) unsigned NOT NULL DEFAULT '0',"
2519 " is_audio_service tinyint(1) unsigned NOT NULL DEFAULT '0',"
2520 " is_opencable tinyint(1) unsigned NOT NULL DEFAULT '0',"
2521 " could_be_opencable tinyint(1) unsigned NOT NULL DEFAULT '0',"
2522 " decryption_status smallint(2) unsigned NOT NULL DEFAULT '0',"
2523 " default_authority varchar(32) NOT NULL DEFAULT ''"
2524 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2525 "CREATE TABLE channelscan_dtv_multiplex ("
2526 " transportid int(6) unsigned NOT NULL AUTO_INCREMENT,"
2527 " scanid int(3) unsigned NOT NULL,"
2528 " mplexid smallint(6) unsigned NOT NULL,"
2529 " frequency bigint(12) unsigned NOT NULL,"
2530 " inversion char(1) NOT NULL DEFAULT 'a',"
2531 " symbolrate bigint(12) unsigned NOT NULL DEFAULT '0',"
2532 " fec varchar(10) NOT NULL DEFAULT 'auto',"
2533 " polarity char(1) NOT NULL DEFAULT '',"
2534 " hp_code_rate varchar(10) NOT NULL DEFAULT 'auto',"
2535 " mod_sys varchar(10) DEFAULT NULL,"
2536 " rolloff varchar(4) DEFAULT NULL,"
2537 " lp_code_rate varchar(10) NOT NULL DEFAULT 'auto',"
2538 " modulation varchar(10) NOT NULL DEFAULT 'auto',"
2539 " transmission_mode char(1) NOT NULL DEFAULT 'a',"
2540 " guard_interval varchar(10) NOT NULL DEFAULT 'auto',"
2541 " hierarchy varchar(10) NOT NULL DEFAULT 'auto',"
2542 " bandwidth char(1) NOT NULL DEFAULT 'a',"
2543 " sistandard varchar(10) NOT NULL,"
2544 " tuner_type smallint(2) unsigned NOT NULL,"
2545 " default_authority varchar(32) NOT NULL DEFAULT '',"
2546 " PRIMARY KEY (transportid)"
2547 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2548 "CREATE TABLE codecparams ("
2549 " `profile` int(10) unsigned NOT NULL DEFAULT '0',"
2550 " `name` varchar(128) NOT NULL DEFAULT '',"
2551 " `value` varchar(128) DEFAULT NULL,"
2552 " PRIMARY KEY (`profile`,`name`)"
2553 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2554 "CREATE TABLE credits ("
2555 " person mediumint(8) unsigned NOT NULL DEFAULT '0',"
2556 " chanid int(10) unsigned NOT NULL DEFAULT '0',"
2557 " starttime datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
2558 " role set('actor','director','producer','executive_producer','writer','guest_star','host','adapter','presenter','commentator','guest') NOT NULL DEFAULT '',"
2559 " UNIQUE KEY chanid (chanid,starttime,person,role),"
2560 " KEY person (person,role)"
2561 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2562 "CREATE TABLE customexample ("
2563 " rulename varchar(64) NOT NULL,"
2564 " fromclause varchar(10000) NOT NULL DEFAULT '',"
2565 " whereclause varchar(10000) NOT NULL DEFAULT '',"
2566 " search tinyint(4) NOT NULL DEFAULT '0',"
2567 " PRIMARY KEY (rulename)"
2568 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2569 "CREATE TABLE diseqc_config ("
2570 " cardinputid int(10) unsigned NOT NULL,"
2571 " diseqcid int(10) unsigned NOT NULL,"
2572 " `value` varchar(16) NOT NULL DEFAULT '',"
2573 " KEY id (cardinputid)"
2574 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2575 "CREATE TABLE diseqc_tree ("
2576 " diseqcid int(10) unsigned NOT NULL AUTO_INCREMENT,"
2577 " parentid int(10) unsigned DEFAULT NULL,"
2578 " ordinal tinyint(3) unsigned NOT NULL,"
2579 " `type` varchar(16) NOT NULL DEFAULT '',"
2580 " subtype varchar(16) NOT NULL DEFAULT '',"
2581 " description varchar(32) NOT NULL DEFAULT '',"
2582 " switch_ports tinyint(3) unsigned NOT NULL DEFAULT '0',"
2583 " rotor_hi_speed float NOT NULL DEFAULT '0',"
2584 " rotor_lo_speed float NOT NULL DEFAULT '0',"
2585 " rotor_positions varchar(255) NOT NULL DEFAULT '',"
2586 " lnb_lof_switch int(10) NOT NULL DEFAULT '0',"
2587 " lnb_lof_hi int(10) NOT NULL DEFAULT '0',"
2588 " lnb_lof_lo int(10) NOT NULL DEFAULT '0',"
2589 " cmd_repeat int(11) NOT NULL DEFAULT '1',"
2590 " lnb_pol_inv tinyint(4) NOT NULL DEFAULT '0',"
2591 " address tinyint(3) unsigned NOT NULL DEFAULT '0',"
2592 " PRIMARY KEY (diseqcid),"
2593 " KEY parentid (parentid)"
2594 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2595 "CREATE TABLE displayprofilegroups ("
2596 " `name` varchar(128) NOT NULL,"
2597 " hostname varchar(64) NOT NULL,"
2598 " profilegroupid int(10) unsigned NOT NULL AUTO_INCREMENT,"
2599 " PRIMARY KEY (`name`,hostname),"
2600 " UNIQUE KEY profilegroupid (profilegroupid)"
2601 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2602 "CREATE TABLE displayprofiles ("
2603 " profilegroupid int(10) unsigned NOT NULL,"
2604 " profileid int(10) unsigned NOT NULL AUTO_INCREMENT,"
2605 " `value` varchar(128) NOT NULL,"
2606 " `data` varchar(255) NOT NULL DEFAULT '',"
2607 " KEY profilegroupid (profilegroupid),"
2608 " KEY profileid (profileid,`value`),"
2609 " KEY profileid_2 (profileid)"
2610 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2611 "CREATE TABLE dtv_multiplex ("
2612 " mplexid smallint(6) NOT NULL AUTO_INCREMENT,"
2613 " sourceid smallint(6) DEFAULT NULL,"
2614 " transportid int(11) DEFAULT NULL,"
2615 " networkid int(11) DEFAULT NULL,"
2616 " frequency int(11) DEFAULT NULL,"
2617 " inversion char(1) DEFAULT 'a',"
2618 " symbolrate int(11) DEFAULT NULL,"
2619 " fec varchar(10) DEFAULT 'auto',"
2620 " polarity char(1) DEFAULT NULL,"
2621 " modulation varchar(10) DEFAULT 'auto',"
2622 " bandwidth char(1) DEFAULT 'a',"
2623 " lp_code_rate varchar(10) DEFAULT 'auto',"
2624 " transmission_mode char(1) DEFAULT 'a',"
2625 " guard_interval varchar(10) DEFAULT 'auto',"
2626 " visible smallint(1) NOT NULL DEFAULT '0',"
2627 " constellation varchar(10) DEFAULT 'auto',"
2628 " hierarchy varchar(10) DEFAULT 'auto',"
2629 " hp_code_rate varchar(10) DEFAULT 'auto',"
2630 " mod_sys varchar(10) DEFAULT NULL,"
2631 " rolloff varchar(4) DEFAULT NULL,"
2632 " sistandard varchar(10) DEFAULT 'dvb',"
2633 " serviceversion smallint(6) DEFAULT '33',"
2634 " updatetimestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,"
2635 " default_authority varchar(32) NOT NULL DEFAULT '',"
2636 " PRIMARY KEY (mplexid)"
2637 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2638 "CREATE TABLE dtv_privatetypes ("
2639 " sitype varchar(4) NOT NULL DEFAULT '',"
2640 " networkid int(11) NOT NULL DEFAULT '0',"
2641 " private_type varchar(20) NOT NULL DEFAULT '',"
2642 " private_value varchar(100) NOT NULL DEFAULT ''"
2643 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2644 "CREATE TABLE dvdbookmark ("
2645 " serialid varchar(16) NOT NULL DEFAULT '',"
2646 " `name` varchar(32) DEFAULT NULL,"
2647 " title smallint(6) NOT NULL DEFAULT '0',"
2648 " audionum tinyint(4) NOT NULL DEFAULT '-1',"
2649 " subtitlenum tinyint(4) NOT NULL DEFAULT '-1',"
2650 " framenum bigint(20) NOT NULL DEFAULT '0',"
2651 " `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,"
2652 " PRIMARY KEY (serialid)"
2653 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2654 "CREATE TABLE dvdinput ("
2655 " intid int(10) unsigned NOT NULL,"
2656 " hsize int(10) unsigned DEFAULT NULL,"
2657 " vsize int(10) unsigned DEFAULT NULL,"
2658 " ar_num int(10) unsigned DEFAULT NULL,"
2659 " ar_denom int(10) unsigned DEFAULT NULL,"
2660 " fr_code int(10) unsigned DEFAULT NULL,"
2661 " letterbox tinyint(1) DEFAULT NULL,"
2662 " v_format varchar(16) DEFAULT NULL,"
2663 " PRIMARY KEY (intid)"
2664 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2665 "CREATE TABLE dvdtranscode ("
2666 " intid int(11) NOT NULL AUTO_INCREMENT,"
2667 " input int(10) unsigned DEFAULT NULL,"
2668 " `name` varchar(128) NOT NULL,"
2669 " sync_mode int(10) unsigned DEFAULT NULL,"
2670 " use_yv12 tinyint(1) DEFAULT NULL,"
2671 " cliptop int(11) DEFAULT NULL,"
2672 " clipbottom int(11) DEFAULT NULL,"
2673 " clipleft int(11) DEFAULT NULL,"
2674 " clipright int(11) DEFAULT NULL,"
2675 " f_resize_h int(11) DEFAULT NULL,"
2676 " f_resize_w int(11) DEFAULT NULL,"
2677 " hq_resize_h int(11) DEFAULT NULL,"
2678 " hq_resize_w int(11) DEFAULT NULL,"
2679 " grow_h int(11) DEFAULT NULL,"
2680 " grow_w int(11) DEFAULT NULL,"
2681 " clip2top int(11) DEFAULT NULL,"
2682 " clip2bottom int(11) DEFAULT NULL,"
2683 " clip2left int(11) DEFAULT NULL,"
2684 " clip2right int(11) DEFAULT NULL,"
2685 " codec varchar(128) NOT NULL,"
2686 " codec_param varchar(128) DEFAULT NULL,"
2687 " bitrate int(11) DEFAULT NULL,"
2688 " a_sample_r int(11) DEFAULT NULL,"
2689 " a_bitrate int(11) DEFAULT NULL,"
2690 " two_pass tinyint(1) DEFAULT NULL,"
2691 " tc_param varchar(128) DEFAULT NULL,"
2692 " PRIMARY KEY (intid)"
2693 ") ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;",
2694 "CREATE TABLE eit_cache ("
2695 " chanid int(10) NOT NULL,"
2696 " eventid int(10) unsigned NOT NULL DEFAULT '0',"
2697 " tableid tinyint(3) unsigned NOT NULL,"
2698 " version tinyint(3) unsigned NOT NULL,"
2699 " endtime int(10) unsigned NOT NULL,"
2700 " `status` tinyint(4) NOT NULL DEFAULT '0',"
2701 " PRIMARY KEY (chanid,eventid,`status`)"
2702 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2703 "CREATE TABLE filemarkup ("
2704 " filename text NOT NULL,"
2705 " mark mediumint(8) unsigned NOT NULL DEFAULT '0',"
2706 " `offset` bigint(20) unsigned DEFAULT NULL,"
2707 " `type` tinyint(4) NOT NULL DEFAULT '0',"
2708 " KEY filename (filename(255))"
2709 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2710 "CREATE TABLE housekeeping ("
2711 " tag varchar(64) NOT NULL DEFAULT '',"
2712 " lastrun datetime DEFAULT NULL,"
2713 " PRIMARY KEY (tag)"
2714 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2715 "CREATE TABLE inputgroup ("
2716 " cardinputid int(10) unsigned NOT NULL,"
2717 " inputgroupid int(10) unsigned NOT NULL,"
2718 " inputgroupname varchar(32) NOT NULL"
2719 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2720 "CREATE TABLE internetcontent ("
2721 " `name` varchar(255) NOT NULL,"
2722 " thumbnail varchar(255) DEFAULT NULL,"
2723 " `type` smallint(3) NOT NULL,"
2724 " author varchar(128) NOT NULL,"
2725 " description text NOT NULL,"
2726 " commandline text NOT NULL,"
2727 " version double NOT NULL,"
2728 " updated datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
2729 " search tinyint(1) NOT NULL,"
2730 " tree tinyint(1) NOT NULL,"
2731 " podcast tinyint(1) NOT NULL,"
2732 " download tinyint(1) NOT NULL,"
2733 " `host` varchar(128) DEFAULT NULL"
2734 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2735 "CREATE TABLE internetcontentarticles ("
2736 " feedtitle varchar(255) NOT NULL,"
2737 " path text NOT NULL,"
2738 " paththumb text NOT NULL,"
2739 " title varchar(255) NOT NULL,"
2740 " subtitle varchar(255) NOT NULL,"
2741 " season smallint(5) NOT NULL DEFAULT '0',"
2742 " episode smallint(5) NOT NULL DEFAULT '0',"
2743 " description text NOT NULL,"
2744 " url text NOT NULL,"
2745 " `type` smallint(3) NOT NULL,"
2746 " thumbnail text NOT NULL,"
2747 " mediaURL text NOT NULL,"
2748 " author varchar(255) NOT NULL,"
2749 " `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
2750 " `time` int(11) NOT NULL,"
2751 " rating varchar(255) NOT NULL,"
2752 " filesize bigint(20) NOT NULL,"
2753 " player varchar(255) NOT NULL,"
2754 " playerargs text NOT NULL,"
2755 " download varchar(255) NOT NULL,"
2756 " downloadargs text NOT NULL,"
2757 " width smallint(6) NOT NULL,"
2758 " height smallint(6) NOT NULL,"
2759 " `language` varchar(128) NOT NULL,"
2760 " podcast tinyint(1) NOT NULL,"
2761 " downloadable tinyint(1) NOT NULL,"
2762 " customhtml tinyint(1) NOT NULL,"
2763 " countries varchar(255) NOT NULL"
2764 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2765 "CREATE TABLE inuseprograms ("
2766 " chanid int(10) unsigned NOT NULL DEFAULT '0',"
2767 " starttime datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
2768 " recusage varchar(128) NOT NULL DEFAULT '',"
2769 " lastupdatetime datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
2770 " hostname varchar(64) NOT NULL DEFAULT '',"
2771 " rechost varchar(64) NOT NULL,"
2772 " recdir varchar(255) NOT NULL DEFAULT '',"
2773 " KEY chanid (chanid,starttime),"
2774 " KEY recusage (recusage,lastupdatetime)"
2775 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2776 "CREATE TABLE iptv_channel ("
2777 " iptvid smallint(6) unsigned NOT NULL AUTO_INCREMENT,"
2778 " chanid int(10) unsigned NOT NULL,"
2779 " url text NOT NULL,"
2780 " `type` set('data','rfc2733-1','rfc2733-2','rfc5109-1','rfc5109-2','smpte2022-1','smpte2022-2') DEFAULT NULL,"
2781 " bitrate int(10) unsigned NOT NULL,"
2782 " PRIMARY KEY (iptvid)"
2783 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2784 "CREATE TABLE jobqueue ("
2785 " id int(11) NOT NULL AUTO_INCREMENT,"
2786 " chanid int(10) NOT NULL DEFAULT '0',"
2787 " starttime datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
2788 " inserttime datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
2789 " `type` int(11) NOT NULL DEFAULT '0',"
2790 " cmds int(11) NOT NULL DEFAULT '0',"
2791 " flags int(11) NOT NULL DEFAULT '0',"
2792 " `status` int(11) NOT NULL DEFAULT '0',"
2793 " statustime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,"
2794 " hostname varchar(64) NOT NULL DEFAULT '',"
2795 " args blob NOT NULL,"
2796 " `comment` varchar(128) NOT NULL DEFAULT '',"
2797 " schedruntime datetime NOT NULL DEFAULT '2007-01-01 00:00:00',"
2798 " PRIMARY KEY (id),"
2799 " UNIQUE KEY chanid (chanid,starttime,`type`,inserttime)"
2800 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2801 "CREATE TABLE jumppoints ("
2802 " destination varchar(128) NOT NULL DEFAULT '',"
2803 " description varchar(255) DEFAULT NULL,"
2804 " keylist varchar(128) DEFAULT NULL,"
2805 " hostname varchar(64) NOT NULL DEFAULT '',"
2806 " PRIMARY KEY (destination,hostname)"
2807 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2808 "CREATE TABLE keybindings ("
2809 " `context` varchar(32) NOT NULL DEFAULT '',"
2810 " `action` varchar(32) NOT NULL DEFAULT '',"
2811 " description varchar(255) DEFAULT NULL,"
2812 " keylist varchar(128) DEFAULT NULL,"
2813 " hostname varchar(64) NOT NULL DEFAULT '',"
2814 " PRIMARY KEY (`context`,`action`,hostname)"
2815 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2816 "CREATE TABLE keyword ("
2817 " phrase varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',"
2818 " searchtype int(10) unsigned NOT NULL DEFAULT '3',"
2819 " UNIQUE KEY phrase (phrase,searchtype)"
2820 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2821 "CREATE TABLE livestream ("
2822 " id int(10) unsigned NOT NULL AUTO_INCREMENT,"
2823 " width int(10) unsigned NOT NULL,"
2824 " height int(10) unsigned NOT NULL,"
2825 " bitrate int(10) unsigned NOT NULL,"
2826 " audiobitrate int(10) unsigned NOT NULL,"
2827 " samplerate int(10) unsigned NOT NULL,"
2828 " audioonlybitrate int(10) unsigned NOT NULL,"
2829 " segmentsize int(10) unsigned NOT NULL DEFAULT '10',"
2830 " maxsegments int(10) unsigned NOT NULL DEFAULT '0',"
2831 " startsegment int(10) unsigned NOT NULL DEFAULT '0',"
2832 " currentsegment int(10) unsigned NOT NULL DEFAULT '0',"
2833 " segmentcount int(10) unsigned NOT NULL DEFAULT '0',"
2834 " percentcomplete int(10) unsigned NOT NULL DEFAULT '0',"
2835 " created datetime NOT NULL,"
2836 " lastmodified datetime NOT NULL,"
2837 " relativeurl varchar(512) NOT NULL,"
2838 " fullurl varchar(1024) NOT NULL,"
2839 " `status` int(10) unsigned NOT NULL DEFAULT '0',"
2840 " statusmessage varchar(256) NOT NULL,"
2841 " sourcefile varchar(512) NOT NULL,"
2842 " sourcehost varchar(64) NOT NULL,"
2843 " sourcewidth int(10) unsigned NOT NULL DEFAULT '0',"
2844 " sourceheight int(10) unsigned NOT NULL DEFAULT '0',"
2845 " outdir varchar(256) NOT NULL,"
2846 " outbase varchar(128) NOT NULL,"
2847 " PRIMARY KEY (id)"
2848 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2849 "CREATE TABLE logging ("
2850 " id bigint(20) unsigned NOT NULL AUTO_INCREMENT,"
2851 " `host` varchar(64) NOT NULL DEFAULT '',"
2852 " application varchar(64) NOT NULL DEFAULT '',"
2853 " pid int(11) NOT NULL DEFAULT '0',"
2854 " tid int(11) NOT NULL DEFAULT '0',"
2855 " thread varchar(64) NOT NULL DEFAULT '',"
2856 " filename varchar(255) NOT NULL DEFAULT '',"
2857 " line int(11) NOT NULL DEFAULT '0',"
2858 " `function` varchar(255) NOT NULL DEFAULT '',"
2859 " msgtime datetime NOT NULL,"
2860 " `level` int(11) NOT NULL DEFAULT '0',"
2861 " message varchar(2048) NOT NULL,"
2862 " PRIMARY KEY (id),"
2863 " KEY `host` (`host`,application,pid,msgtime),"
2864 " KEY msgtime (msgtime),"
2865 " KEY `level` (`level`)"
2866 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2867 "CREATE TABLE mythlog ("
2868 " logid int(10) unsigned NOT NULL AUTO_INCREMENT,"
2869 " module varchar(32) NOT NULL DEFAULT '',"
2870 " priority int(11) NOT NULL DEFAULT '0',"
2871 " acknowledged tinyint(1) DEFAULT '0',"
2872 " logdate datetime DEFAULT NULL,"
2873 " `host` varchar(128) DEFAULT NULL,"
2874 " message varchar(255) NOT NULL DEFAULT '',"
2875 " details varchar(16000) NOT NULL DEFAULT '',"
2876 " PRIMARY KEY (logid),"
2877 " KEY module (module)"
2878 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2879 "CREATE TABLE oldfind ("
2880 " recordid int(11) NOT NULL DEFAULT '0',"
2881 " findid int(11) NOT NULL DEFAULT '0',"
2882 " PRIMARY KEY (recordid,findid)"
2883 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2884 "CREATE TABLE oldprogram ("
2885 " oldtitle varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',"
2886 " airdate datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
2887 " PRIMARY KEY (oldtitle)"
2888 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2889 "CREATE TABLE oldrecorded ("
2890 " chanid int(10) unsigned NOT NULL DEFAULT '0',"
2891 " starttime datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
2892 " endtime datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
2893 " title varchar(128) NOT NULL DEFAULT '',"
2894 " subtitle varchar(128) NOT NULL DEFAULT '',"
2895 " description varchar(16000) NOT NULL DEFAULT '',"
2896 " season smallint(5) NOT NULL,"
2897 " episode smallint(5) NOT NULL,"
2898 " category varchar(64) NOT NULL DEFAULT '',"
2899 " seriesid varchar(40) NOT NULL DEFAULT '',"
2900 " programid varchar(40) NOT NULL DEFAULT '',"
2901 " inetref varchar(40) NOT NULL,"
2902 " findid int(11) NOT NULL DEFAULT '0',"
2903 " recordid int(11) NOT NULL DEFAULT '0',"
2904 " station varchar(20) NOT NULL DEFAULT '',"
2905 " rectype int(10) unsigned NOT NULL DEFAULT '0',"
2906 " `duplicate` tinyint(1) NOT NULL DEFAULT '0',"
2907 " recstatus int(11) NOT NULL DEFAULT '0',"
2908 " reactivate smallint(6) NOT NULL DEFAULT '0',"
2909 " generic tinyint(1) NOT NULL,"
2910 " future tinyint(1) NOT NULL DEFAULT '0',"
2911 " PRIMARY KEY (station,starttime,title),"
2912 " KEY endtime (endtime),"
2913 " KEY title (title),"
2914 " KEY seriesid (seriesid),"
2915 " KEY programid (programid),"
2916 " KEY recordid (recordid),"
2917 " KEY recstatus (recstatus,programid,seriesid),"
2918 " KEY recstatus_2 (recstatus,title,subtitle),"
2919 " KEY future (future),"
2920 " KEY chanid (chanid,starttime),"
2921 " KEY subtitle (subtitle),"
2922 " KEY description (description(255))"
2923 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2924 "CREATE TABLE people ("
2925 " person mediumint(8) unsigned NOT NULL AUTO_INCREMENT,"
2926 " `name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',"
2927 " PRIMARY KEY (person),"
2928 " UNIQUE KEY `name` (`name`(41))"
2929 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2930 "CREATE TABLE pidcache ("
2931 " chanid smallint(6) NOT NULL DEFAULT '0',"
2932 " pid int(11) NOT NULL DEFAULT '-1',"
2933 " tableid int(11) NOT NULL DEFAULT '-1',"
2934 " KEY chanid (chanid)"
2935 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2936 "CREATE TABLE playgroup ("
2937 " `name` varchar(32) NOT NULL DEFAULT '',"
2938 " titlematch varchar(255) NOT NULL DEFAULT '',"
2939 " skipahead int(11) NOT NULL DEFAULT '0',"
2940 " skipback int(11) NOT NULL DEFAULT '0',"
2941 " timestretch int(11) NOT NULL DEFAULT '0',"
2942 " jump int(11) NOT NULL DEFAULT '0',"
2943 " PRIMARY KEY (`name`)"
2944 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2945 "CREATE TABLE powerpriority ("
2946 " priorityname varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,"
2947 " recpriority int(10) NOT NULL DEFAULT '0',"
2948 " selectclause varchar(16000) NOT NULL DEFAULT '',"
2949 " PRIMARY KEY (priorityname)"
2950 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
2951 "CREATE TABLE profilegroups ("
2952 " id int(10) unsigned NOT NULL AUTO_INCREMENT,"
2953 " `name` varchar(128) DEFAULT NULL,"
2954 " cardtype varchar(32) NOT NULL DEFAULT 'V4L',"
2955 " is_default int(1) DEFAULT '0',"
2956 " hostname varchar(64) DEFAULT NULL,"
2957 " PRIMARY KEY (id),"
2958 " UNIQUE KEY `name` (`name`,hostname),"
2959 " KEY cardtype (cardtype)"
2960 ") ENGINE=MyISAM AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;",
2961 "CREATE TABLE program ("
2962 " chanid int(10) unsigned NOT NULL DEFAULT '0',"
2963 " starttime datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
2964 " endtime datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
2965 " title varchar(128) NOT NULL DEFAULT '',"
2966 " subtitle varchar(128) NOT NULL DEFAULT '',"
2967 " description varchar(16000) NOT NULL DEFAULT '',"
2968 " category varchar(64) NOT NULL DEFAULT '',"
2969 " category_type varchar(64) NOT NULL DEFAULT '',"
2970 " airdate year(4) NOT NULL DEFAULT '0000',"
2971 " stars float NOT NULL DEFAULT '0',"
2972 " previouslyshown tinyint(4) NOT NULL DEFAULT '0',"
2973 " title_pronounce varchar(128) NOT NULL DEFAULT '',"
2974 " stereo tinyint(1) NOT NULL DEFAULT '0',"
2975 " subtitled tinyint(1) NOT NULL DEFAULT '0',"
2976 " hdtv tinyint(1) NOT NULL DEFAULT '0',"
2977 " closecaptioned tinyint(1) NOT NULL DEFAULT '0',"
2978 " partnumber int(11) NOT NULL DEFAULT '0',"
2979 " parttotal int(11) NOT NULL DEFAULT '0',"
2980 " seriesid varchar(64) NOT NULL DEFAULT '',"
2981 " originalairdate date DEFAULT NULL,"
2982 " showtype varchar(30) NOT NULL DEFAULT '',"
2983 " colorcode varchar(20) NOT NULL DEFAULT '',"
2984 " syndicatedepisodenumber varchar(20) NOT NULL DEFAULT '',"
2985 " programid varchar(64) NOT NULL DEFAULT '',"
2986 " manualid int(10) unsigned NOT NULL DEFAULT '0',"
2987 " generic tinyint(1) DEFAULT '0',"
2988 " listingsource int(11) NOT NULL DEFAULT '0',"
2989 " `first` tinyint(1) NOT NULL DEFAULT '0',"
2990 " `last` tinyint(1) NOT NULL DEFAULT '0',"
2991 " audioprop set('STEREO','MONO','SURROUND','DOLBY','HARDHEAR','VISUALIMPAIR') NOT NULL,"
2992 " subtitletypes set('HARDHEAR','NORMAL','ONSCREEN','SIGNED') NOT NULL,"
2993 " videoprop set('HDTV','WIDESCREEN','AVC') NOT NULL,"
2994 " PRIMARY KEY (chanid,starttime,manualid),"
2995 " KEY endtime (endtime),"
2996 " KEY title (title),"
2997 " KEY title_pronounce (title_pronounce),"
2998 " KEY seriesid (seriesid),"
2999 " KEY id_start_end (chanid,starttime,endtime),"
3000 " KEY program_manualid (manualid),"
3001 " KEY previouslyshown (previouslyshown),"
3002 " KEY programid (programid,starttime),"
3003 " KEY starttime (starttime),"
3004 " KEY subtitle (subtitle),"
3005 " KEY description (description(255))"
3006 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3007 "CREATE TABLE programgenres ("
3008 " chanid int(10) unsigned NOT NULL DEFAULT '0',"
3009 " starttime datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
3010 " relevance char(1) NOT NULL DEFAULT '',"
3011 " genre varchar(30) DEFAULT NULL,"
3012 " PRIMARY KEY (chanid,starttime,relevance),"
3013 " KEY genre (genre)"
3014 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3015 "CREATE TABLE programrating ("
3016 " chanid int(10) unsigned NOT NULL DEFAULT '0',"
3017 " starttime datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
3018 " system varchar(8) DEFAULT NULL,"
3019 " rating varchar(16) DEFAULT NULL,"
3020 " UNIQUE KEY chanid (chanid,starttime,system,rating),"
3021 " KEY starttime (starttime,system)"
3022 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3023 "CREATE TABLE recgrouppassword ("
3024 " recgroup varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',"
3025 " `password` varchar(10) NOT NULL DEFAULT '',"
3026 " PRIMARY KEY (recgroup)"
3027 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3028 "CREATE TABLE record ("
3029 " recordid int(10) unsigned NOT NULL AUTO_INCREMENT,"
3030 " `type` int(10) unsigned NOT NULL DEFAULT '0',"
3031 " chanid int(10) unsigned DEFAULT NULL,"
3032 " starttime time NOT NULL DEFAULT '00:00:00',"
3033 " startdate date NOT NULL DEFAULT '0000-00-00',"
3034 " endtime time NOT NULL DEFAULT '00:00:00',"
3035 " enddate date NOT NULL DEFAULT '0000-00-00',"
3036 " title varchar(128) NOT NULL DEFAULT '',"
3037 " subtitle varchar(128) NOT NULL DEFAULT '',"
3038 " description varchar(16000) NOT NULL DEFAULT '',"
3039 " season smallint(5) NOT NULL,"
3040 " episode smallint(5) NOT NULL,"
3041 " category varchar(64) NOT NULL DEFAULT '',"
3042 " `profile` varchar(128) NOT NULL DEFAULT 'Default',"
3043 " recpriority int(10) NOT NULL DEFAULT '0',"
3044 " autoexpire int(11) NOT NULL DEFAULT '0',"
3045 " maxepisodes int(11) NOT NULL DEFAULT '0',"
3046 " maxnewest int(11) NOT NULL DEFAULT '0',"
3047 " startoffset int(11) NOT NULL DEFAULT '0',"
3048 " endoffset int(11) NOT NULL DEFAULT '0',"
3049 " recgroup varchar(32) NOT NULL DEFAULT 'Default',"
3050 " dupmethod int(11) NOT NULL DEFAULT '6',"
3051 " dupin int(11) NOT NULL DEFAULT '15',"
3052 " station varchar(20) NOT NULL DEFAULT '',"
3053 " seriesid varchar(40) NOT NULL DEFAULT '',"
3054 " programid varchar(40) NOT NULL DEFAULT '',"
3055 " inetref varchar(40) NOT NULL,"
3056 " search int(10) unsigned NOT NULL DEFAULT '0',"
3057 " autotranscode tinyint(1) NOT NULL DEFAULT '0',"
3058 " autocommflag tinyint(1) NOT NULL DEFAULT '0',"
3059 " autouserjob1 tinyint(1) NOT NULL DEFAULT '0',"
3060 " autouserjob2 tinyint(1) NOT NULL DEFAULT '0',"
3061 " autouserjob3 tinyint(1) NOT NULL DEFAULT '0',"
3062 " autouserjob4 tinyint(1) NOT NULL DEFAULT '0',"
3063 " autometadata tinyint(1) NOT NULL DEFAULT '0',"
3064 " findday tinyint(4) NOT NULL DEFAULT '0',"
3065 " findtime time NOT NULL DEFAULT '00:00:00',"
3066 " findid int(11) NOT NULL DEFAULT '0',"
3067 " inactive tinyint(1) NOT NULL DEFAULT '0',"
3068 " parentid int(11) NOT NULL DEFAULT '0',"
3069 " transcoder int(11) NOT NULL DEFAULT '0',"
3070 " playgroup varchar(32) NOT NULL DEFAULT 'Default',"
3071 " prefinput int(10) NOT NULL DEFAULT '0',"
3072 " next_record datetime NOT NULL,"
3073 " last_record datetime NOT NULL,"
3074 " last_delete datetime NOT NULL,"
3075 " storagegroup varchar(32) NOT NULL DEFAULT 'Default',"
3076 " avg_delay int(11) NOT NULL DEFAULT '100',"
3077 " filter int(10) unsigned NOT NULL DEFAULT '0',"
3078 " PRIMARY KEY (recordid),"
3079 " KEY chanid (chanid,starttime),"
3080 " KEY title (title),"
3081 " KEY seriesid (seriesid),"
3082 " KEY programid (programid),"
3083 " KEY maxepisodes (maxepisodes),"
3084 " KEY search (search),"
3085 " KEY `type` (`type`)"
3086 ") ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;",
3087 "CREATE TABLE recorded ("
3088 " chanid int(10) unsigned NOT NULL DEFAULT '0',"
3089 " starttime datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
3090 " endtime datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
3091 " title varchar(128) NOT NULL DEFAULT '',"
3092 " subtitle varchar(128) NOT NULL DEFAULT '',"
3093 " description varchar(16000) NOT NULL DEFAULT '',"
3094 " season smallint(5) NOT NULL,"
3095 " episode smallint(5) NOT NULL,"
3096 " category varchar(64) NOT NULL DEFAULT '',"
3097 " hostname varchar(64) NOT NULL DEFAULT '',"
3098 " bookmark tinyint(1) NOT NULL DEFAULT '0',"
3099 " editing int(10) unsigned NOT NULL DEFAULT '0',"
3100 " cutlist tinyint(1) NOT NULL DEFAULT '0',"
3101 " autoexpire int(11) NOT NULL DEFAULT '0',"
3102 " commflagged int(10) unsigned NOT NULL DEFAULT '0',"
3103 " recgroup varchar(32) NOT NULL DEFAULT 'Default',"
3104 " recordid int(11) DEFAULT NULL,"
3105 " seriesid varchar(40) NOT NULL DEFAULT '',"
3106 " programid varchar(40) NOT NULL DEFAULT '',"
3107 " inetref varchar(40) NOT NULL,"
3108 " lastmodified timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,"
3109 " filesize bigint(20) NOT NULL DEFAULT '0',"
3110 " stars float NOT NULL DEFAULT '0',"
3111 " previouslyshown tinyint(1) DEFAULT '0',"
3112 " originalairdate date DEFAULT NULL,"
3113 " `preserve` tinyint(1) NOT NULL DEFAULT '0',"
3114 " findid int(11) NOT NULL DEFAULT '0',"
3115 " deletepending tinyint(1) NOT NULL DEFAULT '0',"
3116 " transcoder int(11) NOT NULL DEFAULT '0',"
3117 " timestretch float NOT NULL DEFAULT '1',"
3118 " recpriority int(11) NOT NULL DEFAULT '0',"
3119 " basename varchar(255) NOT NULL,"
3120 " progstart datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
3121 " progend datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
3122 " playgroup varchar(32) NOT NULL DEFAULT 'Default',"
3123 " `profile` varchar(32) NOT NULL DEFAULT '',"
3124 " `duplicate` tinyint(1) NOT NULL DEFAULT '0',"
3125 " transcoded tinyint(1) NOT NULL DEFAULT '0',"
3126 " watched tinyint(4) NOT NULL DEFAULT '0',"
3127 " storagegroup varchar(32) NOT NULL DEFAULT 'Default',"
3128 " bookmarkupdate timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',"
3129 " PRIMARY KEY (chanid,starttime),"
3130 " KEY endtime (endtime),"
3131 " KEY seriesid (seriesid),"
3132 " KEY programid (programid),"
3133 " KEY title (title),"
3134 " KEY recordid (recordid),"
3135 " KEY deletepending (deletepending,lastmodified),"
3136 " KEY recgroup (recgroup,endtime)"
3137 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3138 "CREATE TABLE recordedartwork ("
3139 " inetref varchar(255) NOT NULL,"
3140 " season smallint(5) NOT NULL,"
3141 " `host` text NOT NULL,"
3142 " coverart text NOT NULL,"
3143 " fanart text NOT NULL,"
3144 " banner text NOT NULL"
3145 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3146 "CREATE TABLE recordedcredits ("
3147 " person mediumint(8) unsigned NOT NULL DEFAULT '0',"
3148 " chanid int(10) unsigned NOT NULL DEFAULT '0',"
3149 " starttime datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
3150 " role set('actor','director','producer','executive_producer','writer','guest_star','host','adapter','presenter','commentator','guest') NOT NULL DEFAULT '',"
3151 " UNIQUE KEY chanid (chanid,starttime,person,role),"
3152 " KEY person (person,role)"
3153 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3154 "CREATE TABLE recordedfile ("
3155 " chanid int(10) unsigned NOT NULL DEFAULT '0',"
3156 " starttime datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
3157 " basename varchar(128) NOT NULL DEFAULT '',"
3158 " filesize bigint(20) NOT NULL DEFAULT '0',"
3159 " width smallint(5) unsigned NOT NULL DEFAULT '0',"
3160 " height smallint(5) unsigned NOT NULL DEFAULT '0',"
3161 " fps float(6,3) NOT NULL DEFAULT '0.000',"
3162 " aspect float(8,6) NOT NULL DEFAULT '0.000000',"
3163 " audio_sample_rate smallint(5) unsigned NOT NULL DEFAULT '0',"
3164 " audio_bits_per_sample smallint(5) unsigned NOT NULL DEFAULT '0',"
3165 " audio_channels tinyint(3) unsigned NOT NULL DEFAULT '0',"
3166 " audio_type varchar(255) NOT NULL DEFAULT '',"
3167 " video_type varchar(255) NOT NULL DEFAULT '',"
3168 " `comment` varchar(255) NOT NULL DEFAULT '',"
3169 " hostname varchar(64) NOT NULL,"
3170 " storagegroup varchar(32) NOT NULL,"
3171 " id int(11) NOT NULL AUTO_INCREMENT,"
3172 " PRIMARY KEY (id),"
3173 " UNIQUE KEY chanid (chanid,starttime,basename),"
3174 " KEY basename (basename)"
3175 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3176 "CREATE TABLE recordedmarkup ("
3177 " chanid int(10) unsigned NOT NULL DEFAULT '0',"
3178 " starttime datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
3179 " mark mediumint(8) unsigned NOT NULL DEFAULT '0',"
3180 " `type` tinyint(4) NOT NULL DEFAULT '0',"
3181 " `data` int(11) unsigned DEFAULT NULL,"
3182 " PRIMARY KEY (chanid,starttime,`type`,mark)"
3183 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3184 "CREATE TABLE recordedprogram ("
3185 " chanid int(10) unsigned NOT NULL DEFAULT '0',"
3186 " starttime datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
3187 " endtime datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
3188 " title varchar(128) NOT NULL DEFAULT '',"
3189 " subtitle varchar(128) NOT NULL DEFAULT '',"
3190 " description varchar(16000) NOT NULL DEFAULT '',"
3191 " category varchar(64) NOT NULL DEFAULT '',"
3192 " category_type varchar(64) NOT NULL DEFAULT '',"
3193 " airdate year(4) NOT NULL DEFAULT '0000',"
3194 " stars float unsigned NOT NULL DEFAULT '0',"
3195 " previouslyshown tinyint(4) NOT NULL DEFAULT '0',"
3196 " title_pronounce varchar(128) NOT NULL DEFAULT '',"
3197 " stereo tinyint(1) NOT NULL DEFAULT '0',"
3198 " subtitled tinyint(1) NOT NULL DEFAULT '0',"
3199 " hdtv tinyint(1) NOT NULL DEFAULT '0',"
3200 " closecaptioned tinyint(1) NOT NULL DEFAULT '0',"
3201 " partnumber int(11) NOT NULL DEFAULT '0',"
3202 " parttotal int(11) NOT NULL DEFAULT '0',"
3203 " seriesid varchar(40) NOT NULL DEFAULT '',"
3204 " originalairdate date DEFAULT NULL,"
3205 " showtype varchar(30) NOT NULL DEFAULT '',"
3206 " colorcode varchar(20) NOT NULL DEFAULT '',"
3207 " syndicatedepisodenumber varchar(20) NOT NULL DEFAULT '',"
3208 " programid varchar(40) NOT NULL DEFAULT '',"
3209 " manualid int(10) unsigned NOT NULL DEFAULT '0',"
3210 " generic tinyint(1) DEFAULT '0',"
3211 " listingsource int(11) NOT NULL DEFAULT '0',"
3212 " `first` tinyint(1) NOT NULL DEFAULT '0',"
3213 " `last` tinyint(1) NOT NULL DEFAULT '0',"
3214 " audioprop set('STEREO','MONO','SURROUND','DOLBY','HARDHEAR','VISUALIMPAIR') NOT NULL,"
3215 " subtitletypes set('HARDHEAR','NORMAL','ONSCREEN','SIGNED') NOT NULL,"
3216 " videoprop set('HDTV','WIDESCREEN','AVC','720','1080','DAMAGED') NOT NULL,"
3217 " PRIMARY KEY (chanid,starttime,manualid),"
3218 " KEY endtime (endtime),"
3219 " KEY title (title),"
3220 " KEY title_pronounce (title_pronounce),"
3221 " KEY seriesid (seriesid),"
3222 " KEY programid (programid),"
3223 " KEY id_start_end (chanid,starttime,endtime)"
3224 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3225 "CREATE TABLE recordedrating ("
3226 " chanid int(10) unsigned NOT NULL DEFAULT '0',"
3227 " starttime datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
3228 " system varchar(8) DEFAULT NULL,"
3229 " rating varchar(16) DEFAULT NULL,"
3230 " UNIQUE KEY chanid (chanid,starttime,system,rating),"
3231 " KEY starttime (starttime,system)"
3232 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3233 "CREATE TABLE recordedseek ("
3234 " chanid int(10) unsigned NOT NULL DEFAULT '0',"
3235 " starttime datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
3236 " mark mediumint(8) unsigned NOT NULL DEFAULT '0',"
3237 " `offset` bigint(20) unsigned NOT NULL,"
3238 " `type` tinyint(4) NOT NULL DEFAULT '0',"
3239 " PRIMARY KEY (chanid,starttime,`type`,mark)"
3240 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3241 "CREATE TABLE recordfilter ("
3242 " filterid int(10) unsigned NOT NULL,"
3243 " description varchar(64) DEFAULT NULL,"
3244 " clause varchar(256) DEFAULT NULL,"
3245 " newruledefault tinyint(1) DEFAULT '0',"
3246 " PRIMARY KEY (filterid)"
3247 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3248 "CREATE TABLE recordingprofiles ("
3249 " id int(10) unsigned NOT NULL AUTO_INCREMENT,"
3250 " `name` varchar(128) DEFAULT NULL,"
3251 " videocodec varchar(128) DEFAULT NULL,"
3252 " audiocodec varchar(128) DEFAULT NULL,"
3253 " profilegroup int(10) unsigned NOT NULL DEFAULT '0',"
3254 " PRIMARY KEY (id),"
3255 " KEY profilegroup (profilegroup)"
3256 ") ENGINE=MyISAM AUTO_INCREMENT=70 DEFAULT CHARSET=utf8;",
3257 "CREATE TABLE recordmatch ("
3258 " recordid int(10) unsigned NOT NULL,"
3259 " chanid int(10) unsigned NOT NULL,"
3260 " starttime datetime NOT NULL,"
3261 " manualid int(10) unsigned NOT NULL,"
3262 " oldrecduplicate tinyint(1) DEFAULT NULL,"
3263 " recduplicate tinyint(1) DEFAULT NULL,"
3264 " findduplicate tinyint(1) DEFAULT NULL,"
3265 " oldrecstatus int(11) DEFAULT NULL,"
3266 " findid int(11) NOT NULL DEFAULT '0',"
3267 " UNIQUE KEY recordid (recordid,chanid,starttime),"
3268 " KEY chanid (chanid,starttime,manualid),"
3269 " KEY recordid_2 (recordid,findid)"
3270 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3271 "CREATE TABLE scannerfile ("
3272 " fileid bigint(20) unsigned NOT NULL AUTO_INCREMENT,"
3273 " filesize bigint(20) unsigned NOT NULL DEFAULT '0',"
3274 " filehash varchar(64) NOT NULL DEFAULT '',"
3275 " added timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,"
3276 " PRIMARY KEY (fileid),"
3277 " UNIQUE KEY filehash (filehash)"
3278 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3279 "CREATE TABLE scannerpath ("
3280 " fileid bigint(20) unsigned NOT NULL,"
3281 " hostname varchar(64) NOT NULL DEFAULT 'localhost',"
3282 " storagegroup varchar(32) NOT NULL DEFAULT 'Default',"
3283 " filename varchar(255) NOT NULL DEFAULT '',"
3284 " PRIMARY KEY (fileid)"
3285 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3286 "CREATE TABLE settings ("
3287 " `value` varchar(128) NOT NULL DEFAULT '',"
3288 " `data` varchar(16000) NOT NULL DEFAULT '',"
3289 " hostname varchar(64) DEFAULT NULL,"
3290 " KEY `value` (`value`,hostname)"
3291 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3292 "CREATE TABLE storagegroup ("
3293 " id int(11) NOT NULL AUTO_INCREMENT,"
3294 " groupname varchar(32) NOT NULL,"
3295 " hostname varchar(64) NOT NULL DEFAULT '',"
3296 " dirname varchar(235) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',"
3297 " PRIMARY KEY (id),"
3298 " UNIQUE KEY grouphostdir (groupname,hostname,dirname),"
3299 " KEY hostname (hostname)"
3300 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3301 "CREATE TABLE tvchain ("
3302 " chanid int(10) unsigned NOT NULL DEFAULT '0',"
3303 " starttime datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
3304 " chainid varchar(128) NOT NULL DEFAULT '',"
3305 " chainpos int(10) NOT NULL DEFAULT '0',"
3306 " discontinuity tinyint(1) NOT NULL DEFAULT '0',"
3307 " watching int(10) NOT NULL DEFAULT '0',"
3308 " hostprefix varchar(128) NOT NULL DEFAULT '',"
3309 " cardtype varchar(32) NOT NULL DEFAULT 'V4L',"
3310 " input varchar(32) NOT NULL DEFAULT '',"
3311 " channame varchar(32) NOT NULL DEFAULT '',"
3312 " endtime datetime NOT NULL DEFAULT '0000-00-00 00:00:00',"
3313 " PRIMARY KEY (chanid,starttime)"
3314 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3315 "CREATE TABLE tvosdmenu ("
3316 " osdcategory varchar(32) NOT NULL,"
3317 " livetv tinyint(4) NOT NULL DEFAULT '0',"
3318 " recorded tinyint(4) NOT NULL DEFAULT '0',"
3319 " video tinyint(4) NOT NULL DEFAULT '0',"
3320 " dvd tinyint(4) NOT NULL DEFAULT '0',"
3321 " description varchar(32) NOT NULL,"
3322 " PRIMARY KEY (osdcategory)"
3323 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3324 "CREATE TABLE upnpmedia ("
3325 " intid int(10) unsigned NOT NULL DEFAULT '0',"
3326 " class varchar(64) NOT NULL DEFAULT '',"
3327 " itemtype varchar(128) NOT NULL DEFAULT '',"
3328 " parentid int(10) unsigned NOT NULL DEFAULT '0',"
3329 " itemproperties varchar(255) NOT NULL DEFAULT '',"
3330 " filepath varchar(512) NOT NULL DEFAULT '',"
3331 " title varchar(255) NOT NULL DEFAULT '',"
3332 " filename varchar(512) NOT NULL DEFAULT '',"
3333 " coverart varchar(512) NOT NULL DEFAULT '',"
3334 " PRIMARY KEY (intid),"
3335 " KEY class (class),"
3336 " KEY filepath (filepath(333)),"
3337 " KEY parentid (parentid)"
3338 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3339 "CREATE TABLE videocast ("
3340 " intid int(10) unsigned NOT NULL AUTO_INCREMENT,"
3341 " cast varchar(128) NOT NULL,"
3342 " PRIMARY KEY (intid)"
3343 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3344 "CREATE TABLE videocategory ("
3345 " intid int(10) unsigned NOT NULL AUTO_INCREMENT,"
3346 " category varchar(128) NOT NULL,"
3347 " PRIMARY KEY (intid)"
3348 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3349 "CREATE TABLE videocollection ("
3350 " intid int(10) unsigned NOT NULL AUTO_INCREMENT,"
3351 " title varchar(256) NOT NULL,"
3352 " contenttype set('MOVIE','TELEVISION','ADULT','MUSICVIDEO','HOMEVIDEO') NOT NULL DEFAULT '',"
3353 " plot text,"
3354 " network varchar(128) DEFAULT NULL,"
3355 " collectionref varchar(128) NOT NULL,"
3356 " certification varchar(128) DEFAULT NULL,"
3357 " genre varchar(128) DEFAULT '',"
3358 " releasedate date DEFAULT NULL,"
3359 " `language` varchar(10) DEFAULT NULL,"
3360 " `status` varchar(64) DEFAULT NULL,"
3361 " rating float DEFAULT '0',"
3362 " ratingcount int(10) DEFAULT '0',"
3363 " runtime smallint(5) unsigned DEFAULT '0',"
3364 " banner text,"
3365 " fanart text,"
3366 " coverart text,"
3367 " PRIMARY KEY (intid),"
3368 " KEY title (title)"
3369 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3370 "CREATE TABLE videocountry ("
3371 " intid int(10) unsigned NOT NULL AUTO_INCREMENT,"
3372 " country varchar(128) NOT NULL,"
3373 " PRIMARY KEY (intid)"
3374 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3375 "CREATE TABLE videogenre ("
3376 " intid int(10) unsigned NOT NULL AUTO_INCREMENT,"
3377 " genre varchar(128) NOT NULL,"
3378 " PRIMARY KEY (intid)"
3379 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3380 "CREATE TABLE videometadata ("
3381 " intid int(10) unsigned NOT NULL AUTO_INCREMENT,"
3382 " title varchar(128) NOT NULL,"
3383 " subtitle text NOT NULL,"
3384 " tagline varchar(255) DEFAULT NULL,"
3385 " director varchar(128) NOT NULL,"
3386 " studio varchar(128) DEFAULT NULL,"
3387 " plot text,"
3388 " rating varchar(128) NOT NULL,"
3389 " inetref varchar(255) NOT NULL,"
3390 " collectionref int(10) NOT NULL DEFAULT '-1',"
3391 " homepage text NOT NULL,"
3392 " `year` int(10) unsigned NOT NULL,"
3393 " releasedate date NOT NULL,"
3394 " userrating float NOT NULL,"
3395 " length int(10) unsigned NOT NULL,"
3396 " playcount int(10) NOT NULL DEFAULT '0',"
3397 " season smallint(5) unsigned NOT NULL DEFAULT '0',"
3398 " episode smallint(5) unsigned NOT NULL DEFAULT '0',"
3399 " showlevel int(10) unsigned NOT NULL,"
3400 " filename text NOT NULL,"
3401 " `hash` varchar(128) NOT NULL,"
3402 " coverfile text NOT NULL,"
3403 " childid int(11) NOT NULL DEFAULT '-1',"
3404 " browse tinyint(1) NOT NULL DEFAULT '1',"
3405 " watched tinyint(1) NOT NULL DEFAULT '0',"
3406 " processed tinyint(1) NOT NULL DEFAULT '0',"
3407 " playcommand varchar(255) DEFAULT NULL,"
3408 " category int(10) unsigned NOT NULL DEFAULT '0',"
3409 " trailer text,"
3410 " `host` text NOT NULL,"
3411 " screenshot text,"
3412 " banner text,"
3413 " fanart text,"
3414 " insertdate timestamp NULL DEFAULT CURRENT_TIMESTAMP,"
3415 " contenttype set('MOVIE','TELEVISION','ADULT','MUSICVIDEO','HOMEVIDEO') NOT NULL DEFAULT '',"
3416 " PRIMARY KEY (intid),"
3417 " KEY director (director),"
3418 " KEY title (title)"
3419 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3420 "CREATE TABLE videometadatacast ("
3421 " idvideo int(10) unsigned NOT NULL,"
3422 " idcast int(10) unsigned NOT NULL,"
3423 " UNIQUE KEY idvideo (idvideo,idcast)"
3424 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3425 "CREATE TABLE videometadatacountry ("
3426 " idvideo int(10) unsigned NOT NULL,"
3427 " idcountry int(10) unsigned NOT NULL,"
3428 " UNIQUE KEY idvideo_2 (idvideo,idcountry),"
3429 " KEY idvideo (idvideo),"
3430 " KEY idcountry (idcountry)"
3431 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3432 "CREATE TABLE videometadatagenre ("
3433 " idvideo int(10) unsigned NOT NULL,"
3434 " idgenre int(10) unsigned NOT NULL,"
3435 " UNIQUE KEY idvideo_2 (idvideo,idgenre),"
3436 " KEY idvideo (idvideo),"
3437 " KEY idgenre (idgenre)"
3438 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3439 "CREATE TABLE videopart ("
3440 " fileid bigint(20) unsigned NOT NULL,"
3441 " videoid int(10) unsigned NOT NULL,"
3442 " `order` smallint(5) unsigned NOT NULL DEFAULT '1',"
3443 " PRIMARY KEY (videoid,`order`)"
3444 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3445 "CREATE TABLE videopathinfo ("
3446 " intid int(10) unsigned NOT NULL AUTO_INCREMENT,"
3447 " path text,"
3448 " contenttype set('MOVIE','TELEVISION','ADULT','MUSICVIDEO','HOMEVIDEO') NOT NULL DEFAULT '',"
3449 " collectionref int(10) DEFAULT '0',"
3450 " recurse tinyint(1) DEFAULT '0',"
3451 " PRIMARY KEY (intid)"
3452 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3453 "CREATE TABLE videosource ("
3454 " sourceid int(10) unsigned NOT NULL AUTO_INCREMENT,"
3455 " `name` varchar(128) NOT NULL DEFAULT '',"
3456 " xmltvgrabber varchar(128) DEFAULT NULL,"
3457 " userid varchar(128) NOT NULL DEFAULT '',"
3458 " freqtable varchar(16) NOT NULL DEFAULT 'default',"
3459 " lineupid varchar(64) DEFAULT NULL,"
3460 " `password` varchar(64) DEFAULT NULL,"
3461 " useeit smallint(6) NOT NULL DEFAULT '0',"
3462 " configpath varchar(4096) DEFAULT NULL,"
3463 " dvb_nit_id int(6) DEFAULT '-1',"
3464 " PRIMARY KEY (sourceid),"
3465 " UNIQUE KEY `name` (`name`)"
3466 ") ENGINE=MyISAM DEFAULT CHARSET=utf8;",
3467 "CREATE TABLE videotypes ("
3468 " intid int(10) unsigned NOT NULL AUTO_INCREMENT,"
3469 " extension varchar(128) NOT NULL,"
3470 " playcommand varchar(255) NOT NULL,"
3471 " f_ignore tinyint(1) DEFAULT NULL,"
3472 " use_default tinyint(1) DEFAULT NULL,"
3473 " PRIMARY KEY (intid)"
3474 ") ENGINE=MyISAM AUTO_INCREMENT=33 DEFAULT CHARSET=utf8;",
3475 
3476 "INSERT INTO channelgroupnames VALUES (1,'Favorites');",
3477 "INSERT INTO customexample VALUES ('New Flix','','program.category_type = \\'movie\\' AND program.airdate >= \\n YEAR(DATE_SUB(NOW(), INTERVAL 1 YEAR)) \\nAND program.stars > 0.5 ',1);",
3478 "INSERT INTO dtv_privatetypes VALUES ('dvb',9018,'channel_numbers','131');",
3479 "INSERT INTO dtv_privatetypes VALUES ('dvb',9018,'guide_fixup','2');",
3480 "INSERT INTO dtv_privatetypes VALUES ('dvb',256,'guide_fixup','1');",
3481 "INSERT INTO dtv_privatetypes VALUES ('dvb',257,'guide_fixup','1');",
3482 "INSERT INTO dtv_privatetypes VALUES ('dvb',256,'tv_types','1,150,134,133');",
3483 "INSERT INTO dtv_privatetypes VALUES ('dvb',257,'tv_types','1,150,134,133');",
3484 "INSERT INTO dtv_privatetypes VALUES ('dvb',4100,'sdt_mapping','1');",
3485 "INSERT INTO dtv_privatetypes VALUES ('dvb',4101,'sdt_mapping','1');",
3486 "INSERT INTO dtv_privatetypes VALUES ('dvb',4102,'sdt_mapping','1');",
3487 "INSERT INTO dtv_privatetypes VALUES ('dvb',4103,'sdt_mapping','1');",
3488 "INSERT INTO dtv_privatetypes VALUES ('dvb',4104,'sdt_mapping','1');",
3489 "INSERT INTO dtv_privatetypes VALUES ('dvb',4105,'sdt_mapping','1');",
3490 "INSERT INTO dtv_privatetypes VALUES ('dvb',4106,'sdt_mapping','1');",
3491 "INSERT INTO dtv_privatetypes VALUES ('dvb',4107,'sdt_mapping','1');",
3492 "INSERT INTO dtv_privatetypes VALUES ('dvb',4097,'sdt_mapping','1');",
3493 "INSERT INTO dtv_privatetypes VALUES ('dvb',4098,'sdt_mapping','1');",
3494 "INSERT INTO dtv_privatetypes VALUES ('dvb',4100,'tv_types','1,145,154');",
3495 "INSERT INTO dtv_privatetypes VALUES ('dvb',4101,'tv_types','1,145,154');",
3496 "INSERT INTO dtv_privatetypes VALUES ('dvb',4102,'tv_types','1,145,154');",
3497 "INSERT INTO dtv_privatetypes VALUES ('dvb',4103,'tv_types','1,145,154');",
3498 "INSERT INTO dtv_privatetypes VALUES ('dvb',4104,'tv_types','1,145,154');",
3499 "INSERT INTO dtv_privatetypes VALUES ('dvb',4105,'tv_types','1,145,154');",
3500 "INSERT INTO dtv_privatetypes VALUES ('dvb',4106,'tv_types','1,145,154');",
3501 "INSERT INTO dtv_privatetypes VALUES ('dvb',4107,'tv_types','1,145,154');",
3502 "INSERT INTO dtv_privatetypes VALUES ('dvb',4097,'tv_types','1,145,154');",
3503 "INSERT INTO dtv_privatetypes VALUES ('dvb',4098,'tv_types','1,145,154');",
3504 "INSERT INTO dtv_privatetypes VALUES ('dvb',4100,'guide_fixup','1');",
3505 "INSERT INTO dtv_privatetypes VALUES ('dvb',4101,'guide_fixup','1');",
3506 "INSERT INTO dtv_privatetypes VALUES ('dvb',4102,'guide_fixup','1');",
3507 "INSERT INTO dtv_privatetypes VALUES ('dvb',4103,'guide_fixup','1');",
3508 "INSERT INTO dtv_privatetypes VALUES ('dvb',4104,'guide_fixup','1');",
3509 "INSERT INTO dtv_privatetypes VALUES ('dvb',4105,'guide_fixup','1');",
3510 "INSERT INTO dtv_privatetypes VALUES ('dvb',4106,'guide_fixup','1');",
3511 "INSERT INTO dtv_privatetypes VALUES ('dvb',4107,'guide_fixup','1');",
3512 "INSERT INTO dtv_privatetypes VALUES ('dvb',4096,'guide_fixup','5');",
3513 "INSERT INTO dtv_privatetypes VALUES ('dvb',4097,'guide_fixup','1');",
3514 "INSERT INTO dtv_privatetypes VALUES ('dvb',4098,'guide_fixup','1');",
3515 "INSERT INTO dtv_privatetypes VALUES ('dvb',94,'tv_types','1,128');",
3516 "INSERT INTO dtv_privatetypes VALUES ('atsc',1793,'guide_fixup','3');",
3517 "INSERT INTO dtv_privatetypes VALUES ('dvb',40999,'guide_fixup','4');",
3518 "INSERT INTO dtv_privatetypes VALUES ('dvb',70,'force_guide_present','yes');",
3519 "INSERT INTO dtv_privatetypes VALUES ('dvb',70,'guide_ranges','80,80,96,96');",
3520 "INSERT INTO dtv_privatetypes VALUES ('dvb',4112,'channel_numbers','131');",
3521 "INSERT INTO dtv_privatetypes VALUES ('dvb',4115,'channel_numbers','131');",
3522 "INSERT INTO dtv_privatetypes VALUES ('dvb',4116,'channel_numbers','131');",
3523 "INSERT INTO dtv_privatetypes VALUES ('dvb',12802,'channel_numbers','131');",
3524 "INSERT INTO dtv_privatetypes VALUES ('dvb',12803,'channel_numbers','131');",
3525 "INSERT INTO dtv_privatetypes VALUES ('dvb',12829,'channel_numbers','131');",
3526 "INSERT INTO dtv_privatetypes VALUES ('dvb',40999,'parse_subtitle_list','1070,1308,1041,1306,1307,1030,1016,1131,1068,1069');",
3527 "INSERT INTO dtv_privatetypes VALUES ('dvb',4096,'guide_fixup','5');",
3528 "INSERT INTO dvdinput VALUES (1,720,480,16,9,1,1,'ntsc');",
3529 "INSERT INTO dvdinput VALUES (2,720,480,16,9,1,0,'ntsc');",
3530 "INSERT INTO dvdinput VALUES (3,720,480,4,3,1,1,'ntsc');",
3531 "INSERT INTO dvdinput VALUES (4,720,480,4,3,1,0,'ntsc');",
3532 "INSERT INTO dvdinput VALUES (5,720,576,16,9,3,1,'pal');",
3533 "INSERT INTO dvdinput VALUES (6,720,576,16,9,3,0,'pal');",
3534 "INSERT INTO dvdinput VALUES (7,720,576,4,3,3,1,'pal');",
3535 "INSERT INTO dvdinput VALUES (8,720,576,4,3,3,0,'pal');",
3536 "INSERT INTO dvdtranscode VALUES (1,1,'Good',2,1,16,16,0,0,2,0,0,0,0,0,32,32,8,8,'divx5',NULL,1618,NULL,NULL,0,NULL);",
3537 "INSERT INTO dvdtranscode VALUES (2,2,'Excellent',2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'divx5',NULL,0,NULL,NULL,1,NULL);",
3538 "INSERT INTO dvdtranscode VALUES (3,2,'Good',2,1,0,0,8,8,0,0,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL);",
3539 "INSERT INTO dvdtranscode VALUES (4,2,'Medium',2,1,0,0,8,8,5,5,0,0,0,0,0,0,0,0,'divx5',NULL,1200,NULL,NULL,0,NULL);",
3540 "INSERT INTO dvdtranscode VALUES (5,3,'Good',2,1,0,0,0,0,0,0,0,0,2,0,80,80,8,8,'divx5',NULL,0,NULL,NULL,0,NULL);",
3541 "INSERT INTO dvdtranscode VALUES (6,4,'Excellent',2,1,0,0,0,0,0,0,0,0,2,0,0,0,0,0,'divx5',NULL,0,NULL,NULL,1,NULL);",
3542 "INSERT INTO dvdtranscode VALUES (7,4,'Good',2,1,0,0,8,8,0,2,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL);",
3543 "INSERT INTO dvdtranscode VALUES (8,5,'Good',1,1,16,16,0,0,5,0,0,0,0,0,40,40,8,8,'divx5',NULL,1618,NULL,NULL,0,NULL);",
3544 "INSERT INTO dvdtranscode VALUES (9,6,'Good',1,1,0,0,16,16,5,0,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL);",
3545 "INSERT INTO dvdtranscode VALUES (10,7,'Good',1,1,0,0,0,0,1,0,0,0,0,0,76,76,8,8,'divx5',NULL,1618,NULL,NULL,0,NULL);",
3546 "INSERT INTO dvdtranscode VALUES (11,8,'Good',1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL);",
3547 "INSERT INTO playgroup VALUES ('Default','',30,5,100,0);",
3548 "INSERT INTO profilegroups VALUES (1,'Software Encoders (v4l based)','V4L',1,NULL);",
3549 "INSERT INTO profilegroups VALUES (2,'IVTV MPEG-2 Encoders','MPEG',1,NULL);",
3550 "INSERT INTO profilegroups VALUES (3,'Hardware MJPEG Encoders (Matrox G200-TV, Miro DC10, etc)','MJPEG',1,NULL);",
3551 "INSERT INTO profilegroups VALUES (4,'Hardware HDTV','HDTV',1,NULL);",
3552 "INSERT INTO profilegroups VALUES (5,'Hardware DVB Encoders','DVB',1,NULL);",
3553 "INSERT INTO profilegroups VALUES (6,'Transcoders','TRANSCODE',1,NULL);",
3554 "INSERT INTO profilegroups VALUES (7,'FireWire Input','FIREWIRE',1,NULL);",
3555 "INSERT INTO profilegroups VALUES (8,'USB Mpeg-4 Encoder (Plextor ConvertX, etc)','GO7007',1,NULL);",
3556 "INSERT INTO profilegroups VALUES (14,'Import Recorder','IMPORT',1,NULL);",
3557 "INSERT INTO profilegroups VALUES (10,'Freebox Input','Freebox',1,NULL);",
3558 "INSERT INTO profilegroups VALUES (11,'HDHomeRun Recorders','HDHOMERUN',1,NULL);",
3559 "INSERT INTO profilegroups VALUES (12,'CRC IP Recorders','CRC_IP',1,NULL);",
3560 "INSERT INTO profilegroups VALUES (13,'HD-PVR Recorders','HDPVR',1,NULL);",
3561 "INSERT INTO profilegroups VALUES (15,'ASI Recorder (DVEO)','ASI',1,NULL);",
3562 "INSERT INTO profilegroups VALUES (16,'OCUR Recorder (CableLabs)','OCUR',1,NULL);",
3563 "INSERT INTO profilegroups VALUES (17,'Ceton Recorder','CETON',1,NULL);",
3564 "INSERT INTO record VALUES (1,11,0,'21:57:44','2012-08-11','21:57:44','2012-08-11','Default (Template)','','',0,0,'Default','Default',0,0,0,0,0,0,'Default',6,15,'','','','',0,0,1,0,0,0,0,1,-1,'00:00:00',735091,0,0,0,'Default',0,'0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','Default',100,0);",
3565 "INSERT INTO recordfilter VALUES (0,'New episode','program.previouslyshown = 0',0);",
3566 "INSERT INTO recordfilter VALUES (1,'Identifiable episode','program.generic = 0',0);",
3567 "INSERT INTO recordfilter VALUES (2,'First showing','program.first > 0',0);",
3568 "INSERT INTO recordfilter VALUES (3,'Prime time','HOUR(CONVERT_TZ(program.starttime, \\'UTC\\', \\'SYSTEM\\')) >= 19 AND HOUR(CONVERT_TZ(program.starttime, \\'UTC\\', \\'SYSTEM\\')) < 22',0);",
3569 "INSERT INTO recordfilter VALUES (4,'Commercial free','channel.commmethod = -2',0);",
3570 "INSERT INTO recordfilter VALUES (5,'High definition','program.hdtv > 0',0);",
3571 "INSERT INTO recordfilter VALUES (6,'This episode','(RECTABLE.programid <> \\'\\' AND program.programid = RECTABLE.programid) OR (RECTABLE.programid = \\'\\' AND program.subtitle = RECTABLE.subtitle AND program.description = RECTABLE.description)',0);",
3572 "INSERT INTO recordfilter VALUES (7,'This series','(RECTABLE.seriesid <> \\'\\' AND program.seriesid = RECTABLE.seriesid)',0);",
3573 "INSERT INTO recordingprofiles VALUES (1,'Default',NULL,NULL,1);",
3574 "INSERT INTO recordingprofiles VALUES (2,'Live TV',NULL,NULL,1);",
3575 "INSERT INTO recordingprofiles VALUES (3,'High Quality',NULL,NULL,1);",
3576 "INSERT INTO recordingprofiles VALUES (4,'Low Quality',NULL,NULL,1);",
3577 "INSERT INTO recordingprofiles VALUES (5,'Default',NULL,NULL,2);",
3578 "INSERT INTO recordingprofiles VALUES (6,'Live TV',NULL,NULL,2);",
3579 "INSERT INTO recordingprofiles VALUES (7,'High Quality',NULL,NULL,2);",
3580 "INSERT INTO recordingprofiles VALUES (8,'Low Quality',NULL,NULL,2);",
3581 "INSERT INTO recordingprofiles VALUES (9,'Default',NULL,NULL,3);",
3582 "INSERT INTO recordingprofiles VALUES (10,'Live TV',NULL,NULL,3);",
3583 "INSERT INTO recordingprofiles VALUES (11,'High Quality',NULL,NULL,3);",
3584 "INSERT INTO recordingprofiles VALUES (12,'Low Quality',NULL,NULL,3);",
3585 "INSERT INTO recordingprofiles VALUES (13,'Default',NULL,NULL,4);",
3586 "INSERT INTO recordingprofiles VALUES (14,'Live TV',NULL,NULL,4);",
3587 "INSERT INTO recordingprofiles VALUES (15,'High Quality',NULL,NULL,4);",
3588 "INSERT INTO recordingprofiles VALUES (16,'Low Quality',NULL,NULL,4);",
3589 "INSERT INTO recordingprofiles VALUES (17,'Default',NULL,NULL,5);",
3590 "INSERT INTO recordingprofiles VALUES (18,'Live TV',NULL,NULL,5);",
3591 "INSERT INTO recordingprofiles VALUES (19,'High Quality',NULL,NULL,5);",
3592 "INSERT INTO recordingprofiles VALUES (20,'Low Quality',NULL,NULL,5);",
3593 "INSERT INTO recordingprofiles VALUES (21,'RTjpeg/MPEG4',NULL,NULL,6);",
3594 "INSERT INTO recordingprofiles VALUES (22,'MPEG2',NULL,NULL,6);",
3595 "INSERT INTO recordingprofiles VALUES (23,'Default',NULL,NULL,8);",
3596 "INSERT INTO recordingprofiles VALUES (24,'Live TV',NULL,NULL,8);",
3597 "INSERT INTO recordingprofiles VALUES (25,'High Quality',NULL,NULL,8);",
3598 "INSERT INTO recordingprofiles VALUES (26,'Low Quality',NULL,NULL,8);",
3599 "INSERT INTO recordingprofiles VALUES (27,'High Quality',NULL,NULL,6);",
3600 "INSERT INTO recordingprofiles VALUES (28,'Medium Quality',NULL,NULL,6);",
3601 "INSERT INTO recordingprofiles VALUES (29,'Low Quality',NULL,NULL,6);",
3602 "INSERT INTO recordingprofiles VALUES (30,'Default',NULL,NULL,10);",
3603 "INSERT INTO recordingprofiles VALUES (31,'Live TV',NULL,NULL,10);",
3604 "INSERT INTO recordingprofiles VALUES (32,'High Quality',NULL,NULL,10);",
3605 "INSERT INTO recordingprofiles VALUES (33,'Low Quality',NULL,NULL,10);",
3606 "INSERT INTO recordingprofiles VALUES (34,'Default',NULL,NULL,11);",
3607 "INSERT INTO recordingprofiles VALUES (35,'Live TV',NULL,NULL,11);",
3608 "INSERT INTO recordingprofiles VALUES (36,'High Quality',NULL,NULL,11);",
3609 "INSERT INTO recordingprofiles VALUES (37,'Low Quality',NULL,NULL,11);",
3610 "INSERT INTO recordingprofiles VALUES (38,'Default',NULL,NULL,12);",
3611 "INSERT INTO recordingprofiles VALUES (39,'Live TV',NULL,NULL,12);",
3612 "INSERT INTO recordingprofiles VALUES (40,'High Quality',NULL,NULL,12);",
3613 "INSERT INTO recordingprofiles VALUES (41,'Low Quality',NULL,NULL,12);",
3614 "INSERT INTO recordingprofiles VALUES (42,'Default',NULL,NULL,7);",
3615 "INSERT INTO recordingprofiles VALUES (43,'Live TV',NULL,NULL,7);",
3616 "INSERT INTO recordingprofiles VALUES (44,'High Quality',NULL,NULL,7);",
3617 "INSERT INTO recordingprofiles VALUES (45,'Low Quality',NULL,NULL,7);",
3618 "INSERT INTO recordingprofiles VALUES (46,'Default',NULL,NULL,9);",
3619 "INSERT INTO recordingprofiles VALUES (47,'Live TV',NULL,NULL,9);",
3620 "INSERT INTO recordingprofiles VALUES (48,'High Quality',NULL,NULL,9);",
3621 "INSERT INTO recordingprofiles VALUES (49,'Low Quality',NULL,NULL,9);",
3622 "INSERT INTO recordingprofiles VALUES (50,'Default',NULL,NULL,13);",
3623 "INSERT INTO recordingprofiles VALUES (51,'Live TV',NULL,NULL,13);",
3624 "INSERT INTO recordingprofiles VALUES (52,'High Quality',NULL,NULL,13);",
3625 "INSERT INTO recordingprofiles VALUES (53,'Low Quality',NULL,NULL,13);",
3626 "INSERT INTO recordingprofiles VALUES (54,'Default',NULL,NULL,14);",
3627 "INSERT INTO recordingprofiles VALUES (55,'Live TV',NULL,NULL,14);",
3628 "INSERT INTO recordingprofiles VALUES (56,'High Quality',NULL,NULL,14);",
3629 "INSERT INTO recordingprofiles VALUES (57,'Low Quality',NULL,NULL,14);",
3630 "INSERT INTO recordingprofiles VALUES (58,'Default',NULL,NULL,15);",
3631 "INSERT INTO recordingprofiles VALUES (59,'Live TV',NULL,NULL,15);",
3632 "INSERT INTO recordingprofiles VALUES (60,'High Quality',NULL,NULL,15);",
3633 "INSERT INTO recordingprofiles VALUES (61,'Low Quality',NULL,NULL,15);",
3634 "INSERT INTO recordingprofiles VALUES (62,'Default',NULL,NULL,16);",
3635 "INSERT INTO recordingprofiles VALUES (63,'Live TV',NULL,NULL,16);",
3636 "INSERT INTO recordingprofiles VALUES (64,'High Quality',NULL,NULL,16);",
3637 "INSERT INTO recordingprofiles VALUES (65,'Low Quality',NULL,NULL,16);",
3638 "INSERT INTO recordingprofiles VALUES (66,'Default',NULL,NULL,17);",
3639 "INSERT INTO recordingprofiles VALUES (67,'Live TV',NULL,NULL,17);",
3640 "INSERT INTO recordingprofiles VALUES (68,'High Quality',NULL,NULL,17);",
3641 "INSERT INTO recordingprofiles VALUES (69,'Low Quality',NULL,NULL,17);",
3642 "INSERT INTO settings VALUES ('mythfilldatabaseLastRunStart','',NULL);",
3643 "INSERT INTO settings VALUES ('mythfilldatabaseLastRunEnd','',NULL);",
3644 "INSERT INTO settings VALUES ('mythfilldatabaseLastRunStatus','',NULL);",
3645 "INSERT INTO settings VALUES ('DataDirectMessage','',NULL);",
3646 "INSERT INTO settings VALUES ('HaveRepeats','0',NULL);",
3647 "INSERT INTO settings VALUES ('DBSchemaVer','1307',NULL);",
3648 "INSERT INTO settings VALUES ('DefaultTranscoder','0',NULL);",
3649 "INSERT INTO videotypes VALUES (1,'txt','',1,0);",
3650 "INSERT INTO videotypes VALUES (2,'log','',1,0);",
3651 "INSERT INTO videotypes VALUES (3,'mpg','Internal',0,0);",
3652 "INSERT INTO videotypes VALUES (4,'avi','',0,1);",
3653 "INSERT INTO videotypes VALUES (5,'vob','Internal',0,0);",
3654 "INSERT INTO videotypes VALUES (6,'mpeg','Internal',0,0);",
3655 "INSERT INTO videotypes VALUES (8,'iso','Internal',0,0);",
3656 "INSERT INTO videotypes VALUES (9,'img','Internal',0,0);",
3657 "INSERT INTO videotypes VALUES (10,'mkv','Internal',0,0);",
3658 "INSERT INTO videotypes VALUES (11,'mp4','Internal',0,0);",
3659 "INSERT INTO videotypes VALUES (12,'m2ts','Internal',0,0);",
3660 "INSERT INTO videotypes VALUES (13,'evo','Internal',0,0);",
3661 "INSERT INTO videotypes VALUES (14,'divx','Internal',0,0);",
3662 "INSERT INTO videotypes VALUES (15,'mov','Internal',0,0);",
3663 "INSERT INTO videotypes VALUES (16,'qt','Internal',0,0);",
3664 "INSERT INTO videotypes VALUES (17,'wmv','Internal',0,0);",
3665 "INSERT INTO videotypes VALUES (18,'3gp','Internal',0,0);",
3666 "INSERT INTO videotypes VALUES (19,'asf','Internal',0,0);",
3667 "INSERT INTO videotypes VALUES (20,'ogg','Internal',0,0);",
3668 "INSERT INTO videotypes VALUES (21,'ogm','Internal',0,0);",
3669 "INSERT INTO videotypes VALUES (22,'flv','Internal',0,0);",
3670 "INSERT INTO videotypes VALUES (23,'ogv','Internal',0,0);",
3671 "INSERT INTO videotypes VALUES (25,'nut','Internal',0,0);",
3672 "INSERT INTO videotypes VALUES (26,'mxf','Internal',0,0);",
3673 "INSERT INTO videotypes VALUES (27,'m4v','Internal',0,0);",
3674 "INSERT INTO videotypes VALUES (28,'rm','Internal',0,0);",
3675 "INSERT INTO videotypes VALUES (29,'ts','Internal',0,0);",
3676 "INSERT INTO videotypes VALUES (30,'swf','Internal',0,0);",
3677 "INSERT INTO videotypes VALUES (31,'f4v','Internal',0,0);",
3678 "INSERT INTO videotypes VALUES (32,'nuv','Internal',0,0);",
3679 NULL
3680 };
3681 
3682  QString dbver = "";
3683  if (!performActualUpdate(updates, "1307", dbver))
3684  return false;
3685 
3686  GetMythDB()->SetHaveSchema(true);
3687  return true;
3688 }
3689 
3690 /* vim: set expandtab tabstop=4 shiftwidth=4: */