option to open database as read-only
This commit is contained in:
parent
142f3f6bf4
commit
7441e0c15b
4
main.go
4
main.go
@ -26,9 +26,11 @@ func GetMagic() int64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//export Bolt_Open
|
//export Bolt_Open
|
||||||
func Bolt_Open(path string) (ObjectReference, *C.char, int) {
|
func Bolt_Open(readOnly bool, path string) (ObjectReference, *C.char, int) {
|
||||||
opts := *bolt.DefaultOptions
|
opts := *bolt.DefaultOptions
|
||||||
opts.Timeout = 10 * time.Second
|
opts.Timeout = 10 * time.Second
|
||||||
|
opts.ReadOnly = readOnly
|
||||||
|
|
||||||
ptrDB, err := bolt.Open(path, os.FileMode(0644), &opts)
|
ptrDB, err := bolt.Open(path, os.FileMode(0644), &opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errMsg := err.Error()
|
errMsg := err.Error()
|
||||||
|
@ -7,12 +7,12 @@ BoltDB::BoltDB()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BoltDB* BoltDB::createFrom(QString filePath, QString &errorOut)
|
BoltDB* BoltDB::createFrom(QString filePath, bool readOnly, QString &errorOut)
|
||||||
{
|
{
|
||||||
QByteArray filePathBytes(filePath.toUtf8());
|
QByteArray filePathBytes(filePath.toUtf8());
|
||||||
GoString filePathGS = Interop::toGoString_WeakRef(&filePathBytes);
|
GoString filePathGS = Interop::toGoString_WeakRef(&filePathBytes);
|
||||||
|
|
||||||
auto open_ret = ::Bolt_Open(filePathGS);
|
auto open_ret = ::Bolt_Open(readOnly, filePathGS);
|
||||||
if (open_ret.r2 != 0) {
|
if (open_ret.r2 != 0) {
|
||||||
errorOut = QString::fromUtf8(open_ret.r1, open_ret.r2);
|
errorOut = QString::fromUtf8(open_ret.r1, open_ret.r2);
|
||||||
free(open_ret.r1);
|
free(open_ret.r1);
|
||||||
|
@ -14,7 +14,7 @@ protected:
|
|||||||
GoInt64 gmsDbRef;
|
GoInt64 gmsDbRef;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static BoltDB* createFrom(QString filePath, QString &errorOut);
|
static BoltDB* createFrom(QString filePath, bool readOnly, QString &errorOut);
|
||||||
|
|
||||||
bool listBucketsAtRoot(QString& errorOut, NameReciever cb);
|
bool listBucketsAtRoot(QString& errorOut, NameReciever cb);
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ void MainWindow::on_actionNew_database_triggered()
|
|||||||
{
|
{
|
||||||
QString file = QFileDialog::getSaveFileName(this, tr("Save new bolt database as..."));
|
QString file = QFileDialog::getSaveFileName(this, tr("Save new bolt database as..."));
|
||||||
if (file.length()) {
|
if (file.length()) {
|
||||||
openDatabase(file);
|
openDatabase(file, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,15 +50,23 @@ void MainWindow::on_actionOpen_database_triggered()
|
|||||||
{
|
{
|
||||||
QString file = QFileDialog::getOpenFileName(this, tr("Select bolt database..."));
|
QString file = QFileDialog::getOpenFileName(this, tr("Select bolt database..."));
|
||||||
if (file.length()) {
|
if (file.length()) {
|
||||||
openDatabase(file);
|
openDatabase(file, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::openDatabase(QString file)
|
void MainWindow::on_actionOpen_database_as_read_only_triggered()
|
||||||
|
{
|
||||||
|
QString file = QFileDialog::getOpenFileName(this, tr("Select bolt database..."));
|
||||||
|
if (file.length()) {
|
||||||
|
openDatabase(file, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::openDatabase(QString file, bool readOnly)
|
||||||
{
|
{
|
||||||
// Open
|
// Open
|
||||||
QString error;
|
QString error;
|
||||||
auto *bdb = BoltDB::createFrom(file, error);
|
auto *bdb = BoltDB::createFrom(file, readOnly, error);
|
||||||
if (bdb == nullptr) {
|
if (bdb == nullptr) {
|
||||||
QMessageBox qmb;
|
QMessageBox qmb;
|
||||||
qmb.setText(tr("Error opening database: %1").arg(error));
|
qmb.setText(tr("Error opening database: %1").arg(error));
|
||||||
|
@ -51,8 +51,10 @@ private slots:
|
|||||||
|
|
||||||
void on_bucketData_itemSelectionChanged();
|
void on_bucketData_itemSelectionChanged();
|
||||||
|
|
||||||
|
void on_actionOpen_database_as_read_only_triggered();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void openDatabase(QString file);
|
void openDatabase(QString file, bool readOnly);
|
||||||
void refreshBucketTree(QTreeWidgetItem* top);
|
void refreshBucketTree(QTreeWidgetItem* top);
|
||||||
void refreshData(BoltDB *bdb, QStringList browse);
|
void refreshData(BoltDB *bdb, QStringList browse);
|
||||||
void openEditor(BoltDB *bdb, QStringList saveAs, QByteArray saveAsKey, QByteArray currentContent);
|
void openEditor(BoltDB *bdb, QStringList saveAs, QByteArray saveAsKey, QByteArray currentContent);
|
||||||
|
@ -278,6 +278,7 @@
|
|||||||
</property>
|
</property>
|
||||||
<addaction name="actionNew_database"/>
|
<addaction name="actionNew_database"/>
|
||||||
<addaction name="actionOpen_database"/>
|
<addaction name="actionOpen_database"/>
|
||||||
|
<addaction name="actionOpen_database_as_read_only"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="actionExit"/>
|
<addaction name="actionExit"/>
|
||||||
</widget>
|
</widget>
|
||||||
@ -395,6 +396,11 @@
|
|||||||
<string>Add bucket...</string>
|
<string>Add bucket...</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="actionOpen_database_as_read_only">
|
||||||
|
<property name="text">
|
||||||
|
<string>Open database as read-only...</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
</widget>
|
</widget>
|
||||||
<layoutdefault spacing="6" margin="11"/>
|
<layoutdefault spacing="6" margin="11"/>
|
||||||
<resources>
|
<resources>
|
||||||
|
Loading…
Reference in New Issue
Block a user