-
Notifications
You must be signed in to change notification settings - Fork 354
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: fixed material generation and database connection for components #1152
base: develop
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -15,9 +15,9 @@ dotenv.config({ path: `${pathsDotenv}.local` }) | |||||
const { SQL_HOST, SQL_PORT, SQL_USER, SQL_PASSWORD, SQL_DATABASE } = process.env | ||||||
|
||||||
// 组件表名称 | ||||||
const componentsTableName = 'user_components' | ||||||
const componentsTableName = 't_component' | ||||||
// 组件关联到物料资产包的id | ||||||
const materialHistoryId = 639 | ||||||
const materialHistoryId = 1 | ||||||
// 数据库配置 | ||||||
const mysqlConfig = { | ||||||
host: SQL_HOST, // 主机名(服务器地址) | ||||||
|
@@ -202,9 +202,10 @@ class MysqlConnection { | |||||
|
||||||
/** | ||||||
* 新建的组件关联物料资产包 | ||||||
* @deprecated 物料资产包已废弃,使用relationMaterialHistory替代 | ||||||
* @param {number} id 新建的组件id | ||||||
*/ | ||||||
relationMaterialHistory(id) { | ||||||
relationMaterialBlockHistory(id) { | ||||||
const uniqSql = `SELECT * FROM \`material_histories_components__user_components_mhs\` WHERE \`material-history_id\`=${materialHistoryId} AND \`user-component_id\`=${id}` | ||||||
this.query(uniqSql).then((result) => { | ||||||
if (!result.length) { | ||||||
|
@@ -215,6 +216,20 @@ class MysqlConnection { | |||||
}) | ||||||
} | ||||||
|
||||||
/** | ||||||
* 新建的组件关联物料资产包 | ||||||
* @param {number} id 新建的组件id | ||||||
*/ | ||||||
relationMaterialHistory(id) { | ||||||
const uniqSql = `SELECT * FROM \`r_material_history_component\` WHERE \`material_history_id\`=${materialHistoryId} AND \`component_id\`=${id}` | ||||||
this.query(uniqSql).then((result) => { | ||||||
if (!result.length) { | ||||||
const sqlContent = `INSERT INTO \`r_material_history_component\` (\`material_history_id\`, \`component_id\`) VALUES (${materialHistoryId}, ${id})` | ||||||
this.query(sqlContent) | ||||||
} | ||||||
}) | ||||||
} | ||||||
|
||||||
/** | ||||||
* 生成新增组件的sql语句 | ||||||
* @param {object} component 组件数据 | ||||||
|
@@ -282,10 +297,15 @@ class MysqlConnection { | |||||
isOfficial = 0, | ||||||
isDefault = 0, | ||||||
tiny_reserved = 0, | ||||||
tenant = 1, | ||||||
createBy = 86, | ||||||
updatedBy = 86 | ||||||
component_metadata = null, | ||||||
library_id = 1, | ||||||
tenant_id = 1, | ||||||
renter_id = 1, | ||||||
site_id = 1, | ||||||
created_by = 1, | ||||||
last_updated_by = 1 | ||||||
} = component | ||||||
|
||||||
const values = `('${version}', | ||||||
'${this.formatSingleQuoteValue(JSON.stringify(name))}', | ||||||
'${componentName}', | ||||||
|
@@ -308,15 +328,19 @@ class MysqlConnection { | |||||
'${isOfficial}', | ||||||
'${isDefault}', | ||||||
'${tiny_reserved}', | ||||||
'${tenant}', | ||||||
'${createBy}', | ||||||
'${updatedBy}' | ||||||
'${component_metadata}', | ||||||
'${library_id}', | ||||||
'${tenant_id}', | ||||||
'${renter_id}', | ||||||
'${site_id}', | ||||||
'${created_by}', | ||||||
'${last_updated_by}' | ||||||
);` | ||||||
|
||||||
const sqlContent = `INSERT INTO ${componentsTableName} (version, name, component, icon, description, doc_url, | ||||||
const sqlContent = `INSERT INTO ${componentsTableName} (version, name, name_en, icon, description, doc_url, | ||||||
screenshot, tags, keywords, dev_mode, npm, \`group\`, \`category\`, priority, snippets, | ||||||
schema_fragment, configure, \`public\`, framework, isOfficial, isDefault, tiny_reserved, | ||||||
tenant, createdBy, updatedBy) VALUES ${values}`.replace(/\n/g, '') | ||||||
schema_fragment, configure, \`public\`, framework, is_official, is_default, tiny_reserved,component_metadata, | ||||||
library_id, tenant_id, renter_id, site_id, created_by, last_updated_by) VALUES ${values}`.replace(/\n/g, '') | ||||||
Comment on lines
+340
to
+343
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Schema mismatch for “name_en” and “component_metadata”. A possible fix in your CREATE TABLE statement might be: CREATE TABLE t_component (
...
+ name_en varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
component_metadata longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
...
);
|
||||||
|
||||||
this.query(sqlContent, componentName) | ||||||
.then((result) => { | ||||||
|
@@ -335,7 +359,7 @@ class MysqlConnection { | |||||
* @param {object} component 组件数据 | ||||||
*/ | ||||||
initDB(component) { | ||||||
const selectSqlContent = `SELECT * FROM ${this.config.database}.${componentsTableName} WHERE component = '${component.component}'` | ||||||
const selectSqlContent = `SELECT * FROM ${this.config.database}.${componentsTableName} WHERE name_en = '${component.component}'` | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Mismatch between “name_en” and “component.component”. Apply this diff to maintain consistency with the actual stored column and data: - const selectSqlContent = `SELECT * FROM ${this.config.database}.${componentsTableName} WHERE name_en = '${component.component}'`
+ const selectSqlContent = `SELECT * FROM ${this.config.database}.${componentsTableName} WHERE component = '${component.component}'` 📝 Committable suggestion
Suggested change
|
||||||
|
||||||
this.query(selectSqlContent) | ||||||
.then((result) => { | ||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use parameterized queries to prevent SQL injection.
Directly concatenating
id
into the SQL statement may be risky if the value is not guaranteed to be an integer. Parameterized queries will secure this method and help avoid potential injection vulnerabilities.Possible fix using placeholders (for example in MySQL Node libraries):