Knex: рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХрдИ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдХреИрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 29 рдЕрдкреНрд░реИрд▓ 2014  ┬╖  40рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: knex/knex

рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдореИрдВ ';' рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рдХрдИ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рджреНрд╡рд╛рд░рд╛, рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ?

рдореЗрд░рд╛ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдЬреЛ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

      var query = '' +
        'UPDATE "records_raw" ' +
        'SET "title" = ? ' +
        'WHERE "id" = ?' +
        ';' +
        'UPDATE "records_raw" ' +
        'SET "title" = ? ' +
        'WHERE "id" = ?' +
        ';';

      var bindings = [
        "x", "1",
        "y", "2"
      ];

      knex.raw(query, bindings).exec(function(err, result) {
        assert.isNotError(err);
      });

рддреНрд░реБрдЯрд┐:

Error(cannot insert multiple commands into a prepared statement, ...

рдХреНрдпрд╛ рдРрд╕реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрдердиреЛрдВ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдХрд┐рд╕реА рднреА рдЕрджреНрдпрддрди ?
рдХреНрдпрд╛ рдЕрдм рдорд▓реНрдЯреАрдХреНрд╡реЗрд░реА рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ?
рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХрд┐рд╕ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рд╕рднреА 40 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдирд╣реАрдВ, рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рджреЛ рдХрдердиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЦреИрд░, рдпрд╣ рдереЛрдбрд╝рд╛ рд╕реАрдорд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИ

рдЖрдк рдХреНрд╡реЗрд░реА рдкрд░ toString() рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдФрд░ рдЙрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред

knex.raw(knex.raw(query, bindings) + '').exec(function(err, result) {
  assert.isNotError(err);
});

рдЦреИрд░, рдореИрдВ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдореВрд▓ рд░реВрдк рд╕реЗ рдореИрдВ рдХреЗрд╡рд▓ рддреИрдпрд╛рд░ рдмрдпрд╛рдиреЛрдВ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд░рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рдореБрдЭреЗ рдЗрдирд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рдорд┐рд▓рд╛ред

рд╡реИрд╕реЗ рднреА, рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА

knex.raw(query, bindings) + ''

рд▓реЗрдХрд┐рди рдпрд╣ рдлреЗрдВрдХрддрд╛ рд╣реИ - рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдХреЛрдИ рд╡рд┐рдзрд┐ 'рдХреНрд▓реЛрди' рдирд╣реАрдВ рд╣реИред

рдпрджрд┐ рдЖрдк 0.6.0 рд╢рд╛рдЦрд╛ рдХреЛ рдЖрдЬрдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣рд╛рдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕реЗ рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЛ рдХреНрд╡реЗрд░реА рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА? рдХреНрдпрд╛ рдпрд╣ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рд╣рд░рд╛рдиреЗ рдЬреИрд╕рд╛ рдирд╣реАрдВ рд╣реИ?

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдПрдХ рд╕рд╛рде рдХрдИ INSERT ... ON DUPLICATE KEY UPDATE рдмрдирд╛рдиреЗ рд╣реЛрдВрдЧреЗред рдореИрдВ рдПрдХрд╛рдзрд┐рдХ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдореНрдорд┐рд▓рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреМрди рд╕реА рдкрдВрдХреНрддрд┐ рдЕрдкрдбреЗрдЯ рдХреА рдЧрдИ рд╣реИ рдФрд░ рдХреМрди рд╕реА рдкрдВрдХреНрддрд┐ рдмрдирд╛рдИ рдЧрдИ рд╣реИ (рдкреНрд░рднрд╛рд╡рд┐рдд рдкрдВрдХреНрддрд┐ рдорд╛рди рдХреА рдЬрд╛рдВрдЪ)ред

Knex рд╕реАрдорд╛рдПрдВ рдорд┐рд▓рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рдиреЛрдб.рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдХреНрд╡реЗрд░реА рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд░рд╣рд╛ рд╣реВрдВ (рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдореВрд▓ рд░реВрдк рд╕реЗ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп рдХрдЪреНрдЪреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИ)ред рдЕрдВрдд рдореЗрдВ рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл sql рдмрд┐рд▓реНрдбрд░ рдХреЛ рдЦреБрдж рдХреЛрдб рдХрд┐рдпрд╛ - QSql Demo ред рдпрд╣ рдкреВрд░реНрдг рдпрд╛ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореВрд▓ рд░реВрдк рд╕реЗ рдореЗрд░реЗ рд╕реЛрдЪрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред

рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдбреЗрдореЛ, рдореИрдВ рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬ рдХреЗ рдмрд╛рдж рдРрд╕рд╛ рдХреБрдЫ рдЬреЛрдбрд╝рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рдерд╛ - рдЙрддреНрд╕реБрдХ, рдХреНрдпрд╛ рдЖрдкрдиреЗ 0.6 рд╢рд╛рдЦрд╛ рдХреЛ рдЖрдЬрдорд╛рдпрд╛ рдерд╛?

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рд╣рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрдЧрд╣ рд╣реИ, рдЬрд╣рд╛рдВ рдХреНрдпреВрдПрд╕рдХреНрдпреВрдПрд▓ рдПрдХ рдЕрдзрд┐рдХ рдордЬрдмреВрдд рдХреНрд╡реЗрд░реА рдмрд┐рд▓реНрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдХреНрдиреЗрдХреНрд╕ рд╡рд┐рднрд┐рдиреНрди рдмреЛрд▓рд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдореМрд╕рд╛ рдкрд░ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓рд┐рдВрдЧ рдФрд░ рдЪрд┐рдХрдирд╛рдИ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред

рд╡реИрд╕реЗ рднреА, рдЕрдЪреНрдЫрд╛ рдХрд╛рдо, рдореИрдВ рдЗрд╕реЗ рджреЗрдЦ рд▓реВрдВрдЧрд╛!

рдЦреИрд░ рдирд╣реАрдВ, рд╣рдордиреЗ 0.6 рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ knex рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдереЗ рдФрд░ рдлрд┐рд░ рдХрд╣реАрдВ рдФрд░ рдХреБрдЫ рдХрдЪреНрдЪреЗ рдкреНрд░рд╢реНрди рдХрд░ рд░рд╣реЗ рдереЗред рдХреБрдЫ рд╢реЛрдз рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рдкреВрд░реЗ рд╕реНрдЯреИрдХ рдХреЛ рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬ рд╕реЗ рдмрджрд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЬрд┐рд╕реЗ рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЬрд╣рд╛рдВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рддреБрд░рдВрдд рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЦреИрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╣рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЬрдЧрд╣ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд╣рд▓реЗ рдХреНрдпреВрдПрд╕рдХреНрдпреВрдПрд▓ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧреЗрдЧрд╛ред рдореЗрд░рд╛ рдорддрд▓рдм рдПрдХ рдЕрдЪреНрдЫрд╛ рдПрдкреАрдЖрдИ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реИ рдЬреЛ 99% рдЬрд░реВрд░рддреЛрдВ рдФрд░ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдЕрднреА рднреА рдереЛрдбрд╝реА рдмрджрд╕реВрд░рдд рд╣реИрдВ) рдФрд░ рдЙрдЪрд┐рдд рдЕрдореВрд░реНрддрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдмреИрдХрдПрдВрдб рдЬреЛрдбрд╝реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╢рд╛рдпрдж рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо рдПрдХ рд╕рд░рдгреА рднреА рд╣реИ? рдЗрд╕ рддрд░рд╣ рдХреБрдЫ рдЖрд╕рд╛рди рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП async.parallel рдЬреИрд╕реЗ рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ

