OSDN Git Service

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