Animir
Animir

Reputation: 1204

Node.js MySQL connection, queries order and Event Loop

Let's see this example

conn.query('SET @v = 1;', (err) => {
    conn.query('SELECT @v;', (err, res) => {
       // res contains @v = 1 or 2 ?
    });
});

conn.query('SET @v = 2;', (err) => {
    conn.query('SELECT @v;', (err, res) => {
        // res contains @v = 1 or 2 ?
    });
});

Does mysql/mysql2 node packages guarantee MySQL queries order or not?

Upvotes: 1

Views: 343

Answers (1)

Andrey Sidorov
Andrey Sidorov

Reputation: 25466

Yes, both mysql and mysql2 preserve the order. In following example order of execution is indicated by number

conn.query('query 1', (err) => {
    conn.query('query 3', (err, res) => {
    });
});

conn.query('query 2', (err) => {
    conn.query('query 4', (err, res) => {
    });
});

First, "query 1" and "query 2" are placed to command queue. Then after "query 1" is complete "query 3" is added to queue ( now it's "query 2, query 3" ). After "query 2" is complete it's callback function is called and as a result "query 4" is added to queue.

This is more of a protocol property, not just driver's feature. Mysql protocol only allows you to send next command only after current command if fully complete, and is in a way "half duplex". The only way to actually run two sql queries in parallel is to open 2 separate connections.

Upvotes: 2

Related Questions