dbgate-plugin-mysql 5.0.0-alpha.1 → 5.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/backend.js CHANGED
@@ -278,7 +278,7 @@ e.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月
278
278
  //! moment.js locale configuration
279
279
  e.defineLocale("zh-mo",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"D/M/YYYY",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"中午"===t?e>=11?e:e+12:"下午"===t||"晚上"===t?e+12:void 0},meridiem:function(e,t,n){var r=100*e+t;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天] LT",nextDay:"[明天] LT",nextWeek:"[下]dddd LT",lastDay:"[昨天] LT",lastWeek:"[上]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n(0))},function(e,t,n){!function(e){"use strict";
280
280
  //! moment.js locale configuration
281
- e.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"中午"===t?e>=11?e:e+12:"下午"===t||"晚上"===t?e+12:void 0},meridiem:function(e,t,n){var r=100*e+t;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天] LT",nextDay:"[明天] LT",nextWeek:"[下]dddd LT",lastDay:"[昨天] LT",lastWeek:"[上]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s後",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n(0))},function(e,t,n){const r=n(281);e.exports={packageName:"dbgate-plugin-mysql",drivers:r}},function(e,t,n){const r=n(7),i=n(32),a=n(282),s=n(284),o=n(47),{createBulkInsertStreamBase:u,makeUniqueColumnNames:_}=n(53),{MySqlDumper:c}=n(546);function d(e){if(e){const t=e.map(e=>({columnName:e.name}));return _(t),t}return null}function l(e,t){return r.zipObject(t.map(e=>e.columnName),e)}const f=a.map(e=>({...e,analyserClass:s,async connect({server:e,port:t,user:n,password:r,database:i,ssl:a,isReadOnly:s,forceRowsAsObjects:u}){const _=o.createConnection({host:e,port:t,user:n,password:r,database:i,ssl:a,rowsAsArray:!u,supportBigNumbers:!0,bigNumberStrings:!0,dateStrings:!0});return _._database_name=i,s&&await this.query(_,"SET SESSION TRANSACTION READ ONLY"),_},close:async e=>e.close(),query:(e,t)=>null==t?{rows:[],columns:[]}:new Promise((n,r)=>{e.query(t,(function(e,t,i){e&&r(e);const a=d(i);n({rows:t&&a&&t.map&&t.map(e=>l(e,a)),columns:a})}))}),async stream(e,t,n){const r=e.query(t);let i=[];r.on("error",e=>{console.log("ERROR",e);const{message:t,lineNumber:r,procName:i}=e;n.info({message:t,line:r,procedure:i,time:new Date,severity:"error"})}).on("fields",e=>{i=d(e),i&&n.recordset(i)}).on("result",e=>{e&&e.constructor&&"OkPacket"==e.constructor.name?n.info({message:`${e.affectedRows} rows affected`,time:new Date,severity:"info"}):i&&n.row(l(e,i))}).on("end",()=>{n.done()})},async readQuery(e,t,n){const r=e.query(t),a=new i.PassThrough({objectMode:!0,highWaterMark:100});let s=[];return r.on("error",e=>{console.error(e),a.end()}).on("fields",e=>{s=d(e),a.write({__isStreamHeader:!0,...n||{columns:s}})}).on("result",e=>a.write(l(e,s))).on("end",()=>a.end()),a},async getVersion(e){const{rows:t}=await this.query(e,"show variables like 'version'"),n=t[0].Value;if(n){const e=n.match(/(.*)-MariaDB-/);if(e)return{version:n,versionText:`MariaDB ${e[1]}`}}return{version:n,versionText:`MySQL ${n}`}},async listDatabases(e){const{rows:t}=await this.query(e,"show databases");return t.map(e=>({name:e.Database}))},async writeTable(e,t,n){return u(this,i,e,t,n)},async createBackupDumper(e,t){const{outputFile:n,databaseName:r,schemaName:i}=t;return new c({connection:e,schema:r||i,outputFile:n})}}));e.exports=f},function(e,t,n){const{driverBase:r}=global.DBGATE_TOOLS,{mysqlSplitterOptions:i}=n(52),a={...r,showConnectionField:(e,t)=>["server","port","user","password","defaultDatabase","singleDatabase","isReadOnly"].includes(e),dumperClass:n(283),dialect:{rangeSelect:!0,stringEscapeChar:"\\",fallbackDataType:"longtext",enableConstraintsPerTable:!1,anonymousPrimaryKey:!0,explicitDropConstraint:!0,quoteIdentifier:e=>"`"+e+"`",createColumn:!0,dropColumn:!0,changeColumn:!0,createIndex:!0,dropIndex:!0,createForeignKey:!0,dropForeignKey:!0,createPrimaryKey:!0,dropPrimaryKey:!0,dropIndexContainsTableSpec:!0,createUnique:!0,dropUnique:!0,createCheck:!0,dropCheck:!0,dropReferencesWhenDropTable:!1,columnProperties:{columnComment:!0,isUnsigned:!0,isZerofill:!0}},defaultPort:3306,getQuerySplitterOptions:()=>i,readOnlySessions:!0,supportsDatabaseDump:!0,getNewObjectTemplates:()=>[{label:"New view",sql:"CREATE VIEW myview\nAS\nSELECT * FROM table1"},{label:"New procedure",sql:"DELIMITER //\n\nCREATE PROCEDURE myproc (IN arg1 INT)\nBEGIN\n SELECT * FROM table1;\nEND\n\nDELIMITER ;"},{label:"New function",sql:"CREATE FUNCTION myfunc (arg1 INT)\nRETURNS INT DETERMINISTIC\nRETURN 1"}]},s={...a,engine:"mysql@dbgate-plugin-mysql",title:"MySQL"},o={...a,engine:"mariadb@dbgate-plugin-mysql",title:"MariaDB"};e.exports=[s,o]},function(e,t,n){const{SqlDumper:r,arrayToHexString:i}=global.DBGATE_TOOLS;n(2);e.exports=class extends r{transform(e,t){switch(e){case"GROUP:YEAR":case"YEAR":this.put("^year(%c)",t);break;case"MONTH":this.put("^month(%c)",t);break;case"DAY":this.put("^day(%c)",t);break;case"GROUP:MONTH":this.put("^date_format(%c, '%s')",t,"%Y-%m");break;case"GROUP:DAY":this.put("^date_format(%c, '%s')",t,"%Y-%m-%d");break;default:t()}}renameTable(e,t){this.putCmd("^rename ^table %f ^to %i",e,t)}changeColumn(e,t,n){this.put("^alter ^table %f ^change ^column %i %i ",e,e.columnName,t.columnName),this.columnDefinition(t),this.inlineConstraints(n),this.endCommand()}specialColumnOptions(e){e.isUnsigned&&this.put("^unsigned "),e.isZerofill&&this.put("^zerofill ")}columnDefinition(e,t){super.columnDefinition(e,t),e.columnComment&&this.put(" ^comment %v ",e.columnComment)}renameColumn(e,t){this.changeColumn(e,{...e,columnName:t},[])}enableConstraints(e,t){this.putCmd("^set FOREIGN_KEY_CHECKS = %s",t?"1":"0")}comment(e){this.put("/* %s */",e)}beginTransaction(){this.putCmd("^start ^transaction")}selectTableIntoNewTable(e,t){this.putCmd("^create ^table %f (^select * ^from %f)",t,e)}putByteArrayValue(e){this.putRaw(`unhex('${i(e)}')`)}}},function(e,t,n){const r=n(285),i=n(7),a=n(290),{DatabaseAnalyser:s}=n(53),{isTypeString:o,isTypeNumeric:u}=n(53);function _({isNullable:e,extra:t,columnName:n,dataType:r,charMaxLength:a,numericPrecision:s,numericScale:_,defaultValue:c,columnComment:d,columnType:l}){const f=i.isString(l)?l.split(" ").map(e=>e.trim().toLowerCase()):[];let h=r;return a&&o(r)&&(h=`${r}(${a})`),s&&_&&u(r)&&(h=`${r}(${s},${_})`),{notNull:!e||"NO"==e||"no"==e,autoIncrement:!(!t||!t.toLowerCase().includes("auto_increment")),columnName:n,columnComment:d,dataType:h,defaultValue:c,isUnsigned:f.includes("unsigned"),isZerofill:f.includes("zerofill")}}e.exports=class extends s{constructor(e,t,n){super(e,t,n)}createQuery(e,t){let n=a[e];return n=n.replace("#DATABASE#",this.pool._database_name),super.createQuery(n,t)}getRequestedViewNames(e){return this.getRequestedObjectPureNames("views",e)}async _computeSingleObjectId(){const{pureName:e}=this.singleObjectFilter;this.singleObjectId=e}async getViewTexts(e){const t={};for(const n of this.getRequestedViewNames(e))try{const e=await this.driver.query(this.pool,`SHOW CREATE VIEW \`${n}\``);t[n]=e.rows[0]["Create View"]}catch(e){console.log("ERROR",e),t[n]=`${e}`}return t}async _runAnalysis(){const e=await this.driver.query(this.pool,this.createQuery("tables",["tables"])),t=await this.driver.query(this.pool,this.createQuery("columns",["tables","views"])),n=await this.safeQuery(this.createQuery("primaryKeys",["tables"])),a=await this.safeQuery(this.createQuery("foreignKeys",["tables"])),o=await this.safeQuery(this.createQuery("views",["views"])),u=await this.safeQuery(this.createQuery("programmables",["procedures","functions"])),c=await this.getViewTexts(o.rows.map(e=>e.pureName)),d=await this.safeQuery(this.createQuery("indexes",["tables"])),l=await this.safeQuery(this.createQuery("uniqueNames",["tables"]));return{tables:e.rows.map(e=>({...e,objectId:e.pureName,contentHash:i.isDate(e.modifyDate)?e.modifyDate.toISOString():e.modifyDate,columns:t.rows.filter(t=>t.pureName==e.pureName).map(_),primaryKey:s.extractPrimaryKeys(e,n.rows),foreignKeys:s.extractForeignKeys(e,a.rows),tableRowCount:e.tableRowCount,indexes:i.uniqBy(d.rows.filter(t=>t.tableName==e.pureName&&!l.rows.find(e=>e.constraintName==t.constraintName)),"constraintName").map(e=>({...i.pick(e,["constraintName","indexType"]),isUnique:!e.nonUnique,columns:d.rows.filter(t=>t.tableName==e.tableName&&t.constraintName==e.constraintName).map(e=>({...i.pick(e,["columnName"])}))})),uniques:i.uniqBy(d.rows.filter(t=>t.tableName==e.pureName&&l.rows.find(e=>e.constraintName==t.constraintName)),"constraintName").map(e=>({...i.pick(e,["constraintName"]),columns:d.rows.filter(t=>t.tableName==e.tableName&&t.constraintName==e.constraintName).map(e=>({...i.pick(e,["columnName"])}))}))})),views:o.rows.map(e=>({...e,objectId:e.pureName,contentHash:i.isDate(e.modifyDate)?e.modifyDate.toISOString():e.modifyDate,columns:t.rows.filter(t=>t.pureName==e.pureName).map(_),createSql:c[e.pureName],requiresFormat:!0})),procedures:u.rows.filter(e=>"PROCEDURE"==e.objectType).map(r.omit(["objectType"])).map(e=>({...e,createSql:`DELIMITER //\n\nCREATE PROCEDURE \`${e.pureName}\`()\n${e.routineDefinition}\n\nDELIMITER ;\n`,objectId:e.pureName,contentHash:i.isDate(e.modifyDate)?e.modifyDate.toISOString():e.modifyDate})),functions:u.rows.filter(e=>"FUNCTION"==e.objectType).map(r.omit(["objectType"])).map(e=>({...e,createSql:`CREATE FUNCTION \`${e.pureName}\`()\nRETURNS ${e.returnDataType} ${"YES"==e.isDeterministic?"DETERMINISTIC":"NOT DETERMINISTIC"}\n${e.routineDefinition}`,objectId:e.pureName,contentHash:i.isDate(e.modifyDate)?e.modifyDate.toISOString():e.modifyDate}))}}async _getFastSnapshot(){const e=await this.driver.query(this.pool,this.createQuery("tableModifications")),t=await this.driver.query(this.pool,this.createQuery("procedureModifications")),n=await this.driver.query(this.pool,this.createQuery("functionModifications"));return{tables:e.rows.filter(e=>"BASE TABLE"==e.objectType).map(e=>({...e,objectId:e.pureName,contentHash:i.isDate(e.modifyDate)?e.modifyDate.toISOString():e.modifyDate,tableRowCount:e.tableRowCount})),views:e.rows.filter(e=>"VIEW"==e.objectType).map(e=>({...e,objectId:e.pureName,contentHash:i.isDate(e.modifyDate)?e.modifyDate.toISOString():e.modifyDate})),procedures:t.rows.map(e=>({contentHash:e.Modified,objectId:e.Name,pureName:e.Name})),functions:n.rows.map(e=>({contentHash:e.Modified,objectId:e.Name,pureName:e.Name}))}}}},function(e,t,n){var r=n(286).runInContext();e.exports=n(287)(r,r)},function(e,t,n){(function(e){var r;
281
+ e.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"中午"===t?e>=11?e:e+12:"下午"===t||"晚上"===t?e+12:void 0},meridiem:function(e,t,n){var r=100*e+t;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天] LT",nextDay:"[明天] LT",nextWeek:"[下]dddd LT",lastDay:"[昨天] LT",lastWeek:"[上]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s後",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n(0))},function(e,t,n){const r=n(281);e.exports={packageName:"dbgate-plugin-mysql",drivers:r}},function(e,t,n){const r=n(7),i=n(32),a=n(282),s=n(284),o=n(47),{createBulkInsertStreamBase:u,makeUniqueColumnNames:_}=n(53),{MySqlDumper:c}=n(546);function d(e){if(e){const t=e.map(e=>({columnName:e.name}));return _(t),t}return null}function l(e,t){return r.zipObject(t.map(e=>e.columnName),e)}const f=a.map(e=>({...e,analyserClass:s,async connect({server:e,port:t,user:n,password:r,database:i,ssl:a,isReadOnly:s,forceRowsAsObjects:u}){const _=o.createConnection({host:e,port:t,user:n,password:r,database:i,ssl:a,rowsAsArray:!u,supportBigNumbers:!0,bigNumberStrings:!0,dateStrings:!0});return _._database_name=i,s&&await this.query(_,"SET SESSION TRANSACTION READ ONLY"),_},close:async e=>e.close(),query:(e,t)=>null==t?{rows:[],columns:[]}:new Promise((n,r)=>{e.query(t,(function(e,t,i){e&&r(e);const a=d(i);n({rows:t&&a&&t.map&&t.map(e=>l(e,a)),columns:a})}))}),async stream(e,t,n){const r=e.query(t);let i=[];r.on("error",e=>{console.log("ERROR",e);const{message:t,lineNumber:r,procName:i}=e;n.info({message:t,line:r,procedure:i,time:new Date,severity:"error"})}).on("fields",e=>{i=d(e),i&&n.recordset(i)}).on("result",e=>{e&&e.constructor&&"OkPacket"==e.constructor.name?n.info({message:`${e.affectedRows} rows affected`,time:new Date,severity:"info"}):i&&n.row(l(e,i))}).on("end",()=>{n.done()})},async readQuery(e,t,n){const r=e.query(t),a=new i.PassThrough({objectMode:!0,highWaterMark:100});let s=[];return r.on("error",e=>{console.error(e),a.end()}).on("fields",e=>{s=d(e),a.write({__isStreamHeader:!0,...n||{columns:s}})}).on("result",e=>a.write(l(e,s))).on("end",()=>a.end()),a},async getVersion(e){const{rows:t}=await this.query(e,"show variables like 'version'"),n=t[0].Value;if(n){const e=n.match(/(.*)-MariaDB-/);if(e)return{version:n,versionText:`MariaDB ${e[1]}`}}return{version:n,versionText:`MySQL ${n}`}},async listDatabases(e){const{rows:t}=await this.query(e,"show databases");return t.map(e=>({name:e.Database}))},async writeTable(e,t,n){return u(this,i,e,t,n)},async createBackupDumper(e,t){const{outputFile:n,databaseName:r,schemaName:i}=t;return new c({connection:e,schema:r||i,outputFile:n})}}));e.exports=f},function(e,t,n){const{driverBase:r}=global.DBGATE_TOOLS,{mysqlSplitterOptions:i}=n(52),a={...r,showConnectionField:(e,t)=>["server","port","user","password","defaultDatabase","singleDatabase","isReadOnly"].includes(e),dumperClass:n(283),dialect:{rangeSelect:!0,stringEscapeChar:"\\",fallbackDataType:"longtext",enableConstraintsPerTable:!1,anonymousPrimaryKey:!0,explicitDropConstraint:!0,quoteIdentifier:e=>"`"+e+"`",createColumn:!0,dropColumn:!0,changeColumn:!0,createIndex:!0,dropIndex:!0,createForeignKey:!0,dropForeignKey:!0,createPrimaryKey:!0,dropPrimaryKey:!0,dropIndexContainsTableSpec:!0,createUnique:!0,dropUnique:!0,createCheck:!0,dropCheck:!0,dropReferencesWhenDropTable:!1,columnProperties:{columnComment:!0,isUnsigned:!0,isZerofill:!0},predefinedDataTypes:["char(20)","varchar(250)","binary(250)","varbinary(250)","tinyblob","tinytext","text(1000)","blob(1000)","mediumtext","mediumblob","longtext","longblob","enum(val1,val2,val3)","set(val1,val2,val3)","bit(32)","tinyint","bool","smallint","mediumint","int","bigint","float","double","decimal","date","datetime","timestamp","time","year"]},defaultPort:3306,getQuerySplitterOptions:()=>i,readOnlySessions:!0,supportsDatabaseDump:!0,getNewObjectTemplates:()=>[{label:"New view",sql:"CREATE VIEW myview\nAS\nSELECT * FROM table1"},{label:"New procedure",sql:"DELIMITER //\n\nCREATE PROCEDURE myproc (IN arg1 INT)\nBEGIN\n SELECT * FROM table1;\nEND\n\nDELIMITER ;"},{label:"New function",sql:"CREATE FUNCTION myfunc (arg1 INT)\nRETURNS INT DETERMINISTIC\nRETURN 1"}]},s={...a,engine:"mysql@dbgate-plugin-mysql",title:"MySQL"},o={...a,engine:"mariadb@dbgate-plugin-mysql",title:"MariaDB"};e.exports=[s,o]},function(e,t,n){const{SqlDumper:r,arrayToHexString:i}=global.DBGATE_TOOLS;n(2);e.exports=class extends r{transform(e,t){switch(e){case"GROUP:YEAR":case"YEAR":this.put("^year(%c)",t);break;case"MONTH":this.put("^month(%c)",t);break;case"DAY":this.put("^day(%c)",t);break;case"GROUP:MONTH":this.put("^date_format(%c, '%s')",t,"%Y-%m");break;case"GROUP:DAY":this.put("^date_format(%c, '%s')",t,"%Y-%m-%d");break;default:t()}}renameTable(e,t){this.putCmd("^rename ^table %f ^to %i",e,t)}changeColumn(e,t,n){this.put("^alter ^table %f ^change ^column %i %i ",e,e.columnName,t.columnName),this.columnDefinition(t),this.inlineConstraints(n),this.endCommand()}specialColumnOptions(e){e.isUnsigned&&this.put("^unsigned "),e.isZerofill&&this.put("^zerofill ")}columnDefinition(e,t){super.columnDefinition(e,t),e.columnComment&&this.put(" ^comment %v ",e.columnComment)}renameColumn(e,t){this.changeColumn(e,{...e,columnName:t},[])}enableConstraints(e,t){this.putCmd("^set FOREIGN_KEY_CHECKS = %s",t?"1":"0")}comment(e){this.put("/* %s */",e)}beginTransaction(){this.putCmd("^start ^transaction")}selectTableIntoNewTable(e,t){this.putCmd("^create ^table %f (^select * ^from %f)",t,e)}putByteArrayValue(e){this.putRaw(`unhex('${i(e)}')`)}}},function(e,t,n){const r=n(285),i=n(7),a=n(290),{DatabaseAnalyser:s}=n(53),{isTypeString:o,isTypeNumeric:u}=n(53);function _({isNullable:e,extra:t,columnName:n,dataType:r,charMaxLength:a,numericPrecision:s,numericScale:_,defaultValue:c,columnComment:d,columnType:l}){const f=i.isString(l)?l.split(" ").map(e=>e.trim().toLowerCase()):[];let h=r;return a&&o(r)&&(h=`${r}(${a})`),s&&_&&u(r)&&(h=`${r}(${s},${_})`),{notNull:!e||"NO"==e||"no"==e,autoIncrement:!(!t||!t.toLowerCase().includes("auto_increment")),columnName:n,columnComment:d,dataType:h,defaultValue:c,isUnsigned:f.includes("unsigned"),isZerofill:f.includes("zerofill")}}e.exports=class extends s{constructor(e,t,n){super(e,t,n)}createQuery(e,t){let n=a[e];return n=n.replace("#DATABASE#",this.pool._database_name),super.createQuery(n,t)}getRequestedViewNames(e){return this.getRequestedObjectPureNames("views",e)}async _computeSingleObjectId(){const{pureName:e}=this.singleObjectFilter;this.singleObjectId=e}async getViewTexts(e){const t={};for(const n of this.getRequestedViewNames(e))try{const e=await this.driver.query(this.pool,`SHOW CREATE VIEW \`${n}\``);t[n]=e.rows[0]["Create View"]}catch(e){console.log("ERROR",e),t[n]=`${e}`}return t}async _runAnalysis(){const e=await this.driver.query(this.pool,this.createQuery("tables",["tables"])),t=await this.driver.query(this.pool,this.createQuery("columns",["tables","views"])),n=await this.safeQuery(this.createQuery("primaryKeys",["tables"])),a=await this.safeQuery(this.createQuery("foreignKeys",["tables"])),o=await this.safeQuery(this.createQuery("views",["views"])),u=await this.safeQuery(this.createQuery("programmables",["procedures","functions"])),c=await this.getViewTexts(o.rows.map(e=>e.pureName)),d=await this.safeQuery(this.createQuery("indexes",["tables"])),l=await this.safeQuery(this.createQuery("uniqueNames",["tables"]));return{tables:e.rows.map(e=>({...e,objectId:e.pureName,contentHash:i.isDate(e.modifyDate)?e.modifyDate.toISOString():e.modifyDate,columns:t.rows.filter(t=>t.pureName==e.pureName).map(_),primaryKey:s.extractPrimaryKeys(e,n.rows),foreignKeys:s.extractForeignKeys(e,a.rows),tableRowCount:e.tableRowCount,indexes:i.uniqBy(d.rows.filter(t=>t.tableName==e.pureName&&!l.rows.find(e=>e.constraintName==t.constraintName)),"constraintName").map(e=>({...i.pick(e,["constraintName","indexType"]),isUnique:!e.nonUnique,columns:d.rows.filter(t=>t.tableName==e.tableName&&t.constraintName==e.constraintName).map(e=>({...i.pick(e,["columnName"])}))})),uniques:i.uniqBy(d.rows.filter(t=>t.tableName==e.pureName&&l.rows.find(e=>e.constraintName==t.constraintName)),"constraintName").map(e=>({...i.pick(e,["constraintName"]),columns:d.rows.filter(t=>t.tableName==e.tableName&&t.constraintName==e.constraintName).map(e=>({...i.pick(e,["columnName"])}))}))})),views:o.rows.map(e=>({...e,objectId:e.pureName,contentHash:i.isDate(e.modifyDate)?e.modifyDate.toISOString():e.modifyDate,columns:t.rows.filter(t=>t.pureName==e.pureName).map(_),createSql:c[e.pureName],requiresFormat:!0})),procedures:u.rows.filter(e=>"PROCEDURE"==e.objectType).map(r.omit(["objectType"])).map(e=>({...e,createSql:`DELIMITER //\n\nCREATE PROCEDURE \`${e.pureName}\`()\n${e.routineDefinition}\n\nDELIMITER ;\n`,objectId:e.pureName,contentHash:i.isDate(e.modifyDate)?e.modifyDate.toISOString():e.modifyDate})),functions:u.rows.filter(e=>"FUNCTION"==e.objectType).map(r.omit(["objectType"])).map(e=>({...e,createSql:`CREATE FUNCTION \`${e.pureName}\`()\nRETURNS ${e.returnDataType} ${"YES"==e.isDeterministic?"DETERMINISTIC":"NOT DETERMINISTIC"}\n${e.routineDefinition}`,objectId:e.pureName,contentHash:i.isDate(e.modifyDate)?e.modifyDate.toISOString():e.modifyDate}))}}async _getFastSnapshot(){const e=await this.driver.query(this.pool,this.createQuery("tableModifications")),t=await this.driver.query(this.pool,this.createQuery("procedureModifications")),n=await this.driver.query(this.pool,this.createQuery("functionModifications"));return{tables:e.rows.filter(e=>"BASE TABLE"==e.objectType).map(e=>({...e,objectId:e.pureName,contentHash:i.isDate(e.modifyDate)?e.modifyDate.toISOString():e.modifyDate,tableRowCount:e.tableRowCount})),views:e.rows.filter(e=>"VIEW"==e.objectType).map(e=>({...e,objectId:e.pureName,contentHash:i.isDate(e.modifyDate)?e.modifyDate.toISOString():e.modifyDate})),procedures:t.rows.map(e=>({contentHash:e.Modified,objectId:e.Name,pureName:e.Name})),functions:n.rows.map(e=>({contentHash:e.Modified,objectId:e.Name,pureName:e.Name}))}}}},function(e,t,n){var r=n(286).runInContext();e.exports=n(287)(r,r)},function(e,t,n){(function(e){var r;
282
282
  /**
283
283
  * @license
284
284
  * Lodash <https://lodash.com/>
package/dist/frontend.js CHANGED
@@ -1 +1 @@
1
- var plugin=function(e){var t={};function n(i){if(t[i])return t[i].exports;var s=t[i]={i:i,l:!1,exports:{}};return e[i].call(s.exports,s,s.exports,n),s.l=!0,s.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)n.d(i,s,function(t){return e[t]}.bind(null,s));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=1)}([function(e,t,n){const{driverBase:i}=window.DBGATE_TOOLS,{mysqlSplitterOptions:s}=n(2),r={...i,showConnectionField:(e,t)=>["server","port","user","password","defaultDatabase","singleDatabase","isReadOnly"].includes(e),dumperClass:n(3),dialect:{rangeSelect:!0,stringEscapeChar:"\\",fallbackDataType:"longtext",enableConstraintsPerTable:!1,anonymousPrimaryKey:!0,explicitDropConstraint:!0,quoteIdentifier:e=>"`"+e+"`",createColumn:!0,dropColumn:!0,changeColumn:!0,createIndex:!0,dropIndex:!0,createForeignKey:!0,dropForeignKey:!0,createPrimaryKey:!0,dropPrimaryKey:!0,dropIndexContainsTableSpec:!0,createUnique:!0,dropUnique:!0,createCheck:!0,dropCheck:!0,dropReferencesWhenDropTable:!1,columnProperties:{columnComment:!0,isUnsigned:!0,isZerofill:!0}},defaultPort:3306,getQuerySplitterOptions:()=>s,readOnlySessions:!0,supportsDatabaseDump:!0,getNewObjectTemplates:()=>[{label:"New view",sql:"CREATE VIEW myview\nAS\nSELECT * FROM table1"},{label:"New procedure",sql:"DELIMITER //\n\nCREATE PROCEDURE myproc (IN arg1 INT)\nBEGIN\n SELECT * FROM table1;\nEND\n\nDELIMITER ;"},{label:"New function",sql:"CREATE FUNCTION myfunc (arg1 INT)\nRETURNS INT DETERMINISTIC\nRETURN 1"}]},l={...r,engine:"mysql@dbgate-plugin-mysql",title:"MySQL"},o={...r,engine:"mariadb@dbgate-plugin-mysql",title:"MariaDB"};e.exports=[l,o]},function(e,t,n){"use strict";n.r(t);var i=n(0),s=n.n(i);t.default={packageName:"dbgate-plugin-mysql",drivers:s()}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.redisSplitterOptions=t.noSplitSplitterOptions=t.mongoSplitterOptions=t.sqliteSplitterOptions=t.postgreSplitterOptions=t.mssqlSplitterOptions=t.mysqlSplitterOptions=t.defaultSplitterOptions=void 0,t.defaultSplitterOptions={stringsBegins:["'"],stringsEnds:{"'":"'"},stringEscapes:{"'":"'"},allowSemicolon:!0,allowCustomDelimiter:!1,allowGoDelimiter:!1,allowDollarDollarString:!1,noSplit:!1,doubleDashComments:!0,multilineComments:!0,javaScriptComments:!1,returnRichInfo:!1,splitByLines:!1},t.mysqlSplitterOptions=Object.assign(Object.assign({},t.defaultSplitterOptions),{allowCustomDelimiter:!0,stringsBegins:["'","`"],stringsEnds:{"'":"'","`":"`"},stringEscapes:{"'":"\\","`":"`"}}),t.mssqlSplitterOptions=Object.assign(Object.assign({},t.defaultSplitterOptions),{allowSemicolon:!1,allowGoDelimiter:!0,stringsBegins:["'","["],stringsEnds:{"'":"'","[":"]"},stringEscapes:{"'":"'"}}),t.postgreSplitterOptions=Object.assign(Object.assign({},t.defaultSplitterOptions),{allowDollarDollarString:!0,stringsBegins:["'",'"'],stringsEnds:{"'":"'",'"':'"'},stringEscapes:{"'":"'",'"':'"'}}),t.sqliteSplitterOptions=Object.assign(Object.assign({},t.defaultSplitterOptions),{stringsBegins:["'",'"'],stringsEnds:{"'":"'",'"':'"'},stringEscapes:{"'":"'",'"':'"'}}),t.mongoSplitterOptions=Object.assign(Object.assign({},t.defaultSplitterOptions),{stringsBegins:["'",'"'],stringsEnds:{"'":"'",'"':'"'},stringEscapes:{"'":"\\",'"':"\\"}}),t.noSplitSplitterOptions=Object.assign(Object.assign({},t.defaultSplitterOptions),{noSplit:!0}),t.redisSplitterOptions=Object.assign(Object.assign({},t.defaultSplitterOptions),{splitByLines:!0})},function(e,t,n){const{SqlDumper:i,arrayToHexString:s}=window.DBGATE_TOOLS;n(4);e.exports=class extends i{transform(e,t){switch(e){case"GROUP:YEAR":case"YEAR":this.put("^year(%c)",t);break;case"MONTH":this.put("^month(%c)",t);break;case"DAY":this.put("^day(%c)",t);break;case"GROUP:MONTH":this.put("^date_format(%c, '%s')",t,"%Y-%m");break;case"GROUP:DAY":this.put("^date_format(%c, '%s')",t,"%Y-%m-%d");break;default:t()}}renameTable(e,t){this.putCmd("^rename ^table %f ^to %i",e,t)}changeColumn(e,t,n){this.put("^alter ^table %f ^change ^column %i %i ",e,e.columnName,t.columnName),this.columnDefinition(t),this.inlineConstraints(n),this.endCommand()}specialColumnOptions(e){e.isUnsigned&&this.put("^unsigned "),e.isZerofill&&this.put("^zerofill ")}columnDefinition(e,t){super.columnDefinition(e,t),e.columnComment&&this.put(" ^comment %v ",e.columnComment)}renameColumn(e,t){this.changeColumn(e,{...e,columnName:t},[])}enableConstraints(e,t){this.putCmd("^set FOREIGN_KEY_CHECKS = %s",t?"1":"0")}comment(e){this.put("/* %s */",e)}beginTransaction(){this.putCmd("^start ^transaction")}selectTableIntoNewTable(e,t){this.putCmd("^create ^table %f (^select * ^from %f)",t,e)}putByteArrayValue(e){this.putRaw(`unhex('${s(e)}')`)}}},function(e,t){var n=Array.isArray;e.exports=n}]);
1
+ var plugin=function(t){var e={};function n(i){if(e[i])return e[i].exports;var s=e[i]={i:i,l:!1,exports:{}};return t[i].call(s.exports,s,s.exports,n),s.l=!0,s.exports}return n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var s in t)n.d(i,s,function(e){return t[e]}.bind(null,s));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=1)}([function(t,e,n){const{driverBase:i}=window.DBGATE_TOOLS,{mysqlSplitterOptions:s}=n(2),r={...i,showConnectionField:(t,e)=>["server","port","user","password","defaultDatabase","singleDatabase","isReadOnly"].includes(t),dumperClass:n(3),dialect:{rangeSelect:!0,stringEscapeChar:"\\",fallbackDataType:"longtext",enableConstraintsPerTable:!1,anonymousPrimaryKey:!0,explicitDropConstraint:!0,quoteIdentifier:t=>"`"+t+"`",createColumn:!0,dropColumn:!0,changeColumn:!0,createIndex:!0,dropIndex:!0,createForeignKey:!0,dropForeignKey:!0,createPrimaryKey:!0,dropPrimaryKey:!0,dropIndexContainsTableSpec:!0,createUnique:!0,dropUnique:!0,createCheck:!0,dropCheck:!0,dropReferencesWhenDropTable:!1,columnProperties:{columnComment:!0,isUnsigned:!0,isZerofill:!0},predefinedDataTypes:["char(20)","varchar(250)","binary(250)","varbinary(250)","tinyblob","tinytext","text(1000)","blob(1000)","mediumtext","mediumblob","longtext","longblob","enum(val1,val2,val3)","set(val1,val2,val3)","bit(32)","tinyint","bool","smallint","mediumint","int","bigint","float","double","decimal","date","datetime","timestamp","time","year"]},defaultPort:3306,getQuerySplitterOptions:()=>s,readOnlySessions:!0,supportsDatabaseDump:!0,getNewObjectTemplates:()=>[{label:"New view",sql:"CREATE VIEW myview\nAS\nSELECT * FROM table1"},{label:"New procedure",sql:"DELIMITER //\n\nCREATE PROCEDURE myproc (IN arg1 INT)\nBEGIN\n SELECT * FROM table1;\nEND\n\nDELIMITER ;"},{label:"New function",sql:"CREATE FUNCTION myfunc (arg1 INT)\nRETURNS INT DETERMINISTIC\nRETURN 1"}]},l={...r,engine:"mysql@dbgate-plugin-mysql",title:"MySQL"},a={...r,engine:"mariadb@dbgate-plugin-mysql",title:"MariaDB"};t.exports=[l,a]},function(t,e,n){"use strict";n.r(e);var i=n(0),s=n.n(i);e.default={packageName:"dbgate-plugin-mysql",drivers:s()}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.redisSplitterOptions=e.noSplitSplitterOptions=e.mongoSplitterOptions=e.sqliteSplitterOptions=e.postgreSplitterOptions=e.mssqlSplitterOptions=e.mysqlSplitterOptions=e.defaultSplitterOptions=void 0,e.defaultSplitterOptions={stringsBegins:["'"],stringsEnds:{"'":"'"},stringEscapes:{"'":"'"},allowSemicolon:!0,allowCustomDelimiter:!1,allowGoDelimiter:!1,allowDollarDollarString:!1,noSplit:!1,doubleDashComments:!0,multilineComments:!0,javaScriptComments:!1,returnRichInfo:!1,splitByLines:!1},e.mysqlSplitterOptions=Object.assign(Object.assign({},e.defaultSplitterOptions),{allowCustomDelimiter:!0,stringsBegins:["'","`"],stringsEnds:{"'":"'","`":"`"},stringEscapes:{"'":"\\","`":"`"}}),e.mssqlSplitterOptions=Object.assign(Object.assign({},e.defaultSplitterOptions),{allowSemicolon:!1,allowGoDelimiter:!0,stringsBegins:["'","["],stringsEnds:{"'":"'","[":"]"},stringEscapes:{"'":"'"}}),e.postgreSplitterOptions=Object.assign(Object.assign({},e.defaultSplitterOptions),{allowDollarDollarString:!0,stringsBegins:["'",'"'],stringsEnds:{"'":"'",'"':'"'},stringEscapes:{"'":"'",'"':'"'}}),e.sqliteSplitterOptions=Object.assign(Object.assign({},e.defaultSplitterOptions),{stringsBegins:["'",'"'],stringsEnds:{"'":"'",'"':'"'},stringEscapes:{"'":"'",'"':'"'}}),e.mongoSplitterOptions=Object.assign(Object.assign({},e.defaultSplitterOptions),{stringsBegins:["'",'"'],stringsEnds:{"'":"'",'"':'"'},stringEscapes:{"'":"\\",'"':"\\"}}),e.noSplitSplitterOptions=Object.assign(Object.assign({},e.defaultSplitterOptions),{noSplit:!0}),e.redisSplitterOptions=Object.assign(Object.assign({},e.defaultSplitterOptions),{splitByLines:!0})},function(t,e,n){const{SqlDumper:i,arrayToHexString:s}=window.DBGATE_TOOLS;n(4);t.exports=class extends i{transform(t,e){switch(t){case"GROUP:YEAR":case"YEAR":this.put("^year(%c)",e);break;case"MONTH":this.put("^month(%c)",e);break;case"DAY":this.put("^day(%c)",e);break;case"GROUP:MONTH":this.put("^date_format(%c, '%s')",e,"%Y-%m");break;case"GROUP:DAY":this.put("^date_format(%c, '%s')",e,"%Y-%m-%d");break;default:e()}}renameTable(t,e){this.putCmd("^rename ^table %f ^to %i",t,e)}changeColumn(t,e,n){this.put("^alter ^table %f ^change ^column %i %i ",t,t.columnName,e.columnName),this.columnDefinition(e),this.inlineConstraints(n),this.endCommand()}specialColumnOptions(t){t.isUnsigned&&this.put("^unsigned "),t.isZerofill&&this.put("^zerofill ")}columnDefinition(t,e){super.columnDefinition(t,e),t.columnComment&&this.put(" ^comment %v ",t.columnComment)}renameColumn(t,e){this.changeColumn(t,{...t,columnName:e},[])}enableConstraints(t,e){this.putCmd("^set FOREIGN_KEY_CHECKS = %s",e?"1":"0")}comment(t){this.put("/* %s */",t)}beginTransaction(){this.putCmd("^start ^transaction")}selectTableIntoNewTable(t,e){this.putCmd("^create ^table %f (^select * ^from %f)",e,t)}putByteArrayValue(t){this.putRaw(`unhex('${s(t)}')`)}}},function(t,e){var n=Array.isArray;t.exports=n}]);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dbgate-plugin-mysql",
3
3
  "main": "dist/backend.js",
4
- "version": "5.0.0-alpha.1",
4
+ "version": "5.0.2",
5
5
  "homepage": "https://dbgate.org",
6
6
  "description": "MySQL connect plugin for DbGate",
7
7
  "repository": {
@@ -34,7 +34,7 @@
34
34
  "antares-mysql-dumper": "^0.0.1",
35
35
  "dbgate-plugin-tools": "^1.0.7",
36
36
  "dbgate-query-splitter": "^4.9.0",
37
- "dbgate-tools": "^5.0.0-alpha.1",
37
+ "dbgate-tools": "^5.0.2",
38
38
  "mysql2": "^2.2.5",
39
39
  "webpack": "^4.42.0",
40
40
  "webpack-cli": "^3.3.11"