From 3298a1f44af6d8ba51c23c775c7dd7fee7db8344 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=9B=A7=E5=9B=A7?= Date: Sat, 17 Aug 2024 15:54:44 -0400 Subject: [PATCH] Fix #203 (#207) --- .../ImporterView/ImporterMainView.vue | 29 ++++++++++++------- src/utils/DataDefinitionLanguage.js | 5 ++-- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/components/ImporterView/ImporterMainView.vue b/src/components/ImporterView/ImporterMainView.vue index 528e0ae..b04451c 100644 --- a/src/components/ImporterView/ImporterMainView.vue +++ b/src/components/ImporterView/ImporterMainView.vue @@ -213,6 +213,20 @@ export default { delete this.files[key]; }, + escapeName(name) { + let nameSplit = name.split('.'); + name = nameSplit.join('_'); + nameSplit = name.split('-'); + name = nameSplit.join('_'); + nameSplit = name.split(' '); + name = nameSplit.join('_'); + nameSplit = name.split('"'); + name = nameSplit.join('_'); + nameSplit = name.split("'"); + name = nameSplit.join('_'); + return name; + }, + async handleFilesSelected(files) { this.$refs.fileProcessingModal.showModal(); const filesHash = {}; @@ -264,15 +278,8 @@ export default { currentFile.detectedFormat = detectedFormat; let tableNameSplit = currentFile.file.name.split('.'); tableNameSplit.pop(); - currentFile.tableName = tableNameSplit.join('_'); - tableNameSplit = currentFile.tableName.split('-'); - currentFile.tableName = tableNameSplit.join('_'); - tableNameSplit = currentFile.tableName.split(' '); - currentFile.tableName = tableNameSplit.join('_'); - tableNameSplit = currentFile.tableName.split('"'); - currentFile.tableName = tableNameSplit.join('_'); - tableNameSplit = currentFile.tableName.split("'"); - currentFile.tableName = tableNameSplit.join('_'); + currentFile.tableName = tableNameSplit.join('.'); + currentFile.tableName = this.escapeName(currentFile.tableName); currentFile.format = JSON.parse(JSON.stringify(detectedFormat)); if (extension === 'csv') { currentFile.format.ListStart = '['; @@ -281,7 +288,7 @@ export default { } currentFile.format.Columns.forEach((c, i) => { c.type = DuckDB.convertDuckDBTypeToKuzuType(c.type); - c.userDefinedName = c.name; + c.userDefinedName = this.escapeName(c.name); c.name = currentFile.format.HasHeader ? c.name : `column${i}`; c.isPrimaryKey = false; }); @@ -356,7 +363,7 @@ export default { columns.forEach((c, i) => { c.type = DuckDB.convertDuckDBTypeToKuzuType(c.type); c.name = hasHeader ? c.name : `column${i}`; - c.userDefinedName = c.name; + c.userDefinedName = this.escapeName(c.name); }); file.format.Delimiter = delimiter; file.format.Quote = quote; diff --git a/src/utils/DataDefinitionLanguage.js b/src/utils/DataDefinitionLanguage.js index 1e0fc6a..2857bc4 100644 --- a/src/utils/DataDefinitionLanguage.js +++ b/src/utils/DataDefinitionLanguage.js @@ -3,7 +3,7 @@ class DataDefinitionLanguage { if (!name) { return ""; } - if (name.includes(" ")) { + if (name.includes(" ") || name.includes(".")) { return `\`${name}\``; } return name; @@ -44,6 +44,7 @@ class DataDefinitionLanguage { dropProperty(tableName, columnName) { tableName = this._escapeName(tableName); + columnName = this._escapeName(columnName); return `ALTER TABLE ${tableName} DROP ${columnName};`; } @@ -184,7 +185,7 @@ class DataDefinitionLanguage { } let returnStatement = "RETURN " + (columnMapping.map((mapping) => { - return `CAST(${mapping.rawName} AS ${mapping.type})`; + return `CAST(${this._escapeName(mapping.rawName)} AS ${mapping.type})`; }).join(", ")); loadStatement += ` ${returnStatement}`; statement += `(${loadStatement});`;