Untitled

 avatar
unknown
tsx
2 years ago
7.0 kB
4
Indexable
    /* -------------------------------------------------------------------------- */
    /*                            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                          */
    /* -------------------------------------------------------------------------- */