1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
#include <string.h>
#include <sqlite3.h>
#include "db.h"
#include "schema.sql.h"
#define SQLITE(func,...) do{if(sqlite3_##func(__VA_ARGS__)!=SQLITE_OK){die_sqlite("sqlite3_" #func);}}while(0)
sqlite3 *database;
__attribute__((noreturn))
static void die_sqlite(const char *func){
die("%s: %s",func,sqlite3_errmsg(database));
}
void db_init(void){
SQLITE(open_v2,"db.db",&database,SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE,NULL);
char *str=malloc(schema_sql_len+1,char);
memcpy(str,schema_sql,schema_sql_len);
str[schema_sql_len]='\0';
sqlite3_exec(database,str,NULL,NULL,NULL);
free(str);
}
void db_close(void){
sqlite3_close(database);
}
i64 db_create_user(const char *name,const char *pass){
sqlite3_stmt *stmt;
SQLITE(prepare_v2,database,"insert into Users (username, pass) values (?, ?)",-1,&stmt,NULL);
SQLITE(bind_text,stmt,1,name,-1,SQLITE_STATIC);
SQLITE(bind_text,stmt,2,pass,-1,SQLITE_STATIC);
if(sqlite3_step(stmt)!=SQLITE_DONE)die_sqlite("sqlite3_step");
SQLITE(finalize,stmt);
i64 userid=sqlite3_last_insert_rowid(database);
SQLITE(prepare_v2,database,"insert into UserNames (name, user) values (?, ?)",-1,&stmt,NULL);
SQLITE(bind_text,stmt,1,name,-1,SQLITE_STATIC);
SQLITE(bind_int64,stmt,2,userid);
if(sqlite3_step(stmt)!=SQLITE_DONE)die_sqlite("sqlite3_step");
SQLITE(finalize,stmt);
return userid;
}
i64 db_find_user(const char *name){
sqlite3_stmt *stmt;
SQLITE(prepare_v2,database,"select user from UserNames where name = ?",-1,&stmt,NULL);
SQLITE(bind_text,stmt,1,name,-1,SQLITE_STATIC);
i64 userid=-1;
if(sqlite3_step(stmt)==SQLITE_ROW){
userid=sqlite3_column_int64(stmt,1);
}
SQLITE(finalize,stmt);
return userid;
}
|