Ébauche des requêtes du serveur.

This commit is contained in:
Georges Dupéron 2011-01-27 00:58:38 +01:00
parent b54667989f
commit 70b04a1d75
4 changed files with 55 additions and 15 deletions

View File

@ -5,18 +5,20 @@ echo " La progression est affichée avec pv. Si vous n'avez pas pv, supprimez l
echo " Et c'est parti !" >&2
echo >&2
# game_played(type) : 0=partie de référence initiale, 1=partie d'un joueur.
cat <<EOF
begin transaction;
start transaction;
create database if not exists pticlic;
create table node(eid integer primary key autoincrement, name, type, weight);
create table relation(rid integer primary key autoincrement, start, end, type, weight);
create table type_node(nom, num);
create table type_relation(nom, num, nom_etendu, info);
create table user(login primary key, mail, hash_mdp);
create table sessid(login, sid);
create table partie(pid, eid_mot_central, relation_1, relation_2, relation_3, relation_4);
create table partie_nuage(pid, num, eid_mod);
create table partie_reference(pid, num, relation, poids);
use pticlic;
create table node(eid integer auto_increment, name varchar(255), type integer, weight integer, primary key(eid));
create table relation(rid integer auto_increment, start integer, end integer, type integer, weight integer, primary key(rid));
create table type_node(name varchar(255), num integer, primary key(num));
create table type_relation(name varchar(255), num integer, extended_name varchar(16384), info varchar(16384), primary key(num));
create table user(login varchar(255), mail varchar(255), hash_mdp char(32), primary key(login));
create table game(pid integer auto_increment, eid_central_word integer, relation_1 integer, relation_2 integer, relation_3 integer, relation_4 integer, reference_played_game integer, primary key(pid));
create table game_cloud(pid integer, num integer, eid_word integer);
create table game_played(pid integer, type integer, num integer, relation integer, weight integer);
EOF
# tr : pour virer le CRLF qui traîne
@ -27,10 +29,11 @@ cat "$1" \
| sed -e 's/X/XX/g' | sed -e 's/A/Xa/g' | tr '\n' 'A' | sed -e 's/A")/")/g' | tr 'A' '\n' | sed -e 's/Xa/A/g' | sed -e 's/XX/X/g' \
| pv -s $(wc -c "$1" | cut -d ' ' -f 1) \
| sed -e "s#'#''#g" \
| sed -E -e 's#^// [0-9]+ occurrences of relations ([a-z_]+) \(t=([0-9]+) nom_etendu="([^"]+)" info="([^"]+)"\)$#insert into type_relation(nom, num, nom_etendu, info) values('\''\1'\'', \2, '\''\3'\'', '\''\4'\'');#' \
| sed -E -e 's#^// [0-9]+ occurrences of nodes ([a-z_]+) \(t=([0-9]+)\)$#insert into type_node(nom, num) values('\''\1'\'', \2);#' \
| sed -E -e 's#^// [0-9]+ occurrences of relations ([a-z_]+) \(t=([0-9]+) nom_etendu="([^"]+)" info="([^"]+)"\)$#insert into type_relation(name, num, extended_name, info) values('\''\1'\'', \2, '\''\3'\'', '\''\4'\'');#' \
| sed -E -e 's#^// [0-9]+ occurrences of nodes ([a-z_]+) \(t=([0-9]+)\)$#insert into type_node(name, num) values('\''\1'\'', \2);#' \
| sed -E -e 's#^eid=([0-9]+):n="(.*)":t=([0-9]+):w=(-?[0-9]+)$#insert into node(eid, name, type, weight) values(\1, '\''\2'\'', '\''\3'\'', '\''\4'\'');#' \
| sed -E -e 's#^rid=([0-9]+):n1=([0-9]+):n2=([0-9]+):t=([0-9]+):w=(-?[0-9]+)#insert into relation(rid, start, end, type, weight) values(\1,\2,\3,\4,\5);#' \
| grep -v 'insert into node(eid, name, type, weight) values(0,' \
| grep -v '^//' \
| grep -v '^$'

View File

@ -8,8 +8,8 @@ $email_admin = ''; // Adresse e-mail Administrateur.
// Base de donées.
$sql_serveur = 'localhost'; // Serveur de la Base De Donnée (BDD).
$sql_login = 'root'; // Login BDD.
$sql_pass = ''; // Pass BDD.
$sql_bdd = 'ptitclic'; // Nom de la BDD.
$sql_pass = ' '; // Pass BDD.
$sql_bdd = 'pticlic'; // Nom de la BDD.
// Quelques fonctions utiles.
include("function.php");

View File

@ -29,9 +29,14 @@ function secure($string)
return $string;
}
// TODO Yoann : fonction qui échappe les "
function escape_json_string($str) {
return $str;
}
function mDie($err,$msg)
{
echo "Error:".$err.":".$msg;
echo "{ error:\"".escape_json_string($err)."\", msg:\"".escape_json_string($msg)."\"}";
exit(1);
}

View File

@ -24,6 +24,38 @@ if(strcmp($data['passwd'],$passwd) != 0)
mDie(3,"Nom d'utilisateur ou mot de passe incorrect");
function random_node() {
return mysql("select eid from node where eid = (abs(random()) % (select max(eid) from node))+1 or eid = (select max(eid) from node where eid > 0) order by eid desc limit 1;");
}
function create_game($cloud_size) {
// select random node
$eid_center=random_node();
// select neighbors 1 hop
$niveau1=mysql("select end from relation where start = 42 limit $taille_nuage;");
// select neighbors 2 hops
$niveau2=mysql("select * from relation where start in (select end from relation where start = 42) limit $taille_nuage;");
// select neighbors relative to the end (one hop start->end, one hop start<-end).
$niveau3=mysql("select * from relation where end in (select end from relation where start = 42) and type not in (4, 12, 36, 18, 29, 45, 46, 47, 48, 1000, 1001) limit $taille_nuage;");
// pour compléter si nécessaire :
// select random words
$niveau4=array();
for ($i=0; $i < $cloud_size; $i++) {
$niveau4[$i] = ???
}
// start transaction;
// insert into game $eid_center
// insert into game_cloud [$cloud_size mots choisis dans $niveau1, $niveau2, $niveau3, $niveau4]
// insert into game_played une partie de référence.
// commit;
}
// Sinon tout est bon on effectu l'opération correspondant à la commande passée.
if($cmd == 0) // "Get partie"
{