@niftylettuce Bluebird рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "async.parallel" рдлреАрдЪрд░ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХреЛрдорд╛ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдПред

рдХреНрдпрд╛ рдпрд╣ рд╕рд┐рд░реНрдл рдЪрд┐рдиреНрд╣рд┐рдд рдХрд░рдиреЗ рд╕реЗ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ

    multipleStatements: true

рдХрд┐рд╕реА рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдХрдиреЗрдХреНрд╢рди рдмреНрд▓реЙрдХ рдореЗрдВ:
рдЬреИрд╕реЗ

    connection: {
        host: 'localhost',
        user: 'superSecret',
        password: 'notGonnaTell',
         port: 8889,
        database: 'babelverse_core',
        multipleStatements: true
    }

рдареАрдХ рд╣реИ рддреЛ рдЕрдЧрд░ рдпрд╣рд╛рдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реЗрддрд╛ рд╣реИ - рдореИрдВ рдЗрд╕реЗ рд╕рдВрднрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдиреЗ рд╡рд╛рд▓реЗ рд░рд┐рдлреИрдХреНрдЯрд░ рдореЗрдВ рдХреБрдЫ рдирдИ рдЪреАрдЬреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рдПрдкреАрдЖрдИ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ ... рдХреНрдпрд╛ рд╣рдо рдПрдХ рд╣реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

