Araştırmalarım ve deneylerim henüz bir cevap vermedi, bu yüzden biraz yardım umuyorum.
Önceki sürümlerde şimdi eklemek istediğim bir sütunu olmayan bir uygulamanın kurulum dosyasını değiştiriyorum. Sütunu manuel olarak eklemek istemiyorum, ancak kurulum dosyasında ve yalnızca tabloda yeni sütun yoksa.
Tablo şu şekilde oluşturulur:
CREATE TABLE IF NOT EXISTS `#__comm_subscribers` (
`subscriber_id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL default '0',
`subscriber_name` varchar(64) NOT NULL default '',
`subscriber_surname` varchar(64) NOT NULL default '',
`subscriber_email` varchar(64) NOT NULL default '',
`confirmed` tinyint(1) NOT NULL default '0',
`subscribe_date` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`subscriber_id`),
UNIQUE KEY `subscriber_email` (`subscriber_email`)
) ENGINE=MyISAM CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' COMMENT='Subscribers for Comm are stored here.';
Create table ifadesinin altına şunu eklersem, sütun zaten mevcutsa (ve belki de doldurulmuşsa) ne olacağından emin değilim:
ALTER TABLE `#__comm_subscribers` ADD `subscriber_surname`;
ALTER TABLE `#__comm_subscribers` MODIFY `subscriber_surname` varchar(64) NOT NULL default '';
Bu yüzden, bir yerde bulduğum aşağıdakileri denedim. Bu işe yaramıyor gibi görünüyor ama doğru kullandığımdan tam olarak emin değilim.
/*delimiter '//'
CREATE PROCEDURE addcol() BEGIN
IF NOT EXISTS(
SELECT * FROM information_schema.COLUMNS
WHERE COLUMN_NAME='subscriber_surname' AND TABLE_NAME='#__comm_subscribers'
)
THEN
ALTER TABLE `#__comm_subscribers`
ADD COLUMN `subscriber_surname` varchar(64) NOT NULL default '';
END IF;
END;
//
delimiter ';'
CALL addcol();
DROP PROCEDURE addcol;*/
Bunu yapmanın iyi bir yolu olan var mı?