Changeset 635 in code
- Timestamp:
- Oct 13, 2021, 8:12:14 AM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/db_postgres.go
r634 r635 201 201 password := toNullString(user.Password) 202 202 realname := toNullString(user.Realname) 203 err := db.db.QueryRow(` 204 INSERT INTO "User" (username, password, admin, realname) 205 VALUES ($1, $2, $3, $4) 206 ON CONFLICT (username) 207 DO UPDATE SET password = $2, admin = $3, realname = $4 208 RETURNING id`, 209 user.Username, password, user.Admin, realname).Scan(&user.ID) 203 204 var err error 205 if user.ID == 0 { 206 err = db.db.QueryRow(` 207 INSERT INTO "User" (username, password, admin, realname) 208 VALUES ($1, $2, $3, $4) 209 RETURNING id`, 210 user.Username, password, user.Admin, realname).Scan(&user.ID) 211 } else { 212 _, err = db.db.Exec(` 213 UPDATE "User" 214 SET password = $1, admin = $2, realname = $3 215 WHERE id = $4`, 216 password, user.Admin, realname, user.ID) 217 } 210 218 return err 211 219 } … … 280 288 } 281 289 282 err := db.db.QueryRow(` 283 INSERT INTO "Network" ("user", name, addr, nick, username, realname, pass, connect_commands, 284 sasl_mechanism, sasl_plain_username, sasl_plain_password, sasl_external_cert, 285 sasl_external_key, enabled) 286 VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) 287 ON CONFLICT 288 DO UPDATE SET name = $2, addr = $3, nick = $4, username = $5, realname = $6, pass = $7, 289 connect_commands = $8, sasl_mechanism = $9, sasl_plain_username = $10, 290 sasl_plain_password = $11, sasl_external_cert = $12, sasl_external_key = $13, 291 enabled = $14 292 RETURNING id`, 293 userID, netName, network.Addr, network.Nick, netUsername, realname, pass, connectCommands, 294 saslMechanism, saslPlainUsername, saslPlainPassword, network.SASL.External.CertBlob, 295 network.SASL.External.PrivKeyBlob, network.Enabled).Scan(&network.ID) 290 var err error 291 if network.ID == 0 { 292 err = db.db.QueryRow(` 293 INSERT INTO "Network" ("user", name, addr, nick, username, realname, pass, connect_commands, 294 sasl_mechanism, sasl_plain_username, sasl_plain_password, sasl_external_cert, 295 sasl_external_key, enabled) 296 VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) 297 RETURNING id`, 298 userID, netName, network.Addr, network.Nick, netUsername, realname, pass, connectCommands, 299 saslMechanism, saslPlainUsername, saslPlainPassword, network.SASL.External.CertBlob, 300 network.SASL.External.PrivKeyBlob, network.Enabled).Scan(&network.ID) 301 } else { 302 _, err = db.db.Exec(` 303 UPDATE "Network" 304 SET name = $2, addr = $3, nick = $4, username = $5, realname = $6, pass = $7, 305 connect_commands = $8, sasl_mechanism = $9, sasl_plain_username = $10, 306 sasl_plain_password = $11, sasl_external_cert = $12, sasl_external_key = $13, 307 enabled = $14 308 WHERE id = $1`, 309 network.ID, netName, network.Addr, network.Nick, netUsername, realname, pass, connectCommands, 310 saslMechanism, saslPlainUsername, saslPlainPassword, network.SASL.External.CertBlob, 311 network.SASL.External.PrivKeyBlob, network.Enabled) 312 } 296 313 return err 297 314 } … … 336 353 key := toNullString(ch.Key) 337 354 detachAfter := int64(math.Ceil(ch.DetachAfter.Seconds())) 338 err := db.db.QueryRow(` 339 INSERT INTO "Channel" (network, name, key, detached, detached_internal_msgid, relay_detached, reattach_on, 340 detach_after, detach_on) 341 VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) 342 ON CONFLICT (network, name) 343 DO UPDATE SET network = $1, name = $2, key = $3, detached = $4, detached_internal_msgid = $5, 344 relay_detached = $6, reattach_on = $7, detach_after = $8, detach_on = $9 345 RETURNING id`, 346 networkID, ch.Name, key, ch.Detached, toNullString(ch.DetachedInternalMsgID), 347 ch.RelayDetached, ch.ReattachOn, detachAfter, ch.DetachOn).Scan(&ch.ID) 355 356 var err error 357 if ch.ID == 0 { 358 err = db.db.QueryRow(` 359 INSERT INTO "Channel" (network, name, key, detached, detached_internal_msgid, relay_detached, reattach_on, 360 detach_after, detach_on) 361 VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) 362 RETURNING id`, 363 networkID, ch.Name, key, ch.Detached, toNullString(ch.DetachedInternalMsgID), 364 ch.RelayDetached, ch.ReattachOn, detachAfter, ch.DetachOn).Scan(&ch.ID) 365 } else { 366 _, err = db.db.Exec(` 367 UPDATE "Channel" 368 SET name = $2, key = $3, detached = $4, detached_internal_msgid = $5, 369 relay_detached = $6, reattach_on = $7, detach_after = $8, detach_on = $9 370 WHERE id = $1`, 371 ch.ID, ch.Name, key, ch.Detached, toNullString(ch.DetachedInternalMsgID), 372 ch.RelayDetached, ch.ReattachOn, detachAfter, ch.DetachOn) 373 } 348 374 return err 349 375 } … … 380 406 381 407 func (db *PostgresDB) StoreClientDeliveryReceipts(networkID int64, client string, receipts []DeliveryReceipt) error { 408 tx, err := db.db.Begin() 409 if err != nil { 410 return err 411 } 412 defer tx.Rollback() 413 414 _, err = tx.Exec("DELETE FROM DeliveryReceipt WHERE network = $1 AND client = $2", 415 networkID, client) 416 if err != nil { 417 return err 418 } 419 382 420 stmt, err := db.db.Prepare(` 383 421 INSERT INTO "DeliveryReceipt" (network, target, client, internal_msgid) 384 422 VALUES ($1, $2, $3, $4) 385 ON CONFLICT (network, target, client)386 DO UPDATE SET internal_msgid = $4387 423 RETURNING id`) 388 424 if err != nil { … … 391 427 defer stmt.Close() 392 428 393 // No need for a transaction since all changes are atomic and don't break data coherence.394 429 for i := range receipts { 395 430 rcpt := &receipts[i] … … 399 434 } 400 435 } 401 return nil 402 } 436 437 return tx.Commit() 438 }
Note:
See TracChangeset
for help on using the changeset viewer.