refac: sort sqlite and postgres funcs
This commit is contained in:
@ -130,142 +130,6 @@ type SQLite struct {
|
||||
mutex *sync.Mutex
|
||||
}
|
||||
|
||||
// Close closes the database and prevents new queries from starting. Close then
|
||||
// waits for all queries that have started processing on the server to finish.
|
||||
func (sqlite *SQLite) Close() error {
|
||||
sqlite.mutex.Lock()
|
||||
defer sqlite.mutex.Unlock()
|
||||
return sqlite.dbo.Close()
|
||||
}
|
||||
|
||||
// RemoveDevices from the database
|
||||
func (sqlite *SQLite) RemoveDevicesByIDs(ctx context.Context, deviceIDs ...string) error {
|
||||
sqlite.mutex.Lock()
|
||||
defer sqlite.mutex.Unlock()
|
||||
|
||||
f, err := sqlite3DMLAssets.ReadFile(deleteDeviceByIDSQLFile)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to read file %v: %w", deleteDeviceByIDSQLFile, err)
|
||||
}
|
||||
|
||||
tx, err := sqlite.dbo.BeginTx(ctx, &sql.TxOptions{ReadOnly: false})
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to begin new transaction: %v", err)
|
||||
}
|
||||
defer tx.Rollback()
|
||||
|
||||
stmt, err := tx.Prepare(string(f))
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to prepare statement: %v", err)
|
||||
}
|
||||
defer stmt.Close()
|
||||
|
||||
for _, deviceID := range deviceIDs {
|
||||
_, err = stmt.Exec(deviceID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return tx.Commit()
|
||||
}
|
||||
|
||||
// RemoveDevices from the database
|
||||
func (sqlite *SQLite) RemoveDevicesByNames(ctx context.Context, names ...string) error {
|
||||
sqlite.mutex.Lock()
|
||||
defer sqlite.mutex.Unlock()
|
||||
|
||||
f, err := sqlite3DMLAssets.ReadFile(deleteDeviceByNameSQLFile)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to read file %v: %w", deleteDeviceByNameSQLFile, err)
|
||||
}
|
||||
|
||||
tx, err := sqlite.dbo.BeginTx(ctx, &sql.TxOptions{ReadOnly: false})
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to begin new transaction: %v", err)
|
||||
}
|
||||
defer tx.Rollback()
|
||||
|
||||
stmt, err := tx.Prepare(string(f))
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to prepare statement: %v", err)
|
||||
}
|
||||
defer stmt.Close()
|
||||
|
||||
for _, deviceID := range names {
|
||||
_, err = stmt.Exec(deviceID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return tx.Commit()
|
||||
}
|
||||
|
||||
// RemoveSensors from the database
|
||||
func (sqlite *SQLite) RemoveSensorsByIDs(ctx context.Context, sensorIDs ...string) error {
|
||||
sqlite.mutex.Lock()
|
||||
defer sqlite.mutex.Unlock()
|
||||
|
||||
f, err := sqlite3DMLAssets.ReadFile(deleteSensorByIDSQLFile)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to read file %v: %w", deleteSensorByIDSQLFile, err)
|
||||
}
|
||||
|
||||
tx, err := sqlite.dbo.BeginTx(ctx, &sql.TxOptions{ReadOnly: false})
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to begin new transaction: %v", err)
|
||||
}
|
||||
defer tx.Rollback()
|
||||
|
||||
stmt, err := tx.Prepare(string(f))
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to prepare statement: %v", err)
|
||||
}
|
||||
defer stmt.Close()
|
||||
|
||||
for _, sensorID := range sensorIDs {
|
||||
_, err = stmt.Exec(sensorID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return tx.Commit()
|
||||
}
|
||||
|
||||
// RemoveSensors from the database
|
||||
func (sqlite *SQLite) RemoveSensorsByNames(ctx context.Context, names ...string) error {
|
||||
sqlite.mutex.Lock()
|
||||
defer sqlite.mutex.Unlock()
|
||||
|
||||
f, err := sqlite3DMLAssets.ReadFile(deleteSensorByNameSQLFile)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to read file %v: %w", deleteSensorByNameSQLFile, err)
|
||||
}
|
||||
|
||||
tx, err := sqlite.dbo.BeginTx(ctx, &sql.TxOptions{ReadOnly: false})
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to begin new transaction: %v", err)
|
||||
}
|
||||
defer tx.Rollback()
|
||||
|
||||
stmt, err := tx.Prepare(string(f))
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to prepare statement: %v", err)
|
||||
}
|
||||
defer stmt.Close()
|
||||
|
||||
for _, sensorID := range names {
|
||||
_, err = stmt.Exec(sensorID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return tx.Commit()
|
||||
}
|
||||
|
||||
// AddDevices into the database
|
||||
func (sqlite *SQLite) AddDevices(ctx context.Context, devices ...*types.Device) error {
|
||||
sqlite.mutex.Lock()
|
||||
@ -298,6 +162,38 @@ func (sqlite *SQLite) AddDevices(ctx context.Context, devices ...*types.Device)
|
||||
return tx.Commit()
|
||||
}
|
||||
|
||||
// AddOrUpdateDevices into the database
|
||||
func (sqlite *SQLite) AddOrUpdateDevices(ctx context.Context, devices ...*types.Device) error {
|
||||
sqlite.mutex.Lock()
|
||||
defer sqlite.mutex.Unlock()
|
||||
|
||||
f, err := sqlite3DMLAssets.ReadFile(insertOrUpdateDeviceSQLFile)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to read file %v: %w", insertOrUpdateDeviceSQLFile, err)
|
||||
}
|
||||
|
||||
tx, err := sqlite.dbo.BeginTx(ctx, &sql.TxOptions{ReadOnly: false})
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to begin new transaction: %v", err)
|
||||
}
|
||||
defer tx.Rollback()
|
||||
|
||||
stmt, err := tx.Prepare(string(f))
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to prepare statement: %v", err)
|
||||
}
|
||||
defer stmt.Close()
|
||||
|
||||
for _, device := range devices {
|
||||
_, err = stmt.Exec(&device.ID, &device.Name, &device.Location, &device.CreationDate, &device.UpdateDate)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to execute statement: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
return tx.Commit()
|
||||
}
|
||||
|
||||
// AddMeasuredValues into the database
|
||||
func (sqlite *SQLite) AddMeasuredValues(ctx context.Context, measuredValues ...*types.MeasuredValue) error {
|
||||
sqlite.mutex.Lock()
|
||||
@ -446,14 +342,14 @@ func (sqlite *SQLite) AddOrUpdateMeasuredValues(ctx context.Context, measuredVal
|
||||
return tx.Commit()
|
||||
}
|
||||
|
||||
// AddOrUpdateDevices into the database
|
||||
func (sqlite *SQLite) AddOrUpdateDevices(ctx context.Context, devices ...*types.Device) error {
|
||||
// AddSensors into the database
|
||||
func (sqlite *SQLite) AddSensors(ctx context.Context, sensors ...*types.Sensor) error {
|
||||
sqlite.mutex.Lock()
|
||||
defer sqlite.mutex.Unlock()
|
||||
|
||||
f, err := sqlite3DMLAssets.ReadFile(insertOrUpdateDeviceSQLFile)
|
||||
f, err := sqlite3DMLAssets.ReadFile(insertSensorSQLFile)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to read file %v: %w", insertOrUpdateDeviceSQLFile, err)
|
||||
return fmt.Errorf("Failed to read file %v: %w", insertSensorSQLFile, err)
|
||||
}
|
||||
|
||||
tx, err := sqlite.dbo.BeginTx(ctx, &sql.TxOptions{ReadOnly: false})
|
||||
@ -468,8 +364,22 @@ func (sqlite *SQLite) AddOrUpdateDevices(ctx context.Context, devices ...*types.
|
||||
}
|
||||
defer stmt.Close()
|
||||
|
||||
for _, device := range devices {
|
||||
_, err = stmt.Exec(&device.ID, &device.Name, &device.Location, &device.CreationDate, &device.UpdateDate)
|
||||
for _, sensor := range sensors {
|
||||
_, err = stmt.Exec(
|
||||
&sensor.ID,
|
||||
&sensor.Name,
|
||||
&sensor.Location,
|
||||
&sensor.WireID,
|
||||
&sensor.I2CBus,
|
||||
&sensor.I2CAddress,
|
||||
&sensor.GPIONumber,
|
||||
&sensor.Model,
|
||||
&sensor.Enabled,
|
||||
&sensor.TickDuration,
|
||||
&sensor.DeviceID,
|
||||
&sensor.CreationDate,
|
||||
&sensor.UpdateDate,
|
||||
)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to execute statement: %v", err)
|
||||
}
|
||||
@ -524,50 +434,12 @@ func (sqlite *SQLite) AddOrUpdateSensors(ctx context.Context, sensors ...*types.
|
||||
return tx.Commit()
|
||||
}
|
||||
|
||||
// AddSensors into the database
|
||||
func (sqlite *SQLite) AddSensors(ctx context.Context, sensors ...*types.Sensor) error {
|
||||
// Close closes the database and prevents new queries from starting. Close then
|
||||
// waits for all queries that have started processing on the server to finish.
|
||||
func (sqlite *SQLite) Close() error {
|
||||
sqlite.mutex.Lock()
|
||||
defer sqlite.mutex.Unlock()
|
||||
|
||||
f, err := sqlite3DMLAssets.ReadFile(insertSensorSQLFile)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to read file %v: %w", insertSensorSQLFile, err)
|
||||
}
|
||||
|
||||
tx, err := sqlite.dbo.BeginTx(ctx, &sql.TxOptions{ReadOnly: false})
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to begin new transaction: %v", err)
|
||||
}
|
||||
defer tx.Rollback()
|
||||
|
||||
stmt, err := tx.Prepare(string(f))
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to prepare statement: %v", err)
|
||||
}
|
||||
defer stmt.Close()
|
||||
|
||||
for _, sensor := range sensors {
|
||||
_, err = stmt.Exec(
|
||||
&sensor.ID,
|
||||
&sensor.Name,
|
||||
&sensor.Location,
|
||||
&sensor.WireID,
|
||||
&sensor.I2CBus,
|
||||
&sensor.I2CAddress,
|
||||
&sensor.GPIONumber,
|
||||
&sensor.Model,
|
||||
&sensor.Enabled,
|
||||
&sensor.TickDuration,
|
||||
&sensor.DeviceID,
|
||||
&sensor.CreationDate,
|
||||
&sensor.UpdateDate,
|
||||
)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to execute statement: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
return tx.Commit()
|
||||
return sqlite.dbo.Close()
|
||||
}
|
||||
|
||||
// Migrate creates all required tables if not exist
|
||||
@ -1171,6 +1043,134 @@ func (sqlite *SQLite) GetTemperatures(ctx context.Context) ([]*types.MeasuredVal
|
||||
return measuredValues, nil
|
||||
}
|
||||
|
||||
// RemoveDevices from the database
|
||||
func (sqlite *SQLite) RemoveDevicesByIDs(ctx context.Context, deviceIDs ...string) error {
|
||||
sqlite.mutex.Lock()
|
||||
defer sqlite.mutex.Unlock()
|
||||
|
||||
f, err := sqlite3DMLAssets.ReadFile(deleteDeviceByIDSQLFile)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to read file %v: %w", deleteDeviceByIDSQLFile, err)
|
||||
}
|
||||
|
||||
tx, err := sqlite.dbo.BeginTx(ctx, &sql.TxOptions{ReadOnly: false})
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to begin new transaction: %v", err)
|
||||
}
|
||||
defer tx.Rollback()
|
||||
|
||||
stmt, err := tx.Prepare(string(f))
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to prepare statement: %v", err)
|
||||
}
|
||||
defer stmt.Close()
|
||||
|
||||
for _, deviceID := range deviceIDs {
|
||||
_, err = stmt.Exec(deviceID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return tx.Commit()
|
||||
}
|
||||
|
||||
// RemoveDevices from the database
|
||||
func (sqlite *SQLite) RemoveDevicesByNames(ctx context.Context, names ...string) error {
|
||||
sqlite.mutex.Lock()
|
||||
defer sqlite.mutex.Unlock()
|
||||
|
||||
f, err := sqlite3DMLAssets.ReadFile(deleteDeviceByNameSQLFile)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to read file %v: %w", deleteDeviceByNameSQLFile, err)
|
||||
}
|
||||
|
||||
tx, err := sqlite.dbo.BeginTx(ctx, &sql.TxOptions{ReadOnly: false})
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to begin new transaction: %v", err)
|
||||
}
|
||||
defer tx.Rollback()
|
||||
|
||||
stmt, err := tx.Prepare(string(f))
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to prepare statement: %v", err)
|
||||
}
|
||||
defer stmt.Close()
|
||||
|
||||
for _, deviceID := range names {
|
||||
_, err = stmt.Exec(deviceID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return tx.Commit()
|
||||
}
|
||||
|
||||
// RemoveSensors from the database
|
||||
func (sqlite *SQLite) RemoveSensorsByIDs(ctx context.Context, sensorIDs ...string) error {
|
||||
sqlite.mutex.Lock()
|
||||
defer sqlite.mutex.Unlock()
|
||||
|
||||
f, err := sqlite3DMLAssets.ReadFile(deleteSensorByIDSQLFile)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to read file %v: %w", deleteSensorByIDSQLFile, err)
|
||||
}
|
||||
|
||||
tx, err := sqlite.dbo.BeginTx(ctx, &sql.TxOptions{ReadOnly: false})
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to begin new transaction: %v", err)
|
||||
}
|
||||
defer tx.Rollback()
|
||||
|
||||
stmt, err := tx.Prepare(string(f))
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to prepare statement: %v", err)
|
||||
}
|
||||
defer stmt.Close()
|
||||
|
||||
for _, sensorID := range sensorIDs {
|
||||
_, err = stmt.Exec(sensorID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return tx.Commit()
|
||||
}
|
||||
|
||||
// RemoveSensors from the database
|
||||
func (sqlite *SQLite) RemoveSensorsByNames(ctx context.Context, names ...string) error {
|
||||
sqlite.mutex.Lock()
|
||||
defer sqlite.mutex.Unlock()
|
||||
|
||||
f, err := sqlite3DMLAssets.ReadFile(deleteSensorByNameSQLFile)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to read file %v: %w", deleteSensorByNameSQLFile, err)
|
||||
}
|
||||
|
||||
tx, err := sqlite.dbo.BeginTx(ctx, &sql.TxOptions{ReadOnly: false})
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to begin new transaction: %v", err)
|
||||
}
|
||||
defer tx.Rollback()
|
||||
|
||||
stmt, err := tx.Prepare(string(f))
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to prepare statement: %v", err)
|
||||
}
|
||||
defer stmt.Close()
|
||||
|
||||
for _, sensorID := range names {
|
||||
_, err = stmt.Exec(sensorID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return tx.Commit()
|
||||
}
|
||||
|
||||
// UpdateDevices updates a device in the database
|
||||
func (sqlite *SQLite) UpdateDevices(ctx context.Context, devices ...*types.Device) error {
|
||||
sqlite.mutex.Lock()
|
||||
|
Reference in New Issue
Block a user