add a input area for arbitrary SQL on the test page

This commit is contained in:
2025-05-25 20:27:06 -06:00
parent bea5f78171
commit 28b24f6c5d
2 changed files with 63 additions and 4 deletions

View File

@@ -161,6 +161,38 @@
</button>
</div>
<div class="mt-8">
<h2 class="text-xl font-bold mb-4">SQL Operations</h2>
<div class="mb-4">
<div class="flex gap-2 mb-2">
<button
class="text-sm text-blue-600 hover:text-blue-800 underline"
@click="sqlQuery = 'SELECT * FROM sqlite_master WHERE type=\'table\';'"
>
All Tables
</button>
</div>
<textarea
v-model="sqlQuery"
class="w-full h-32 p-2 border border-gray-300 rounded-md font-mono"
placeholder="Enter your SQL query here..."
></textarea>
</div>
<div class="mb-4">
<button
class="font-bold capitalize bg-slate-500 text-white px-3 py-2 rounded-md mr-2"
@click="executeSql"
>
Execute
</button>
</div>
<div v-if="sqlResult" class="mt-4">
<h3 class="text-lg font-semibold mb-2">Result:</h3>
<pre class="bg-gray-100 p-4 rounded-md overflow-x-auto">{{ JSON.stringify(sqlResult, null, 2) }}</pre>
</div>
</div>
<div class="mt-8">
<h2 class="text-xl font-bold mb-4">Image Sharing</h2>
Populates the "shared-photo" view as if they used "share_target".
@@ -271,6 +303,7 @@ import { AppString, NotificationIface } from "../constants/app";
import { db, retrieveSettingsForActiveAccount } from "../db/index";
import * as vcLib from "../libs/crypto/vc";
import * as cryptoLib from "../libs/crypto";
import databaseService from "../services/database";
import {
PeerSetup,
@@ -316,6 +349,10 @@ export default class Help extends Vue {
peerSetup?: PeerSetup;
userName?: string;
// for SQL operations
sqlQuery = "";
sqlResult: any = null;
cryptoLib = cryptoLib;
async mounted() {
@@ -492,5 +529,28 @@ export default class Help extends Vue {
);
logger.log("decoded", decoded);
}
async executeSql() {
try {
const isSelect = this.sqlQuery.trim().toLowerCase().startsWith('select');
if (isSelect) {
this.sqlResult = await databaseService.query(this.sqlQuery);
} else {
this.sqlResult = await databaseService.run(this.sqlQuery);
}
console.log("SQL Result:", this.sqlResult);
} catch (error) {
console.error("SQL Error:", error);
this.$notify(
{
group: "alert",
type: "danger",
title: "SQL Error",
text: error instanceof Error ? error.message : String(error),
},
5000
);
}
}
}
</script>