knex
  .update('records_raw')
  .set({title: x}).where({id: 1})
  .end()
  .update('records_raw')
  .set({title: y}).where({id: 2})
  .spread((resultA, resultB) => {

  })

рдпрд╛ рдХреБрдЫ рдФрд░ рдкрд╕рдВрдж рд╣реИ:

knex.multiQuery([
  knex.update('records_raw').set({title: x}).where({id: 1})
  knex.update('records_raw').set({title: y}).where({id: 2})
]).spread((resultA, resultB) => {

})

рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рдкрд░ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдХреЗ knex.raw рдХреЗрд╕ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рднреА рджреЗрдЦрддреЗ рд╣реБрдПред

рдХрдЪреНрдЪреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдкрд░ рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рдкрд░ рд╡рд┐рднрд╛рдЬрди рдПрдХ рдЕрдЪреНрдЫреА рд╢реБрд░реБрдЖрдд рд╣реЛрдЧреАред

рдореИрдВ рдЕрднреА рдПрдХ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рд░рд╣рд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдореЗрд░рд╛ рдбрд┐рд▓реАрдЯ рдореЗрд░реЗ рдбрд╛рд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдордп рдкрд░ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреБрдВрдЬреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдлреЗрдВрдХ рджреА рдЬрд╛ рд░рд╣реА рд╣реИрдВред

рдореИрдВ рдХреБрдЫ рдРрд╕рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ

