libfic: implement more dependancies kind

This commit is contained in:
nemunaire 2019-01-16 06:02:06 +01:00
commit 5d31ac6e04
5 changed files with 93 additions and 8 deletions

View file

@ -3,6 +3,7 @@ package fic
import (
"bytes"
"errors"
"fmt"
"regexp"
"time"
@ -139,7 +140,11 @@ func (k FlagKey) Update() (int64, error) {
func (k FlagKey) Delete() (int64, error) {
if _, err := DBExec("DELETE FROM exercice_files_deps WHERE id_flag = ?", k.Id); err != nil {
return 0, err
} else if _, err := DBExec("DELETE FROM exercice_flags_deps WHERE id_flag = ?", k.Id); err != nil {
} else if _, err := DBExec("DELETE FROM exercice_mcq_okey_deps WHERE id_flag_dep = ?", k.Id); err != nil {
return 0, err
} else if _, err := DBExec("DELETE FROM exercice_flags_omcq_deps WHERE id_flag = ?", k.Id); err != nil {
return 0, err
} else if _, err := DBExec("DELETE FROM exercice_flags_deps WHERE id_flag = ? OR id_flag_dep = ?", k.Id, k.Id); err != nil {
return 0, err
} else if _, err := DBExec("DELETE FROM flag_choices WHERE id_flag = ?", k.Id); err != nil {
return 0, err
@ -156,20 +161,23 @@ func (k FlagKey) Delete() (int64, error) {
func (k FlagKey) AddDepend(j Flag) (err error) {
if d, ok := j.(FlagKey); ok {
_, err = DBExec("INSERT INTO exercice_flags_deps (id_flag, id_flag_dep) VALUES (?, ?)", k.Id, d.Id)
} else if d, ok := j.(MCQ); ok {
_, err = DBExec("INSERT INTO exercice_flags_omcq_deps (id_flag, id_mcq_dep) VALUES (?, ?)", k.Id, d.Id)
} else {
err = errors.New("Dependancy type not implemented for this flag.")
err = errors.New(fmt.Sprintf("Dependancy type for key (%T) not implemented for this flag.", j))
}
return
}
// GetDepends retrieve the flag's dependency list.
func (k FlagKey) GetDepends() ([]Flag, error) {
var deps = make([]Flag, 0)
if rows, err := DBQuery("SELECT id_flag_dep FROM exercice_flags_deps WHERE id_flag = ?", k.Id); err != nil {
return nil, err
} else {
defer rows.Close()
var deps = make([]Flag, 0)
for rows.Next() {
var d int64
if err := rows.Scan(&d); err != nil {
@ -180,9 +188,26 @@ func (k FlagKey) GetDepends() ([]Flag, error) {
if err := rows.Err(); err != nil {
return nil, err
}
return deps, nil
}
if rows, err := DBQuery("SELECT id_mcq_dep FROM exercice_flags_omcq_deps WHERE id_flag = ?", k.Id); err != nil {
return nil, err
} else {
defer rows.Close()
for rows.Next() {
var d int64
if err := rows.Scan(&d); err != nil {
return nil, err
}
deps = append(deps, MCQ{d, k.IdExercice, "", []MCQ_entry{}})
}
if err := rows.Err(); err != nil {
return nil, err
}
}
return deps, nil
}
// Check if the given val is the expected one for this flag.