Dynamic define database in Sequelize for multi-tenant support return wrong query syntax





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







0















I'm Working on Multi-tenant Application (SAAS) with Shared Database Isolated Schema principle.



I've tried solution from https://github.com/renatoargh/data-isolation-example



from this article https://renatoargh.wordpress.com/2018/01/10/logical-data-isolation-for-multi-tenant-architecture-using-node-express-and-sequelize/



This is My Sequelize Model using schema Option



module.exports = (sequelize, DataTypes) => {
const Task = sequelize.define('Task', {
id: {
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true,
field: 'Id'
},

description: {
type: DataTypes.STRING(100),
allowNull: false,
field: 'Description'
},

done: {
type: DataTypes.BOOLEAN,
allowNull: false,
default: false,
field: 'Done'
},

taskTypeId: {
type: DataTypes.INTEGER,
allowNull: true,
field: 'TaskTypeId'
},

userId: {
type: DataTypes.INTEGER,
allowNull: true,
field: 'UserId'
}
}, {
freezeTableName: true,
tableName: 'Tasks',
createdAt: false,
updatedAt: false
})
Task.changeSchema = schema => Task.schema(schema)
Task.associate = models => {
Task.belongsTo(models.TaskType, {
as: 'taskType',
foreignKey: 'taskTypeId'
})
}


return Task
}


And Stop at this problem



SELECT
`Task`.`Id` AS `id`,
`Task`.`Description` AS `description`,
`Task`.`Done` AS `done`,
`Task`.`TaskTypeId` AS `taskTypeId`,
`Task`.`UserId` AS `userId`,
`taskType`.`Id` AS `taskType.id`,
`taskType`.`Description` AS `taskType.description`
FROM `tenant_1.Tasks` AS `Task` LEFT OUTER JOIN `shared.TaskTypes` AS `taskType`
ON `Task`.`TaskTypeId` = `taskType`.`Id`
WHERE `Task`.`UserId` = 1;


as you see, FROM `tenant_1.Tasks` in mysql is a wrong syntax. it must be FROM `tenant_1`.`Tasks`



how to change `tenant_1.Tasks` to `tenant_1`.`Tasks`










share|improve this question























  • how about if you use directly from FROM tenant_1.Tasks to Tasks

    – Vijunav Vastivch
    Jan 3 at 8:35













  • it works, but i want it can be dynamicly change to tenant_1.Tasks, tenant_2.Tasks, tenant_3.Tasks

    – veirryAu
    Jan 3 at 8:43











  • It seems like you need to use Execute command see this dev.mysql.com/doc/refman/8.0/en/…

    – Vijunav Vastivch
    Jan 3 at 8:51











  • How to use it in sequelize ?

    – veirryAu
    Jan 3 at 8:57











  • I am not a sequelize expert just need to ask about this tenant_1 is your Databasename?

    – Vijunav Vastivch
    Jan 3 at 9:11


















0















I'm Working on Multi-tenant Application (SAAS) with Shared Database Isolated Schema principle.



I've tried solution from https://github.com/renatoargh/data-isolation-example



from this article https://renatoargh.wordpress.com/2018/01/10/logical-data-isolation-for-multi-tenant-architecture-using-node-express-and-sequelize/



This is My Sequelize Model using schema Option



module.exports = (sequelize, DataTypes) => {
const Task = sequelize.define('Task', {
id: {
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true,
field: 'Id'
},

description: {
type: DataTypes.STRING(100),
allowNull: false,
field: 'Description'
},

done: {
type: DataTypes.BOOLEAN,
allowNull: false,
default: false,
field: 'Done'
},

taskTypeId: {
type: DataTypes.INTEGER,
allowNull: true,
field: 'TaskTypeId'
},

userId: {
type: DataTypes.INTEGER,
allowNull: true,
field: 'UserId'
}
}, {
freezeTableName: true,
tableName: 'Tasks',
createdAt: false,
updatedAt: false
})
Task.changeSchema = schema => Task.schema(schema)
Task.associate = models => {
Task.belongsTo(models.TaskType, {
as: 'taskType',
foreignKey: 'taskTypeId'
})
}


return Task
}


And Stop at this problem