knex("mytable")
.where({
  id: 32423
})
.del()
.then( ->
  knex("mytable")
  .insert()
 ..... 

рдЖрдкрдХреЛ рд╕рд╛рд░ рдорд┐рд▓ рдЧрдпрд╛..

рдбреЗрд▓ рд╕рдордп рдкрд░ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

@tgriesser рдореЗрд░рд╛ рд╡реЛрдЯ knex.multiQuery рдХреЗ рд▓рд┐рдП рд╣реИ

@tgriesser рдПрдХ рд╣реА рдкреНрд░рд╢реНрди рдореЗрдВ рдПрдХрд╛рдзрд┐рдХ рдХрдерди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ? рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХреА:

рдЕрджреНрдпрддрди ('рд░рд┐рдХреЙрд░реНрдбреНрд╕_рд░реЙ')
.рд╕реЗрдЯ ({рд╢реАрд░реНрд╖рдХ: x})ред рдЬрд╣рд╛рдВ ({рдЖрдИрдбреА: 1})
редрд╕рдорд╛рдкреНрдд()
рдЕрджреНрдпрддрди ('рд░рд┐рдХреЙрд░реНрдбреНрд╕_рд░реЙ')
.рд╕реЗрдЯ ({рд╢реАрд░реНрд╖рдХ: y})ред рдЬрд╣рд╛рдВ ({рдЖрдИрдбреА: 2})
рддрдм (рдлрд╝рдВрдХреНрд╢рди (рдкрд░рд┐рдгрд╛рдо) {
рдкрд░рд┐рдгрд╛рдо [0] // рдкрд░рд┐рдгрд╛рдо 1
рдкрд░рд┐рдгрд╛рдо [1] // рдкрд░рд┐рдгрд╛рдо 2
})
рдХреИрдЪ (рдлрд╝рдВрдХреНрд╢рди (рдЧрд▓рддреА) {
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ (рдЧрд▓рддреА);
});

+1

рдЕрд░реНрдзрд╡рд┐рд░рд╛рдореЛрдВ рдкрд░ рдЙрдЪрд┐рдд рд╡рд┐рднрд╛рдЬрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдмреЛрд▓реА-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдкреВрд░реНрдг рдХрдЪреНрдЪреА рдХреНрд╡реЗрд░реА рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрджрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ ; , рддреЛ рдЙрдиреНрд╣реЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдВ рдорд╛рдиреНрдп SQL рдХреЗ рджреЛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ рдЬреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреБрдЪреНрдЫ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред

-- generic SQL
SELECT * FROM book WHERE title = 'Lord of the Rings; The Fellowship of the Ring';
-- MySQL specific
CREATE PROCEDURE dorepeat(p1 INT)
  BEGIN
    SET <strong i="9">@x</strong> = 0;
    REPEAT SET <strong i="10">@x</strong> = <strong i="11">@x</strong> + 1; UNTIL <strong i="12">@x</strong> > p1 END REPEAT;
  END

рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо 2 рдХрдердиреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдХреЛрдб рдХреЛ рд╡рд┐рднрд╛рдЬрди рд╕реЗ рдЦрд╛рд▓реА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред

рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдПрд╕рдХреНрдпреВрдПрд▓ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдореМрдХрд╛ рд╣реИ рдФрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред

рд╕рд╛рде рд╣реА, рдПрдХрд╛рдзрд┐рдХ рдХрдерди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдк рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╣реА рд▓реЗрдирджреЗрди рдореЗрдВ рдРрд╕рд╛ рд╣реЛред Knex рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ .transacting(function(transaction) { /* code */ }) рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рд▓реЗрди-рджреЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдк рдЕрдкрдиреЗ knex рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдмреНрд▓реВрдмрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рддреЛ рдЗрди рдореБрджреНрджреЛрдВ рдХреЗ рдХрд╛рд░рдг, рдореЗрд░реА рд░рд╛рдп рд╣реИ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

:-1:

рд╕рд╛рде рд╣реА, рдПрдХрд╛рдзрд┐рдХ рдХрдерди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдк рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╣реА рд▓реЗрдирджреЗрди рдореЗрдВ рдРрд╕рд╛ рд╣реЛред Knex рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ .transacting(function(transaction) { /* code */ }) рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рд▓реЗрди-рджреЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдк рдЕрдкрдиреЗ knex рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдмреНрд▓реВрдмрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдЖрдкрдХреЛ рдЕрдиреБрднрд╡ рд╕реЗ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЗрди рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ _рд╡рд┐рд╢рд╛рд▓_ рдкреНрд░рджрд░реНрд╢рди рдЕрдВрддрд░ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХрд╛рдзрд┐рдХ рдорд╛рдиреЛрдВ рдХреЛ рдПрдХ рдХрдорд╛рдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдмреИрдЪ рдХрд░рдирд╛ рд╣реИред

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рд╕рдлрд╛рдИ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдард┐рди рд╣реИ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рддрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдореБрджреНрджреЗ рдиреЗ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ knex рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдмрд╣реБрдд рд╕реАрдорд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдереА рдФрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдпрд╣рд╛рдБ рдкрд░ рджреЗрдЦреЗрдВред https://github.com/tgriesser/knex/issues/1075

рдореИрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХреЗрд╕ рджреЗрдЦрдиреЗ рдореЗрдВ рдЕрд╕рдлрд▓ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕ рдЯрд┐рдХрдЯ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдареАрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдХреЛрдИ рдЙрд╕реА рдХрдиреЗрдХреНрд╢рди рдкрд░ рдЪрд▓ рд░рд╣реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдХреНрд░рдо рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ рддреЛ рдЖрдк рд╢рд╛рдпрдж рд▓реЗрдирджреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдПрдХ рдЪреАрдЬ рдЬреЛ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдЗрд╕ 'рдПрдХрд╛рдзрд┐рдХ рдХреНрд╡реЗрд░реА' рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬ рдореЗрдВ рдмрджрд▓ рджреЗрддреА рд╣реИ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рджрд░реНрд╢рди рдЬреАрдд рд╣реИред рд╕рд░реНрд╡рд░ рд╕реЗ рдФрд░ рдЙрд╕рд╕реЗ рд╕рднреА рдкреНрд░рд╢реНрдиреЛрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдВрдкреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХрдо рд░рд╛рдЙрдВрдб-рдЯреНрд░рд┐рдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдорд╛рдкрдиреЗ рдпреЛрдЧреНрдп рдЙрдкрдпреЛрдЧ рдХреЗрд╕ рдЙрдкрд▓рдмреНрдз рд╣реИред рдХреЗрд╡рд▓ рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╡/рд╕реНрдореГрддрд┐ рд╕реЗ рдмреЛрд▓ рд░рд╣рд╛ рд╣реВрдВ ...

@ jurko-gospodnetic рдРрд╕рд╛ рддрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓рд┐рдВрдЧ рди рд╣реЛред рдкреВрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрдИ рдкреНрд░рд╢реНрди рднреЗрдЬрдирд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдП рдЧрдП рдЯреАрд╕реАрдкреА рд╕реЙрдХреЗрдЯ рдореЗрдВ рдбреЗрдЯрд╛ рдбрд╛рд▓рдирд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрджрд┐ рдЖрдкрдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдЯреАрд╕реАрдкреА рдмрдлрд╝рд░реНрд╕ рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рднрд░рдиреЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рддреЛ knex рдЖрдкрдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИ :) рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реАрдзреЗ рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред

@ рдЬреБрд░рдХреЛ-рдЧреЛрд╕реНрдкреЛрдбрдиреЗрдЯрд┐рдХ рдиреЗ 20 рдордИ рдХреЛ рдЯрд┐рдкреНрдкрдгреА рдХреА

рдПрдХ рдЪреАрдЬ рдЬреЛ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдЗрд╕ 'рдПрдХрд╛рдзрд┐рдХ рдХреНрд╡реЗрд░реА' рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬ рдореЗрдВ рдмрджрд▓ рджреЗрддреА рд╣реИ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рджрд░реНрд╢рди рдЬреАрдд рд╣реИред рд╕рд░реНрд╡рд░ рд╕реЗ рдФрд░ рдЙрд╕рд╕реЗ рд╕рднреА рдкреНрд░рд╢реНрдиреЛрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдВрдкреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХрдо рд░рд╛рдЙрдВрдб-рдЯреНрд░рд┐рдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдореИрдВ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░рдг рд╕реЗ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ рдЧреНрд░реЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдиреЛрдб-mysql (mysqljs) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╣рдо рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдкреВрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ knex.js рдкрд░ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ

рдиреЛрдб-mysql (mysqljs) рдбреНрд░рд╛рдЗрд╡рд░ рдХреА рдмрд╣реБ-рдХрдерди рдХреНрд╡реЗрд░реА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдХрд░ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдкрд░ рдХрд╛рдлреА рдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВред

рдЕрдЧрд░ Knex рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╢реЛрд╕реНрдЯреЙрдкрд░ рд╕рд╛рдмрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рддреЛ рдореИрдВ рдмрд╕ рдпрд╣реА рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реВрддреНрд░ рдХреЛ рдкреБрдирд░реНрдЬреАрд╡рд┐рдд рдХрд░реВрдВрдЧрд╛ред

рдХреНрдпрд╛ рдПрдХ рдХрдерди рдореЗрдВ рдмрд╣реБ-рдкреНрд░рд╢реНрди рдЕрдм Knex.js рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ?

@nicholaswmin рдХреНрдпрд╛ рдЖрдк рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ "рдХрд╛рдлреА рдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░" рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдПрдХ рд╣реА рдХрдиреЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдИ рдкреНрд░рд╢реНрди рднреЗрдЬрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрдИ рдкреНрд░рд╢реНрди рдХреИрд╕реЗ рднреЗрдЬрдирд╛ рдХрд╛рдлреА рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИ? рдХреЛрдИ рдмреЗрдВрдЪрдорд╛рд░реНрдХ?

@elhigu рдХреЛрдИ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдирд╣реАрдВ рд▓реЗрдХрд┐рди рдмрд▓реНрд▓реЗ рд╕реЗ рдореИрдВ рдпрд╣ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ:

