Skip to content

Commit ca035d2

Browse files
authored
Merge pull request #5 from sqlitecloud/os-fix-table-creation-race-condition
fixed race condition when creating table and indexes
2 parents 23f56c6 + fccf447 commit ca035d2

File tree

3 files changed

+40
-17
lines changed

3 files changed

+40
-17
lines changed
Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import { Database } from "@sqlitecloud/drivers";
22

33
// CREATE OBJECTS TABLE
4-
export const initializeObjectsTable = (db: Database) => {
4+
export const initializeObjectsTable = (
5+
db: Database
6+
): Promise<{ error: Error | null; message: string }> => {
57
const createTableStatement = `
68
CREATE TABLE IF NOT EXISTS objects (
79
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
@@ -16,13 +18,30 @@ export const initializeObjectsTable = (db: Database) => {
1618
CREATE INDEX IF NOT EXISTS idx_objects_bucket_key ON objects (bucket, key);
1719
CREATE INDEX IF NOT EXISTS idx_objects_key ON objects (key);
1820
`;
19-
try {
20-
db.run(createTableStatement);
21-
console.log("Successfully created table or table already exists");
22-
db.run(createIndexStatement);
23-
console.log("Successfully created index or index already");
24-
return { error: null, message: "Successfully created table and index" };
25-
} catch (error) {
26-
return { error, message: "Error creating table and index" };
27-
}
21+
22+
return new Promise((resolve, reject) => {
23+
db.run(createTableStatement, [], (tableError) => {
24+
if (tableError) {
25+
console.log("Error creating table", tableError);
26+
return reject({ error: tableError, message: "Error creating table" });
27+
} else {
28+
console.log("Successfully created table or table already exists");
29+
db.run(createIndexStatement, [], (indexError) => {
30+
if (indexError) {
31+
console.log("Error creating index", indexError);
32+
return reject({
33+
error: indexError,
34+
message: "Error creating index",
35+
});
36+
} else {
37+
console.log("Successfully created index or index already");
38+
return resolve({
39+
error: null,
40+
message: "Successfully created table and index",
41+
});
42+
}
43+
});
44+
}
45+
});
46+
});
2847
};

object-storage-interface/main.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -208,13 +208,17 @@ class ObjectClient {
208208

209209
constructor(connStr: string) {
210210
this.db = new Database(connStr);
211-
this.init();
212211
}
213212

214-
init() {
215-
const { error, message } = initializeObjectsTable(this.db);
216-
if (error) {
217-
throw new Error(message);
213+
async init() {
214+
try {
215+
const { error, message } = await initializeObjectsTable(this.db);
216+
if (error) {
217+
throw new Error(message);
218+
}
219+
console.log(message);
220+
} catch (err) {
221+
console.error(err);
218222
}
219223
}
220224

@@ -247,6 +251,7 @@ const main = async () => {
247251
key: "FaceTime_User_Guide.pdf",
248252
});
249253

254+
await objectStorage.init()
250255
const putResponse = await objectStorage.send(putObject);
251256
console.log(putResponse);
252257
const getResponse = await objectStorage.send(getObject);

object-storage-interface/package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
"description": "",
55
"main": "objWrapper.js",
66
"scripts": {
7-
"start": "ts-node main.ts",
8-
"test": "echo \"Error: no test specified\" && exit 1"
7+
"start": "ts-node main.ts"
98
},
109
"keywords": [],
1110
"author": "",

0 commit comments

Comments
 (0)