OSDN Git Service

change: EPG取得並列化が可能かどうかを判定するように変更
[epgrec/epgrec.git] / upgrade_db.php
1 #!/usr/bin/php
2 <?php
3 $script_path = dirname( __FILE__ );
4 chdir( $script_path );
5 include_once($script_path . '/config.php');
6 include_once(INSTALL_PATH . '/Settings.class.php' );
7
8
9 // mysqli::multi_queryは動作がいまいちなので使わない
10
11 function multi_query( $sqlstrs, $dbh ) {
12         $error = false;
13         
14         foreach( $sqlstrs as $sqlstr ) {
15                 $res = mysql_query( $sqlstr );
16                 if( $res === FALSE ) {
17                         echo "failed: ". $sqlstr . "\n";
18                         $error = true;
19                 }
20         }
21         return $error;
22 }
23
24 function column_exists( $tbl, $col, $dbh ) {
25         $sqlstr = "show fields from ".$tbl." where Field='".$col."'";
26         $res = mysql_query( $sqlstr, $dbh );
27         return mysql_num_rows($res);
28 }
29
30 function index_exists( $tbl, $idx, $dbh ) {
31         $sqlstr = "show index from ".$tbl." where Key_name='".$idx."'";
32         $res = mysql_query( $sqlstr, $dbh );
33         return mysql_num_rows($res);
34 }
35
36
37 $settings = Settings::factory();
38 $dbh = mysql_connect( $settings->db_host, $settings->db_user, $settings->db_pass );
39 if( $dbh !== FALSE ) {
40
41         $sqlstr = "use ".$settings->db_name;
42         mysql_query( $sqlstr );
43
44         $sqlstr = "set NAMES 'utf8'";
45         mysql_query( $sqlstr );
46         
47         // RESERVE_TBL
48
49         $sqlstrs = array (
50          "alter table ".$settings->tbl_prefix.RESERVE_TBL." modify  channel_disc varchar(128) not null default 'none';",        // channel disc
51          "alter table ".$settings->tbl_prefix.RESERVE_TBL." modify  channel_id integer not null  default '0';",                 // channel ID
52          "alter table ".$settings->tbl_prefix.RESERVE_TBL." modify  program_id integer not null default '0';",                          // Program ID
53          "alter table ".$settings->tbl_prefix.RESERVE_TBL." modify  type varchar(8) not null default 'GR';",                            // 種別(GR/BS/CS)
54          "alter table ".$settings->tbl_prefix.RESERVE_TBL." modify  channel varchar(10) not null default '0';",                 // チャンネル
55          "alter table ".$settings->tbl_prefix.RESERVE_TBL." modify  title varchar(512) not null default 'none';",                       // タイトル
56          "alter table ".$settings->tbl_prefix.RESERVE_TBL." modify  description varchar(512) not null default 'none';",         // 説明 text->varchar
57          "alter table ".$settings->tbl_prefix.RESERVE_TBL." modify  category_id integer not null default '0';",                 // カテゴリID
58          "alter table ".$settings->tbl_prefix.RESERVE_TBL." modify  starttime datetime not null default '1970-01-01 00:00:00';",        // 開始時刻
59          "alter table ".$settings->tbl_prefix.RESERVE_TBL." modify  endtime datetime not null default '1970-01-01 00:00:00';",          // 終了時刻
60          "alter table ".$settings->tbl_prefix.RESERVE_TBL." modify  job integer not null default '0';",                                 // job番号
61          "alter table ".$settings->tbl_prefix.RESERVE_TBL." modify  path blob default null;",                                                           // 録画ファイルパス
62          "alter table ".$settings->tbl_prefix.RESERVE_TBL." modify  complete boolean not null default '0';",                            // 完了フラグ
63          "alter table ".$settings->tbl_prefix.RESERVE_TBL." modify  reserve_disc varchar(128) not null default 'none';",        // 識別用hash
64          "alter table ".$settings->tbl_prefix.RESERVE_TBL." modify  autorec integer not null default '0';",                             // キーワードID
65          "alter table ".$settings->tbl_prefix.RESERVE_TBL." modify  mode integer not null default '0';",                                        //録画モード
66         );
67         
68         if( multi_query( $sqlstrs, $dbh ) ) {
69                 echo "予約テーブルのアップデートに失敗\n";
70         }
71         
72         // インデックス追加
73         $sqlstrs = array();
74         if( index_exists( $settings->tbl_prefix.RESERVE_TBL, "reserve_ch_idx", $dbh ) ) {
75                 echo "reserve_ch_idxはすでに存在しているため作成しません\n";
76         }
77         else {
78                 array_push( $sqlstrs, "create index reserve_ch_idx on ".$settings->tbl_prefix.RESERVE_TBL."  (channel_disc);" );
79         }
80         if( index_exists( $settings->tbl_prefix.RESERVE_TBL, "reserve_st_idx", $dbh ) ) {
81                 echo "reserve_st_idxはすでに存在しているため作成しません\n";
82         }
83         else {
84                 array_push( $sqlstrs, "create index reserve_st_idx on ".$settings->tbl_prefix.RESERVE_TBL."  (starttime);" );
85         }
86         if( multi_query( $sqlstrs, $dbh ) ) {
87                 echo "予約テーブルにインデックスが作成できません\n";
88         }
89         
90         // PROGRAM_TBL
91         
92         $sqlstrs = array (
93                 "alter table ".$settings->tbl_prefix.PROGRAM_TBL." modify channel_disc varchar(128) not null default 'none';",  // channel disc
94                 "alter table ".$settings->tbl_prefix.PROGRAM_TBL." modify channel_id integer not null default '0';",                            // channel ID
95                 "alter table ".$settings->tbl_prefix.PROGRAM_TBL." modify type varchar(8) not null default 'GR';",                              // 種別(GR/BS/CS)
96                 "alter table ".$settings->tbl_prefix.PROGRAM_TBL." modify channel varchar(10) not null default '0';",                   // チャンネル
97                 "alter table ".$settings->tbl_prefix.PROGRAM_TBL." modify title varchar(512) not null default 'none';",                 // タイトル
98                 "alter table ".$settings->tbl_prefix.PROGRAM_TBL." modify description varchar(512) not null default 'none';",   // 説明 text->varchar
99                 "alter table ".$settings->tbl_prefix.PROGRAM_TBL." modify category_id integer not null default '0';",                   // カテゴリID
100                 "alter table ".$settings->tbl_prefix.PROGRAM_TBL." modify starttime datetime not null default '1970-01-01 00:00:00';",  // 開始時刻
101                 "alter table ".$settings->tbl_prefix.PROGRAM_TBL." modify endtime datetime not null default '1970-01-01 00:00:00';",            // 終了時刻
102                 "alter table ".$settings->tbl_prefix.PROGRAM_TBL." modify program_disc varchar(128) not null default 'none';",                  // 識別用hash
103                 "alter table ".$settings->tbl_prefix.PROGRAM_TBL." modify autorec boolean not null default '1';",                                       // 自動録画有効無効
104         );
105         
106         if( multi_query( $sqlstrs, $dbh ) ) {
107                 echo "番組テーブルのアップデートに失敗\n";
108         }
109         
110         // インデックス追加
111         $sqlstrs = array();
112         if( index_exists( $settings->tbl_prefix.PROGRAM_TBL , "program_ch_idx", $dbh ) ) {
113                 echo "program_ch_idxはすでに存在しているため作成しません\n";
114         }
115         else {
116                 array_push( $sqlstrs, "create index program_ch_idx on ".$settings->tbl_prefix.PROGRAM_TBL." (channel_disc);" );
117         }
118         if( index_exists( $settings->tbl_prefix.PROGRAM_TBL , "program_st_idx", $dbh ) ) {
119                 echo "program_st_idxはすでに存在しているため作成しません\n";
120         }
121         else {
122                 array_push( $sqlstrs, "create index program_st_idx on ".$settings->tbl_prefix.PROGRAM_TBL." (starttime);" );
123         }
124         if( multi_query( $sqlstrs, $dbh ) ) {
125                 echo "番組テーブルにインデックスが作成できません\n";
126         }
127         
128         // CHANNEL_TBL
129         
130         $sqlstrs = array(
131                 "alter table ".$settings->tbl_prefix.CHANNEL_TBL." modify type varchar(8) not null default 'GR';",                              // 種別
132                 "alter table ".$settings->tbl_prefix.CHANNEL_TBL." modify channel varchar(10) not null default '0';",                   // channel
133                 "alter table ".$settings->tbl_prefix.CHANNEL_TBL." modify name varchar(512) not null default 'none';",                  // 表示名
134                 "alter table ".$settings->tbl_prefix.CHANNEL_TBL." modify channel_disc varchar(128) not null default 'none';",  // 識別用hash
135         );
136         if( column_exists( $settings->tbl_prefix.CHANNEL_TBL, "sid", $dbh ) ) {
137                 echo "sidフィールドは存在しているので作成しません\n";
138         }
139         else {
140                 array_push( $sqlstrs , "alter table ".$settings->tbl_prefix.CHANNEL_TBL." add sid varchar(64) not null default 'hd'" );
141         }
142         if( column_exists( $settings->tbl_prefix.CHANNEL_TBL, "skip", $dbh ) ) {
143                 echo "skipフィールドは存在しているので作成しません\n";
144         }
145         else {
146                 array_push( $sqlstrs , "alter table ".$settings->tbl_prefix.CHANNEL_TBL." add skip boolean not null default '0'" );
147         }
148         if( multi_query( $sqlstrs, $dbh ) ) {
149                 echo "チャンネルテーブルのアップデートに失敗\n";
150         }
151         
152         // CATEGORY_TBL
153         
154         $sqlstrs  = array(
155                 "alter table ".$settings->tbl_prefix.CATEGORY_TBL." modify name_jp varchar(512) not null default 'none';",              // 表示名
156                 "alter table ".$settings->tbl_prefix.CATEGORY_TBL." modify name_en varchar(512) not null default 'none';",              // 同上
157                 "alter table ".$settings->tbl_prefix.CATEGORY_TBL." modify category_disc varchar(128) not null default 'none'", // 識別用hash
158         );
159         if( multi_query( $sqlstrs, $dbh ) ) {
160                 echo "カテゴリテーブルのアップデートに失敗\n";
161         }
162         
163         // KEYWORD_TBL
164         
165         $sqlstrs = array(
166                 "alter table ".$settings->tbl_prefix.KEYWORD_TBL." modify keyword varchar(512) not null default '*';",                  // 表示名
167                 "alter table ".$settings->tbl_prefix.KEYWORD_TBL." modify type varchar(8) not null default '*';",                               // 種別
168                 "alter table ".$settings->tbl_prefix.KEYWORD_TBL." modify channel_id integer not null default '0';",                            // channel ID
169                 "alter table ".$settings->tbl_prefix.KEYWORD_TBL." modify category_id integer not null default '0';",                   // カテゴリID
170                 "alter table ".$settings->tbl_prefix.KEYWORD_TBL." modify use_regexp boolean not null default '0';",                            // 正規表現を使用するなら1
171          );
172         if( column_exists( $settings->tbl_prefix.KEYWORD_TBL, "autorec_mode", $dbh ) ) {
173                 echo "autorec_modeは存在しているので作成しません\n";
174         }
175         else {
176                 array_push( $sqlstrs, "alter table ".$settings->tbl_prefix.KEYWORD_TBL." add autorec_mode integer not null default '0';");
177         }
178         if( column_exists( $settings->tbl_prefix.KEYWORD_TBL, "weekofday", $dbh ) ) {
179                 echo "weekofdayは存在しているので作成しません\n";
180         }
181         else {
182                 array_push( $sqlstrs, "alter table ".$settings->tbl_prefix.KEYWORD_TBL." add weekofday enum ('0','1','2','3','4','5','6','7' ) default '7'" );
183         }
184         if( column_exists( $settings->tbl_prefix.KEYWORD_TBL, "prgtime", $dbh ) ) {
185                 echo "prgtimeは存在しているので作成しません\n";
186         }
187         else {
188                 array_push( $sqlstrs, 
189                         "alter table ".$settings->tbl_prefix.KEYWORD_TBL." add prgtime enum ('0','1','2','3','4','5','6','7','8','9','10','11','12',".
190                                                                                                                                                                 "'13','14','15','16','17','18','19','20','21','22','23','24') default '24'" );
191         }
192
193         if( multi_query( $sqlstrs, $dbh ) ) {
194                 echo "キーワードテーブルのアップデートに失敗\n";
195         }
196 }
197 else
198         exit( "DBの接続に失敗\n" );
199 ?>