рдбреАрдмреА рдХреЛ рдПрдХ рдПрдХрд▓ рдХреЙрд▓ (рд╕рднреА рдмрдпрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛) рд╕рд░реНрд╡рд░-рдбреАрдмреА рдиреЗрдЯрд╡рд░реНрдХ рд░рд╛рдЙрдВрдб-рдЯреНрд░рд┐рдк рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИред

рджреВрд╕рд░реА рдУрд░, рдПрдХ рд╣реА рдХрдиреЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдИ рдкреНрд░рд╢реНрди рднреЗрдЬрдирд╛ рдЪрд╛рдВрджреА рдХреА рдЧреЛрд▓реА рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХреЗрд╡рд▓ рдЧреИрд░-рд▓реЗрдирджреЗрди рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рджреЗрдЦреЗрдВ

@nicholaswmin рдХреНрдпрд╛ рдЖрдк рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЫреЛрдЯреЗ рдкреНрд░рд╢реНрди рднреЗрдЬ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХрддрд░ рдЕрдирджреЗрдЦрд╛ рдпрд╛ рдЫреЛрдЯреЗ рдкрд░рд┐рдгрд╛рдо рднреЗрдЬ рд░рд╣реЗ рд╣реИрдВ? рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдВрддрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЯреАрд╕реАрдкреА рдкреИрдХреЗрдЯ рдореЗрдВ рдХрдИ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдкреИрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЕрдиреНрдпрдерд╛ рдкреНрд░рддреНрдпреЗрдХ рдЯреАрд╕реАрдкреА рдкреИрдХреЗрдЯ рдореЗрдВ рдЬреНрдпрд╛рджрд╛рддрд░ рд╣реЗрдбрд░ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдкреЗрд▓реЛрдб рд╣реЛрдЧрд╛ред

рдЙрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдЕрдВрддрд░ рдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреА рдорд╛рддреНрд░рд╛ рд╕реЗ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рдорд╛рдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдбреНрд░рд╛рдЗрд╡рд░ рдкрд┐рдЫрд▓реА рдХреЙрд▓реЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ connection.query рдХреЙрд▓ рд╕реЗ рдбреАрдмреА рдХреЛ рдПрдХрд╛рдзрд┐рдХ рдкреНрд░рд╢реНрди рднреЗрдЬрдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рд╡реЗ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЯреАрд╕реАрдкреА рдЯреНрд░реИрдлрд╝рд┐рдХ рдореЗрдВ рдПрдХрд╛рдзрд┐рдХ connection.query рдпрд╛ рдПрдХрд▓ рдмрд╣реБ-рдХреНрд╡реЗрд░реА рднреЗрдЬрдиреЗ рдХреЗ рдмреАрдЪ рдмрд╣реБрдд рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ MySQL рдбреНрд░рд╛рдЗрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИред

@elhigu рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЫреЛрдЯреЗ рдкреНрд░рд╢реНрди рд╣реИрдВ рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд▓реЗрдирджреЗрди/рдХреНрд╡реЗрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдиреАрдЪреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдХреНрдпрд╛ рдореЗрд░реЗ рд▓рд┐рдП рдбрд┐рдмрдЧ рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬреЗ рдЬрд╛ рд░рд╣реЗ рдЯреАрд╕реАрдкреА рдкреИрдХреЗрдЯ рдХреЛ рджреЗрдЦрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ? рд╕реНрд╡рдпрдВ рднреЗрдЬреЗ рдЬрд╛ рд░рд╣реЗ рдкреНрд░рд╢реНрди рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреИрдХреЗрдЯред

рдПрдХ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛:

рдЕрдкрдиреЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╕рдордп, рдореИрдВ рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдСрдбрд┐рдЯ рдЯреНрд░реЗрд▓ (рдХреНрдпрд╛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ) рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

// # PSEUDOCODE

// get current data of user
getUserData();
// set data of user
setUserData()
// get new data of user
getUserData()
// compute the audit trail by comparing the difference between before-set/after-set datums
computeAuditTrail(previousData, newData);

рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХрдИ рдбреАрдмреА рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдиреЗрдЯрд╡рд░реНрдХ рд░рд╛рдЙрдВрдбрдЯреНрд░рд┐рдк рд╣реИрдВред

