mirror of
https://github.com/lana-k/sqliteviz.git
synced 2025-12-06 18:18:53 +08:00
add dataBase lib
This commit is contained in:
@@ -57,8 +57,7 @@ export default {
|
|||||||
components: { TableDescription, TextField },
|
components: { TableDescription, TextField },
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
schemaVisible: true,
|
schemaVisible: true
|
||||||
worker: this.$store.state.worker
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@@ -71,29 +70,7 @@ export default {
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
changeDb () {
|
changeDb () {
|
||||||
const dbName = this.$refs.dbfile.value.substr(this.$refs.dbfile.value.lastIndexOf('\\') + 1)
|
this.$db.loadDb(this.$refs.dbfile.files[0])
|
||||||
this.$store.commit('saveDbName', dbName)
|
|
||||||
const f = this.$refs.dbfile.files[0]
|
|
||||||
const r = new FileReader()
|
|
||||||
r.onload = () => {
|
|
||||||
this.worker.onmessage = () => {
|
|
||||||
const getSchemaSql = `
|
|
||||||
SELECT name, sql
|
|
||||||
FROM sqlite_master
|
|
||||||
WHERE type='table' AND name NOT LIKE 'sqlite_%';`
|
|
||||||
this.worker.onmessage = event => {
|
|
||||||
this.$store.commit('saveSchema', event.data.results[0].values)
|
|
||||||
}
|
|
||||||
this.worker.postMessage({ action: 'exec', sql: getSchemaSql })
|
|
||||||
}
|
|
||||||
this.$store.commit('saveDbFile', r.result)
|
|
||||||
try {
|
|
||||||
this.worker.postMessage({ action: 'open', buffer: r.result }, [r.result])
|
|
||||||
} catch (exception) {
|
|
||||||
this.worker.postMessage({ action: 'open', buffer: r.result })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
r.readAsArrayBuffer(f)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -89,7 +89,6 @@ export default {
|
|||||||
result: null,
|
result: null,
|
||||||
view: 'table',
|
view: 'table',
|
||||||
tableViewHeight: 0,
|
tableViewHeight: 0,
|
||||||
worker: this.$store.state.worker,
|
|
||||||
isUnsaved: !this.name
|
isUnsaved: !this.name
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -164,18 +163,10 @@ export default {
|
|||||||
},
|
},
|
||||||
// Run a command in the database
|
// Run a command in the database
|
||||||
execute (commands) {
|
execute (commands) {
|
||||||
this.worker.onmessage = (event) => {
|
// this.$refs.output.textContent = 'Fetching results...' */
|
||||||
// if it was more than one select - take only the first one
|
this.$db.execute(commands)
|
||||||
this.result = event.data.results[0]
|
.then(result => { this.result = result })
|
||||||
if (!this.result) {
|
.catch(err => alert(err))
|
||||||
console.log(event.data.error)
|
|
||||||
// return
|
|
||||||
}
|
|
||||||
|
|
||||||
// this.$refs.output.innerHTML = ''
|
|
||||||
}
|
|
||||||
this.worker.postMessage({ action: 'exec', sql: commands })
|
|
||||||
// this.$refs.output.textContent = 'Fetching results...'
|
|
||||||
},
|
},
|
||||||
execEditorContents () {
|
execEditorContents () {
|
||||||
this.execute(this.query + ';')
|
this.execute(this.query + ';')
|
||||||
|
|||||||
46
src/dataBase.js
Normal file
46
src/dataBase.js
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
import store from '@/store'
|
||||||
|
import router from '@/router'
|
||||||
|
const worker = new Worker('js/worker.sql-wasm.js')
|
||||||
|
|
||||||
|
export default {
|
||||||
|
loadDb (file) {
|
||||||
|
const dbName = file.name
|
||||||
|
store.commit('saveDbName', dbName)
|
||||||
|
const f = file
|
||||||
|
const r = new FileReader()
|
||||||
|
r.onload = () => {
|
||||||
|
worker.onmessage = () => {
|
||||||
|
const getSchemaSql = `
|
||||||
|
SELECT name, sql
|
||||||
|
FROM sqlite_master
|
||||||
|
WHERE type='table' AND name NOT LIKE 'sqlite_%';`
|
||||||
|
worker.onmessage = event => {
|
||||||
|
store.commit('saveSchema', event.data.results[0].values)
|
||||||
|
if (router.currentRoute.path !== '/editor') {
|
||||||
|
router.push('/editor')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
worker.postMessage({ action: 'exec', sql: getSchemaSql })
|
||||||
|
}
|
||||||
|
store.commit('saveDbFile', r.result)
|
||||||
|
try {
|
||||||
|
worker.postMessage({ action: 'open', buffer: r.result }, [r.result])
|
||||||
|
} catch (exception) {
|
||||||
|
worker.postMessage({ action: 'open', buffer: r.result })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
r.readAsArrayBuffer(f)
|
||||||
|
},
|
||||||
|
execute (commands) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
worker.onmessage = (event) => {
|
||||||
|
if (event.data.error) {
|
||||||
|
reject(event.data.error)
|
||||||
|
}
|
||||||
|
// if it was more than one select - take only the first one
|
||||||
|
resolve(event.data.results[0])
|
||||||
|
}
|
||||||
|
worker.postMessage({ action: 'exec', sql: commands })
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@ import router from './router'
|
|||||||
import store from './store'
|
import store from './store'
|
||||||
import { VuePlugin } from 'vuera'
|
import { VuePlugin } from 'vuera'
|
||||||
import VModal from 'vue-js-modal'
|
import VModal from 'vue-js-modal'
|
||||||
|
import db from '@/dataBase'
|
||||||
|
|
||||||
import '@/assets/styles/variables.css'
|
import '@/assets/styles/variables.css'
|
||||||
import '@/assets/styles/buttons.css'
|
import '@/assets/styles/buttons.css'
|
||||||
@@ -14,6 +15,7 @@ Vue.use(VuePlugin)
|
|||||||
Vue.use(VModal)
|
Vue.use(VModal)
|
||||||
|
|
||||||
Vue.config.productionTip = false
|
Vue.config.productionTip = false
|
||||||
|
Vue.prototype.$db = db
|
||||||
|
|
||||||
new Vue({
|
new Vue({
|
||||||
router,
|
router,
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ export default new Vuex.Store({
|
|||||||
schema: null,
|
schema: null,
|
||||||
dbFile: null,
|
dbFile: null,
|
||||||
dbName: null,
|
dbName: null,
|
||||||
worker: new Worker('js/worker.sql-wasm.js'),
|
|
||||||
tabs: [],
|
tabs: [],
|
||||||
currentTab: null,
|
currentTab: null,
|
||||||
currentTabId: null,
|
currentTabId: null,
|
||||||
|
|||||||
@@ -25,41 +25,13 @@
|
|||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
name: 'DbUpload',
|
name: 'DbUpload',
|
||||||
data () {
|
|
||||||
return {
|
|
||||||
worker: this.$store.state.worker
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
methods: {
|
||||||
loadDb () {
|
loadDb () {
|
||||||
const dbName = this.$refs.file.value.substr(this.$refs.file.value.lastIndexOf('\\') + 1)
|
this.$db.loadDb(this.$refs.file.files[0])
|
||||||
this.$store.commit('saveDbName', dbName)
|
|
||||||
const f = this.$refs.file.files[0]
|
|
||||||
const r = new FileReader()
|
|
||||||
r.onload = () => {
|
|
||||||
this.worker.onmessage = () => {
|
|
||||||
const getSchemaSql = `
|
|
||||||
SELECT name, sql
|
|
||||||
FROM sqlite_master
|
|
||||||
WHERE type='table' AND name NOT LIKE 'sqlite_%';`
|
|
||||||
this.worker.onmessage = event => {
|
|
||||||
this.$store.commit('saveSchema', event.data.results[0].values)
|
|
||||||
this.$router.push('/editor')
|
|
||||||
}
|
|
||||||
this.worker.postMessage({ action: 'exec', sql: getSchemaSql })
|
|
||||||
}
|
|
||||||
this.$store.commit('saveDbFile', r.result)
|
|
||||||
try {
|
|
||||||
this.worker.postMessage({ action: 'open', buffer: r.result }, [r.result])
|
|
||||||
} catch (exception) {
|
|
||||||
this.worker.postMessage({ action: 'open', buffer: r.result })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
r.readAsArrayBuffer(f)
|
|
||||||
},
|
},
|
||||||
dragover (event) {
|
dragover (event) {
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
// TODO: Add some visual fluff to show the user can drop its files
|
// TODO: Add some visual stuff to show the user can drop its files
|
||||||
if (!event.currentTarget.classList.contains('bg-green-300')) {
|
if (!event.currentTarget.classList.contains('bg-green-300')) {
|
||||||
event.currentTarget.classList.remove('bg-gray-100')
|
event.currentTarget.classList.remove('bg-gray-100')
|
||||||
event.currentTarget.classList.add('bg-green-300')
|
event.currentTarget.classList.add('bg-green-300')
|
||||||
|
|||||||
Reference in New Issue
Block a user