fix nil checking in dbutil (typed nils)

This commit is contained in:
sawka
2023-03-29 12:40:53 -07:00
parent 2277e16749
commit 5480d5d7f6
5 changed files with 36 additions and 10 deletions
+2
View File
@@ -0,0 +1,2 @@
ALTER TABLE remote DROP COLUMN statevars;
+2
View File
@@ -0,0 +1,2 @@
ALTER TABLE remote ADD COLUMN statevars json NOT NULL DEFAULT '{}';
+9 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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)