Changeset 645 in code for trunk/db_sqlite.go
- Timestamp:
- Oct 15, 2021, 8:39:14 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/db_sqlite.go
r620 r645 2 2 3 3 import ( 4 "context" 4 5 "database/sql" 5 6 "fmt" … … 11 12 _ "github.com/mattn/go-sqlite3" 12 13 ) 14 15 const sqliteQueryTimeout = 5 * time.Second 13 16 14 17 const sqliteSchema = ` … … 210 213 defer db.lock.RUnlock() 211 214 215 ctx, cancel := context.WithTimeout(context.TODO(), sqliteQueryTimeout) 216 defer cancel() 217 212 218 var stats DatabaseStats 213 row := db.db.QueryRow (`SELECT219 row := db.db.QueryRowContext(ctx, `SELECT 214 220 (SELECT COUNT(*) FROM User) AS users, 215 221 (SELECT COUNT(*) FROM Network) AS networks, … … 233 239 defer db.lock.RUnlock() 234 240 235 rows, err := db.db.Query("SELECT id, username, password, admin, realname FROM User") 241 ctx, cancel := context.WithTimeout(context.TODO(), sqliteQueryTimeout) 242 defer cancel() 243 244 rows, err := db.db.QueryContext(ctx, 245 "SELECT id, username, password, admin, realname FROM User") 236 246 if err != nil { 237 247 return nil, err … … 261 271 defer db.lock.RUnlock() 262 272 273 ctx, cancel := context.WithTimeout(context.TODO(), sqliteQueryTimeout) 274 defer cancel() 275 263 276 user := &User{Username: username} 264 277 265 278 var password, realname sql.NullString 266 row := db.db.QueryRow("SELECT id, password, admin, realname FROM User WHERE username = ?", username) 279 row := db.db.QueryRowContext(ctx, 280 "SELECT id, password, admin, realname FROM User WHERE username = ?", 281 username) 267 282 if err := row.Scan(&user.ID, &password, &user.Admin, &realname); err != nil { 268 283 return nil, err … … 276 291 db.lock.Lock() 277 292 defer db.lock.Unlock() 293 294 ctx, cancel := context.WithTimeout(context.TODO(), sqliteQueryTimeout) 295 defer cancel() 278 296 279 297 args := []interface{}{ … … 286 304 var err error 287 305 if user.ID != 0 { 288 _, err = db.db.Exec("UPDATE User SET password = :password, admin = :admin, realname = :realname WHERE username = :username", args...) 306 _, err = db.db.ExecContext(ctx, ` 307 UPDATE User SET password = :password, admin = :admin, 308 realname = :realname WHERE username = :username`, 309 args...) 289 310 } else { 290 311 var res sql.Result 291 res, err = db.db.Exec("INSERT INTO User(username, password, admin, realname) VALUES (:username, :password, :admin, :realname)", args...) 312 res, err = db.db.ExecContext(ctx, ` 313 INSERT INTO 314 User(username, password, admin, realname) 315 VALUES (:username, :password, :admin, :realname)`, 316 args...) 292 317 if err != nil { 293 318 return err … … 303 328 defer db.lock.Unlock() 304 329 330 ctx, cancel := context.WithTimeout(context.TODO(), sqliteQueryTimeout) 331 defer cancel() 332 305 333 tx, err := db.db.Begin() 306 334 if err != nil { … … 309 337 defer tx.Rollback() 310 338 311 _, err = tx.Exec (`DELETE FROM DeliveryReceipt339 _, err = tx.ExecContext(ctx, `DELETE FROM DeliveryReceipt 312 340 WHERE id IN ( 313 341 SELECT DeliveryReceipt.id … … 320 348 } 321 349 322 _, err = tx.Exec (`DELETE FROM Channel350 _, err = tx.ExecContext(ctx, `DELETE FROM Channel 323 351 WHERE id IN ( 324 352 SELECT Channel.id … … 331 359 } 332 360 333 _, err = tx.Exec ("DELETE FROM Network WHERE user = ?", id)334 if err != nil { 335 return err 336 } 337 338 _, err = tx.Exec ("DELETE FROM User WHERE id = ?", id)361 _, err = tx.ExecContext(ctx, "DELETE FROM Network WHERE user = ?", id) 362 if err != nil { 363 return err 364 } 365 366 _, err = tx.ExecContext(ctx, "DELETE FROM User WHERE id = ?", id) 339 367 if err != nil { 340 368 return err … … 348 376 defer db.lock.RUnlock() 349 377 350 rows, err := db.db.Query(`SELECT id, name, addr, nick, username, realname, pass, 378 ctx, cancel := context.WithTimeout(context.TODO(), sqliteQueryTimeout) 379 defer cancel() 380 381 rows, err := db.db.QueryContext(ctx, ` 382 SELECT id, name, addr, nick, username, realname, pass, 351 383 connect_commands, sasl_mechanism, sasl_plain_username, sasl_plain_password, 352 384 sasl_external_cert, sasl_external_key, enabled … … 392 424 db.lock.Lock() 393 425 defer db.lock.Unlock() 426 427 ctx, cancel := context.WithTimeout(context.TODO(), sqliteQueryTimeout) 428 defer cancel() 394 429 395 430 var saslMechanism, saslPlainUsername, saslPlainPassword sql.NullString … … 430 465 var err error 431 466 if network.ID != 0 { 432 _, err = db.db.Exec (`467 _, err = db.db.ExecContext(ctx, ` 433 468 UPDATE Network 434 469 SET name = :name, addr = :addr, nick = :nick, username = :username, … … 440 475 } else { 441 476 var res sql.Result 442 res, err = db.db.Exec (`477 res, err = db.db.ExecContext(ctx, ` 443 478 INSERT INTO Network(user, name, addr, nick, username, realname, pass, 444 479 connect_commands, sasl_mechanism, sasl_plain_username, … … 460 495 defer db.lock.Unlock() 461 496 497 ctx, cancel := context.WithTimeout(context.TODO(), sqliteQueryTimeout) 498 defer cancel() 499 462 500 tx, err := db.db.Begin() 463 501 if err != nil { … … 466 504 defer tx.Rollback() 467 505 468 _, err = tx.Exec ("DELETE FROM DeliveryReceipt WHERE network = ?", id)469 if err != nil { 470 return err 471 } 472 473 _, err = tx.Exec ("DELETE FROM Channel WHERE network = ?", id)474 if err != nil { 475 return err 476 } 477 478 _, err = tx.Exec ("DELETE FROM Network WHERE id = ?", id)506 _, err = tx.ExecContext(ctx, "DELETE FROM DeliveryReceipt WHERE network = ?", id) 507 if err != nil { 508 return err 509 } 510 511 _, err = tx.ExecContext(ctx, "DELETE FROM Channel WHERE network = ?", id) 512 if err != nil { 513 return err 514 } 515 516 _, err = tx.ExecContext(ctx, "DELETE FROM Network WHERE id = ?", id) 479 517 if err != nil { 480 518 return err … … 488 526 defer db.lock.RUnlock() 489 527 490 rows, err := db.db.Query(`SELECT 528 ctx, cancel := context.WithTimeout(context.TODO(), sqliteQueryTimeout) 529 defer cancel() 530 531 rows, err := db.db.QueryContext(ctx, `SELECT 491 532 id, name, key, detached, detached_internal_msgid, 492 533 relay_detached, reattach_on, detach_after, detach_on … … 521 562 db.lock.Lock() 522 563 defer db.lock.Unlock() 564 565 ctx, cancel := context.WithTimeout(context.TODO(), sqliteQueryTimeout) 566 defer cancel() 523 567 524 568 args := []interface{}{ … … 538 582 var err error 539 583 if ch.ID != 0 { 540 _, err = db.db.Exec (`UPDATE Channel584 _, err = db.db.ExecContext(ctx, `UPDATE Channel 541 585 SET network = :network, name = :name, key = :key, detached = :detached, 542 586 detached_internal_msgid = :detached_internal_msgid, relay_detached = :relay_detached, … … 545 589 } else { 546 590 var res sql.Result 547 res, err = db.db.Exec (`INSERT INTO Channel(network, name, key, detached, detached_internal_msgid, relay_detached, reattach_on, detach_after, detach_on)591 res, err = db.db.ExecContext(ctx, `INSERT INTO Channel(network, name, key, detached, detached_internal_msgid, relay_detached, reattach_on, detach_after, detach_on) 548 592 VALUES (:network, :name, :key, :detached, :detached_internal_msgid, :relay_detached, :reattach_on, :detach_after, :detach_on)`, args...) 549 593 if err != nil { … … 559 603 defer db.lock.Unlock() 560 604 561 _, err := db.db.Exec("DELETE FROM Channel WHERE id = ?", id) 605 ctx, cancel := context.WithTimeout(context.TODO(), sqliteQueryTimeout) 606 defer cancel() 607 608 _, err := db.db.ExecContext(ctx, "DELETE FROM Channel WHERE id = ?", id) 562 609 return err 563 610 } … … 567 614 defer db.lock.RUnlock() 568 615 569 rows, err := db.db.Query(`SELECT id, target, client, internal_msgid 616 ctx, cancel := context.WithTimeout(context.TODO(), sqliteQueryTimeout) 617 defer cancel() 618 619 rows, err := db.db.QueryContext(ctx, ` 620 SELECT id, target, client, internal_msgid 570 621 FROM DeliveryReceipt 571 622 WHERE network = ?`, networkID) … … 596 647 defer db.lock.Unlock() 597 648 649 ctx, cancel := context.WithTimeout(context.TODO(), sqliteQueryTimeout) 650 defer cancel() 651 598 652 tx, err := db.db.Begin() 599 653 if err != nil { … … 602 656 defer tx.Rollback() 603 657 604 _, err = tx.Exec ("DELETE FROM DeliveryReceipt WHERE network = ? AND client IS ?",658 _, err = tx.ExecContext(ctx, "DELETE FROM DeliveryReceipt WHERE network = ? AND client IS ?", 605 659 networkID, toNullString(client)) 606 660 if err != nil { … … 611 665 rcpt := &receipts[i] 612 666 613 res, err := tx.Exec(`INSERT INTO DeliveryReceipt(network, target, client, internal_msgid) 667 res, err := tx.ExecContext(ctx, ` 668 INSERT INTO DeliveryReceipt(network, target, client, internal_msgid) 614 669 VALUES (:network, :target, :client, :internal_msgid)`, 615 670 sql.Named("network", networkID),
Note:
See TracChangeset
for help on using the changeset viewer.