рдЬреИрд╕рд╛ рдХрд┐ #1806 рдкрд░ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рдЙрди рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП Promise.all() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдЬреНрдпрд╛рджрд╛рддрд░ getData/setData рдореЗрдВ рдбреАрдмреА рдХреЙрд▓ рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)ред

рдпрд╣ рдЧреИрд░-рд▓реЗрдирджреЗрди рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреВрд▓ рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдкрд░ рдкреНрд░рд╢реНрди рднреЗрдЬреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕реЗ рд╣реА рдореИрдВ рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗрдирджреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣ рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рд▓рдЧрднрдЧ 4x) рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╢реНрди рдПрдХ рд╣реА рдХрдиреЗрдХреНрд╢рди рдкрд░ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред

рдПрдХ рд╕рд╛рдЗрдб рдиреЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ рдПрдордПрд╕рдПрд╕рдХреНрдпреВрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

Wireshark рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЯреВрд▓ рд╣реИред

рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдиреЛрдб рдХреЗ рд╕рд╛рде рдЙрд╕ рд╕реНрддрд░ рддрдХ рджреЗрдЦрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИред

рдПрдХ рдкреНрд░рд╢реНрди рдореЗрдВ рдкреИрдХ рдХрд┐рдП рдЧрдП рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рд╕рдорд╛рди рдорд╛рддреНрд░рд╛ рднреЗрдЬрддреЗ рд╕рдордп рдпрд╛ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдкрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рднреЗрдЬреЗ рдЧрдП / рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП iptraf рдпрд╛ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ multiQuery рд╕рд┐рдВрдЯреИрдХреНрд╕ рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред

рдХрд┐рд╕реА рднреА рдЕрджреНрдпрддрди ?
рдХреНрдпрд╛ рдЕрдм рдорд▓реНрдЯреАрдХреНрд╡реЗрд░реА рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ?
рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХрд┐рд╕ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

var knex = require("knex");
var _ = require("lodash");
var Promise = require("bluebird");

var knex = require('knex')({
    client: 'sqlite3',
    connection: {
        filename: "./data.sqlite"
    }
});

// Create Schema
let createScript = `

CREATE TABLE Class ( 
    Id                   integer NOT NULL  ,
    Name                 varchar(100)   ,
    CONSTRAINT Pk_Classes_Id PRIMARY KEY ( Id )
 );

CREATE TABLE Material ( 
    Id                   integer NOT NULL  ,
    Description          varchar(500)   ,
    CONSTRAINT Pk_Material_Id PRIMARY KEY ( Id )
 )

-- ... and so on (leave off the last semi or remove it later) ... 

`;

let statementPromises = _.map(createScript.split(';'), (statement) => {
    return knex.raw(statement);
});

