sidorares / node-mysql2

:zap: fast mysqljs/mysql compatible mysql driver for node.js
https://sidorares.github.io/node-mysql2/
MIT License
4.04k stars 610 forks source link

queries not timing out #1349

Open antiochtech opened 3 years ago

antiochtech commented 3 years ago

with a 1ms timeout and the db being on the other side of an ssh tunnel thousands of miles away, shouldnt this result in an error in renderer.js?

main.js

const mysql = require("mysql2/promise");
const bluebird = require("bluebird");
const getPort = require("get-port");
var connection = {};
const sqlConf = {
    host: "localhost",
    user: process.env.DB_USER,
    password: process.env.DB_PASS,
    database: process.env.DB_DATABASE,
    dateStrings: "date",
    Promise: bluebird,
    enableKeepAlive: true
};

async function startup() {
    await ssh.connect(sshConf);
}

ssh.on("ready", async function() {  
    ssh.forwardOut("127.0.0.1", await getPort({port: getPort.makeRange(49152, 65535)}), "127.0.0.1", 3306, async function(err, stream) {
        if (err) throw err;
        sqlConf.stream = stream;
        try {
            connection = await mysql.createConnection(sqlConf);
        } catch (error) {
            console.log(error);
        }
    });
});

ipcMain.handle("query", async (event, sql, placeholder) => {
    try { return await connection.query({ sql: sql, values: placeholder, timeout: 1 });
    } catch (error) { console.log(error); }
});

renderer.js

try { var [rows, fields] = await ipcRenderer.invoke("query", "SELECT * FROM qryCourses;");
} catch (error) { alert(error); }
antiochtech commented 3 years ago

or if this makes it any easier...

renderer.js:

var util = require("util");
var mysql = require("mysql2/promise");
var bluebird = require("bluebird");
var sqlConf = {
    host                : "localhost",
    user                : process.env.DB_USER,
    password            : process.env.DB_PASS,
    database            : process.env.DB_DATABASE,
    dateStrings         : "date",
    Promise             : bluebird,
    enableKeepAlive     : true,
    typeCast            : function castField(field, useDefaultTypeCasting) {
        if ((field.type === "BIT") && (field.length === 1)) {
            var bytes = field.buffer();
            return(bytes[0] === 1);
        }
        return(useDefaultTypeCasting());
    }
};

document.addEventListener("DOMContentLoaded", async function () {
    var connection = await mysql.createConnection(sqlConf);
    try {
        var [rows, fields] = await connection.query({ sql: "SELECT * FROM table;", timeout: 1 });
        console.log(util.inspect(rows));
    } catch (error) { console.log(error); }
});

output:

"[
  TextRow { column1: 1, column2: 'foo' },
  TextRow { column1: 2, column2: 'bar' },
  TextRow { column1: 3, column2: 'snafu' }
]"
testn commented 2 years ago

@antiochtech can you test with the latest version?