dyedgreen / deno-sqlite

Deno SQLite module
https://deno.land/x/sqlite
MIT License
409 stars 36 forks source link

Query does not return anything #252

Closed phant0m2290 closed 11 months ago

phant0m2290 commented 11 months ago

so i made it so that it gets the user from the database and if its not in it it will create the user and refetch the user from the database. but it seems like the database does not return anything

code:

let user = db.getUser(message.author.id);
if (!user) {
    db.setUser(message.author.id, message.author.tag, message.author.displayName);
}
user = db.getUser(message.author.id);
// user is still undefined

setUser function:

setUser(id: Snowflake, tag: string, displayname: string, karma?: number) {
        let query = this.prepareQuery("UPDATE Users SET tag = ?, displayname = ?, karma = ? WHERE id = ?");
        const user = this.query("SELECT * FROM Users WHERE id = ?", [id])[0];
        if (!user) {
            query = this.prepareQuery("INSERT INTO Users (id, tag, displayname, karma) VALUES (?, ?, ?, ?)");
            query.execute([id, tag, displayname, karma || 0]);
            return;
        }
        query.execute([tag, displayname, karma || (user[3] as number), id]);
        return;
    }

getUser Function:

getUser(id: Snowflake): DBUser | undefined {
        const user = this.query("SELECT * FROM Guilds WHERE id = ?", [id])[0]
        if (!user) return;
        return {
            id: (user[0] as Snowflake),
            tag: (user[1] as string),
            displayname: (user[2] as string),
            karma: (user[3] as number)
        }
    }
phant0m2290 commented 11 months ago

this does however make a .db-journal file and deletes it almost immediately. i only found this out by using code to watch for file changes

dyedgreen commented 11 months ago

Your second query selects from a table called Guilds. 😅

Also, you should either reuse prepared queries or just use the query function rather than prepareQuery 😄