SELECT
`Task`.`Id` AS `id`,
`Task`.`Description` AS `description`,
`Task`.`Done` AS `done`,
`Task`.`TaskTypeId` AS `taskTypeId`,
`Task`.`UserId` AS `userId`,
`taskType`.`Id` AS `taskType.id`,
`taskType`.`Description` AS `taskType.description`
FROM `tenant_1.Tasks` AS `Task` LEFT OUTER JOIN `shared.TaskTypes` AS `taskType`
ON `Task`.`TaskTypeId` = `taskType`.`Id`
WHERE `Task`.`UserId` = 1;


as you see, FROM `tenant_1.Tasks` in mysql is a wrong syntax. it must be FROM `tenant_1`.`Tasks`



how to change `tenant_1.Tasks` to `tenant_1`.`Tasks`










share|improve this question























  • how about if you use directly from FROM tenant_1.Tasks to Tasks

    – Vijunav Vastivch
    Jan 3 at 8:35













  • it works, but i want it can be dynamicly change to tenant_1.Tasks, tenant_2.Tasks, tenant_3.Tasks

    – veirryAu
    Jan 3 at 8:43











  • It seems like you need to use Execute command see this dev.mysql.com/doc/refman/8.0/en/…

    – Vijunav Vastivch
    Jan 3 at 8:51











  • How to use it in sequelize ?

    – veirryAu
    Jan 3 at 8:57











  • I am not a sequelize expert just need to ask about this tenant_1 is your Databasename?

    – Vijunav Vastivch
    Jan 3 at 9:11














0












0








0








I'm Working on Multi-tenant Application (SAAS) with Shared Database Isolated Schema principle.



I've tried solution from https://github.com/renatoargh/data-isolation-example



from this article https://renatoargh.wordpress.com/2018/01/10/logical-data-isolation-for-multi-tenant-architecture-using-node-express-and-sequelize/



This is My Sequelize Model using schema Option



module.exports = (sequelize, DataTypes) => {
const Task = sequelize.define('Task', {
id: {
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true,
field: 'Id'
},

description: {
type: DataTypes.STRING(100),
allowNull: false,
field: 'Description'
},

done: {
type: DataTypes.BOOLEAN,
allowNull: false,
default: false,
field: 'Done'
},

taskTypeId: {
type: DataTypes.INTEGER,
allowNull: true,
field: 'TaskTypeId'
},

userId: {
type: DataTypes.INTEGER,
allowNull: true,
field: 'UserId'
}
}, {
freezeTableName: true,
tableName: 'Tasks',
createdAt: false,
updatedAt: false
})
Task.changeSchema = schema => Task.schema(schema)
Task.associate = models => {
Task.belongsTo(models.TaskType, {
as: 'taskType',
foreignKey: 'taskTypeId'
})
}


return Task
}


And Stop at this problem



SELECT
`Task`.`Id` AS `id`,
`Task`.`Description` AS `description`,
`Task`.`Done` AS `done`,
`Task`.`TaskTypeId` AS `taskTypeId`,
`Task`.`UserId` AS `userId`,
`taskType`.`Id` AS `taskType.id`,
`taskType`.`Description` AS `taskType.description`
FROM `tenant_1.Tasks` AS `Task` LEFT OUTER JOIN `shared.TaskTypes` AS `taskType`
ON `Task`.`TaskTypeId` = `taskType`.`Id`
WHERE `Task`.`UserId` = 1;


as you see, FROM `tenant_1.Tasks` in mysql is a wrong syntax. it must be FROM `tenant_1`.`Tasks`



how to change `tenant_1.Tasks` to `tenant_1`.`Tasks`










share|improve this question














I'm Working on Multi-tenant Application (SAAS) with Shared Database Isolated Schema principle.



I've tried solution from https://github.com/renatoargh/data-isolation-example



from this article https://renatoargh.wordpress.com/2018/01/10/logical-data-isolation-for-multi-tenant-architecture-using-node-express-and-sequelize/



This is My Sequelize Model using schema Option



module.exports = (sequelize, DataTypes) => {
const Task = sequelize.define('Task', {
id: {
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true,
field: 'Id'
},

description: {
type: DataTypes.STRING(100),
allowNull: false,
field: 'Description'
},

done: {
type: DataTypes.BOOLEAN,
allowNull: false,
default: false,
field: 'Done'
},

taskTypeId: {
type: DataTypes.INTEGER,
allowNull: true,
field: 'TaskTypeId'
},

userId: {
type: DataTypes.INTEGER,
allowNull: true,
field: 'UserId'
}
}, {
freezeTableName: true,
tableName: 'Tasks',
createdAt: false,
updatedAt: false
})
Task.changeSchema = schema => Task.schema(schema)
Task.associate = models => {
Task.belongsTo(models.TaskType, {
as: 'taskType',
foreignKey: 'taskTypeId'
})
}


return Task
}


