Skip to content

Commit 6103bab

Browse files
committed
- use sql.js instead SQLite WASM
- open DB
1 parent 8b23a6d commit 6103bab

5 files changed

Lines changed: 62 additions & 20 deletions

File tree

frontend/package-lock.json

Lines changed: 7 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frontend/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"preview": "vite preview"
1313
},
1414
"dependencies": {
15-
"@sqlite.org/sqlite-wasm": "^3.47.0-build1",
15+
"sql.js": "^1.13.0",
1616
"vue": "^3.5.25"
1717
},
1818
"devDependencies": {

frontend/src/App.vue

Lines changed: 53 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,61 @@
11
<script setup>
2-
import { ref } from 'vue'
2+
import { ref, onMounted } from 'vue'
3+
import initSqlJs from 'sql.js';
34
import HelloWorld from './components/HelloWorld.vue'
45
import FileUploader from './components/FileUploader.vue'
56
import CoinList from "@/components/CoinList.vue";
67
78
const selectedFile = ref(null)
89
9-
const handleFile = (file) => {
10-
console.log(file);
11-
selectedFile.value = file;
10+
const db = ref(null);
11+
const status = ref('');
12+
13+
let SQL = null;
14+
15+
onMounted(async () => {
16+
try {
17+
SQL = await initSqlJs({
18+
locateFile: file => `https://sql.js.org/dist/${file}`
19+
});
20+
status.value = 'SQL.js loaded successfully';
21+
} catch (err) {
22+
console.error('Failed to load SQL.js:', err);
23+
status.value = 'Failed to load SQL.js';
24+
}
25+
});
26+
27+
const handleFileUpload = async (file) => {
28+
if (!file) return;
29+
30+
status.value = 'Loading database...';
31+
32+
const reader = new FileReader();
33+
34+
reader.onload = async (e) => {
35+
try {
36+
const arrayBuffer = e.target.result;
37+
const uint8Array = new Uint8Array(arrayBuffer);
38+
39+
// Load database
40+
db.value = new SQL.Database(uint8Array);
41+
42+
const result = db.value.exec(`SELECT COUNT(*) FROM coins`);
43+
console.log(`Coins in database: ${result[0].values[0][0]}`);
44+
45+
status.value = `Database loaded successfully: ${file.name} (${(file.size / 1024 / 1024).toFixed(2)} MB)`;
46+
47+
selectedFile.value = file;
48+
} catch (err) {
49+
console.error('Error loading database:', err);
50+
status.value = 'Error loading database';
51+
}
52+
};
53+
54+
reader.onerror = () => {
55+
status.value = `Error reading file`;
56+
};
57+
58+
reader.readAsArrayBuffer(file);
1259
};
1360
</script>
1461

@@ -23,12 +70,13 @@ const handleFile = (file) => {
2370

2471
<main>
2572
<div v-if="!selectedFile" class="select-view">
26-
<FileUploader :handleFile="handleFile" />
73+
<FileUploader :handleFile="handleFileUpload" />
2774
<p>Your file not will be uploaded to the internet. You can disable internet connection.</p>
2875
</div>
2976
<div v-else class="file-view">
3077
<CoinList :file_name="selectedFile.name" />
3178
</div>
79+
<div v-if="status" class="status">{{ status }}</div>
3280
</main>
3381
</template>
3482

frontend/src/components/FileUploader.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ const handleFileUpload = (event) => {
1818
<label for="file-input" class="btn">
1919
Select an OpenNumismat collection file (*.db):
2020
</label>
21-
<input id="file-input" type="file" @change="handleFileUpload">
21+
<input id="file-input" type="file" @change="handleFileUpload" accept=".db" ref="fileInput">
2222
</template>
2323

2424
<style scoped>

frontend/vite.config.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,4 @@ export default defineConfig({
2121
'Cross-Origin-Embedder-Policy': 'require-corp',
2222
},
2323
},
24-
optimizeDeps: {
25-
exclude: ['@sqlite.org/sqlite-wasm'],
26-
},
2724
})

0 commit comments

Comments
 (0)