Promise.all(statementPromises).then(function() {
    console.log('Schema generated. Populating...');

     // ...

рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд▓реВрдк рд╣реИ, рдПрдХ рдореЗрдВ рдХрдИ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдФрд░ рдпрд╣ рдзреАрдорд╛ рд╣реИ

@mscheffer рд╕рд╡рд╛рд▓ рдерд╛:

рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдореИрдВ ';' рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рдХрдИ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рджреНрд╡рд╛рд░рд╛, рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ?

рдЬреЛ рдореЗрд░рд╛ рдЬрд╡рд╛рдм рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рддреЗрдЬрд╝ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдкреНрд░рджрд╛рди рдХрд░реЗрдВред

@VictorioBerra ; рд╕реЗ рд╡рд┐рднрд╛рдЬрди рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрдХреНрд╖рд░ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдЕрдВрджрд░ ; рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдбреЗрдЯрд╛ рдбрдВрдк рдореЗрдВ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдПрд╕рдХреНрдпреВрдПрд▓ рдбрдВрдк рдХреЛрдб рдХреЛ рдПрд╕рдХреНрд▓рд╛рдЗрдЯ рдЦреЛрд▓ рдореЗрдВ рдкрд╛рдЗрдк рдХрд░рдирд╛ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИред рдЕрдлрд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдЗрди-рдореЗрдореЛрд░реА рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рд┐рд░реНрдл рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╣реИрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрд╣рд╛рдВ рдЖрдк рдЕрдВрджрд░ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдПрд╕рдХреНрдпреВрдПрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, knex.schema.* рдмрд┐рд▓реНрдбрд░реЛрдВ рдХрд╛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рддред

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдмреЛрд▓реА рдЪрд╛рд▓рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХрд▓ рдЖрджреЗрд╢ рдореЗрдВ рдПрдХрд╛рдзрд┐рдХ рдкреНрд░рд╢реНрди рдЪрд▓рд╛рдиреЗ рдХреА рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ MySQL рдФрд░ oracledb рдпрд╛ mssql рдерд╛, рдЬрд┐рд╕рдХрд╛ рд╡рд╣ рд╕рдорд░реНрдерди рдерд╛ рдФрд░ MySQL рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдЕрднреА рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдВрддрд┐рдо рдХреНрд╡реЗрд░реА рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ (рдЬреЛ рдареАрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред

рд▓реЗрди-рджреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВ рдпрджрд┐ рдЖрдк рдХрдИ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рд╡реЗ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░ рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВ!

рд░реЙ рдПрд╕рдХреНрдпреВрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдХрд╛рдзрд┐рдХ рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрди
рдореИрдВ рдПрдХ рдРрд╕реА рд╣реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реЗ knex рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ CREATE DATABASE рд▓рдЧрд╛рддрд╛рд░ рдХрдИ рдмрд╛рд░ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдореИрдВ рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рд╕реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЖрд╢рд╛ рдХрд░рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди knex рдиреЗ рдПрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рджреАред рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдЖрдкрдХреЗ рдХрдиреЗрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ "multipleStatements": true рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

"host": "192.168.x.x",
"user": "userLogin",
"password": "userPassword",
"database": "schemaToUse",
"multipleStatements": true

рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдЗрд╕ рддрд░рд╣ рдПрдХ рдХрдЪреНрдЪреЗ рдмрдпрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

return knex.raw("CREATE DATABASE schema0; CREATE DATABASE schema1; CREATE DATABASE schema2")
   .then((result) => {
   })
   .catch((error) => {
   });

KNEX рдХреНрд╡реЗрд░реА рдмрд┐рд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХрд╛рдзрд┐рдХ рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрди
рдпрджрд┐ рдЖрдкрдХреЛ рдХрдЪреНрдЪреЗ SQL рдХреЛ рд╕реНрд╡рдпрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп knex рдХреНрд╡реЗрд░реА рдмрд┐рд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ Knex.QueryBuilder рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ рдПрдХ рд╕рд╛рде рдХрдИ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

// Suppose that we wanted to add 100 currency for all players in multiple games
const addCurrency = 100;
const updateCurrency = { currency: "currency + " + addCurrency };
const queries = [
   knex.table("game0.stats").update(updateCurrency),
   knex.table("game1.stats").update(updateCurrency),
   knex.table("game2.stats").update(updateCurrency),
];
const multiQuery = queries.join(";");
console.log(multiQuery);
return knex.raw(multiQuery)
   .then((result) => {
   })
   .catch((error) => {
   });

рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд▓рд┐рдЦрддреЗ рд╕рдордп рдорд╛рдирд╡реАрдп рддреНрд░реБрдЯрд┐ рдХреЛ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рднреА рдорджрдж рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдлрд┐рд░ рд╕реЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдореИрдВ рдЗрд╕реЗ рдПрдХ рд▓реЗрдирджреЗрди рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рдбреАрдмреА рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реИред рдХрдо рд╕реЗ рдХрдо рдЙрдЪрд┐рдд рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@рдЕрдХреНрд╖рд░рд╛рдХрд╛рд░рд┐рдХрд╛рд▓рди рднрд▓реЗ рд╣реА рдЖрдк рдЙрдирдХреЗ рдмреАрдЪ рдХрдИ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

sandrocsimas picture sandrocsimas  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

fsebbah picture fsebbah  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lanceschi picture lanceschi  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

nklhrstv picture nklhrstv  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

tjwebb picture tjwebb  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