Changeset 596 in code for trunk/db_sqlite.go


Ignore:
Timestamp:
Sep 27, 2021, 2:54:06 PM (4 years ago)
Author:
contact
Message:

db_sqlite: switch to sql.Named

This allows us to avoid mixing up arguments.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/db_sqlite.go

    r595 r596  
    260260        defer db.lock.Unlock()
    261261
    262         password := toNullString(user.Password)
    263         realname := toNullString(user.Realname)
     262        args := []interface{}{
     263                sql.Named("username", user.Username),
     264                sql.Named("password", toNullString(user.Password)),
     265                sql.Named("admin", user.Admin),
     266                sql.Named("realname", toNullString(user.Realname)),
     267        }
    264268
    265269        var err error
    266270        if user.ID != 0 {
    267                 _, err = db.db.Exec("UPDATE User SET password = ?, admin = ?, realname = ? WHERE username = ?",
    268                         password, user.Admin, realname, user.Username)
     271                _, err = db.db.Exec("UPDATE User SET password = :password, admin = :admin, realname = :realname WHERE username = :username", args...)
    269272        } else {
    270273                var res sql.Result
    271                 res, err = db.db.Exec("INSERT INTO User(username, password, admin, realname) VALUES (?, ?, ?, ?)",
    272                         user.Username, password, user.Admin, realname)
     274                res, err = db.db.Exec("INSERT INTO User(username, password, admin, realname) VALUES (:username, :password, :admin, :realname)", args...)
    273275                if err != nil {
    274276                        return err
     
    373375        db.lock.Lock()
    374376        defer db.lock.Unlock()
    375 
    376         netName := toNullString(network.Name)
    377         netUsername := toNullString(network.Username)
    378         realname := toNullString(network.Realname)
    379         pass := toNullString(network.Pass)
    380         connectCommands := toNullString(strings.Join(network.ConnectCommands, "\r\n"))
    381377
    382378        var saslMechanism, saslPlainUsername, saslPlainPassword sql.NullString
     
    396392        }
    397393
     394        args := []interface{}{
     395                sql.Named("name", toNullString(network.Name)),
     396                sql.Named("addr", network.Addr),
     397                sql.Named("nick", network.Nick),
     398                sql.Named("username", toNullString(network.Username)),
     399                sql.Named("realname", toNullString(network.Realname)),
     400                sql.Named("pass", toNullString(network.Pass)),
     401                sql.Named("connect_commands", toNullString(strings.Join(network.ConnectCommands, "\r\n"))),
     402                sql.Named("sasl_mechanism", saslMechanism),
     403                sql.Named("sasl_plain_username", saslPlainUsername),
     404                sql.Named("sasl_plain_password", saslPlainPassword),
     405                sql.Named("sasl_external_cert", network.SASL.External.CertBlob),
     406                sql.Named("sasl_external_key", network.SASL.External.PrivKeyBlob),
     407                sql.Named("enabled", network.Enabled),
     408
     409                sql.Named("id", network.ID), // only for UPDATE
     410                sql.Named("user", userID),   // only for INSERT
     411        }
     412
    398413        var err error
    399414        if network.ID != 0 {
    400                 _, err = db.db.Exec(`UPDATE Network
    401                         SET name = ?, addr = ?, nick = ?, username = ?, realname = ?, pass = ?, connect_commands = ?,
    402                                 sasl_mechanism = ?, sasl_plain_username = ?, sasl_plain_password = ?,
    403                                 sasl_external_cert = ?, sasl_external_key = ?, enabled = ?
    404                         WHERE id = ?`,
    405                         netName, network.Addr, network.Nick, netUsername, realname, pass, connectCommands,
    406                         saslMechanism, saslPlainUsername, saslPlainPassword,
    407                         network.SASL.External.CertBlob, network.SASL.External.PrivKeyBlob, network.Enabled,
    408                         network.ID)
     415                _, err = db.db.Exec(`
     416                        UPDATE Network
     417                        SET name = :name, addr = :addr, nick = :nick, username = :username,
     418                                realname = :realname, pass = :pass, connect_commands = :connect_commands,
     419                                sasl_mechanism = :sasl_mechanism, sasl_plain_username = :sasl_plain_username, sasl_plain_password = :sasl_plain_password,
     420                                sasl_external_cert = :sasl_external_cert, sasl_external_key = :sasl_external_key,
     421                                enabled = :enabled
     422                        WHERE id = :id`, args...)
    409423        } else {
    410424                var res sql.Result
    411                 res, err = db.db.Exec(`INSERT INTO Network(user, name, addr, nick, username,
    412                                 realname, pass, connect_commands, sasl_mechanism, sasl_plain_username,
     425                res, err = db.db.Exec(`
     426                        INSERT INTO Network(user, name, addr, nick, username, realname, pass,
     427                                connect_commands, sasl_mechanism, sasl_plain_username,
    413428                                sasl_plain_password, sasl_external_cert, sasl_external_key, enabled)
    414                         VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
    415                         userID, netName, network.Addr, network.Nick, netUsername, realname, pass, connectCommands,
    416                         saslMechanism, saslPlainUsername, saslPlainPassword, network.SASL.External.CertBlob,
    417                         network.SASL.External.PrivKeyBlob, network.Enabled)
     429                        VALUES (:user, :name, :addr, :nick, :username, :realname, :pass,
     430                                :connect_commands, :sasl_mechanism, :sasl_plain_username,
     431                                :sasl_plain_password, :sasl_external_cert, :sasl_external_key, :enabled)`,
     432                        args...)
    418433                if err != nil {
    419434                        return err
     
    490505        defer db.lock.Unlock()
    491506
    492         key := toNullString(ch.Key)
    493         detachAfter := int64(math.Ceil(ch.DetachAfter.Seconds()))
     507        args := []interface{}{
     508                sql.Named("network", networkID),
     509                sql.Named("name", ch.Name),
     510                sql.Named("key", toNullString(ch.Key)),
     511                sql.Named("detached", ch.Detached),
     512                sql.Named("detached_internal_msgid", toNullString(ch.DetachedInternalMsgID)),
     513                sql.Named("relay_detached", ch.RelayDetached),
     514                sql.Named("reattach_on", ch.ReattachOn),
     515                sql.Named("detach_after", int64(math.Ceil(ch.DetachAfter.Seconds()))),
     516                sql.Named("detach_on", ch.DetachOn),
     517
     518                sql.Named("id", ch.ID), // only for UPDATE
     519        }
    494520
    495521        var err error
    496522        if ch.ID != 0 {
    497523                _, err = db.db.Exec(`UPDATE Channel
    498                         SET network = ?, name = ?, key = ?, detached = ?, detached_internal_msgid = ?, relay_detached = ?, reattach_on = ?, detach_after = ?, detach_on = ?
    499                         WHERE id = ?`,
    500                         networkID, ch.Name, key, ch.Detached, toNullString(ch.DetachedInternalMsgID), ch.RelayDetached, ch.ReattachOn, detachAfter, ch.DetachOn, ch.ID)
     524                        SET network = :network, name = :name, key = :key, detached = :detached,
     525                                detached_internal_msgid = :detached_internal_msgid, relay_detached = :relay_detached,
     526                                reattach_on = :reattach_on, detach_after = :detach_after, detach_on = :detach_on
     527                        WHERE id = :id`, args...)
    501528        } else {
    502529                var res sql.Result
    503530                res, err = db.db.Exec(`INSERT INTO Channel(network, name, key, detached, detached_internal_msgid, relay_detached, reattach_on, detach_after, detach_on)
    504                         VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
    505                         networkID, ch.Name, key, ch.Detached, toNullString(ch.DetachedInternalMsgID), ch.RelayDetached, ch.ReattachOn, detachAfter, ch.DetachOn)
     531                        VALUES (:network, :name, :key, :detached, :detached_internal_msgid, :relay_detached, :reattach_on, :detach_after, :detach_on)`, args...)
    506532                if err != nil {
    507533                        return err
     
    568594                rcpt := &receipts[i]
    569595
    570                 res, err := tx.Exec("INSERT INTO DeliveryReceipt(network, target, client, internal_msgid) VALUES (?, ?, ?, ?)",
    571                         networkID, rcpt.Target, toNullString(client), rcpt.InternalMsgID)
     596                res, err := tx.Exec(`INSERT INTO DeliveryReceipt(network, target, client, internal_msgid)
     597                        VALUES (:network, :target, :client, :internal_msgid)`,
     598                        sql.Named("network", networkID),
     599                        sql.Named("target", rcpt.Target),
     600                        sql.Named("client", toNullString(client)),
     601                        sql.Named("internal_msgid", rcpt.InternalMsgID))
    572602                if err != nil {
    573603                        return err
Note: See TracChangeset for help on using the changeset viewer.