/* -------------------------------------------------------------------------- */
/* JAVASCRIPT GENERATOR */
/* -------------------------------------------------------------------------- */
// Javascript generator for the relation block : TODO : make the code real javascript code ( not latex )
javascriptGenerator['renommage'] = function(block: any) {
const value_champs = javascriptGenerator.valueToCode(block, 'Champs');
const statements_elements = javascriptGenerator.valueToCode(block, 'ensemble');
// var code = '\\rho_{' + value_champs + ' }(' + statements_elements + ')';
let code = statements_elements;
let champsTuples = value_champs.split(',');
let champsDepart : string[] = [];
let champsArrivee : string[] = [];
champsTuples.forEach((champsTuple: string) => {
let champs = champsTuple.split('=>');
champsDepart.push(champs[0]);
champsArrivee.push(champs[1]);
});
code += '.rename(' + JSON.stringify(champsDepart) + ', ' + JSON.stringify(champsArrivee) + ')';
return code;
};
javascriptGenerator['selection'] = function(block: any) {
var value_champs = javascriptGenerator.valueToCode(block, 'Champs');
var statements_elements = javascriptGenerator.valueToCode(block, 'ensemble');
// var code = '\\sigma_{' + value_champs + '}(' + statements_elements + ')';
let code = statements_elements;
let champsTuples = value_champs.split(',');
champsTuples.forEach((champsTuple: string) => {
let champsValeur = champsTuple.split('=');
code += '.selectRowsWithCheck("' + champsValeur[0] + '", (row) => {row[\'' + champsValeur[0] + '\'] == \'' + champsValeur[1] + '\'; })';
});
// let functionCheck = 'function (row) { return ' + champs.map((champ: string, index: number) => 'row[\'' + champ + '\'] == \'' + valeurs[index] + '\'').join(' && ') + '; }';
// code += '.selectRowsWithCheck('
return code;
};
javascriptGenerator['projection'] = function(block: any) {
var value_champs = javascriptGenerator.valueToCode(block, 'Champs', javascriptGenerator.ORDER_ADDITION);
var statements_elements = javascriptGenerator.valueToCode(block, 'ensemble', javascriptGenerator.ORDER_ADDITION);
// var code = '\\pi_{' + value_champs + '}(' + statements_elements + ')';
let code = statements_elements;
let champs = value_champs.split(',');
code += '.selectColumns(' + JSON.stringify(champs) + ')';
return code;
};
javascriptGenerator['ensemble'] = function(block: any) {
var value_champs = javascriptGenerator.valueToCode(block, 'name', javascriptGenerator.ORDER_ADDITION);
var code = value_champs;
return code;
};
javascriptGenerator['text'] = function(block: any) {
const textValue = block.getFieldValue('TEXT');
// escape backslashes, slashes, single quotes and double quotes, underscores
// const code = textValue.replace(/\\/g, '\\\\').replace(/\//g, '\\/').replace(/'/g, '\\\'').replace(/"/g, '\\"').replace(/_/g, '\\_');
let code = 'WorkspaceRelation.getTableByName(' + textValue + ')';
return code;
}
javascriptGenerator['difference'] = function(block: any) {
var statements_elements1 = javascriptGenerator.valueToCode(block, 'ensemble1', javascriptGenerator.ORDER_ADDITION);
var statements_elements2 = javascriptGenerator.valueToCode(block, 'ensemble2', javascriptGenerator.ORDER_ADDITION);
// var code = '(' + statements_elements1 + ') \/ (' + statements_elements2 + ')';
let code = statements_elements1;
code += '.difference(' + statements_elements2 + ')';
return code;
}
javascriptGenerator['intersection'] = function(block: any) {
var statements_elements1 = javascriptGenerator.valueToCode(block, 'ensemble1', javascriptGenerator.ORDER_ADDITION);
var statements_elements2 = javascriptGenerator.valueToCode(block, 'ensemble2', javascriptGenerator.ORDER_ADDITION);
// var code = '(' + statements_elements1 + ') \\cup (' + statements_elements2 + ')';
let code = statements_elements1;
code += '.intersection(' + statements_elements2 + ')';
return code;
}
javascriptGenerator['union'] = function(block: any) {
var statements_elements1 = javascriptGenerator.valueToCode(block, 'ensemble1', javascriptGenerator.ORDER_ADDITION);
var statements_elements2 = javascriptGenerator.valueToCode(block, 'ensemble2', javascriptGenerator.ORDER_ADDITION);
// var code = '(' + statements_elements1 + ') \\cap (' + statements_elements2 + ')';
let code = statements_elements1;
code += '.union(' + statements_elements2 + ')';
return code;
}
javascriptGenerator['produit'] = function(block: any) {
var statements_elements1 = javascriptGenerator.valueToCode(block, 'ensemble1', javascriptGenerator.ORDER_ADDITION);
var statements_elements2 = javascriptGenerator.valueToCode(block, 'ensemble2', javascriptGenerator.ORDER_ADDITION);
// var code = '(' + statements_elements1 + ') \\times (' + statements_elements2 + ')';
let code = statements_elements1;
code += '.product(' + statements_elements2 + ')';
return code;
}
javascriptGenerator['debut'] = function(block: any) {
var statements_elements = javascriptGenerator.valueToCode(block, 'nextStatement', javascriptGenerator.ORDER_ADDITION);
// var code = statements_elements;
let code = statements_elements + '.print()';
return code;
}
javascriptGenerator['jointure'] = function(block: any) {
var value_champs = javascriptGenerator.valueToCode(block, 'Champs', javascriptGenerator.ORDER_ADDITION);
var statements_elements1 = javascriptGenerator.valueToCode(block, 'ensemble1', javascriptGenerator.ORDER_ADDITION);
var statements_elements2 = javascriptGenerator.valueToCode(block, 'ensemble2', javascriptGenerator.ORDER_ADDITION);
// var code = '(' + statements_elements1 + ') \\bowtie_{' + value_champs + '} (' + statements_elements2 + ')';
let code = statements_elements1;
const joinCheck = 'function (row1, row2) { return ' + value_champs.split(',').map((champ: string) => 'row1[\'' + champ + '\'] == row2[\'' + champ + '\']').join(' && ') + '; }';
code += '.join(' + statements_elements2 + ', ' + joinCheck + ')';
return code;
};
/* -------------------------------------------------------------------------- */
/* FIN JAVASCRIPT GENERATOR */
/* -------------------------------------------------------------------------- */