add 'digest(length)' type checker + minfix import in cmd/main
This commit is contained in:
parent
b1092437f9
commit
f9a928c181
|
@ -2,7 +2,6 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.xdrm.io/go/aicra/driver"
|
|
||||||
"git.xdrm.io/go/aicra/internal/clifmt"
|
"git.xdrm.io/go/aicra/internal/clifmt"
|
||||||
"git.xdrm.io/go/aicra/internal/config"
|
"git.xdrm.io/go/aicra/internal/config"
|
||||||
"os"
|
"os"
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.xdrm.io/go/aicra/driver"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {}
|
||||||
|
func Export() driver.Checker { return new(DigestChecker) }
|
||||||
|
|
||||||
|
type DigestChecker struct {
|
||||||
|
Length *uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
// Match filters the parameter type format "varchar(min, max)"
|
||||||
|
func (dck *DigestChecker) Match(name string) bool {
|
||||||
|
|
||||||
|
dck.Length = nil
|
||||||
|
|
||||||
|
/* (1) Check prefix/suffix */
|
||||||
|
if len(name) < len("digest(x)") || !strings.HasPrefix(name, "digest(") || name[len(name)-1] != ')' {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (2) Extract length */
|
||||||
|
lengthStr := name[len("digest(") : len(name)-1]
|
||||||
|
|
||||||
|
length, err := strconv.ParseUint(lengthStr, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
dck.Length = &length
|
||||||
|
|
||||||
|
return true
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check whether the given value fulfills the condition (min, max)
|
||||||
|
func (dck *DigestChecker) Check(value interface{}) bool {
|
||||||
|
|
||||||
|
/* (1) Check if sizes set */
|
||||||
|
if dck.Length == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (2) Check if string */
|
||||||
|
strval, ok := value.(string)
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
length := uint64(len(strval))
|
||||||
|
|
||||||
|
/* (3) Check length */
|
||||||
|
if length != *dck.Length {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (4) Check character set */
|
||||||
|
for _, char := range strval {
|
||||||
|
if !isValidCharacter(char) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func isValidCharacter(char rune) bool {
|
||||||
|
return (char >= '0' && char <= '9') || (char >= 'a' && char <= 'f')
|
||||||
|
}
|
Loading…
Reference in New Issue