Browse Source

[plugins/range] fix SQL query for record persistence

The sql query to save a record to the database did just an insert but no
update. This patch fixes it.

Signed-off-by: Andrea Barberio <insomniac@slackware.it>
Andrea Barberio 2 years ago
parent
commit
60d5d298be
1 changed files with 1 additions and 3 deletions
  1. 1 3
      plugins/range/storage.go

+ 1 - 3
plugins/range/storage.go

@@ -60,7 +60,7 @@ func loadRecords(db *sql.DB) (map[string]*Record, error) {
 
 
 // saveIPAddress writes out a lease to storage
 // saveIPAddress writes out a lease to storage
 func (p *PluginState) saveIPAddress(mac net.HardwareAddr, record *Record) error {
 func (p *PluginState) saveIPAddress(mac net.HardwareAddr, record *Record) error {
-	stmt, err := p.leasedb.Prepare("insert into leases4(mac, ip, expiry) select ?, ?, ? where not exists (select 1 from leases4 where mac = ? and ip = ? and expiry < TIME())")
+	stmt, err := p.leasedb.Prepare(`insert or replace into leases4(mac, ip, expiry) values (?, ?, ?)`)
 	if err != nil {
 	if err != nil {
 		return fmt.Errorf("statement preparation failed: %w", err)
 		return fmt.Errorf("statement preparation failed: %w", err)
 	}
 	}
@@ -68,8 +68,6 @@ func (p *PluginState) saveIPAddress(mac net.HardwareAddr, record *Record) error
 		mac.String(),
 		mac.String(),
 		record.IP.String(),
 		record.IP.String(),
 		record.expires,
 		record.expires,
-		mac.String(),
-		record.IP.String(),
 	); err != nil {
 	); err != nil {
 		return fmt.Errorf("record insert/update failed: %w", err)
 		return fmt.Errorf("record insert/update failed: %w", err)
 	}
 	}