';'ã§åºåãããè€æ°ã®ã¯ãšãªãå®è¡ããããšããåé¡ã«çŽé¢ããŠããŸãã äžäººã®å¹¹éšã«ãã£ãŠãããã¯å¯èœã§ããïŒ
倱æããŠããç§ã®ãã¹ãã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãïŒ
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, ...
ãã®ãããªã¯ãšãªã®ããªãã¢ãã¹ããŒãã¡ã³ããç¡å¹ã«ããæ¹æ³ã¯ãããŸããïŒ
ãããã2ã€ã®ã¹ããŒãã¡ã³ããšããŠå®è¡ããå¿ èŠããããŸãã
ãŸããããã¯å°ãå¶éã®ãã解決çã§ã
ã¯ãšãªã§toString()
ãåŒã³åºããŠå®è¡ããããšãã§ããŸãããå®éã«ã¯ãå§ãããŸããã
knex.raw(knex.raw(query, bindings) + '').exec(function(err, result) {
assert.isNotError(err);
});
ããŠããããã©ãããããèŠãŠãããŸããåºæ¬çã«ã¯ãããªãã¢ãã¹ããŒãã¡ã³ãããªãã«ããŠãã¯ãšãªæååãšãã€ã³ãã£ã³ã°ãæã€æ©èœãç¶æãããã®ã§ããããããå¯èœãã©ããã¯ããããŸããããããã«é¢é£ããããã¥ã¡ã³ãã¯èŠã€ãããŸããã§ããã
ãšã«ãããã£ãŠã¿ã
knex.raw(query, bindings) + ''
ããããããã¯ã¹ããŒããŸã-ãªããžã§ã¯ããªããžã§ã¯ãã«ã¯ã¡ãœãã 'clone'ããããŸããã
0.6.0ãã©ã³ããè©ŠããŠã¿ããå Žåã¯ãããã§æ©èœããããšã¯ããã£ãŠããŸããããã€ãã®ãã¹ããçµãããããªãªãŒã¹ããå¿ èŠããããŸãã
ãããããªããã®ãããªåäžã®æååã䜿çšããŠ2ã€ã®ã¯ãšãªã¹ããŒãã¡ã³ããå®è¡ããå¿ èŠãããã®ã§ããããã ããã±ãŒãžã䜿çšããç®çãæãªããããªãã®ã§ã¯ãããŸãããïŒ
å人çã«ã¯ãäžåºŠã«è€æ°ã®INSERT ... ON DUPLICATE KEY UPDATE
ãäœæããå¿
èŠããããŸãã è€æ°ã®å€ã§æ¿å
¥ãå®è¡ã§ããªããããã©ã®è¡ãæŽæ°ãããã©ã®è¡ãäœæãããããç¥ãããïŒåœ±é¿ãåããè¡ã®å€ã確èªããïŒã
Knexã®å¶éãèŠã€ããåŸãç§ã¯node.jsã®ããŸããŸãªã¯ãšãªãã«ããŒã§éãã§ããŸãïŒããã¯åºæ¬çã«ã»ãšãã©ã®å Žåçã®ã¯ãšãªã䜿çšããçµæã«ãªããŸããïŒã çµå±ãç§ã¯èªåã§sqlbuilderãã³ãŒãã£ã³ã°ããŸãã-QSqlDemo ã å®å šã§ã¯ãªããæ¬çªç°å¢ã«ã察å¿ããŠããŸããããåºæ¬çã«ç§ãèããŠããæ¹æ³ãèŠçŽããŠããŸãã
éåžžã«ã¯ãŒã«ãªãã¢ã§ãã次ã®ãªãªãŒã¹ã®åŸã«ãã®ãããªãã®ãè¿œå ããããšãèšç»ããŠããŸãã-äžæè°ãªããšã«ã0.6ãã©ã³ããè©ŠããŠã¿ãŸãããïŒ
ããã«ã³ã©ãã¬ãŒã·ã§ã³ã®äœå°ãããã®ã§ã¯ãªãããšæããŸããQSQLã¯ããå ç¢ãªã¯ãšãªãã«ããŒã®å¿ èŠæ§ãæºããããšãã§ããKnexã¯æ¥ç¶ããŒã«ãšç°ãªãæ¹èšéã®ç£èŽ ã®å¹³æ»åãæ±ããŸãã
ãšã«ãããããä»äºãç§ã¯èŠãŠãããŸãïŒ
ãããã0.6ãè©ŠããŸããã§ãããããå Žæã§knexã䜿çšããå¥ã®å Žæã§çã®ã¯ãšãªãå®è¡ããã³ãŒãããããããã£ãããã§ãã ããã€ãã®èª¿æ»ã®çµæãã¹ã¿ãã¯å šäœããä¿å®ãå¯èœã§ãæ©èœãå³åº§ã«è¿œå ã§ãããã®ã«çœ®ãæããããšã«ããŸããã
ãŸãã確ãã«ã³ã©ãã¬ãŒã·ã§ã³ã®äœå°ã¯ãããšæããŸãããæåã«QSqlãå®å®ãããã«ã¯å°ãæéãããããŸãã 99ïŒ ã®ããŒãºãšãŠãŒã¹ã±ãŒã¹ã«äžèŽããåªããAPIãå®çŸ©ãïŒäžéšã®æ§æã¯ãŸã å°ãéãããšãããããŸãïŒãä»ã®ããã¯ãšã³ããè¿œå ã§ããããã«é©åãªæœè±¡åãå®è£ ããããšãæå³ããŸãã
ã¯ãšãªã®é åãæž¡ãæ©èœããããçµæãé åã«ãªããŸããïŒ ãã®ãããªåçŽãªãã®ã¯ãã£ãããã§ãããããããè¡ãããã«async.parallelã®ãããªãã®ã䜿çšããããšãã§ããŸã
@niftylettuce Bluebirdã«ã¯ãããã«äœ¿çšã§ãããasync.parallelãæ©èœããã§ã«ä»å±ããŠããŸãã ããããããã¯åé¡ã§ã¯ãããŸããã 1åã®å®è¡ã§ã³ãåé¢ã¯ãšãªãå®è¡ããæ¹æ³ãæ¬åœã«å¿ èŠã§ãã
ããŒã¯ããã ãã§ã¯äžå¯èœã§ã
multipleStatements: true
èªåã®æ§æã®æ¥ç¶ãããã¯å
ïŒ
äŸãã°
connection: {
host: 'localhost',
user: 'superSecret',
password: 'notGonnaTell',
port: 8889,
database: 'babelverse_core',
multipleStatements: true
}
ããŠãããã®èª°ããèå³ãæã£ãŠãããªã-ç§ã¯ãããå¯èœã«ããããã«æ¬¡ã®ãªãã¡ã¯ã¿ãªã³ã°ã§ããã€ãã®æ°ããããšã«åãçµãã§ããŸãã
ããã«çæ³çãªAPIã¯äœã§ãããã...åäžã®ãã§ãŒã³ãå¿ èŠã§ããïŒ
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åäžã®ã¯ãšãªã§è€æ°ã®ã¹ããŒãã¡ã³ããå®è¡ããæ©èœã«é¢ããæŽæ°ã¯ãããŸããïŒ ã奜ãïŒ
.updateïŒ 'records_raw'ïŒ
.setïŒ{titleïŒx}ïŒãwhereïŒ{idïŒ1}ïŒ
ãçµããïŒïŒ
.updateïŒ 'records_raw'ïŒ
.setïŒ{titleïŒy}ïŒãwhereïŒ{idïŒ2}ïŒ
.thenïŒfunctionïŒresultïŒ{
result [0] //çµæ1
result [1] //çµæ2
}ïŒ
.catchïŒfunctionïŒerrïŒ{
console.logïŒerrïŒ;
}ïŒ;
+1
ã»ãã³ãã³ã§é©åãªåå²ãè¡ãã«ã¯ãæ¹èšåºæã®ããŒãµãŒã䜿çšããŠçã®ã¯ãšãªå
šäœã解æããå¿
èŠããããŸãã å
·äœçã«ã¯ãæååã«;
ãå«ãŸããŠããå Žåããããã¯ç¡èŠããå¿
èŠããããŸãã 解æããã®ãç°¡åã§ã¯ãªãæå¹ãªSQLã®2ã€ã®äŸã次ã«ç€ºããŸãã
-- 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ã€ã®ã¹ããŒãã¡ã³ããäœæããããããã³ãŒãã¯åå²ã®ç©ºã®çµæãèæ ®ããå¿ èŠãããããšã«æ³šæããŠãã ããã
æ£çŽãªãšãããå šäœãšããŠãããã¯æªãèãã ãšæããŸãã SQLã€ã³ãžã§ã¯ã·ã§ã³ãçºçããã¯ãšãªãæ£ããåå²ãããªãå¯èœæ§ãéåžžã«é«ããªããŸãã
ãŸããè€æ°ã®ã¹ããŒãã¡ã³ããå®è¡ããå Žåãã»ãšãã©ã®å Žåãåããã©ã³ã¶ã¯ã·ã§ã³ã§ãããå®è¡ããå¿
èŠããããŸãã Knexã¯ã .transacting(function(transaction) { /* code */ })
æ§æã䜿çšããŠããã®åé¡ããã§ã«éåžžã«ããŸã解決ããŠããŸãã ãã©ã³ã¶ã¯ã·ã§ã³ãäžèŠãªãŸããªã±ãŒã¹ã§ã¯ãbluebirdã䜿çšããŠknexã¹ããŒãã¡ã³ããçµåããçµæãååŸã§ããŸãã
ãããã£ãŠããããã®åé¡ã®ããã«ãããã¯èµ·ãããªãã¯ãã ãšç§ã®æèŠã§ãã
ïŒ-1ïŒ
ãŸããè€æ°ã®ã¹ããŒãã¡ã³ããå®è¡ããå Žåãã»ãšãã©ã®å Žåãåããã©ã³ã¶ã¯ã·ã§ã³ã§ãããå®è¡ããå¿ èŠããããŸãã Knexã¯ã
.transacting(function(transaction) { /* code */ })
æ§æã䜿çšããŠããã®åé¡ããã§ã«éåžžã«ããŸã解決ããŠããŸãã ãã©ã³ã¶ã¯ã·ã§ã³ãäžèŠãªãŸããªã±ãŒã¹ã§ã¯ãbluebirdã䜿çšããŠknexã¹ããŒãã¡ã³ããçµåããçµæãååŸã§ããŸãã
çµéšãããç¹å®ã®ã±ãŒã¹ã§ã¯ãããã2ã€ã®ã¢ãããŒããšã1ã€ã®ã³ãã³ããšããŠãµãŒããŒã«è€æ°ã®å€ããããåŠçããããšã®éã«_巚倧ãª_ããã©ãŒãã³ã¹ã®éããããããšãããããŸãã
ã¯ãªãŒã³ã«å®è£ ããã®ã¯éåžžã«é£ããããšãç解ããŠããŸãããã®ããããŸã å®è£ ãããŠããŸãããããã®åé¡ã«ããããããžã§ã¯ãã§ã®knexã®äœ¿çšãå€§å¹ ã«å¶éãããŠããŸãã
ç§ãåæ§ã®åé¡ãæ±ããŠããŠãããã解決ããããšãã§ããŸããã ãã¡ããã芧ãã ããã https://github.com/tgriesser/knex/issues/1075
ãã®æ©èœã®ãŠãŒã¹ã±ãŒã¹ãèŠåœãããŸããã ä¿®æ£ãããªãã®ã§ããã®ãã±ãããéããããšæããŸãã åãæ¥ç¶ã§å®è¡ãããŠããã¯ãšãªã®é åºã«äŸåããŠããå Žåã¯ããã©ã³ã¶ã¯ã·ã§ã³ã䜿çšããããšããå§ãããŸãã
ãã®ãè€æ°ã®ã¯ãšãªãã®äœ¿çšæ³ãç§ãã¡ãæãã§ãããã®ã«ããããšã®1ã€ã¯ãå Žåã«ãã£ãŠã¯ããã©ãŒãã³ã¹ãåäžããå¯èœæ§ããããšããããšã§ãã ãµãŒããŒãšã®éã§ãã¹ãŠã®ã¯ãšãªãšçµæãéä¿¡ããããã«å¿ èŠãªã©ãŠã³ãããªãããå°ãªããŠæžã¿ãŸãã
ãããã枬å®å¯èœãªãŠãŒã¹ã±ãŒã¹ãå©çšã§ããããã§ã¯ãããŸããã éå»ã®çµéš/èšæ¶ããã®ã¿è©±ã...
@ jurko-gospodneticæ¥ç¶ããŒã«ããªãå ŽåããããŸãã ããŒã«ã䜿çšãããšãè€æ°ã®ã¯ãšãªãéä¿¡ããããšã¯ãåºæ¬çã«ãäœææžã¿ã®TCPãœã±ããã«ããŒã¿ãé 眮ããã ãã§ãã ãŸããããã©ãŒãã³ã¹ãTCPãããã¡ãŒãååã«æºããããŠããªãããšã«äŸåããŠããå Žåã¯ãknexã¯ãã§ã«é ãããŸã:)ãã®å Žåã¯ããã©ã€ããŒãçŽæ¥äœ¿çšããããšããå§ãããŸãã
@ jurko-gospodneticã5æ20æ¥ã«ã³ã¡ã³ãããŸãã
ãã®ãè€æ°ã®ã¯ãšãªãã®äœ¿çšæ³ãç§ãã¡ãæãã§ãããã®ã«ããããšã®1ã€ã¯ãå Žåã«ãã£ãŠã¯ããã©ãŒãã³ã¹ãåäžããå¯èœæ§ããããšããããšã§ãã ãµãŒããŒãšã®éã§ãã¹ãŠã®ã¯ãšãªãšçµæãéä¿¡ããããã«å¿ èŠãªã©ãŠã³ãããªãããå°ãªããŠæžã¿ãŸãã
ãã®ç¹å®ã®çç±ããããšã³ã¿ãŒãã©ã€ãºã°ã¬ãŒãã®ãããžã§ã¯ãã§node-mysqlïŒmysqljsïŒã䜿çšããŠã
node-mysqlïŒmysqljsïŒãã©ã€ããŒã®è€æ°ã¹ããŒãã¡ã³ãã®ã¯ãšãªæ©èœãå©çšããããšã§ããã®ãããªæäœã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããŸãã
KnexãããããµããŒãããŠããªãå Žåãããã¯ç§ã«ãšã£ãŠã·ã§ãŒããããŒã«ãªããããããŸããã ã ããç§ã¯ãã®ã¹ã¬ããã埩掻ãããŠããã ããå°ããŸãã
Knex.jsã§ã¯ã1ã€ã®ã¹ããŒãã¡ã³ãã§ã®è€æ°ã®ã¯ãšãªããµããŒããããããã«ãªããŸãããïŒ
@nicholaswminã¯ããå€§å¹ ãªããã©ãŒãã³ã¹ã®åäžããšã¯ã©ãããæå³ã§ããïŒ ãã®æ¹æ³ã§è€æ°ã®ã¯ãšãªãéä¿¡ããæ¹ããåãæ¥ç¶ãä»ããŠè€æ°ã®ã¯ãšãªãéä¿¡ãããããã¯ããã«å¹ççã§ããïŒ ãã³ãããŒã¯ã¯ãããŸããïŒ
@elhiguãã³ãããŒã¯ã¯ãããŸããããããã«ç§ã¯ãããèšãããšãã§ããŸãïŒ
DBãžã®1åã®åŒã³åºãïŒãã¹ãŠã®ã¹ããŒãã¡ã³ããå«ãŸããŠããïŒã«ãããserver-dbãããã¯ãŒã¯ã®ã©ãŠã³ãããªãããæé€ãããŸãã
äžæ¹ãåãæ¥ç¶ãä»ããŠè€æ°ã®ã¯ãšãªãéä¿¡ããããšã¯ç¹å¹è¬ã§ã¯ãããŸããã ãã®ãœãªã¥ãŒã·ã§ã³ã¯ãéãã©ã³ã¶ã¯ã·ã§ã³ãããŒã§ã®ã¿æ©èœããŸãããã®åé¡ãåç §ããŠãã ãã
@nicholaswmin倧éã®å°ããªã¯ãšãªãéä¿¡ããŠããŠãã»ãšãã©ç¡èŠãããŠããããå°ããªçµæã§ããïŒ ãã®å Žåããã©ã€ããŒãåTCPãã±ããã«è€æ°ã®ã¯ãšãªãããã¯ã§ãããããéããç®ç«ã€å¯èœæ§ããããšæããŸããããããªããšãåTCPãã±ããã®ã»ãšãã©ãããããŒã«ãªãããã€ããŒããéåžžã«å°ãªããªããŸãã
ãã®ãããªããã©ãŒãã³ã¹ã®éãã¯ããããã¯ãŒã¯ãã©ãã£ãã¯ã®éããã§ãç°¡åã«æž¬å®ã§ããã¯ãã§ãã
ãã©ã€ããŒããåã®åŒã³åºãã®çµæãæåã«åŸ
ããã«ãå¥ã
ã®connection.query
åŒã³åºãããDBãžã®è€æ°ã®ã¯ãšãªã®éä¿¡ããµããŒãããŠãããã©ããã¯ããããŸããã ãããããªããè€æ°ã®connection.query
éä¿¡ããããmysqlãã©ã€ããŒã§ãµããŒããããŠããåäžã®ãã«ãã¯ãšãªãéä¿¡ãããã§TCPãã©ãã£ãã¯ã«å€§ããªéãã¯ãªãã¯ãã§ãã
@elhiguãããã¯ç¢ºãã«å°ããªã¯ãšãªã§ããããã©ã³ã¶ã¯ã·ã§ã³/ã¯ãšãªãã§ãŒã³ã®ããã«äžæµã§äœ¿çšã§ããããã«çµæãå¿ èŠã§ãã
ãããã°ãŸãã¯åæ§ã®ãªãã·ã§ã³ãä»ããŠéä¿¡ãããŠããTCPãã±ããã確èªããæ¹æ³ã¯ãããŸããïŒ éä¿¡ãããã¯ãšãªèªäœã§ã¯ãªããå®éã®ãã±ããã
ã·ã¹ãã å ã®ãŠãŒã¶ãŒã®ããŒã¿ãæŽæ°ãããšãã«ããã®ãŠãŒã¶ãŒã®ç£æ»èšŒè·¡ïŒäœãå€æŽããããïŒãèšç®ããããšæããŸãã
// # 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);
äžèšã®ååŒã³åºãã¯è€æ°ã®DBåŒã³åºããè¡ãããããæ³åã®ãšããããããã¯å€ãã®ãããã¯ãŒã¯ã©ãŠã³ãããªããã§ãã
ïŒ1806ã§è¿°ã¹ãããã«ãã·ãŒã±ã³ã·ã£ã«ã§ããå¿
èŠã®ãªãã¯ãšãªã«Promise.all()
ã䜿çšããããšã§ããããåé¿ã§ããŸãïŒã»ãšãã©ã®å Žåã getData/setData
ã®DBåŒã³åºãã¯ã·ãŒã±ã³ã·ã£ã«ã§ããå¿
èŠã¯ãããŸããïŒã
ã¯ãšãªã¯ããŒã«ããã®ããŸããŸãªæ¥ç¶ã§éä¿¡ã§ãããããããã¯éãã©ã³ã¶ã¯ã·ã§ã³ãããŒã§æ©èœããŸãã ãã©ã³ã¶ã¯ã·ã§ã³ã䜿çšããŠäžèšã®ãããŒãå®è¡ãããšããã«ãã¯ãšãªãåäžã®æ¥ç¶ã§éä¿¡ããããããé床ãäœäžããŸãïŒçŽ4åïŒã
è£è¶³ãšããŠãç§ã¯MSSQLã䜿çšããŠããŸãã
Wiresharkã¯ããããã¯ãŒã¯ãã©ãã£ãã¯ã®åæã«äœ¿çšãããéåžžã«äžè¬çãªã¯ãã¹ãã©ãããã©ãŒã ããŒã«ã§ãã
ããŒãã§ãã®ã¬ãã«ã確èªããæ¹æ³ã¯ãªããšæããŸãã
1ã€ã®æ¹æ³ã¯ãiptrafãªã©ã䜿çšããŠã1ã€ã®ã¯ãšãªã«ããã¯ãããããŸãã¯ãã©ã€ããŒã«åå¥ã«æž¡ãããåãéã®ã¯ãšãªãéä¿¡ãããšãã«ãéåä¿¡ãããããŒã¿ã®éã枬å®ããããšã§ãã
multiQuery
æ§æãèŠããã§ãã
ãã¹ãŠã®ã¢ããããŒã ïŒ
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...');
// ...
ããã¯åãªãã«ãŒãã§ãããè€æ°ã®ãªã¯ãšã¹ãã1ã€ã«ãŸãšãããã®ã§ã¯ãªããäœéã§ãã
@mscheffer質åã¯ïŒ
';'ã§åºåãããè€æ°ã®ã¯ãšãªãå®è¡ããããšããåé¡ã«çŽé¢ããŠããŸãã äžäººã®å¹¹éšã«ãã£ãŠãããã¯å¯èœã§ããïŒ
ç§ã®çãã¯ã©ãã解決ããŸããã ããªããããéãããè¯ã解決çãæã£ãŠãããªãã°ããããæäŸããŠãã ããã
@VictorioBerra ;
ããã®åå²ã¯ãæååãªãã©ã«ãšã³ã¡ã³ãå
ã«;
ãååšããå¯èœæ§ããããããéåžžã¯æ©èœããŸããã ããŒã¿ãã³ããèªã¿èŸŒãã§ããå ŽåãSQLãã³ãã³ãŒããsqliteã·ã§ã«ã«ãã€ãããã®ãç°¡åãªæ¹æ³ã ãšæããŸãã æ®å¿µãªãããã€ã³ã¡ã¢ãªããŒã¿ããŒã¹ã¯åäžã®æ¥ç¶ã§ãããããããã¯æ©èœããŸããã
ãŸãããã³ãã¬ãŒãæååå
ã§SQLæååãäœæãããããåå²ããå Žåãã knex.schema.*
ãã«ããŒã䜿çšãããšãå®è³ªçã«åãããšãã§ããŸãããããå®å
šã«ãªããŸãã
ç§ã®ç¥ãéãããã¹ãŠã®æ¹èšãã©ã€ããŒã«å¯ŸããŠ1ã€ã®ã³ãã³ãã§è€æ°ã®ã¯ãšãªãå®è¡ãããšãããã®æ©èœãå®çŸããæ¹æ³ã¯ãããŸããã ãã®ãµããŒãããã£ãã®ã¯mysqlãšoracledbãŸãã¯mssqlã ã£ããšæããŸãããmysqlã䜿çšãããšãæåŸã®ã¯ãšãªã®çµæã ããå¿çãšããŠè¿ãããŸãïŒãã ããåé¡ãªãå¯èœæ§ããããŸãïŒã
è€æ°ã®ã¯ãšãªã䜿çšããŠããŒã¿ãå€æŽããå Žåã¯ããã©ã³ã¶ã¯ã·ã§ã³ã䜿çšããŠãããããé£ç¶ããŠå®è¡ãããããšã確èªã§ããããã«ããŠãã ããã
RAWSQLã䜿çšããè€æ°ã®ã¯ãšãªå®è¡
ç§ã¯ãknex移è¡ã®1ã€ã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
ã®çµæãæååã«å€æããŠãããè€æ°ã®ã¯ãšãªãçµåããå¿
èŠããããŸãã ããã1ã€ã®äŸã§ãïŒ
// 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) => {
});
ããã¯ãé£ç¶ããŠå®è¡ããå¿ èŠã®ããåé·ãªã¯ãšãªãäœæããéã®äººçãšã©ãŒãæžããã®ã«ã圹ç«ã¡ãŸãã ç¹°ãè¿ããŸããããã®ãããªãã®ã§ã¯ããã©ã³ã¶ã¯ã·ã§ã³ã§ã©ããããããšããå§ãããŸãã
ããã¯ã»ãšãã©dbãã©ã€ããŒã«ãã£ãŠå¶éãããŠããã®ã§ããããéããããšãã§ãããšæããŸãã å°ãªããšãé©åãªæ©èœèŠæ±ãå¿ èŠã§ãã
@AksharaKarikalanè€æ°ã®ãµãã¯ãšãªãå®è¡ãããããã®éã§æžç®ãè¡ã£ããšããŠããã¯ãšãªã¯1ã€ã ãã§ãã ããã§ããã®åé¡ã«é¢ä¿ã®ãªãã³ã¡ã³ããåé€ããŸããã Stackoverflowã¯ãknexã®äœ¿çšãªã¯ãšã¹ãã«é©ããå Žæã§ãã
æãåèã«ãªãã³ã¡ã³ã
ãã¹ãŠã®ã¢ããããŒã ïŒ
multiQueryãäœæããããšã¯å¯èœã§ããïŒ
ãããããªããã©ã®æ§æã䜿çšããŸããïŒ