mirror of
https://github.com/wavetermdev/backup.git
synced 2026-08-05 13:57:07 -07:00
fix nil checking in dbutil (typed nils)
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE remote DROP COLUMN statevars;
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE remote ADD COLUMN statevars json NOT NULL DEFAULT '{}';
|
||||
|
||||
+9
-2
@@ -58,7 +58,7 @@ CREATE TABLE remote (
|
||||
local boolean NOT NULL,
|
||||
archived boolean NOT NULL,
|
||||
remoteidx int NOT NULL
|
||||
);
|
||||
, statevars json NOT NULL DEFAULT '{}');
|
||||
CREATE TABLE history (
|
||||
historyid varchar(36) PRIMARY KEY,
|
||||
ts bigint NOT NULL,
|
||||
@@ -192,10 +192,17 @@ CREATE TABLE IF NOT EXISTS "cmd" (
|
||||
rtndiffhasharr json NOT NULL,
|
||||
PRIMARY KEY (screenid, cmdid)
|
||||
);
|
||||
CREATE TABLE screenupdates (
|
||||
CREATE TABLE screenupdate (
|
||||
updateid integer PRIMARY KEY,
|
||||
screenid varchar(36) NOT NULL,
|
||||
lineid varchar(36) NOT NULL,
|
||||
updatetype varchar(50) NOT NULL,
|
||||
updatets bigint NOT NULL
|
||||
);
|
||||
CREATE TABLE webptypos (
|
||||
screenid varchar(36) NOT NULL,
|
||||
lineid varchar(36) NOT NULL,
|
||||
ptypos bigint NOT NULL,
|
||||
PRIMARY KEY (screenid, lineid)
|
||||
);
|
||||
CREATE INDEX idx_screenupdate_ids ON screenupdate (screenid, lineid);
|
||||
|
||||
+21
-6
@@ -4,6 +4,7 @@ import (
|
||||
"database/sql/driver"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"reflect"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
@@ -130,8 +131,22 @@ func QuickSetJsonArr(ptr interface{}, m map[string]interface{}, name string) {
|
||||
json.Unmarshal(barr, ptr)
|
||||
}
|
||||
|
||||
func CheckNil(v interface{}) bool {
|
||||
rv := reflect.ValueOf(v)
|
||||
if !rv.IsValid() {
|
||||
return true
|
||||
}
|
||||
switch rv.Kind() {
|
||||
case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Pointer, reflect.Slice:
|
||||
return rv.IsNil()
|
||||
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
func QuickNullableJson(v interface{}) string {
|
||||
if v == nil {
|
||||
if CheckNil(v) {
|
||||
return "null"
|
||||
}
|
||||
barr, _ := json.Marshal(v)
|
||||
@@ -139,7 +154,7 @@ func QuickNullableJson(v interface{}) string {
|
||||
}
|
||||
|
||||
func QuickJson(v interface{}) string {
|
||||
if v == nil {
|
||||
if CheckNil(v) {
|
||||
return "{}"
|
||||
}
|
||||
barr, _ := json.Marshal(v)
|
||||
@@ -147,7 +162,7 @@ func QuickJson(v interface{}) string {
|
||||
}
|
||||
|
||||
func QuickJsonBytes(v interface{}) []byte {
|
||||
if v == nil {
|
||||
if CheckNil(v) {
|
||||
return []byte("{}")
|
||||
}
|
||||
barr, _ := json.Marshal(v)
|
||||
@@ -155,7 +170,7 @@ func QuickJsonBytes(v interface{}) []byte {
|
||||
}
|
||||
|
||||
func QuickJsonArr(v interface{}) string {
|
||||
if v == nil {
|
||||
if CheckNil(v) {
|
||||
return "[]"
|
||||
}
|
||||
barr, _ := json.Marshal(v)
|
||||
@@ -163,7 +178,7 @@ func QuickJsonArr(v interface{}) string {
|
||||
}
|
||||
|
||||
func QuickJsonArrBytes(v interface{}) []byte {
|
||||
if v == nil {
|
||||
if CheckNil(v) {
|
||||
return []byte("[]")
|
||||
}
|
||||
barr, _ := json.Marshal(v)
|
||||
@@ -186,7 +201,7 @@ func QuickScanJson(ptr interface{}, val interface{}) error {
|
||||
}
|
||||
|
||||
func QuickValueJson(v interface{}) (driver.Value, error) {
|
||||
if v == nil {
|
||||
if CheckNil(v) {
|
||||
return "{}", nil
|
||||
}
|
||||
barr, err := json.Marshal(v)
|
||||
|
||||
+2
-2
@@ -123,7 +123,7 @@ func isStringMapType(t reflect.Type) bool {
|
||||
}
|
||||
|
||||
func ToDBMap(v DBMappable, useBytes bool) map[string]interface{} {
|
||||
if v == nil {
|
||||
if CheckNil(v) {
|
||||
return nil
|
||||
}
|
||||
rv := reflect.ValueOf(v)
|
||||
@@ -168,7 +168,7 @@ func ToDBMap(v DBMappable, useBytes bool) map[string]interface{} {
|
||||
}
|
||||
|
||||
func FromDBMap(v DBMappable, m map[string]interface{}) {
|
||||
if v == nil {
|
||||
if CheckNil(v) {
|
||||
panic("StructFromDBMap, v cannot be nil")
|
||||
}
|
||||
rv := reflect.ValueOf(v)
|
||||
|
||||
Reference in New Issue
Block a user