2016-04-05 9 views
0

Ich habe eine mysql Stored Procedure, die 1 zurückgibt, wenn sie zwei Updates erfolgreich ausführen kann und alles einfügt und zurückgibt und 0 zurückgibt, wenn nicht. Hier ist, wie es aussieht:Stored Procedure gibt manchmal keinen Wert in node.js zurück

CREATE DEFINER=`barrence`@`%` PROCEDURE `completed_procedure`(IN insubmissionid INT, OUT success INT) 
BEGIN 

DECLARE inbountyid INT; 
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK; 
DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK; 

START TRANSACTION; 

SET success = 0; 
SET @inbountyid = (SELECT idbounty FROM submission WHERE idsubmission = insubmissionid); 

UPDATE submission SET status='a' WHERE idsubmission = insubmissionid; 

IF (SELECT ROW_COUNT() = 1) 
THEN UPDATE bounty SET iscomplete=1 WHERE idbounty = @inbountyid; 
END IF; 

IF (SELECT ROW_COUNT() = 1) 
THEN INSERT INTO completion (idperson, idbounty, datecompleted, idsubmission, mediaid, description, 
    privatestatus, contenttype, totalamount) 
SELECT s.idperson, s.idbounty, s.datesubmitted, s.idsubmission, 
    COALESCE(s.youtubeid, s.contentid) AS mediaidid, b.description, b.privatestatus, 
    b.contenttype, COALESCE(SUM(amount),0) AS totalamount 
FROM submission s 
INNER JOIN bounty b on s.idbounty = b.idbounty 
INNER JOIN contribution c on s.idbounty = c.idbounty 
WHERE s.idsubmission = insubmissionid AND c.ispaid = 1; 
END IF; 

IF (SELECT ROW_COUNT() = 1) 
THEN SET success = 1; 
END IF; 

IF (success = 0) 
THEN ROLLBACK; 
END IF; 

SELECT success; 

COMMIT; 
END 

Wenn ich diese gespeicherte Prozedur innerhalb von MySQL Workbench nenne es richtig zu funktionieren scheint, die Ausführung alle Updates/Insert und Rückkehr 1 oder 0, wenn nichts anderes. Wenn ich jedoch diese gespeicherte Prozedur auf meinem node.js-Server und console.log das Ergebnis aufrufen, gibt es nur die Erfolgsvariable zurück, wenn es 1 ist, aber gibt es nicht zurück, wenn 0. So rufe ich es auf:

db.acceptSubmission(submissionId, function(result) { 
     console.log(result); 
} 

exports.acceptSubmission = function(submissionId, callback) { 
    var sql = "CALL completed_procedure(?, @success)"; 
    var inserts = [submissionId]; 
    sql = mysql.format(sql, inserts); 

    console.log("Running Admin Accept Submission Procedure: " + sql); 

    dbcommon.executeStatement(pool, sql, callback); 
}; 

Ergebnis sieht wie folgt aus, wenn erfolgreich:

[ [ { success: 1 } ], 
    { fieldCount: 0, 
    affectedRows: 0, 
    insertId: 0, 
    serverStatus: 2, 
    warningCount: 0, 
    message: '', 
    protocol41: true, 
    changedRows: 0 } ] 

Und wenn es nicht:

{ fieldCount: 0, 
    affectedRows: 0, 
    insertId: 0, 
    serverStatus: 2, 
    warningCount: 0, 
    message: '', 
    protocol41: true, 
    changedRows: 0 } 

ich bin völlig ratlos. Was ist los?

+0

Verwenden Sie einen Mysql-Treiber eines Drittanbieters? Wenn ja, welcher? – scottjustin5000

+0

@ scottjustin5000 https://www.npmjs.com/package/mysql – Mitchell

Antwort

0

Ich glaube, das ist nur die Art und Weise, wie das mysql-Modul, das Sie verwenden, verhält, wenn es dieses Ergebnis in diesem Kontext sieht. Ich glaube, da Sie wissen, wie man die Antwort interpretiert, handelt es sich in diesem Fall um ein Nicht-Problem, und Sie erhalten die erwarteten Ergebnisse, wenn Sie im Allgemeinen eine Antwort ungleich Null zurückgeben.