Changeset 645 in code for trunk/db_postgres.go
- Timestamp:
- Oct 15, 2021, 8:39:14 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/db_postgres.go
r640 r645 2 2 3 3 import ( 4 "context" 4 5 "database/sql" 5 6 "errors" … … 11 12 _ "github.com/lib/pq" 12 13 ) 14 15 const postgresQueryTimeout = 5 * time.Second 13 16 14 17 const postgresConfigSchema = ` … … 146 149 147 150 func (db *PostgresDB) Stats() (*DatabaseStats, error) { 151 ctx, cancel := context.WithTimeout(context.TODO(), postgresQueryTimeout) 152 defer cancel() 153 148 154 var stats DatabaseStats 149 row := db.db.QueryRow (`SELECT155 row := db.db.QueryRowContext(ctx, `SELECT 150 156 (SELECT COUNT(*) FROM "User") AS users, 151 157 (SELECT COUNT(*) FROM "Network") AS networks, … … 159 165 160 166 func (db *PostgresDB) ListUsers() ([]User, error) { 161 rows, err := db.db.Query(`SELECT id, username, password, admin, realname FROM "User"`) 167 ctx, cancel := context.WithTimeout(context.TODO(), postgresQueryTimeout) 168 defer cancel() 169 170 rows, err := db.db.QueryContext(ctx, 171 `SELECT id, username, password, admin, realname FROM "User"`) 162 172 if err != nil { 163 173 return nil, err … … 184 194 185 195 func (db *PostgresDB) GetUser(username string) (*User, error) { 196 ctx, cancel := context.WithTimeout(context.TODO(), postgresQueryTimeout) 197 defer cancel() 198 186 199 user := &User{Username: username} 187 200 188 201 var password, realname sql.NullString 189 row := db.db.QueryRow (202 row := db.db.QueryRowContext(ctx, 190 203 `SELECT id, password, admin, realname FROM "User" WHERE username = $1`, 191 204 username) … … 199 212 200 213 func (db *PostgresDB) StoreUser(user *User) error { 214 ctx, cancel := context.WithTimeout(context.TODO(), postgresQueryTimeout) 215 defer cancel() 216 201 217 password := toNullString(user.Password) 202 218 realname := toNullString(user.Realname) … … 204 220 var err error 205 221 if user.ID == 0 { 206 err = db.db.QueryRow (`222 err = db.db.QueryRowContext(ctx, ` 207 223 INSERT INTO "User" (username, password, admin, realname) 208 224 VALUES ($1, $2, $3, $4) … … 210 226 user.Username, password, user.Admin, realname).Scan(&user.ID) 211 227 } else { 212 _, err = db.db.Exec (`228 _, err = db.db.ExecContext(ctx, ` 213 229 UPDATE "User" 214 230 SET password = $1, admin = $2, realname = $3 … … 220 236 221 237 func (db *PostgresDB) DeleteUser(id int64) error { 222 _, err := db.db.Exec(`DELETE FROM "User" WHERE id = $1`, id) 238 ctx, cancel := context.WithTimeout(context.TODO(), postgresQueryTimeout) 239 defer cancel() 240 241 _, err := db.db.ExecContext(ctx, `DELETE FROM "User" WHERE id = $1`, id) 223 242 return err 224 243 } 225 244 226 245 func (db *PostgresDB) ListNetworks(userID int64) ([]Network, error) { 227 rows, err := db.db.Query(` 246 ctx, cancel := context.WithTimeout(context.TODO(), postgresQueryTimeout) 247 defer cancel() 248 249 rows, err := db.db.QueryContext(ctx, ` 228 250 SELECT id, name, addr, nick, username, realname, pass, connect_commands, sasl_mechanism, 229 251 sasl_plain_username, sasl_plain_password, sasl_external_cert, sasl_external_key, enabled … … 266 288 267 289 func (db *PostgresDB) StoreNetwork(userID int64, network *Network) error { 290 ctx, cancel := context.WithTimeout(context.TODO(), postgresQueryTimeout) 291 defer cancel() 292 268 293 netName := toNullString(network.Name) 269 294 netUsername := toNullString(network.Username) … … 290 315 var err error 291 316 if network.ID == 0 { 292 err = db.db.QueryRow (`317 err = db.db.QueryRowContext(ctx, ` 293 318 INSERT INTO "Network" ("user", name, addr, nick, username, realname, pass, connect_commands, 294 319 sasl_mechanism, sasl_plain_username, sasl_plain_password, sasl_external_cert, … … 300 325 network.SASL.External.PrivKeyBlob, network.Enabled).Scan(&network.ID) 301 326 } else { 302 _, err = db.db.Exec (`327 _, err = db.db.ExecContext(ctx, ` 303 328 UPDATE "Network" 304 329 SET name = $2, addr = $3, nick = $4, username = $5, realname = $6, pass = $7, … … 315 340 316 341 func (db *PostgresDB) DeleteNetwork(id int64) error { 317 _, err := db.db.Exec(`DELETE FROM "Network" WHERE id = $1`, id) 342 ctx, cancel := context.WithTimeout(context.TODO(), postgresQueryTimeout) 343 defer cancel() 344 345 _, err := db.db.ExecContext(ctx, `DELETE FROM "Network" WHERE id = $1`, id) 318 346 return err 319 347 } 320 348 321 349 func (db *PostgresDB) ListChannels(networkID int64) ([]Channel, error) { 322 rows, err := db.db.Query(` 350 ctx, cancel := context.WithTimeout(context.TODO(), postgresQueryTimeout) 351 defer cancel() 352 353 rows, err := db.db.QueryContext(ctx, ` 323 354 SELECT id, name, key, detached, detached_internal_msgid, relay_detached, reattach_on, detach_after, 324 355 detach_on … … 351 382 352 383 func (db *PostgresDB) StoreChannel(networkID int64, ch *Channel) error { 384 ctx, cancel := context.WithTimeout(context.TODO(), postgresQueryTimeout) 385 defer cancel() 386 353 387 key := toNullString(ch.Key) 354 388 detachAfter := int64(math.Ceil(ch.DetachAfter.Seconds())) … … 356 390 var err error 357 391 if ch.ID == 0 { 358 err = db.db.QueryRow (`392 err = db.db.QueryRowContext(ctx, ` 359 393 INSERT INTO "Channel" (network, name, key, detached, detached_internal_msgid, relay_detached, reattach_on, 360 394 detach_after, detach_on) … … 364 398 ch.RelayDetached, ch.ReattachOn, detachAfter, ch.DetachOn).Scan(&ch.ID) 365 399 } else { 366 _, err = db.db.Exec (`400 _, err = db.db.ExecContext(ctx, ` 367 401 UPDATE "Channel" 368 402 SET name = $2, key = $3, detached = $4, detached_internal_msgid = $5, … … 376 410 377 411 func (db *PostgresDB) DeleteChannel(id int64) error { 378 _, err := db.db.Exec(`DELETE FROM "Channel" WHERE id = $1`, id) 412 ctx, cancel := context.WithTimeout(context.TODO(), postgresQueryTimeout) 413 defer cancel() 414 415 _, err := db.db.ExecContext(ctx, `DELETE FROM "Channel" WHERE id = $1`, id) 379 416 return err 380 417 } 381 418 382 419 func (db *PostgresDB) ListDeliveryReceipts(networkID int64) ([]DeliveryReceipt, error) { 383 rows, err := db.db.Query(` 420 ctx, cancel := context.WithTimeout(context.TODO(), postgresQueryTimeout) 421 defer cancel() 422 423 rows, err := db.db.QueryContext(ctx, ` 384 424 SELECT id, target, client, internal_msgid 385 425 FROM "DeliveryReceipt" … … 406 446 407 447 func (db *PostgresDB) StoreClientDeliveryReceipts(networkID int64, client string, receipts []DeliveryReceipt) error { 448 ctx, cancel := context.WithTimeout(context.TODO(), postgresQueryTimeout) 449 defer cancel() 450 408 451 tx, err := db.db.Begin() 409 452 if err != nil { … … 412 455 defer tx.Rollback() 413 456 414 _, err = tx.Exec(`DELETE FROM "DeliveryReceipt" WHERE network = $1 AND client = $2`, 457 _, err = tx.ExecContext(ctx, 458 `DELETE FROM "DeliveryReceipt" WHERE network = $1 AND client = $2`, 415 459 networkID, client) 416 460 if err != nil { … … 418 462 } 419 463 420 stmt, err := tx.Prepare (`464 stmt, err := tx.PrepareContext(ctx, ` 421 465 INSERT INTO "DeliveryReceipt" (network, target, client, internal_msgid) 422 466 VALUES ($1, $2, $3, $4) … … 429 473 for i := range receipts { 430 474 rcpt := &receipts[i] 431 err := stmt.QueryRow(networkID, rcpt.Target, client, rcpt.InternalMsgID).Scan(&rcpt.ID) 475 err := stmt. 476 QueryRowContext(ctx, networkID, rcpt.Target, client, rcpt.InternalMsgID). 477 Scan(&rcpt.ID) 432 478 if err != nil { 433 479 return err
Note:
See TracChangeset
for help on using the changeset viewer.