21. Februar 2008
Tag vier? Wovon fragt sich jetzt der ein oder andere vielleicht. Mittlerweile bin ich ja wieder heile und pünktlich in Bremen angekommen. Kaum ist das Wintersemester 07/08 vorbei, sitze ich auch schon wieder einige, genau vier, Tage in der Uni. Zusammen mit Dennis besuche ich den Kurs Agile Webentwicklung von und mit Carsten Bormann. Das ganze Paket ist als Intensivkurs geschnürt, somit sitzen wir zwei mit zwanzig weiteren Mitstreitern täglich von neun Uhr morgens bis neun Uhr abends in der Uni. Nach drei Tagen kann man aber sagen, dass es sich schlimmer anhört, als es ist
Carstens Vorträge sind wie gewohnt informativ und interessant. Drei Viertel des Tages sind mit Vorlesung belegt, die restlichen Stunden verbringen wir mit unserem Projekt.
Projekt? Jeweils zwei Studenten sind mit einem kleinen Software-Projekt beschäftigt, welches von einem externen Kunden betreut und mit Hilfe agiler Methoden durchgeführt wird. Das Projekt von Dennis und mir beschäftigt sich mit der Implementierung eines OpenID-Servers unter Ruby on Rails. Mit diesem bekannten Full-Stack-Framework wird der technische Praxisanteil des Kurses gefüllt.
Doch zurück zum Tagesgeschehen, heute wurde der Vorlesungsanteil von Carsten durch jenen von Jan ersetzt, der uns ein wenig (mehr) über TDD (dt. Test-getriebene Entwicklung) erzählte. Die diskutierten Methoden durften wir anschließend gleich am eigenen Projekt in der Praxis nutzen



8 Kommentare »
13. Dezember 2007
Dennis hat mich vor Kurzem gefragt, ob man alle Tabellen einer Datenbank leeren kann, da er einen Import testen musste. Verteilt dieser sich auf eine Menge Tabellen, dessen Anzahl sich während der Entwicklung noch verändern kann, ist Handarbeit angesagt. Passenderweise bietet SQL genau dafür den Befehl truncate an. Die Tabelle wird gelöscht und mit ihrem ursprünglichen create-Statement wieder erzeugt. Deshalb ist truncate auch erheblich schneller als delete.
Möchte man aber jetzt alle Tabellen in einer Datenbank leeren, kann man dafür ein Script per Hand anlegen, welches alle Tabellennamen enthält oder lieber eine Prozedur schreiben (oder jetzt hier runterladen), die einem die Arbeit abnimmt
DROP PROCEDURE IF EXISTS `trunc_db`;
DELIMITER /
CREATE PROCEDURE `trunc_db`(db VARCHAR(64))
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE tbl VARCHAR(255);
DECLARE cur CURSOR FOR
SELECT table_name
FROM information_schema.tables
WHERE table_type ='BASE TABLE' AND TABLE_SCHEMA = db;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur;
REPEAT
FETCH cur INTO tbl;
SET @s = CONCAT('TRUNCATE `', db, '`.`', tbl, '`');
PREPARE stm FROM @s;
IF NOT done THEN
EXECUTE stm;
END IF;
UNTIL done END REPEAT;
CLOSE cur;
END;
/
DELIMITER ;
Das Script kann hier runtergeladen werden. Die Prozedur prüft nicht auf vorhandene Fremdschlüssel, es kann also vorkommen, dass sie auf Grund einer Constraint-Verletzung nicht durchläuft. Viel Spaß beim Erweitern der Prozedur 
1 Kommentar »
13. Dezember 2007
3 Kommentare »