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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
module captain_db
use sqlite
implicit none
character(1024)::database_file
type(c_ptr)::db
contains
subroutine initialize_db(filename)
implicit none
character(*), intent(in)::filename
if(sqlite3_open(filename, db) == SQLITE_OK) then
database_file = filename
else
Print *, "ERROR: Could not open db"
stop
end if
end subroutine initialize_db
subroutine shutdown_db()
implicit none
integer::i
i = sqlite3_close(db)
end subroutine shutdown_db
subroutine add_player_db(name, token)
implicit none
character(*), intent(in)::name, token
type(sqlite3_stmt)::stmt
if(stmt%prepare(db, "INSERT INTO players(name, token) VALUES(?, ?)") == SQLITE_OK) then
if(stmt%bind_text(1, name) == SQLITE_OK .and. stmt%bind_text(2, token) == SQLITE_OK) then
call stmt%step_now()
end if
end if
call stmt%finalize()
end subroutine add_player_db
function get_player_count()
implicit none
type(sqlite3_stmt)::stmt
integer::get_player_count
get_player_count = 0
if(stmt%prepare(db, "SELECT COUNT(*) FROM players") == SQLITE_OK) then
if(stmt%step() == SQLITE_ROW) then
get_player_count = stmt%column_int(0)
end if
end if
call stmt%finalize()
end function get_player_count
function get_player_names() result(res)
implicit none
type(sqlite3_stmt)::stmt
character(len=256), dimension(:), pointer::res
integer::i,n
n = get_player_count()
if(n > 0) then
allocate(res(n))
if(stmt%prepare(db, "SELECT name FROM players ORDER BY name") == SQLITE_OK) then
i = 1
do while(stmt%step() == SQLITE_ROW .and. i <= n)
call stmt%column_text(0, res(i))
i = i + 1
end do
end if
call stmt%finalize()
end if
end function get_player_names
end module captain_db
|