mirror of
https://github.com/bitechdev/ResolveSpec.git
synced 2025-12-30 08:14:25 +00:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dc3b621380 | ||
|
|
a4dd2a7086 |
@@ -71,14 +71,14 @@ func (n *SqlNull[T]) Scan(value any) error {
|
|||||||
// Fallback: parse from string/bytes.
|
// Fallback: parse from string/bytes.
|
||||||
switch v := value.(type) {
|
switch v := value.(type) {
|
||||||
case string:
|
case string:
|
||||||
return n.fromString(v)
|
return n.FromString(v)
|
||||||
case []byte:
|
case []byte:
|
||||||
return n.fromString(string(v))
|
return n.FromString(string(v))
|
||||||
default:
|
default:
|
||||||
return n.fromString(fmt.Sprintf("%v", value))
|
return n.FromString(fmt.Sprintf("%v", value))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func (n *SqlNull[T]) fromString(s string) error {
|
func (n *SqlNull[T]) FromString(s string) error {
|
||||||
s = strings.TrimSpace(s)
|
s = strings.TrimSpace(s)
|
||||||
n.Valid = false
|
n.Valid = false
|
||||||
n.Val = *new(T)
|
n.Val = *new(T)
|
||||||
@@ -156,7 +156,7 @@ func (n *SqlNull[T]) UnmarshalJSON(b []byte) error {
|
|||||||
// Fallback: unmarshal as string and parse.
|
// Fallback: unmarshal as string and parse.
|
||||||
var s string
|
var s string
|
||||||
if err := json.Unmarshal(b, &s); err == nil {
|
if err := json.Unmarshal(b, &s); err == nil {
|
||||||
return n.fromString(s)
|
return n.FromString(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
return fmt.Errorf("cannot unmarshal %s into SqlNull[%T]", b, n.Val)
|
return fmt.Errorf("cannot unmarshal %s into SqlNull[%T]", b, n.Val)
|
||||||
@@ -514,6 +514,30 @@ func Null[T any](v T, valid bool) SqlNull[T] {
|
|||||||
return SqlNull[T]{Val: v, Valid: valid}
|
return SqlNull[T]{Val: v, Valid: valid}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewSql[T any](value any) SqlNull[T] {
|
||||||
|
n := SqlNull[T]{}
|
||||||
|
|
||||||
|
if value == nil {
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fast path: exact match
|
||||||
|
if v, ok := value.(T); ok {
|
||||||
|
n.Val = v
|
||||||
|
n.Valid = true
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try from another SqlNull
|
||||||
|
if sn, ok := value.(SqlNull[T]); ok {
|
||||||
|
return sn
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert via string
|
||||||
|
_ = n.FromString(fmt.Sprintf("%v", value))
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
|
||||||
func NewSqlInt16(v int16) SqlInt16 {
|
func NewSqlInt16(v int16) SqlInt16 {
|
||||||
return SqlInt16{Val: v, Valid: true}
|
return SqlInt16{Val: v, Valid: true}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -784,7 +784,8 @@ func TestReplaceMetaVariables(t *testing.T) {
|
|||||||
userCtx := &security.UserContext{
|
userCtx := &security.UserContext{
|
||||||
UserID: 123,
|
UserID: 123,
|
||||||
UserName: "testuser",
|
UserName: "testuser",
|
||||||
SessionID: "456",
|
SessionID: "ABC456",
|
||||||
|
SessionRID: 456,
|
||||||
}
|
}
|
||||||
|
|
||||||
metainfo := map[string]interface{}{
|
metainfo := map[string]interface{}{
|
||||||
@@ -821,6 +822,12 @@ func TestReplaceMetaVariables(t *testing.T) {
|
|||||||
expectedCheck: func(result string) bool {
|
expectedCheck: func(result string) bool {
|
||||||
return strings.Contains(result, "456")
|
return strings.Contains(result, "456")
|
||||||
},
|
},
|
||||||
|
}, {
|
||||||
|
name: "Replace [id_session]",
|
||||||
|
sqlQuery: "SELECT * FROM sessions WHERE session_id = [id_session]",
|
||||||
|
expectedCheck: func(result string) bool {
|
||||||
|
return strings.Contains(result, "ABC456")
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user