And Stop at this problem



SELECT
`Task`.`Id` AS `id`,
`Task`.`Description` AS `description`,
`Task`.`Done` AS `done`,
`Task`.`TaskTypeId` AS `taskTypeId`,
`Task`.`UserId` AS `userId`,
`taskType`.`Id` AS `taskType.id`,
`taskType`.`Description` AS `taskType.description`
FROM `tenant_1.Tasks` AS `Task` LEFT OUTER JOIN `shared.TaskTypes` AS `taskType`
ON `Task`.`TaskTypeId` = `taskType`.`Id`
WHERE `Task`.`UserId` = 1;


as you see, FROM `tenant_1.Tasks` in mysql is a wrong syntax. it must be FROM `tenant_1`.`Tasks`



how to change `tenant_1.Tasks` to `tenant_1`.`Tasks`







mysql node.js mariadb sequelize.js multi-tenant






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Jan 3 at 8:21









veirryAuveirryAu

11




11













  • how about if you use directly from FROM tenant_1.Tasks to Tasks

    – Vijunav Vastivch
    Jan 3 at 8:35













  • it works, but i want it can be dynamicly change to tenant_1.Tasks, tenant_2.Tasks, tenant_3.Tasks

    – veirryAu
    Jan 3 at 8:43











  • It seems like you need to use Execute command see this dev.mysql.com/doc/refman/8.0/en/…

    – Vijunav Vastivch
    Jan 3 at 8:51











  • How to use it in sequelize ?

    – veirryAu
    Jan 3 at 8:57











  • I am not a sequelize expert just need to ask about this tenant_1 is your Databasename?

    – Vijunav Vastivch
    Jan 3 at 9:11



















  • how about if you use directly from FROM tenant_1.Tasks to Tasks

    – Vijunav Vastivch
    Jan 3 at 8:35













  • it works, but i want it can be dynamicly change to tenant_1.Tasks, tenant_2.Tasks, tenant_3.Tasks

    – veirryAu
    Jan 3 at 8:43











  • It seems like you need to use Execute command see this dev.mysql.com/doc/refman/8.0/en/…

    – Vijunav Vastivch
    Jan 3 at 8:51











  • How to use it in sequelize ?

    – veirryAu
    Jan 3 at 8:57











  • I am not a sequelize expert just need to ask about this tenant_1 is your Databasename?

    – Vijunav Vastivch
    Jan 3 at 9:11

















how about if you use directly from FROM tenant_1.Tasks to Tasks

– Vijunav Vastivch
Jan 3 at 8:35







how about if you use directly from FROM tenant_1.Tasks to Tasks

– Vijunav Vastivch
Jan 3 at 8:35















it works, but i want it can be dynamicly change to tenant_1.Tasks, tenant_2.Tasks, tenant_3.Tasks

– veirryAu
Jan 3 at 8:43





it works, but i want it can be dynamicly change to tenant_1.Tasks, tenant_2.Tasks, tenant_3.Tasks

– veirryAu
Jan 3 at 8:43













It seems like you need to use Execute command see this dev.mysql.com/doc/refman/8.0/en/…

– Vijunav Vastivch
Jan 3 at 8:51





It seems like you need to use Execute command see this dev.mysql.com/doc/refman/8.0/en/…

– Vijunav Vastivch
Jan 3 at 8:51













How to use it in sequelize ?

– veirryAu
Jan 3 at 8:57





How to use it in sequelize ?

– veirryAu
Jan 3 at 8:57













I am not a sequelize expert just need to ask about this tenant_1 is your Databasename?

– Vijunav Vastivch
Jan 3 at 9:11





I am not a sequelize expert just need to ask about this tenant_1 is your Databasename?

– Vijunav Vastivch
Jan 3 at 9:11












0






active

oldest

votes












Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54018609%2fdynamic-define-database-in-sequelize-for-multi-tenant-support-return-wrong-query%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54018609%2fdynamic-define-database-in-sequelize-for-multi-tenant-support-return-wrong-query%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

MongoDB - Not Authorized To Execute Command

in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith

How to fix TextFormField cause rebuild widget in Flutter