plz / database_notd_sqlite.v
77 lines · 66 sloc · 1.82 KB · d4104e7627c1594b9de8e026959b196932f293c8
Raw
1module main
2
3import config
4import db.pg
5import os
6
7type GitlyDb = pg.DB
8
9fn connect_db(conf config.Config) !GitlyDb {
10 if conninfo := first_env_opt(['GITLY_DB_CONNINFO', 'DATABASE_URL'], conf.pg.conninfo) {
11 db := pg.connect_with_conninfo(conninfo, pg.PoolConfig{})!
12 return GitlyDb(*db)
13 }
14 db := pg.connect(
15 host: first_env(['GITLY_DB_HOST', 'PGHOST'], conf.pg.host)
16 port: first_int_env(['GITLY_DB_PORT', 'PGPORT'], conf.pg.port)
17 dbname: first_env(['GITLY_DB_NAME', 'PGDATABASE'], conf.pg.dbname)
18 user: first_env(['GITLY_DB_USER', 'PGUSER'], conf.pg.user)
19 password: first_env(['GITLY_DB_PASSWORD', 'PGPASSWORD'], conf.pg.password)
20 )!
21 return GitlyDb(*db)
22}
23
24fn db_backend_name() string {
25 return 'postgres'
26}
27
28fn db_exec_values(mut db GitlyDb, query string) ![][]string {
29 rows := db.exec_no_null(query)!
30 mut values := [][]string{cap: rows.len}
31 for row in rows {
32 values << row.vals.clone()
33 }
34 return values
35}
36
37fn db_last_insert_id(mut db GitlyDb) int {
38 return db.last_id()
39}
40
41fn db_column_exists(mut db GitlyDb, table_name string, column_name string) !bool {
42 rows := db_exec_values(mut db,
43 'select column_name from information_schema.columns where table_name = ${sql_literal(table_name.to_lower())} and column_name = ${sql_literal(column_name)}')!
44 return rows.len > 0
45}
46
47fn db_bool_column_type() string {
48 return 'BOOLEAN NOT NULL DEFAULT false'
49}
50
51fn first_env(keys []string, fallback string) string {
52 for key in keys {
53 value := os.getenv(key)
54 if value != '' {
55 return value
56 }
57 }
58 return fallback
59}
60
61fn first_env_opt(keys []string, fallback string) ?string {
62 value := first_env(keys, fallback)
63 if value == '' {
64 return none
65 }
66 return value
67}
68
69fn first_int_env(keys []string, fallback int) int {
70 for key in keys {
71 value := os.getenv(key)
72 if value != '' {
73 return value.int()
74 }
75 }
76 return fallback
77}
78