forked from laurent22/joplin
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added better-sqlite database driver, although we cannot use it for now
- Loading branch information
Showing
1 changed file
with
52 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
// This is a driver for better-sqlite3. It may be interesting to use it instead | ||
// of node-sqlite because it breaks all the time when we try to compile any app. | ||
// The performance improvement probably won't matter. | ||
// | ||
// The issue however is that better-sqlite3 uses the option SQLITE_DQS=0, which | ||
// disallows using double quotes around strings, and that's what we're using | ||
// everywhere. So the only way to make it work would be to do a custom | ||
// compilation, as described there, and set SQLITE_DQS=1: | ||
// | ||
// https://github.com/JoshuaWise/better-sqlite3/blob/master/docs/compilation.md | ||
|
||
const Database = require('better-sqlite3'); | ||
|
||
interface Options { | ||
name: string; | ||
} | ||
|
||
export default class DatabaseDriverBetterSqlite { | ||
|
||
private db_: any = null; | ||
|
||
public open(options: Options) { | ||
this.db_ = new Database(options.name); | ||
} | ||
|
||
public sqliteErrorToJsError(error: any, sql: string = null, params: any[] = null) { | ||
console.error(error.toString(), ' ---- ', sql, params); | ||
|
||
const msg = [error.toString()]; | ||
if (sql) msg.push(sql); | ||
if (params) msg.push(params); | ||
const output: any = new Error(msg.join(': ')); | ||
if (error.code) output.code = error.code; | ||
return output; | ||
} | ||
|
||
public async selectOne(sql: string, params: any[] = null) { | ||
return this.db_.prepare(sql).get(params ? params : []); | ||
} | ||
|
||
public async selectAll(sql: string, params: any[] = null) { | ||
return this.db_.prepare(sql).all(params ? params : []); | ||
} | ||
|
||
public async exec(sql: string, params: any[] = null) { | ||
return this.db_.prepare(sql).run(params ? params : []); | ||
} | ||
|
||
lastInsertId() { | ||
throw new Error('NOT IMPLEMENTED'); | ||
} | ||
} |