[Tux4kids-commits] r1290 - tux4kids-admin/trunk/libtux4kidsadmin
Michał Świtakowski
swistakers-guest at alioth.debian.org
Wed Jul 29 18:07:46 UTC 2009
Author: swistakers-guest
Date: 2009-07-29 18:07:46 +0000 (Wed, 29 Jul 2009)
New Revision: 1290
Modified:
tux4kids-admin/trunk/libtux4kidsadmin/class.cpp
tux4kids-admin/trunk/libtux4kidsadmin/class.h
tux4kids-admin/trunk/libtux4kidsadmin/class_p.h
tux4kids-admin/trunk/libtux4kidsadmin/schoolDatabase.cpp
tux4kids-admin/trunk/libtux4kidsadmin/schoolDatabase_p.h
Log:
database triggers
Modified: tux4kids-admin/trunk/libtux4kidsadmin/class.cpp
===================================================================
--- tux4kids-admin/trunk/libtux4kidsadmin/class.cpp 2009-07-29 17:55:26 UTC (rev 1289)
+++ tux4kids-admin/trunk/libtux4kidsadmin/class.cpp 2009-07-29 18:07:46 UTC (rev 1290)
@@ -57,6 +57,30 @@
d->id = id;
}
+QStringList Class::students() const
+{
+ Q_D(const Class);
+ return d->students;
+}
+
+void Class::setStudents(const QStringList &students)
+{
+ Q_D(Class);
+ d->students = students;
+}
+
+QList<Teacher> Class::teachers() const
+{
+ Q_D(const Class);
+ return d->teachers;
+}
+
+void Class::setTeachers(const QList<Teacher> &teachers)
+{
+ Q_D(Class);
+ d->teachers = teachers;
+}
+
Class &Class::operator=(const Class &other)
{
if (this != &other) {
Modified: tux4kids-admin/trunk/libtux4kidsadmin/class.h
===================================================================
--- tux4kids-admin/trunk/libtux4kidsadmin/class.h 2009-07-29 17:55:26 UTC (rev 1289)
+++ tux4kids-admin/trunk/libtux4kidsadmin/class.h 2009-07-29 18:07:46 UTC (rev 1290)
@@ -5,8 +5,10 @@
#include <QString>
#include "libtux4kidsadmin_global.h"
+#include "teacher.h"
class ClassPrivate;
+class QStringList;
class LIBTUX4KIDSADMIN_SHARED_EXPORT Class
{
@@ -18,6 +20,10 @@
void setName(QString name);
int id() const;
void setId(int id);
+ QStringList students() const;
+ void setStudents(const QStringList &students);
+ QList<Teacher> teachers() const;
+ void setTeachers(const QList<Teacher> &teachers);
Class &operator=(const Class&);
protected:
Modified: tux4kids-admin/trunk/libtux4kidsadmin/class_p.h
===================================================================
--- tux4kids-admin/trunk/libtux4kidsadmin/class_p.h 2009-07-29 17:55:26 UTC (rev 1289)
+++ tux4kids-admin/trunk/libtux4kidsadmin/class_p.h 2009-07-29 18:07:46 UTC (rev 1290)
@@ -3,7 +3,10 @@
#include <QtGlobal>
#include <QString>
+#include <QStringList>
+class Teacher;
+
class ClassPrivate
{
public:
@@ -16,6 +19,8 @@
int id;
QString name;
+ QStringList students;
+ QList<Teacher> teachers;
};
Modified: tux4kids-admin/trunk/libtux4kidsadmin/schoolDatabase.cpp
===================================================================
--- tux4kids-admin/trunk/libtux4kidsadmin/schoolDatabase.cpp 2009-07-29 17:55:26 UTC (rev 1289)
+++ tux4kids-admin/trunk/libtux4kidsadmin/schoolDatabase.cpp 2009-07-29 18:07:46 UTC (rev 1290)
@@ -53,14 +53,20 @@
return;
}
- QSqlQuery createClassTeachers("CREATE TABLE class_teachers (id_class integer, id_teacher integer, primary key(id_class,id_teacher));", db);
+ QSqlQuery createClassTeachers("CREATE TABLE class_teachers "
+ "(id_class integer CONSTRAINT fk_id_class REFERENCES classes(id) ON DELETE CASCADE,"
+ "id_teacher integer CONSTRAINT fk_id_teacher REFERENCES teachers(id) ON DELETE CASCADE,"
+ "primary key(id_class,id_teacher));", db);
if (!createClassTeachers.isActive()) {
error = true;
lastError = createClassTeachers.lastError().text();
return;
}
- QSqlQuery createClassStudents("CREATE TABLE class_students (id_class integer, id_student integer, primary key(id_class,id_student));", db);
+ QSqlQuery createClassStudents("CREATE TABLE class_students "
+ "(id_class integer CONSTRAINT fk_id_class REFERENCES classes(id) ON DELETE CASCADE, "
+ "id_student integer CONSTRAINT fk_id_student REFERENCES students(id) ON DELETE CASCADE,"
+ "primary key(id_class,id_student));", db);
if (!createClassStudents.isActive()) {
error = true;
lastError = createClassStudents.lastError().text();
@@ -68,6 +74,170 @@
}
}
+void SchoolDatabasePrivate::createTriggers()
+{
+ error = false;
+ if (!db.isOpen()) {
+ error = true;
+ lastError = QObject::tr("Database is not open");
+ return;
+ }
+
+ QSqlQuery createTrigger1("DROP TRIGGER fki_class_teachers_id_class_classes_id;"
+ "CREATE TRIGGER fki_class_teachers_id_class_classes_id"
+ "BEFORE INSERT ON [class_teachers]"
+ "FOR EACH ROW BEGIN"
+ "SELECT RAISE(ROLLBACK, \'insert on table"
+ "class_teachers\" violates foreign key constraint"
+ "fki_class_teachers_id_class_classes_id\"')"
+ "WHERE NEW.id_class IS NOT NULL AND (SELECT id FROM classes WHERE id = NEW.id_class) IS NULL;" \
+ "END;", db);
+ if (!createTrigger1.isActive()) {
+ error = true;
+ lastError = createTrigger1.lastError().text();
+ return;
+ }
+
+ QSqlQuery createTrigger2("DROP TRIGGER fku_class_teachers_id_class_classes_id;"
+ "CREATE TRIGGER fku_class_teachers_id_class_classes_id"
+ "BEFORE UPDATE ON [class_teachers]"
+ "FOR EACH ROW BEGIN"
+ "SELECT RAISE(ROLLBACK, 'update on table\" class_teachers\" violates foreign key constraint \"fku_class_teachers_id_class_classes_id\"')"
+ "WHERE NEW.id_class IS NOT NULL AND (SELECT id FROM classes WHERE id = NEW.id_class) IS NULL;"
+ "END;", db);
+ if (!createTrigger2.isActive()) {
+ error = true;
+ lastError = createTrigger2.lastError().text();
+ return;
+ }
+
+ QSqlQuery createTrigger3("DROP TRIGGER fkdc_class_teachers_id_class_classes_id;"
+ "CREATE TRIGGER fkdc_class_teachers_id_class_classes_id"
+ "BEFORE DELETE ON classes"
+ "FOR EACH ROW BEGIN"
+ "DELETE FROM class_teachers WHERE class_teachers.id_class = OLD.id;"
+ "END;", db);
+ if (!createTrigger3.isActive()) {
+ error = true;
+ lastError = createTrigger3.lastError().text();
+ return;
+ }
+
+ QSqlQuery createTrigger4("DROP TRIGGER fki_class_teachers_id_teacher_teachers_id;"
+ "CREATE TRIGGER fki_class_teachers_id_teacher_teachers_id"
+ "BEFORE INSERT ON [class_teachers]"
+ "FOR EACH ROW BEGIN"
+ "SELECT RAISE(ROLLBACK, 'insert on table \"class_teachers\" violates foreign key constraint \"fki_class_teachers_id_teacher_teachers_id\"')"
+ "WHERE NEW.id_teacher IS NOT NULL AND (SELECT id FROM teachers WHERE id = NEW.id_teacher) IS NULL;"
+ "END;", db);
+ if (!createTrigger4.isActive()) {
+ error = true;
+ lastError = createTrigger4.lastError().text();
+ return;
+ }
+
+ QSqlQuery createTrigger5("DROP TRIGGER fku_class_teachers_id_teacher_teachers_id;"
+ "CREATE TRIGGER fku_class_teachers_id_teacher_teachers_id"
+ "BEFORE UPDATE ON [class_teachers]"
+ "FOR EACH ROW BEGIN"
+ "SELECT RAISE(ROLLBACK, 'update on table \"class_teachers\" violates foreign key constraint \"fku_class_teachers_id_teacher_teachers_id\"')"
+ "WHERE NEW.id_teacher IS NOT NULL AND (SELECT id FROM teachers WHERE id = NEW.id_teacher) IS NULL;"
+ "END;", db);
+ if (!createTrigger5.isActive()) {
+ error = true;
+ lastError = createTrigger5.lastError().text();
+ return;
+ }
+
+ QSqlQuery createTrigger6("DROP TRIGGER fkdc_class_teachers_id_teacher_teachers_id;"
+ "CREATE TRIGGER fkdc_class_teachers_id_teacher_teachers_id"
+ "BEFORE DELETE ON teachers"
+ "FOR EACH ROW BEGIN"
+ "DELETE FROM class_teachers WHERE class_teachers.id_teacher = OLD.id;"
+ "END;", db);
+ if (!createTrigger6.isActive()) {
+ error = true;
+ lastError = createTrigger6.lastError().text();
+ return;
+ }
+
+ QSqlQuery createTrigger7("DROP TRIGGER fki_class_students_id_class_classes_id;"
+ "CREATE TRIGGER fki_class_students_id_class_classes_id"
+ "BEFORE INSERT ON [class_students]"
+ "FOR EACH ROW BEGIN"
+ "SELECT RAISE(ROLLBACK, 'insert on table \"class_students\" violates foreign key" "constraint \"fki_class_students_id_class_classes_id\"')"
+ "WHERE NEW.id_class IS NOT NULL AND (SELECT id FROM classes WHERE id = NEW.id_class) IS NULL;"
+ "END;", db);
+ if (!createTrigger7.isActive()) {
+ error = true;
+ lastError = createTrigger7.lastError().text();
+ return;
+ }
+
+ QSqlQuery createTrigger8("DROP TRIGGER fku_class_students_id_class_classes_id;"
+ "CREATE TRIGGER fku_class_students_id_class_classes_id"
+ "BEFORE UPDATE ON [class_students]"
+ "FOR EACH ROW BEGIN"
+ "SELECT RAISE(ROLLBACK, 'update on table \"class_students\" violates foreign key constraint \"fku_class_students_id_class_classes_id\"')"
+ "WHERE NEW.id_class IS NOT NULL AND (SELECT id FROM classes WHERE id = NEW.id_class) IS NULL;"
+ "END;", db);
+ if (!createTrigger8.isActive()) {
+ error = true;
+ lastError = createTrigger8.lastError().text();
+ return;
+ }
+
+ QSqlQuery createTrigger9("DROP TRIGGER fkdc_class_students_id_class_classes_id;"
+ "CREATE TRIGGER fkdc_class_students_id_class_classes_id"
+ "BEFORE DELETE ON classes"
+ "FOR EACH ROW BEGIN"
+ "DELETE FROM class_students WHERE class_students.id_class =OLD.id;"
+ "END;", db);
+ if (!createTrigger9.isActive()) {
+ error = true;
+ lastError = createTrigger9.lastError().text();
+ return;
+ }
+
+ QSqlQuery createTrigger10("DROP TRIGGER fki_class_students_id_student_students_id;"
+ "CREATE TRIGGER fki_class_students_id_student_students_id"
+ "BEFORE INSERT ON [class_students]"
+ "FOR EACH ROW BEGIN"
+ "SELECT RAISE(ROLLBACK, 'insert on table \"class_students\" violates foreign key constraint \"fki_class_students_id_student_students_id\"')"
+ "WHERE NEW.id_student IS NOT NULL AND (SELECT id FROM students WHERE id = NEW.id_student) IS NULL;"
+ "END;", db);
+ if (!createTrigger10.isActive()) {
+ error = true;
+ lastError = createTrigger10.lastError().text();
+ return;
+ }
+
+ QSqlQuery createTrigger11("DROP TRIGGER fku_class_students_id_student_students_id;"
+ "CREATE TRIGGER fku_class_students_id_student_students_id"
+ "BEFORE UPDATE ON [class_students]"
+ "FOR EACH ROW BEGIN"
+ "SELECT RAISE(ROLLBACK, 'update on table \"class_students\" violates foreign key constraint \"fku_class_students_id_student_students_id\"')"
+ "WHERE NEW.id_student IS NOT NULL AND (SELECT id FROM students WHERE id = NEW.id_student) IS NULL;"
+ "END;", db);
+ if (!createTrigger11.isActive()) {
+ error = true;
+ lastError = createTrigger11.lastError().text();
+ return;
+ }
+
+ QSqlQuery createTrigger12("DROP TRIGGER fkdc_class_students_id_student_students_id;"
+ "CREATE TRIGGER fkdc_class_students_id_student_students_id"
+ "BEFORE DELETE ON students"
+ "FOR EACH ROW BEGIN"
+ "DELETE FROM class_students WHERE class_students.id_student = OLD.id;"
+ "END;", db);
+ if (!createTrigger12.isActive()) {
+ error = true;
+ lastError = createTrigger12.lastError().text();
+ return;
+ }
+}
+
void SchoolDatabasePrivate::addClass(Class &newClass)
{
if (!db.isOpen()) {
@@ -452,8 +622,10 @@
return d->db.open();
} else {
bool result = d->db.open();
- if (result)
+ if (result) {
d->createTables();
+ d->createTriggers();
+ }
return result;
}
}
Modified: tux4kids-admin/trunk/libtux4kidsadmin/schoolDatabase_p.h
===================================================================
--- tux4kids-admin/trunk/libtux4kidsadmin/schoolDatabase_p.h 2009-07-29 17:55:26 UTC (rev 1289)
+++ tux4kids-admin/trunk/libtux4kidsadmin/schoolDatabase_p.h 2009-07-29 18:07:46 UTC (rev 1290)
@@ -17,6 +17,7 @@
virtual ~SchoolDatabasePrivate();
void createTables();
+ void createTriggers();
void addClass(Class &newClass);
void updateClass(const Class &updatedClass);
void deleteClass(const Class &deletedClass);
More information about the Tux4kids-commits
mailing list